O que Análise de Rootkits de Kernel Linux faz?
Visão Geral
Rootkits de kernel Linux operam no ring 0, modificando estruturas de dados do kernel para ocultar processos, arquivos, conexões de rede e módulos de kernel de ferramentas de espaço de usuário. A detecção requer forense de memória (analisando dumps de memória física com Volatility3) ou análise de visão cruzada (comparando /proc, /sys e estruturas de dados do kernel por inconsistências). Esta skill cobre o uso de plugins do Volatility3 para Linux para detectar hooks na tabela de syscalls, módulos de kernel ocultos e ponteiros de função modificados, complementado por varreduras ao vivo com rkhunter e chkrootkit.
Quando Usar
- Ao investigar incidentes de segurança que exigem análise de rootkits de kernel Linux
- Ao construir regras de detecção ou consultas de caça a ameaças neste domínio
- Quando analistas de SOC precisam de procedimentos estruturados para este tipo de análise
- Ao validar a cobertura de monitoramento de segurança para técnicas de ataque relacionadas
Pré-requisitos
- Volatility3 instalado (pip install volatility3)
- Dump de memória Linux (adquirido via LiME, AVML ou /proc/kcore)
- Tabela de símbolos Linux do Volatility3 (ISF) correspondente à versão do kernel alvo
- rkhunter e chkrootkit para varredura ao vivo
- Imagem de kernel de referência conhecida como boa para comparação
Passos
Passo 1: Adquirir o Dump de Memória
Capture a memória física do Linux usando o módulo de kernel LiME ou AVML para instâncias em nuvem.
Passo 2: Analisar com Volatility3
Execute os plugins linux.check_syscall, linux.lsmod, linux.hidden_modules e linux.check_idt para detectar artefatos de rootkits.
Passo 3: Análise de Visão Cruzada
Compare listas de módulos de /proc/modules, lsmod e /sys/module para identificar módulos ocultos de uma visão, mas presentes em outra.
Passo 4: Varredura ao Vivo
Execute rkhunter e chkrootkit para detectar assinaturas conhecidas de rootkits, arquivos suspeitos e binários do sistema modificados.
Saída Esperada
Relatório JSON contendo hooks de syscall detectados, módulos de kernel ocultos, entradas IDT modificadas, discrepâncias suspeitas em /proc e achados do rkhunter.
Exemplo de Saída
$ sudo python3 rootkit_analyzer.py --memory /evidence/linux-mem.lime --profile Ubuntu2204
Relatório de Análise de Rootkit de Kernel Linux
===============================================
Imagem de Memória: /evidence/linux-mem.lime
Versão do Kernel: 5.15.0-91-generic (Ubuntu 22.04 LTS)
Horário da Análise: 2024-01-18 09:15:32 UTC
[+] Escaneando tabela de syscalls por hooks...
Base da Tabela de Syscalls: 0xffffffff82200300
Total de syscalls verificadas: 449
SYSCALLS COM HOOK DETECTADAS:
┌─────────┬──────────────────┬──────────────────────┬──────────────────────┐
│ NR │ Syscall │ Endereço Esperado │ Endereço Atual │
├─────────┼──────────────────┼──────────────────────┼──────────────────────┤
│ 0 │ sys_read │ 0xffffffff8139a0e0 │ 0xffffffffc0a12000 │
│ 2 │ sys_open │ 0xffffffff8139b340 │ 0xffffffffc0a12180 │
│ 78 │ sys_getdents64 │ 0xffffffff813f5210 │ 0xffffffffc0a12300 │
│ 62 │ sys_kill │ 0xffffffff8110c4a0 │ 0xffffffffc0a12480 │
└─────────┴──────────────────┴──────────────────────┴──────────────────────┘
AVISO: 4 hooks de syscall detectados - comportamento de rootkit confirmado
[+] Verificando módulos de kernel ocultos...
Módulos carregados (lsmod): 147
Módulos na lista kobject: 149
MÓDULOS OCULTOS:
- "netfilter_helper" em 0xffffffffc0a10000 (tamanho: 12288)
- "kworker_sched" em 0xffffffffc0a14000 (tamanho: 8192)
[+] Escaneando /proc por discrepâncias...
Processos na lista task_struct: 234
Processos visíveis em /proc: 231
PROCESSOS OCULTOS:
- PID 31337 cmd: "[kworker/0:3]" (disfarçado como thread do kernel)
- PID 31442 cmd: "rsyslogd" (falso, rsyslogd real é PID 892)
- PID 31500 cmd: "" (processo sem nome)
[+] Verificando entradas IDT...
Entradas IDT escaneadas: 256
Entradas modificadas: 0 (limpo)
[+] Executando varredura rkhunter...
Verificando rootkits conhecidos: 68 variantes verificadas
Rootkit Diamorphine: AVISO - assinaturas correspondem
Verificações de binários do sistema:
/usr/bin/ps: MODIFICADO (discrepância SHA-256)
/usr/bin/netstat: MODIFICADO (discrepância SHA-256)
/usr/bin/ls: MODIFICADO (discrepância SHA-256)
/usr/sbin/ss: OK
[+] Análise de rede...
Conexões ocultas (não em /proc/net/tcp):
ESTABELECIDA 0.0.0.0:0 -> 198.51.100.47:4443 (PID 31337)
ESTABELECIDA 0.0.0.0:0 -> 198.51.100.47:8080 (PID 31442)
Resumo:
Tipo de Rootkit: Módulo de Kernel Carregável (LKM)
Família Provável: Variante Diamorphine
Hooks de Syscall: 4 (read, open, getdents64, kill)
Módulos Ocultos: 2
Processos Ocultos: 3
Conexões Ocultas: 2 (C2: 198.51.100.47)
Binários Modificados: 3 (/usr/bin/ps, netstat, ls)
Nível de Risco: CRÍTICO