
CVE-2026-31431에 대한 연구 및 탐지 지침으로, syscall 모니터링을 우회하는 io_uring 기반 기법입니다. Tetragon, Falco, Wazuh용 탐지 규칙과 강화 전략을 제공합니다.
CVE-2026-31431("Copy Fail")에 대해, 우리는 세 가지 우회 전략을 결합하여 주류 보안 제품의 체계적인 취약점을 입증했습니다: io_uring 비동기 I/O 경로, 프로세스 분할(fork + SCM_RIGHTS), 그리고 소켓 재사용. 실증 테스트를 통해 이러한 기법이 사실상 모든 syscall 기반 탐지 도구를 회피할 수 있음을 증명했습니다.
io_uring은 공유 메모리 링 버퍼를 통해 요청을 제출하여 기존 syscall 진입점을 우회합니다. 이는 다음을 의미합니다:
iou-wrk-XXXXX)는 audit_syscall_entry()를 트리거하지 않고 커널 내부에서 작업을 실행합니다socket(AF_ALG)만 차단하는 Seccomp 정책은 IORING_OP_SOCKET을 통해 우회될 수 있습니다 — seccomp는 syscall 진입 시에만 확인하며, io_uring 작업은 해당 진입점을 거치지 않습니다fork + SCM_RIGHTS(Unix 도메인 소켓 fd 전달)를 사용하면 소켓 생성과 splice 작업을 서로 다른 프로세스에 배치할 수 있습니다:
same_field(audit.pid) 상관관계가 깨집니다 — 소켓 PID ≠ splice PID, CRITICAL 규칙이 발동하지 않음원래 PoC는 반복마다 새 소켓을 생성합니다(40개 이상의 socket(AF_ALG) 호출 생성). 소켓 재사용은 수신 소켓 하나만 생성하며, 루프는 accept()를 호출하므로 새 소켓 이벤트가 생성되지 않습니다. count >= N 기반 규칙은 완전히 무력화됩니다.
io_uring 경로 + splice + /etc/passwd + authenc 알고리즘 + SCM_RIGHTS 분할 + 소켓 재사용
이 조합에서는: syscall 기반 도구는 완전히 눈이 멀고, 프로세스 수준 상관관계는 깨지며, 카운트 임계값은 실패합니다. kprobe 수렴점 탐지만이 이 조합을 잡아낼 수 있습니다.
__sock_create(family=38)은 모든 경로(syscall 및 io_uring)에 대한 우회 불가능한 수렴점입니다 — AF_ALG는 Linux 커널에서 유일한 사용자 공간 암호화 API입니다. 공격자가 접근 방식을 어떻게 바꾸든 AF_ALG 소켓을 생성해야 합니다. LSM 수준에서 이 함수를 모니터링하면 100% 재현율을 제공하며 어떤 변형에도 영향을 받지 않습니다.
Falco의 기본 modern_ebpf 드라이버는 syscall 경로만 캡처합니다. krsi 플러그인이 필요합니다 — 이 플러그인은 io_socket() 및 __sys_socket() 커널 함수 종료에 대한 fexit 추적을 사용하여 AF_ALG 소켓 생성의 io_uring 경로를 커버합니다. 권장 폴백 규칙:
- rule: AF_ALG Socket Created
condition: >
(evt.type = socket and evt.args contains AF_ALG) or
(evt.type = krsi_socket and krsi.domain = 38)
output: >
AF_ALG socket created (source=%evt.type domain=%evt.arg.domain
krsi_domain=%krsi.domain proc=%proc.name pid=%proc.pid)
priority: WARNING
tags: [cve-2026-31431, crypto, container_escape]
권장 규칙의 탐지 접근 방식: socket 이벤트(syscall 경로, evt.args contains AF_ALG 문자열 매칭을 사용하여 ENUMFLAGS32 유형 제한 우회)와 krsi_socket 이벤트(io_uring 경로, krsi.domain = 38 정수 비교 사용)를 동시에 커버합니다. 카운트 임계값 없음(소켓 재사용으로 무력화됨), PID 상관관계 의존성 없음(다중 프로세스 분할로 무력화됨).
참고: 커뮤니티 ThreatBear 규칙의 세 가지 방어 계층은 모두 우회 가능합니다 — ENUMFLAGS32 유형 불일치(evt.arg[0]=38 항상 false), 소켓 재사용이 카운트 임계값 무력화(count=1 < 40), 다중 프로세스 분할이 PID 상관관계 손상. 규칙 우회 분석 참조.
Wazuh는 전적으로 auditd의 syscall 감사 이벤트에 의존합니다. io_uring 작업은 syscall 진입점을 거치지 않으므로 auditd는 이벤트를 생성하지 않으며 모든 7개 Wazuh 규칙이 실패합니다. Elastic Security Agent에도 동일하게 적용됩니다 — syscall 진입점 의존 제품은 구조적으로 io_uring 경로에 대해 블라인드입니다. Wazuh 한계 분석 참조.
bypass_demo/ 디렉토리에는 탐지 우회 접근 방식에 대한 개념적 설명이 포함되어 있습니다. 실제 PoC 코드는 내부 전용이며 공개적으로 배포되지 않습니다.
| 문서 | 내용 |
|---|---|
| VULNERABILITY.md | 근본 원인 — 세 가지 커널 변경 사항의 중첩, 9단계 공격 체인, 페이지 캐시 쓰기 특성 |
| 문서 | 내용 |
|---|---|
| defense/HARDENING.md | 3계층 방어 모델: 커널 구성 → seccomp → 사용자 네임스페이스; Docker 29.4.2 보안 분석 |
| 제품 | 탐지 계층 | 기존 Syscall | io_uring 경로 | 다중 프로세스 분할 | 소켓 재사용 | 평가 |
|---|
| Tetragon (kprobe) | 커널 함수 | ✅ | ✅ | ✅ | ✅ | 유일한 전체 체인 커버리지 |
| Falco + krsi 플러그인 | fexit/fentry | ✅ | ✅ | ✅ | ✅ | io_uring에 krsi 필요; 진입 전용 |
| Falco (modern_ebpf) | syscall tracepoint | ✅ | ❌ | ✅ | ✅ | io_uring 완전히 보이지 않음 |
| auditd / Wazuh | syscall 감사 | ✅ | ❌ | ❌ PID 손상 | ⚠️ | io_uring 블라인드 + PID 상관관계 손상 |
| Elastic Security Agent | syscall | ✅ | ❌ | ⚠️ | ⚠️ | Wazuh와 동일; syscall 의존 = 블라인드 |
| EXPLOIT_VARIANTS.md |
| 6가지 악용 변형 차원 — I/O 경로 × 데이터 제출 × 대상 파일 × AEAD 알고리즘 × 프로세스 분할 × 소켓 재사용 |
| DETECTION_THEORY.md | 탐지 이론 — 수렴점 vs. 발산점, 4계층 탐지 아키텍처, 다중 신호 시간 상관관계 |
| 문서 | 내용 |
|---|
| detection/tetragon.md | 권장 — Tetragon kprobe, 기존 + io_uring을 커버하는 5개 프로브, 유일한 전체 체인 탐지 |
| detection/falco.md | Falco 0.40.0 + krsi 0.1.0 구성 가이드, krsi 내부 구조, 문제 해결 |
| detection/wazuh.md | Wazuh + auditd의 세 가지 주요 한계: io_uring 블라인드, PID 상관관계 붕괴, 페이지 캐시 비가시성 |
| detection/rule_bypass.md | ThreatBear 규칙 우회 원리, 권장 규칙의 안티 우회 실증 검증 |