# T1037.004 - RC Scripts
## Técnica Pai
Esta é uma sub-técnica de [[t1037-boot-or-logon-initialization-scripts|T1037 - Scripts de Inicialização de Boot ou Logon]].
## Descrição
Os **RC scripts** (Run Commands) são arquivos de shell executados automaticamente durante a inicialização de sistemas Unix-like para configurar o ambiente e iniciar serviços. Os principais são `rc.local`, `rc.common` e scripts específicos de cada distribuição localizados em `/etc/init.d/` ou `/etc/rc.d/`. Como são executados como root durante o processo de boot, qualquer comando inserido nesses arquivos terá os mais altos privilégios no sistema.
Adversários modificam esses scripts de inicialização para incluir caminhos para binários maliciosos ou comandos de shell que são executados automaticamente em cada reinicialização. Diferente de mecanismos mais modernos como systemd, os RC scripts oferecem uma interface direta e amplamente compatível - qualquer linha válida de shell adicionada ao arquivo será executada sem válidações adicionais de integridade ou autenticação.
Essa técnica tem relevância especial em ambientes de infraestrutura crítica. Servidores **ESXi** da VMware armazenam a maior parte dos arquivos de sistema em memória e os descartam ao desligar, tornando o `/etc/rc.local.d/local.sh` um dos poucos mecanismos de persistência que sobrevivem a reinicializações. Dispositivos de rede, IoT e sistemas embarcados baseados em distribuições Unix minimalistas - que frequentemente rodam como root por padrão e não oferecem controles modernos de integridade - são igualmente vulneráveis. Embora sistemas modernos como Ubuntu e Debian tenham migrado para systemd, muitos ainda executam `rc.local` se o arquivo existir com as permissões corretas, mantendo a superfície de ataque ativa.
**Contexto Brasil/LATAM:** Infraestruturas de virtualização VMware ESXi são amplamente utilizadas em datacenters brasileiros e latino-americanos, tanto em empresas privadas quanto no setor público. O grupo [[g1048-unc3886|UNC3886]] - ligado à China - e o [[g1047-velvet-ant|Velvet Ant]] foram documentados explorando `rc.local.d/local.sh` em servidores ESXi para manter acesso persistente em campanhas de espionagem de longa duração contra setores de [[_sectors|tecnologia e governo]] na região. O [[g0016-apt29|APT29]] também utiliza RC scripts em fases de pós-comprometimento de servidores Linux. O malware [[s0687-cyclops-blink|Cyclops Blink]], atribuído ao grupo Sandworm, emprega essa técnica em dispositivos de rede comprometidos.
## Attack Flow
```mermaid
graph TB
A[Acesso Privilegiado ao Sistema] --> B[Identificação do script RC<br/>rc.local / rc.common / local.sh]
B --> C[Modificação do RC Script<br/>inserção de comando malicioso]
C --> D[ESTA TÉCNICA<br/>T1037.004 - RC Scripts]
D --> E{Sistema reiniciado<br/>ou evento de boot}
E --> F[Script executado como root<br/>na inicialização]
F --> G[Payload carregado com<br/>privilégios máximos]
G --> H[Persistência garantida<br/>entre reinicializações]
```
## Como Funciona
1. **Preparação** - O adversário obtém acesso privilegiado (root ou equivalente) ao sistema-alvo via exploração de vulnerabilidade, escalada de privilégios ou uso de credenciais comprometidas. Em ambientes ESXi, esse acesso pode ser obtido por meio do acesso administrativo ao hipervisor.
2. **Localização do script** - O atacante identifica o arquivo RC script adequado ao sistema: `/etc/rc.local` (Linux genérico), `/etc/rc.common` (macOS antigo), `/etc/rc.local.d/local.sh` (ESXi), ou scripts específicos em `/etc/init.d/` conforme a distribuição.
3. **Implantação do payload** - Um comando ou caminho para binário malicioso é inserido no script RC, tipicamente antes da linha `exit 0` final. O binário malicioso pode estar pré-implantado em um diretório oculto ou ser baixado na primeira execução.
4. **Pós-execução** - Em cada reinicialização do sistema, o script RC é executado com privilégios de root, carregando o payload do adversário. Em ESXi, isso garante que o backdoor sejá recarregado mesmo após manutenções que reinicializam o hipervisor.
**Exemplo de modificação em rc.local:**
```bash
# Conteúdo adicionado em /etc/rc.local antes de "exit 0"
# Backdoor camuflado como processo de sistema
/usr/lib/systemd/.cache/svc -d >/dev/null 2>&1 &
```
**Exemplo em ESXi (local.sh):**
```bash
# /etc/rc.local.d/local.sh - único arquivo persistente entre reboots no ESXi
/store/.vmware/.agent -c /store/.vmware/config.bin &
```
## Detecção
**Fontes de dados:** Monitoramento de integridade de arquivos (FIM) nos scripts RC, logs de auditoria de escrita em arquivos críticos de inicialização, análise de processos filhos iniciados durante o boot, comparação de hashes de arquivos de sistema.
```yaml
title: Modificação de RC Script de Inicialização
id: b7c2d4e1-9a83-4f6b-c8e2-2345678901cd
status: experimental
description: >
Detecta modificações em arquivos RC scripts utilizados durante a inicialização
do sistema, indicativo de tentativa de persistência via T1037.004.
logsource:
category: file_change
product: linux
detection:
selection_rc_files:
TargetFilename|startswith:
- '/etc/rc'
- '/etc/init.d/'
- '/etc/rc.d/'
- '/etc/rc.local'
selection_esxi:
TargetFilename|contains: 'rc.local.d'
condition: selection_rc_files or selection_esxi
falsepositives:
- Atualizações de pacotes via gerenciador (apt, yum, dnf)
- Instalação legítima de serviços pelo administrador
- Scripts de provisionamento de infraestrutura (Ansible, Chef, Puppet)
level: high
tags:
- attack.persistence
- attack.t1037.004
```
**Indicadores complementares:**
- Processos iniciados pelo PID 1 (init/systemd) não presentes no baseline de serviços
- Arquivos binários em caminhos incomuns (`/tmp`, `/dev/shm`, diretórios ocultos) executados durante o boot
- Em ESXi: hashes de `local.sh` divergindo do padrão de instalação
- Conexões de rede estabelecidas logo após a inicialização por processos não catalogados
## Mitigação
| Mitigação | Recomendação Prática |
|-----------|---------------------|
| [[m1022-restrict-file-and-directory-permissions\|M1022 - Restrict File and Directory Permissions]] | Definir permissões restritivas nos arquivos RC (modo 700 ou 750, proprietário root). Auditar regularmente com `ls -la /etc/rc*` e verificar integridade via hash |
| [[m1047-audit\|M1047 - Audit]] | Configurar `auditd` com regras de monitoramento de escrita em todos os arquivos RC scripts. Em ESXi, usar soluções de integridade como Carbon Black ou CrowdStrike para hipervisores |
| [[m1018-user-account-management\|M1018 - User Account Management]] | Limitar ao mínimo as contas com acesso root/administrativo. Em ESXi, desabilitar o acesso root direto via SSH quando não necessário e auditar todos os logins privilegiados |
| [[m1038-execution-prevention\|M1038 - Execution Prevention]] | Onde possível, implementar listas de permissão de processos autorizados a iniciar durante o boot. Em Linux moderno, considerar migração completa para systemd com units válidados |
## Threat Actors que Usam Esta Técnica
- [[g1047-velvet-ant|Velvet Ant]] - grupo chinês documentado usando RC scripts em ESXi em campanhas de espionagem de longa duração
- [[g1048-unc3886|UNC3886]] - cluster de ameaça associado à China, explorou `local.sh` em ESXi para persistência em infraestruturas de telecomúnicações e governo
- [[g0016-apt29|APT29]] - grupo SVR russo que utiliza RC scripts em servidores Linux comprometidos em fases de pós-exploração
## Software Associado
- [[s0394-hiddenwasp|HiddenWasp]] - implante Linux que utiliza RC scripts para garantir persistência em servidores comprometidos
- [[s0690-green-lambert|Green Lambert]] - malware macOS que abusa do `rc.common` para persistência em versões antigas do sistema
- [[s0687-cyclops-blink|Cyclops Blink]] - malware atribuído ao Sandworm que compromete dispositivos de rede via RC scripts
- [[ikitten|iKitten]] - adware/spyware para macOS que persiste via `rc.common` em versões antigas do OS X
## Referências
*Fonte: [MITRE ATT&CK - T1037.004](https://attack.mitre.org/techniques/T1037/004/)*