# 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*