※本記事は2016年5月24日に米国で掲載されたブログ記事の抄訳を基にしています。

 私たちは、この数週間に、APTグループWekbyによる米国に拠点がある組織を標的とした攻撃を確認しました。Wekbyは、医療、電気通信、航空宇宙、防衛、ハイテクなどのさまざまな業界を標的として活動しているグループです。グループは、ハッキング チームのFlashゼロデイ エクスプロイトのように、最新のエクスプロイトを入手可能になった直後に利用することが知られています。

 Wekbyグループが使用するマルウェアはHTTPBrowserマルウェア ファミリに関係しており、DNSリクエストをコマンド アンド コントロール メカニズムとして使用します。さらに、さまざまな隠蔽手法を使用して、分析中のリサーチャーを妨害します。取り上げたサンプルに見られるメタデータに基づいて、Palo Alto Networksはこのマルウェア ファミリを「pisloader」と名付けました。

インフラストラクチャ

 pisloaderマルウェア ファミリは、次のURLからHTTPを介して配信されました。本稿の執筆時点では、このURLはまだアクティブでした。

http://globalprint-us[.]com/proxy_plugin.exe 

このドメインでホストされていた他のサンプルには、次のものがあります。

http://globalprint-us[.]com/proxy_web_plugin.exe 

MD5: E4968C8060EA017B5E5756C16B80B012
SHA256:8FFBB7A80EFA9EE79E996ABDE7A95CF8DC6F9A41F9026672A8DBD95539FEA82A
サイズ: 126976バイト
コンパイル時間: 2016/04/28 0:38:46 UTC

 この検出されたファイルは、次の設定データを伴う共通のPoison Ivyマルウェア ファミリのインスタンスであることがわかりました。

コマンド アンドコントロール アドレス: intranetwabcam[.]com
コマンド アンド コントロール ポート: 80
パスワード: admin
ミューテックス: )!VoqA.I5

 この攻撃で目撃されたドメインは、すべて使用される直前に登録されていました。この攻撃では次のドメインが目撃されています。

さらに、次のIP解決が確認されています。

初期ドロッパー

 次のサンプルが最初に検出され、後続の分析でも参照されています。

MD5: E8D58AA76DD97536AC225949A2767E05
SHA256: DA3261C332E72E4C1641CA0DE439AF280E064B224D950817A11922A8078B11F1
サイズ: 126976バイト
コンパイル時間: 2016/04/27 14:37:34 UTC

 この特定のファイルは、次のメタデータ特性を備えています。「Pisload2」と呼んでいることが、このマルウェア ファミリの命名につながりました。

図1 pisloaderドロッパーのメタデータ
 

 初期ドロッパーには、Runレジストリ キーを介して持続性を設定し、埋め込みのWindows実行ファイルをドロップおよび実行する役割を担う非常にシンプルなコードが含まれています。作成者がストリングをさらに小さいサブストリングに分割し、「strcpy」および「strcat」コールを使用して使用する前にそれらを作成し直すという、限定的な隠蔽が見つかりました。また、決して使用されないガベージ ストリングを生成するためにも、これと同じ手法が使用されていました。これによって、サンプルの検出と分析を阻止する能力を高めています。次の逆コンパイルしたコードがこのことを示しています。完全に生成されたストリングを示すために、コメントが追加されています。

図2 ストリングを作成し永続性を設定するpisloaderドロッパー
 

 上記の逆コンパイルしたコードから、pisloaderが、次のストリングを生成していることがわかります。このストリングは、最終的にRunレジストリ キーを設定するために呼び出されます。

cmd.exe /c reg add HKCU\Software\Microsoft\Windows\CurrentVersion\Run /v lsm /t reg_sz /d “%appdata%\lsm.exe” /f

この特定のコマンドは、HKCU\Software\Microsoft\Windows\CurrentVersion\Run\lsmレジストリ キーに値「%appdata%\lsm.exe」を設定します。このキーが設定された後、マルウェアは、1バイトのXORキー「0x54」を使用して、2つのブロブから成るデータの復号化へと進みます。その結果のデータが、%appdata%\lsm.exeファイル パスに書き込まれます。

 このファイルが書き込まれた後、マルウェアは新たに書き込んだ、pisloaderペイロードが含まれるlsm.exeファイルを実行します。

ペイロード

 次のサンプルが検出され、後続の分析でも参照されています。

MD5: 07B9B62FB3B1C068837C188FEFBD5DE9
SHA256:456FFFC256422AD667CA023D694494881BAED1496A3067485D56ECC8FEFBFAEB
サイズ: 102400バイト
コンパイル時間: 2016/04/27 13:39:02 UTC

 ペイロードは、ROP (Return-Oriented Programming)手法と多数のガベージ アセンブリ命令を使用して、かなり隠蔽されています。次の例では、赤で強調表示されたコードは、本質的に、サンプルのリバースエンジニアを阻止する目的のみで存在しています。このコードは、ガベージとして扱い、無視することができます。完全な関数は緑色で強調表示されています。2つの関数オフセットがスタックにプッシュされ、さらに、return命令が続きます。このreturn命令は、最初にコード実行をヌル関数へ差し向け、次に、コード実行を「next_function」へ差し向けます。この手法が、ペイロードのランタイム全体を通じて使用され、静的な分析を困難にしています。

図3 pisloader内の証拠となる難読化されたコード
 

 このマルウェアは、難読化部分およびガベージ コードを無視するとあとは極めて単純そのものです。まず、ランダムな10バイトの英数字からなるヘッダーの生成から始めます。残りのデータはパディングを除去した状態でBase32エンコードされます。このデータはサブドメインを埋め込むのに使われ、埋め込まれたサブドメインは、その後のDNSリクエストの中でTXTレコードを要求するのに使われます。

 DNSのC2プロトコルとしての利用は、これまでマルウェア作成者によって広く採用されてきたわけではありません。例外的に目立つものとして、以下のものがあります。

·    FrameworkPOS
·    C3PRO-RACCOON
·    FeederBot
·    Morto
·    PlugX亜種

 DNSをC2として利用することで、pisloaderはこのトラフィックを正しく検査することができない恐れのある某セキュリティ製品を回避することができます。

図4 TXTレコードを要求する、マルウェアによるDNSクエリ
 

 このpisloaderのサンプルは、ランダムな4バイトの大文字の文字列から構成されるビーコンをペイロードとして使って定期的に送信します。この例を以下に示します。

図5 pisloaderのDNSビーコン要求
 

 マルウェアはDNSレスポンスがさまざまな観点で特定の方法で設定されていると見込んでいますが、そうでない場合はDNSレスポンスを無視します。以下のDNSフラグが設定されている必要があります。ほかに何かフラグが設定されている場合、応答は無視されます。

·    Response
·    Recursion Desired
·    Recursion Available

 「Questions」フィールドには0x1という値が設定されている必要があります。「Answer Resource Records」フィールドには0x1という値が設定されている必要があります。さらに、レスポンスクエリ サブドメインは最初のDNS要求と一致している必要があります。

 リモートのコマンド アンド コントロールサーバーはマルウェアの内部に静的に埋め込まれています。この特定のサンプルでは「ns1.logitech-usa[.]com」というホストがあります。

 C2サーバーは、最初の要求に似たようなエンコードされたTXTレコードを使って応答します。その応答において、最初のバイトは無視され、残りのデータはBase32エンコードされます。この例を以下に示します。

図6 C2サーバーによるTXT応答の例
 

 以下のコマンドおよび解説がマルウェアによりサポートされています。

·    sifo – 被害者のシステム情報を収集する
·    drive – 被害者のマシンにあるドライブの一覧を作成する
·    list – 指定されたディレクトリに関してファイル情報の一覧を作成する
·    upload – 被害者のマシンにファイルをアップロードする
·    open – コマンド シェルを生成する

 使用中のこれらのコマンドに関して、いくつかの例を以下に示します。疑似DNSサーバーを使ってコマンドを生成し、その結果として生じるデータを受信しました。

「drive」コマンドを送っている例

図6 C2サーバーによるTXT応答の例
 

「open」コマンドを送っている例

「sifo」コマンドを送っている例

C:\ドライブの中身の一覧を作成している例

 上記のsifoコマンドではprintfフォーマット文字列「l=%s&c=%s&o=%s」が使われています。これはHTTPBrowserの以前のバージョンと一致しています。なお、HTTPBrowserはWekbyグループが頻繁に利用する別のマルウェア ファミリです。

 さらに、「list」「drive」「upload」コマンドなどの多数のコマンド自体もHTTPBrowserと一致しています。これらのコマンドから返されるフォーマットされた応答も全く同じです。ここで考察しているpisloaderのサンプルのものと類似のメタデータを有する既知のHTTPBrowser sampleが発見されましたが、これによりpisloaderがこのマルウェア ファミリの亜種である可能性が高いという信憑性が増します。

 また、これらのコマンドを生成するのに使われているコードはGitHubから入手可能です。

結論

 Wekbyは、高性能のマルウェアを使って、よく目立つさまざまな組織を標的にし続けています。pisloaderマルウェア ファミリはさまざまな新しい技法を使います。たとえばDNSをC2プロトコルとして利用したり、return-oriented programmingなどの分析対策戦術を使います。

 Palo Alto Networksのお客様は、次の方法で脅威から保護されています。

·    WildFireがすべてのpisloaderサンプルを有害であると正しく検出します。

·    このマルウェア ファミリを追跡するため、pisloader AutoFocusタグが作成されました。

·    この攻撃で使用されているすべてのドメイン/IPは悪意のあるものとしてフラグ付けされています。

·    pisloaderのDNSトラフィックを検出するためIPSルールが作成されました。

付録

外部情報

·    https://blog.anomali.com/evasive-maneuvers-the-wekby-group-attempts-to-evade-analysis-via-custom-rop

·    http://www.volexity.com/blog/?p=158

·    https://www.secureworks.com/research/threat-group-3390-targets-organizations-for-cyberespionage

·    https://www.zscaler.com/blogs/research/chinese-cyber-espionage-apt-group-leveraging-recently-leaked-hacking-team-exploits-target-financial-services-firm

·    https://www.fireeye.com/blog/threat-research/2015/07/demonstrating_hustle.html

SHA256ハッシュ

da3261c332e72e4c1641ca0de439af280e064b224d950817a11922a8078b11f1
930772d6af8f43f62ea78092914fa8d6b03e8e3360dd4678eec1a3dda17206ed
6852ba95720af64809995e04f4818517ca1bd650bc42ea86d9adfdb018d6b274
9200f80c08b21ebae065141f0367f9c88f8fed896b0b4af9ec30fc98c606129b
4d62caef1ca8f4f9aead7823c95228a52852a1145ca6aaa58ad8493e042aed16
1b341dab023de64598d80456349db146aafe9b9e2ec24490c7d0ac881cecc094
456fffc256422ad667ca023d694494881baed1496a3067485d56ecc8fefbfaeb

ドメイン

ns1.logitech-usa[.]com
globalprint-us[.]com
intranetwabcam[.]com
login.access-mail[.]com
glb.it-desktop[.]com
local.it-desktop[.]com
hi.getgo2[.]com