
WARC 웹 아카이브에서 Gitleaks 규칙을 사용하여 비밀(암호, API 키, 토큰)을 추출합니다. HTTP, S3, 로컬 파일 및 압축 아카이브를 동시 처리로 지원합니다.
Troll-A는 WARC(Web ARChive) 파일에서 비밀번호, API 키, 토큰과 같은 비밀 정보를 추출하기 위한 명령줄 도구입니다. Troll-A는 웹 아카이브에서 비밀 정보를 찾기 위한 사용하기 쉬운, 포괄적인, 빠른 솔루션입니다.
*.megawarc.warc.zst 파일에서 사용)도 지원합니다.c7g.12xlarge에서 일반적인 Common Crawl 웹 아카이브(~34,000 페이지)를 30초 이내에 처리합니다. --filter 옵션을 통해 처리할 WARC 레코드를 좁히면 성능을 더욱 향상시킬 수 있습니다.Troll-A는 미리 빌드된 바이너리, Docker 이미지, 또는 소스 형태로 배포됩니다.Troll-A는 GitHub의 컨테이너 레지스트리에서 사용할 수 있으며 다음과 같이 사용할 수 있습니다:
docker run --rm ghcr.io/crissyfield/troll-a [flags] [url]
Troll-A는 macOS 및 Linux용 바이너리 형태로도 릴리스 페이지에서 제공됩니다.
[!NOTE] Docker 이미지와 달리 미리 빌드된 바이너리는 Go의 표준 라이브러리 정규 표현식을 사용하여 컴파일되므로 눈에 띄게 느립니다. 네이티브 바이너리를 선호하고 성능이 중요한 경우, 소스에서 빌드하는 것이 좋습니다.
더 나은 성능을 위해 소스에서 Troll-A를 빌드하는 것이 좋습니다. 이렇게 하면 go-re2에서 제공하는 최적화된 정규 표현식 엔진을 사용할 수 있습니다. 이를 위해서는 먼저 RE2 종속성을 설치해야 합니다.
# 종속성 설치
brew install re2
# RE2 활성화하여 설치
go install -tags re2_cgo github.com/crissyfield/[email protected]
# 종속성 설치
sudo apt install -y build-essential libre2-dev
# RE2 활성화하여 설치
go install -tags re2_cgo github.com/crissyfield/[email protected]
Usage:
troll-a [flags] [url]
이 도구는 WARC(Web ARChive) 파일에서 비밀번호, API 키, 토큰과 같은 (잠재적) 비밀 정보를 추출할 수 있게 해줍니다.
추출된 정보는 구조화된 텍스트 또는 JSON 형식으로 출력되어 데이터의 추가 처리를 간소화합니다.
"url"은 일반 HTTP 또는 HTTPS 참조("https://domain/path"), Amazon S3 참조("s3://bucket/path"),
파일 경로("file:///path" 또는 단순히 "path"), 또는 STDIN에서 읽기 위한 대시("-")일 수 있습니다.
"url"이 생략되면 STDIN에서 데이터를 읽습니다. 입력 데이터가 GZip, BZip2, XZ 또는 ZStd로 압축된 경우
자동으로 압축이 해제됩니다. 사용자 정의 사전이 앞에 추가된 ZStd("*.megawarc.warc.zst"에서 사용)도
투명하게 처리됩니다.
이 도구는 Gitleaks 프로젝트(https://gitleaks.io)의 규칙을 사용하여 비밀 정보를 탐지합니다.
Flags:
-c, --custom stringArray 적용할 추가 사용자 정의 규칙입니다. 주어진 정규 표현식(RE2 구문 사용)과
일치하는 비밀 정보도 보고됩니다. 여러 번 지정할 수 있습니다.
-e, --enclosed 컨텍스트 내에 포함된 비밀 정보만 보고합니다.
-f, --filter string 각 WARC 레코드의 대상 URL에 대한 필터입니다. 주어진 정규 표현식(RE2 구문 사용)과
일치하는 WARC 레코드만 비밀 정보가 확인됩니다. 빈 필터는 모든 것을 일치시킵니다.
-h, --help troll-a에 대한 도움말을 표시합니다.
-j, --jobs uint 이 수의 동시 작업으로 비밀 정보를 탐지합니다(기본값 8).
-s, --json 탐지된 비밀 정보를 JSON으로 출력합니다.
-p, --preset rules-preset 사용할 규칙 프리셋입니다. 다음 중 하나일 수 있습니다:
all: 알려진 모든 규칙이 적용되며, 대규모 데이터 세트에서 상당한
노이즈가 발생할 수 있습니다.
most: 대부분의 규칙이 적용되며, 오탐의 주요 원인을 건너뜁니다.
secret: 실제 비밀 정보 유출 가능성이 가장 높은 규칙만 적용됩니다.
none: 규칙이 전혀 적용되지 않습니다. --custom/-c 스위치를 통해
사용자 정의 규칙과 함께 사용할 수 있습니다.
다른 값은 허용되지 않습니다. (기본값 secret)
-q, --quiet 성공 메시지를 표시하지 않습니다.
-r, --retry retry-strategy 사용할 재시도 전략입니다. 다음 중 하나일 수 있습니다:
never: 첫 번째 가져오기 실패 후 실패하며 재시도하지 않습니다.
constant: 최대 5회 재시도하며, 각 시도 후 5초 지연합니다.
exponential: 15분 동안 재시도하며, 각 시도 후 지연 시간이 지수적으로
증가합니다.
always: 영원히 재시도하며, 각 시도 후 지연이 전혀 없습니다.
다른 값은 허용되지 않습니다. (기본값 never)
-t, --timeout duration 가져오기 타임아웃입니다(파일에는 적용되지 않음)(기본값 30m0s).
-v, --version troll-a의 버전을 표시합니다.
Common Crawl은 누구나 사용할 수 있는 무료 오픈 웹 크롤 데이터 저장소를 유지 관리합니다. Common Crawl 코퍼스는 2008년부터 정기적으로 수집된 페타바이트 규모의 데이터를 포함합니다.
예를 들어, 2023년 11월/12월 크롤(CC-MAIN-2023-50이라고 함)의 33억 5천만 페이지 모두에서 비밀 정보를 추출하려면 다음과 같이 할 수 있습니다:
# 90,000개 WARC 경로 목록 다운로드
curl -sSL -O https://data.commoncrawl.org/crawl-data/CC-MAIN-2023-50/warc.paths.gz
# 64개의 스캔 작업으로 모든 경로를 반복하고 일치 항목을 JSON으로 출력
gzcat warc.paths.gz | \
xargs -I{} -- troll-a -e -s -j64 https://data.commoncrawl.org/{} > secrets.json
[!WARNING] 이 작업은 오래 걸립니다! 하드웨어와 인터넷 연결에 따라 일주일에서 몇 달까지 소요될 수 있습니다. 이 예제는
warc.paths.gz의 첫 몇 줄에 대해서만 실행하는 것이 좋습니다.
Archive Team은 2009년에 설립된 디지털 보존 및 웹 아카이빙에 전념하는 그룹입니다. 웹 아카이브는 WARC 파일(보다 구체적으로 MegaWARC 형식)로 저장되며 Internet Archive를 통해 제공됩니다.
예를 들어, Archive Team이 2023년 4월에 pastebin.com에서 크롤링한 113,372 페이지에서 비밀 정보를 추출하려면(해당 게시물은 Internet Archive에 있습니다) 다음과 같이 할 수 있습니다:
# MegaWARC URL을 직접 troll-a에 전달
troll-a -e https://archive.org/download/archiveteam_pastebin_20230421003309_a3b951b4/pastebin_20230421003309_a3b951b4.1603050931.megawarc.warc.zst
...결과는 다음과 같습니다:
Detected: secret="acf30fb56amsh654fa8104418601p1e420cjsn3152a0032f0b" rule="rapidapi-access-token" uri="https://pastebin.com/raw/bKMJXkQE" line=36 column=15
Detected: secret="acf30fb56amsh654fa8104418601p1e420cjsn3152a0032f0b" rule="rapidapi-access-token" uri="https://pastebin.com/raw/bKMJXkQE" line=36 column=15
Detected: secret="acf30fb56amsh654fa8104418601p1e420cjsn3152a0032f0b" rule="rapidapi-access-token" uri="https://pastebin.com/raw/nferefe2" line=37 column=6
Detected: secret="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" rule="github-pat" uri="https://pastebin.com/print/cQEA2GCS" line=39 column=123
Detected: secret="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" rule="github-pat" uri="https://pastebin.com/embed_js/cQEA2GCS" line=11 column=2688
Detected: secret="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" rule="github-pat" uri="https://pastebin.com/embed_iframe/cQEA2GCS?theme=dark" line=49 column=123
Detected: secret="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" rule="github-pat" uri="https://pastebin.com/cQEA2GCS" line=222 column=123
Detected: secret="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" rule="github-pat" uri="https://pastebin.com/raw/cQEA2GCS" line=22 column=22
Detected: secret="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" rule="github-pat" uri="https://pastebin.com/embed_iframe/cQEA2GCS" line=48 column=123
Detected: secret="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" rule="github-pat" uri="https://pastebin.com/embed_js/cQEA2GCS?theme=dark" line=11 column=2796
Detected: secret="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" rule="github-pat" uri="https://pastebin.com/clone/cQEA2GCS" line=152 column=27
Success: Processed https://archive.org/download/archiveteam_pastebin_20230421003309_a3b951b4/pastebin_20230421003309_a3b951b4.1603050931.megawarc.warc.zst (113372 records)
실제 비밀 정보를 탐지하는 데 사용되는 규칙 세트는 Gitleaks 프로젝트의 일부입니다. 이 모든 정보를 정리하는 데 엄청난 작업을 해주신 분들께 깊은 감사를 드립니다!
Troll A 플랫폼은 노르웨이 서해안의 Troll 가스전에 있는 천연가스 플랫폼입니다. 2014년 기준으로 지구 표면을 기준으로 다른 위치로 이동된 가장 높은 구조물이며, 역사상 가장 크고 복잡한 공학 프로젝트 중 하나입니다. 1996년에 이 플랫폼은 세계에서 가장 큰 해상 가스 플랫폼으로 기네스 세계 기록을 세웠습니다.
[!NOTE] 우리는 천연 자원의 착취를 깊이 싫어하지만, 그 공학적 위업은 존경합니다!