Windows のSMBv3 の脆弱性の検証 | reverse-eg-mal-memoのブログ
新型コロナウイルスに関する情報について

reverse-eg-mal-memoのブログ

サイバーセキュリティに関して、あれこれとメモするという、チラシの裏的存在。
セキュリティガチ勢の冷たい視線が痛ひw

前回の記事でSMBv3の脆弱性 (CVE-2020-0796)について、ざっくり勝手な意見を書きましたが。

やっぱり実際に検証しないとダメですよねぇ。

と、いうことで、PoCを探して検証してみました

 

いまのところ、完全に乗っ取るエクスプロイトの公開されたものは探せていません。

今回は、圧縮処理の境界値チェックが不十分であることによるバッファオーバランが原因で、OSがクラッシュするというものです。

・・・って、これDOS攻撃って言わないかな(汗) ( ̄▽ ̄|||

もっとも、バッファオーバランが発生していることは確実なようなので、あとはOSがクラッシュしないようにリモートコードをどうやって実行させるか、ってところで知恵の輪になるんだと思います。

そのうちエクスプロイトも出ると思うので、それはそれで検証してみようかなと。

 

 

今回検証した環境

  • Windows10 バージョン 1903
  • Windows10 バージョン 1709
  • Kali Linux (2020/01)
Kali Linuxは別にpython 2.7が動けば(今回入手したPoCがPython2.7のため)何でもいいのですが、Wireshark や nmap なんかも入ってて何かと便利なので採用しました。
まあ、実は ntlm_auth や pyasn1 が入って無くて動かなくて、それのインストールのために pip のインストールから調べたりと割と難儀はしたんですが、まあそういった環境の作り方は別の機会にでも。
 
また、PoCのコードは以下のとおり。
(--- 自主規制 : githubにもう出てるっちゃ出てるんですが、これ改造されても困るので、一通りパッチが出回ったあと、後日憶えてたら書きます ---)
 
 

Windows10 バージョン 1709で実行

実際に使用したマシンは以下のとおりです。VMを使っています。
 
 
 
このブログではおなじみのマルウェア解析用マシンをそのままマトにしました。
(まあ、こんなクソブログの画面におなじみになるくらいなら、もっと有名なエライ人が書いたブログ記事読んだほうが勉強になりますけどね。)
このマシンに対して、とりあえず nmap した結果は以下の通り。
 
 
 
Kali Linux に入っている nmap だと、SMBv3のバージョンまでは分からないみたいですね。
ちなみに、 nmap の実行時間にツッコミを入れてはいけない。
(会社にチクらないでね。「明日、ちゃんと仕事できるんだよね?(はぁと)」ってプレッシャーがかかるので(汗)。)
Nexpose とかツールだとどうだろう、と思ったけど、アレも無料のコミュニティ版が無くなったんでしたっけ?
 
これに対して、コマンドを実行!
 
 
・・・しーん・・・。
 
そう、ターゲットのマシンはバージョン1709。
今回の対象外バージョンなので、パッチを当てていなくても、攻撃は通らないのです
 
 

Windows10 バージョン 1903で実行

実際に使用したマシンは以下のとおりです。VMを使っています。
 
 
 
このマシンにも nmap した結果は以下の通り。
 
 
SMBのバージョンの違いが見て分かりませんねw
オプション変えたりちょっといじらないといけないかも。
もうちょっと細かいフィンガープリントを取れる方法を使う必要があるようです(後日、違いが分かるようになったら修正かな)。
 
これに対して、コマンドを実行!
 
 
 
 
ほんぎゃああああああああ
 
予告通り、OSがクラッシュしました。
この結果から、同じWindows10でも、バージョンによって挙動が変わるのは確実です。
公式が言う通り、1903以降が対象なのでしょう。
・・・っていうか、このバージョンの時に作りこんだ、割と新しいバグってことかな。
検証としては、1903では再現確認でき、古いバージョンでは発生しないことも確認。
「古いOSでパッチが当たっていないものは、そもそも圧縮モードのバグが作りこまれたコード自体が入ってないからこれが起きない」が正解ではないかと思います。
 
 

パケットの状況

攻撃成功時のパケットも取っています。その時の画像です。
 
 
実は、SMBの通信こんだけ。
これだけで、OSがクラッシュしてしまうんです。(´・ω・`)
最初にネゴシエーションのための通信をしています。
ステータスでエラーが返ってきていますが、これが必須なのかまではまだ調べられていません。
 
個人的には、画面で表示しているSMBの Compressed のデータ1つでいけるんじゃないかと思っています。
このあたりの確証を得るのは、今後のPoCや解析結果が公開されたときになるかと思います。
またそのときにでも再検証できればと思います。
(自分で解析してる時間あんまなさそう・・・。)
 
とりあえず、私は今日は寝るwww
(眠いよままぁん (づД`) ・・・と、夜中の変なテンションでブログ書いてるからこんな内容になるんだろうな・・・)
 
最後に、当該バージョンの人は、Windows Updateでパッチを当てましょう。