This post is also available in: English (英語)
概要
対象範囲がかなり限定された攻撃活動は多くの場合、何年もの間、表に出てきません。2、3のマルウェア サンプルのみが導入された場合、セキュリティ業界のリサーチャーがそれらを特定し相関できる可能性はかなり低いでしょう。
2015年5月に、Palo Alto Networks WildFireは、偽の侵害されたイスラエルのGmailアカウントからイスラエルの産業組織に送信された、悪意のあるドキュメントが添付された2件の電子メールを検出しました。一方の電子メールには「thanks.pps」という名前のMicrosoft PowerPointファイルが添付され(VirusTotal)、他方には「request.docx」という名前のMicrosoft Wordドキュメントが添付されていました。
同時期に、WildFireは、前出のWordドキュメントと同一のハッシュで、今回はアメリカ政府の受信者に送信された、Wordドキュメント(「hello.docx」)を含む電子メールを捕捉しました。
これらのファイルのさまざまな属性と、それらがインストールするマルウェアの機能に基づいて、2007年に遡って攻撃に関与していた、私たちがInfyと呼ぶ、以前は未公開だったマルウェア ファミリの40を超える亜種を特定し収集しました。このツールを使用した攻撃は、2016年4月現在でも引き続きアクティブでした。
攻撃手法
私たちが最初に特定したInfyを含む攻撃は、WordまたはPowerPointドキュメントが添付されたスピアフィッシング メールでした。添付されたドキュメント ファイルには、多層のSelf-Extracting Executable Archive (SFX:自己解凍型実行可能アーカイブ)、および受信者に実行ファイルをアクティブ化させるためのソーシャルエンジニアリングを試みるコンテンツが含まれています。この例では、PPSファイルをクリックすると、「PowerPointショー」モードが開きます。一時停止された動画を模倣したPowerPointページ(図1)が表示され、ユーザーがだまされて[実行]をクリックすると(図2)、埋め込まれたSFXファイルが実行されます。
SFX層のうち1層は、キー「1qaz2wsx3edc」で暗号化されています。パッケージ(図3)には、通常、カモフラージュとして偽のreadme.txtファイルが含まれ(たとえば、Aptana Studioアプリケーションになりすます)、活動によっては、イメージ ファイルや動画ファイルが含まれます(図4)。通常、実行可能ファイルのファイル名パターンはins[*].exeで、ここで*は最大4文字のランダムな数字です。メイン ペイロードは、典型的なファイル名パターンがmpro[*].dllのDLLファイルです。ここで、*は最大3文字のランダムな数字です(以前のバージョンでは、.cpl拡張子が使用されていた)。
実行可能ファイルは、DLLをインストールして、Autorunレジストリ キーに書き込み、再起動されるまでアクティブ化しません。再起動後、最初にアンチウイルスをチェックし、その後、C2へ接続します。環境データの収集を開始し、キーロガーを始動させ、ブラウザのパスワードやcookieなどのコンテンツを盗み、その後、盗んだデータをC2サーバへ取り込みます。
最初に観察された「thanks.pps」の例では、mpro324.dllという名前のペイロードDLLをロードするins8376.exeという名前の埋め込みファイルをユーザーが実行するように仕掛けられていました。
インフラストラクチャ
初期のサンプルでは、C2サーバとしてupdateserver3[.]comとus1s2[.]strangled[.]netが観察されました。
その他の活動では、動的DNSプロバイダ、サードパーティのサイト ホスティング サービス、および明らかに第一者がC2サーバとして登録したドメインの組み合わせが使用されています。
ホスティングとWHOISデータの分析(図5)から、C2サーバとして使用するため第一者が登録した計12の関連するドメインが見つかりました。
- bestbox3[.]com
- myblog2000[.]com
- safehostonline[.]com
- updateserver3[.]com
- short-name[.]com
- bestupdateserver2[.]com
- bestwebstat[.]com
- updatebox4[.]com
- bestupdateserver[.]com
- short-url20[.]com
- updateserver1[.]com
- box4054[.]net
これらのドメインの存続期間から、一部は2010年初期にまで遡り、悪意のある活動で使用されてきたと推察されます。
私たちは、デンマーク政府を標的にした同様の攻撃を観察し、同じC2インフラストラクチャの一部をドキュメント化したDanish Defense Intelligence ServiceのCenter for Cybersecurityによるレポートを見つけました。
私たちは当初、本来観察されたPowerPointファイルと同じハッシュだが、名前が異なる(「syria.pps」)ファイルが2015年5月にもVirusTotalにアップロードされたことを発見しました(図6)。これらの活動を通じて観察された特徴は、攻撃者が地域固有の攻撃コンテンツを使用して、特定の地理的地域を標的にした意図的な企みを行っている点です。
その後、インフラストラクチャ、ハッシュ、文字列、およびペイロード リンク、さらに類似点に基づいて、追加のマルウェアと活動を特定し関連付けることができました。これらがすべて関連付けられるもっとも決定的な証拠が、すべての例においてマルウェア内で文字列をエンコードするために使用されている単一のキーです。オフセットのみが変わります。古いバージョンではC2データのみがエンコードされますが、より新しいバージョンでは大半の文字列がエンコードされ、さらに一部のバージョンではC2データが2つの異なるオフセットでダブルエンコードされます。これらの文字列をデコードするために、次のスクリプトを使用できます。
関連する活動がより頻繁に観察されたのは2011年以降ですが、この特定のエンコード手法とキーに基づいて、早期の2007年中盤からの関連するInfyサンプルを特定しました。私たちが検出したもっとも古いサンプルに関連付けられたC2ドメイン、fastupdate[.]netの登録履歴から、それが2004年12月まで遡り、悪意のある活動に関連付けられていたものと推察されます。
長年にわたり、継続的な開発とコード内の機能の改善が行われてきたことがわかります。たとえば、最近、新しいMicrosoft Edgeブラウザのサポートが「バージョン30」で導入されました。
この5年間の関連するマルウェアのサンプルの大半は、最終的にアンチウイルス プログラムによって検出されましたが、そのほとんどで汎用的な署名が使用されています。その他の例は、Win32/Tuax.A (かなり古いバージョン)、W32/ADOKOOB、Win32/Cloptern.A & B (古いバージョン)、TR/Graftor.106254、TR/Spy.Arpnatis.A、Win32/Skeeyah.A!bitを含む、複数の無関係な署名分類によって命名されています。
私たちがマルウェアを「Infy」と呼んでいるのは、攻撃者がこの文字列を、ファイル名(「infy74f1.exe」 – Infyバージョン7.4 F1)、C2文字列(「subject=INFY M 7.8」)、C2フォルダ名などの複数の場所で使用していたためです。
帰属
最初に観察された攻撃で電子メールを送信したGmailアカウント(図8)は、イスラエルの被害者のものです。そのアカウント自体は、ユーザーのシステムと電子メール アカウントが侵害された電子メール経由の攻撃の被害者です。
C2インフラストラクチャで使用された第一者ドメインのWHOISレコードの中から、命名パターンに著しい類似性を持つ3つの電子メール アカウントが見つかっています。
最初の2つの電子メール アドレス(および他のC2ドメイン)を持つWHOISレコードは、一見、偽のWHOISコンテンツのように見えます。「aminjalali_58 (at) yahoo.com」電子メール アドレスは、2010年から、6つの既知のC2ドメインに関連付けられています。偽のWHOISの例と異なり、この例のコンテンツは次の電子メール アドレスと比較的一致します。
amin jalali
safehostonline
afriqa street number 68
tehran
Tehran
19699
IR
+98.935354252
aminjalali_58 (at) yahoo.com
名前「Amin Jalali」は一意ではありませんが、イラン特有の家柄であるように見えます。名前と「58」を組み合わせたプロファイルとアーティファクトは、同一人物の可能性があり(そうでない場合もあり)、すべてがイランのリンクを備えています。
既知の第一者のC2から隣接するIPアドレス上のドメインを見ると、多数のイランのドメインが観察されます。これらは、おそらく、イランのホスティング リセラー、少なくとも無料のイランの Web ホストと推測されます(図9)。
結論
これらのサンプルにおけるこのマルウェアとC2インフラストラクチャの広範な分析の結果、動作パターンを結論付ける十分な証拠を得ました。活動は約10年間に渡って観察され、その間に、マルウェアは常に改善され開発されてきました。少ない活動量、意図的な攻撃目標、カスタマイズされたコンテンツ、さらに標的の性質が、この攻撃者の目的をほのめかしています。
その活動は10年間にわたりうまく気付かれずに続けられましたが、私たちは、イランに端を発する標的型スパイ活動の大半が明らかになったと確信しています。それは、複数の国の政府や企業、さらに市民までを対象としています。
Palo Alto Networksのお客様は、次の方法で脅威から保護されています。
1. WildFireは、この活動に関連するすべてのマルウェア サンプルを悪意のあるものとして正確に識別します。
2. 脅威防御によって、この活動で使用されているドメインは悪意のあるものとしてフラグ付けされています。
3. AutoFocusユーザーは、「Infy」タグを使用してこの攻撃に関連するマルウェアを確認できます。
IOCは、このレポートの付録で確認できます。
この調査におけるMaltegoによる支援に対し、Michael Scott氏に深く感謝します。
付録1 – 詳細なInfyマルウェア分析
Infyは基本的には1つのマルウェア ファミリですが、はっきりと異なる2つの亜種が観察されています。標準的な亜種の「Infy」には、マルウェアの作成者によって1~30のバージョン(1999~15999のサブバージョン)が付けられています。さらに、2013年あたりから標準的な亜種と並行して開発されたはっきり異なる亜種「Infy M」が観察されています。Infy Mは、フル機能装備の亜種で、高価値の標的向けに導入されたようです。それにはより多くの機能が含まれています。元の亜種にはリモート制御はありませんが、「M」には、C2がC2 PHPスクリプトを介してマルウェアにコマンドを発行する機能、HTTPサポート、非表示のGUIコントロール パネル、およびFTPクライアントが追加されています。
Infy
最近のInfyサンプル(バージョン30、2016年2月24日からアクティブ)の詳細な分析:
初期実行可能ファイルは、最初にインストールされているアンチウイルス プログラムをチェックします。複数の共通のAVインストール ディレクトリに対してWindows API関数「GetFileattributeA」を使用し、「file_attribute_directory」でポジティブな値が戻ることをテストします。Infyが見つけたAVに応じて、異なる手法を使用した悪意あるInfy DLLを中断するか、またはインストールします。クライアントAVの検出を回避し、アラートが発生するリスクを負うよりインストールをスキップするというこの気遣いは、いくらか注目に値します(比較的よく見られるサンドボックス検出手法とは対照的)。EXEはDLLをインストールし、Autorunキーに書き込み、再起動されるまで、それ以外は何もしません。
再起動時に、EXEローダーは、パラメータ/rcvで、DLLマルウェア ファイルDLLによってエクスポートされたメイン関数(以前に「start1/start2/start3」という名前の関数が観察された)を実行します(このバージョンは19の復号化オフセットを使用)。それは、自身を「cyberlink」ディレクトリにインストールします。
その後、「bak」、「csv」または「cnt」拡張子のファイルを検索します。パラメータ「/rcv」が使用された場合は、キーロガーを起動します(キーロガーはウィンドウ名「TRON2VDLLB」を使用)(GetMessageA/TranslateMessage/DispatchMessageA)。次にホットキーを登録し、クリップボード データを取得します。Get_browser_dataは、パスワード、フォーム、cookie、履歴を(Microsoft Edge、Internet Explorer、Google Chrome、OperaおよびFirefoxから)盗み出します。
マルウェアはHTTPを使用して5分ごとにC2に接続し、以下をポスティングします。
<computer name>
<user name>
dn = n1
ver = 30
lfolder= f
cpuid=
machineguid (hklm\SOFTWARE\Microsoft\Cryptography\machineguidから)
tt= time
感染したシステムに関するデータをC2サーバへポスティングした後、マルウェアは「v30nXf1.tmp」という名前の更新ファイルを%temp%\drvtem64.tmpにダウンロードしました。ダウンロードが成功すると、マルウェアは「OK, Downloaded [url file]」とログ ファイルに書き込みます。その後、再度接続し、同様の形式で、今度は「tt=」(時間)と「cpuid=」も追加してポスティングします。ダウンロードしたファイルを、パラメータ「-sp/ins -pBA5a88E」を指定してインストールします。3度目の接続で「sfolder」、「subject」が追加され、今度は「body=」パラメータでデータを取得します。
Infyの各亜種は、それが正規のソフトウェアであるように見せかけるために、ファイル メタデータを備えた特定の「カバー」カモフラージュを使用します。この場合、ファイルはソフトウェア名「Cyberlink」、「CLMediaLibrary Dynamic Link Library」という説明を使用し、バージョン4.19.9.98を示します。
Infy M
私たちは、バージョン6.1~7.8のInfy M亜種を観察しました。これらには、スクリーン キャプチャ、ドキュメント キャプチャ & アップロード、マイクロフォン キャプチャを含む機能が追加されています。Infy Mは、次のC2コマンドをサポートしています。
ASIDLE – アイドル
ASDIR – ファイルのディレクトリ リスト
ASPUT – ファイルのダウンロード
ASGET – ファイルのアップロード
ASZIPGET – zipとしてアップロード
ASDELETE – ファイルの削除
ASRENAME – ファイル名の変更
ASRUN – ファイルの実行
ASENDTASK – プロセスの終了
ASZIP – ファイルの圧縮(zip)
ASSHELL – リモート シェル
「M」亜種は、たいていは標準的なInfyサンプルとはまったく異なるC2サーバを使用します(ただし、ごく最近、以前は標準亜種用のC2として見られていた、C2「youripinfo.com」を使用しているバージョン7.8を観察した):
bestupdateserver[.]com – 2013年12月09日に観察
www.bestupdateserver[.]com – 2013年04月26日に観察
bestbox3[.]com –2015年08月25日に観察
www.bestupdateserver2[.]com – 2015年05月22日に観察
bestupdateserver2[.]com – 2014年07月16日に観察
「M」の早期バージョンである6.2の分析
Infy M亜種のバージョン6.xは、Borland hcrtfに設定されたファイルとウィンドウ名で自身をカモフラージュします。元の亜種に見られるようなローダーEXEとペイロードDLLではなく、単一のEXEを使用します。マルウェアは最初に、ウィンドウ名「Borland hcrtf 6.x」または「Macromedia Swsoc 7.x」をチェックして、被害者が既に感染しているかどうか判別するチェックを実行します。
私たちは、Infy M内で5つの非表示のGUI制御フォームを識別しましたが、そのうち1つは使用されていません。1番目のフォームには、指定可能なパラメータが3つあります。パラメータ「/ins」は、トロイの木馬をインストールします。最初にサービスを作成して起動します。Vistaより前のWindowsバージョンでは「/s」パラメータが必要です。マルウェアは、自身をインストールした後、以前のInfyインストールを削除します。これは、プロセスを終了し、%system32%、%appdata%、%appdata%\hcrtf内のInfyファイルを削除することで実行されます(たとえば、6.1以前のファイルは、incsy32.exe、incs32.exe、ntvdn.exe、grep.exe、hcrtf.exe、grep.dll)。その後、iniファイルの名前をgrepc.iniからhcrtfc.iniに変更します。「inverse Ser32」、「grep」、「hcrtf」の各サービスを削除することで、クリーンアップを完了します。最後に、/infy/update.phpで、C2から更新ファイルをダウンロードして実行します。
/c (copy)パラメータは、レジストリ キー「run」(Windows Vista以降)または「runservices」(Windows Vistaより前のバージョン)に書き込み、マルウェアの自動起動を設定します。/s (service)パラメータは、サービスを作成して起動します(Windows Vista以降)。この時点で、マルウェアは待機し、C2からHTTP経由で発行されたコマンドを処理します(たとえば、コマンド「ASSHELL」受信時にはリモート シェルを実行する)。
2番目のフォームは、「CreateIoCompletionPort」および「ReadDirectoryChangesW」を使用して新規または変更されたドキュメント ファイルを監視します。対象とするドキュメント ファイルの種類は、.doc、.xls、.jpg、.jpe、.txt、.htm、.pgp、.pdf、.zipおよび.rarで、それらを\Program Files\Yahoo!\Messenger\Profiles\yfsbg\yfsbg\3dksf.tmpにあるファイルへZIP圧縮します(パスワード「Z8(2000_2001uI」を使用)。
3番目のフォームは、スクリーン キャプチャを取得し、それを4dksf.tmpとして「yfsbg」フォルダに保存します。スクリーンショットとドキュメントキャプチャ ファイルを、(標準的な亜種で見られるGETを使用する代わりに) POSTを使用して<C2 server>/infy/fms.phpへアップロードします。
4番目のフォームは使用されていません。5番目のフォームはマイクロフォン キャプチャに使用されます。
7.xバージョンは、自身をswsoc.exe (7.4ではinfy74f1.exeの使用も見られる)として<documents and settings>\all users\application data\macromedia\8080\swsoc.exeにインストールします。また、ユーザーによって開かれたドキュメントのコピーを保存するサブフォルダ「fsbg」も作成します。これらは、ファイル名としてCRC値が付加されて保存され、同じパスワード「Z8(2000_2001uI」を使用してRAR圧縮されます。
私たちは、サーバがPHP内でエラー応答するのを観察しました。これにより、基盤となるファイル構造の一部が理解できました。
<b>Warning</b>: Cannot modify header information – headers already sent by (output started at /home/bestupda/public_html/infy/fms.php:115) in <b>/home/bestupda/public_html/infy/fms.php</b> on line <b>116</b><br />(警告: ヘッダー情報は変更できません - ヘッダーは/home/bestupda/public_html/infy/fms.php内の(/home/bestupda/public_html/infy/fms.php:115で始まる出力)の116行ですでに送信されています)
アップグレード要求が次の構文で観察されています(ここでは、バージョン6.2~最新バージョン):
http://www.bestupdateserver.com/infy/update.php?cn=<computername>&ver=6.2&u=27/3/2016 20:37:23
付録2 – 観察されたハッシュ
この活動で観察された関連するファイルのハッシュのリストは、こちらで確認できます。
付録3 – 観察されたInfy C2ドメイン
analyse1[.]mooo[.]com
best[.]short-name[.]com
best2[.]short-name[.]com
best2[.]short-url20[.]com
best3[.]short-url20[.]com
best4[.]short-url20[.]com
best5[.]short-url20[.]com
best6[.]short-url20[.]com
best7[.]short-url20[.]com
bestbox3[.]com
bestupdateserver[.]com
bestupdateserver2[.]com
bestupser[.]awardspace[.]info
bestwebstat[.]com
bl2pe[.]bestwebstat[.]com
box4054[.]net
c1[.]short-url20[.]com
dbook[.]soon[.]it
dsite[.]dyx[.]comextd[.]mine[.]bz
fastecs[.]netfirms[.]com
fastupdate[.]net
gstat[.]strangled[.]net
lost[.]updateserver1[.]com
lu[.]ige[.]es
mand[.]pwnz[.]org
myblog2000[.]com
ns2[.]myblog2000[.]com
nus[.]soon[.]it
safehostonline[.]com
secup[.]soon[.]it
short-name[.]com
short-url20[.]com
update[.]info[.]gf
updateserver1[.]com
updateserver3[.]com
us1[.]short-name[.]com
us12[.]short-url20[.]com
us13[.]short-url20[.]com
us15[.]short-url20[.]com
us16[.]short-url20[.]com
us1s2[.]strangled[.]net
wep[.]archvisio[.]com
wep[.]soon[.]it
wpstat[.]mine[.]bz
wpstat[.]strangled[.]net
www[.]fastupdate[.]net
www[.]updateserver1[.]com
youripinfo[.]com