
Python向けライブラリレベルのeBPFサンドボックス(LinuxおよびmacOS):モジュールごとのシステムコールレベルの制御。
secimportは、Pythonモジュールごとにシステムコール制限を適用するeBPFベースのセキュリティツールキットであり、アプリケーションのセキュリティプロファイルをきめ細かく制御できます。Linuxにおけるseccomp-bpfのようなものですが、Pythonモジュールレベルで動作します。
git clone https://github.com/avilum/secimport.git
cd secimport/docker
./build.sh && ./run.sh
コマンドライン:
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', ...])
USDT プローブ付きの Python をインストールします:
# Configure Python with --enable-dtrace
# See detailed instructions in our wiki
サポートされているバックエンド(eBPF または DTrace)をインストールする
# Ubuntu/Debian
apt-get install bpftrace
# For other platforms, see our Installation wiki
secimport をインストールする
pip install secimport
secimport が構築するサンドボックスに加えて、
secimport build コマンドは、トレース対象のコード用の seccomp プロファイルを備えた nsjail サンドボックスを作成します。
nsjail は Linux 上で seccomp を用いた名前空間サンドボックスを有効にします
secimport は nsjail で使用する seccomp プロファイルを実行可能な bash スクリプトとして自動生成します。
これは、防御のもう一つの層として、Python プロセス全体のシステムコールを制限するために使用できます。