
DirtyFrag (CVE-2026-43284)에 대한 실험실 탐지 연습 - xfrm-ESP 페이지 캐시 손상을 통한 Linux 커널 권한 상승. 익스플로잇 실행, 탐지 격차 및 Elastic Stack을 사용한 수정된 EQL 규칙을 다루는 종합 분석 보고서.
분류: 내부 실험실 - CyberLAB
날짜: 2026년 5월 24일
플랫폼: Elastic Stack v9.4.1
상태: 탐지 확인됨
제어된 취약점 활용 실습으로, 초기 접근 이후의 공격자가 DirtyFrag (CVE-2026-43284) (리눅스 커널 권한 상승 취약점)을 사용하는 시나리오를 시뮬레이션했습니다. 시뮬레이션된 공격자 시나리오: 피싱된 자격 증명으로 획득한 저권한 사용자 (saskia, uid=1001)가 내부 리눅스 호스트에서 루트로 권한 상승을 시도합니다. 실험실은 프로덕션 네트워크와 분리된 의도적으로 취약한 우분투 머신 (ubuntu-vuln, 커널 6.0.0-22-generic)을 사용했습니다.
공격자는 실험실 환경 내에서 완전한 루트 접근 권한 (uid=0)을 획득했습니다. Elastic Security 탐지 스택은 3개의 HIGH 심각도 알림 (위험 점수 73)을 생성하여 취약점 활용 체인을 올바르게 식별했습니다. 그러나 탐지에는 수동 튜닝이 필요했습니다. 기본 구성을 사용하면 알림을 놓칠 수 있는 공백이 있었습니다.
결론: 커널 <= 6.x를 실행하는 패치되지 않은 리눅스 호스트는 취약합니다. 공격자가 이미 저권한 발판을 가지고 있다면, 이 취약점을 통해 파일 무결성 도구에 보이지 않는 디스크 추적 없이 조용하고 빠르게 완전한 루트 권한을 얻을 수 있습니다.
| 항목 | 세부 사항 |
|---|---|
| 취약점 | DirtyFrag - CVE-2026-43284 (xfrm-ESP path), CVE-2026-43500 (RxRPC path) |
| CVSS 영향 | 로컬 권한 상승을 통한 완전한 루트 권한 획득 |
| 영향을 받는 커널 | 리눅스 커널 >= 2017년 1월 (9년 수명) |
| 영향을 받는 배포판 | Ubuntu 24.04.4, RHEL 10.1, AlmaLinux 10, openSUSE, CentOS Stream 10, Fedora 44 |
| 파일 무결성 우회 | 디스크 내 파일 변경 없음 - AIDE, Tripwire, 해시 모니터링 모두 정상 보고 |
| 공개 PoC | 사용 가능 (V4bel/dirtyfrag on GitHub) |
| 루트 권한 획득 시간 | 저권한 발판에서 < 10분 |
auditd 규칙은 증거를 생성하지 않습니다. socket, splice, unshare에 대한 명시적인 시스템 호출 규칙이 없으면 취약점 활용이 조용히 실행되어 로그나 알림이 생성되지 않습니다. 기본 Elastic Agent 배포는 이러한 규칙을 자동으로 추가하지 않습니다.process.parent.pid를 사용했습니다. 실제로 DirtyFrag는 중간 프로세스를 포크하여 이 상관 관계를 깨뜨립니다. 수정 사항 - auditd.session으로 상관 관계를 설정하는 방법 - 이 실습 중에 식별되어 구현되었습니다./etc/shadow를 읽고, SSH 인증 키에 접근하고, 지속성 마커 (/root/pwned.txt)를 작성하고, nc를 통해 네트워크 정찰을 시작했습니다. 이 모든 작업은 초기 접근 후 30분 이내에 발생했습니다.| 우선 순위 | 조치 |
|---|---|
| 즉시 | 모든 호스트의 리눅스 커널을 패치된 버전으로 업데이트하십시오. Ubuntu, RHEL, AlmaLinux, openSUSE, CentOS, Fedora에 대한 벤더 보안 권고를 적용하십시오. |
| 단기 | Elastic Agent가 모니터링하는 모든 리눅스 호스트에 socket, splice, unshare에 대한 명시적인 auditd 시스템 호출 규칙을 배포하십시오. |
| 단기 | 네임스페이스 조작 시퀀스에 대해 process.parent.pid 대신 auditd.session으로 상관 관계를 설정하도록 EQL 탐지 규칙을 업데이트하십시오. |
| 지속적 | 위험 점수 >= 73인 권한 상승 알림을 우선순위가 높은 삼각(triage) 대상으로 취급하십시오. 현재 규칙은 권한 상승 발생 후 몇 초 내에 알림을 발생시킵니다. |
목표: 홈 실험실 SOC에서 DirtyFrag 취약점 활용에 대한 탐지 적용 범위를 검증하고, 탐지 공백을 식별하며, 관찰된 공격자 행동에 기반한 수정된 탐지 규칙을 생성합니다.
위협 모델: 피싱된 자격 증명을 통해 저권한 사용자 계정 (saskia, uid=1001)을 획득한 초기 접근 이후의 공격자를 시뮬레이션합니다. 목표: xfrm-ESP 수신 경로를 통해 DirtyFrag를 사용하여 루트로 권한 상승. 실습은 Proxmox 콘솔을 통해 수행되었으며, SSH 사후 접근과 기능적으로 동일합니다.
두 가지 공격자 능력 계층이 고려되었습니다:
이 실습은 Vanilla 계층을 다루었습니다.
DirtyFrag는 동일한 근본 원인을 악용하는 관련 리눅스 커널 버그 계열 중 세 번째입니다:
| CVE | 별명 | 도입 시기 | 경로 |
|---|---|---|---|
| CVE-2022-0847 | Dirty Pipe | - | pipe |
| CVE-2026-31431 | Copy Fail | - | splice |
| CVE-2026-43284 | DirtyFrag | 2017년 1월 (커밋 cac2661c53f3) | xfrm-ESP |
| CVE-2026-43500 | DirtyFrag | 2023년 6월 (커밋 2dc334f1a63a) | RxRPC |
근본 원인: IPv4/IPv6 데이터그램 추가 경로가 skb_splice_from_iter()가 페이지 캐시 페이지를 소켓 버퍼 (sk_buff)에 심은 후 SKBFL_SHARED_FRAG를 설정하지 않았습니다. 그런 다음 ESP 입력 경로가 공격자가 제어하는 페이지 캐시 페이지에 대해 인플레이스 암호화를 수행하여 일반적인 비복제 비선형 skb로 처리했습니다.
취약점 활용 기본 요소: 페이지 캐시에 4바이트 또는 8바이트 제어 쓰기. 결정적이며 경쟁 조건이 필요하지 않습니다.
취약점 활용 체인:
/usr/bin/su)를 페이지 캐시로 읽음splice()를 통해 패킷을 구성하여 파일 페이지가 struct sk_buff의 frag[0]에 위치하도록 함xfrm-ESP 복호화 경로로 전달execve() 포함)가 손상된 바이트를 반환중요한 회피 속성: 디스크 내 파일은 절대 수정되지 않습니다. 파일 무결성 모니터링 도구 (AIDE, Tripwire, 해시 검사) 모두 대상 파일을 정상으로 보고합니다.
취약한 것으로 확인된 배포판: Ubuntu 24.04.4, RHEL 10.1, AlmaLinux 10, openSUSE Tumbleweed, CentOS Stream 10, Fedora 44.
| 구성 요소 | 세부 사항 |
|---|---|
| Fleet Server / ELK 호스트 | ubuntu-tm / elk-docker - 172.66.66.30 (실험실 내부) |
| Elastic Stack | v9.4.1 (Elasticsearch, Kibana, Logstash - Docker) |
| 대상 (피해자) 호스트 | ubuntu-vuln - 172.66.66.27 |
| 피해자 커널 | 6.0.0-22-generic (취약함) |
| 피해자 사용자 | saskia - uid=1001, groups=1001(saskia),27(sudo),100(users) |
| Elastic Agent | v9.4.1 (auditbeat 포함) |
| 네트워크 IDS | 전용 센서의 Suricata 8.0.5 |
| Kibana | http://172.66.66.30:5601 (실험실 내부) |
실습 당시 활성 텔레메트리:
| 데이터셋 | 점유율 |
|---|---|
suricata.eve | 75.2% |
elastic_agent.fleet_server | 10.8% |
elastic_agent | 9.1% |
elastic_agent.filebeat | 1.9% |
elastic_agent.auditbeat | 1.4% |
auditd_manager.auditd | 0.5% |
system.auth | 0.2% |
system.syslog | 0.1% |
실습 전 실험실 네트워크 격리됨. 방화벽 별칭 Cyber_escape_door 비활성화 확인 - 다른 VLAN 또는 인터넷으로의 측면 연결 차단.

취약한 커널과 저권한 계정이 ubuntu-vuln에 확인됨:```
saskia@ubuntu-vuln:$ uname -r
6.0.0-22-generic
saskia@ubuntu-vuln:$ whoami
saskia
saskia@ubuntu-vuln:~$ id
uid=1001(saskia) gid=1001(saskia) groups=1001(saskia),27(sudo),100(users)

#### 4.3 스택 상태 점검
**Suricata: 실행 중 및 캡처 중 (systemctl 상태)**

**Kibana/Elasticsearch: 녹색/정상 (API 확인)**

**변경 전 VM 스냅샷**



#### 4.4 네트워크 캡처
Suricata 호스트에서 tcpdump 시작 (`emp6s19`, 스냅샷 길이 262144바이트)으로 `172.66.66.27` 트래픽 전체 패킷 캡처.


---
### 5. 2단계 - 익스플로잇 실행
#### 5.1 스테이징
V4bel/dirtyfrag PoC의 익스플로잇 소스(`exp.c`)가 피해자 호스트에 스테이징됨.```bash
ubuntu-vuln@ubuntu-vuln:~/dirtyfrag$ ls
exp exp.c README.md
ubuntu-vuln@ubuntu-vuln:~/dirtyfrag$ cp exp.c /tmp/exp/
오른쪽 터미널은 사용자 saskia에게 보이는 스테이징된 복사본을 보여줍니다.
