第42回「ネットワークパケットを読む会(仮)」
「ネットワークパケットを読む会(仮)」のセミナーレポートです
今回はSMBがピックアップされたんですが、聞くだけでは身にならないので、実際に家でSMBパケットを解析してみました
前回レポート
今回のテーマ
主催者 hebikuzureさんによる
「SMB パケットを解析する」
常連ととろさんによる
特にSMBはWannaCryで耳にはしていたけど、なんやねんそれ?
って感じだったので、非常に良い勉強になりました!
情報共有の為、SMBについてまとめとくんで、是非見て下さいね(*´ω`*)
SMBってなんぞや?!
SMB【Server Message Block】
具体的には、Windowsの共有ファイルなどにアクセスする時や、市販NASにアクセスする時に使われています
例↓
SMBはMicrosoftが開発したプロトコルですが、オープンなプロトコルである為、MacOSやLinuxでもsmbfsといった名前で、Windowsとファイル共有する時とかに使われています
SMBのバージョン
SMB
初期バージョン
実装OS:WindowsNT 3.X/etc
CIFS
SMBをベースにオープン規格化されたものだが、現在ではSMBの方をMicrosoftがオープンにしているので、なんか可哀想な子
実装OS:Windows 9x/Windows Me/Windows NT 4.x
SMB 1.0
Kerberos認証やActive Directoryに対応
実装OS:Windows 2000/Windows XP/Windows Server 2003/Windows Server 2003 R2
SMB 2.0
このバージョンからプロトコルの中身ががらっと変わったらしい
実装OS:Windows Vista/Windows Server 2008
SMB 2.1
ブランチキャッシュ(WAN経由のファイルサーバとかにアクセスにする時、クライアント側にキャッシュあるなら、わざわざサーバに取りにいかず、高速なファイルアクセスを可能にす機能)に対応
実装OS:Windows 7/Windows Server 2008 R2
SMB 3.0
ここら辺から大きな機能改変は無い
実装OS:Windows 8/Windows Server 2012
SMB 3.1
現在の最新バージョン
実装OS:Windows 10/Windows Server 2016
ちなみにWannaCryでお祭り騒ぎの火付け役になってくれたバージョンは・・・
SMB 1.0!!
こいつです
実のところWannaCryは、WindowsXPなんていうサポート切れたく●OS何時迄も使ってんじゃねーよ!
っていうゲイツからのメッセージだったりして(笑)
WannaCryの対策として、OSがWindows Vista/Windows Server 2008以上のものはSMB 1.0無効にする方法がありますが
例↓(Windows8.1/2012 R2以上のOS、それ以前はsc.exeコマンド使用)
これやるとWindows XPとかが
ってなります(このネタしってる人は古参ニコ厨確定)
噂ではありますが、次回の大型WindowsUpdateでSMB 1.0はもう使えなくなるとかなんとか
SMBの前提
L4のネットワーク接続
TCP/IPかNetBEUI
名前解決
NetBIOSかDNS
Port
NetBIOS:137(TCP/UDP)、138(UDP)、139(TCP)
Direct Hosting SMB(Windows 2000以降のTCP/IPを使用したSMB):445(TCP/UDP)
SMBパケットキャプチャ
LAN内のPCにある共有ファイルにコマンドプロンプト経由でアクセスしたところをキャプチャ
なんでコマンドプロンプトなのかって?
GUIだとフォルダ更新監視する為にセッション張りっぱなしになるし、視覚情報やファイル一覧とかの情報も取ってくるので、ノイズががががぁぁってなるからだからです
また、キャプチャ取る時に注意して欲しいのがSMBのバージョンです
SMB2を使っている環境なのに、SMBでフィルタかけてもなにも表示されません
キャプチャしたパケット
かなり通信の過程が省略されしまっているので、解説に使うキャプチャはWiresharkWikiにあるサンプルパケットを使います(笑)
通信手順
1.TCP sessionの確立
3WayハンドシェイクでTCP sessionを確立している
2.NetBIOS sessionの確立
Negotiate Requestの段階で、TCP sessionの中にNetBIOS sessionを確立するようなんですが、パケットの中身を見てみたところ
ほとんど情報をやり取りしてませんでした
どうもNetBEUI使用時代の名残であるだけのセッションらしく、TCP/IP環境下では正直いるのか?
ってなりますが、ないと上手くいかないとかなんとか
3.Negotiate Request&Negotiate Response
クライアントとサーバの機能レベルのすり合わせ、サーバからの認証要求的なことをやってるっぽい
Negotiate Responseパケットの中を覗いてみると
DFSをサポートしてますよ~だとか
暗号化はサポートしてませんよ~とか
クライアントに認証おねしゃす!ってかんじの中身が見て取れる
4.SMB sessionの確立
ここから認証情報のやり取りをしてSMB sessionを確立しているっぽい
Session Setup Requestの中を覗いてみると
ドメイン名だけ入れて、User nameがNULLなんで匿名アクセスでもしてるんですかね
Session Setup Responseの中を覗いてみると
STATUS_SUCCESSになっとる
セキュリティェ・・・
正しいかどうか分からないけど、WannaCryはサーバ側に管理者権限でSMB sessionを張って、ウイルス送りつけて実行とかなんとかってどっかで見た気がしたから、SMBの脆弱性って、穴をつけばAdministratorのパスワード無しでSMB session張れる的な感じなのかな?
だとしたら恐ろしすぐる
5.Tree sessionの確立
SMB sessionの中にTree sessionを確立しているっぽい
フォルダパス指定してそのフォルダ自体にsession確立するんっすね
Tree Connect Requestの中を覗いてみると
アクセスしたいフォルダのパス指定してますね
Tree Connect Responseの中を覗いてみると
STATUS_SUCCESSとなっているので、指定したフォルダパスあったんですね
6.Create Request&Create Response
ここから先程sessionを張ったフォルダに対してアクションを行っています
Create Requestの中を覗いてみると
Disposition:Open(if file exists open it, else fail)となっているので、
指定したfileがあればOpenして、なければfailを返せってことですね
場合によってはここをelse createとして、指定したfileがなければcreateとかもあるらしいです
てかこのCreate Request、Filenameが空だぞ?
Create Responseの中を覗いてみると
Create Action:The file existed and was openedとなっているので
指定したfileあったらしいっす
ようわからん(笑)
fileがCreateされた時刻とかもここでクライアントにResponseしてますね
7.GetInfo Request&GetInfo Response
ここで追加のfile情報の要求をしてるっぽい
GetInfo Responseの中を覗いてみると
なんか色々な情報をResponseしてますが、見るのたるいんでスルーで(笑)
検証結果
SMBのセキュリティの要はやはりSMB session確立時の認証だと思います(まあ当然な気もするが)
ここをAdministratorで認証された日には\(^o^)/オワタ
最後に未だにWindosXP使ってるやつ