Skip to content
KitploitKITPLOIT
도구익스플로잇블로그
Log in
제출
도구익스플로잇블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
jailer — Jailer는 Linux를 위한 강제 접근 제어(MAC)를 제공하는 eBPF 기반 프로세스 격리 시스템입니다. BPF task_storage 맵을 사용하여 프로세스를 추적하고 파일 액세스, 네트워크 작업 및 프로세스 실행에 대한 역할 기반 정책을 적용합니다. | Kitploit
도구/GitHubGitHub/gen0sec/jailer
Defensive ToolsContainer SecurityNetwork SecurityCloud Security
GitHubgen0sec/jailer

jailer

Jailer는 Linux를 위한 강제 접근 제어(MAC)를 제공하는 eBPF 기반 프로세스 격리 시스템입니다. BPF task_storage 맵을 사용하여 프로세스를 추적하고 파일 액세스, 네트워크 작업 및 프로세스 실행에 대한 역할 기반 정책을 적용합니다.

저장소 보기
582116일 전Kitploit 검토 완료

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유
웹사이트

Jailer - eBPF 필수 접근 제어

경고: 이 프로젝트는 활발히 개발 중이며 프로덕션 환경에서 사용할 준비가 되지 않았습니다. API, 정책 형식 및 동작은 예고 없이 변경될 수 있습니다. 테스트 및 실험 목적으로만 사용하세요.

Acknowledgments

참고: 이는 독립적인 구현이며 Meta의 솔루션과 동일한 프로젝트가 아닙니다. BpfJailer는 Liam Wisehart, Justin Nga, Carl El Khoury, Mansee Chadha (Meta)의 원래 아이디어와 설계에서 영감을 받아 기능적으로 유사하지만, 이는 독립적으로 개발된 별도의 코드베이스입니다. 이 작업에 영감을 준 비전과 기본 개념에 감사드립니다.

커뮤니티

Join us on Discord Substack

Jailer는 eBPF 기반 프로세스 격리 시스템으로, Linux에 대한 필수 접근 제어(MAC)를 제공합니다. BPF task_storage 맵을 사용하여 프로세스를 추적하고 파일 접근, 네트워크 작업, 프로세스 실행에 대한 역할 기반 정책을 적용합니다.

기능 (현재 버전)

기능상태설명
프로세스 추적✅ 작동 중task_storage BPF 맵을 사용하여 프로세스 추적
소켓 등록✅ 작동 중프로세스가 Unix 소켓 API를 통해 등록
역할 기반 정책✅ 작동 중제한된 역할과 허용된 역할
파일 접근 제어✅ 작동 중파일 열기 작업 차단/허용
Jail 상속✅ 작동 중자식 프로세스가 부모의 jail을 상속
네트워크 제어✅ 작동 중소켓 bind/connect 차단/허용
포트/프로토콜 필터링✅ 작동 중포트별 TCP/UDP 허용/차단 규칙
실행 제어✅ 작동 중프로세스 실행 차단/허용
경로 매칭✅ 작동 중캐시 무효화를 포함한 Dentry 탐색
서명된 바이너리🚧 스텁바이너리 서명 검증 (구현되지 않음)
대체 등록✅ 작동 중실행 파일, cgroup 또는 xattr로 자동 등록
데몬리스 모드✅ 작동 중부트스트랩 바이너리가 초기 부팅 시 프로그램 고정
감사 이벤트✅ 작동 중systemd-journald 통합을 위한 Perf 버퍼

Nginx 데모

Nginx 데모

복잡한 데모

asciicast

커널 요구 사항

최소 커널 버전

  • Linux 5.11+ (BPF_MAP_TYPE_TASK_STORAGE 지원 필요)
  • 권장: Linux 6.1+ (더 나은 BTF 지원)

필요한 커널 설정

# 현재 커널 설정 확인
zcat /proc/config.gz 2>/dev/null || cat /boot/config-$(uname -r)

필수 옵션:

CONFIG_BPF=y
CONFIG_BPF_SYSCALL=y
CONFIG_BPF_LSM=y
CONFIG_DEBUG_INFO_BTF=y

BPF LSM 활성화

BPF LSM은 커널 부트 매개변수에서 활성화되어야 합니다:

# BPF LSM이 활성화되었는지 확인
cat /sys/kernel/security/lsm
# 목록에 "bpf"가 포함되어야 함

# 포함되지 않은 경우, 커널 부트 매개변수에 추가:
# /etc/default/grub 편집 후 GRUB_CMDLINE_LINUX에 다음 추가:
#   lsm=lockdown,capability,landlock,yama,apparmor,bpf

# 그런 다음 grub 업데이트 후 재부팅:
sudo update-grub
sudo reboot

Ubuntu/Debian 시스템에서는 다음을 사용할 수도 있습니다:

# 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이 활성화되었습니다. 재부팅하세요."
EOF
chmod +x /tmp/enable_bpf_lsm.sh
sudo /tmp/enable_bpf_lsm.sh

빌드

전제 조건

# Rust 설치
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

# 빌드 종속성 설치 (Ubuntu/Debian)
sudo apt-get install -y clang llvm libelf-dev linux-headers-$(uname -r)

# Rust용 BPF 타겟 설치
rustup target add bpfel-unknown-none

모든 구성 요소 빌드

cd bpfjail

# BPF 프로그램 빌드
cd bpfjailer-bpf && cargo build --release && cd ..

# 데몬 및 클라이언트 빌드
cargo build --release

빠른 시작

1. 데몬 시작

# root로 실행 (config/policy.json이 있으면 로드)
sudo RUST_LOG=info ./target/release/bpfjailer-daemon

예상 출력:

[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. 보안 테스트 실행

# 감옥 없이 취약점 테스트 실행 (공격 성공 표시)
sudo python3 tests/vulnerable_apps/run_tests.py

# 제한된 역할로 취약점 테스트 실행 (공격 차단 표시)
sudo python3 tests/vulnerable_apps/run_tests.py --role 1

# 특정 테스트 실행
sudo python3 tests/vulnerable_apps/run_tests.py --role 1 --test path

# 사용 가능한 테스트 및 역할 목록
sudo python3 tests/vulnerable_apps/run_tests.py --list

제한된 역할을 사용한 예시 출력:

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

사용 가능한 보안 테스트

테스트취약점완화되는 역할
path_traversal../를 통한 임의 파일 읽기restricted, isolated
command_injection셸 명령 실행restricted, webserver, isolated
reverse_shell공격자로의 아웃바운드 연결restricted, isolated
ssrf내부 서비스/클라우드 메타데이터 접근restricted, isolated
arbitrary_write민감한 경로에 쓰기restricted
crypto_miner다운로드 + 실행 + 풀에 연결restricted, webserver
privilege_escalationshadow 읽기, sudoers 쓰기restricted

3. 수동 등록 테스트

#!/usr/bin/env python3
import socket
import json
import os

# 데몬에 연결
sock = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
sock.connect("/run/bpfjailer/enrollment.sock")

# 제한된 역할(ID 1)로 등록
request = {"Enroll": {"pod_id": 1, "role_id": 1}}
sock.send((json.dumps(request) + "\n").encode())
response = sock.recv(4096).decode()
print(f"등록: {response}")
sock.close()

# 파일 읽기 시도 (차단되어야 함)
try:
    open("/etc/passwd").read()
    print("파일 접근: 허용됨")
except PermissionError:
    print("파일 접근: 차단됨")

정책 파일

BpfJailer는 JSON 정책 파일에서 역할을 로드합니다. 데몬은 다음 순서로 정책 파일을 검색합니다:

  1. $BPFJAILER_POLICY 환경 변수
  2. /etc/bpfjailer/policy.json
  3. config/policy.json (작업 디렉토리 기준)

예시 정책 파일

{
  "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": []
}

정책 플래그

플래그설명
allow_file_access파일 열기 작업 허용
allow_network소켓 bind/connect 허용
allow_exec프로세스 실행 허용
allow_setuidsetuid 작업 허용
allow_ptraceptrace 작업 허용

기본 역할

역할 ID이름파일 접근네트워크실행
1restricted차단됨차단됨차단됨
2permissive허용됨허용됨허용됨
3webserver허용됨포트 80, 443, 8080차단됨
4database허용됨포트 5432, 6379차단됨
5isolated허용됨차단됨차단됨
6web_with_db허용됨포트 80, 443, 5432, 3306, 6379차단됨
7worker허용됨포트 443, 5432, 6379, 5672허용됨

네트워크 포트/프로토콜 필터링

BpfJailer는 포트별 TCP/UDP 규칙으로 세분화된 네트워크 제어를 지원합니다.

규칙 구조

network_rules 맵:
  키: { role_id, port, protocol, direction }
  값: 허용(1) 또는 거부(0)
도구 다운로드