Skip to content
KitploitKITPLOIT
FerramentasBlog
Log in
Enviar
FerramentasBlog
Enviar

Ferramentas de Hacking, PenTest e Cibersegurança para o seu Arsenal de Segurança!

Kitploit é um diretório de ferramentas de hacking, cibersegurança e pentesting. Descubra as últimas atualizações de projetos para encontrar vulnerabilidades, analisar sistemas, automatizar testes e fortalecer sua segurança.

··Feeds·Contato·Privacidade·© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
SPiCa — Detector de rootkit Linux baseado em eBPF usando análise multi-canal de visão cruzada (sched_switch, NMI, /proc) para detectar DKOM, adulteração de tracepoint e ocultação de processos com verificação de integridade em nível de hardware. | Kitploit
Ferramentas/GitHubGitHub/0xkirisame/spica
Ferramentas DefensivasGerenciamento de Indicadores de Comprometimento (IOC)Análise ForenseAnálise de MalwareAnálise de BináriosDetecção de IntrusãoPapers e PesquisaAprendizado e EducaçãoResposta a IncidentesDetecção de Anomalias
GitHub
104629há 2 mesesRevisado pelo Kitploit

Mais Populares

Ver todos →

Descubra as ferramentas mais usadas pela nossa comunidade.

Explore todas as ferramentas

Navegue pela nossa coleção de ferramentas

Ver todas as ferramentas →
0xkirisame/spica

SPiCa

Detector de rootkit Linux baseado em eBPF usando análise multi-canal de visão cruzada (sched_switch, NMI, /proc) para detectar DKOM, adulteração de tracepoint e ocultação de processos com verificação de integridade em nível de hardware.

Ver Repositório
Compartilhar

SPiCa

Integridade de Processos do Sistema e Análise de Visão Cruzada

SPiCa

"Vou cantar, então brilhe intensamente, SPiCa..."

SPiCa é um detector de rootkit Linux baseado em eBPF escrito em Rust. O nome vem da música de Hatsune Miku SPiCa e da estrela que ela referencia — Spica (Alpha Virginis), o ponto mais brilhante em Virgem. O que parece uma única estrela a olho nu é na verdade uma binária espectroscópica: duas estrelas em órbita mútua, indistinguíveis como objetos separados sem medir seus espectros. SPiCa aplica o mesmo princípio à observação do kernel: múltiplos canais independentes medem o mesmo estado do kernel a partir de mecanismos fisicamente distintos, e um rootkit que suprime um é exposto pelos outros.

Aviso: Partes significativas deste código foram geradas ou refatoradas com auxílio de GLM. Testes rigorosos e design iterativo foram aplicados, mas revise o código quanto à segurança e desempenho antes do uso em produção.


Índice

  1. Modelo de Ameaça
  2. Visão Geral da Arquitetura
  3. O Canal de Observação sched_switch
  4. O Canal de Integridade NMI
  5. Lógica de Detecção
  6. Sigilo de Endereço Limitado pelo Verificador
  7. Portão de Acesso ao Mapa LSM
  8. Gerenciamento e Ofuscação de Chaves
  9. Selagem TPM Vinculada a PCR (Design)
  10. Defesa em Profundidade
  11. O Incidente do Bug BTF
  12. Limitações Conhecidas e Superfície de Ataque
  13. Compilar e Executar
  14. Roadmap
  15. Glossário

1. Modelo de Ameaça

O adversário restrito: o rootkit eBPF

SPiCa foi projetado para derrotar o adversário restrito por eBPF — um atacante com privilégios elevados (CAP_BPF ou CAP_SYS_ADMIN) que carrega um programa eBPF privilegiado no kernel. Esse adversário é fundamentalmente mais fraco que um rootkit LKM porque o verificador BPF impõe restrições rígidas:

RestriçãoEfeito no adversário
Laços limitados (~1M instruções por programa)Não pode escanear toda a memória do kernel
Segurança de ponteiros (desreferência direta requer alvo comprovadamente válido e limitado)Não pode seguir ponteiros arbitrários
Helpers restritos (lista de permissão por tipo de programa)Não pode chamar kmalloc, vmalloc ou qualquer função de alocação do kernel
Nenhuma escrita arbitrária no kernel (bpf_probe_write_kernel fortemente restrita)Não pode modificar task_struct, arrays de funções de tracepoint ou bytecode de programas BPF
Acesso ao mapa limitado às referências carregadasNão pode acessar mapas pertencentes a outros programas (a menos enumerados por ID — veja §7)

Com LKMs bloqueados pela porta LSM após a inicialização, esse adversário restrito é a ameaça realista restante. A maquinaria anti-evasão do SPiCa é calibrada para essa ameaça — toda defesa é honesta sobre o que cobre e o que não cobre.

Não objetivos

  • Exploits de kernel de nível nacional — corrupção de memória que resulta em escrita arbitrária no kernel sem init_module. SPiCa eleva o nível ao bloquear o vetor mais fácil de LKM, mas não limita o adversário superior.
  • LKMs hostis carregados antes da inicialização do SPiCa — defesa em profundidade (Secure Boot, assinatura de módulos, IMA) é necessária para a janela de inicialização.
  • Exploits do verificador — se o verificador BPF for inseguro (CVEs históricas: CVE-2020-27194, CVE-2022-23222, CVE-2023-2163), o adversário escapa do modelo restrito para execução arbitrária de código no kernel. Esta é uma classe de ameaça separada. As defesas do SPiCa se mantêm sob um verificador correto.

SPiCa é a camada de último recurso em uma pilha de defesa em profundidade, não um substituto para as camadas acima.


2. Visão Geral da Arquitetura

SPiCa executa quatro programas eBPF anexados a hooks do kernel, além de um motor de detecção em userspace que correlaciona suas saídas com a visão que o sistema tem de si mesmo (/proc).

Três canais de observação, cada um suprimível apenas por um mecanismo de custo crescente

CanalMecanismoO que o suprimeCusto da supressão
/procEnumeração de diretórios procfsDKOM (desvincular processo da lista de tarefas)Baixo — técnica de rootkit bem compreendida
sched_switchTracepoint eBPF no escalonadorDesanexar programa do array de funções; filtrar contextoMédio — requer escrita no kernel no array de funções
NMIInterrupção de contador de performance por hardware → evento de perf eBPFHook no IDT/manipulador NMIQuase certeza de pânico no kernel — interrupção de hardware, não mascarável

A principal propriedade arquitetural: um rootkit não pode suprimir todos os três canais simultaneamente sem que a supressão em si se torne detectável ou desestabilizadora. Suprimir NMI requer patchear o IDT (Tabela de Descritores de Interrupção), o que causa pânico na maioria dos kernels. Esta é a "bomba viva" — o único caminho do atacante para a cegueira total é aquele que provavelmente trava o sistema.

Modelo de detecção — três frases```

sched sees it, /proc doesn't → DKOM NMI finds sched's heartbeat stopped → TAMPER sched goes globally silent, /proc != empty → SILENT

Cada classe de detecção é um veredito diferencial: uma discrepância entre dois ou mais canais. O motor de detecção é uma função pura sobre o registro + snapshot do /proc + timestamps dos canais — sem E/S, sem efeitos colaterais, totalmente testável unitariamente.

### A reformulação do NMI: da observação à integridade

No design original, o NMI era um segundo canal de observação de processos que amostrava a CPU e reportava qual tarefa estava em execução. Isso era redundante: o sched\_switch já observa o escalonamento, e o NMI amostrava os mesmos dados por meio de um mecanismo diferente. A redundância custava ~1000+ eventos/s/CPU no ring-buffer de dados de processos que 99,999% das vezes confirmavam "sim, o escalonador está fazendo o que o escalonador faz."

Na arquitetura reformulada, **o NMI é redirecionado da observação de processos para a verificação de integridade de tracepoints.** Ele não reporta mais qual processo está na CPU. Em vez disso, ele verifica se `sched_switch` está realmente em execução lendo um heartbeat compartilhado `.bss`. Isso:

1. Elimina ~99% do tráfego do ring-buffer do NMI (eventos de estado estacionário próximos de zero)
2. Detecta diretamente desanexação de tracepoint, supressão e falhas de BTF/attach (o bug original do BTF — veja [§11](#11-the-btf-bug-incident))
3. Executa a partir de uma interrupção de hardware, fora do caminho de despacho do tracepoint — imune a `bpf_override_return`, interceptação de kprobe e manipulação do array de funções
4. Lê globais `.bss` via acesso direto à memória, não helpers do BPF — imune a `fmod_ret` em funções helper

---

## 3. O Canal de Observação sched\_switch
Baixar ferramenta