
SecretScrub은 하드코딩된 모든 비밀 값을 깨끗이 제거합니다. 이 스크립트는 다양한 정적 분석 도구가 생성하는 SARIF 파일 형식의 파일을 처리합니다. 이 도구는 파일 시스템 내의 디렉터리를 스캔하고, SARIF 파일에서 감지된 모든 비밀 값 인스턴스를 디렉터리의 새 사본으로 대체합니다. 비밀 값은 종종 Git 히스토리에 남아 있으므로, 결과 사본에는 .git 디렉터리가 제외됩니다.
SARIF는 업계 표준 형식이지만, 각 도구가 생성하는 SARIF 출력에는 차이가 있습니다. 따라서 현재 지원되는 도구는 다음과 같습니다.
| 도구 | 버전 | 설명 |
|---|---|---|
| Trivy | 0.37.0 | |
| Gitleaks | 8.15.2 | --no-git 옵션을 사용하여 생성된 보고서에서만 작동합니다. 이 옵션은 파일 시스템을 스캔하지만, 기본 Git 저장소가 있더라도 스캔하지 않습니다. |
| ccs | 1d055c542dbdb6e7b96279d4df03ea9b556eb27a | Ccs 출력은 함께 제공되는 ccs2sarif.py 스크립트를 사용하여 SARIF 형식으로 사전 처리해야 합니다. |
| cq | 011697a9e371e37a6ac9f714b3980672bc6108e7 | CQ 출력은 함께 제공되는 cq2sarif.py 스크립트를 사용하여 SARIF 형식으로 사전 처리해야 합니다. CQ 출력은 노이즈가 매우 많을 수 있으므로, 대체 작업을 별도로 수행하거나 CQ 파일이 디렉터리에서 마지막에 오도록 파일 이름을 지정하는 것이 좋습니다. |
| BinDetect | 다른 텍스트 중심 도구들이 일반적으로 놓치는 바이너리 파일을 탐지하는 내장 도구입니다. |
SARIF 출력의 차이로 인해, 향후 버전의 도구가 생성한 출력은 제대로 작동하지 않을 수 있습니다.
종속성은 requirements.txt 파일에 나열되어 있습니다. 간단히 말해 다음 패키지가 필요합니다:
| 패키지 | 버전 |
|---|
$ python secretscrub.py --input <path> --srcdir <path> --outdir <path> [--report <path>]
$ python secretscrub.py --analyse-with <analysis-tool-list> --srcdir <path> --outdir <path> [--report <path>]
참고: 작동하려면 도구가 현재 시스템에 설치되어 있어야 합니다:
이 소스 트리에서 빌드된 Docker 이미지에는 SecretScrub 도구와 Trivy, GitLeaks, ccs 및 cq 도구의 사본이 포함되어 있습니다.
secretscrub:latest 태그로 빌드된 경우, 다음 명령은 보고서와 함께 전체 분석 및 대체 작업을 시작합니다.
sudo docker run -it -v <source-path>:/src:ro -v <output-path>:/out secretscrub:latest --analyse-with trivy,gitleaks,bindetect
이 작업은 컨테이너 내에서 두 개의 볼륨을 매핑합니다. 첫 번째 볼륨(<source-path>)에는 원본의 대체되지 않은 소스 코드가 포함되어야 합니다. 두 번째 볼륨(<output-path>)은 대체된 출력과 보고서를 받게 됩니다.
다음 예제는 소스가 src라는 하위 디렉터리에 저장되고, SecretScrub이 tools라는 하위 디렉터리에 설치되어 있다고 가정합니다.
$ python tools/secretscrub.py --analse-with trivy,gitleaks,bindetect --srcdir src --outdir src-redacted
sudo docker run -it -v <source-path>:/src:ro -v <output-path>:/out secretscrub:latest --analyse-with trivy,gitleaks,bindetect
| asn1 | 2.7.0 |
| filetype | 1.2.0 |
| py7zr | 0.20.5 |
| pyzipper | 0.3.6 |
| regex | 2023.5.5 |
| sarif-tools | 1.0.0 |
| 매개변수 | 설명 |
|---|
| input | 처리할 SARIF 결과의 위치입니다. 지원되는 여러 도구로 생성된 여러 SARIF 파일을 포함할 수 있습니다. |
| srcdir | 처리할 CQ 결과를 생성하기 위해 스캔된 원본 소스 코드의 위치입니다. |
| outdir | 대체된 소스 파일이 저장될 위치입니다. |
| placeholder | 감지된 모든 비밀 값을 대체할 자리 표시자입니다. 다음 치환을 사용할 수 있습니다: - ${tool} 비밀 값을 감지하는 데 사용된 도구의 이름- ${rule} 비밀 값을 감지하는 데 사용된 규칙의 이름- ${regex} 비밀 값을 감지하는 데 사용된 규칙과 연결된 정규 표현식- ${yaml} (알려진 경우) 비밀 값을 감지하는 데 사용된 도구와 규칙의 이름만 포함하는 YAML 흐름 스타일 구조- ${yaml_regex} (알려진 경우) 비밀 값을 감지하는 데 사용된 도구와 규칙의 이름 및 정규 표현식을 포함하는 YAML 흐름 스타일 구조 |
| process-archives | 나타내기 위한 스위치 |
| report | 생성될 제거된 비밀 값의 세부 정보를 포함하는 CSV 보고서의 위치와 이름입니다. |
| report-encryption | 보고서 파일이 생성된 경우 사용할 암호화 방법입니다. 가능한 값: none, zip-aes256. 기본값: zip-aes256 |
| log-level | 도구 출력에 사용되는 로깅 수준입니다. 가능한 값: critical, fatal, error, warning, info, debug. 기본값: info |
| 매개변수 | 설명 |
|---|
| analyse-with | 호출할 도구의 쉼표로 구분된 목록입니다. 다음 중 하나를 포함할 수 있습니다: trivy, gitleaks, ccs. cq, bindetect |
| srcdir | 처리할 CQ 결과를 생성하기 위해 스캔된 원본 소스 코드의 위치입니다. |
| outdir | 대체된 소스 파일이 저장될 위치입니다. |
| placeholder | 감지된 모든 비밀 값을 대체할 자리 표시자입니다. 다음 치환을 사용할 수 있습니다: - ${tool} 비밀 값을 감지하는 데 사용된 도구의 이름- ${rule} 비밀 값을 감지하는 데 사용된 규칙의 이름- ${regex} 비밀 값을 감지하는 데 사용된 규칙과 연결된 정규 표현식- ${yaml} (알려진 경우) 비밀 값을 감지하는 데 사용된 도구와 규칙의 이름만 포함하는 YAML 흐름 스타일 구조- ${yaml_regex} (알려진 경우) 비밀 값을 감지하는 데 사용된 도구와 규칙의 이름 및 정규 표현식을 포함하는 YAML 흐름 스타일 구조 |
| report | 생성될 제거된 비밀 값의 세부 정보를 포함하는 CSV 보고서의 위치와 이름입니다. |
| report-encryption | 보고서 파일이 생성된 경우 사용할 암호화 방법입니다. 가능한 값: none, zip-aes256. 기본값: zip-aes256 |
| log-level | 도구 출력에 사용되는 로깅 수준입니다. 가능한 값: critical, fatal, error, warning, info, debug. 기본값: info |
| 도구 | 설명 |
|---|
| Trivy | trivy 명령이 설치되고 경로에서 접근 가능해야 합니다. |
| GitLeaks | gitleaks 명령이 설치되고 경로에서 접근 가능해야 합니다. |
| ccs | ccs.py 파일은 secretscrub.py 파일이 있는 디렉터리 안의 ccs라는 하위 디렉터리에 위치해야 합니다. |
| cq | cq.py 및 fn.py 파일은 secretscrub.py 파일이 있는 디렉터리 안의 cq라는 하위 디렉터리에 위치해야 합니다. |
| bindetect | 현재 secretscrub에 포함되어 있으므로 추가 설치가 필요 없습니다. |