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
checksem--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 snapshotsRestricoes 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 |