水曜日, 3月 15, 2017

#OCJP-136: 「FHAPPI」 Geocities.jpとPoison Ivy(スパイウェア)のAPT事件

Please click here to read the translation in English, translated by the El Kentaro

1.はじめに


*)本APT攻撃の目標をもっと知りたいなら、私の Q & A (英文)インタビュー内容をご確認ください。


ついさっき VXRL(credit)から連絡があり、あるAPTフィッシングメールのURLでマルウェアをダウンロードしているようです。URLは国内のGeocitiesさんのお客様サイトで、早く削除が欲しいとの問い合わせでした。

サンプル/証拠:

※)APT攻撃のフィッシングメールですので、ここで全てのメール情報を見せる事が出来ません。

どんなマルウェアを聞いていたら、情報が不明で、僕の方で色んなシグネチャーを確認したら検知率はゼロとの事で、これじゃマルウェアの証明が無いと多分Geocitiesさんも対応してくれないだとうと、僕の方で本件のAPT解析をしました。

この解析の結果を使ってマルウェア駆除の参考情報にしてください。
|APTとは?
|
|APT攻撃(標的型攻撃)とは、サイバー攻撃の一種で、特定のターゲットに対して持続的に
|攻撃・潜伏を行い、様々な手法を駆使して執拗なスパイ行為や妨害行為などを行うタイプの
|攻撃の総称である。 
URLを見たらGeoCitiesジャパンのサイトですね、Geocitiesジャパン自体はマルウェアのサイトではありませんが、フレーウェブホスティングとして国内の皆様はこのGeocitiesでブログやホームページを作ったりしますね。



但し、GeoCitiesジャパンの「vbiayay1」アカウントに本件のマルウェアファイルがありました↑↑

中身はVBScriptでコード化された(encoded)スクリプトですね↓



これは「 ('ω')ワオーー!」って感じですね。Geocities.JPでこういう物があるのは初めて見たし、
どう見ても怪しいファイルなので、調査しました。
|VBScriptはVisual Basicのサブセットであり、Visual BasicまたVBAマクロを使ったことが
|ある人にはきわめてなじみが深いものでしょう。
|ただし、VBScript はこれらの言語とまったく同じではありません。VBScriptはブラウザ内
|での動作を目的に設計されているので、ファイル アクセスや印刷など、
|一般にスクリプティングの範囲を超えている機能は含まれていません。
|Microsoft VBScript は Windows Script Host 又は PowerShell 環境の上で実行が出来ます。

2.ベース64のクラッキング段取りw


先ずは手動で(read: manual)VBScriptでコード化された物をデコードすると、下記のコードが出ます↓


↑デコードの仕方を知りたいなら@malwaremustdieのDMへご連絡ください

出て来たコードはWindows Script Host(ウインドウズ・スクリプト・ホスト)のVBScriptで、シェル(read: CMD)の
オブジェクトを作った後に「run」の行動(read: "action")経由で下記のコマンドが実行されます↓
powershell.exe -w hidden -ep bypass -Enc ふがほげなどなど...

意味合い的には、スクリプト実行の時にpowershellさんはアウトプットを隠して(hidden)、認証無しで(ep=ExecutionPolicyをバイパスする)ベース64コード化されたコマンド(Enc=EncodedCommand)を実行します。


|Windows PowerShell はマイクロソフトが開発した拡張可能なコマンドライン
|インターフェース (CLI)シェルおよびスクリプト言語である。
|オブジェクト指向に基づいて設計されており、.NET Frameworkを基盤としている。
|
|かつてはMicrosoft Shell(MSH、コードネーム Monad)と呼ばれていた。
なるほど、それでは「ふがほげなどなど」の分をデコードしますと、下記のスクリプトが出てきます↓



↑またVBScriptが見えますね、今回のスクリプトの意味は↓
ウェブクライアントのオブジェクトが作られ、プロキシ環境設定やユーザ権限のままでとあるURLからファイルをダウンロードし、そして実行されます。

これでDOC(MSワード)ファイルが開けます。


そして、IEXとはInvoke-Expressionで、IEXのコマンドレットを使用すると、Windows PowerShell からスクリプトを実行できますので、もう一つのURLに書いた .ps1 のファイルをダウンロードされ、実行されますね。

その .ps1 のファイル中身を確認しましょう ↓



↑また別途ベース64がありますね!そして、また IEX のコマンドでデコードされると書いてあります。

どうやらこのハッカーはベース64文字列が大好きそうで、しょうがないで手動でデコードしましょう↓



↑ デコードしたら、上記のようにまたベース64コードが出て来た! (_ _|||);;;;

今回は感染のコードを見れるようになりました。ベース64の中に絶対マルウェアpayloadがあります。

そしてWindows OS の 32ビット と 64ビット の感染方法も書いてありますね。偽「SecurityUpdate」プロセスを隠しながら(また)powershell.exeでベース64のコードを「IEX」コマンドでデコードされ、実行されますね。

では、もう一度ベース64をデコードしましょう!!

デコードしたら2件の関数とシェルコードを見えますね↓







3.PowerSploit/CodeExecution PoCのぱくり


うむ、この最後の仕組みって何処かで見た事がある気がしますので、さくっとMalwareMustDie内のツイート情報を確認したら、やはり「GitHub」サイトからのコピペされた PowerSploit/CodeExecution 「PoCコード」ですね、リンクはこちらです。



コピペ万歳!ですね..

この原因でマルウェアコードをパブリックで公開するのは反対です!
まさに「GitHub」にはものすごい沢山あります T_T);;

4.シェルコード


本件の感染の仕組部分は「PowerSploit/CodeExecution」研究 PoC のぱくりで、オリジナルの物はシェルコードの部分とベース64のエンコディングを沢山使っている事です。

そして、シェルコードを見る為に、結局またもう一度ベース64でデコードしなければなりません↓(-。-;;

 $Shellcode = [System.Convert]::FromBase64String($Shellcode32)

デコード終わったらシェルコードの見た目(頭の分)はこんな感じでーす↓



このままでリバーシングしてもOKですし、時間が少しかかるかも...



この辺にXORが必要、キーは「0xe9」、バイトの長さは「0x2183」、XORの結果がPoison Ivyのマルウェアとなります。そしてセカンドシェルコードをuserinit.exeの偽プロセスにインジェックされます。



海外からの問い合わせが来た時に、もうそろそろ寝る時間だし、今回長い調査の時間が取れないので、
いい方法をシェアします!

僕はアセンブリでこのシェルコードを使い PE バイナリファイルを作ってみました。
シェルコードのデータをPEファイルの .text セクションに保存、そして entry point (EP)はコンパイルで作れます。
このベースでシェルコードを調査すると結構便利ですよ(^-^v 
さらにUNIXでこの PE を作れますから感染される可能性はゼロです。
(本件の調査を殆どFreeBSDのシェルでやりました)



そのままFreeBSDで gcc 若しくは nasm でコンパイルすると、PEが出来上がりました↓



ここでシェルコードの解析がなんでも可能になって、部分を分析調査でも出来るし、行動調査も問題ありません(^-^v

で、見たら色々マルウェアの動きを発見し、結局このシェルコードが感染されたPCの情報を取り、C2にコールバックを行い、
その他の感染関係の動きもやっているそうですね。
説明をすると長いので、全体的なシェルコードの動きを紙で図に書いて、一応解析時のドラフトとなります↓


(後時間が出来たら綺麗にしますよ。さらにマルウェアの犯人もこのブログを見る可能性があるので、対応が終わったら綺麗にしますね。)

|シェルコードとは?
|
|シェルコード(英: Shellcode)とは、コンピュータセキュリティにおいて、ソフトウェアのセキュリティホールを
|利用するペイロードとして使われるコード断片である。シェルコードは機械語で書かれることが多い。
|
|侵入したマシンを攻撃者が制御できるようにするため、シェルを起動することが多い。
|
|シェルコードは単にシェルを起動するだけとは限らないため、シェルコードという名称は不十分だとも言われている。
|しかし、他の用語は今のところ定着していない。

5.POISON IVY


powershell.exeのスクリプトでインジェックされつシェルコードのDLLコールのサイズが大きいです。
シェルコード自体のサイズも大きいですね。
全部洗い出したらこんな感じです↓ (フォレンジックス調査で取った情報/dump解析)



初めて「Poison Ivy」に気づいたのは最初段階の解析です↓ (アセンブリ・デバッギングの解析)



見たとおり、偽「userinit.exe」のプロセスが作られて、そのプロセスに(malicious)シェルコードをインジェックされ、そして実行されます。プロセス情報を見たら悪い板の「userinit.exe」プロセスが出てきたわけです。これは、よく、Poison Ivyさんがやっている感染仕方です。次は、使われたコールの件 CreateProcessA と LoadLibraryA や SetThreadContext が KERNEL32.DLLで他はコールは殆ど KERNELBASE.DLLで、Poison Ivyのシェルコード意外にこの組み合わせを中々見た事がありません。後は、MUTEX名の部分に「20170301」があり、それはキャンペーンの日付で、Poison Ivyのキャラです。

全体的な Poison Ivy の行動をリバーシングモードで見たいなら、上記の PE でコンパイルでもOKですが、もし時間があったらそして勉強したい場合XORで解読したバイナリを読んだほうがいいと思います。本件の対応が終わった後に私もゆっくり読みました。そのままで情報も見えるし難しくないと思います。キャンペーン情報、Poison Ivyのバーション、使ったホスト名、ドロップファイル名、DLLやDLLの関数となどなどをを全部見えます。
FreeBSDでのradare2のXORで解読したバイナリのスクリーンショットは下記となります↓






もう一つシェルコードについて(シェルコードの中にシェルコードがある)


「userinit.exe」にインジェックされたシェルコードを明確に見ると↓



このセカンドシェルコードは PowerSploit(powershell.exeのマルウェアスクリプト) がファーストシェルコードをインジェックした時にXORで解読されていた物で、ファースト・シェルコードが userinit.exe にセカンド・シェルコードをインジェックしました。




↑これだけですと何物かが分かりませんから、バイナリーモードをでシェールコードを見たら↓



今「CreateThread」の単語が出てきましたので、結構怪しいですね。
シェルコードの機械語のタイプはx86-32で、サイズは「255」だと分かりました。
先ずはフローを見ましょう!



上記のシェルコードを起動されたら VirtualAlloc, CreateThread, LookupPrivilegeValueA, AdjustTokenPrivileges, CreateFileA, getsockname, sleep, GetComputerNameA, GetPriorityClass, SetPriorityClass のコールをループで実行されています。コールされた関すはカーネルにロードしたkernel32.dll,advapi.dll, ws2_32.dll と kernelbase.dllライブラリのメモリアドレスです。

感染された状況のメモリマップを取りましたら、シェルコードでコールしたアドレスのカーネルでロードされたDLLのコールが完全に分かりました。セカンドシェルコードのDLLコール仕方は2件を使い、「Hint」アドレス、そして「RVA」のアドレスです。確認の為にWindows用のツールも御座います、例えばPE Dumperなど。このツールを使えばハッカーがシェルコードを作れますが、同じツールで私はそのシェルコードの解析も出来ます。両方DLLの「Hint」アドレス、そして「RVA」のアドレスを見れますので、この方法でセカンドシェルコードがコールした関数が分かりました。

私のテスト用のPCでkernel.dllのPE Dumperスナップショットで情報を洗い出したら例えば下記の画像↓




2番目のシェールコードを動かしたら解析的に下記の情報となります。欠いたのは頭の分だけで、全体的な解析はもっと長いけど、この次のグラフ画像で情報を見れます。



↑userinit.exeさんは「Plug1.dat」ファイルを作ろうとしていた。そして、ソケットを開き、PC情報をレジストリの「HKEY_LOCAL_MACHINE\SYSTEM\Setup の SystemSetupInProgress」から引っ張りますね。その情報をあとで暗号化されて、リモートに送信する積りと分かっています。そして、その後などなどのマルウェア関係プロセスもまだあります。これでループされていて、9回目のループで私がプロセスを止めました、セーフされた「Plug%n.dat」ファイルは Plug9.dat 迄です。

255バイトのシェルコードを実行される後の順番的な行動分析の動きが分かります。
綺麗に分析をすると下記ようなグラフとなりま↓



※)メモ: 手で書いた図について、userinit.exeのプロセスと続いて2番目のシェルコードの行動を書いてあります。

ここ迄のシェルコードの動きを見るとこのマルウェアが「Poison Ivy」だという事が完全に分かりましたね!

6.CNCとネットワークトラフィック


短くにすると、次の細かいの解析を放っておいて、「userinit.exe」の行動された段階で、WS2_32.DLLコールの部分だけ気になるので、そこで socket()、そして gethostbyname()connect() があり、データを洗い出しました。ここでコールバックのホスト名とIPが分かりました。

IPアドレス自体は韓国にあるダイアルアップIP「61.97.243.15」で、↓ (デバッギング解析)


ネットワーク/BGP情報→「61.97.243.15||4766 | 61.97.243.0/24 | KIXS-AS | KR | kisa.or.kr | KRNIC」

ホスト名は「web.outlooksysm.net」ですね↓(デバッギング解析)



web.outlooksysm.net の whois を見たら中国の registrant 情報が出ましたね↓

Domain Name: outlooksysm.net
Registry Domain ID: 10632213
Registrar WHOIS Server: grs-whois.cndns.com
Registrar URL: http://www.cndns.com
Updated Date: 2016-05-27T11:24:02Z
Create Date: 2016-05-27T11:19:45Z
Registrar Registration Expiration Date: 2017-05-27T11:19:45Z
Registrar: SHANGHAI MEICHENG TECHNOLOGY INFORMATION DEVELOPMENT CO., LTD.
Registrar IANA ID: 1621
Registrar Abuse Contact Email: domain@cndns.com
Registrar Abuse Contact Phone: +86.2151697771
Reseller: (null)
Domain Status: ok https://icann.org/epp#ok
Registry Registrant ID:
Registrant Name: Liu Ying
Registrant Organization: Liu Ying
Registrant Street: Nan An Shi Jing Hua Lu 88Hao
Registrant City: NanAnShi
Registrant State/Province: FuJian
Registrant Postal Code: 009810
Registrant Country: CN
Registrant Phone : +86.13276905963
Registrant Phone Ext:
Registrant Fax: +86.13276905963
Registrant Fax Ext:
Registrant Email: missliu6@sina.com
ここで犯人は何処からの人かが分かりましたね。

解析だけじゃ証拠にならないので、しかたがなく安全な方法でシェルコードのPEファイル版を行動分析調査として実行しました。そしてCNC/C2のやり取りを完全に見れます↓ (行動解析とフォレンジックス)



そのやり取りのデータを解読したら私のテストPC情報を発見しましたww(@。@;;



最初の送信されたトラフィックを計算したら、サイズが「256」バイト(bytes)ですので、すっごく気になりますが↓



中身を見て、そしていくつかリファレンスを比べたら、この「256」バイトは間違いなく「Poison IVY」RATの最初トラフィック(Challenge and Response Traffic of Poison Ivy)ですね↓



|「Poison IVY」とは?
|
|Poison IVY又はPIVYは、RAT (Remote Administration Tool)というバックドア型のマルウェアです。
|スパイの目的で作られたマルウェアで、Poison IVYが標的型攻撃(APT)で沢山確認されています。

7.結論


本APT攻撃の仕組みは何時ものパターンで、被害者にメールを送って、DOCのダウンロードみたいなリンク経由で被害者を騙して、クリックされたら VBScript のマルウェアコードをダウンロードしてしまい、その VBScript から DOCファイルをダウンロードして、そして開きます。裏で静かにPowerShell(PowerSploit)の方法で Poison Ivy の感染シェルコードを被害者のPCのメモリ上でプロセスをインジェックします。

本件の感染仕方がよく考えられたと思います。先ずはPowerSploit経由プロセス・インジェックションでシェルコードを動かしてから、またシェルコードでのプロセスインジェックションを実行する仕組みはとても見にくい仕組みですね。インジェックされた Poison Ivy の仕組みはよくファイルレス(ファイルを利用しない)と呼ばれている仕組みです。また、検知をすり抜ける方法も結構大変なエフォートで作られていた(マルチプルコード化される事とペイロードのラッピング仕組み)。今回の攻撃には中国経由のネットワークが使われず、目的はネットワークのブロックをすり抜けるようにアタッカーが考えていたと思われます。今まで出た Poison Ivy の感染事件と比べると今回の感染成功確立が非常に高いです。

変数された PowerSploit PoC のコードをAPT感染の為に利用された事が初めて見ましたね。この件の注意が必要です。

本APTキャンペーンはGeoctiesジャパンのいくつかアカウントを悪用していますので、恐らく現在APT攻撃キャンペーンが動いている最中です。国内では見た事がない仕組みですので、国内の研究仲間と友人と相談したらFHAPPI (ファッピ) = "Free Hosting (pivoted) APT PowerSploit Poison Yvy"のAPT攻撃キャンペーンの名前で決めました。
Credit: El Kentaro (FHAPPIアイデアとロゴ、credit), Luffy, Syota Shinogi 、Ino Yuji (credit) ++

やられていた海外の人が非常に可愛そうなので、真剣に、早めにGEOCITIES.JPの「vbiayay1」アカウントにある「POISON IVY」感染マルウェアのファイルを削除して欲しいです。この調査を証拠としてご対応をお願い致します。

そして、韓国にあるIP「61.97.243.15」は間違いなくPOISON IVYのCNCですので、暫くブロックしてた方がいいと思います。

フィッシングメールの送り元のメアドに付いて、GMailに報告済みですが、アドレスは下記となります↓
wisers.data@gmail.com
health.pro.demo30@gmail.com
また別途APT攻撃を使う可能性があるので、ブロックした方がいいです。

最後に、マルウェアのソースコード、PoCでも、成るべくパブリックで公開しないで欲しいですね。

8.サンプル


本件の対応が未だ途中ですので、ハッシュのみでサンプルを報告します。
ハッシュは下記となります。対応が終わったらVTのURLを追加致します。

MD5 (Meeting_xxx.doc)   = 0011fb4f42ee9d68c0f2dc62562f53e0
MD5 (xxx0301.ps1)       = b862a2cfe8f79bdbb4e1d39e0cfcae3a
MD5 (xxx0301.wsc)       = 7c9689e015563410d331af91e0a0be8c
MD5 (shellcode-bin)        = cb9a199fc68da233cec9d2f3d4deb081
MD5 (stupid-shellcode.exe) = 661d4e056c8c0f6804cac7e6b24a79ec

その他Geocitiesアカウントからのサンプル (credit: Syota Shinogi)
MD5 (f0921.ps1)            = e798a7c33a58fc249965ac3de0fee67b

9.追加情報



9.1.その他Geocitiesアカウントの発見について

Syota Shinogiさん(credit)がリサーチを手伝ってくれて、報告が頂き、彼は別のGeocitiesジャパンアカウントを発見されました。

同じPowerSploitで作られたシェルコードの感染ですので、DOCファイルはモンゴル語の文書ですので、
恐らくモンゴル国の方がターゲットされていると思います

スクリーンショットは下記となります↓






9,2.ファイル名とAPT情報について

本APT攻撃キャンペーンのURLに攻撃関係の情報が書いてあります↓



ここで攻撃の日付、ターゲットのID、そして恐らく何番のバーション/シリーズの情報を見れます。


9.3.本APTのマルウェアファイル駆除お知らせ

Yahoo Incident Response Division(YIRD)さん、JP-CERT/CCさんと国内セキュリティ仲間の皆さんから御協力頂き、マルウェアファイルがサーバに駆除されました。

無くなりましたファイル一覧は下記となります↓


※)駆除確認時間は平成29年3月11日の朝10時頃

御協力頂き有難う御座います。


9.4.モンゴルのFHAPPIキャンペーンの解析調査結果について


モンゴル・キャンペーンの件ですが、感染の仕組みは同じです。キャンペーンの日付を見たら昨年の9月頃ですね。
悪用されたGeocitiesさんのユーザ名は「lgxpoy6」でした。

サンプルが古い、ドメインも無くなったが、取りあえず出来る事をたろう、解析しましょう!

最初のインストーラースクリプトはベース64で隠してなかった。
VBscriptが使われたけどコード化されてなく、そして直接に powershell.exe を実行される、powershell.exe 実行仕方は上記の解析した別のキャンペーンと同じ遣り方ですね↓



powershell.exe で実行されるエンコードコマンドも同じフォーマットで↓



モンゴル語のデコイ資料↓



PowerSploit 経由でマルウェアをメモリにインジェックされます、この部分は変わってなかった↓



シェルコードのデサインも少し違う↓



モンゴル系キャンペーンではXORも必要、キー違う「0xd4」ですね、バイトの長さは同じ「0x2183」。



モンゴル系キャンペーンのCNCのIPは中国となります。下記のIPアドレスですね↓



IP/BGP情報: 116.193.154.28 | 116-193-154-28.pacswitch.net. | AS4766 | JIULINGQIHANG-CN | CN (Room 413, No.188, Dong Han Men Nan Lu, CHINA)

Poison Ivy のバーション情報を見たら、香港のキャンペーンと同じバーションですね。



面白いのは、(1)モンゴル系のキャンペーンには2つホスト名を使い、それぞれのドメイン名はとても怪しいですね。香港のキャンペーンですと1つのホスト名しか書いてません。(2)本バーションのPoison Ivyは3つのCNC情報迄入れられそうと見えますね、絶対にペーロードのビルダーがそういう設定があることが分かりました。そして、(3)テストとして、IPアドレスをCNCの場所に書きましたら、そのままで動きますので、CNCはIPアドレスだけの可能性もあるとのことです。



この解析の情報で、ほぼ全ての感染ソース、目的と感染仕方が分かりました。もしこれ以上興味がありましたら @malwaremustdieのツイッターへご連絡くださいね。読んでくれましてありがとう御座います!



#MalwareMustDie!

Wed Mar 15 01:17:48 JST 2017 @unixfreaxjp/0day.jp/MalwareMustDie,NPO - 解析者・報告書を発表しました。
Thu Mar 15 05:42:14 JST 2017 @luffyさん(credit)が文書を直してくれました (有難う御座います)
Fri Mar 17 00:48:30 JST 2017 @elkentaro translated the whole documents into English

※)追加情報を少しずつ更新をさせて頂きます。