
서버 및 Docker 이미지에서 CVE-2024-3094(xz 백도어)를 확인하기 위한 원라이너 스크립트입니다. 컨테이너 환경을 위한 Trivy 기반 스캐닝과 취약한 라이브러리 참조를 위한 grep 기반 코드 저장소 검사를 포함합니다.
이 저장소는 서버가 CVE-2024-3094에 취약한지 빠르게 확인할 수 있도록 설계된 간단하면서도 강력한 한 줄 스크립트를 제공합니다. CVE-2024-3094는 특정 버전의 xz 유틸리티에서 발견된 중요한 보안 취약점입니다. 또한, 잠재적인 간접 취약점을 나타낼 수 있는 xz 라이브러리에 대한 참조를 코드 저장소에서 스캔하는 편리한 방법도 제공합니다.
서버가 CVE-2024-3094에 취약한지 확인하려면 터미널에서 다음 명령을 실행하세요.
(type dpkg &>/dev/null && dpkg -l xz 2>/dev/null | awk '/^ii/{print $3}' | grep -qE '^(5.6.0|5.6.1)$' && echo "Vulnerable: CVE-2024-3094" || echo "Not vulnerable or xz not installed") || (type rpm &>/dev/null && rpm -q --qf "%{VERSION}\n" xz 2>/dev/null | grep -qE '^(5.6.0|5.6.1)$' && echo "Vulnerable: CVE-2024-3094" || echo "Not vulnerable or xz not installed")
위 명령은 Linux 배포판에서 패키지를 확인합니다.
또는 xz 명령 자체를 실행하는 다음 옵션을 시도해 볼 수 있습니다. 일반적으로 권장되지는 않습니다.
command -v xz &>/dev/null && { xz_version=$(xz --version | head -n 1 | awk '{print $4}'); [[ $xz_version == "5.6.0" || $xz_version == "5.6.1" ]] && echo "Vulnerable: CVE-2024-3094" || echo "Not vulnerable: CVE-2024-3094"; } || echo "xz not installed"
이 스크립트는 다음 작업을 수행합니다.
xz 유틸리티가 설치되어 있는지 확인합니다.xz 버전을 확인합니다.Docker를 사용하고 컨테이너 이미지 내 취약점이 우려되는 팀을 위해 Aqua Security의 오픈 소스 취약점 스캐너인 Trivy를 사용하는 정교한 예제를 제공합니다. 이 방법은 Docker 이미지의 취약점(CVE-2024-3094 포함)을 스캔하고 이미지의 보안 상태에 대한 명확한 출력을 제공합니다.
다음 명령은 Trivy를 사용하여 Docker 이미지(debian:experimental-20240311)를 스캔하고 liblzma5와 관련된 CVE-2024-3094 결과를 필터링합니다.
docker run --rm -v $('pwd'):/project -w /project aquasec/trivy:latest image --format cyclonedx --scanners vuln --output /project/result.json debian:experimental-20240311@sha256:16cc2b09c44d991d36f63153f13a7c98fb7da6bd2ba9d7cc0f48baacb7484970 && jq -r '.components[] | .properties[] | select(.name == "aquasecurity:trivy:PkgID" and (.value | tostring | test("liblzma5@(5\\.6\\.0|5\\.6\\.1)"))) | .value' result.json | grep -qE '5\.6\.0|5\.6\.1' && echo "Vulnerable: CVE-2024-3094" || echo "Not vulnerable or liblzma5 not found"
작동 방식:
Docker 실행 명령: Trivy 컨테이너를 시작하고 현재 디렉터리를 컨테이너에 볼륨으로 마운트합니다. 이 설정을 통해 Trivy는 스캔 결과를 호스트의 현재 디렉터리에 있는 파일(result.json)에 직접 출력할 수 있습니다.
Trivy 스캔: 지정된 Docker 이미지의 취약점을 스캔하고 CycloneDX 형식(소프트웨어 자재 명세서의 표준 형식)으로 결과를 출력합니다.
jq를 사용한 처리: 스캔 결과를 필터링하여 liblzma5 패키지를 식별하고 버전 "5.6.0" 또는 "5.6.1"을 확인합니다.
취약점 확인: grep을 사용하여 취약한 버전의 liblzma5를 검색합니다. 발견되면 "Vulnerable: CVE-2024-3094"를 출력하고, 그렇지 않으면 "Not vulnerable or liblzma5 not found"를 출력합니다.
이 방법은 자동화된 파이프라인에 매우 효과적이며 다양한 Docker 이미지의 여러 취약점을 확인하도록 조정할 수 있어 배포의 보안을 보장합니다.
제공된 명령을 사용하여 자신의 Docker 이미지를 스캔하려면 다음 단계에 따라 필요에 맞게 명령을 사용자 지정하세요.
Docker 이미지 교체: debian:experimental-20240311@sha256:16cc2b09c44d991d36f63153f13a7c98fb7da6bd2ba9d7cc0f48baacb7484970를 스캔하려는 이미지로 변경합니다. 이미지는 이름과 태그(예: yourimage:yourtag) 또는 다이제스트로 지정할 수 있습니다.
취약점 확인 조정: CVE-2024-3094 이외의 취약점을 스캔하는 경우, 관심 있는 취약점과 관련된 특정 패키지 및 버전을 대상으로 jq 및 grep 표현식을 수정합니다.
예를 들어, yourimage:yourtag라는 이미지를 스캔하려면:
docker run --rm -v $('pwd'):/project -w /project aquasec/trivy:latest image --format cyclonedx --scanners vuln --output /project/result.json yourimage:yourtag && jq -r '.components[] | .properties[] | select(.name == "aquasecurity:trivy:PkgID" and (.value | tostring | test("liblzma5@(5\\.6\\.0|5\\.6\\.1)"))) | .value' result.json | grep -qE '5\.6\.0|5\.6\.1' && echo "Vulnerable: CVE-2024-3094" || echo "Not vulnerable or liblzma5 not found"
사용자 지정 팁:
다른 취약점의 경우: jq 명령에서 "liblzma5@(5\\.6\\.0|5\\.6\\.1)"를 관심 있는 패키지 및 버전으로 바꾸세요. 예를 들어, openssl 버전 "1.1.1"을 확인하려면 openssl@(1\\.1\\.1)을 사용할 수 있습니다.
다른 속성의 경우: 취약점이나 패키지에 따라 .name == "aquasecurity:trivy:PkgID"를 조정하여 CycloneDX 출력의 다른 속성을 대상으로 해야 할 수도 있습니다.
정기 업데이트: Trivy 인스턴스가 최신 취약점 정의를 갖도록 정기적으로 업데이트하세요. 일반적으로 스캔을 실행하기 전에 최신 aquasec/trivy 이미지를 가져와서 이 작업을 수행할 수 있습니다.
출력 이해: Trivy 및 jq 처리의 출력 형식을 숙지하여 결과를 정확하게 해석하고 Docker 이미지에 미치는 영향을 이해하세요.
xz 참조 스캔xz 라이브러리와 상호 작용하거나 이에 의존하는 코드를 유지 관리하는 경우 취약한 라이브러리 버전에 대한 명시적 참조를 식별하는 것이 중요합니다. 다음 명령을 사용하여 저장소를 스캔하세요.
tukaani 프로젝트는 xz 유틸리티의 본거지입니다. 코드 내 언급을 찾으려면:
grep -rnH "tukaani" .
Maven을 사용하는 Java 프로젝트의 경우 pom.xml에 xz를 종속성으로 지정할 수 있습니다. 이러한 참조를 찾으려면:
grep -rnH "org.tukaani:xz:" .
이 명령은 현재 디렉터리(및 하위 디렉터리)에서 지정된 패턴을 재귀적으로 검색하여 파일 이름, 줄 번호 및 일치하는 줄을 보고합니다.
참고: 서버에서 이러한 스크립트를 실행하거나 저장소를 스캔하는 데 필요한 권한이 있는지 확인하세요. 프로덕션 시스템에서 사용하기 전에 항상 안전한 환경에서 스크립트를 확인하고 테스트하세요.
풀 리퀘스트를 제출하거나 이슈를 열어 이 저장소에 기여하거나 개선 사항을 제안해 주세요. 여러분의 피드백과 기여는 큰 도움이 됩니다!