
정적 토큰 및 자격 증명 스캐너
정적 토큰 및 자격 증명 스캐너
STACS는 YARA 기반의 정적 자격 증명 스캐너로, 바이너리 파일 형식, 중첩 아카이브 분석, 구성 가능한 규칙 집합 및 무시 목록, SARIF 보고를 지원합니다.
현재 STACS는 다음 형식의 재귀적 압축 해제를 지원합니다:
STACS는 감지된 파일 형식에서 작동하므로, 이러한 형식을 기반으로 하는 독점 파일 형식 및 기타 파일 형식이 자동으로 지원됩니다. 여기에는 Docker 이미지, Android APK, Java JAR 파일, RPM, Debian 패키지 (.deb), macOS 패키지 (.pkg) 등이 포함됩니다!
STACS는 바이너리 아티팩트를 릴리스하는 모든 팀이 사용하도록 설계되었습니다. STACS는 개발자가 릴리스에 정적 자격 증명 및 키 자료가 실수로 포함되는 것을 자동으로 확인할 수 있는 기능을 제공합니다.
하지만 이것이 STACS가 SaaS 애플리케이션, 엔터프라이즈 소프트웨어 또는 소스 코드에도 도움이 될 수 없다는 의미는 아닙니다!
예를 들어, STACS는 공개 및 비공개 컨테이너 레지스트리에 업로드된 Docker 이미지에서 정적 자격 증명을 찾는 데 사용할 수 있습니다. 또한 실행 파일, 모바일 장치용 패키지, Java 애플리케이션 서버에서 사용되는 "엔터프라이즈 아카이브"에 실수로 컴파일된 자격 증명을 찾는 데에도 사용할 수 있습니다.
STACS는 실행 시 제공되는 "규칙 팩"을 사용하여 정적 자격 증명을 감지합니다. 이 규칙 팩은 STACS에 제공된 파일에 대해 실행할 YARA 규칙 집합을 정의합니다. 규칙과 일치하는 항목이 발견되면 "결과"가 생성됩니다. 이러한 결과는 파일 내 잠재적인 자격 증명을 나타내며, 개발자가 수정하거나 "무시"할 수 있도록 보고됩니다.
결과가 오탐(false positive), 즉 실제 자격 증명이 아닌 것과 일치하는 경우, 개발자는 "무시 목록"을 생성하여 향후 보고서에 이러한 일치 항목이 나타나지 않도록 할 수 있습니다.
STACS의 진정한 강점은 중첩 아카이브의 자동 감지 및 압축 해제, 그리고 구성 가능한 무시 목록과 규칙 팩에서 나옵니다.
유연하고 협업적인 사용을 위해 STACS는 구성 가능한 무시 목록을 지원합니다. 이를 통해 무시 목록이 다른 무시 목록을 포함할 수 있어 조직 지침에 따라 "무시 트리"를 구성할 수 있습니다. 이러한 무시 목록은 동일한 프레임워크나 제품을 많이 사용하는 조직에서 특히 유용합니다. 한 팀이 이미 결과를 오탐으로 표시했다면, 다른 팀은 동일한 결과를 분류할 필요가 없어집니다.
무시 목록과 동일한 방식으로 규칙 팩도 구성 가능합니다. 이를 통해 조직은 모든 팀이 사용할 기본 규칙 집합을 정의하면서도 각 팀이 자체 제품에 특화된 규칙 집합을 유지할 수 있습니다.
STACS를 사용하는 가장 쉬운 방법은 Docker Hub에 게시된 Docker 이미지를 사용하는 것입니다. 그러나 STACS는 Python의 PyPI에서 직접 설치하거나 이 저장소를 클론하여 설치할 수도 있습니다. 시작하려면 아래 해당 섹션을 참조하세요!
머지않아 빌드 및 릴리스 파이프라인에 직접 통합되어 릴리스 전에 정적 자격 증명을 감지할 수 있는 클라우드 기반 서비스가 제공될 예정입니다.
게시된 이미지를 사용하면 STACS로 아티팩트를 즉시 스캔할 수 있습니다! STACS Docker 이미지는 스캔할 파일을 스캔 컨테이너에 직접 마운트하기 위한 여러 볼륨 마운트를 제공합니다.
예를 들어, 현재 폴더의 모든 항목을 스캔하려면 다음 명령을 실행할 수 있습니다 (Docker가 설치되어 있어야 함).
docker run \
--rm \
-v "$(pwd):/mnt/stacs/input:ro" \
stacscan/stacs:latest
"예쁜" 읽기 가능한 출력을 받으려면 다음 명령을 사용해야 합니다:
docker run \
--rm \
-e STACS_OUTPUT_PRETTY=1 \
-v "$(pwd):/mnt/stacs/input:ro" \
stacscan/stacs:latest
기본적으로 STACS는 모든 결과를 SARIF 형식으로 STDOUT에 직접 출력하며, 모든 로그 메시지는 STDERR로 전송됩니다. 더 고급 사용 사례를 위해 여러 다른 볼륨 마운트가 제공됩니다. 이를 통해 사용자는 사용할 규칙 팩, 무시 목록 및 캐시 디렉터리를 제어할 수 있습니다.
STACS는 Python의 PyPI에서 직접 설치할 수도 있습니다. 그러면 stacs 명령이 제공되며, 개발자는 이를 사용하여 로컬 개발 환경에서 프로젝트를 직접 스캔할 수 있습니다.
STACS는 PyPI에서 다음 명령으로 직접 설치할 수 있습니다:
pip install stacs
참고: PyPI 릴리스에는 규칙이 포함되어 있지 않습니다. STACS가 작동하려면 커뮤니티 규칙 저장소에서 규칙을 추가로 클론해야 합니다!
아직 없습니다. 그러나 기존 빌드 시스템에 쉽게 통합할 수 있고 추가 사전 구축 규칙 팩 및 무시 목록을 포함하는 호스팅 버전의 STACS를 계획 중입니다.
불행히도 오탐은 정적 자격 증명 감지 과정에서 피할 수 없는 부작용입니다. 규칙이 너무 세분화되면 규칙 유지 관리가 부담스러워지고 STACS가 자격 증명을 놓칠 수 있습니다. 규칙이 너무 광범위하면 STACS가 너무 많은 오탐을 생성할 수 있습니다!
이를 돕기 위해 STACS는 최종 보고서에 포함되는 오탐 수를 줄이는 다양한 도구를 제공합니다.
주로 STACS는 사용자가 구성 가능한 무시 목록을 정의하여 결과 집합을 "무시"할 수 있는 메커니즘을 제공합니다. 이러한 규칙은 패턴을 기반으로 모든 파일을 무시하는 것처럼 광범위할 수도 있고, 특정 파일의 특정 줄에 있는 특정 결과만큼 세밀할 수도 있습니다.
이 정보는 보고서에 자동으로 전파되므로 "무시된" 결과는 SARIF 출력에서 "억제됨"으로 표시되며, 출력에는 무시 이유도 포함되어 추적이 가능합니다.
"예쁜" 출력 (--pretty / STACS_OUTPUT_PRETTY)을 사용하는 경우 결과가 사람이 읽을 수 있는 형식으로 콘솔에 출력됩니다.

SARIF를 사용하는 경우 Microsoft의 훌륭한 웹 기반 뷰어와 같이 이 데이터를 더 쉽게 읽을 수 있게 해주는 다양한 뷰어가 있습니다. Docker 컨테이너 이미지의 결과 예시는 아래와 같습니다:

안타깝게도 이는 Mac용 Docker Desktop의 제한 때문인 것으로 보입니다. 바인드 마운트의 I/O 정말, 정말 느립니다.