
# Linux AF_ALG 취약점 감사 및 하드닝 도구 커널 암호화 API 노출을 확인하고, 모듈을 제한하며, 복원 스크립트를 제공하여 AF_ALG 로컬 권한 상승(CVE-2026-31431)으로부터 Linux 시스템을 감사하고 하드닝합니다.
이 도구는 CVE-2026-31431을 완화하기 위해 커널 모듈을 물리적으로 이름 변경하고 메모리에서 제거하는 구조적 차단(Structural Blocking) 방식을 구현합니다. 사용 전에 다음 아키텍처 위험 사항을 숙지하시기 바랍니다:
/lib/modules/ 디렉토리에 취약한 모듈이 새로 배포되어 이전 차단 조치가 무효화됩니다.AF_ALG(커널 암호화 API)를 비활성화하면 커널 수준 하드웨어 가속에 의존하는 특정 애플리케이션이나 서비스(예: 특수 VPN, 디스크 암호화 유틸리티, 맞춤형 보안 도구)가 중단될 수 있습니다.[cite: 3]사용에 따른 책임은 본인에게 있습니다. solution.sh 실행 후 시스템의 중요 기능을 항상 검증하십시오.[cite: 3]
Linux 커널 암호화 API(AF_ALG)를 통한 LPE(로컬 권한 상승) 벡터를 발견, 진단, 차단하기 위한 도구 키트입니다.
이 도구는 커널 모듈의 이름을 변경하고 메모리에서 제거하여 CVE-2026-31431을 해결하기 위해 구조적 차단(Structural Blocking) 방식을 사용합니다. 주요 아키텍처 위험 사항은 다음과 같습니다:
/lib/modules/ 디렉토리에 취약한 모듈이 새로 배포되어 이전 차단 조치가 무효화됩니다.사용에 따른 책임은 본인에게 있습니다.
이 저장소는 AF_ALG(socket(38, 5, 0))를 통한 권한 상승 공격에 대한 진단 → 차단 → 검증 워크플로우를 구성하는 두 개의 스크립트를 제공합니다:
check.sh — 다계층 보안 상태 감사(비특권 실행)solution.sh — AF_ALG 모듈을 메모리에서 강제 제거 + 물리적 모듈 파일 확인(루트 권한 필요)restore.sh — AF_ALG 모듈을 다시 로드하고 시스템을 solution.sh 실행 전 상태로 복원(루트 권한 필요)| 검사 항목 | 검사 내용 | 심각도 |
|---|---|---|
| 프로세스 컨텍스트 | 현재 UID/GID 및 유효 capabilities | 낮음 |
| AF_ALG 암호화 소켓 | socket(AF_ALG, ...)을 통한 커널 암호화 API 접근성 | 높음 |
| kptr_restrict | 사용자 공간에 대한 커널 포인터 가시성 | 중간 |
| dmesg_restrict | 커널 링 버퍼 접근 제한 | 중간 |
| SELinux | Enforcing / Permissive / Disabled 상태 | 중간 |
| /proc hidepid | /proc가 다른 프로세스 정보를 숨기는지 여부 | 낮음 |
./check.sh
sudo ./solution.sh
sudo ./restore.sh
restore.sh는 AF_ALG 커널 모듈(af_alg, algif_rng, algif_aead, algif_skcipher, algif_hash)을 다시 로드하여 solution.sh의 효과를 되돌립니다. 물리적 모듈 파일(af_alg.ko.xz)이 이름 변경되거나 제거된 경우, 스크립트는 경고를 표시하고 모듈 로드를 시도하기 전에 수동 복원을 요청합니다.
AF_ALG를 적극적으로 사용하는 라이브 시스템(예: IPsec, dm-crypt/LUKS 또는 하드웨어 암호화 오프로드를 사용하는 시스템)에서 solution.sh를 실행하면 모든 커널 암호화 작업이 즉시 중단됩니다. 여기에는 다음이 포함됩니다:
algif_* 소켓 인터페이스에 의존하는 모든 컨테이너 또는 애플리케이션이 스크립트는 AF_ALG 커널 모듈을 강제로 언로드합니다. 재부팅 전까지 커널 암호화 작업이 실패합니다. 이 스크립트는 테스트 및 분석 목적으로 에어갭, 비프로덕션 또는 폐기 가능한 시스템에서만 사용하도록 설계되었습니다. 프로덕션 또는 중요 인프라에서 실행하지 마십시오.
check.sh는 POSIX 셸과 /proc//sys 외에 추가 종속성이 필요 없음solution.sh는 루트 권한 필요restore.sh는 루트 권한 필요af_alg_block.so는 /etc/ld.so.preload를 통한 설치를 위해 루트 권한 필요이 POC는 WSL2에서 테스트되었습니다. 다음 사항에 유의하십시오:
wsl --shutdown). 여기에는 solution.sh의 커널 모듈 상태 변경, 파일 이름 변경, check.sh 결과 및 이 저장소의 로컬 파일 수정이 포함됩니다..wslconfig, /etc/wsl.conf 또는 자동 시작 스크립트(예: /etc/rc.local) 구성을 별도로 고려하십시오.AF_ALG 공격 벡터를 확실히 차단하려면:
커널 모듈 블랙리스트 등록(가장 안정적):
echo "blacklist af_alg" | sudo tee /etc/modprobe.d/af_alg-blacklist.conf
또는 물리적 파일 이름 변경:
sudo mv /lib/modules/$(uname -r)/kernel/crypto/af_alg.ko.xz \
/lib/modules/$(uname -r)/kernel/crypto/af_alg.ko.xz.bak
sysctl을 통한 AF_ALG 비활성화:
sudo sysctl -w net.core.af_alg_disabled=1
SELinux / AppArmor 정책을 통한 AF_ALG 소켓 생성 차단
비특권 사용자 네임스페이스 비활성화(컨테이너 환경):
sudo sysctl -w kernel.unprivileged_userns_clone=0
LD_PRELOAD를 통한 socket() syscall에서 AF_ALG 차단(WSL2 임시 방편):
# 시스템 전체 설치(루트 권한 필요)
echo /absolute/path/to/af_alg_block.so | sudo tee -a /etc/ld.so.preload
사전 빌드된 공유 라이브러리(af_alg_block.so)가 저장소에 포함되어 있습니다. 이 라이브러리는 socket(2)를 가로채서 도메인이 AF_ALG(38)인 경우 EAFNOSUPPORT를 반환합니다. 다른 모든 소켓 호출은 변경 없이 실제 구현으로 전달됩니다.
이 접근 방식은 주로 단일 사용자 의미 체계와 재부팅 시 초기화 동작으로 인해 시스템 전체 LD_PRELOAD가 실용적인 WSL2를 대상으로 합니다. 기존의 다중 사용자 Linux 시스템에서는 방법 1(모듈 블랙리스트)을 선호하십시오 — /etc/ld.so.preload를 통한 주입은 시스템의 모든 프로세스에 영향을 미치며 AF_ALG 의존 서비스를 조용히 중단시킬 수 있습니다.
참고: glibc(musl 아님) 필요. /etc/ld.so.preload는 수정에 루트 권한이 필요합니다. 제거는 파일에서 해당 줄을 삭제하여 수행합니다.
MIT