Arquitetura

Visao Geral

O Implant e um binario unico escrito em Rust que executa verificacoes de conformidade, hardening e operacao de servidores Linux. Funciona sozinho: nao depende de servidor central, banco de dados ou agente.

┌──────────────────────────────────────────────────────────────────┐
│                         IMPLANT CLI                              │
├──────────────────────────────────────────────────────────────────┤
│                                                                  │
│   CONFORMIDADE                                                   │
│   ├── check / fix ────────► Modulos de verificacao/correcao      │
│   ├── report / status ───► Relatorio e estado persistido         │
│   ├── validate / info ───► Config e deteccao do sistema          │
│   └── reconfigure ───────► Troca Docker <-> K3s                  │
│                                                                  │
│   HARDENING GRANULAR (apply / revert / status)                   │
│   ├── sysctl, harden-network, swap, limits                       │
│   ├── logrotate, docker-limits, fail2ban                         │
│   └── reset / emergency-reset                                    │
│                                                                  │
│   SSH                                                            │
│   ├── ssh-key ────────────► authorized_keys + whitelist de IPs   │
│   ├── ssh-port ───────────► Troca de porta com watchdog          │
│   ├── ssh-rollback ──────► Snapshots de configuracao             │
│   └── ssh-service ───────► Restricao com TTL (lockdown)          │
│                                                                  │
│   REDE E FIREWALL                                                │
│   ├── firewall (UFW), iptables, firewall-restore                 │
│   ├── rate-limit, ban / unban, auto-ban, geo-block               │
│   ├── wireguard ─────────► VPN do servidor + devices             │
│   └── threat-status, capture, audit                              │
│                                                                  │
│   PROXY (TRAEFIK)                                                │
│   ├── traefik-edge ──────► Corte de arquivos sensiveis (403)     │
│   └── traefik-accesslog ─► Access log seguro                     │
│                                                                  │
│   RECUPERACAO                                                    │
│   ├── lockdown ──────────► Primitiva de restricao com TTL        │
│   └── emergency-mode ────► Desliga features opt-in com TTL       │
│                                                                  │
│   COMPLEMENTOS                                                   │
│   ├── install ───────────► Aplicacoes opcionais                  │
│   ├── agent ─────────────► Agent de controle remoto (opcional)   │
│   ├── setup-claude-code ─► Usuario dedicado para Claude Code     │
│   ├── update-guardrail ──► Guard-rail CLAUDE.md                  │
│   └── self-update ───────► Auto-atualizacao                      │
│                                                                  │
├──────────────────────────────────────────────────────────────────┤
│                    MODULOS DO CHECK (--modules)                  │
│                                                                  │
│   fundamentals   │ SSH, NTP, timezone/locale, swap, limites,     │
│                  │ logrotate, ferramentas, bloatware             │
│   hardening      │ Fail2Ban, kernel sysctl (BBR), servicos,      │
│                  │ boot-survival do firewall, DOCKER-USER        │
│   docker         │ Docker/K3s, Compose, network, logs, limpeza   │
│   network        │ Verificacao basica (rede e feita por          │
│                  │ comandos dedicados)                           │
│   monitoring     │ Logrotate dos logs do Implant, journald       │
│   traefik        │ Permissao e query do access log do Traefik    │
│   agent          │ Agent de controle remoto instalado/rodando    │
│   nodejs         │ Node.js via NVM (opcional)                    │
│                                                                  │
├──────────────────────────────────────────────────────────────────┤
│                      INFRAESTRUTURA                              │
│                                                                  │
│   executor/      │ Execucao de comandos: dry-run, verbose,       │
│                  │ timeout, APT lock, modo leitura do check      │
│   config.rs      │ /etc/protocolo-implant/config.toml            │
│   endpoints.rs   │ CDN, guard-rail e apps configuraveis          │
│   report.rs      │ Relatorio (human, json, yaml)                 │
│   system.rs      │ Deteccao de OS, distro, versao e arch         │
│   output/        │ Envelope padrao de resposta                   │
│   security/      │ TLS pinning (SPKI), cliente HTTP (rustls),    │
│                  │ verificacao minisign, sync de relogio         │
│                                                                  │
└──────────────────────────────────────────────────────────────────┘

Fluxo de Execucao

Comando `check`

1. Detectar distro, versao e arquitetura
2. Para cada modulo habilitado:
   a. Medir o valor EFETIVO no host (sshd -T, sysctl -n, ...)
   b. Se --auto-fix: aplicar correcoes
   c. Registrar resultado (com risk quando houver severidade)
3. Persistir estado em /var/lib/implant/state.json
4. Gerar relatorio (human, json ou yaml)

Sem --auto-fix, o executor roda em modo leitura: recusa e registra qualquer escrita de arquivo, instalacao de pacote ou comando reconhecido como escrita. Isso torna o check seguro para agendamento em producao.

CommandExecutor

Todas as operacoes passam pelo CommandExecutor, que:

  • Em modo normal: executa o comando com timeout de 120 segundos
  • Em modo --dry-run: apenas registra o que SERIA executado
  • Em modo --verbose: mostra output detalhado
  • No check sem --auto-fix: bloqueia escritas
  • Trata APT lock automaticamente

Saida

Toda saida e local: stdout no formato escolhido (-o human|json|yaml). Com -o json, logs e mensagens de diagnostico vao para stderr, e o stdout fica limpo para parse. O Implant nao envia relatorios para nenhum servidor.

Seguranca SSH

1. ssh-port cria snapshot da configuracao atual
2. Libera a nova porta no firewall
3. Agenda reversao automatica (at / systemd timer, 5 minutos)
4. Aplica a nova porta
5. Operador testa e confirma com `ssh-port --confirm-change`
6. Sem confirmacao: o watchdog reverte sozinho
7. ssh-rollback permite rollback manual via snapshots

Restricoes com TTL

Lockdown do SSH, emergency-mode, emergency-disable dos comandos granulares e a confirmacao do firewall-restore usam a mesma primitiva: a restricao e aplicada e um systemd-run agenda a recuperacao. Sem renovacao (heartbeat/confirm), o estado volta sozinho, mesmo que o Implant nao esteja mais rodando. Veja Lockdown / Deadman.

Distribuicao

Build Multi-Arch (Static Musl)

O Implant e publicado para duas arquiteturas com linking estatico:

Arquitetura Target Rust Compatibilidade
x86_64 x86_64-unknown-linux-musl Qualquer Linux x86_64
aarch64 aarch64-unknown-linux-musl Qualquer Linux ARM64

Os pins SPKI dos dominios oficiais de distribuicao sao embutidos no binario em tempo de compilacao.

Releases assinadas

Cada release publica, por arquitetura, o binario e a assinatura minisign (Ed25519):

https://implant.ccs.systems/{arch}/implant
https://implant.ccs.systems/{arch}/implant.minisig
https://implant.ccs.systems/{arch}/rc/implant        (canal RC)
https://implant.ccs.systems/pubkey.pub               (chave publica)

Self-Update

O binario detecta sua arquitetura em runtime e baixa a versao correspondente. O download passa por TLS pinning; a assinatura .minisig e conferida (obrigatoria em host sem pin embutido). A troca do binario e atomica (rename), com backup. Com --dry-run, tudo e verificado sem alterar o disco.

Tecnologias

Componente Tecnologia
Linguagem Rust
Runtime Tokio (async)
CLI Clap v4
HTTP Reqwest + rustls (TLS pinning)
Assinatura minisign (Ed25519)
Serialization Serde (JSON, TOML, YAML)
Logging Tracing
Output Colored + formatos multiplos
Linking Static musl