
Sandbox eBPF em nível de biblioteca para Python (Linux e macOS): controle em nível de syscall por módulo.
secimport é um toolkit de segurança baseado em eBPF que impõe restrições de syscall por módulo Python, proporcionando controle granular sobre o perfil de segurança da sua aplicação. Pense nele como seccomp-bpf para Linux, mas operando no nível de módulo Python.
git clone https://github.com/avilum/secimport.git
cd secimport/docker
./build.sh && ./run.sh
Linha de comando:
secimport --help
Usage: python -m secimport.cli [OPTIONS] COMMAND [ARGS]...
secimport is a comprehensive toolkit designed to enable the tracing, construction, and execution of secure Python runtimes. It leverages USDT probes and eBPF/DTrace technologies to enhance overall security measures.
WORKFLOW: 1. secimport trace / secimport shell 2. secimport build 3. secimport run
QUICKSTART: $ secimport interactive
For more details, please see https://github.com/avilum/secimport/wiki/Command-Line-Usage
╭─ Options ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --install-completion Install completion for the current shell. │
│ --show-completion Show completion for the current shell, to copy it or customize the installation. │
│ --help Show this message and exit. │
╰────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Commands ─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ trace Trace a Python process using an entrypoint or interactive shell. │
│ shell Alias for 'trace'. │
│ trace-pid Trace a running process by PID. │
│ build Build a sandbox profile from a trace log. │
│ run Run a Python process inside the sandbox. │
│ interactive Run secimport in interactive mode. │
╰────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
secimport interactive
# In the Python shell that opens:
>>> secimport trace # Start tracing
>>> import requests # Perform actions you want to profile
>>> # Press CTRL+D to stop tracing
>>> secimport build # Build sandbox from trace
>>> secimport run # Run with enforcement
secimport trace # Trace a new Python process
secimport trace_pid <PID> # Trace an existing process
secimport build # Build sandbox from trace
secimport run [options] # Run with enforcement
# Stop on violation
secimport run --stop_on_violation=true
# Kill on violation
secimport run --kill_on_violation=true
import secimport
# Replace standard import with secure import
requests = secimport.secure_import('requests', allowed_syscalls=['open', 'read', ...])
Instale o Python com sondas USDT:
# Configure Python with --enable-dtrace
# See detailed instructions in our wiki
Instale um backend compatível (eBPF ou DTrace)
# Ubuntu/Debian
apt-get install bpftrace
# For other platforms, see our Installation wiki
Instale o secimport
pip install secimport
Além do sandbox que o secimport cria,
O comando secimport build cria um sandbox nsjail com perfil seccomp para o código rastreado.
O nsjail permite sandboxing de namespaces com seccomp no Linux
O secimport gera automaticamente perfis seccomp para usar com o nsjail como script bash executável.
Ele pode ser usado para limitar as syscalls de todo o processo Python, como mais uma camada de defesa.