# DS0012 — Script
## Descrição
**Script** refere-se a um arquivo ou fluxo (stream) contendo uma lista de comandos que podem ser executados em sequência. Scripts são utilizados extensivamente em automação, administração de sistemas e DevOps — e, por isso, são também um dos vetores de ataque mais comuns em ambientes corporativos. Os formatos mais relevantes incluem: PowerShell (`.ps1`), VBScript (`.vbs`), JScript (`.js`), batch (`.bat`/`.cmd`), WSH (Windows Script Host), HTA (`.hta`), e scripts de macro em documentos Office.
Em ambientes Windows, o abuso de scripts é a espinha dorsal de inúmeras campanhas de phishing, movimentação lateral e execução de payloads. Grupos como [[g0102-conti-group|Wizard Spider]] (operadores de Ryuk/Conti), [[ta505|TA505]] e atores de ameaça direcionados ao Brasil utilizam PowerShell ofuscado, VBScript em documentos maliciosos e scripts HTA como primeiro estágio de infecção. Em ambientes ESXi/VMware, scripts bash e Python são usados por adversários como o [[blackcat|ALPHV/BlackCat]] para criptografar VMs em massa.
A detecção de scripts maliciosos depende fundamentalmente do **Script Block Logging** do PowerShell (Windows Event ID 4104), que captura o conteúdo completo do bloco de script — inclusive após desofuscação. Sem esse log habilitado, scripts PowerShell codificados em Base64 são virtualmente invisíveis para análise forense post-mortem.
## Pipeline de Coleta
```mermaid
graph TB
A["📄 Script PowerShell<br/>VBScript · JScript · HTA"] --> B["📋 Script Block Log EID 4104<br/>Conteúdo desofuscado (GPO!)"]
A --> C["🔍 Sysmon EID 1<br/>wscript · cscript · mshta<br/>+ linha de comando"]
D["🖥️ ESXi Shell<br/>Scripts bash em VMware"] --> E["📋 ESXi Shell Log<br/>/var/log/shell.log"]
B --> F["📡 WEF / Agente SIEM<br/>Canal PowerShell/Operational"]
C --> F
E --> F
F --> G["🗄️ SIEM<br/>Sentinel · Splunk · Elastic"]
G --> H["🚨 Alerta<br/>Base64 · IEX · mshta HTTP<br/>Cradle de download"]
```
## Componentes de Dados
| Componente | ID | Descrição |
|---|---|---|
| Script Execution | [[dc0029-script-execution\|DC0029]] | Execução de um script — inclui conteúdo do script (se logging habilitado), interpretador, usuário e contexto |
## Como Coletar
### Windows — PowerShell
| Fonte | Configuração | Event IDs relevantes |
|---|---|---|
| **PowerShell Script Block Logging** | GPO: `Computer Config → Admin Templates → Windows Components → Windows PowerShell → Script Block Logging = Enabled` | **4104** (bloco de script — conteúdo completo) |
| **PowerShell Module Logging** | GPO: `Module Logging = Enabled`, módulos: `*` | 4103 (execução de pipeline de módulo) |
| **PowerShell Transcription** | GPO: `Turn on PowerShell Transcription = Enabled` | Arquivos de transcrição em disco (path configurável) |
| **Windows Event Forwarding (WEF)** | Coletar do canal `Microsoft-Windows-PowerShell/Operational` | 4100, 4103, 4104, 4105, 4106 |
| **Sysmon** | Event ID 1 (criação do processo `powershell.exe`) + Event ID 11 (FileCreate para scripts) | 1, 11, 15 |
**GPO completa para logging de PowerShell:**
```
Computer Configuration\Administrative Templates\Windows Components\Windows PowerShell
→ Turn on Module Logging: Enabled (Módulos: *)
→ Turn on PowerShell Script Block Logging: Enabled
→ Turn on Script Execution: Enabled (Allow all scripts)
→ Turn on PowerShell Transcription: Enabled
→ Transcript output directory: \\server\ps-transcripts\%computername%
```
### Windows — VBScript / JScript / HTA / WScript
| Fonte | Configuração | Coleta |
|---|---|---|
| **Sysmon Event ID 1** | ProcessCreate com `wscript.exe`, `cscript.exe`, `mshta.exe` | Linha de comando com nome do script |
| **Windows Event ID 4688** | Auditoria de criação de processo com linha de comando | `wscript.exe script.vbs`, `mshta.exe arquivo.hta` |
| **AppLocker / WDAC Logs** | Bloqueio de scripts não autorizados | Bloqueios registrados em `Microsoft-Windows-AppLocker/MSI and Script` |
### ESXi / VMware
| Fonte | Configuração | Coleta |
|---|---|---|
| **ESXi Shell Logging** | `esxcli system syslog config set --logdir=/scratch/log` | Comandos executados via shell ESXi |
| **vCenter Server Logs** | `/var/log/vmware/vpx/` | Chamadas de API e scripts remotos |
| **Bash History** | `/var/log/shell.log` no ESXi | Histórico de comandos interativos |
### Integração com SIEM
```
# Splunk — PowerShell com encoding Base64 (indicador de ofuscação)
index=wineventlog EventCode=4104
| where match(ScriptBlockText, "(?i)(-[Ee][Nn][Cc]|[Ff][Rr][Oo][Mm][Bb][Aa][Ss][Ee]64|[Cc][Oo][Nn][Vv][Ee][Rr][Tt]\.)")
| stats count by Computer, UserID, ScriptBlockText
| sort -count
# Splunk — mshta.exe executando URL remota (técnica muito comum no Brasil)
index=wineventlog EventCode=4688
| where match(Process_Name, "(?i)mshta\.exe")
AND match(Process_Command_Line, "(?i)(http|https|ftp)://")
| table _time, Computer, Account_Name, Process_Command_Line
# Splunk — PowerShell baixando e executando (cradle clássico)
index=wineventlog EventCode=4104
| where match(ScriptBlockText, "(?i)(IEX|Invoke-Expression|DownloadString|WebClient|Net\.WebClient)")
| stats count by Computer, UserID, ScriptBlockText
```
## Técnicas Detectadas
| ID MITRE | Técnica | Sinal de detecção |
|---|---|---|
| [[t1059-001-powershell\|T1059.001]] | PowerShell | Script Block Log (EID 4104) com conteúdo ofuscado, encoded, ou cradles de download |
| [[t1059-005-visual-basic\|T1059.005]] | Visual Basic | `wscript.exe`/`cscript.exe` executando `.vbs` de pasta temporária ou caminho de e-mail |
| [[t1059-007-javascript\|T1059.007]] | JavaScript | `wscript.exe`/`mshta.exe` executando JS ou HTA com URL remota |
| [[t1204-002-malicious-file\|T1204.002]] | Malicious File | Script executado por usuário via abertura de documento Office com macro |
| [[t1562-001-disable-or-modify-tools\|T1562.001]] | Disable or Modify Tools | Script PowerShell desabilitando Windows Defender, Sysmon, ou WEF |
## Gaps de Cobertura Brasil/LATAM
**Problemas críticos observados em SOCs brasileiros:**
- **PowerShell Script Block Logging desabilitado:** Este é o gap mais crítico e mais comum. Sem o Event ID 4104, uma campanha de phishing com PowerShell ofuscado passa completamente invisível. O custo de habilitar é zero — é uma configuração de GPO. Em incidentes de ransomware no Brasil, a ausência deste log foi o principal obstáculo à reconstrução forense do ataque.
- **Foco excessivo em linha de comando do processo:** Muitos SOCs brasileiros alertam para `powershell.exe -enc ...` no Event ID 4688, mas ignoram o Script Block Log. O problema: adversários evoluídos não passam o payload na linha de comando — eles carregam de memória, de registro, ou via download na linha de comando mas executam em blocos separados que só aparecem no EID 4104.
- **Ausência de monitoramento de scripts em ESXi:** Com o aumento de ataques de ransomware a ambientes VMware no Brasil (hospitais, bancos, governo), a falta de logging do shell ESXi é um ponto cego grave. Grupos como [[blackcat|ALPHV/BlackCat]] usam scripts bash para criptografar todas as VMs em minutos.
- **VBScript e HTA não monitorados:** O vetor de `mshta.exe` executando HTA remoto continua sendo usado amplamente em campanhas de phishing direcionadas ao Brasil, especialmente no setor financeiro. Pouquíssimos SIEMs têm regras para esse padrão.
**Recomendações:**
1. Habilitar PowerShell Script Block Logging (EID 4104) **imediatamente** em 100% dos endpoints Windows — é a ação de maior impacto/esforço disponível
2. Adicionar regras de detecção para `mshta.exe` com argumentos HTTP/HTTPS — extremamente prevalente em phishing LATAM
3. Implementar AppLocker ou WDAC para bloquear execução de scripts de pastas temporárias e de usuário
4. Em ambientes ESXi críticos, habilitar shell logging e centralizar no SIEM — especialmente antes de janelas de manutenção de terceiros
## Referências
- [[dc0029-script-execution|DC0029 — Script Execution]] — componente de dados desta fonte
- [[ds0009-process|DS0009 — Process]] — fonte complementar para o processo interpretador do script
- [[t1059-001-powershell|T1059.001 — PowerShell]] — técnica mais detectável por esta fonte
- [[t1059-005-visual-basic|T1059.005 — Visual Basic]] — VBScript via wscript/cscript
- [[m1042-disable-or-remove-feature-or-program|M1042 — Disable or Remove Feature or Program]] — desabilitar interpretadores desnecessários (WScript, MSHTA)
- [[m1045-code-signing|M1045 — Code Signing]] — exigir assinatura para execução de scripts PowerShell
- [[m1026-privileged-account-management|M1026 — Privileged Account Management]] — limitar quem pode executar scripts com privilégio elevado
---
*Fonte: [MITRE ATT&CK — DS0012](https://attack.mitre.org/datasources/DS0012)*