Visão Geral da Proteção
O Wazuh SIEM oferece múltiplas camadas de deteção para identificar e prevenir ataques de cadeia de fornecimento como o comprometimento do Notepad++. Apresento uma implementação prática para o seu ambiente.
1. Monitorização de Integridade de Ficheiros (FIM)
Configuração para Detetar Instaladores Maliciosos NSIS
xml
<!-- /var/ossec/etc/ossec.conf -->
<syscheck>
<directories check_all="yes" realtime="yes" report_changes="yes">
C:\Users\*\AppData\Local\Temp
</directories>
<!-- Detetar criação do diretório característico NSIS -->
<directories check_all="yes" realtime="yes" report_changes="yes">
C:\Users\*\AppData\Local\Temp\ns*.tmp
</directories>
<!-- Monitorizar diretórios de dropper identificados -->
<directories check_all="yes" realtime="yes" report_changes="yes">
C:\Users\*\AppData\Roaming\ProShow
C:\Users\*\AppData\Roaming\Adobe\Scripts
C:\Users\*\AppData\Roaming\Bluetooth
</directories>
</syscheck>
Regra Personalizada para NSIS Suspeito
xml
<!-- /var/ossec/etc/rules/local_rules.xml -->
<group name="notepad_apt,">
<!-- Deteção de diretório NSIS temporário -->
<rule id="100001" level="10">
<if_sid>550</if_sid>
<field name="file">ns\.tmp</field>
<description>Possível instalador NSIS malicioso detetado (Notepad++ APT)</description>
<mitre>
<id>T1027</id>
<id>T1195.002</id>
</mitre>
</rule>
<!-- Deteção de ficheiros em diretórios de dropper -->
<rule id="100002" level="12">
<if_sid>550</if_sid>
<field name="file">ProShow\\load$|Adobe\\Scripts\\alien\.ini$|Bluetooth\\BluetoothService$</field>
<description>Ficheiro malicioso de cadeia de infeção Notepad++ detetado</description>
<mitre>
<id>T1574.002</id>
</mitre>
</rule>
</group>
2. Deteção de Processos Suspeitos
Monitorização Sysmon para DLL Sideloading
xml
<!-- C:\Program Files (x86)\ossec-agent\sysmon-config.xml -->
<Sysmon schemaversion="4.82">
<EventFiltering>
<!-- Detetar carregamento de DLLs maliciosas -->
<ImageLoad onmatch="include">
<ImageLoaded condition="end with">log.dll</ImageLoaded>
<ImageLoaded condition="end with">alien.dll</ImageLoaded>
<ImageLoaded condition="end with">lua5.1.dll</ImageLoaded>
</ImageLoad>
<!-- Detetar processos legítimos abusados -->
<ProcessCreate onmatch="include">
<Image condition="end with">ProShow.exe</Image>
<Image condition="end with">script.exe</Image>
<Image condition="end with">BluetoothService.exe</Image>
<ParentImage condition="contains">AppData\Roaming</ParentImage>
</ProcessCreate>
</EventFiltering>
</Sysmon>
Regras Wazuh para Sysmon
xml
<!-- /var/ossec/etc/rules/local_rules.xml -->
<group name="sysmon,notepad_apt">
<!-- Deteção de DLL sideloading -->
<rule id="100010" level="12">
<if_sid>61603</if_sid>
<field name="win.eventdata.imageLoaded">\\log\.dll$|\\alien\.dll$</field>
<description>DLL sideloading detetado - Cadeia de infeção Notepad++ APT</description>
<mitre>
<id>T1574.002</id>
</mitre>
</rule>
<!-- Processo legítimo em localização suspeita -->
<rule id="100011" level="10">
<if_sid>61603</if_sid>
<field name="win.eventdata.image">ProShow\.exe|BluetoothService\.exe</field>
<field name="win.eventdata.image">AppData\\Roaming</field>
<description>Executável legítimo em localização anómala (Notepad++ APT)</description>
<mitre>
<id>T1036</id>
</mitre>
</rule>
</group>
3. Deteção de Comandos de Reconhecimento
Monitorização de CommandLine via Sysmon
xml
<!-- Regras para comandos de reconhecimento -->
<group name="reconnaissance,notepad_apt">
<!-- Sequência de comandos característica -->
<rule id="100020" level="8">
<if_sid>61603</if_sid>
<field name="win.eventdata.commandLine">cmd\.exe.*whoami</field>
<description>Comando de reconhecimento: whoami</description>
<mitre>
<id>T1033</id>
</mitre>
</rule>
<rule id="100021" level="8">
<if_sid>61603</if_sid>
<field name="win.eventdata.commandLine">cmd\.exe.*tasklist</field>
<description>Comando de reconhecimento: tasklist</description>
<mitre>
<id>T1057</id>
</mitre>
</rule>
<rule id="100022" level="8">
<if_sid>61603</if_sid>
<field name="win.eventdata.commandLine">cmd\.exe.*systeminfo</field>
<description>Comando de reconhecimento: systeminfo</description>
<mitre>
<id>T1082</id>
</mitre>
</rule>
<rule id="100023" level="8">
<if_sid>61603</if_sid>
<field name="win.eventdata.commandLine">cmd\.exe.*netstat.*-ano</field>
<description>Comando de reconhecimento: netstat</description>
<mitre>
<id>T1049</id>
</mitre>
</rule>
<!-- Correlação: múltiplos comandos em sequência -->
<rule id="100024" level="15" frequency="3" timeframe="60">
<if_matched_sid>100020</if_matched_sid>
<if_matched_sid>100021</if_matched_sid>
<if_matched_sid>100022</if_matched_sid>
<same_source_ip />
<description>ALERTA CRÍTICO: Sequência de reconhecimento APT Notepad++ detetada</description>
<mitre>
<id>T1595</id>
</mitre>
</rule>
</group>
4. Deteção de Rede e DNS
Monitorização de Domínios Maliciosos
xml
<!-- /var/ossec/etc/lists/notepad_apt_iocs.txt -->
# Domínios C2 identificados pela Kaspersky
temp.sh
cdncheck.it.com
safe-dns.it.com
self-dns.it.com
api.skycloudcenter.com
api.wiresguard.com
# IPs maliciosos
45.76.155.202
45.32.144.255
95.179.213.0
45.77.31.210
59.110.7.32
124.222.137.114
Regras para Deteção DNS/HTTP
xml
<group name="network,notepad_apt">
<!-- Deteção de resolução DNS suspeita -->
<rule id="100030" level="12">
<if_group>web</if_group>
<list field="url" lookup="match_key_value">etc/lists/notepad_apt_iocs.txt</list>
<description>Conexão a domínio C2 conhecido (Notepad++ APT)</description>
<mitre>
<id>T1071.001</id>
</mitre>
</rule>
<!-- Deteção de temp.sh (exfiltração) -->
<rule id="100031" level="13">
<if_group>web</if_group>
<match>temp.sh</match>
<description>CRÍTICO: Tentativa de exfiltração via temp.sh (Notepad++ APT)</description>
<mitre>
<id>T1567.002</id>
</mitre>
</rule>
<!-- Deteção de User-Agent suspeito em requisições HTTP -->
<rule id="100032" level="10">
<if_group>web</if_group>
<field name="user_agent">temp\.sh</field>
<description>User-Agent malicioso detetado (Notepad++ APT C2)</description>
<mitre>
<id>T1071.001</id>
</mitre>
</rule>
</group>
5. Integração com Active Response
Resposta Automática a Ameaças
xml
<!-- /var/ossec/etc/ossec.conf -->
<active-response>
<!-- Isolar máquina em caso de deteção crítica -->
<command>firewall-drop</command>
<location>local</location>
<rules_id>100024,100031</rules_id>
<timeout>3600</timeout>
</active-response>
<active-response>
<!-- Matar processos maliciosos -->
<command>kill-process</command>
<location>local</location>
<rules_id>100011</rules_id>
<timeout>no</timeout>
</active-response>
<!-- Script personalizado para quarentena -->
<command>
<name>quarantine-file</name>
<executable>quarantine.sh</executable>
<timeout_allowed>no</timeout_allowed>
</command>
<active-response>
<command>quarantine-file</command>
<location>local</location>
<rules_id>100002</rules_id>
</active-response>
Script de Quarentena
bash
#!/bin/bash
# /var/ossec/active-response/bin/quarantine.sh
ACTION=$1
USER=$2
IP=$3
ALERTID=$4
RULEID=$5
# Extrair caminho do ficheiro do alerta
FILENAME=$(echo "$6" | jq -r '.syscheck.path')
if [ "$ACTION" = "add" ]; then
# Criar diretório de quarentena
QUARANTINE_DIR="/var/ossec/quarantine/$(date +%Y%m%d)"
mkdir -p "$QUARANTINE_DIR"
# Mover ficheiro malicioso
if [ -f "$FILENAME" ]; then
mv "$FILENAME" "$QUARANTINE_DIR/$(basename $FILENAME)_$(date +%s)"
# Registar ação
echo "$(date): Ficheiro $FILENAME colocado em quarentena por regra $RULEID" >> /var/ossec/logs/quarantine.log
fi
fi
6. Dashboard Kibana para Visualização
Query Elasticsearch para Análise
json
{
"query": {
"bool": {
"should": [
{ "match": { "rule.groups": "notepad_apt" }},
{ "match": { "rule.mitre.id": "T1195.002" }},
{ "match": { "data.win.eventdata.image": "notepad" }}
]
}
},
"aggs": {
"top_agents": {
"terms": { "field": "agent.name" }
},
"attack_timeline": {
"date_histogram": {
"field": "@timestamp",
"interval": "1h"
}
}
}
}
7. Implementação Prática – Script de Deploy
bash
#!/bin/bash
# deploy_notepad_apt_protection.sh
echo "[+] A instalar proteção APT Notepad++ no Wazuh..."
# 1. Copiar regras personalizadas
cat >> /var/ossec/etc/rules/local_rules.xml << 'EOF'
<!-- Incluir todas as regras acima -->
EOF
# 2. Criar lista de IOCs
cat > /var/ossec/etc/lists/notepad_apt_iocs.txt << 'EOF'
temp.sh
cdncheck.it.com
safe-dns.it.com
self-dns.it.com
EOF
# 3. Atualizar CDB
cd /var/ossec/etc/lists/
/var/ossec/bin/ossec-makelists
# 4. Reiniciar Wazuh Manager
systemctl restart wazuh-manager
echo "[+] Proteção implementada com sucesso!"
echo "[+] Verificar logs em: /var/ossec/logs/alerts/alerts.json"
8. Configuração de Agentes Windows
PowerShell – Deploy em Agentes
powershell
# install_sysmon_notepad_protection.ps1
# Download Sysmon
Invoke-WebRequest -Uri "https://download.sysinternals.com/files/Sysmon.zip" -OutFile "C:\Temp\Sysmon.zip"
Expand-Archive -Path "C:\Temp\Sysmon.zip" -DestinationPath "C:\Temp\Sysmon"
# Instalar Sysmon com configuração personalizada
C:\Temp\Sysmon\Sysmon64.exe -accepteula -i C:\sysmon-config.xml
# Configurar forwarding para Wazuh
Add-Content -Path "C:\Program Files (x86)\ossec-agent\ossec.conf" -Value @"
<localfile>
<location>Microsoft-Windows-Sysmon/Operational</location>
<log_format>eventchannel</log_format>
</localfile>
"@
# Reiniciar agente
Restart-Service -Name wazuh
9. Alertas e Notificações
Integração com Sistemas de Alerta
xml
<!-- /var/ossec/etc/ossec.conf -->
<integration>
<name>slack</name>
<hook_url>https://hooks.slack.com/services/YOUR/WEBHOOK/URL</hook_url>
<level>12</level>
<rule_id>100024,100031</rule_id>
<alert_format>json</alert_format>
</integration>
<integration>
<name>custom-email</name>
<hook_url>https://api.hjfr.info/wazuh/alert</hook_url>
<level>10</level>
<group>notepad_apt</group>
<alert_format>json</alert_format>
</integration>
10. Testes de Validação
Script de Teste (ATENÇÃO: Apenas em ambiente controlado!)
powershell
# test_notepad_apt_detection.ps1
# EXECUTAR APENAS EM AMBIENTE DE TESTE!
# Teste 1: Criar diretório NSIS
New-Item -Path "$env:LOCALAPPDATA\Temp\ns1234.tmp" -ItemType Directory
# Teste 2: Simular comandos de reconhecimento
cmd /c whoami > C:\Temp\test.txt
cmd /c tasklist >> C:\Temp\test.txt
cmd /c systeminfo >> C:\Temp\test.txt
cmd /c netstat -ano >> C:\Temp\test.txt
# Teste 3: Tentativa de resolução DNS (modo seguro)
nslookup temp.sh
Write-Host "[+] Testes concluídos. Verificar alertas no Wazuh."
Resultados Esperados
Alertas Gerados no Wazuh
json
{
"timestamp": "2026-02-04T10:30:00.000Z",
"rule": {
"level": 15,
"description": "ALERTA CRÍTICO: Sequência de reconhecimento APT Notepad++ detetada",
"id": "100024",
"mitre": {
"id": ["T1595"],
"tactic": ["Reconnaissance"],
"technique": ["Active Scanning"]
}
},
"agent": {
"name": "WORKSTATION-001",
"ip": "192.168.1.50"
},
"full_log": "cmd /c whoami&&tasklist&&systeminfo&&netstat -ano"
}
Benefícios da Implementação
Capacidades de Deteção
✅ Deteção Proativa:
- Identificação de instaladores NSIS maliciosos em tempo real
- Monitorização de DLL sideloading
- Correlação de comandos de reconhecimento
✅ Resposta Automática:
- Isolamento imediato de sistemas comprometidos
- Quarentena automática de ficheiros maliciosos
- Bloqueio de comunicações C2
✅ Visibilidade Completa:
- Timeline de ataque em dashboard Kibana
- Mapeamento MITRE ATT&CK
- Relatórios de conformidade RGPD
Manutenção Contínua
Atualização de IOCs
bash
# update_iocs.sh - Executar semanalmente
#!/bin/bash
# Download de feeds de threat intelligence
curl -s https://securelist.com/feed/iocs/latest | \
grep -E "notepad|temp.sh" >> /var/ossec/etc/lists/notepad_apt_iocs.txt
# Remover duplicados
sort -u /var/ossec/etc/lists/notepad_apt_iocs.txt -o /var/ossec/etc/lists/notepad_apt_iocs.txt
# Recompilar CDB
/var/ossec/bin/ossec-makelists
# Reiniciar manager
systemctl restart wazuh-manager
Conclusão
Esta implementação fornece proteção em profundidade contra ataques APT à cadeia de fornecimento, especificamente configurada para detetar as três cadeias de infeção do Notepad++. O Wazuh oferece:
- Deteção em tempo real de indicadores de compromisso
- Resposta automática a ameaças críticas
- Conformidade com frameworks de segurança (NIST, MITRE ATT&CK)
- Visibilidade centralizada para equipas SOC
Recomendação HJFR: Implementar esta configuração em todos os ambientes corporativos que utilizem Notepad++ ou editores de texto similares.
Documentação Técnica HJFR
Versão: 1.0
Data: 4 de fevereiro de 2026
Suporte: security@hjfr.info

