
CVE-2026-31431 복사 실패에 대한 빠르고 감사 가능한 Linux 완화: algif_aead 차단, 검증 및 AF_ALG seccomp 강화.
______ ______ _ __ ______ __
/ ____/___ ____ __ _/ ____/___ _(_) / / ____/_ ______ __________/ /
/ / / __ \/ __ \/ / / / /_ / __ `/ / / / / __/ / / / __ `/ ___/ __ /
/ /___/ /_/ / /_/ / /_/ / __/ / /_/ / / / / /_/ / /_/ / /_/ / / / /_/ /
\____/\____/ .___/\__, /_/ \__,_/_/_/ \____/\__,_/\__,_/_/ \__,_/
/_/ /____/
커널이 패치되는 동안 CVE-2026-31431 “Copy Fail”에 대한 빠르고 감사 가능한 Linux 노출 평가 및 완화 도구입니다.
CopyFail Guard는 Linux 시스템 관리자, DevSecOps 엔지니어, 플랫폼 팀 및 침해 대응 담당자를 위한 방어 운영 도구입니다. Linux algif_aead/AF_ALG 문제에 대한 노출을 다음과 같이 줄이는 데 도움을 줍니다:
algif_aead의 사용 가능 여부, 로드됨, 빌트인 또는 이미 차단됨 확인modprobe.d 차단 설치 및 안전한 경우 모듈 언로드최종 수정: 공급업체의 패치된 커널을 설치하고 재부팅하세요. 이 도구는 공개와 전체 플릿 패치 사이의 운영상의 공백을 메웁니다.
splice, setuid 변경, 권한 상승 또는 파괴적인 프로브 없이 노출과 AF_ALG 접근 가능성 확인./etc/modprobe.d/99-copyfail-guard.conf를 작성하며, 롤백은 해당 파일만 제거합니다.seccomp-patch는 기존 Docker/Podman/Kubernetes seccomp 프로필에 AF_ALG 거부를 추가하여 런타임 강화를 대체하지 않습니다.assess --json 및 문서화된 종료 코드로 플릿 스캔, SIEM 캡처 및 변경 관리 증거 지원.Linux 호스트에서 빠른 답변이 필요하다면:
git clone --depth 1 https://github.com/juliosuas/copyfail-guard.git
cd copyfail-guard
sudo ./bin/copyfail-guard.sh doctor
sudo ./bin/copyfail-guard.sh assess
판정이 노출됨이고 algif_aead가 모듈형이라면:
sudo ./bin/copyfail-guard.sh mitigate --yes
sudo ./bin/copyfail-guard.sh verify
반복 설치를 위해 릴리스 태그를 고정하려면:
git clone --branch v0.3.0 --depth 1 https://github.com/juliosuas/copyfail-guard.git
최신 태그된 릴리스가 나오면 v0.3.0을 해당 버전으로 바꾸세요.
먼저 안전한 노출 검사를 실행하세요:
sudo ./bin/copyfail-guard.sh assess
결과를 읽는 방법:
신뢰할 수 없는 컨테이너, CI 작업, 샌드박스 또는 다중 사용자 워크로드를 실행하는 경우 해당 런타임 내에서 AF_ALG 소켓 생성이 차단되었는지도 테스트하세요:
python3 tools/afalg-socket-test.py
PERMITTED는 성공적인 익스플로잇을 증명하지 않지만, 관련 사용자 공간 암호화 API에 접근 가능하다는 것을 증명합니다. 방어 운영의 경우, 패치된 커널 롤아웃을 확인하는 동안 완화를 적용할 충분한 이유입니다.
파괴적인 개념 증명은 포함되지 않았습니다. 이는 기능이지 결함이 아닙니다.
실제 Copy Fail 익스플로잇 증명은 커널 메모리/페이지 캐시 영향 또는 권한 상승을 검증해야 합니다. 공용 완화 저장소에 이를 포함하면 프로젝트의 안전성과 프로덕션 배포 가능성이 낮아집니다.
CopyFail Guard는 운영자가 안전하게 조치할 수 있는 사항을 증명합니다:
최종 취약점 상태에 대해서는 이 도구를 공급업체 권고/패키지 인벤토리 및 재부팅 증거와 결합하세요.
CopyFail Guard는 완화이지 치료가 아닙니다. 노출을 줄이고 임시 통제를 확인합니다. 지속적인 수정은 공급업체 패치 커널과 재부팅입니다.
이 도구는 침해 대응을 위해 의도적으로 클론 앤 런 방식입니다: 코어 호스트 워크플로우에는 컴파일러, 커널 헤더, 익스플로잇 코드 또는 타사 패키지 관리자가 필요하지 않습니다. python3는 --json 출력, seccomp-patch 및 비익스플로잇 AF_ALG 소켓 테스트에 필요합니다.
클론 앤 런:
git clone https://github.com/juliosuas/copyfail-guard.git
cd copyfail-guard
chmod +x bin/copyfail-guard.sh
sudo ./bin/copyfail-guard.sh doctor
sudo ./bin/copyfail-guard.sh assess
sudo ./bin/copyfail-guard.sh mitigate --yes
sudo ./bin/copyfail-guard.sh verify
선택적 시스템 설치:
git clone https://github.com/juliosuas/copyfail-guard.git
cd copyfail-guard
sudo ./scripts/install.sh
sudo copyfail-guard status
설치 프로그램은 소스와 대상을 고정하여 통제된 롤아웃을 지원합니다:
sudo env COPYFAIL_GUARD_REF=v0.3.0 ./scripts/install.sh
최신 태그된 릴리스가 나오면 COPYFAIL_GUARD_REF에 해당 버전을 사용하세요.
컨테이너/CI 강화:
./bin/copyfail-guard.sh seccomp-patch docker-default.json copyfail-seccomp.json
docker run --security-opt seccomp=./copyfail-seccomp.json IMAGE
보호된 컨테이너 내에서 AF_ALG가 차단되었는지 확인:
docker run --rm \
--security-opt seccomp=./copyfail-seccomp.json \
-v "$PWD/tools:/tools:ro" \
python:3.12-alpine \
python /tools/afalg-socket-test.py
예상 보호 결과:
BLOCKED: socket(AF_ALG) denied by policy (...)
예상 판정, JSON 형태 및 컨테이너 검증 결과는 샘플 출력을 참조하세요.
Copy Fail은 AF_ALG 사용자 공간 암호화 API의 algif_aead 구성 요소에서 발생하는 Linux 커널 로컬 권한 상승입니다. 공개 권고에서는 권한이 없는 로컬 사용자가 접근할 수 있고 특히 공유 커널 시스템(Kubernetes 노드, CI/CD 러너, 멀티 테넌트 호스트, 에이전트 샌드박스, 개발자 박스)에서 위험한 페이지 캐시 쓰기 프리미티브를 설명합니다.
올바른 수정은 업스트림 되돌리기/수정을 포함한 공급업체 커널 업데이트와 패치된 커널로 재부팅입니다. CopyFail Guard는 전 플릿에 재부팅이 완료되기 전의 기간을 위한 방어 운영 도우미입니다.
코어 호스트 명령:
bashmodinfo, modprobe, lsmod, rmmod (사용 가능한 경우)grep, awk, mktemp, install선택적 가시성 도구:
lsof 또는 ss (AF_ALG 소비자 확인용)Seccomp 프로필 패치:
--json, seccomp-patch 및 tools/afalg-socket-test.py에는 python3 필요익스플로잇 코드, 컴파일러, 커널 헤더 또는 타사 패키지는 필요하지 않습니다.
CopyFail Guard는 익스플로잇 개념 증명을 포함하지 않습니다. 이는 의도적입니다. 취약점을 증명하나요? 참조.
대신 assess는 안전한 운영 점검을 수행합니다:
algif_aead가 사용 가능, 로드됨, 빌트인 또는 차단된 것으로 보이는지 감지자동화 JSON:
sudo ./bin/copyfail-guard.sh assess --json
./bin/copyfail-guard.sh doctor --json
종료 코드:
mitigate는 다음을 작성합니다:
/etc/modprobe.d/99-copyfail-guard.conf
내용:
# CopyFail Guard에서 CVE-2026-31431을 위해 관리함
install algif_aead /bin/false
blacklist algif_aead
그런 다음 시도:
sudo rmmod algif_aead
모듈이 현재 사용 중이면 rmmod가 실패할 수 있습니다. 그 경우에도 영구 차단은 설치된 상태로 유지됩니다; AF_ALG 소비자를 중지하거나 완화 적용 후 재부팅하세요.
스크립트는 관리되는 modprobe 경로에서 심볼릭 링크를 덮어쓰지 않으며 파일을 안전한 권한으로 원자적으로 작성합니다.
신뢰할 수 없는 워크로드의 경우 호스트를 패치하는 동안에도 seccomp로 AF_ALG 소켓 생성을 차단하세요.
권장 경로: 기존 런타임 seccomp 기준을 교체하는 대신 패치하세요:
./bin/copyfail-guard.sh seccomp-patch docker-default.json copyfail-seccomp.json
Docker와 함께 사용:
docker run --security-opt seccomp=./copyfail-seccomp.json IMAGE
Podman과 함께 사용:
podman run --security-opt seccomp=./copyfail-seccomp.json IMAGE
기준 프로필이 없는 경우 긴급 전용 경로:
./bin/copyfail-guard.sh seccomp-docker ./copyfail-afalg-seccomp.json
생성된 긴급 프로필은 AF_ALG를 차단하지만 다른 syscall은 허용합니다. Docker의 일반적인 기본 seccomp 강화를 대체하는 것이 아니라 대상 임시 방편으로 취급하세요.
Kubernetes의 경우 kubelet seccomp 루트 아래에 프로필을 배치하세요. 일반적으로:
/var/lib/kubelet/seccomp/profiles/copyfail-seccomp.json
그런 다음 다음과 같이 참조하세요:
securityContext:
seccompProfile:
type: Localhost
localhostProfile: profiles/copyfail-seccomp.json
examples/kubernetes-seccomp-pod.yaml 참조.
이 프로젝트에는 비익스플로잇 AF_ALG 접근성 테스트가 포함되어 있습니다:
python3 tools/afalg-socket-test.py
AF_ALG 소켓을 생성하고 닫는 것만 시도합니다. 암호화 작업을 바인딩하거나, splice를 호출하거나, setuid 바이너리를 건드리거나, 페이지 캐시를 손상시키거나, 권한 상승을 시도하지 않습니다.
결과:
BLOCKED는 정책이 해당 프로세스에 대해 AF_ALG를 거부했음을 의미합니다.PERMITTED는 해당 프로세스에 대해 AF_ALG 소켓 생성이 여전히 허용됨을 의미합니다.UNSUPPORTED는 해당 런타임에서 AF_ALG를 사용할 수 없음을 의미합니다.CopyFail Guard는 Linux 호스트, 컨테이너 런타임, CI 러너 및 Kubernetes 노드에서 실제 호환성 보고가 필요합니다. 안전하게 테스트할 수 있다면, 검증된 doctor, assess --json, verify 또는 AF_ALG 소켓 테스트 출력과 함께 호환성 보고 이슈를 열어주세요.
유용한 보고는 다음 질문에 답하는 데 도움이 됩니다:
algif_aead가 빌트인되어 패치/재부팅만 필요한 경우는 어디인가커뮤니티 검증 가이드 참조.
copyfail-guard assess 안전한 노출 평가, 익스플로잇 시도 없음
copyfail-guard status 호스트 노출 지표 검사
copyfail-guard doctor 종속성 및 런타임 준비 상태 확인
copyfail-guard mitigate algif_aead를 영구적으로 비활성화하고 언로드
copyfail-guard verify 호스트 완화 활성화 확인
copyfail-guard rollback CopyFail Guard의 modprobe 완화 제거
copyfail-guard seccomp-docker [FILE] 긴급 AF_ALG 거부 프로필 생성
copyfail-guard seccomp-patch BASE OUT 기존 seccomp 프로필 안전하게 패치
copyfail-guard k8s-example Kubernetes seccomp 예제 출력
플래그는 명령어 앞이나 뒤에 배치할 수 있습니다:
--dry-run 파일 쓰기 또는 모듈 언로드 없이 계획된 변경 사항 표시
--yes 비대화형 확인
--no-logo ASCII 배너 비활성화
--json 지원되는 명령어(assess, doctor)에 대해 JSON 출력
일반적인 구성에서 algif_aead를 비활성화해도 다음에는 영향을 주지 않을 것으로 예상됩니다:
AF_ALG 엔진을 명시적으로 사용하도록 구성된 애플리케이션이나 직접 AF_ALG 소켓을 생성하는 애플리케이션에는 영향을 줄 수 있습니다. 먼저 확인하세요:
sudo lsof | grep AF_ALG || true
ss -xa | grep -i alg || true
algif_aead에 대한 호스트 완화, 신뢰할 수 없는 워크로드에 대한 seccomp 강화 및 롤백.CopyFail Guard는 다음을 하지 않습니다:
호스트 모듈 완화는 모듈형 algif_aead에 대해 작동합니다. algif_aead가 커널에 빌트인된 경우 modprobe.d와 rmmod로 비활성화할 수 없습니다; 패치/재부팅이 필수이며 패치 중에는 신뢰할 수 없는 워크로드에 대해 seccomp를 사용해야 합니다.
Seccomp는 프로필로 실행된 워크로드만 보호합니다. 기존 실행 중인 컨테이너 또는 파드는 강화된 프로필로 다시 시작해야 합니다.
sudo ./bin/copyfail-guard.sh rollback --yes
롤백은 이 도구에서 관리하는 파일만 제거합니다. 모듈을 다시 로드하지 않습니다. 명시적으로 필요하고 위험을 수락했거나 커널을 패치한 경우에만 재부팅하거나 수동으로 modprobe algif_aead를 실행하세요.
아니요. 패치와 재부팅이 최종 수정입니다.
아니요. 프로젝트는 의도적으로 익스플로잇 동작을 피합니다. tools/afalg-socket-test.py는 AF_ALG 소켓 생성이 접근 가능한지만 확인합니다.
심층 방어입니다. 컨테이너 및 CI 워크로드는 신뢰할 수 없는 코드가 공유 커널에서 실행되는 일반적인 장소입니다. Seccomp는 해당 워크로드에 대해 이 공격 클래스의 첫 번째 단계를 도달 불가능하게 만듭니다.
기본 런타임 프로필에는 많은 강화 결정이 포함되어 있기 때문입니다. 이를 최소 긴급 프로필로 대체하면 실수로 보호 조치가 제거될 수 있습니다. seccomp-patch는 기준을 유지하고 AF_ALG 거부를 추가합니다.
예. doctor와 assess --json으로 시작하고, 작은 Linux 샘플에서 완화를 단계별로 적용한 다음 호스트 완화와 seccomp 프로필 변경을 별도로 롤아웃하세요. 플릿 롤아웃 가이드 참조.
crypto: algif_aead - Revert to operating out-of-placeJulio César Suástegui Calderón이 만들었습니다.
보안 엔지니어링, Linux 시스템 및 실용적인 방어 자동화.
MIT
| 판정 계열 | 의미 | 조치 |
|---|
EXPOSED_* | algif_aead/AF_ALG가 접근 가능하거나 로드 가능한 것으로 보임 | 지금 완화, 이후 패치 후 재부팅 |
PARTIALLY_MITIGATED_* | 차단이 존재하지만 로드된 모듈이나 재부팅 상태가 여전히 중요함 | 안전하게 재부팅 또는 언로드 후 확인 |
INTERIM_MITIGATED_* | 로컬 완화가 활성화됨 | 유지하지만 여전히 패치 후 재부팅 |
LOW_OBVIOUS_EXPOSURE_* | 로컬 검사에서 명백한 algif_aead 노출을 찾지 못함 | 그래도 공급업체 패치 상태 확인 |
| 영역 | 명령 | 목적 |
|---|
| 안전한 평가 | assess | 비익스플로잇 노출 판정, 다음 조치 및 자동화 친화적 종료 코드 제공 |
| 종속성 확인 | doctor | 필요/선택 도구 확인 및 런타임 제한 설명 |
| 호스트 검사 | status | OS/커널, 모듈 사용 가능 여부, 로드 상태, 빌트인 경고, modprobe 차단 및 명백한 AF_ALG 소비자 표시 |
| 호스트 완화 | mitigate | /etc/modprobe.d/99-copyfail-guard.conf 작성 및 algif_aead 언로드 시도 |
| 확인 | verify | 모듈이 로드되었거나 빌트인이거나 차단되지 않은 경우 명확하게 실패 |
| 롤백 | rollback | CopyFail Guard가 관리하는 modprobe 파일만 제거 |
| 컨테이너 | seccomp-patch | 기존 seccomp 프로필에 socket(AF_ALG, ...)를 거부하도록 패치, 정상 소켓 사용은 유지 |
| 긴급 프로필 | seccomp-docker | 긴급 사용을 위한 대상 AF_ALG 거부 프로필 생성 |
| Kubernetes | k8s-example | Localhost seccomp 파드 예제 출력 |
| 코드 | 의미 |
|---|
0 | 로컬 검사에서 명백한 노출 낮음 |
1 | 임시 완화 활성화, 패치/재부팅 여전히 필요 |
10 | 노출됨/완화 가능 |
11 | 부분 완화됨; 재부팅 또는 언로드 필요 |
12 | 빌트인 모듈 경로; 패치/재부팅 필요 |
20 | 알 수 없는 평가 상태 |