w12scan
w12scan은 네트워크 자산 발견 엔진입니다. WEB 인터페이스를 통해 작업을 전달하면 w12scan이 관련 자산을 자동으로 집계하여 분석에 용이하게 합니다. w12scan은 제 졸업 프로젝트이기도 합니다.
w12scan은 WEB 클라이언트(데이터 표시용)와 Client 클라이언트(관련 자산 데이터 검색용)로 나뉩니다.
여기는 WEB 측의 오픈소스 프로그램이며, client 측은 https://github.com/boy-hack/w12scan-client 에 있습니다.
W12SCAN을 알아보는 동영상

디자인 철학
Python3 + Django + Elasticsearch + Redis(중복 제거 + WEB과 Client 간 통신 미들웨어) 기반으로, WEB API를 사용하여 스캔 대상 추가, 스캔 완료 후 WEB 측에 표시됩니다.

특징
WEB 측
- 강력한 검색 구문
- 검색 구문을 통해 CMS, 서비스 이름, 제목, 국가/지역 등을 검색하여 관련 대상을 빠르게 찾을 수 있습니다.
- title=“abc” # 제목에서 검색
- header=“abc” # HTTP 헤더에서 검색
- body=“123” # 본문에서 검색
- url = “*.baidu.com” # baidu.com의 서브도메인 검색,
*는 와일드카드
- ip = ‘1.1.1.1’ # IP 검색, CIDR
'192.168.1.0/24' 및 와일드카드 '192.168.1.*' 지원
- port = ‘80’ # 포트 검색
- app = ’nginx’ # 구성 요소 검색
- country = ‘cn’ # 국가 검색
- service = ‘mysql’ # 서비스 검색
- bug = 'xx' # 존재하는 취약점 검색
- 사용자 정의 자산 구성
- 특정 회사 관련 도메인 또는 IP 자산을 사용자 정의하면 w12scan이 자동으로 해당 자산 대상을 찾아줍니다. 해당 대상을 탐색할 때 눈에 띄는 표시로 해당 대상의 소속을 알려줍니다.
- 자동 연결
- 대상 상세 정보에 들어가면, 대상이 IP인 경우 해당 IP의 모든 도메인과 해당 C 세그먼트의 모든 도메인이 자동으로 연결됩니다. 대상이 도메인인 경우 인접 사이트, C 세그먼트 및 하위 도메인이 자동으로 연결됩니다.
- 다중 노드 관리
- WEB 측은 몇 분마다 노드의 실행 상태를 확인합니다. 노드 스캔 수와 노드 스캔 로그를 볼 수 있습니다.
- 작업 RESTful
- 작업 추가를 위한 인터페이스를 제공합니다. WEB 측에서 추가하거나 모든 소프트웨어에 해당 인터페이스를 통합할 수 있습니다.
스캔 측(Client)
- 신속한 PoC 검증
- airbug API와 연동하여 최신 PoC 검증 스크립트를 온라인으로 호출합니다. airbug는 취약점 업데이트의 신속성을 보장합니다. airbug 프로젝트를 포크한 후 직접 PoC 규칙을 추가할 수도 있습니다.
- 검증적 공격
- 스캔 측에는 일반적인 취약점 검증 서비스가 내장되어 있습니다. URL을 스캔할 때마다 이러한 서비스가 실행되며, 결과는 최종적으로 w12scan의 WEB 측에 표시됩니다.
- 스캔 및 식별
- 포트 스캔은 masscan을 사용하고, 포트 식별은 nmap을 사용하며, 웹 애플리케이션 식별은 wappalyzer와 경량화된 w11scan(지문 인식)을 호출합니다.
- 쉬운 분산
- 프로그램 아키텍처 설계 시 이 점을 고려하여, 스캔 측은 작업만 수신하고 최종 결과는 WEB 측과만 상호작용하므로 분산이 매우 쉽습니다. 다른 머신에서 스캔 측을 실행하기만 하면 됩니다. Docker 기반으로 분산할 수 있으며, Celery 서비스를 쉽게 통합할 수도 있습니다.
설치
Docker 기반 원클릭 배포
mkdir ~/w12scan-data/db # 이 디렉토리에 w12scan 저장 결과 저장
mkdir ~/w12scan-data/data # 이 디렉토리에 ES 저장 결과 저장
git clone https://github.com/boy-hack/w12scan
cd w12scan
docker-compose up -d
잠시 기다린 후 http://127.0.0.1:8000에 접속하세요.
기본 사용자 이름 및 비밀번호는 boyhack:boyhack입니다.
데이터 저장
docker-compose.yml을 수정하여 ~/w12scan-data/db 또는 ~/w12scan-data/data를 검색해 저장 위치를 변경할 수 있습니다.
관련 문제
- 고가용성을 유지하려면 최소 8G 4H 서버를 준비하세요(ES가 메모리를 많이 소모). 서버가 이 요구 사항을 충족하지 못하는 경우 Dockerfile의 ES 데이터베이스에
- "ES_JAVA_OPTS=-Xms2048m -Xmx2048m"을 추가하여 메모리를 지정해야 하지만, 고가용성은 보장되지 않습니다.
- Windows에서 설치 시
.sh 파일 형식 문제에 주의하세요. https://github.com/boy-hack/w12scan/issues/12 (감사합니다 @Hotsunrize).
- Q: 분산 배포는 어떻게 하나요? A: 배포 방안
- Q: 시작 후 검색 수가 0인가요? A: 스캔 대상을 추가해야 합니다.
- 스캔하면서 검색하지 마세요. Elasticsearch는 데이터를 삽입할 때 분석, 토큰화 등을 수행합니다(이때 효율이 낮습니다). 이때 검색하면 503 오류가 발생할 수 있습니다. 스캔이 완료된 후 검색하는 것이 좋습니다. (추후 데이터 마이그레이션으로 해결 예정)
관련 링크
법률
이 프로그램은 주로 네트워크 데이터를 수집하여 분석 연구에 사용합니다. 이 프로그램을 사용하기 전에 현지 관련 법률을 준수하시기 바랍니다.