[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 프로그램은 이 관찰 능력을 반대로 이용해서, 특정 조건에서 자기 자신의 흔적(프로세스, 소켓, 파일)을 결과에서 제외시키는 방식으로 은폐한다.
bpftool prog list로 현재 로드된 모든 eBPF 프로그램을 점검할 수 있다kernel.unprivileged_bpf_disabled)eBPF 프로그램이 임의 커널 코드 실행처럼 보이는데도 커널이 로드를 허용하는 이유는, 로드 시점에 **커널 내장 정적 분석기(Verifier)**가 그 프로그램의 모든 실행 경로를 시뮬레이션해서 "메모리 접근 범위를 벗어나지 않는지", "루프가 종료되는지(무한 루프 금지)", "포인터 연산이 안전한지"를 검증하기 때문이다. 즉 eBPF는 "커널이 신뢰하지 않는 코드"를 실행하는 게 아니라, 검증기를 통과한 코드만 실행을 허용하는 구조다 — 공격자가 노리는 지점은 이 취약점이 아니라, 정상적으로 서명·검증을 통과한 eBPF 프로그램이 원래부터 갖고 있는 강력한 관찰·개입 권한 자체를 지속성 목적으로 정당하게(하지만 악의적으로) 사용하는 것이라는 점이 다른 커널 익스플로잇과 결이 다르다.
ps/netstat/파일 목록 결과를 조작해 자신을 숨기면, 이후 침해 대응 과정에서 도구 기반 조사(라이브 포렌식)가 무력화되고 별도의 커널 메모리 덤프·오프라인 분석이 필요해진다 — 탐지 난이도 자체를 한 단계 끌어올리는 체인이다