
자동화된 SSH 기반 스캐너 및 패처로, Linux 커널 LPE 취약점 CVE-2026-43284와 CVE-2026-43500을 대상으로 하며, 다중 호스트 탐지, 권한 상승 탐지, 모듈 블랙리스트 완화 기능을 제공합니다.
고지: 이 도구는 합법적인 내부 보안 감사를 위해 특별히 설계되었습니다. 소유하지 않은 시스템에 대한 무단 사용은 위반입니다. Gagaltotal666 - GhostGTR666이 개발했습니다.
이 도구는 Linux 커널의 두 가지 로컬 권한 상승(LPE) 취약점을 식별하고 완화합니다:
f4c50a4034e6)/etc/modprobe.d/를 통한 모듈 블랙리스트| 기능 | 설명 |
|---|---|
| 멀티 호스트 스캐너 | 전체 서브넷(CIDR) 또는 특정 IP 목록을 병렬로 스캔 |
| TCP 핑 탐색 | SSH 전에 활성 호스트 자동 감지 (--skip-discovery로 건너뛸 수 있음) |
| 심층 감사 | 커널 버전, 모듈 상태, 업스트림 패치, 권한 수준 분석 |
| 취약점 평가 | 상태 자동 분류: VULNERABLE, MITIGATED, LIKELY_PATCHED, POSSIBLY_SAFE, MODULE_NOT_LOADED |
| 자동 완화 | --patch 한 번으로 모듈 블랙리스트, 언로드, 페이지 캐시 플러시 |
| 제로터치 sudo 주입 | sudo -S를 통한 비밀번호 자동 주입 — NOPASSWD 구성 불필요 |
| 스마트 인증 감지 | 권한 상승 자동 감지 (root, sudo NOPASSWD, 비밀번호 사용 sudo) |
| CLI 검증 | 오타 사전 검사, SSH 키 파일 검증 (가짜 known_hosts 방지) |
| 병렬 실행 | 스캔 및 SSH 작업용 스레드 풀 (기본 20개 워커) |
| JSON 보고 | 전체 감사 결과를 JSON 형식으로 내보내기 |
| 보기 좋은 출력 | 컬러 출력 + PrettyTable 요약 (라이브러리 없으면 자동 폴백) |
| 신호 처리 | SIGINT/SIGTERM을 통한 정상 종료 |
Python 3.8 이상
라이브러리: paramiko, colorama, prettytable
python3 -m venv .venv
source .venv/bin/activate
# 저장소 클론
git clone https://github.com/gagaltotal/dirtyfrag-scanner.git
cd dirtyfrag-scanner
# 의존성 설치
pip install -r requirements.txt
# 또는
pip install paramiko colorama prettytable

대상 서버에서 아무것도 변경하지 않고 취약점을 감지합니다.
# 비밀번호 사용
python3 dirtyfrag_scanner.py --subnet 192.168.1.0/24 --user ghostgtr666 --password 'server@02!'
# SSH 키 사용
python3 dirtyfrag_scanner.py --subnet 10.134.205.0/24 --user root --key ~/.ssh/id_rsa
# 둘 다 사용 (키 실패 시 비밀번호 폴백)
python3 dirtyfrag_scanner.py --subnet 192.168.1.0/24 --user admin --password 'pass' --key ~/.ssh/id_rsa
# 특정 IP 스캔 (탐색 없이)
python3 dirtyfrag_scanner.py --hosts 192.168.1.10,192.168.1.20 --user admin --password 'pass'
감사를 실행하고 취약한 서버에 완화를 즉시 적용합니다.
# 비밀번호로 패치 (SUDO 자동 주입, NOPASSWD 불필요)
python3 dirtyfrag_scanner.py --subnet 192.168.1.0/24 --user ghostgtr666 --password 'server@02!' --patch
# Root 로그인으로 패치
python3 dirtyfrag_scanner.py --subnet 192.168.1.0/24 --user root --key ~/.ssh/id_rsa --patch
# 사용자 지정 워커로 패치 (더 빠른 스캔)
python3 dirtyfrag_scanner.py --subnet 192.168.0.0/16 --user admin --password 'pass' --patch --workers 50
--subnet CIDR CIDR 서브넷 스캔 (예: 192.168.1.0/24)
--hosts IP[,IP,...] 특정 IP 스캔 (쉼표로 구분, 공백 없음)
--user USERNAME SSH 사용자 이름 (필수)
--password PASSWORD SSH 비밀번호 (특수 문자가 있으면 따옴표 사용)
--key PATH SSH 개인 키 경로 (예: ~/.ssh/id_rsa, known_hosts 아님!)
--port PORT 사용자 지정 SSH 포트 (기본값: 22)
--timeout SECONDS SSH 연결 시간 초과 (기본값: 10, 최대: 300)
--skip-discovery TCP 핑 탐색 건너뛰고 모든 IP에 직접 SSH
--workers NUM 병렬 SSH 워커 수 (기본값: 20, 최소: 1, 최대: 100)
--patch 취약한 호스트에 완화 적용
--output FILE 감사 결과를 JSON 파일로 저장
이 도구는 sudoers 수정 없이 다양한 SSH 서버 환경에서 작동하도록 설계되었습니다:
Root 직접 (권장)
--user root --key ~/.ssh/id_rsa --patch
Sudo NOPASSWD
--user ubuntu --key ~/.ssh/id_rsa --patch
/etc/sudoers에 NOPASSWD가 구성되어 있어야 함sudo -n 사용비밀번호 주입이 있는 Sudo (제로터치) ⭐
--user ubuntu --password 'mypass' --patch
/etc/sudoers: ALL=(ALL) ALL에서 작동sudo -S -p ''를 통해 비밀번호를 자동 주입하이브리드 (키 + 비밀번호)
--user ubuntu --key ~/.ssh/id_rsa --password 'mypass' --patch
--patch 플래그를 사용하면 도구가 다음 단계를 순서대로 실행합니다:
/etc/modprobe.d/dirtyfrag.conf 삭제 (있는 경우)/etc/modprobe.d/dirtyfrag.conf에 블랙리스트 규칙 작성:
install esp4 /bin/false
install esp6 /bin/false
install rxrpc /bin/false
chmod 644 적용rmmod esp4 (로드되지 않았으면 건너뜀)rmmod esp6 (로드되지 않았으면 건너뜀)rmmod rxrpc (로드되지 않았으면 건너뜀)echo 3 > /proc/sys/vm/drop_caches참고: rmmod 후에도 모듈이 여전히 로드되어 있으면 재부팅이 필요할 수 있다고 사용자에게 알립니다.
──────────────────────────────────────────────────────────
호스트 1/2: 10.134.205.163 (ubuntu-web-01)
──────────────────────────────────────────────────────────
OS : Ubuntu 22.04.4 LTS
커널 : 6.8.0-111-generic
권한 : user
CVE-2026-43284 (xfrm-ESP) [POSSIBLY_SAFE]
esp4 로드됨 : no
esp6 로드됨 : no
완화 : 적용 안 됨
업스트림 패치: 포함 안 됨 (<6.15)
CVE-2026-43500 (RxRPC) [VULNERABLE]
rxrpc 로드됨 : YES
완화 : 적용 안 됨
참고: 아직 업스트림 패치가 없음 — 완화가 유일한 해결책
[✓] 완화가 성공적으로 적용되었습니다!
[권한 확인] OK (사용 중: sudo (자동 비밀번호))
[대상 경로 정리] OK
[modprobe 구성 작성] OK
[구성 작성 확인] OK (3개 항목)
[파일 권한 설정] OK
[esp4 모듈 언로드] 건너뜀 (로드되지 않았거나 이미 제거됨)
[esp6 모듈 언로드] 건너뜀 (로드되지 않았거나 이미 제거됨)
[rxrpc 모듈 언로드] 언로드됨
[페이지 캐시 플러시] OK
[최종 확인] 구성 파일 유효
[최종 확인] 모든 취약 모듈 언로드됨
[결과] 완화가 성공적으로 적용되었습니다
════ 요약 ════
+----------------+-------------------+------+------------+------------+----------+
| 호스트 | OS/커널 | 권한 | CVE-43284 | CVE-43500 | 패치됨? |
+----------------+-------------------+------+------------+------------+----------+
| 10.134.205.163 | Ubuntu 22.04.4 | user | POSSIBLY_S | VULNERABLE | YES ✓ |
| 10.134.205.164 | Ubuntu 22.04.4 | user | VULNERABLE| VULNERABLE | FAILED ✗ |
| 10.134.205.165 | Debian 12 | root | MITIGATED | MITIGATED | — |
+----------------+-------------------+------+------------+------------+----------+
════ 통계 ════
스캔된 호스트 : 3
오류 : 0
취약 43284: 1
취약 43500: 2
완화 성공 : 1
완화 실패: 1
└─ 권한 부족으로 1개 실패
소요 시간 : 12.4초
--output 플래그를 사용하여 전체 감사 결과를 저장합니다:
python3 dirtyfrag_scanner.py --subnet 192.168.1.0/24 --user admin --password 'pass' --output report.json
{
"scan_time": "2026-05-12 14:23:45",
"tool": "DirtyFrag Scanner v1.0",
"cves": ["CVE-2026-43284", "CVE-2026-43500"],
"total_hosts": 3,
"results": [
{
"host": "10.134.205.163",
"hostname": "ubuntu-web-01",
"os": "Ubuntu 22.04.4 LTS",
"kernel": "6.8.0-111-generic",
"kernel_v": [6, 8, 0],
"is_root": false,
"cve_43284": {
"status": "POSSIBLY_SAFE",
"esp4_loaded": false,
"esp6_loaded": false,
"mitigation_applied": false,
"upstream_patched": false
},
"cve_43500": {
"status": "VULNERABLE",
"rxrpc_loaded": true,
"mitigation_applied": false
},
"patch_applied": true,
"patch_msg": "...",
"error": null
}
]
}
# 잘못됨
python3 dirtyfrag_scanner.py --subnet 192.168.1.0/24 --user root --key ~/.ssh/id_rsa.pub
# 올바름 (개인 키 사용, .pub 아님)
python3 dirtyfrag_scanner.py --subnet 192.168.1.0/24 --user root --key ~/.ssh/id_rsa
제공한 파일이 개인 키가 아닙니다. 확인 사항:
.pub 파일(공개 키)이 아님known_hosts가 아님-----BEGIN PRIVATE KEY----- 또는 -----BEGIN RSA PRIVATE KEY----- 포함# 잘못됨
python3 dirtyfrag_scanner.py --user ghostgtr666--password 'pass' --subnet 192.168.1.0/24
# 올바름
python3 dirtyfrag_scanner.py --user ghostgtr666 --password 'pass' --subnet 192.168.1.0/24
사용자에게 sudo 액세스 권한이 없거나, 필요할 때 비밀번호가 제공되지 않았습니다:
# 옵션 1: root 직접 사용
python3 dirtyfrag_scanner.py --subnet 192.168.1.0/24 --user root --key ~/.ssh/id_rsa --patch
# 옵션 2: sudo 자동 주입용 비밀번호 제공
python3 dirtyfrag_scanner.py --subnet 192.168.1.0/24 --user admin --password 'pass' --patch
# 옵션 3: /etc/sudoers에 NOPASSWD 구성
echo 'admin ALL=(ALL) NOPASSWD: ALL' | sudo tee -a /etc/sudoers
--timeout 증가:
python3 dirtyfrag_scanner.py --subnet 192.168.1.0/24 --user admin --password 'pass' --timeout 30
일부 배포판은 esp4/esp6/rxrpc 모듈 없이 커널을 사전 컴파일합니다. 수동 확인:
# 대상 호스트에서
cat /proc/cmdline | grep -i module
lsmod | grep -E 'esp4|esp6|rxrpc'
python3 dirtyfrag_scanner.py \
--subnet 192.168.100.0/24 \
--user monitoring \
--password 'monitoring123' \
--workers 30 \
--output full-audit.json
python3 dirtyfrag_scanner.py \
--subnet 10.0.0.0/16 \
--user root \
--key ~/.ssh/prod_rsa \
--patch \
--workers 50 \
--output emergency-patch.json
python3 dirtyfrag_scanner.py \
--hosts 192.168.1.10,192.168.1.20,192.168.1.30 \
--user ubuntu \
--key ~/.ssh/dev_rsa \
--output critical-servers.json
python3 dirtyfrag_scanner.py \
--subnet 192.168.50.0/24 \
--user deploy \
--key ~/.ssh/deploy_ed25519 \
--password 'deploy@backup' \
--patch \
--output deploy-scan.json
Gagaltotal666 - GhostGTR666이 개발
GitHub: github.com/gagaltotal
고지: 이 도구는 합법적이고 승인된 보안 감사에만 사용됩니다. 사용자는 이 도구의 사용에 대한 책임이 있습니다.