Skip to content
KitploitKITPLOIT
FerramentasBlog
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
jailer — Jailer é um sistema de confinamento de processos baseado em eBPF que fornece controle de acesso obrigatório (MAC) para Linux. Ele rastreia processos usando mapas BPF task_storage e aplica políticas baseadas em papéis no acesso a arquivos, operações de rede e execução de processos. | Kitploit
Ferramentas/GitHubGitHub/gen0sec/jailer
Ferramentas DefensivasSegurança de ContêineresSegurança de RedeSegurança na Nuvem
GitHubgen0sec/jailer

jailer

Ver RepositórioSite
582há 18 diasRevisado 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 →

Sobre

Jailer é um sistema de confinamento de processos baseado em eBPF que fornece controle de acesso obrigatório (MAC) para Linux. Ele rastreia processos usando mapas BPF task_storage e aplica políticas baseadas em papéis no acesso a arquivos, operações de rede e execução de processos.

Compartilhar

Jailer - Controle de Acesso Obrigatório eBPF

Aviso: Este projeto está em desenvolvimento intenso e NÃO está pronto para uso em produção. APIs, formatos de política e comportamento podem mudar sem aviso. Use apenas para testes e experimentação.

Agradecimentos

Nota: Esta é uma implementação independente e não é o mesmo projeto que a solução da Meta. Embora o BpfJailer seja funcionalmente semelhante e inspirado pela ideia e design originais de Liam Wisehart, Justin Nga, Carl El Khoury, Mansee Chadha na Meta, esta é uma base de código separada desenvolvida independentemente. Estendemos nossa gratidão pela visão e conceitos fundamentais que inspiraram este trabalho.

Comunidade

Join us on Discord Substack

Jailer é um sistema de confinamento de processos baseado em eBPF que fornece controle de acesso obrigatório (MAC) para Linux. Ele rastreia processos usando mapas BPF task_storage e aplica políticas baseadas em funções para acesso a arquivos, operações de rede e execução de processos.

Funcionalidades (Versão Atual)

FeatureStatusDescription
Process Tracking✅ WorkingRastreia processos usando o mapa BPF task_storage
Socket Enrollment✅ WorkingProcessos se inscrevem via API de socket Unix
Role-based Policies✅ WorkingFunções restritas e permissivas
File Access Control✅ WorkingBloquear/permitir operações de abertura de arquivos
Jail Inheritance✅ WorkingProcessos filhos herdam o confinamento do pai
Network Control✅ WorkingBloquear/permitir bind/connect de socket
Port/Protocol Filtering✅ WorkingRegras de permitir/negar TCP/UDP por porta
Exec Control✅ WorkingBloquear/permitir execução de processos
Path Matching✅ WorkingPercorrimento de dentry com invalidação de cache
Signed Binaries🚧 StubValidação de assinatura binária (não implementado)
Alternative Enrollment✅ WorkingAuto-inscrição por executável, cgroup ou xattr
Daemonless Mode✅ WorkingBinário bootstrap fixa programas na inicialização
Audit Events✅ WorkingBuffer perf para integração com systemd-journald

Demonstração com Nginx

Nginx demo

Demonstração complexa

asciicast

Requisitos do Kernel

Versão Mínima do Kernel

  • Linux 5.11+ (para suporte a BPF_MAP_TYPE_TASK_STORAGE)
  • Recomendado: Linux 6.1+ (melhor suporte a BTF)

Configuração Necessária do Kernel

root@kitploit:~
# Check current kernel config
zcat /proc/config.gz 2>/dev/null || cat /boot/config-$(uname -r)

Opções necessárias:

root@kitploit:~
CONFIG_BPF=y
CONFIG_BPF_SYSCALL=y
CONFIG_BPF_LSM=y
CONFIG_DEBUG_INFO_BTF=y

Ativar BPF LSM

O BPF LSM deve ser ativado nos parâmetros de inicialização do kernel:

root@kitploit:~
# Check if BPF LSM is active
cat /sys/kernel/security/lsm
# Should include "bpf" in the list

# If not, add to kernel boot parameters:
# Edit /etc/default/grub and add to GRUB_CMDLINE_LINUX:
#   lsm=lockdown,capability,landlock,yama,apparmor,bpf

# Then update grub and reboot:
sudo update-grub
sudo reboot

Para sistemas Ubuntu/Debian, você também pode usar:

root@kitploit:~
# Create a script to enable BPF LSM
cat > /tmp/enable_bpf_lsm.sh << 'EOF'
#!/bin/bash
GRUB_FILE="/etc/default/grub"
if grep -q "lsm=" "$GRUB_FILE"; then
    sudo sed -i 's/lsm=[^""]*/lsm=lockdown,capability,landlock,yama,apparmor,bpf/' "$GRUB_FILE"
else
    sudo sed -i 's/GRUB_CMDLINE_LINUX="\(.*\)"/GRUB_CMDLINE_LINUX="\1 lsm=lockdown,capability,landlock,yama,apparmor,bpf"/' "$GRUB_FILE"
fi
sudo update-grub
echo "BPF LSM enabled. Please reboot."
EOF
chmod +x /tmp/enable_bpf_lsm.sh
sudo /tmp/enable_bpf_lsm.sh

Compilar

Pré-requisitos

root@kitploit:~
# Install Rust
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

# Install build dependencies (Ubuntu/Debian)
sudo apt-get install -y clang llvm libelf-dev linux-headers-$(uname -r)

# Install BPF target for Rust
rustup target add bpfel-unknown-none

Compilar Todos os Componentes

root@kitploit:~
cd bpfjail

# Build BPF programs
cd bpfjailer-bpf && cargo build --release && cd ..

# Build daemon and client
cargo build --release

Início Rápido

1. Iniciar o Daemon

root@kitploit:~
# Run as root (loads config/policy.json if present)
sudo RUST_LOG=info ./target/release/bpfjailer-daemon

Expected output:

root@kitploit:~
[INFO] BpfJailer daemon starting...
[INFO] Loading BpfJailer eBPF programs with libbpf-rs...
[INFO] ✓ pending_enrollments map available for enrollment
[INFO] ✓ network_rules map available for port/protocol filtering
[INFO] ✓ task_storage map created successfully
[INFO] ✓ Program task_alloc attached
[INFO] ✓ Program file_open attached
[INFO] ✓ Program socket_bind attached
[INFO] ✓ Program socket_connect attached
[INFO] ✓ Program bprm_check_security attached
[INFO] Initialized with default roles: restricted (1), permissive (2)
[INFO] Loaded policy from config/policy.json
[INFO] Loaded 5 roles
[INFO] Enrollment server listening on /run/bpfjailer/enrollment.sock

2. Executar Testes de Segurança

root@kitploit:~
# Run vulnerability tests WITHOUT jailing (shows attacks succeed)
sudo python3 tests/vulnerable_apps/run_tests.py

# Run vulnerability tests WITH restricted role (shows attacks blocked)
sudo python3 tests/vulnerable_apps/run_tests.py --role 1

# Run specific test
sudo python3 tests/vulnerable_apps/run_tests.py --role 1 --test path

# List available tests and roles
sudo python3 tests/vulnerable_apps/run_tests.py --list

Exemplo de saída com função restrita:

root@kitploit:~
============================================================
TEST: Path Traversal / Arbitrary File Read
============================================================
Attempting to read /etc/passwd via path traversal...
BLOCKED - Permission denied (BpfJailer blocked file access)

============================================================
TEST: Command Injection
============================================================
Attempting command injection...
BLOCKED - Permission denied (BpfJailer blocked exec)

============================================================
TEST: Reverse Shell / Data Exfiltration
============================================================
Test 1: Reverse shell connection to 127.0.0.1:4444
BLOCKED - Permission denied (BpfJailer blocked connect)

Testes de Segurança Disponíveis

TestVulnerabilityMitigated By
path_traversalLeitura arbitrária de arquivo via ../restricted, isolated
command_injectionExecução de comandos shellrestricted, webserver, isolated
reverse_shellConexões de saída para atacanterestricted, isolated
ssrfAcesso a serviços internos/metadados da nuvemrestricted, isolated
arbitrary_writeEscrita em caminhos sensíveisrestricted
crypto_minerDownload + execução + conexão ao poolrestricted, webserver
privilege_escalationLer shadow, escrever sudoersrestricted

3. Teste de Inscrição Manual

root@kitploit:~
#!/usr/bin/env python3
import socket
import json
import os

# Connect to daemon
sock = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
sock.connect("/run/bpfjailer/enrollment.sock")

# Enroll with restricted role (ID 1)
request = {"Enroll": {"pod_id": 1, "role_id": 1}}
sock.send((json.dumps(request) + "\n").encode())
response = sock.recv(4096).decode()
print(f"Enrollment: {response}")
sock.close()

# Try to read a file (should be blocked)
try:
    open("/etc/passwd").read()
    print("File access: ALLOWED")
except PermissionError:
    print("File access: BLOCKED")

Arquivo de Política

O BpfJailer carrega funções de um arquivo de política JSON. O daemon procura o arquivo de política nesta ordem:

  1. $BPFJAILER_POLICY environment variable
  2. /etc/bpfjailer/policy.json
  3. config/policy.json (relativo ao diretório de trabalho)

Exemplo de Arquivo de Política

root@kitploit:~
{
  "roles": {
    "restricted": {
      "id": 1,
      "name": "restricted",
      "flags": {
        "allow_file_access": false,
        "allow_network": false,
        "allow_exec": false
      },
      "network_rules": []
    },
    "webserver": {
      "id": 3,
      "name": "webserver",
      "flags": {
        "allow_file_access": true,
        "allow_network": true,
        "allow_exec": false
      },
      "network_rules": [
        {"protocol": "tcp", "port": 80, "allow": true},
        {"protocol": "tcp", "port": 443, "allow": true}
      ]
    }
  },
  "pods": []
}

Flags de Política

FlagDescription
allow_file_accessPermitir operações de abertura de arquivos
allow_networkPermitir bind/connect de socket
allow_execPermitir execução de processos
allow_setuidPermitir operações setuid
allow_ptracePermitir operações ptrace

Funções Padrão

Role IDNameAcesso a ArquivosRedeExecução
1restrictedBloqueadoBloqueadoBloqueado
2permissivePermitidoPermitidoPermitido
3webserverPermitidoPortas 80, 443, 8080Bloqueado
4databasePermitidoPortas 5432, 6379Bloqueado
5isolatedPermitidoBloqueadoBloqueado
6web_with_dbPermitidoPortas 80, 443, 5432, 3306, 6379Bloqueado
7workerPermitidoPortas 443, 5432, 6379, 5672Permitido

Filtragem de Porta/Protocolo de Rede

O BpfJailer suporta controle de rede granular com regras TCP/UDP por porta.

Estrutura da Regra

root@kitploit:~
network_rules map:
  Key: { role_id, port, protocol, direction }
  Value: allowed (1) or denied (0)
  • protocolo: 6 = TCP, 17 = UDP
  • direção: 0 = bind, 1 = connect
  • porta: 0 = curinga (todas as portas)

Ordem de Avaliação da Regra

  1. Verificar regra de porta específica para a função
  2. Verificar regra de porta curinga (porta=0) para a função
  3. Recorrer a role_flags (bit 1 = rede permitida)

Exemplo: Permitir Apenas HTTP/HTTPS para Função Restrita

root@kitploit:~
// In daemon code:
use bpfjailer_daemon::process_tracker::{PROTO_TCP, DIR_CONNECT};

// Allow TCP connect to ports 80 and 443 only
process_tracker.add_network_rule(RoleId(1), 80, PROTO_TCP, DIR_CONNECT, true)?;
process_tracker.add_network_rule(RoleId(1), 443, PROTO_TCP, DIR_CONNECT, true)?;

Constantes de Protocolo

ConstantValueDescription
PROTO_TCP6Protocolo TCP
PROTO_UDP17Protocolo UDP
DIR_BIND0bind() de socket
DIR_CONNECT1connect() de socket

Faixas de Porta

Faixas de porta podem ser especificadas no policy.json usando port_start e port_end:

root@kitploit:~
{
  "network_rules": [
    {"protocol": "tcp", "port": 443, "allow": true},
    {"protocol": "tcp", "port_start": 8000, "port_end": 8100, "allow": true}
  ]
}
FieldDescription
portPorta única (ex.: 80)
port_start + port_endFaixa de portas (ex.: 8000-8100)

Nota: Faixas grandes (>1000 portas) consomem muitas entradas do mapa BPF. Um aviso é registrado para faixas que excedem 1000 portas.

Arquitetura

root@kitploit:~
┌─────────────────────────────────────────────────────────────┐
│                     User Space                               │
├─────────────────────────────────────────────────────────────┤
│  ┌─────────────┐    ┌──────────────────┐                    │
│  │   Client    │───▶│  bpfjailer-daemon │                    │
│  │  (enroll)   │    │                  │                    │
│  └─────────────┘    │  - PolicyManager │                    │
│                     │  - ProcessTracker│                    │
│                     │  - EnrollmentSvr │                    │
│                     └────────┬─────────┘                    │
│                              │ writes to                    │
│                              ▼                              │
├─────────────────────────────────────────────────────────────┤
│                     BPF Maps                                 │
│  ┌──────────────────┐  ┌─────────────┐  ┌──────────────┐   │
│  │pending_enrollments│  │ role_flags  │  │ task_storage │   │
│  │   (PID → info)   │  │ (role→flags)│  │(task→info)   │   │
│  └──────────────────┘  └─────────────┘  └──────────────┘   │
├─────────────────────────────────────────────────────────────┤
│                     BPF LSM Hooks                            │
│  ┌────────────┐ ┌───────────┐ ┌─────────────┐ ┌──────────┐ │
│  │ task_alloc │ │ file_open │ │socket_bind/ │ │bprm_check│ │
│  │(inheritance│ │(migration │ │  connect    │ │_security │ │
│  │ + init)    │ │ + check)  │ │  (check)    │ │ (check)  │ │
│  └────────────┘ └───────────┘ └─────────────┘ └──────────┘ │
└─────────────────────────────────────────────────────────────┘

Fluxo de Inscrição

  1. Processo conecta-se a /run/bpfjailer/enrollment.sock
  2. Envia JSON: {"Enroll": {"pod_id": N, "role_id": M}}
  3. Daemon escreve em pending_enrollments[PID] e role_flags[role_id]
  4. Na próxima chamada de sistema (file_open, exec), o BPF migra a inscrição para task_storage
  5. Todas as chamadas de sistema futuras verificam task_storage + role_flags para aplicação
  6. Processos filhos herdam via hook task_alloc

Modos de Instalação

O BpfJailer suporta dois modos de instalação:

1. Modo Daemon (Padrão)

Usa um daemon em execução para inscrição e gerenciamento de políticas:

root@kitploit:~
# Install systemd service
sudo cp config/bpfjailer-daemon.service /etc/systemd/system/
sudo cp target/release/bpfjailer-daemon /usr/sbin/
sudo mkdir -p /etc/bpfjailer
sudo cp config/policy.json /etc/bpfjailer/

# Enable and start
sudo systemctl daemon-reload
sudo systemctl enable bpfjailer-daemon
sudo systemctl start bpfjailer-daemon

Características:

  • API de inscrição baseada em socket
  • Recarga a quente de política (parar/iniciar daemon)
  • Registro completo no processo do daemon

2. Modo Sem Daemon (Bootstrap)

Carrega programas BPF no início da inicialização e sai. Os programas permanecem ativos até a reinicialização:

root@kitploit:~
# Install bootstrap service
sudo cp config/bpfjailer-bootstrap.service /etc/systemd/system/
sudo cp target/release/bpfjailer-bootstrap /usr/sbin/
sudo mkdir -p /etc/bpfjailer
sudo cp config/policy.json /etc/bpfjailer/

# Enable (will run at next boot)
sudo systemctl daemon-reload
sudo systemctl enable bpfjailer-bootstrap

# Or run manually now
sudo bpfjailer-bootstrap

Características:

  • Nenhum daemon em execução (superfície de ataque reduzida)
  • Programas BPF fixados em /sys/fs/bpf/bpfjailer/
  • Não pode ser interrompido sem reinicialização
  • Eventos de auditoria enviados ao systemd-journald via buffer perf
  • Apenas métodos de inscrição alternativos funcionam (exec/cgroup/xattr)

Verificar programas fixados:

root@kitploit:~
ls -la /sys/fs/bpf/bpfjailer/
ls -la /sys/fs/bpf/bpfjailer/maps/
ls -la /sys/fs/bpf/bpfjailer/progs/

Ver eventos de auditoria:

root@kitploit:~
# Events are emitted to perf buffer, picked up by journald
journalctl -f | grep bpfjailer

Comparação de Modos

AspectoModo DaemonModo Sem Daemon
Superfície de AtaqueDaemon em execuçãoNenhum processo em execução
InscriçãoSocket Unix + alternativasApenas alternativas
Atualizações de PolíticaRecarga a quenteReinicialização necessária
Registro de AuditoriaDaemon lê ringbufjournald via buffer perf
Remoção de ProgramaParar daemonApenas reinicialização
Ordem de InicializaçãoApós network.targetAntes de basic.target

Solução de Problemas

"Falha na criação do mapa task_storage"

root@kitploit:~
# Check kernel version (needs 5.11+)
uname -r

# Check BPF LSM is active
cat /sys/kernel/security/lsm | grep bpf

# Check BTF is available
ls -la /sys/kernel/btf/vmlinux

"Falha ao anexar programa"

root@kitploit:~
# Check if BPF programs can be loaded
sudo bpftool prog list

# Check capabilities
sudo capsh --print | grep cap_bpf

Permissão negada ao inscrever

root@kitploit:~
# Ensure daemon is running as root
ps aux | grep bpfjailer

# Check socket permissions
ls -la /run/bpfjailer/enrollment.sock

Métodos Alternativos de Inscrição

Além da inscrição por socket Unix, o BpfJailer suporta inscrição automática baseada em:

Inscrição Baseada em Executável

Inscrever automaticamente todos os processos que executam um binário específico:

root@kitploit:~
{
  "exec_enrollments": [
    {
      "executable_path": "/usr/bin/nginx",
      "pod_id": 1000,
      "role": "webserver"
    }
  ]
}

Quando qualquer processo executa /usr/bin/nginx, ele é automaticamente inscrito com a função webserver. Isso é correspondido pelo inode do executável, então links simbólicos e links físicos são tratados corretamente.

Inscrição Baseada em Cgroup

Inscrever automaticamente todos os processos em um cgroup específico:

root@kitploit:~
{
  "cgroup_enrollments": [
    {
      "cgroup_path": "/sys/fs/cgroup/bpfjailer/sandbox",
      "pod_id": 2000,
      "role": "sandbox"
    }
  ]
}

Crie o cgroup e mova processos para ele:

root@kitploit:~
# Create cgroup
sudo mkdir -p /sys/fs/cgroup/bpfjailer/sandbox

# Move process to cgroup
echo $$ | sudo tee /sys/fs/cgroup/bpfjailer/sandbox/cgroup.procs

# Process is now auto-enrolled with sandbox role

Inscrição Baseada em Xattr

Defina atributos estendidos em executáveis para informações de inscrição:

root@kitploit:~
# Set enrollment xattrs
sudo setfattr -n user.bpfjailer.pod_id -v $(printf '\x01\x00\x00\x00\x00\x00\x00\x00') /path/to/binary
sudo setfattr -n user.bpfjailer.role_id -v $(printf '\x03\x00\x00\x00') /path/to/binary

# Check xattrs
getfattr -d /path/to/binary

Como Funciona a Inscrição Automática

  1. No momento da execução (hook LSM bprm_check_security):

    • Verifica se o inode do executável está no mapa exec_enrollment
    • Verifica se o ID do cgroup do processo está no mapa cgroup_enrollment
    • Se encontrado, define automaticamente task_storage com pod_id e role_id
  2. A inscrição persiste através de fork/exec via hook task_alloc

  3. As regras de política (rede, caminho, exec) são aplicadas com base no role_id

Licença

GPL-2.0 (necessário para programas BPF)

Baixar ferramenta