調べて、学ぶ

検索したり実験したことを覚えとくブログ

WannaCryについて調べてみた

今更だけど。
仕事に関わるガイドラインを読み込んでいる時にsmbの脅威(wannacry)を思い出し、いろいろわからんことだらけなので調べてみた。
人に説明するには自分で理解しなければ。

そもそもWannaCryって

最初の認識では「smb1.0の脆弱性を突いて感染・増殖・感染先を暗号化」みたいなイメージだけど、この時点で疑問が出てくる。

  • smb1.0を使わなければいいの? どう防ぐのが正解?
  • 感染したとしてどこまで広がる?(感染セグメント内?違うセグメントまで行く?ユーザ名・パスワードとか無視されるの?)
  • そもそもどういうメカニズムなんだ?

思いつく単語でググってみる

「wannacry 仕組み」

トレンドマイクロの解説を見つける。そういえば関連ワードで”EternalBlue”があったな。

  • EternalBlueはWindows SMB1.0サーバ(共有フォルダの持ち主)が特定のリクエスト(ファイル送る側が発するメッセージ)を処理する際のセキュリティ上の欠陥
  • ファイル送る側がEternalBlueを突く攻撃をすると、バッファオーバーフロー(メッセージ長すぎて処理できん)を起こす
  • バッファオーバーフローを起こしたメモリ(のためのバッファ確保も使い切り)次のメモリ領域を操作できるようにしてしまう

へぇー と思いながら次へ。

「WannaCry 詳細」

カスペルスキーのサイトがトップに出てくる。

  • WannaCryが実行されるシナリオ
  • ”EternalBlue”(攻撃ツール)を仕掛けて、ターゲットに”DoublePulsar”(バックドア)をインストールする
  • "DoublePulsar"にコマンドを送り、WannaCryを実行する

なるほど。WanaCryは「EternalBlueを使ってDoublePulsarを送りこみ、DoublePulsarでWannaCryを実行する」てことか。

「EternalBlue 詳細」

三井物産セキュアディレクション(以下:mbsd)「WannaCry 2.0(+亜種)におけるワーム活動の詳細と残存するDoublePulsarについて」を見つける。めちゃめちゃわかりやすい。

  • EternalBlueとDoublePulsarは攻撃ツール「Fuzzbunch」の機能の一つ
  • Fuzzbunchはmetasploitみたいなもの(使い方知ってればコマンド叩いて攻撃できる)
  • FuzzbunchでEternalBlueを実行すると、その流れで(DoublePulsarが無ければ)DoublePulsarをインストールする
  • DoublePulsarはSMB/RDPで通信を受け付け、任意のコ-ド実行・DLLインジェクション(外部からDLLを持ってきて登録する?)をする機能がある
  • WannaCryが流行った時期では、DLLインジェクションで”lsass.exe”に不正なDLLを読ませ、ターゲット内でWannaCryを作成・実行してた
    →DoublePulsarが動いてしまえば、EternalBlue以外からでもコマンドを受け取れる状態になる
  • DLLインジェクションでは、注入したDLLがメモリ内に読み込み・実行されるため、タスクマネージャやプロセスエクスプローラでは見つからない
  • 以降、感染したターゲットが次のターゲットに向かってEternalBlueを仕掛けてDoublePulsarを仕込み、WannaCryを生成・実行...
  • 攻撃対象として選択できるのはwin7/win2008R2。ただし、(windowsOSではなくsmb1.0の欠陥なので)smb1.0が動いていればwin10でも効く。
  • Fuzzbunchを使うにはpython2.6が必要(2.7では動かない)
  • 「DoublePulsarはメモリ上にのみ存在するため、感染PCを再起動することで消滅します」
    →なぜ? このブログ内ではDoublePulsarについての挙動は書かれているけど、インストールされたらどう見えるかが不明なので、もう少しググる

「doublepulsar インストール」

アイマガジンの最新マルウェアを解剖する|WannaCryの仕組みと攻撃のメカニズムの記事が見つかる。全体図としてはこちらの方がわかりやすい。
上記と同じmbsdの方が解説している「WannaCryで感染が広がる仕組み」について以下のコメントを発見。

まずWannaCryにすでに感染している端末Aがあるとします。この端末A上のマルウェアは、LAN/WANやネットワーク上でMS17-010の脆弱性をもつ端末Bを発見すると、EternalBlueと呼ばれるエクスプロイトコード(脆弱性を利用したマシンコード)を使って攻撃を仕掛けます。この攻撃は、端末BのSMB v1サービスに対してエクスプロイトコードを投げつけ、SMB v1サービスのカーネル空間でバッファオーバーフローを発生させてデータを書き換えるというものです。

そこへ端末AからDoublePulsarと呼ばれるバックドア・プログラムが送り付けられ、バックドアが設置されます。この送り付けに際しては、端末BにDoublePulsarが存在していないことをEternalBlueが事前に確認してから送り付けられています。このDoublePulsarはメモリ上でのみ作動するファイルレスなので、端末上からは確認できません。また、端末を再起動すると消失してしまうタイプのプログラムです。

ここで知りたいことが凝縮された形で書かれていた。上記の「なぜ?」はこれで納得。さらに、

SMB v1サービスがDoublePulsarに感染すると、ディスパッチテーブル(関数テーブル)にある正規関数の1つが書き換えられてしまいます

というコメントがあったので、smb1.0で感染することが確定。
正確には、「EternalBlueでsmb1.0ホストにDoublePulsarをインストールする攻撃を受けると」ということか。ちょっと気になるので、smb2で感染するかも確認。

「MS17-010」

ちょっと気になるので、smb2で感染するかも確認するためにググってみた。(最初から読めよ)
マイクロソフト セキュリティ情報 MS17-010 - 緊急に書かれている通り、回避策としてsmb1.0を無効にする方法を案内している。裏を返せばsmb2.0は大丈夫 という解釈だろうか。

「wannacry 動作」

最後に残った疑問。感染したらどこまで広がるか。
アイマガジンのブログ内に「LAN/WANに広がる」とあるので、192.168...や172...のアドレス範囲内に総当たりを仕掛けるのかと思うけど調べてみる。
NTTコミュニケーションズWannaCryとはどんなもの?感染症状や感染の確認方法に、「WannacCryに感染すると」の項がある。

拡大していくときには、IPアドレスを自動生成し、インターネット通信で次に侵入するPCを見つけ出します。 自動生成したのが社内のIPアドレスであれば社内PCに、社外のIPアドレスであれば外部のPCに飛び火していくのです。 また、IPアドレスの自動生成によって入り込むPCを探し出すため、通常のマルウェアで有効なセグメント分けでは対応できません

...なんてタチの悪い動き。”外部に露出している”&”smb1.0が有効な”windowsサーバが1台でもあれば、かなりまずい。

結論

最初の疑問は解決できた

  • smb1.0を使わなければいいの? どう防ぐのが正解?
    →smb1.0を無効にするだけでOK。ただし、一回でも感染していれば別のsmb1.0サーバにも感染・そこから再感染の、エンドレスゲームになる。
  • 感染したとしてどこまで広がる?(感染セグメント内?違うセグメントまで行く?ユーザ名・パスワードとか無視されるの?)
    →IPを自動生成して、内外構わずどこまでも行く
  • そもそもどういうメカニズムなんだ?
    →上述の通り。どこかのWannaCry感染端末が感染先を求めてEternalBlueを仕掛けてDoublePulsarをインストールし、WannaCryを生成し、暗号化・脅迫文表示。これを延々と繰り返す。

これで人に聞かれても説明できるぞ。(ないと思うけど)

※補足:マクニカさんのセキュリティ研究センターブログ「マルウェア解析奮闘記 WannaCryの解析」も後から見つかり、これもわかりやすいです。