
출처가 포함된 취약점 트리아지. 로컬로 구축된 코퍼스(NVD/KEV/EPSS, ExploitDB, nmap script.db)에서 CVE를 식별하고, 실행 시 대상에 미치는 영향에 따라 분류된 검증 명령을 출력합니다.
취약점 분류 도구입니다. 스캔이 이미 찾아낸 결과를 받아서 어떤 CVE가 그럴듯하게 적용되는지 판단하고, 그 판단의 신뢰도와 근거를 알려주며, 직접 확인할 수 있는 명령어를 제공합니다.
스캔을 수행하지도 않고, 익스플로잇을 수행하지도 않습니다.
git clone https://github.com/xGhst0/reconkg && cd reconkg && pip install -e . --break-system-packages && python -m reconkg.selfcheck
마지막 단계는 무엇을 볼 수 있고 볼 수 없는지 보고합니다. nmap의 script.db가 발견되었는지, 어떤 코퍼스가 구성되어 있는지, 그리고 얼마나 많은 현실적인 지문이 실제로 단서를 만들어내는지입니다. 먼저 이것을 실행하세요. 기본 설정 상태에서 답은 "손으로 작성한 9개의 CVE"이며, selfcheck는 그렇게 말해주므로 다른 것을 가정하게 두지 않습니다.
내장된 9개의 항목은 데모용 고정 데이터입니다. 실제 용도로 사용하려면:
export NVD_API_KEY=... # free: https://nvd.nist.gov/developers/request-an-api-key
python -m reconkg.fetch --dest ~/.reconkg/feeds --all
python -m reconkg.builddb --feeds ~/.reconkg/feeds --out ~/.reconkg/vuln.db
export RECONKG_VULN_DB=~/.reconkg/vuln.db
export RECONKG_EXPLOIT_DB=~/.reconkg/exploits.db
export RECONKG_SCRIPT_DB=/usr/share/nmap/scripts/script.db
API 키가 없으면 NVD는 30초당 5회 요청으로 제한되며, 전체 가져오기는 25분 대신 약 4시간이 걸립니다. 체크포인트를 지원하므로 중단된 가져오기는 재개됩니다. --since는 변경된 항목만 가져옵니다.
코퍼스 변수가 설정되어 있는데 파일을 열 수 없으면 reconkg는 시작을 거부합니다. 300,000개를 요청했는데 조용히 9개 항목만 제공한다면, 아무것도 찾지 못하면서도 성공한 것처럼 보이는 스캔이 될 것이기 때문입니다.
python -m reconkg.app # serves http://127.0.0.1:8765/ui
python -m reconkg.console # REPL
app는 루프백에만 바인딩되며, 이를 변경하는 플래그는 없습니다. 이 프로세스는 스캔 결과를 보관하고 테스트 중인 호스트를 대상으로 명령을 실행합니다. SSH 터널은 그것이 나머지 네트워크에서 접근 가능하게 되는 것에 비하면 작은 대가입니다. --port로 포트를 옮길 수 있고, RECONKG_PORT로 기본값을 설정합니다.
인증. 모든 라우트에는 Authorization: Bearer <token>이 필요하며, 이는 name:role:token 형식의 RECONKG_TOKENS에서 가져옵니다(역할: viewer, scanner, operator, admin; 토큰은 최소 16자). 설정되지 않은 경우, app은 해당 프로세스 전용으로 하나를 생성하여 시작 시 출력합니다 — 디스크에 기록되지 않으며, 재시작할 때마다 달라집니다.
브라우저는 일반 탐색에 헤더를 붙일 수 없으므로, /ui를 직접 열면 401이 발생합니다. 헤더를 주입하는 확장 프로그램을 사용하거나 API를 직접 호출하세요:
export RECONKG_TOKENS="me:admin:$(openssl rand -hex 16)"
curl -H "Authorization: Bearer ${RECONKG_TOKENS##*:}" \
http://127.0.0.1:8765/api/corpus
UI는 클릭 시 출처 정보와 함께 지식 그래프를 표시하므로, 점수를 신뢰하는 대신 왜 특정 CVE가 호스트에 연결되었는지 확인할 수 있으며, KEV와 EPSS를 반영하여 분류 우선순위 순으로 정렬된 원장도 볼 수 있습니다.
모든 제안 명령에는 대상에 대해 실행했을 때 어떤 일이 일어나는지 설명하는 NSE 카테고리가 함께 표시됩니다. 이 용어는 nmap의 것이며, 여기서 새로 만든 것이 아닙니다.
| 카테고리 | reconkg의 동작 |
|---|---|
safe, discovery, version | 구성됨, 기본적으로 표시 |
intrusive, vuln, unclassified | 구성됨, 체크박스를 선택하면 권한 부여 경고와 함께 표시 |
exploit, dos, fuzzer, brute | 이름만 언급, 절대 구성하지 않음 |
마지막 행이 경계입니다. 단서에 대해 동작하는 익스플로잇이 존재하면, reconkg는 해당 모듈이나 템플릿과 그것을 찾을 수 있는 위치를 알려줍니다. 그러나 그것을 대상이 이미 포함된 호출로 조립하지는 않습니다. Metasploit 제안은 show options에서 멈춥니다 — RHOSTS를 다시 읽고 권한을 부여받은 호스트가 맞는지 확인하는 단계입니다.
이는 소유한 박스에서는 키 입력 한 번의 차이지만, 이 도구가 무엇인지에 있어서는 훨씬 큰 차이입니다.
안전성은 도구 단위가 아니라 검사 단위로 분류됩니다. 이는 까다로움 때문이 아닙니다. 현재 nuclei CVE 템플릿은 익스플로잇을 통해 탐지를 수행합니다 — 하나는 Langflow RCE를 통해 subprocess.run('cat /etc/passwd') 페이로드를 전송하고 root:.*:0:0:에 매칭합니다. "nuclei는 탐지하고, Metasploit은 익스플로잇한다"고 가정하는 것은 마주치는 첫 번째 템플릿에서 틀리게 되므로, nuclei는 unclassified로 취급되어 옵트인 뒤에 위치합니다.
selfcheck는 미화된 수치가 아닌 실제 적중률을 출력합니다.describe()는 30일이 지난 코퍼스를 오래된 것으로 표시하고 어떤 피드가 오래되었는지 명시합니다.pip install -r requirements-dev.txt
python -m pytest tests/ -q # 1219 tests
python -m audit.mutation # mutation testing, 12 targets at 100%
python -m audit.scale_bench # corpus scale benchmark
docs/에는 설계 노트와 위 결정들의 근거가 담겨 있습니다. audit/AUDIT.md는 발견 기록입니다: 열 번의 적대적 라운드에 걸친 47건의 발견 사항으로, 그중 13건을 차지하는 하나의 버그 형태에 대한 분석과 그것을 막은 것과 막지 못한 것에 대한 솔직한 평가를 포함합니다.
MIT — LICENSE를 참조하세요.
reconkg는 취약점 데이터를 포함하지 않습니다. 코퍼스는 직접 가져온 피드로부터 사용자의 머신에서 구축되므로, 해당 라이선스를 준수할 책임은 사용자에게 있습니다. 특히 ExploitDB의 인덱스는 GPL-2.0-or-later이며 여기서는 의도적으로 재배포되지 않습니다.
reconkg가 출력하는 모든 것은 사람이 실행하기 위한 제안입니다. 소유하지 않았거나 서면으로 테스트 허가를 받지 않은 시스템에 대해 intrusive 또는 vuln 검사를 실행하는 것은 대부분의 관할 구역에서 불법입니다.