独立系のマルウェア研究者が、特定の細工されたパケットが届くまで何もしない Windows のバックドア SLEEPWALKER を報告した。届いた命令は、独自に設計された23命令の言語で実行される[1][2]。
PART 1解説
3行でわかる要点
- 潜み方:通信先のドメインや IP アドレスを持たず、自分から外へ接続しない。既知の悪いサーバーへの接続を監視するツールからは、正常に見える[2]。
- 置かれ方:ESET Management Agent に読み込まれる DLL(Microsoft の dpapi.dll になりすまし)として動く。置くには管理者権限が要るため、侵入後に居座るための道具[2]。
- 分かっていないこと:攻撃者、被害者、実際に使われたかは特定されていない。1つのサンプルの解析にもとづく報告[2]。
前提:「侵入後」に使われる道具
サイバー攻撃は、最初に入り込む段階(初期侵入)と、入り込んだあとに居座って目的を果たす段階に分けて考えられます。SLEEPWALKER は後者の道具で、すでに管理者権限を持つ攻撃者が、見つかりにくい形で操作を続けるために置くものです[2]。
セキュリティ製品の多くは「怪しい動き」や「怪しい通信」を手がかりに検知するため、何もしない時間が長いほど見つけにくくなります。IT パスポートで学ぶ多層防御の考え方では、侵入を防ぐ対策に加えて、侵入されたあとに気づき、被害を広げない対策も必要です。
まず押さえる用語
| 用語 | ひとことで | もっと詳しく |
|---|---|---|
| バックドア | 侵入した攻撃者が、あとから再び操作できるように仕掛けておく裏口のプログラム。 | — |
| DLL サイドローディング | 正規のプログラムが読み込む部品(DLL)を偽物と置き換え、正規のプログラムに悪性コードを動かさせる手口。 | MITRE ATT&CK T1574.002 |
| EDR | 端末の挙動を監視し、不審な動きを検知・対応する製品。 | — |
| バイトコード | 専用の命令の並びに変換されたプログラム。解釈役のプログラムがないと意味が読み取れない。 | — |
本来の仕組みと、どこが破られたか
多くのマルウェアは、攻撃者のサーバーへ定期的に接続して指示を受け取ります。そのため、通信の監視で見つかることがあります。
SLEEPWALKER は自分から接続せず、ネットワークを流れるパケットを見張り続け、特定のパケットが届いたときだけ動きます[2]。図1の赤い破線のように、「通信の検知」が働く機会がありません。さらに、ゲートウェイや VPN サーバーのように他のマシン宛ての通信も見える場所に置かれると、別のマシン宛てのトリガーも拾えます[2]。
攻撃の流れ
sequenceDiagram
autonumber
participant A as 攻撃者
participant N as ネットワーク
participant S as SLEEPWALKER
participant O as Windows
Note over S: 普段は見張るだけで何もしない
A->>N: 特定の細工したパケットを送信
N->>S: 見張りがパケットを受信
S->>S: 独自のバイトコードを解読
S->>O: 命令を実行
- 23の命令には、予定の実行、データの移動、ハッシュ値で確かめてからのファイル受け取り、メモリ上でのコード実行などが含まれる[2]。
- 通信には TCP、UDP、ICMP、SMB の名前付きパイプ、パケットの直接取得、VMware の VMCI を使える。VMCI は仮想化基盤の中を通るため、マシン間の通信をキャプチャしても映らない[2]。
「動かないこと」で隠れる、とは(考察)
- EDR は挙動からマルウェアを見つけるので、何もしなければ検知の材料がない。「静かであること」は無害の証拠にならない。
- ESET は「DLL を置くにはすでに管理者権限が要るので、影響は限定的」とコメントしている[2]。つまり侵入口ではなく、侵入後に居座るための道具。
- 権限を奪われたあとに何が残るか、という視点が要る。サイドローディングに使われた正規ソフトに修正すべき欠陥はなく、見つかったら対応と再構築になる[2]。
いま確認すること
- 【Windows 端末を管理している】研究者が公開した痕跡(IoC)で、ESET Management Agent のフォルダに見慣れない dpapi.dll がないか確かめる[1][2]。
- 【全員】管理者権限を持つアカウントを棚卸しする。この種の道具は、管理者権限を奪われたあとに置かれる。
- 【全員】自分のコードにも「普段は動かないが、特定の入力が来ると突然コードを実行する」箇所がないか確かめる。
# 危険なパターンの例(Python)
def handle_request(data):
# 普段は無害に見えるが、細工された data が来ると...
result = eval(data["expression"])
return result
- 【全員】外部からの入力でコードや SQL、OS コマンドを組み立てて実行している箇所(eval / exec、デシリアライズなど)を、すべて把握しているか確かめる。
出典・参考リンク
一次情報
報道・解説
PART 2問題(情報処理安全確保支援士 試験形式)
問1 午前II形式(4択)
Windows バックドア SLEEPWALKER が、通信の監視や EDR による検知を逃れる仕組みとして、最も適切なものはどれか。
- ア EDR のプロセスを停止させてから活動する
- イ 特定の細工されたパケットが届くまで、悪意ある動作を一切しない
- ウ 正規の OS 更新プログラムになりすまして配布される
- エ ファイルを暗号化して身代金を要求する
解答・解説を表示
解答:イ
自分から外部に接続せず、特定のパケットが届いたときだけ独自の23命令の言語で命令を実行する。何もしなければ検知の材料がない。アは EDR を無効化する別の手口で、報告の内容と異なる。ウは報告にない。エはランサムウェアの説明。
問2 午後形式(記述)
A社の Web アプリケーションには、数年前に追加された集計機能がある。この機能は、リクエストに含まれる式の文字列を eval() でそのまま評価して結果を返す。利用者がこの機能を使うことはほとんどなく、ログ上も目立った動きはない。しかしコードレビューで B さんは、①この処理は SLEEPWALKER と同じ構造をもつと指摘した。
設問 本文中の下線①について、どのような点が同じなのかを40字以内で述べよ。
解答・解説を表示
解答例:普段は動かないが、細工された入力が届いたときだけ任意のコードを実行する点(36字)
静かであることは無害の証拠にならない。eval() / exec()、入力から組み立てる SQL や OS コマンド、デシリアライズ処理を洗い出し、正規の流れでしか届かないかを確かめる。「ログに残らない点」は、使われていないので記録が少ないだけで、構造上の共通点ではない。