
침투 테스터들이 맛있는 사탕을 찾는 데 도움을 주는 도구, by @l0ss and @Sh3r4 ( Twitter: @/mikeloss and @/sh3r4_hax )

Snaffler는 침투 테스터와 레드 팀을 위한 도구로, 지루하고 거대한 건초 더미(대규모 Windows/AD 환경)에서 맛있는 사탕 바늘(주로 크리덴셜이지만 유연함)을 찾는 데 도움을 줍니다.
다른 용도로도 유용할 수 있지만, 명시적으로 "감사" 도구가 아닙니다.
에, 좋아요. 하지만 결과에 대해 책임지지 않습니다. 여러분을 위해 이 모든 걸 썼지만 괜찮아요. 화난 건 아니고, 그냥 실망했을 뿐이에요.
snaffler.exe -s -o snaffler.log
대체로 말하자면, Active Directory에서 Windows 컴퓨터 목록을 가져온 다음, 그 모든 컴퓨터에 탐촉 촉수를 뻗어 파일 공유가 있는지, 그리고 읽을 수 있는지 확인합니다.
그런 다음, 더 많은 탐촉 촉수로 해당 공유의 모든 파일을 열거하고 LEARNED ARTIFACTUAL INTELLIGENCE for MACHINES를 사용하여 당신 같은 더러운 작은 해커가 원할 만한 파일을 찾아냅니다.
사실 ML 같은 건 하지 않습니다. 제대로 하려면 훈련 데이터가 필요하고, 그걸 만드는 데 엄청난 시간이 필요하기 때문입니다. 대신, 모든 좋은 "ML" 프로젝트처럼 그냥 수많은 if 문과 정규식을 사용합니다.
이렇게요!
"도메인 가입 머신에서 도메인 사용자 컨텍스트로 EXE를 그냥 실행만 하면" (사람들이 Grouper2에서 하라는 대로 했고, 곧바로 모든 상세/디버그 스위치를 켜서 수백 메가바이트의 스택 트레이스를 내뱉게 만들었습니다) 기본적으로 아무것도 하지 않을 것입니다. README 파일을 읽지 않는 사람들을 위한 우리의 장난입니다.TM 왜냐하면 우리는 괴물이니까요.
하지만... 올바른 주문을 추가하면 앞서 언급한 L.A.I.M.이 활성화되고 사탕이 있을 법한 파일 경로가 드러날 것입니다.
핵심 주문은 다음과 같습니다:
-o 결과를 파일로 출력합니다. -s를 사용하지 않는 경우 이것을 원할 것입니다. 예: -o C:\users\thing\snaffler.log
-s 결과를 찾는 대로 표준 출력으로 출력합니다. -o를 사용하지 않는 경우 이것을 원할 것입니다.
-v 상세 수준을 제어합니다. 옵션은 Trace(가장 자세함), Degub(덜 자세함, 덜 구복), Info(기본값), Data(결과만)입니다. 예: -v debug
-m Snaffler가 마음에 드는 파일을 자동으로 복사(또는 Snaffle... 원한다면)할 출력 디렉터리를 활성화하고 지정합니다.
-l Snaffle할 파일의 최대 크기(바이트)입니다. 기본값은 10000000이며, 약 10MB입니다.
-i 컴퓨터 및 공유 검색을 비활성화하고, 파일 검색을 수행할 디렉터리 경로가 필요합니다.
-i 컴퓨터 검색을 비활성화하고, 공유 및 파일 검색을 수행할 호스트의 쉼표로 구분된 목록 또는 입력 파일이 필요합니다. 파일을 제공하는 경우 입력은 경로여야 합니다(예: C:\targets.txt 또는 .\targets.txt).
-y 출력을 TSV 형식으로 지정합니다.
-b 덜 흥미로운 것을 찾는 LAIM 규칙을 건너뜁니다. 0에서 3 사이의 숫자로 조정합니다.
-f DFS(분산 파일 시스템)를 통해 파일 공유를 찾도록 Snaffler를 제한합니다. 이는 많은 조직에서 가장 큰 파일 공유를 포함하면서도 기본보다 훨씬 은밀해야 합니다.
-a 파일 열거를 건너뛰고, 대상 호스트의 목록 가능한 공유 목록만 제공합니다.
-u Snaffler가 AD에서 계정 이름 목록을 가져와 가장 흥미로워 보이는 것을 선택한 다음 검색 규칙에 사용하도록 합니다.
-d 검색할 컴퓨터를 검색할 공유를 검색할 파일을 검색할 도메인입니다. 쉽습니다.
-c 도메인 컴퓨터 목록을 쿼리할 도메인 컨트롤러입니다.
-r 내부에서 흥미로운 문자열을 검색할 최대 파일 크기(바이트)입니다. 기본값은 500k입니다.
-j 파일에서 발견된 문자열 주변에 표시할 컨텍스트의 바이트 수입니다(예: -j 200).
-z 위의 모든 사항과 훨씬 더 많은 것을 정의하는 구성 파일의 경로입니다! 자세한 내용은 아래를 참조하세요. -z generate를 사용하면 .\default.toml이라는 샘플 구성 파일이 생성됩니다.
-t 출력하려는 로그 유형입니다. 현재 지원되는 옵션은 plain과 JSON입니다. 기본값은 plain입니다.
-x 사용할 최대 스레드 수입니다. 4 미만으로 설정하면 문제가 발생합니다.
-p .toml 형식 규칙으로 가득한 디렉터리 경로입니다. Snaffler는 기본 규칙 집합 대신 이 규칙을 모두 로드합니다.
다음 주석이 달린 예제가 도움이 되길 바랍니다:
이 로그 항목은 대략 왼쪽에서 오른쪽으로 다음과 같이 읽습니다:
... 그리고 나머지 줄(회색)은 일치한 위치의 파일에서 가져온 작은 컨텍스트 조각입니다.
이 경우 ASP.NET validationKey와 decryptionKey 값을 찾았으며, 이를 통해 일부 역직렬화 해킹으로 웹 앱에 RCE를 수행할 수 있을 수 있습니다. 만세!
참고: 이 스크린샷이 만들어진 후 Sh3r4가 각 줄 앞에 현재 사용자와 호스트 이름을 앞에 추가하는 기능을 추가했습니다. 하지만 스크린샷을 다시 찍고 싶지는 않습니다.
각 L.A.I.M. 마법 파일 찾기 방법은 다음과 같은 작업을 수행합니다:
정확한 파일 확장자 일치로 검색 – 관련 단어 목록과 일치하는 확장자를 가진 파일이 반환됩니다. 이는 거의 항상 사탕을 포함하는 파일 확장자를 위한 것입니다(예: .kdbx, .vmdk, .ppk 등).
(대소문자 구분 없이) 정확한 파일 이름 일치로 검색 – 거의 항상 사탕을 포함하는 파일 이름을 위한 것입니다(예: id_rsa, shadow, NTDS.DIT 등).
정확한 파일 확장자 일치(또 다른 단어 목록)로 검색한 후 일치하는 파일의 내용을 특정 키워드(또 다른 단어 목록)로 'grep'합니다. 이는 때때로 사탕을 포함하지만 걸러내야 할 잡것이 많을 것으로 예상되는 파일 확장자를 위한 것입니다. 예를 들어 web.config는 데이터베이스 자격 증명을 포함할 수 있지만, 지루한 IIS 구성과 비밀번호 없는 내용도 자주 포함합니다. 예를 들어 .config로 끝나는 모든 파일을 찾은 다음 connectionString, password, PRIVATE KEY 등을 포함한 문자열을 grep합니다.
부분 파일 이름 일치로 검색(또 더 많은 단어 목록). 이는 주로 Jeff's Password File 2019 (Copy).docx 또는 Privileged Access Management System Design - As-Built.docx 등을 찾기 위한 것으로, 파일 이름에 passw, handover, secret, secure, as-built 등의 하위 문자열이 포함된 파일을 일치시킵니다.
특정 확장자를 가진 모든 파일이나 경로에 특정 문자열이 포함된 파일을 건너뛰기 위한 건너뛰기 목록도 있습니다.
Snaffler는 "분류기" 시스템을 사용합니다. 각 분류기는 공유, 폴더, 파일 또는 파일 내용을 검사하고 일부 항목을 다음 분류기로 전달하며 다른 항목은 폐기합니다. 각 분류기는 규칙 집합을 사용하여 분류한 항목을 어떻게 처리할지 결정합니다.
이러한 규칙은 매우 간단할 수 있습니다. 예를 들어 "파일 확장자가 .kdbx이면 알려줘" 또는 "경로에 windows\sxs가 포함되어 있으면 그 경로 내의 하위 디렉터리와 파일 보기를 중지" 등입니다.
규칙은 정규식을 사용할 수도 있어 비교적 정교한 패턴 일치가 가능합니다. 이는 파일 내용을 검사할 때 특히 유용하지만, 성능에 큰 영향을 미치는 정규식은 주의해야 합니다. 대규모 환경에서는 이러한 규칙이 말 그대로 수백만 번 확인될 수 있으므로 사소한 성능 문제가 크게 증폭될 수 있습니다.
Snaffler의 진정한 힘은 여러 규칙을 체인으로 연결하고 분기 체인을 만들 수 있는 능력에 있습니다. 이를 통해 "저렴한" 규칙(예: 파일 이름 및 확장자 확인)을 사용하여 "비싼" 규칙(예: 파일 내용 전체에서 정규식 실행, 인증서 구문 분석하여 개인 키 포함 여부 확인 등)을 언제 사용할지 결정할 수 있습니다. 이것이 Snaffler가 필요할 때는 파일을 상당히 깊이 검사하면서도 C#과 같은 고급 언어로 작성된 도구로서 놀라울 정도로 빠른 이유입니다.
예를 들어, 매우 간단한 규칙 집합은 다음과 같을 수 있습니다:
.dmp 파일 확장자를 가진 모든 파일을 찾아 Snaffle하는 규칙.ps1 파일 확장자를 찾고, 일치하는 모든 파일을 두 번째 및 세 번째 규칙으로 전송합니다..bat 또는 .cmd 파일에서 볼 수 있는 cmd.exe 명령의 하드코딩된 자격 증명을 찾기 위해 설계된 정규식을 사용합니다.이 접근 방식은 비교적 관리하기 쉽고 읽기 쉬운 규칙 집합을 유지할 수 있게 해주며, 최종 사용자(당신)가 기본값을 사용자 정의하거나 자신만의 규칙 집합을 개발하는 것을 훨씬 쉽게 만듭니다.
맞아요, 그렇긴 했죠.
Snaffler는 .exe에 내장된 기본 규칙 집합과 함께 제공됩니다. ./Snaffler/SnaffRules/DefaultRules에서 확인할 수 있습니다.
문제없어요, 거대한 괴짜님. 두 가지 옵션이 있습니다.
DefaultRules 디렉터리의 규칙을 편집하거나 교체한 다음 새 Snaffler를 빌드하세요. 해당 디렉터리의 .toml 파일은 리소스로 .exe에 포함되며, 다른 규칙을 지정하지 않을 때 런타임에 로드됩니다.-p .\path\to\rules와 함께 Snaffler를 실행하세요. Snaffler는 해당 디렉터리의 모든 .toml 파일을 구문 분석하고 결과 규칙 집합을 사용합니다. 모든 규칙을 하나의 큰 .toml 파일에 넣어도 작동합니다.다음은 도움이 되기를 바라는 주석이 달린 예제입니다. 이것이 매우 어렵게 보인다면, 그냥 우리 규칙을 사용하면 좋은 것을 찾을 수 있을 것입니다.