Skip to content

AppArmor #142

@jonathanscheibel

Description

@jonathanscheibel

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())

Metadata

Metadata

Labels

enhancementNew feature or request

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions