
다양한 파일 유형에서 시크릿을 검색하는 도구.
DumpsterDiver는 대량의 데이터를 분석하여 AWS Access Key, Azure Share Key, SSH 키와 같은 하드코딩된 비밀(키 또는 비밀번호)을 검색하는 도구입니다. 또한 기본 조건(예: 최소 10개의 이메일 주소가 포함된 CSV 파일만 보고)을 사용한 간단한 검색 규칙을 생성할 수 있습니다. 이 도구의 주요 아이디어는 잠재적인 비밀 유출을 감지하는 것입니다. 데모 비디오에서 실제 작동을 확인하거나 이 기사에서 모든 기능에 대해 읽을 수 있습니다.
usage: DumpsterDiver.py [-h] -p LOCAL_PATH [-r] [-a] [-s] [-o OUTFILE]
[--min-key MIN_KEY] [--max-key MAX_KEY]
[--entropy ENTROPY] [--min-pass MIN_PASS]
[--max-pass MAX_PASS]
[--pass-complex {1,2,3,4,5,6,7,8,9}]
[--exclude-files EXCLUDE_FILES [EXCLUDE_FILES ...]]
[--bad-expressions BAD_EXPRESSIONS [BAD_EXPRESSIONS ...]]
-p LOCAL_PATH - 분석할 파일이 들어 있는 폴더의 경로.-a, --advance - 이 플래그가 설정되면 모든 파일이 rules.yaml 파일에 지정된 규칙을 사용하여 추가 분석됩니다.-r, --remove - 이 플래그가 설정되면 비밀(또는 -a 플래그가 설정된 경우 흥미로운 항목)이 포함되지 않은 파일이 제거됩니다.-s, --secret - 이 플래그가 설정되면 모든 파일이 하드코딩된 비밀번호를 찾기 위해 추가 분석됩니다.-o OUTFILE - JSON 형식의 출력 파일.DumpsterDiver를 실행하려면 Python 라이브러리를 설치해야 합니다. 다음 명령어를 실행하여 설치할 수 있습니다:
$> pip install -r requirements.txt
Python 2와 3을 별도로 설치한 경우 pip3 또는 pip3.6을 사용해야 합니다.
모든 사람의 요구에 맞는 단일 도구는 없으며 DumpsterDiver도 예외는 아닙니다. 검색을 사용자 정의하는 두 가지 방법이 있습니다:
config.yaml 파일 사용--min-key MIN_KEY - 분석할 최소 키 길이를 지정합니다(기본값 20).--max-key MAX_KEY - 분석할 최대 키 길이를 지정합니다(기본값 80).--entropy ENTROPY - 높은 엔트로피의 경계를 지정합니다(기본값 4.3).또한 단일 단어에서 문자의 엔트로피를 계산할 수 있는 별도 스크립트가 추가되었습니다. 이를 통해 DumpsterDiver를 필요에 맞게 더 잘 사용자 정의할 수 있습니다. 다음 명령어로 확인할 수 있습니다:
$> python3 entropy.py f2441e3810794d37a34dd7f8f6995df4
이 방법은 찾고자 하는 것이 무엇인지 알 때 매우 유용합니다. 몇 가지 예는 다음과 같습니다:
$> python3 DumpsterDiver.py -p [PATH_TO_FOLDER] --min-key 40 --max-key 40 --entropy 4.3
$> python3 DumpsterDiver.py -p [PATH_TO_FOLDER] --min-key 66 --max-key 66 --entropy 5.1
$> python3 DumpsterDiver.py -p [PATH_TO_FOLDER] --min-key 76 --max-key 76 --entropy 5.1
aws_access_key_id 또는 aws_secret_access_key의 모든 발생을 찾는 경우:$> python3 DumpsterDiver.py -p ./test/ --grep-words *aws_access_key_id* *aws_secret_access_key* -a
grep 단어 앞뒤의 와일드카드는 의도적으로 사용됩니다. 이렇게 하면
"aws_access_key_id"또는aws_access_key_id=와 같은 표현식도 보고됩니다.
비밀번호를 찾기 위해 엔트로피를 사용하는 것은 많은 오탐지를 생성하므로 효과적이지 않습니다. 이것이 DumpsterDiver가 하드코딩된 비밀번호를 찾기 위해 다른 접근 방식을 사용하는 이유입니다 - passwordmeter를 사용하여 비밀번호 복잡성을 확인합니다. 이 검색을 사용자 정의하려면 다음 명령어를 사용할 수 있습니다:
--min-pass MIN_PASS - 분석할 최소 비밀번호 길이를 지정합니다(기본값 8). 구문에 -s 플래그를 추가해야 합니다.--max-pass MAX_PASS - 분석할 최대 비밀번호 길이를 지정합니다(기본값 12). 구문에 -s 플래그를 추가해야 합니다.--pass-complex {1,2,3,4,5,6,7,8,9} - 1(간단한 비밀번호)에서 9(매우 복잡한 비밀번호) 사이의 비밀번호 복잡성 경계를 지정합니다(기본값 8). 구문에 -s 플래그를 추가해야 합니다.예를 들어 복잡한 비밀번호(대문자, 소문자, 특수 문자, 숫자를 포함하고 길이가 10~15자)를 찾으려면 다음 명령어를 사용할 수 있습니다:
$> python3 DumpsterDiver.py -p [PATH_TO_FOLDER] --min-pass 10 --max-pass 15 --pass-complex 8
특정 파일을 스캔하지 않도록 제외할 수 있습니다. 이를 위해 다음 매개변수를 사용할 수 있습니다:
--exclude-files - 분석하지 않을 파일 이름 또는 확장자를 지정합니다. 파일 확장자는 . 문자를 포함해야 합니다(예: .pdf). 여러 파일 이름과 확장자는 공백으로 구분합니다.
--bad-expressions - 나쁜 표현식을 지정합니다. DumpsterDiver가 파일에서 이러한 표현식을 찾으면 해당 파일은 분석되지 않습니다. 여러 나쁜 표현식은 공백으로 구분합니다.
여러 파일 이름, 나쁜 표현식 또는 grep 단어를 별도 파일로 지정하려면 다음 bash 트릭을 사용할 수 있습니다:
$> python3 DumpsterDiver.py -p ./test/ --exclude-files `while read -r line; do echo $line; done < blacklisted_files.txt`
여러 명령줄 매개변수를 사용하는 대신 config.yaml 파일에서 위에서 언급한 모든 매개변수 값을 한 번에 지정할 수 있습니다.
DumpsterDiver는 고급 검색도 지원합니다. 이 도구는 와일드카드를 사용한 단순한 grep 외에도 조건을 생성할 수 있습니다. 예를 들어, 회사 이메일 유출을 검색한다고 가정해 보겠습니다. 또한 최소 100개의 이메일 주소가 포함된 대규모 유출에만 관심이 있습니다. 이를 위해 rules.yaml 파일을 다음과 같이 편집해야 합니다:
filetype: [".*"]
filetype_weight: 0
grep_words: ["*@example.com"]
grep_words_weight: 10
grep_word_occurrence: 100
다른 시나리오를 가정해 보겠습니다. .db 또는 .sql 파일에서 "pass", "password", "haslo", "hasło"(폴란드 회사 저장소를 분석하는 경우)라는 용어를 찾고 있습니다. 그러면 rules.yaml 파일을 다음과 같이 수정하여 이를 달성할 수 있습니다:
filetype: [".db", ".sql"]
filetype_weight: 5
grep_words: ["*pass*", "*haslo*", "*hasło*"]
grep_words_weight: 5
grep_word_occurrence: 1
규칙은 총 가중치(filetype_weight + grep_words_weight)가 >=10인 경우에만 트리거됩니다.
DumpsterDiver용 Docker 이미지를 사용할 수 있습니다. 다음 명령어로 실행합니다:
$> docker run -v /path/to/my/files:/files --rm rzepsky/dumpsterdiver -p /files
구성 파일(config.yaml 또는 rules.yaml) 중 하나를 재정의하려면:
$> docker run -v /path/to/my/config/config.yaml:/config.yaml /path/to/my/config/rules.yaml:/rules.yaml -v /path/to/my/files:/files --rm rzepsky/dumpsterdiver -p /files
더 좋은 아이디어가 있으신가요? 이 프로젝트에 도움을 주고 싶으신가요? 트위터 @Rzepsky로 연락해 주세요. 여기에 기여자들이 나타나면 매우 기쁠 것입니다!
이 프로젝트 개발에 도움을 주신 모든 분들께 깊이 감사드립니다:
LICENSE 파일을 참조하십시오.