-
Notifications
You must be signed in to change notification settings - Fork 0
Description
Formas práticas de adicionar AppArmor nativamente (ordem de complexidade crescente)
Opção mais simples e imediata (recomendada para começar) — Perfis externos gerenciados pelo sistema
Crie perfis AppArmor separados para cada serviço/honeypot (ex: /etc/apparmor.d/usr.bin.deceptgold-ssh, /etc/apparmor.d/usr.bin.deceptgold-http, etc.).
No código Python, você não precisa modificar quase nada — só documentar que o usuário deve:
Instalar os perfis fornecidos no repo (copie para /etc/apparmor.d/).
Rodar aa-enforce nos perfis.
Vantagem: zero mudança no código principal, fácil manutenção, e o usuário decide se ativa ou não.
Exemplo de perfil básico para um honeypot Python:
#include <tunables/global>
/usr/bin/python3.*/usr/local/bin/deceptgold-ssh {
#include <abstractions/base>
#include <abstractions/python>
capability net_bind_service,
capability dac_override, # se precisar bind em portas <1024
/usr/local/bin/deceptgold-ssh r,
/etc/deceptgold/** r,
/var/log/deceptgold/ rw,
network inet tcp,
deny /etc/shadow r,
deny /bin/sh x, # impede shell reverso comum
}
Você pode incluir vários perfis assim no repo (em uma pasta security/apparmor/).
Integração semi-nativa no instalador/pacote (média dificuldade)
Se você usa Briefcase ou gera pacotes .deb/.rpm, adicione os perfis AppArmor como arquivos no pacote:
Coloque em debian/apparmor.d/ ou equivalente no build.
No post-install script: apparmor_parser -r /etc/apparmor.d/deceptgold-* + aa-enforce.
Assim, quando o usuário instala via .deb, o AppArmor já vem ativado por padrão (com modo complain primeiro, para testes).
Execução confinada diretamente do código Python (mais avançado, mas nativo)
Use a lib python-apparmor (ou subprocess para chamar aa-exec) para lançar subprocessos dos honeypots já confinados.
Exemplo conceitual:
import subprocess
import os
def start_honeypot_confinado(profile_name, script_path):
cmd = ["aa-exec", "-p", profile_name, "--", "python3", script_path]
subprocess.Popen(cmd, env=os.environ.copy())