# T1070.003 - Clear Command History
## Técnica Pai
Sub-técnica de [[t1070-indicator-removal|T1070 - Indicator Removal]], que abrange todas as formas de apagamento de evidências de atividade maliciosa para dificultar análise forense e investigações de resposta a incidentes.
## Descrição
Além de apagar logs do sistema, adversários frequentemente limpam o histórico de comandos de contas comprometidas para ocultar as ações executadas durante uma intrusão. Intérpretes de comandos como Bash, Zsh, PowerShell e shells de dispositivos de rede registram automaticamente os comandos digitados, criando uma trilha forense valiosa que os adversários buscam eliminar.
Esta técnica é executada como parte da fase de **anti-forense pós-comprometimento** - após o objetivo principal ter sido atingido (exfiltração de dados, instalação de implante, movimentação lateral) - para dificultar a reconstrução da linha do tempo pelo time de [[_playbooks|resposta a incidentes]]. Em alguns casos, é executada em tempo real durante a intrusão para minimizar rastros imediatos.
A técnica afeta múltiplas plataformas:
- **Linux/macOS:** Histórico do Bash/Zsh armazenado em `~/.bash_history`, `~/.zsh_history` e variáveis de ambiente como `$HISTFILE`
- **Windows:** Histórico do [[t1059-001-powershell|PowerShell]] gerenciado pelo módulo PSReadLine, armazenado em `ConsoleHost_history.txt`
- **Dispositivos de rede:** CLIs de roteadores e switches (Cisco IOS, Juniper, etc.) mantêm logs de comandos que podem ser limpos via [[t1059-008-network-device-cli|Network Device CLI]]
- **ESXi:** Logs de shell do VMware ESXi em `/var/log/shell.log`
## Como Funciona
### Linux e macOS
O shell mantém o histórico em memória durante a sessão, controlado pela variável `$HISTFILE`. Ao encerrar a sessão, o histórico é gravado no arquivo de histórico. Adversários utilizam múltiplas abordagens:
- **Limpeza em memória:** `history -c` apaga o histórico da sessão atual (mas não o arquivo em disco)
- **Remoção do arquivo:** `rm ~/.bash_history` remove o arquivo de histórico permanentemente
- **Truncamento silencioso:** `cat /dev/null > ~/.bash_history` esvazia o arquivo sem removê-lo
- **Redirecionamento para null:** `export HISTFILE=/dev/null` faz todos os comandos da sessão atual serem descartados
- **Desativação completa:** `unset HISTFILE` desabilita o registro de histórico da sessão
- **Tamanho zero:** `export HISTSIZE=0` define o buffer de histórico como zero, impedindo registro
- **Edição seletiva:** Modificar `~/.bash_history` diretamente com um editor para remover linhas específicas
A combinação mais eficaz que adversários usam é: `history -c && export HISTFILE=/dev/null` - limpa o histórico atual e garante que nada sejá gravado ao encerrar a sessão.
### Windows - PowerShell
O PowerShell possui dois históricos distintos com comportamentos diferentes:
- **Histórico embutido:** Existe apenas na sessão atual; é destruído quando a sessão é encerrada. O comando `Clear-History` limpa este histórico, mas **não** afeta o PSReadLine.
- **PSReadLine (`ConsoleHost_history.txt`):** Persiste entre sessões, armazenado em `$env:APPDATA\Microsoft\Windows\PowerShell\PSReadLine\ConsoleHost_history.txt`. Este arquivo contém todo o histórico de comandos PowerShell e é o alvo prioritário dos adversários.
Para limpar o histórico persistente do PSReadLine, adversários utilizam:
- `Remove-Item (Get-PSReadLineOption).HistorySavePath` - remove o arquivo de forma limpa via PowerShell
- Acesso direto ao caminho do arquivo e exclusão via `del` ou `rm`
- `Set-PSReadLineOption -HistorySaveStyle SaveNothing` - desabilita gravação futura do histórico
### Dispositivos de rede
Em dispositivos Cisco IOS e similares, os comandos `clear logging` e `clear history` removem logs e histórico de comandos da CLI, dificultando a investigação de comprometimentos via [[t1059-008-network-device-cli|Network Device CLI]].
### VMware ESXi
Em servidores ESXi comprometidos - alvo frequente de grupos de ransomware - o arquivo `/var/log/shell.log` registra todos os comandos executados no shell ESXi. Adversários removem ou truncam este arquivo para ocultar atividades como desativação de máquinas virtuais e exfiltração de discos virtuais.
## Attack Flow
```mermaid
graph TB
A["Acesso ao Sistema<br/>(Shell interativo obtido)"] --> B{"Plataforma"}
B --> C["Linux / macOS<br/>~/.bash_history<br/>~/.zsh_history"]
B --> D["Windows<br/>PSReadLine<br/>ConsoleHost_history.txt"]
B --> E["Dispositivo de Rede<br/>Cisco IOS / Juniper<br/>clear logging / clear history"]
B --> F["VMware ESXi<br/>/var/log/shell.log"]
C --> G["history -c<br/>rm ~/.bash_history<br/>export HISTFILE=/dev/null<br/>export HISTSIZE=0"]
D --> H["Clear-History<br/>Remove-Item HistorySavePath<br/>Set-PSReadLineOption SaveNothing"]
E --> I["clear logging<br/>clear history<br/>(via Network Device CLI)"]
F --> J["rm /var/log/shell.log<br/>cat /dev/null > /var/log/shell.log"]
G --> K["Evidências de comandos<br/>eliminadas ou reduzidas"]
H --> K
I --> K
J --> K
K --> L["Dificulta análise forense<br/>Reconstrução da linha do tempo<br/>comprometida"]
```
## Exemplos de Uso
**Lazarus Group - Operações de espionagem e sabotagem**
O [[g0032-lazarus-group|Lazarus Group]], grupo APT norte-coreano, limpa sistematicamente o histórico de comandos como parte de sua rotina de anti-forense em intrusões de longa duração. Em operações de espionagem industrial, o grupo apaga rastros de comandos executados para exfiltração de propriedade intelectual, dificultando atribuição e análise de escopo.
**APT41 - Espionagem e crime financeiro**
O [[g0096-apt41|APT41]] combina limpeza de histórico com remoção de logs de sistema (via [[t1070-001-clear-windows-event-logs|T1070.001]]) como prática padrão de higiene operacional, especialmente em comprometimentos de longa duração que visam propriedade intelectual.
**TeamTNT - Grupo especializado em nuvem e containers**
O [[g0139-teamtnt|TeamTNT]], especializado em ataques a ambientes Linux/cloud e mineração de criptomoedas, executa `history -c` e remove `~/.bash_history` como parte de seus scripts de pós-comprometimento em instâncias comprometidas na AWS e Azure, incluindo ambientes brasileiros.
**Magic Hound - APT iraniano**
O [[g0059-magic-hound|Magic Hound]] (APT35) utiliza limpeza de histórico como parte de operações de espionagem no Oriente Médio, frequentemente combinada com remoção de logs para dificultar investigações forenses.
**Aquatic Panda - Espionagem industrial**
O [[g0143-aquatic-panda|Aquatic Panda]] inclui apagamento de histórico de comandos em suas playbooks de pós-comprometimento em alvos de tecnologia e defesa.
**Medusa Group - Ransomware**
O [[g1051-medusa-ransomware|Medusa Group]], operador de ransomware ativo contra organizações brasileiras, limpa histórico de comandos em servidores Linux e ESXi antes de acionar a criptografia, reduzindo a capacidade dos times de IR de reconstruir a cadeia de ataque.
## Detecção
A detecção de limpeza de histórico é desafiadora porque o próprio mecanismo de registro está sendo destruído. Estrategias eficazes focam em **detectar a ausência** e **monitorar o ato de apagar**:
- **Auditoria de arquivo:** Monitorar criação, modificação e exclusão de `~/.bash_history`, `~/.zsh_history` e `ConsoleHost_history.txt` via `auditd` (Linux) ou Sysmon.
- **Comandos suspeitos:** Detectar execução de `history -c`, `unset HISTFILE`, `export HISTSIZE=0`, `Clear-History`, e acesso ao caminho do PSReadLine.
- **Auditoria de shell:** Ferramentas como `auditd` com regras para `execve` de `bash`/`zsh` com argumentos suspeitos.
- **Centralização de logs:** Envio de histórico de comandos para SIEM centralizado (via `auditd` + `syslog`) antes que possam ser apagados localmente - a proteção mais eficaz.
- **Truncamento de arquivo:** Detectar arquivos de histórico com tamanho zero repentino ou redução abrupta de tamanho via monitoramento de integridade de arquivos (FIM).
```yaml
title: Limpeza de Histórico de Comandos Detectada
status: experimental
logsource:
category: process_creation
product: linux
detection:
selection_bash_clear:
Image|endswith:
- '/bash'
- '/sh'
- '/zsh'
CommandLine|contains:
- 'history -c'
- 'history -w /dev/null'
- 'HISTFILE=/dev/null'
- 'HISTSIZE=0'
- 'unset HISTFILE'
selection_file_removal:
Image|endswith:
- '/rm'
- '/shred'
CommandLine|contains:
- '.bash_history'
- '.zsh_history'
selection_truncaté:
Image|endswith:
- '/bash'
- '/sh'
CommandLine|contains:
- '/dev/null > ~/.bash_history'
- 'cat /dev/null >'
- 'truncaté -s 0'
condition: 1 of selection_*
falsepositives:
- Scripts legítimos de housekeeping em ambientes de CI/CD
- Administradores realizando limpeza intencional documentada
level: medium
tags:
- attack.defense_evasion
- attack.t1070.003
```
```yaml
title: Limpeza de Histórico PowerShell via PSReadLine
status: experimental
logsource:
category: process_creation
product: windows
detection:
selection_clear_history:
Image|endswith: '\powershell.exe'
CommandLine|contains:
- 'Clear-History'
- 'HistorySavePath'
- 'SaveNothing'
- 'ConsoleHost_history'
selection_file_delete:
Image|endswith:
- '\powershell.exe'
- '\cmd.exe'
CommandLine|contains:
- 'ConsoleHost_history.txt'
condition: 1 of selection_*
falsepositives:
- Scripts de hardening corporativo
- Automação de TI documentada
level: medium
tags:
- attack.defense_evasion
- attack.t1070.003
```
## Mitigação
| ID | Mitigação | Descrição |
|----|-----------|-----------|
| [[m1029-remote-data-storage\|M1029]] | Remote Data Storage | Encaminhar histórico de comandos e logs para um sistema de armazenamento centralizado e somente-leitura (SIEM, servidor de log remoto) via `auditd` + `rsyslog` ou agentes de coleta. Logs centralizados não podem ser apagados pelo adversário no host comprometido |
| [[m1022-restrict-file-and-directory-permissions\|M1022]] | Restrict File and Directory Permissions | Restringir permissões nos arquivos de histórico e logs de sistema para impedir que usuários não-privilegiados os modifiquem ou excluam diretamente |
| [[m1039-environment-variable-permissions\|M1039]] | Environment Variable Permissions | Controlar a capacidade de modificar variáveis de ambiente críticas como `$HISTFILE`, `$HISTSIZE` e `$HISTFILESIZE` em ambientes de alta segurança, especialmente em shells de contas de serviço |
| - | Auditoria obrigatória de comandos (auditd) | Configurar `auditd` para registrar todas as execuções de shell com `execve`, enviando para servidor remoto imutável - captura comandos independentemente do histórico do shell |
| - | Imutabilidade de logs | Em ambientes críticos, configurar arquivos de log como imutáveis com `chattr +i` ou usar sistemas de log append-only (ex.: journald com storage persistente) |
## Contexto Brasil/LATAM
A limpeza de histórico de comandos é uma técnica de anti-forense universal, mas seu impacto é amplificado em organizações brasileiras e latino-americanas onde **logs centralizados e monitoramento contínuo de endpoints são menos prevalentes**, especialmente em empresas de médio porte e autarquias governamentais.
Em investigações de incidentes conduzidas no Brasil, a ausência de histórico de comandos é um dos indicadores mais frequentemente encontrados em comprometimentos por grupos de [[ransomware]]. Operadores do [[g1051-medusa-ransomware|Medusa Group]] e afiliados do [[g0032-lazarus-group|Lazarus Group]] documentadamente apagam histórico de Bash em servidores Linux e histórico de shell em ambientes ESXi antes de acionar a criptografia - reduzindo drasticamente a capacidade dos times de IR de determinar o escopo do comprometimento.
O [[g0139-teamtnt|TeamTNT]], ativo em ataques a infraestrutura de nuvem com empresas brasileiras como alvo, inclui `unset HISTFILE && history -c` como primeiras instruções em seus scripts de pós-comprometimento públicados públicamente, demonstrando como a técnica é rotineira mesmo para grupos menos sofisticados.
Para organizações brasileiras, a recomendação prioritária é implementar **coleta centralizada de logs** com auditd e SIEM como medida base de [[m1029-remote-data-storage|armazenamento remoto]], garantindo que o histórico de comandos sobreviva independentemente das ações do adversário no host comprometido. Esta medida tem custo operacional baixo e impacto forense significativo.
## Referências
- MITRE ATT&CK - T1070.003: Indicator Removal: Clear Command History
- Técnica pai: [[t1070-indicator-removal|T1070 - Indicator Removal]]
- Técnicas relacionadas: [[t1070-001-clear-windows-event-logs|T1070.001 - Clear Windows Event Logs]], [[t1059-001-powershell|T1059.001 - PowerShell]], [[t1059-008-network-device-cli|T1059.008 - Network Device CLI]]
- Mitigações: [[m1029-remote-data-storage|M1029]], [[m1022-restrict-file-and-directory-permissions|M1022]], [[m1039-environment-variable-permissions|M1039]]
- Atores: [[g0032-lazarus-group|Lazarus Group]], [[g0096-apt41|APT41]], [[g0139-teamtnt|TeamTNT]], [[g0059-magic-hound|Magic Hound]], [[g0143-aquatic-panda|Aquatic Panda]], [[g1051-medusa-ransomware|Medusa Group]]
- Malware: [[s1203-j-magic|J-magic]], [[s0641-kobalos|Kobalos]], [[s0601-hildegard|Hildegard]]
*Fonte: MITRE ATT&CK - T1070.003*