← 목록으로

eBPF 기반 지속성(Persistence) 기법

[Pwn] Pwnable · 작성: 2026-07-20 03:10:34 · 수정: 2026-07-21 23:24:06 · 조회 25

eBPF(extended Berkeley Packet Filter)는 커널을 재컴파일하지 않고도 커널 내부에서 샌드박스된 프로그램을 실행할 수 있게 해주는 리눅스 기능이다. 원래는 네트워킹/트레이싱/모니터링 목적(Wazuh 같은 도구도 이걸 활용한다)이지만, 공격자 입장에서는 커널 레벨에서 프로세스·파일·네트워크를 몰래 조작할 수 있는 강력한 지속성 수단이 된다. BPFDoor 같은 실제 악성코드가 이 방식을 쓴다.

왜 강력한가

어떻게 지속성을 얻는가

최소 예시 (정상적인 관찰·트레이싱 용도)

# execve 호출을 커널 레벨에서 실시간 관찰
bpftrace -e 'tracepoint:syscalls:sys_enter_execve { printf("%s %s\n", comm, str(args->filename)); }'

실제 공격에 쓰이는 eBPF 프로그램은 이 관찰 능력을 반대로 이용해서, 특정 조건에서 자기 자신의 흔적(프로세스, 소켓, 파일)을 결과에서 제외시키는 방식으로 은폐한다.

탐지와 방어

커널이 이걸 그대로 허용하는 이유 — eBPF 검증기(Verifier)

eBPF 프로그램이 임의 커널 코드 실행처럼 보이는데도 커널이 로드를 허용하는 이유는, 로드 시점에 **커널 내장 정적 분석기(Verifier)**가 그 프로그램의 모든 실행 경로를 시뮬레이션해서 "메모리 접근 범위를 벗어나지 않는지", "루프가 종료되는지(무한 루프 금지)", "포인터 연산이 안전한지"를 검증하기 때문이다. 즉 eBPF는 "커널이 신뢰하지 않는 코드"를 실행하는 게 아니라, 검증기를 통과한 코드만 실행을 허용하는 구조다 — 공격자가 노리는 지점은 이 취약점이 아니라, 정상적으로 서명·검증을 통과한 eBPF 프로그램이 원래부터 갖고 있는 강력한 관찰·개입 권한 자체를 지속성 목적으로 정당하게(하지만 악의적으로) 사용하는 것이라는 점이 다른 커널 익스플로잇과 결이 다르다.

여기서 끝나지 않는다: 체이닝

Pwnable 카테고리의 글 (12/14)

  1. 메모리 구조 기초: 스택, 힙, 레지스터부터 이해하기
  2. 스택 버퍼 오버플로우: 가장 기본적인 메모리 손상 공격
  3. Format String 취약점: printf가 위험해지는 순간
  4. Stack Canary: 원리와 우회 방법
  5. NX/DEP 우회와 Return-to-libc
  6. ASLR과 정보 유출(Leak)
  7. ROP (Return-Oriented Programming) 완전 정복
  8. 힙 익스플로잇 기초: Use-After-Free와 Double Free
  9. pwntools 실전 활용법
  10. UDF(User-Defined Function) 기반 DB 권한 상승: 원리부터 실전까지
  11. Pass-the-Hash / Pass-the-Ticket: 원리와 실전
  12. eBPF 기반 지속성(Persistence) 기법
  13. Full RELRO 환경에서의 GOT Overwrite와 우회
  14. ret2dlresolve: 심볼 정보 없이 임의 함수 호출하기
← Pass-the-Hash / Pass-the-Ticket: 원리와 실전 Full RELRO 환경에서의 GOT Overwrite와 우회 →