Skip to content
KitploitKITPLOIT
도구블로그
제출
도구블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
reconftw — reconFTW는 대상 도메인에 대해 자동화된 정찰을 수행하기 위해 설계된 도구로, 최적의 도구 세트를 실행하여 스캐닝을 수행하고 취약점을 찾아냅니다. | Kitploit
도구/GitHubGitHub/six2dez/reconftw
OSINT (Open Source Intelligence)ReconnaissanceVulnerability ScannersOSINT for Social EngineeringPort ScanningDNS & Subdomain EnumerationScripting & AutomationInformation GatheringWeb SecurityPenetration TestingCloud SecuritySubdomain Enumeration
8.0k1.2k508일 전Kitploit 검토 완료

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유
Email Harvesting
DNS Analysis
DNS & Subdomain Enumeration #17위
Email Harvesting #20위
Information Gathering #6위
OSINT (Open Source Intelligence) #20위
OSINT for Social Engineering #20위
Reconnaissance #3위
Scripting & Automation #1위
Subdomain Enumeration #17위
GitHubsix2dez/reconftw

reconftw

reconFTW는 대상 도메인에 대해 자동화된 정찰을 수행하기 위해 설계된 도구로, 최적의 도구 세트를 실행하여 스캐닝을 수행하고 취약점을 찾아냅니다.

저장소 보기웹사이트


reconftw
reconFTW

Release License Closed Issues Discord Telegram Twitter

Docs Bash Script Linux macOS GitHub

GitHub Actions Docker Terraform Ansible Go Python

Buy Me a Coffee GitHub Sponsors PayPal

reconFTW는 보안 연구원과 침투 테스터를 위해 설계된 강력한 자동화 정찰 도구입니다. 서브도메인 열거, 취약점 스캐닝, OSINT 등을 수행하여 대상에 대한 정보 수집 프로세스를 간소화합니다. 모듈식 설계, 광범위한 구성 옵션, AX Framework를 통한 분산 스캔 지원을 갖춘 reconFTW는 효율적으로 포괄적인 결과를 제공하도록 제작되었습니다.

reconFTW는 수동 및 능동 서브도메인 탐지, 웹 취약점 검사(예: XSS, SSRF, SQLi), OSINT, 디렉터리 퍼징, 포트 스캐닝 및 스크린샷 캡처를 포함한 다양한 기법을 활용합니다. 최첨단 도구 및 API와 통합하여 적용 범위와 정확성을 극대화하여 정찰 작업에서 앞서 나갈 수 있도록 보장합니다.

주요 기능:

  • 포괄적인 서브도메인 열거(수동, 무차별 대입, 순열, 인증서 투명성 등)
  • XSS, SSRF, SQLi, LFI, SSTI 등 취약점 스캐닝
  • 이메일, 메타데이터, API 유출 및 타사 잘못된 구성에 대한 OSINT
  • 더 빠른 실행을 위한 AX Framework 기반 분산 스캔
  • 상세한 구성 파일을 통한 사용자 지정 워크플로우
  • 보고 및 시각화를 위한 Faraday 통합
  • Docker, Terraform 및 Ansible 배포 지원

면책 조항: 사전 동의 없이 대상을 공격하기 위해 reconFTW를 사용하는 것은 불법입니다. 모든 관련 법률을 준수하는 것은 사용자의 책임입니다. 개발자는 이 도구로 인한 오용 또는 손해에 대해 어떠한 책임도 지지 않습니다. 책임감 있게 사용하십시오.


📔 목차

  • 📔 목차
  • ✨ 기능
    • OSINT
    • 서브도메인
    • 호스트
    • 웹 분석
    • 취약점 검사
    • 기타
  • 🏗️ 아키텍처
  • 💿 설치
    • 로컬 설치(PC/VPS/VM)
    • Docker
    • Terraform + Ansible
  • v2 베타 사용해 보기(Go 재작성)
  • ⚙️ 구성
  • 🚀 사용법
    • 대상 옵션
    • 모드 옵션
    • 일반 옵션
    • 사용 예시
  • ☁️ AX Framework 지원(이전 Axiom)
  • 💻 Faraday 지원
  • 🧠 AI 통합
  • 🗂️ 데이터 관리
    • Makefile
    • 수동
  • 🧪 테스트
  • 마인드맵/워크플로우
  • 샘플 비디오
  • 🤝 기여 방법
  • 🔒 보안
  • ❓ 도움이 필요하신가요?
  • 💖 이 프로젝트 지원하기
  • 🙏 감사의 말
  • 📝 변경 로그
  • 🛠️ 개발
  • 📜 라이선스
  • ⭐ 스타 기록

✨ 기능

reconFTW는 정찰을 철저하고 효율적으로 만들기 위한 다양한 기능으로 가득 차 있습니다. 아래는 스크립트 및 구성의 최신 기능을 반영한 기능에 대한 상세한 분석입니다.

OSINT

  • 도메인 정보: 도메인 등록 세부 정보에 대한 WHOIS 조회(whois).
  • 이메일 및 비밀번호 유출: 유출된 이메일 및 자격 증명 검색(emailfinder 및 LeakSearch).
  • Microsoft 365/Azure 매핑: Microsoft 365 및 Azure 테넌트 식별(msftrecon).
  • 메타데이터 추출: 인덱싱된 Office 문서에서 메타데이터 추출(metagoofil).
  • API 유출: 공개 소스에서 노출된 API 감지(porch-pirate, SwaggerSpy 및 postleaksNg).
  • Google Dorking: 민감한 정보를 위한 자동화된 Google dork 쿼리(dorks_hunter 및 xnldorker).
  • GitHub 분석: 선택 가능한 엔진으로 리포지토리 및 비밀을 위한 GitHub 조직 스캔(enumerepo, trufflehog, gitleaks, titus, noseyparker).
  • GitHub Actions 감사(선택 사항): gato로 워크플로우 아티팩트 및 CI/CD 노출 감사.
  • 타사 잘못된 구성: 잘못 구성된 타사 서비스 식별(misconfig-mapper).
  • 메일 위생: 스푸핑 또는 전달성 문제를 표시하기 위해 SPF/DMARC 구성 검토.
  • 클라우드 스토리지 열거: 노출 여부에 대한 주요 제공업체의 버킷 조사(cloud_enum).
  • 스푸핑 가능 도메인: 스푸핑에 취약한 도메인 확인(spoofcheck).

서브도메인

  • 수동 열거: 서브도메인 탐지를 위해 API 및 공개 소스 사용(subfinder 및 github-subdomains).
  • 인증서 투명성: 인증서 투명성 로그 쿼리(crt).
  • NOERROR 탐지: DNS NOERROR 응답이 있는 서브도메인 식별(dnsx, 자세한 정보는 여기).
  • 무차별 대입: 사용자 지정 워드리스트로 DNS 무차별 대입 수행(puredns 및 사용자 지정 워드리스트).
  • 순열: AI, 정규식 및 도구를 사용하여 서브도메인 순열 생성(단일 순열 엔진으로 Gotator, 추가로 regulator 및 subwiz).
  • 웹 스크래핑: 수동 URL 소스 및 라이브 웹 메타데이터에서 서브도메인 추출(urlfinder, waymore, httpx, csprecon).
  • DNS 레코드: 서브도메인에 대한 DNS 레코드 확인(dnsx).
  • Google Analytics: Analytics ID를 통해 서브도메인 식별(AnalyticsRelationships).
  • TLS 핸드셰이크: TLS 포트를 통해 서브도메인 발견(tlsx).
  • 재귀 검색: 결합된 재귀 수동 또는 무차별 대입 열거 수행(dsieve).
  • 서브도메인 탈취: 취약한 서브도메인 감지(nuclei 및 dnstake).
  • DNS 영역 전송: 잘못 구성된 DNS 영역 전송 확인(dig).
  • : 잘못 구성된 클라우드 버킷 및 노출된 스토리지 자산 식별( 및 ).

호스트

  • IP 정보: 지리적 위치 및 WHOIS 데이터 검색(ipinfo).
  • CDN 감지: CDN 뒤에 있는 IP 식별(cdncheck).
  • WAF 감지: 웹 애플리케이션 방화벽 감지(wafw00f).
  • 포트 스캐닝: nmap을 사용한 능동 스캔(선택적으로 naabu가 선행) 및 smap을 사용한 수동 스캔.
  • 서비스 핑거프린팅: nerva로 발견된 host:port 쌍의 노출된 서비스 핑거프린팅.
  • 서비스 취약점(선택 사항): 심층 포트스캔 프로필은 vulners를 통한 CVE 매칭으로 결과를 강화할 수 있습니다.
  • 비밀번호 스프레이: 엔진 선택으로 식별된 서비스에 대한 비밀번호 스프레이 시도(brutespray 또는 brutus).
  • 지리적 위치: IP 주소를 지리적 위치에 매핑(ipinfo).
  • IPv6 탐지: IPV6_SCAN이 활성화된 경우 발견된 IPv6 대상을 선택적으로 열거 및 스캔.

웹 분석

  • 웹 프로빙: 표준 및 비표준 포트에서 라이브 웹 서버 감지(httpx).
  • 스크린샷: 웹 페이지의 스크린샷 캡처(nuclei).
  • 가상 호스트 퍼징: HTTP 헤더를 퍼징하여 가상 호스트 식별(VhostFinder).
  • CMS 감지: 콘텐츠 관리 시스템 식별(CMSeeK).
  • URL 추출: 수동 및 능동적으로 URL 수집(urlfinder, waymore, katana, github-endpoints 및 JSA).
  • URL 패턴 분석: 패턴을 사용하여 URL 분류(urless, gf 및 gf-patterns).
  • 파비콘 기술 정찰: 파비콘 해시에서 기술 식별(favirecon).
  • JavaScript 분석: JS 파일에서 비밀 및 엔드포인트 추출(subjs, JSA, xnLinkFinder, getjswords, mantra, jsluice).
  • 소스 맵 추출: JavaScript 소스 맵에서 민감한 데이터 검색(sourcemapper).
  • GraphQL 감지: nuclei로 GraphQL 엔드포인트 발견 및 선택적으로 심층 인트로스펙션 수행(GQLSpection).
  • 매개변수 발견: 엔드포인트에서 숨겨진 매개변수 무차별 대입(arjun).

취약점 검사

  • CVE: CVE 및 일반적인 취약점 확인 nuclei
  • Nuclei DAST: 수집된 URL 및 GF 후보에 대해 nuclei -dast 템플릿을 실행하여 추가 DAST 적용 범위 확보.
  • XSS: 교차 사이트 스크립팅 취약점 테스트(dalfox).
  • SSL/TLS: SSL/TLS 잘못된 구성 확인(testssl).
  • SSRF: 서버 측 요청 위조 테스트(interactsh, ffuf를 사용한 매개변수 값 및 선택적 대체 프로토콜 페이로드).
  • CRLF: CRLF 주입 취약점 확인(crlfuzz).
  • LFI: 퍼징을 통한 로컬 파일 포함 테스트(ffuf).
  • SSTI: 서버 측 템플릿 주입 감지(TInjA).
  • SQLi: SQL 주입 테스트(SQLMap 및 ghauri).
  • 깨진 링크: 탈취 가능성이 높은 깨진 링크 및 외부 참조 식별(second-order).
  • 명령 주입: 명령 주입 취약점 테스트(commix).
  • HTTP 요청 스머글링: 요청 스머글링 취약점 확인(smugglex).
  • 웹 캐시: 웹 캐시 취약점 식별(Web-Cache-Vulnerability-Scanner 및 toxicache).
  • 4XX 우회: 4XX 응답 우회 시도(nomore403).
  • 매개변수 퍼징: 취약점에 대한 URL 매개변수 퍼징(nuclei).

기타- 멀티스레딩: 성능 최적화 (Interlace).

  • 사용자 지정 리졸버: DNS 리졸버 생성 (dnsvalidator).
  • Docker 지원: DockerHub의 공식 Docker 이미지.
  • AWS 배포: Terraform 및 Ansible을 통해 배포.
  • IP/CIDR 지원: IP 범위 및 CIDR 블록 스캔.
  • 스캔 재개: 마지막 완료 단계부터 스캔 재개.
  • 사용자 지정 출력: 사용자 정의 디렉터리에 결과 저장.
  • Diff 모드: 후속 스캔에서 새로 발견된 항목 강조.
  • 범위 필터링: 범위 내 및 범위 외 목록 지원 (inscope).
  • 알림: Slack, Discord 또는 Telegram을 통해 알림 전송 (notify).
  • 결과 압축: 결과 압축 및 전송.
  • Faraday 통합: 보고용으로 Faraday에 결과 내보내기.
  • AI 보고서 생성: 로컬 AI 모델을 사용하여 보고서 생성 (reconftw_ai).
  • 빠른 재스캔 모드: 새 자산이 발견되지 않으면 무거운 단계를 자동으로 건너뜀 (--quick-rescan / QUICK_RESCAN).
  • Hotlist 빌더: 새 발견 사항을 기반으로 가장 위험한 자산을 점수화하고 강조 (hotlist.txt).
  • 명령 추적: SHOW_COMMANDS를 전환하여 실행된 모든 명령을 대상 로그에 기록하여 디버깅 지원.
  • 자산 저장소: ASSET_STORE가 활성화되면 발견 사항을 assets.jsonl에 추가하여 다운스트림 자동화 지원.

🏗️ 아키텍처

reconFTW는 모듈식 아키텍처를 사용합니다. 메인 진입점(reconftw.sh)은 인수 구문 분석을 처리하고 modules/ 디렉터리에서 8개의 전문화된 모듈을 소싱합니다.

디렉터리 구조```

reconftw/ ├── reconftw.sh # Entry point — arg parsing, module loading, dispatch ├── reconftw.cfg # Default configuration ├── install.sh # Installer ├── Makefile # Data management, lint, fmt, test targets ├── modules/ │ ├── core.sh # Lifecycle, logging, notifications, cleanup (1024 lines) │ ├── modes.sh # Scan modes, argument parsing, help (902 lines) │ ├── subdomains.sh # Subdomain enumeration (1938 lines) │ ├── web.sh # Web analysis, fuzzing, JS checks (1712 lines) │ ├── vulns.sh # Vulnerability scanning (926 lines) │ ├── osint.sh # OSINT functions (500 lines) │ ├── axiom.sh # Ax/Axiom fleet helpers (143 lines) │ └── utils.sh # Utilities, sanitization, validation (508 lines) ├── tests/ │ ├── run_tests.sh # Test runner │ ├── unit/ # bats-core unit tests │ ├── integration/ # Integration tests │ └── fixtures/ # Test data ├── Docker/ │ └── Dockerfile # Official Docker image └── Terraform/ # AWS deployment

root@kitploit:~
### 모듈 참조

| 모듈 | 줄 수 | 용도 |
|--------|------:|---------|
| `core.sh` | 1024 | 수명주기 관리, 로깅, 알림, 정리 트랩 |
| `modes.sh` | 902 | 스캔 모드 정의, 인수 파싱, 도움말 출력 |
| `subdomains.sh` | 1938 | 모든 하위 도메인 열거 함수 |
| `web.sh` | 1712 | 웹 분석, 퍼징, JS 분석, CMS 탐지 |
| `vulns.sh` | 926 | 취약점 스캔 (XSS, SQLi, SSRF 등) |
| `osint.sh` | 500 | OSINT 함수 (WHOIS, 이메일, 도크, 메타데이터) |
| `utils.sh` | 508 | 공용 유틸리티, 입력 검증, 유효성 검사 |
| `axiom.sh` | 143 | Ax/Axiom 분산 플릿 관리 |

`--source-only` 플래그를 사용하면 메인 로직을 실행하지 않고 `reconftw.sh`를 소싱할 수 있어 개별 함수의 단위 테스트가 가능합니다.

---

## 💿 설치

reconFTW는 다양한 환경에 맞는 여러 설치 방법을 지원합니다. 충분한 디스크 공간(최소 10 GB 권장)과 안정적인 인터넷 연결이 있는지 확인하세요.

### 빠른 시작

1) 클론 및 설치```yaml
git clone https://github.com/six2dez/reconftw
cd reconftw
./install.sh --verbose
  1. 스캔 실행 (전체 + 재개)```bash ./reconftw.sh -d example.com -r
root@kitploit:~
3) 최소 실행(수동 전용 풋프린트)```bash
./reconftw.sh -d example.com -p

팁: 나중에 ./install.sh --tools를 다시 실행하면 시스템 패키지를 재설치하지 않고도 툴체인을 새로 고칠 수 있습니다.

로컬 설치 (PC/VPS/VM)

  1. 사전 요구 사항:

    • Golang: 최신 버전 (reconftw.cfg에서 기본적으로 install_golang 활성화됨).
    • 시스템 권한: root로 실행하지 않는 경우, 프롬프트를 피하도록 sudo를 구성하세요:
      root@kitploit:~
      sudo echo "${USERNAME} ALL=(ALL:ALL) NOPASSWD: ALL" | sudo tee -a /etc/sudoers.d/reconFTW
      
  2. 단계: ```bash git clone https://github.com/six2dez/reconftw cd reconftw ./install.sh ./reconftw.sh -d target.com -r

    root@kitploit:~
  3. 참고 사항:

  • install.sh 스크립트는 의존성, 도구를 설치하고 경로(GOROOT, GOPATH, PATH)를 구성합니다.
  • Golang이 이미 구성되어 있다면 reconftw.cfg에서 install_golang=false로 설정하세요.
  • 기존 설정이 있는 경우, 시스템 패키지를 건드리지 않고 Go 바이너리, pipx 패키지, 저장소를 새로 고치려면 ./install.sh --tools를 실행하세요.
  • 자세한 지침은 설치 가이드를 확인하세요.

Docker

  1. 이미지 가져오기: ```bash docker pull six2dez/reconftw:main
    root@kitploit:~
  2. 컨테이너 실행: ```bash docker run -it --rm
    -v "${PWD}/OutputFolder/:/reconftw/Recon/"
    six2dez/reconftw:main -d example.com -r
    root@kitploit:~

대상 목록의 경우, 목록 파일을 컨테이너에 바인딩하고 컨테이너 내부 경로를 참조하세요: ```bash docker run -it --rm
-v "${PWD}/domains.txt:/reconftw/domains.txt:ro"
-v "${PWD}/OutputFolder/:/reconftw/Recon/"
six2dez/reconftw:main -l /reconftw/domains.txt -r

root@kitploit:~
3. **결과 보기**:

- 결과는 호스트의 `OutputFolder` 디렉터리에 저장됩니다(컨테이너 내부가 아님).

4. **사용자 지정**:
- Docker 이미지를 수정하거나 직접 빌드하세요. [Docker 가이드](https://github.com/six2dez/reconftw/wiki/4.-Docker)를 참조하세요.
- 사용자 지정 빌드에서 Ax 도구를 건너뛰려면 `--build-arg INSTALL_AXIOM=false`를 전달하세요.
- 알림을 사용하는 경우 컨테이너 내부의 `~/.config/notify/provider-config.yaml`에 notify 구성을 마운트하세요.

5. **런타임 시 비밀 정보**:

API 키와 비밀 정보는 환경 변수를 통해 전달하세요. 이미지에 하드코딩하지 마세요.   ```bash
docker run -it --rm \
  -e SHODAN_API_KEY="your-key" \
  -e PDCP_API_KEY="your-projectdiscovery-key" \
  -e COLLAB_SERVER="your-server" \
  -e XSS_SERVER="your-server" \
  -v "${PWD}/OutputFolder/:/reconftw/Recon/" \
  six2dez/reconftw:main -d example.com -r

See SECURITY.md에서 전체 비밀 관리 지침을 확인하세요.

  1. 헬스 체크:

    Docker 이미지에는 60초마다 ./reconftw.sh --health-check를 실행하는 내장 HEALTHCHECK가 포함되어 있습니다. 수동으로 실행할 수도 있습니다: ```bash docker exec ./reconftw.sh --health-check

    root@kitploit:~

Terraform + Ansible

  • Terraform과 Ansible을 사용하여 AWS에 reconFTW를 배포합니다.
  • 설정 지침은 Terraform/README.md 가이드를 따르세요.

v2 베타 사용해 보기 (Go 재작성)

reconFTW는 Go로 재작성되고 있습니다. 재작성 버전은 선택적 사전 릴리스로 제공됩니다. 이는 릴리스 페이지에 나열되며, GitHub는 사전 릴리스를 releases/latest로 지정하지 않습니다. 따라서 아무것도 하지 않으면 bash 릴리스를 계속 받게 됩니다. 이는 의도된 설계입니다.

Go 바이너리는 reconftw이고, bash 진입점은 reconftw.sh입니다. 이 둘은 서로 덮어쓰지 않으므로 둘 다 유지하고 언제든지 전환할 수 있습니다.

현재 베타 버전은 **v5.0.0-beta.1**입니다. 이 버전은 releases/latest로 제공되지 않으므로 태그를 명시적으로 지정해야 합니다:```bash curl -sSL "https://github.com/six2dez/reconftw/releases/download/v5.0.0-beta.1/reconftw_Linux_x86_64.tar.gz" | tar xz sudo install -m 755 reconftw /usr/local/bin/reconftw reconftw version

root@kitploit:~
플랫폼에 맞는 자산을 [릴리스 페이지](https://github.com/six2dez/reconftw/releases/tag/v5.0.0-beta.1)에서 선택하세요 — `Darwin` 및 `arm64` 빌드, 정적 musl 빌드, `.deb`/`.rpm` 패키지가 모두 게시되어 있습니다.

- [**베타가 무엇이고, 무엇이 아닌지**](https://github.com/six2dez/reconftw/blob/main/docs/V2-BETA-ANNOUNCEMENT.md) — 아직 완료되지 않은 세 가지 항목을 포함합니다.
- [**문제 보고**](https://github.com/six2dez/reconftw/issues/new?template=v2-beta-feedback.md) — v2 베타 피드백 템플릿입니다. bash 릴리스의 버그는 여전히 일반 Bug report로 제출하세요.


## 🛠️ 문제 해결

- macOS의 Bash 4+: 스크립트는 Homebrew Bash에서 자동으로 재실행됩니다. Bash < 4 관련 메시지가 표시되면 `brew install bash`를 실행하고, 새 터미널을 연 후 `./install.sh`를 다시 실행하세요.
- macOS의 timeout: macOS는 `brew install coreutils`를 통해 `gtimeout`을 제공합니다. 스크립트는 이제 이를 자동으로 감지하여 사용합니다.
- 네트워크 문제: 설치 프로그램은 대부분의 명령 출력을 숨깁니다. 실패할 경우 `reconftw.cfg`에서 `upgrade_tools=true`로 재실행하거나, `./install.sh --tools`를 실행하거나, 누락된 도구를 수동으로 설치하세요(오류 메시지에 도구 이름이 표시됩니다).
- GOPATH 바이너리: 바이너리는 `/usr/local/bin`에 복사됩니다. 원하지 않으면 `~/go/bin`이 `PATH`에 포함되어 있는지 확인하세요.
- Nuclei 템플릿: 템플릿이 클론되지 않은 경우 `~/nuclei-templates`를 제거하고 `./install.sh`를 다시 실행하세요.

## 🔑 API 체크리스트 (선택 사항)

- `subfinder`: `~/.config/subfinder/provider-config.yaml`
- GitHub 토큰: `~/Tools/.github_tokens` (줄당 하나)
- GitLab 토큰: `~/Tools/.gitlab_tokens` (줄당 하나)
- WHOISXML: `reconftw.cfg` 또는 환경 변수에 `WHOISXML_API` 설정
- ASN 열거 (`asnmap`): 환경/설정에 `PDCP_API_KEY` 설정 (`ASN_ENUM`은 설정되지 않으면 건너뜀)
- Slack/Discord/Telegram: `~/.config/notify/provider-config.yaml`에서 `notify` 구성
- SSRF 서버: 사용 시 `COLLAB_SERVER` 환경 변수/설정
- Blind XSS 서버: 사용 시 `XSS_SERVER` 환경 변수/설정

## 💾 요구 사항

- 디스크: 10–20 GB 여유 공간 권장 (도구 체인 + 데이터)
- 네트워크: 설치 및 업데이트 중 안정적인 연결
- OS: Bash ≥ 4를 갖춘 Linux/macOS
- 추가: `make lint`/`make fmt`용 `shellcheck` 및 `shfmt` (선택 사항)

## ⚙️ 구성

`reconftw.cfg` 파일은 reconFTW의 전체 실행을 제어합니다. 세부적인 사용자 지정이 가능합니다:

- **도구 경로**: 도구, 리졸버, 워드리스트 경로 설정 (`tools`, `resolvers`, `fuzz_wordlist`).
- **API 키**: 환경 변수 또는 `secrets.cfg`를 통해 Shodan, WHOISXML 등의 키 구성 ([SECURITY.md](https://github.com/six2dez/reconftw/blob/main/SECURITY.md) 참조).
- **스캔 모드**: 모듈 활성화/비활성화 (예: `OSINT`, `SUBDOMAINS_GENERAL`, `VULNS_GENERAL`).
- **성능**: 스레드, 속도 제한, 타임아웃 조정 (예: `FFUF_THREADS`, `HTTPX_RATELIMIT`).
- **적응형 속도 제한**: 429/503 오류 시 자동 백오프 (`ADAPTIVE_RATE_LIMIT`, `MIN_RATE_LIMIT`, `MAX_RATE_LIMIT`).
- **증분 스캔**: 마지막 실행 이후의 새 발견 항목만 스캔 (`INCREMENTAL_MODE`).
- **알림**: Slack, Discord 또는 Telegram 알림 설정 (`NOTIFY_CONFIG`).
- **Ax (구 Axiom)**: 분산 스캔 및 리졸버 경로 구성 (`AXIOM_FLEET_NAME`, `AXIOM_FLEET_COUNT`, `AXIOM_RESOLVERS_PATH`).
- **AI 보고**: 모델/프로필/형식 및 컨텍스트 제어 구성 (`AI_MODEL`, `AI_REPORT_PROFILE`, `AI_REPORT_TYPE`, `AI_MAX_CHARS_PER_FILE`).
- **고급 웹 검사**: GraphQL 인트로스펙션, 파라미터 발견, WebSocket 테스트, gRPC 프로빙, IPv6 스캔 토글.
- **자동화 및 데이터**: 빠른 재스캔 휴리스틱, 자산 로깅, 청크 크기, 핫리스트, 디버그 추적 제어 (`QUICK_RESCAN`, `ASSET_STORE`, `CHUNK_LIMIT`, `HOTLIST_TOP`, `SHOW_COMMANDS`).
- **디스크 및 로깅**: 사전 실행 디스크 검사 (`MIN_DISK_SPACE_GB`), 로그 순환 (`MAX_LOG_FILES`, `MAX_LOG_AGE_DAYS`), 구조화된 JSON 로깅 (`STRUCTURED_LOGGING`).
- **캐싱**: 워드리스트 및 리졸버의 캐시 만료 구성 (`CACHE_MAX_AGE_DAYS`).
- **DNS 리졸버 안전성**: 누락된 리졸버 파일은 빠르게 실패하고, 리졸버 다운로드는 구성 가능한 재시도/타임아웃 설정을 사용하며 (`RESOLVER_DOWNLOAD_*`), DNS 브루트/리졸브 타임아웃은 기본적으로 비활성화(`DNS_*_TIMEOUT=0`)되고 하트비트 진행률이 표시됩니다.
- **비밀 정보**: 로컬 재정의에는 `secrets.cfg`를, CI/Docker에는 환경 변수를 사용하세요 ([SECURITY.md](https://github.com/six2dez/reconftw/blob/main/SECURITY.md) 참조).

**구성 예시**:```bash
#############################################
#			reconFTW config file			#
#############################################

# General values
tools=$HOME/Tools   # Path installed tools
if [[ -z "${SCRIPTPATH:-}" ]]; then
	if [[ -n "${BASH_SOURCE[0]:-}" ]]; then
		SCRIPTPATH="$( cd "$(dirname "${BASH_SOURCE[0]}")" >/dev/null 2>&1 ; pwd -P )" # Get current script's path
	else
		SCRIPTPATH="$( cd "$(dirname "$0")" >/dev/null 2>&1 ; pwd -P )" # Get current script's path
	fi
fi
_detected_shell="${SHELL:-/bin/bash}"
profile_shell=".$(basename "${_detected_shell}")rc" # Get current shell profile
if git rev-parse --is-inside-work-tree >/dev/null 2>&1; then
	reconftw_version="$(git rev-parse --abbrev-ref HEAD)-$(git describe --tags 2>/dev/null || git rev-parse --short HEAD)"
else
	reconftw_version="standalone"
fi # Fetch current reconftw version
DATA_DIR="${SCRIPTPATH}/data"
WORDLISTS_DIR="${DATA_DIR}/wordlists"
PATTERNS_DIR="${DATA_DIR}/patterns"
generate_resolvers=false # Generate custom resolvers with dnsvalidator
update_resolvers=true # Fetch and rewrite resolvers from trickest/resolvers before DNS resolution
resolvers_url="https://raw.githubusercontent.com/trickest/resolvers/main/resolvers.txt"
resolvers_trusted_url="https://gist.githubusercontent.com/six2dez/ae9ed7e5c786461868abd3f2344401b6/raw/trusted_resolvers.txt"
RESOLVER_DOWNLOAD_CONNECT_TIMEOUT=10 # Seconds to wait for resolver download TCP connection
RESOLVER_DOWNLOAD_MAX_TIME=120 # Hard cap in seconds for resolver downloads
RESOLVER_DOWNLOAD_RETRY=2 # Retry count for resolver downloads
RESOLVER_DOWNLOAD_RETRY_DELAY=2 # Delay in seconds between resolver download retries
fuzzing_remote_list="https://raw.githubusercontent.com/six2dez/OneListForAll/main/onelistforallmicro.txt" # Used to send to Ax (if used) on fuzzing
proxy_url="http://127.0.0.1:8080/" # Proxy url
install_golang=true # Set it to false if you already have Golang configured and ready
upgrade_tools=true
upgrade_before_running=false # Upgrade tools before running
#dir_output=/custom/output/path
SHOW_COMMANDS=false # Set true to log every executed command to the per-target log (verbose; may include sensitive data)
MIN_DISK_SPACE_GB=0 # Minimum required disk space in GB before starting reconnaissance (0 to disable check)

# Incremental mode configuration
INCREMENTAL_MODE=false # Only scan new findings since last run (use --incremental flag to enable)
MONITOR_MODE=false # Continuous monitor mode (enabled by --monitor)
MONITOR_INTERVAL_MIN=60 # Minutes between monitoring cycles
MONITOR_MAX_CYCLES=0 # 0 = run forever until interrupted
ALERT_SUPPRESSION=true # Suppress repeated monitor alerts by fingerprint history
ALERT_SEEN_FILE=".incremental/alerts_seen.hashes" # Store of seen alert fingerprints

# Adaptive rate limiting configuration
ADAPTIVE_RATE_LIMIT=false # Automatically adjust rate limits when encountering 429/503 errors (use --adaptive-rate flag to enable)
MIN_RATE_LIMIT=10 # Minimum rate limit (requests per second)
MAX_RATE_LIMIT=500 # Maximum rate limit (requests per second)
RATE_LIMIT_BACKOFF_FACTOR=0.5 # Multiply rate by this when errors occur (0.5 = half speed)
RATE_LIMIT_INCREASE_FACTOR=1.2 # Multiply rate by this on success (1.2 = 20% faster)

# Cache configuration
CACHE_MAX_AGE_DAYS=30 # Maximum age in days for cached wordlists/resolvers (30 = 1 month)
CACHE_MAX_AGE_DAYS_RESOLVERS=7 # Resolver cache TTL
CACHE_MAX_AGE_DAYS_WORDLISTS=30 # Wordlist cache TTL
CACHE_MAX_AGE_DAYS_TOOLS=14 # Tool cache TTL
CACHE_REFRESH=false # Force-refresh cache (or use --refresh-cache)

# Log rotation
MAX_LOG_FILES=10       # Maximum number of log files to keep per target
MAX_LOG_AGE_DAYS=30    # Delete log files older than this many days

# Structured logging configuration (JSON format)
STRUCTURED_LOGGING=false # Enable JSON structured logging for advanced log analysis

# Golang Vars (Comment or change on your own)
export GOROOT="${GOROOT:-/usr/local/go}"
export GOPATH="${GOPATH:-$HOME/go}"
case ":${PATH}:" in
	*":$GOPATH/bin:"*) ;;
	*) PATH="$GOPATH/bin:$PATH" ;;
esac
case ":${PATH}:" in
	*":$GOROOT/bin:"*) ;;
	*) PATH="$GOROOT/bin:$PATH" ;;
esac
case ":${PATH}:" in
	*":$HOME/.local/bin:"*) ;;
	*) PATH="$HOME/.local/bin:$PATH" ;;
esac
export PATH

# Rust Vars (Comment or change on your own)
export PATH="$HOME/.cargo/bin:$PATH"

# Tools config files
#NOTIFY_CONFIG=~/.config/notify/provider-config.yaml # No need to define
GITHUB_TOKENS=${tools}/.github_tokens
GITLAB_TOKENS=${tools}/.gitlab_tokens
#CUSTOM_CONFIG=custom_config_path.txt # In case you use a custom config file, uncomment this line and set your files path

# APIs/TOKENS - Set via environment variables (preferred) or uncomment and edit below.
# Environment variables take precedence if set.
SHODAN_API_KEY="${SHODAN_API_KEY:-}"
WHOISXML_API="${WHOISXML_API:-}"
PDCP_API_KEY="${PDCP_API_KEY:-}"
XSS_SERVER="${XSS_SERVER:-}"
COLLAB_SERVER="${COLLAB_SERVER:-}"
slack_channel="${slack_channel:-}"
slack_auth="${slack_auth:-}"
# For additional secrets, create a secrets.cfg file (gitignored) and it will be auto-sourced

# File descriptors
DEBUG_STD="&>/dev/null" # Skips STD output on installer
DEBUG_ERROR="2>/dev/null" # Skips ERR output on installer

# Osint
OSINT=true # Enable or disable the whole OSINT module
GOOGLE_DORKS=true
GITHUB_DORKS=true
GITHUB_REPOS=true
METADATA=true # Fetch metadata from indexed office documents
EMAILS=true # Fetch emails from differents sites
DOMAIN_INFO=true # whois info
IP_INFO=true    # Reverse IP search, geolocation and whois
API_LEAKS=true # Check for API leaks
API_LEAKS_POSTLEAKS=true # Enhance API leaks with postleaksNg
THIRD_PARTIES=true # Check for 3rd parties misconfigs
SPOOF=true # Check spoofable domains
MAIL_HYGIENE=true # Check DMARC/SPF records
CLOUD_ENUM=true # Enumerate cloud storage across providers with cloud_enum
GITHUB_LEAKS=true # Search for leaked secrets across GitHub with ghleaks
GHLEAKS_THREADS=5 # Concurrent download threads for ghleaks
SECRETS_ENGINE="gitleaks" # gitleaks|titus|noseyparker|hybrid
SECRETS_SCAN_GIT_HISTORY=false # Include git history scans when supported
SECRETS_VALIDATE=false # Validate detected secrets when supported (titus)
GITHUB_ACTIONS_AUDIT=false # Audit GitHub Actions artifacts/workflows with gato
GATO_INCLUDE_ALL_ARTIFACT_SECRETS=false # Include noisy artifact secret matches in gato output

# Subdomains
SUBDOMAINS_GENERAL=true # Enable or disable the whole Subdomains module
SUBPASSIVE=true # Passive subdomains search
SUBCRT=true # crtsh search
CTR_LIMIT=999999 # Limit the number of results
SUBNOERROR=false # Check DNS NOERROR response and BF on them
SUBANALYTICS=true # Google Analytics search
SUBBRUTE=true # DNS bruteforcing
SUBSCRAPING=true # Subdomains extraction from passive URLs and live web metadata
SUBPERMUTE=true # DNS permutations
SUBIAPERMUTE=true # Permutations by AI analysis
SUBREGEXPERMUTE=true # Permutations by regex analysis
GOTATOR_FLAGS=" -depth 1 -numbers 3 -mindup -adv -md" # Flags for gotator
PERMUTATIONS_WORDLIST_MODE=auto # auto|full|short (auto: short if subs > threshold, full if DEEP)
PERMUTATIONS_SHORT_THRESHOLD=100 # Use short wordlist when subdomain count exceeds this
SUBTAKEOVER=true # Check subdomain takeovers, false by default cuz nuclei already check this
SUB_RECURSIVE_PASSIVE=false # Uses a lot of API keys queries
DEEP_RECURSIVE_PASSIVE=10 # Number of top subdomains for recursion
SUB_RECURSIVE_BRUTE=false # Needs big disk space and time to resolve
ZONETRANSFER=true # Check zone transfer
S3BUCKETS=true # Check S3 buckets misconfigs
REVERSE_IP=false # Check reverse IP subdomain search (set True if your target is CIDR/IP)
TLS_PORTS="21,22,25,80,110,135,143,261,271,324,443,448,465,563,614,631,636,664,684,695,832,853,854,990,993,989,992,994,995,1129,1131,1184,2083,2087,2089,2096,2221,2252,2376,2381,2478,2479,2482,2484,2679,2762,3077,3078,3183,3191,3220,3269,3306,3410,3424,3471,3496,3509,3529,3539,3535,3660,36611,3713,3747,3766,3864,3885,3995,3896,4031,4036,4062,4064,4081,4083,4116,4335,4336,4536,4590,4740,4843,4849,5443,5007,5061,5321,5349,5671,5783,5868,5986,5989,5990,6209,6251,6443,6513,6514,6619,6697,6771,7202,7443,7673,7674,7677,7775,8243,8443,8991,8989,9089,9295,9318,9443,9444,9614,9802,10161,10162,11751,12013,12109,14143,15002,16995,41230,16993,20003"
INSCOPE=false # Uses inscope tool to filter the scope, requires .scope file in reconftw folder

# Web detection
WEBPROBEFULL=true # Unified web probing over configured ports
WEBSCREENSHOT=true # Webs screenshooting
VIRTUALHOSTS=false # Check virtualhosts by fuzzing HOST header
UNCOMMON_PORTS_WEB="81,300,591,593,832,981,1010,1311,1099,2082,2095,2096,2480,3000,3001,3002,3003,3128,3333,4243,4567,4711,4712,4993,5000,5104,5108,5280,5281,5601,5800,6543,7000,7001,7396,7474,8000,8001,8008,8014,8042,8060,8069,8080,8081,8083,8088,8090,8091,8095,8118,8123,8172,8181,8222,8243,8280,8281,8333,8337,8443,8500,8834,8880,8888,8983,9000,9001,9043,9060,9080,9090,9091,9092,9200,9443,9502,9800,9981,10000,10250,11371,12443,15672,16080,17778,18091,18092,20720,32000,55440,55672"
WEBPROBE_PORTS="80,443,${UNCOMMON_PORTS_WEB}" # Ports used by webprobe_full

# Host
FAVIRECON=true # Favicon-based technology recon for discovered web targets
PORTSCANNER=true # Enable or disable the whole Port scanner module
GEO_INFO=true # Fetch Geolocalization info
PORTSCAN_PASSIVE=true # Port scanner with Shodan
PORTSCAN_ACTIVE=true # Port scanner with nmap
PORTSCAN_ACTIVE_OPTIONS="--top-ports 200 -sV -n -Pn --open --max-retries 2"
PORTSCAN_DEEP_OPTIONS="--top-ports 1000 -sV -n -Pn --open --max-retries 2 --script vulners"
PORTSCAN_STRATEGY=legacy # legacy|naabu_nmap
NAABU_ENABLE=true
NAABU_RATE=1000
NAABU_PORTS="--top-ports 1000"
SERVICE_FINGERPRINT=true # Fingerprint exposed services with nerva
SERVICE_FINGERPRINT_ENGINE="nerva" # nerva
SERVICE_FINGERPRINT_TIMEOUT_MS=2000 # nerva timeout per target (ms)
PORTSCAN_UDP=false
PORTSCAN_UDP_OPTIONS="--top-ports 20 -sU -sV -n -Pn --open"
CDN_IP=true # Check which IPs belongs to CDN
CDN_BYPASS=true # Try origin IP discovery on CDN-fronted hosts with hakoriginfinder

# Web analysis
WAF_DETECTION=true # Detect WAFs
NUCLEICHECK=true # Enable or disable nuclei
NUCLEI_TEMPLATES_PATH="$HOME/nuclei-templates" # Set nuclei templates path
NUCLEI_SEVERITY="info,low,medium,high,critical" # Set templates criticity
NUCLEI_EXTRA_ARGS="" # Additional nuclei extra flags, don't set the severity here but the exclusions like " -etags openssh"
#NUCLEI_EXTRA_ARGS="-etags openssh,ssl -eid node-express-dev-env,keycloak-xss,CVE-2023-24044,CVE-2021-20323,header-sql,header-reflection" # Additional nuclei extra flags, don't set the severity here but the exclusions like " -etags openssh"
NUCLEI_DAST=true # Run additional nuclei -dast module over webs/urls/gf candidates (forced on when VULNS_GENERAL=true, e.g. -a)
URL_CHECK=true # Enable or disable URL collection
URL_CHECK_PASSIVE=true # Search for urls, passive methods from Archive, OTX, CommonCrawl, etc
URL_CHECK_ACTIVE=true # Search for urls by crawling the websites
WAYMORE_TIMEOUT=30m # Timeout for waymore passive URL collection
WAYMORE_LIMIT=5000 # Optional URL collection limit for waymore
URL_GF=true # Url patterns classification
URL_EXT=true # Returns a list of files divided by extension
JSCHECKS=true # JS analysis
FUZZ=true # Web fuzzing
FUZZ_RECURSION_DEPTH=2 # ffuf recursion depth used in DEEP mode
IIS_SHORTNAME=true
CMS_SCANNER=true # CMS scanner
WORDLIST=true # Wordlist generation
ROBOTSWORDLIST=true # Check historic disallow entries on waybackMachine (DEEP mode only)
PASSWORD_DICT=true # Generate password dictionary
PASSWORD_DICT_ENGINE=cewler # cewler|pydictor
PASSWORD_MIN_LENGTH=5 # Min password length
PASSWORD_MAX_LENGTH=14 # Max password length
KATANA_HEADLESS_PROFILE=off # off|smart|full
CLOUD_ENUM_S3_PROFILE=optimized # optimized: quickscan (-qs + safe -m/-b paths) | exhaustive: -m/-b ${tools}/cloud_enum/enum_tools/fuzz.txt (missing fuzz => optimized)
CLOUD_ENUM_S3_THREADS=20 # Threads used by cloud_enum in s3buckets/cloud enumeration

# Vulns
VULNS_GENERAL=false # Enable or disable the vulnerability module (very intrusive and slow)
XSS=true # Check for xss with dalfox
TEST_SSL=true # SSL misconfigs
SSRF_CHECKS=true # SSRF checks
CRLF_CHECKS=true # CRLF checks
LFI=true # LFI by fuzzing
LFI_MAX_URLS=150 # Max single-parameter LFI candidates to test per target (0 = unlimited)
SSTI=true # SSTI by fuzzing
SSTI_ENGINE="TInjA" # SSTI engine
SQLI=true # Check SQLI
SQLMAP=true # Check SQLI with sqlmap
GHAURI=false # Check SQLI with ghauri
BROKENLINKS=true # Check for brokenlinks
BROKENLINKS_ENGINE="second-order" # Broken links engine
SPRAY=true # Performs password spraying
SPRAY_ENGINE="brutespray" # brutespray|brutus
SPRAY_BRUTUS_ONLY_DEEP=true # Run brutus only in DEEP mode unless disabled
BRUTUS_USERNAMES="" # Optional comma-separated usernames for brutus
BRUTUS_PASSWORDS="" # Optional comma-separated passwords for brutus
BRUTUS_KEY_FILE="" # Optional SSH private key path for brutus
COMM_INJ=true # Check for command injections with commix
SMUGGLING=true # Check for HTTP request smuggling flaws
WEBCACHE=true # Check for Web Cache issues
WEBCACHE_TOXICACHE=true # Complement web cache checks with toxicache
BYPASSER4XX=true # Check for 4XX bypasses
FUZZPARAMS=true # Fuzz parameters values

# Extra features
NOTIFICATION=false # Notification for every function
SOFT_NOTIFICATION=false # Only for start/end
DEEP=false # DEEP mode, really slow and don't care about the number of results
DEEP_LIMIT=500 # First limit to not run unless you run DEEP
DEEP_LIMIT2=1500 # Second limit to not run unless you run DEEP
DIFF=false # Diff function, run every module over an already scanned target, printing only new findings (but save everything)
REMOVETMP=false # Delete temporary files after execution (to free up space)
REMOVELOG=false # Delete logs after execution
PROXY=false # Send to proxy the websites found
SENDZIPNOTIFY=false # Send to zip the results (over notify)
PRESERVE=true      # set to true to avoid deleting the .called_fn files on really large scans
FFUF_FLAGS=" -mc all -fc 404 -sf -noninteractive -of json" # Ffuf flags

# HTTP options
HEADER="User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:72.0) Gecko/20100101 Firefox/72.0" # Default header

# Threads (auto-scaled based on CPU cores, override to set fixed values)
AVAILABLE_CORES=$(nproc 2>/dev/null || sysctl -n hw.ncpu 2>/dev/null || echo 4)
FFUF_THREADS=$((AVAILABLE_CORES * 10))
HTTPX_THREADS=$((AVAILABLE_CORES * 12))
HTTPX_UNCOMMONPORTS_THREADS=$((AVAILABLE_CORES * 25))
KATANA_THREADS=$((AVAILABLE_CORES * 5))
BRUTESPRAY_CONCURRENCE=$((AVAILABLE_CORES * 2))
DNSTAKE_THREADS=$((AVAILABLE_CORES * 25))
DALFOX_THREADS=$((AVAILABLE_CORES * 50))
DNS_RESOLVER=auto # auto|puredns|dnsx (auto: detects NAT/CGNAT → dnsx for home, puredns for VPS)
PUREDNS_PUBLIC_LIMIT=0 # Set between 2000 - 10000 if your router blows up, 0 means unlimited
PUREDNS_TRUSTED_LIMIT=400
PUREDNS_WILDCARDTEST_LIMIT=30
PUREDNS_WILDCARDBATCH_LIMIT=1500000
DNSX_THREADS=25 # Threads for dnsx when behind NAT (safe for home routers)
DNSX_RATE_LIMIT=100 # QPS for dnsx
DNSVALIDATOR_THREADS=200
INTERLACE_THREADS=10
LFI_INTERLACE_THREADS=4 # Dedicated interlace concurrency for LFI
TLSX_THREADS=1000
XNLINKFINDER_DEPTH=3

# Rate limits
HTTPX_RATELIMIT=150
NUCLEI_RATELIMIT=150
FFUF_RATELIMIT=0
LFI_FFUF_THREADS=20 # Dedicated ffuf threads for LFI
LFI_FFUF_RATELIMIT=50 # Dedicated ffuf rate limit for LFI

# Timeouts
SUBFINDER_ENUM_TIMEOUT=180          # Minutes
CMSSCAN_TIMEOUT=3600            # Seconds
FFUF_MAXTIME=900                # Seconds
LFI_INTERLACE_TIMEOUT=180       # Seconds per LFI interlace worker
LFI_FFUF_TIMEOUT=10             # Seconds per LFI HTTP request
LFI_FFUF_MAXTIME=90             # Seconds per single LFI ffuf job
LFI_FOLLOW_REDIRECTS=false      # Follow redirects during LFI fuzzing
HTTPX_TIMEOUT=10                # Seconds
HTTPX_UNCOMMONPORTS_TIMEOUT=10  # Seconds
PERMUTATIONS_LIMIT=21474836480  # Bytes, default is 20 GB
DNS_BRUTE_TIMEOUT=0             # timeout/gtimeout duration for DNS bruteforce (0 disables hard-timeout, e.g. 4h)
DNS_RESOLVE_TIMEOUT=0           # timeout/gtimeout duration for DNS resolve (0 disables hard-timeout, e.g. 6h)
DNS_HEARTBEAT_INTERVAL_SECONDS=20 # Progress heartbeat interval for long DNS jobs

# lists
fuzz_wordlist=${WORDLISTS_DIR}/fuzz_wordlist.txt
lfi_wordlist=${WORDLISTS_DIR}/lfi_wordlist.txt
ssti_wordlist=${WORDLISTS_DIR}/ssti_wordlist.txt
subs_wordlist=${WORDLISTS_DIR}/subdomains.txt
subs_wordlist_big=${tools}/subdomains_n0kovo_big.txt
headers_inject=${WORDLISTS_DIR}/headers_inject.txt
resolvers=${tools}/resolvers.txt
resolvers_trusted=${tools}/resolvers_trusted.txt

# Ax Fleet (formerly Axiom — uses attacksurge/ax)
# Resolver paths on Ax instances (change if your fleet uses a different home dir)
AXIOM_RESOLVERS_PATH="/home/op/lists/resolvers.txt"
AXIOM_RESOLVERS_TRUSTED_PATH="/home/op/lists/resolvers_trusted.txt"
# Will not start a new fleet if one exist w/ same name and size (or larger)
# AXIOM=false Uncomment only to overwrite command line flags
AXIOM_FLEET_LAUNCH=true # Enable or disable spin up a new fleet, if false it will use the current fleet with the AXIOM_FLEET_NAME prefix
AXIOM_FLEET_NAME="reconFTW" # Fleet's prefix name
AXIOM_FLEET_COUNT=10 # Fleet's number
AXIOM_FLEET_REGIONS="eu-central" # Fleet's region
AXIOM_FLEET_SHUTDOWN=true # # Enable or disable delete the fleet after the execution
AXIOM_AUTO_FIX_HOSTKEY=true # Auto-repair known_hosts entries on SSH host-key mismatch before fallback to local mode
# This is a script on your reconftw host that might prep things your way...
#AXIOM_POST_START="~/Tools/axiom_config.sh" # Useful  to send your config files to the fleet
AXIOM_EXTRA_ARGS="" # Leave empty if you don't want to add extra arguments
#AXIOM_EXTRA_ARGS=" --rm-logs" # Example

# Faraday-Server
FARADAY=false # Enable or disable Faraday integration
FARADAY_WORKSPACE="reconftw" # Faraday workspace

# AI
AI_EXECUTABLE="python3" # Python executable fallback if reconftw_ai venv python is not available
AI_MODEL="llama3:8b" # Model to use
AI_REPORT_TYPE="md" # Report type to use (md, txt)
AI_REPORT_PROFILE="bughunter" # Report profile to use (executive, brief, or bughunter)
AI_PROMPTS_FILE="" # Optional custom prompts file (empty uses reconftw_ai default)
AI_MAX_CHARS_PER_FILE=50000 # Max chars loaded per file before truncation
AI_MAX_FILES_PER_CATEGORY=200 # Max files loaded per category for AI context
AI_REDACT=true # Redact sensitive indicators before AI analysis
AI_ALLOW_MODEL_PULL=false # Allow reconftw_ai to auto-pull missing model
AI_STRICT=false # Fail AI analysis if one or more categories have no data

# API & Advanced Web Checks
GRAPHQL_CHECK=true # Detect GraphQL endpoints and introspection
GQLSPECTION=false # Run GQLSpection deep introspection on detected GraphQL endpoints (heavier)
PARAM_DISCOVERY=true # Parameter discovery with arjun
GRPC_SCAN=false # Attempt basic gRPC reflection on common ports
LLM_PROBE=false # Probe discovered web/API endpoints for LLM services with julius
LLM_PROBE_AUGUSTUS=false # Include augustus generator config in julius output

# IPv6
IPV6_SCAN=true # Attempt IPv6 discovery/portscan where addresses exist

# Wordlists / threads for new modules
ARJUN_THREADS=10

# Data & Automation
ASSET_STORE=true # Append assets/findings to assets.jsonl
EXPORT_FORMAT="" # Optional exporter at end of scan: json|html|csv|all
REPORT_ONLY=false # Rebuild report artifacts from existing results (or use --report-only)
QUICK_RESCAN=false # Skip heavy steps if no new subdomains/webs
CHUNK_LIMIT=2000 # Split very large lists into chunks (urls, webs)
HOTLIST_TOP=50 # Number of top risky assets to highlight

# Performance
RESOLVER_IQ=false # Prefer fast/healthy resolvers (experimental)
PERF_PROFILE="balanced" # low|balanced|max

# Estimated durations for skipped heavy modules (seconds)
TIME_EST_NUCLEI=600
TIME_EST_FUZZ=900
TIME_EST_URLCHECKS=300
TIME_EST_JSCHECKS=300
TIME_EST_API=300
TIME_EST_GQL=180
TIME_EST_PARAM=240
TIME_EST_GRPC=120
TIME_EST_IIS=60

# TERM COLORS
bred='\033[1;31m'
bblue='\033[1;34m'
bgreen='\033[1;32m'
byellow='\033[1;33m'
red='\033[0;31m'
blue='\033[0;34m'
green='\033[0;32m'
cyan='\033[0;36m'
yellow='\033[0;33m'
reset='\033[0m'

DNS 리졸버 보호 장치:

  • 누락되거나 비어 있는 리졸버 파일이 있으면 DNS 무차별 대입/해석이 시작되기 전에 빠르게 실패합니다.
  • 리졸버 다운로드는 RESOLVER_DOWNLOAD_CONNECT_TIMEOUT, RESOLVER_DOWNLOAD_MAX_TIME, RESOLVER_DOWNLOAD_RETRY, RESOLVER_DOWNLOAD_RETRY_DELAY로 구성할 수 있습니다.
  • DNS_BRUTE_TIMEOUT=0 및 DNS_RESOLVE_TIMEOUT=0은 기본적으로 하드 타임아웃을 비활성화합니다(매우 큰 대상 집합에 권장). 하트비트 진행 상황은 여전히 DNS_HEARTBEAT_INTERVAL_SECONDS마다 출력됩니다.```bash DNS_BRUTE_TIMEOUT=4h DNS_RESOLVE_TIMEOUT=6h DNS_HEARTBEAT_INTERVAL_SECONDS=20
root@kitploit:~
**전체 세부 정보**: [구성 가이드](https://github.com/six2dez/reconftw/wiki/3.-Configuration-file)를 참조하세요.

---

## 🚀 사용법

reconFTW는 유연한 정찰을 위해 여러 모드와 옵션을 지원합니다. `-h` 플래그를 사용하여 도움말 메뉴를 확인하세요.

### 대상 옵션

| 플래그 | 설명                                                  |
| ---- | ------------------------------------------------------------ |
| `-d` | 단일 대상 도메인 (예: `example.com`)                   |
| `-l` | 대상 도메인 목록이 포함된 파일 (줄당 하나)              |
| `-m` | 다중 도메인 대상 (예: 관련 도메인을 위한 회사 이름) |
| `-x` | 하위 도메인 제외 (범위 외 목록)                       |
| `-i` | 하위 도메인 포함 (범위 내 목록)                           |

### 모드 옵션

| 플래그 | 설명                                                           |
| ---- | --------------------------------------------------------------------- |
| `-r` | **정찰(Recon)**: 능동 공격 없는 전체 정찰                 |
| `-s` | **하위 도메인(Subdomains)**: 하위 도메인 열거, 웹 프로빙 및 테이크오버     |
| `-p` | **수동(Passive)**: 수동 정찰만 수행                              |
| `-a` | **전체(All)**: 전체 정찰 및 능동 취약점 검사         |
| `-w` | **웹(Web)**: 특정 웹 대상에 대한 취약점 검사                 |
| `-n` | **OSINT**: 하위 도메인 열거 또는 공격 없는 OSINT 스캔        |
| `-z` | **젠(Zen)**: 기본 검사 및 일부 취약점을 포함한 경량 정찰 |
| `-c` | **사용자 지정(Custom)**: 특정 함수 실행 (추가 인수 필요)   |
| `-h` | 도움말 메뉴 표시                                                        |

### 일반 옵션

| 플래그              | 설명                                              |
| ----------------- | -------------------------------------------------------- |
| `--deep`          | 심층 스캔 활성화 (느리며, VPS 권장)           |
| `-f`              | 사용자 지정 구성 파일 경로                           |
| `-o`              | 결과 출력 디렉터리                             |
| `-v`              | Ax 분산 스캐닝 활성화                           |
| `--vps-count`     | 이 실행에 대한 Ax 플릿 인스턴스 수 재정의            |
| `-q`              | 속도 제한 설정 (초당 요청 수)                     |
| `-y`              | AI 결과 분석 활성화                              |
| `--check-tools`   | 필수 도구가 없으면 종료                       |
| `--quick-rescan`  | 새 하위 도메인/웹이 없을 때 무거운 모듈 건너뛰기       |
| `--health-check`  | 시스템 상태 확인 실행 후 종료                         |
| `--incremental`   | 마지막 실행 이후 새 발견 사항만 스캔                    |
| `--adaptive-rate` | 오류(429/503) 발생 시 속도 제한 자동 조정     |
| `--dry-run`       | 명령 실행 없이 실행될 내용 표시     |
| `--parallel`      | 독립 함수를 병렬로 실행 (더 빠르며, 더 많은 RAM 사용) |
| `--no-parallel`   | 병렬이 활성화되어 있어도 순차 실행 강제   |
| `--monitor`       | 연속 모니터링 모드 (단일 대상; `-w`는 `-l` 지원) |
| `--monitor-interval` | 모니터 주기 사이의 분 단위 시간                        |
| `--monitor-cycles`   | N주기 후 중지 (0 = 무한)                    |
| `--report-only`   | 스캔 없이 보고서 아티팩트만 재구축                |
| `--refresh-cache` | 캐시된 리졸버/워드리스트 강제 새로고침              |
| `--export`        | 아티팩트 내보내기: `json`, `html`, `csv` 또는 `all`        |

### 사용 예시

1. **단일 대상에 대한 전체 정찰**:   ```bash
   ./reconftw.sh -d target.com -r
  1. 다중 대상 정찰: ```bash ./reconftw.sh -l targets.txt -r -o /path/to/output/
    root@kitploit:~
  2. 심층 정찰 (VPS 권장): ```bash ./reconftw.sh -d target.com -r --deep
    root@kitploit:~
  3. 병렬 모드(더 빠르지만 더 많은 RAM 필요): ```bash ./reconftw.sh -d target.com -r --parallel
    root@kitploit:~
  4. 강제 순차 모드: ```bash ./reconftw.sh -d target.com -r --no-parallel
    root@kitploit:~
  5. 멀티 도메인 정찰(Recon): ```bash ./reconftw.sh -m company -l domains.txt -r
    root@kitploit:~
  6. Ax 통합: ```bash ./reconftw.sh -d target.com -r -v
    root@kitploit:~
  7. Ax와 fleet override 통합: ```bash ./reconftw.sh -d target.com -r -v 30
    root@kitploit:~
  8. 공격을 포함한 전체 정찰 (YOLO 모드): ```bash ./reconftw.sh -d target.com -a
    root@kitploit:~
  9. 도움말 표시: ```bash ./reconftw.sh -h
root@kitploit:~
11. **강제 캐시 새로고침**:   ```bash
./reconftw.sh -d target.com -r --refresh-cache
  1. 모든 보고서 산출물 내보내기: ```bash ./reconftw.sh -d target.com -r --export all
root@kitploit:~
13. **지속적 모니터링 (30분마다, 48주기)**:   ```bash
./reconftw.sh -d target.com -r --monitor --monitor-interval 30 --monitor-cycles 48
  1. 보고서만 다시 생성(스캔 없음): ```bash ./reconftw.sh -d target.com --report-only --export all
root@kitploit:~
**전체 가이드**: [사용 가이드](https://github.com/six2dez/reconftw/wiki/2.-Usage-Guide)를 참조하세요.

---

## ☁️ Ax 프레임워크 지원 (이전 Axiom)

reconFTW는 분산 스캐닝을 위해 [Ax](https://github.com/attacksurge/ax)와 통합되며, 여러 클라우드 인스턴스에 작업을 분산하여 실행 시간을 단축합니다.

- **설정**: Ax 구성(`axiom-configure`) 중 프로비저너로 `reconftw`를 선택합니다.
- **플릿 관리**: 플릿을 자동으로 생성 및 삭제하거나(`AXIOM_FLEET_LAUNCH`, `AXIOM_FLEET_SHUTDOWN`) 기존 플릿을 사용합니다.
- **구성**: `reconftw.cfg`에서 플릿 크기, 리전, 이름을 설정합니다(`AXIOM_FLEET_COUNT`, `AXIOM_FLEET_REGIONS`, `AXIOM_FLEET_NAME`).

**예시**:```bash
./reconftw.sh -d target.com -r -v

세부 사항: 공식 Ax 문서 및 attacksurge/ax 저장소를 참조하세요.


💻 Faraday 지원

reconFTW는 웹 기반 보고 및 취약점 관리를 위해 Faraday와 통합됩니다.

  • 설정: Faraday를 설치하고 faraday-cli로 인증한 후 reconftw.cfg(FARADAY_WORKSPACE)에서 작업 공간을 구성합니다.
  • 사용법: reconftw.cfg에서 FARADAY=true로 활성화합니다.

🧠 AI 통합

reconFTW는 reconftw_ai 도구를 사용하여 스캔 결과에서 상세 보고서를 생성합니다.

  • 모델: 구성 가능한 AI 모델(예: AI_MODEL을 통한 llama3:8b).
  • 보고서 유형: Markdown 또는 일반 텍스트(AI_REPORT_TYPE).
  • 프로필: 경영진, 요약 또는 버그 헌터(AI_REPORT_PROFILE).
  • 구조화된 출력: reconftw는 기계가 읽을 수 있는 보고서를 ai_result/reconftw_analysis.json에 저장합니다.
  • 컨텍스트 제어: AI_MAX_CHARS_PER_FILE 및 AI_MAX_FILES_PER_CATEGORY로 입력 크기를 제한합니다.
  • 안전 제어: AI_REDACT 및 AI_STRICT로 편집 및 엄격 모드를 전환합니다.

예시:```yaml AI_EXECUTABLE="python3" AI_MODEL="llama3:8b" AI_REPORT_TYPE="md" AI_REPORT_PROFILE="bughunter" AI_MAX_CHARS_PER_FILE=50000 AI_MAX_FILES_PER_CATEGORY=200 AI_REDACT=true AI_ALLOW_MODEL_PULL=false AI_STRICT=false

root@kitploit:~
## 🗂️ 데이터 관리

개인 저장소를 사용하여 스캔 데이터와 API 키를 안전하게 관리하세요.

`ASSET_STORE=true`로 설정하면 reconFTW는 각 실행 중에 주요 결과를 `assets.jsonl`로 집계하여, 실행 가능한 변경 사항만 개인 저장소에 동기화하기 쉽게 만듭니다.

### Makefile

제공된 `Makefile`을 사용하여 저장소를 쉽게 관리할 수 있습니다([GitHub CLI](https://cli.github.com/) 필요).

1. **부트스트랩**:   ```bash
   export PRIV_REPO="$HOME/reconftw-data"
   make bootstrap
  1. 업스트림과 동기화: ```bash make sync
    root@kitploit:~
  2. 데이터 업로드: ```bash make upload
    root@kitploit:~
  3. 린트 / 포맷 스크립트: ```bash make lint # shellcheck for reconftw.sh, modules/*.sh & install.sh make fmt # shfmt with project defaults
    root@kitploit:~
  4. 테스트 실행: ```bash make test # unit tests (bats-core) make test-all # unit + integration tests
    root@kitploit:~

수동

  1. GitHub/GitLab에 비공개 저장소를 생성합니다.
  2. 복제 및 구성: ```bash git clone https://github.com/yourusername/reconftw-data cd reconftw-data git commit --allow-empty -m "Initial commit" git remote add upstream https://github.com/six2dez/reconftw git fetch upstream git rebase upstream/main master
    root@kitploit:~
  3. 변경 사항 업로드: ```bash git add . git commit -m "Data upload" git push origin master
    root@kitploit:~
  4. 도구 업데이트: ```bash git fetch upstream git rebase upstream/main master
    root@kitploit:~

🧪 테스트

reconFTW는 자동화된 테스트를 위해 bats-core를 사용합니다.

bats-core 설치```bash

macOS

brew install bats-core

Debian/Ubuntu

apt install bats

From source

git clone https://github.com/bats-core/bats-core.git /tmp/bats sudo /tmp/bats/install.sh /usr/local

root@kitploit:~
### 테스트 실행```bash
# Unit tests only
make test

# Unit + integration tests
make test-all

# Via the runner script
./tests/run_tests.sh         # unit only
./tests/run_tests.sh --all   # unit + integration

테스트 디렉터리 구조```

tests/ ├── run_tests.sh # Test runner script ├── unit/ # Unit tests (fast, no network) │ ├── test_sanitize.bats │ ├── test_utils.bats │ └── test_validation.bats ├── integration/ # Integration tests (require installed tools) │ └── test_smoke.bats ├── security/ # Security tests (injection, etc.) │ └── test_injection.bats ├── mocks/ # Mock tools for offline testing └── fixtures/ # Shared test data files

root@kitploit:~
### 보안 테스트 실행```bash
# Test command injection prevention
make test-security

# Or directly
bats tests/security/

테스트 작성

테스트는 --source-only 패턴을 사용하여 메인 스크립트를 실행하지 않고 함수만 로드합니다:```bash #!/usr/bin/env bats

setup() { source ./reconftw.sh --source-only }

@test "sanitize_domain strips invalid chars" { result="$(sanitize_domain 'exam;ple.com')" [ "$result" = "example.com" ] }

root@kitploit:~
### CI 파이프라인

GitHub Actions 워크플로(`.github/workflows/tests.yml`)는 모든 푸시와 풀 리퀘스트에서 실행됩니다:

1. **ShellCheck** — `reconftw.sh`, `modules/*.sh`, `install.sh` 린트 검사
2. **단위 테스트** — 모든 `tests/unit/*.bats` 파일 실행
3. **통합 테스트** — reconFTW 설치 및 도구 사용 가능 여부 검증

---

## 마인드맵/워크플로

![Mindmap](https://assets.kitploit.com/production/public/readmes/670/935e9af062e82113e5ca06f4b13e80f243430684e8ece2643e868f3d2afa1403.png)

---

## 샘플 비디오

![Video](https://raw.githubusercontent.com/six2dez/reconftw/HEAD/images/reconFTW.gif)

---

## 🤝 기여 방법

전체 기여 가이드(개발 환경 설정, 코드 스타일, 테스트, PR 프로세스 포함)는 [CONTRIBUTING.md](https://github.com/six2dez/reconftw/blob/main/CONTRIBUTING.md)를 참조하세요.

빠른 링크:

- [버그 신고](https://github.com/six2dez/reconftw/issues/new/choose)
- [풀 리퀘스트 제출](https://github.com/six2dez/reconftw/tree/dev) (`dev` 브랜치 대상)
- [행동 강령](https://github.com/six2dez/reconftw/blob/main/CODE_OF_CONDUCT.md)

---

## 🔒 보안

보안 정책, 비밀 관리, 취약점 신고에 대해서는 [SECURITY.md](https://github.com/six2dez/reconftw/blob/main/SECURITY.md)를 참조하세요.

---

## ❓ 도움이 필요하신가요?

- **위키**: [reconFTW Wiki](https://github.com/six2dez/reconftw/wiki)를 탐색하세요.
- **FAQ**: [FAQ](https://github.com/six2dez/reconftw/wiki/7.-FAQs)를 확인하세요.
- **커뮤니티**: [Discord 서버](https://discord.gg/R5DdXVEdTy) 또는 [Telegram 그룹](https://t.me/joinchat/TO_R8NYFhhbmI5co)에 참여하세요.

---

## 💖 이 프로젝트 지원하기

다음 방법으로 reconFTW 개발을 지원할 수 있습니다:

- **Buy Me a Coffee**: [buymeacoffee.com/six2dez](https://www.buymeacoffee.com/six2dez)

[<img src="https://assets.kitploit.com/production/public/readmes/670/1177bf77de4c288d45b816dd405a8b5027116f0b1893449986cf200c765707ad.webp">](https://www.buymeacoffee.com/six2dez)

- **DigitalOcean 추천 링크**: [추천 링크](https://www.digitalocean.com/?refcode=f362a6e193a1&utm_campaign=Referral_Invite&utm_medium=Referral_Program&utm_source=badge)

<a href="https://www.digitalocean.com/?refcode=f362a6e193a1&utm_campaign=Referral_Invite&utm_medium=Referral_Program&utm_source=badge"><img src="https://web-platforms.sfo2.cdn.digitaloceanspaces.com/WWW/Badge%201.svg" alt="DigitalOcean Referral Badge" /></a>

- **GitHub 스폰서십**: [github.com/sponsors/six2dez](https://github.com/sponsors/six2dez)

---

## 🙏 감사의 말

reconFTW를 지원해 주신 다음 서비스들에 특별히 감사드립니다:

- [C99](https://api.c99.nl/)
- [CIRCL](https://www.circl.lu/)
- [NetworksDB](https://networksdb.io/)
- [ipinfo](https://ipinfo.io/)
- [hackertarget](https://hackertarget.com/)
- [Censys](https://censys.io/)
- [Fofa](https://fofa.info/)
- [intelx](https://intelx.io/)
- [Whoxy](https://www.whoxy.com/)

---

## 📝 변경 로그

각 릴리스의 자세한 변경 사항 목록은 [CHANGELOG.md](https://github.com/six2dez/reconftw/blob/main/CHANGELOG.md)를 참조하세요.

---

## 🛠️ 개발

### 프로젝트 구조```
reconftw/
├── reconftw.sh          # Main entry point (~500 lines)
├── reconftw.cfg         # Configuration file
├── modules/             # Phase modules
│   ├── utils.sh         # Utilities, sanitization, caching, circuit breaker
│   ├── core.sh          # Framework core, logging, lifecycle, health check
│   ├── modes.sh         # Scan modes, argument parsing
│   ├── subdomains.sh    # Subdomain enumeration
│   ├── web.sh           # Web analysis, nuclei scans
│   ├── vulns.sh         # Vulnerability scanning
│   ├── osint.sh         # OSINT functions
│   └── axiom.sh         # Ax/Axiom fleet helpers
├── lib/                 # Pure utility libraries
│   └── validation.sh    # Input validation functions
├── tests/               # Test suite (100+ tests)
│   ├── unit/            # Unit tests (bats)
│   ├── integration/     # Integration/smoke tests
│   └── security/        # Injection prevention tests
├── docs/                # Documentation
│   └── ARCHITECTURE.md  # Detailed architecture guide
└── secrets.cfg.example  # Template for API keys

테스트 실행```bash

make test # Unit tests make test-security # Security tests make test-all # All tests make lint # Shellcheck make lint-fix # Auto-fix with shfmt

root@kitploit:~
### 개발 워크플로우```bash
# 1. Source without executing (for testing)
source ./reconftw.sh --source-only

# 2. Test individual functions
sanitize_domain "test;domain.com"

# 3. Run health check
./reconftw.sh --health-check

# 4. Dry run to preview
./reconftw.sh -d example.com -r --dry-run

기여

개발 지침은 CONTRIBUTING.md를, 기술 세부 사항은 docs/ARCHITECTURE.md를 참조하세요.


📜 라이선스

reconFTW는 MIT 라이선스에 따라 라이선스가 부여됩니다.


⭐ 스타 기록

Star History Chart

도구 다운로드
클라우드 버킷
S3Scanner
cloud_enum
  • 클라우드 적용 범위 참고: CloudHunter를 cloud_enum으로 교체한 후 클라우드 버킷 검사에 더 이상 Alibaba OSS 적용 범위가 포함되지 않습니다.
  • 클라우드 출력 마이그레이션: 레거시 cloudhunter_* 버킷 아티팩트가 제거되었습니다. 대신 subdomains/cloud_enum_buckets_trufflehog.txt를 사용하십시오.
  • 역방향 IP 조회: IP 범위를 통해 서브도메인 발견(hakip2host).
  • WebSocket 감사: ws:// 및 wss:// 엔드포인트에서 업그레이드 핸드셰이크 및 출처 처리 검증.
  • gRPC 리플렉션: 노출된 서비스 리플렉션에 대한 일반적인 gRPC 포트 프로빙(grpcurl).
  • LLM 서비스 핑거프린팅(선택 사항): julius로 노출된 LLM 서비스에 대한 발견된 웹/API 엔드포인트 프로빙.
  • 퍼징: 디렉터리 및 매개변수 퍼징 수행(ffuf).
  • 파일 확장자 정렬: 파일 확장자별로 URL 구성.
  • 워드리스트 생성: 퍼징을 위한 사용자 지정 워드리스트 생성.
  • 비밀번호 사전: 라이브 콘텐츠에서 비밀번호 사전 생성(cewler).
  • IIS 짧은 이름 스캔: IIS 짧은 이름 취약점 감지(shortscan).
  • 통합 보고서: 스캔 종료 시 report/report.json 및 report/index.html 자동 생성.
  • ARM 지원: Raspberry Pi 및 ARM 아키텍처(MacOS MX 포함)와 호환.
  • 상태 점검: --health-check를 통한 내장 시스템 상태 점검(Docker HEALTHCHECK에서도 사용).
  • 증분 모드: 마지막 실행 이후의 새 발견 사항만 스캔 (--incremental).
  • 적응형 속도 제한: 429/503 오류 시 자동으로 백오프 (--adaptive-rate).
  • 구조화된 로깅: 고급 분석을 위한 선택적 JSON 로그 출력 (STRUCTURED_LOGGING).
  • 입력 검증: 모든 사용자 입력은 명령 주입을 방지하기 위해 검증됨.
  • 드라이런 모드: 명령을 실행하지 않고 실행될 내용 미리 보기 (--dry-run).
  • 병렬 모드: 더 빠른 스캔을 위해 독립 기능을 병렬로 실행 (--parallel, --no-parallel로 비활성화).
  • 모듈식 아키텍처: 유지보수를 위해 코드베이스를 8개의 집중 모듈로 분할.
  • 비밀 관리: 환경 변수, secrets.cfg 및 Docker 런타임 비밀(SECURITY.md 참조).
  • 회로 차단기: 반복 실패 후 도구를 자동으로 건너뛰어 스캔 중단 방지.
  • 체크포인트 시스템: 마지막 성공 단계에서 중단된 스캔 재개.
  • macOS 네이티브 지원: macOS와 완전 호환(BSD coreutils, Homebrew Bash 4+).