
중첩된 바이너리 내부의 CVE-2021-44228 탐지
이 저장소는 CVE-2021-44228, CVE-2021-45046 및/또는 CVE-2021-45105에 취약한 log4j 버전을 탐지하기 위한 YARA 규칙 모음을 포함합니다. 영향을 받는 버전에 나타나는 여러 기능을 찾습니다.
이 도구는 Docker 이미지, 시스템 패키지, 파일시스템 이미지, 설치 미디어와 같은 바이너리 파일에서 재귀적으로 작동합니다. 지원되는 모든 파일 형식의 전체 목록은 "어떻게 작동하나요?" 섹션을 참조하세요.
JndiManager 생성자의 시그니처를 찾습니다 (< 2.15.0).JndiManager를 임포트하지 않는 Interpolator 클래스를 찾습니다 (< 2.16.0).ConfigurationStrSubstitutor를 임포트하지 않는 AbstractConfiguration 클래스를 찾습니다 (< 2.17.0).CodeQL 또는 Semgrep을 사용하여 log4j의 안전하지 않은 사용을 탐지할 수 있는 여러 리소스가 있지만, 바이너리 아티팩트 내에서 잠재적으로 취약한 log4j 버전을 탐지할 수 있는 리소스는 아직 제공되지 않았습니다.
이는 내부적으로 개발되지 않았거나 초기 분류를 수행하는 팀이 소스 코드에 즉시 접근할 수 없는 엔터프라이즈 애플리케이션을 운영하는 조직에 어려움을 제기합니다.
이 취약점은 다양한 "예상치 못한" 곳에서 나타날 가능성이 높기 때문에, 이 도구는 컴파일된 아티팩트 내에서 취약한 log4j 버전을 탐지하는 데 도움을 주기 위해 설계되었으며, 이후 수동으로 검토하여 악용 가능성을 판단할 수 있습니다.
난독화된 코드로 인해 위양성(false negative)이 발생할 수 있습니다. 즉, 난독화로 인해 잠재적으로 취약한 위젯을 탐지할 수 없게 됩니다.
이 도구를 실행하려면 이 저장소를 클론하고 다음 단계를 따르세요. Docker와 jq가 설치되어 있다고 가정합니다.
artifacts/ 폴더에 추가합니다../quickstart.sh)또는 다음 명령을 사용하여 실행을 사용자 정의할 수 있습니다:
docker run \
--rm \
--mount type=bind,source=$(pwd)/artifacts,target=/mnt/stacs/input \
--mount type=bind,source=$(pwd)/rules,target=/mnt/stacs/rules \
stacscan/stacs:latest \
--rule-pack "/mnt/stacs/rules/vulnerability.json" \
"/mnt/stacs/input"
CVE-2021-44228만 찾으려면 다음 명령을 사용할 수 있습니다:
docker run \
--rm \
--mount type=bind,source=$(pwd)/artifacts,target=/mnt/stacs/input \
--mount type=bind,source=$(pwd)/rules,target=/mnt/stacs/rules \
stacscan/stacs:latest \
--rule-pack "/mnt/stacs/rules/CVE-2021-44228.json" \
"/mnt/stacs/input"
CVE-2021-45046만 찾으려면 다음 명령을 사용할 수 있습니다:
docker run \
--rm \
--mount type=bind,source=$(pwd)/artifacts,target=/mnt/stacs/input \
--mount type=bind,source=$(pwd)/rules,target=/mnt/stacs/rules \
stacscan/stacs:latest \
--rule-pack "/mnt/stacs/rules/CVE-2021-45046.json" \
"/mnt/stacs/input"
CVE-2021-45105만 찾으려면 다음 명령을 사용할 수 있습니다:
docker run \
--rm \
--mount type=bind,source=$(pwd)/artifacts,target=/mnt/stacs/input \
--mount type=bind,source=$(pwd)/rules,target=/mnt/stacs/rules \
stacscan/stacs:latest \
--rule-pack "/mnt/stacs/rules/CVE-2021-45105.json" \
"/mnt/stacs/input"
이 도구는 Docker 없이도 실행할 수 있습니다. Docker 없이 STACS를 설치하는 방법은 STACS 설치 지침을 참조하세요.
Docker 이미지를 스캔하려면 먼저 해당 이미지를 아티팩트 디렉토리로 내보내야 합니다. 다음 명령으로 수행할 수 있습니다:
IMAGE="alpine:latest"
NAME="alpine_latest"
docker export $(docker create ${IMAGE}) -o artifacts/${NAME}.tar
또는 실행 중인 컨테이너를 다음 명령으로 내보낼 수 있습니다:
# CONTAINER_ID를 올바른 컨테이너 식별자로 바꾸세요.
CONTAINER_ID="c29209118f9a"
NAME="widget_example"
docker export ${CONTAINER_ID} -o artifacts/${NAME}.tar
애플리케이션에서 log4j의 사용을 조사하여 제품이 취약한지 여부를 이해해야 합니다. 소스 코드에 대한 접근 부족 등으로 이것이 불가능한 경우, 공급업체가 이 문제에 대한 권고를 게시했는지 확인해야 합니다.
취약한 버전의 log4j가 포함되어 있다고 해서 해당 제품이 반드시 취약하다는 보장은 없습니다!
권고 사항을 찾을 수 없는 경우, 공급업체에 연락하여 이 취약점이 제품에 미치는 영향에 대해 문의해야 합니다.
또한 log4j 프로젝트가 게시한 완화 조치를 참조하세요. 또는, 가능하다면 영향을 받지 않는 log4j 버전으로 업그레이드하는 것이 좋습니다.
이 도구는 비록 이 목적으로 설계되지는 않았지만, 대량의 바이너리 분해 및 분석을 위해 STACS 엔진을 사용합니다.
STACS는 YARA 기반 정적 자격 증명 스캐너로, 바이너리 파일 형식, 중첩된 아카이브 분석, 구성 가능한 규칙 세트 및 무시 목록, SARIF 보고를 지원합니다.
예를 들어, 이 도구는 export된 Docker 이미지가 포함된 tarball을 분석할 수 있으며, 해당 이미지 내 파일 시스템 어딘가에 이 취약점의 영향을 받는 JAR이 있을 수 있습니다.
또한 중첩된 tar, jar, war, ear, zip, apk, bz2, tgz, xz, rpm, iso 등을 분석할 수 있습니다.
Github 이슈를 열어 문제를 설명하고, 가능한 경우 영향을 받는 바이너리 아티팩트에 링크를 제공해 주세요.
규칙 세트를 조정하는 Pull Request도 매우 환영합니다!
이 규칙 세트의 검증에 대한 로그 파일은 validation/ 디렉토리를 참조하세요.