Fscan
English
내부망 종합 스캔 도구, 원클릭 자동화 취약점 스캔.
버전: 2.2.2
기능 특성
스캔 능력
- 호스트 발견 - ICMP/Ping 생존 탐지, 대규모 B/C 클래스 생존 통계 지원
- 포트 스캔 - TCP 전체 연결 스캔, 133개 주요 포트 내장, 포트 그룹(web/db/service/all) 지원
- 서비스 식별 - 지능형 프로토콜 식별, 20+ 종 서비스 핑거프린트 매칭 지원
- Web 탐지 - 웹사이트 제목, CMS 핑거프린트, Web 미들웨어, WAF/CDN 식별(40+ 핑거프린트)
브루트포스 능력
- 약한 비밀번호 브루트포스 - 28종 서비스 브루트포스(SSH/RDP/SMB/FTP/MySQL/MSSQL/Oracle/Redis 등)
- Hash 충돌 - NTLM Hash 인증 지원(SMB/WMI)
- SSH 키 로그인 - 개인키 인증 방식 지원
- 지능형 사전 - 100+ 일반 약한 비밀번호 내장, {user} 변수 치환 지원
취약점 탐지
- 고위험 취약점 - MS17-010(이터널블루), SMBGhost(CVE-2020-0796)
- 비인가 접근 - Redis/MongoDB/Memcached/Elasticsearch 등 비인가 탐지
- POC 스캔 - Web 취약점 POC 통합, Xray POC 형식 지원
- DNSLog - DNSLog 외부 전송 탐지 지원
취약점 익스플로잇
- Redis 익스플로잇 - 공개키 쓰기, 예약 작업 쓰기, WebShell 쓰기, 마스터-슬레이브 복제 RCE
- MS17-010 익스플로잇 - ShellCode 주입, 사용자 추가, 명령 실행 지원
- SSH 명령 실행 - 인증 성공 후 자동 명령 실행
로컬 모듈
- 정보 수집 - 시스템 정보, 환경 변수, 도메인 컨트롤러 정보, 네트워크 카드 설정
- 자격 증명 획득 - 메모리 덤프(MiniDump), 키로거, 레지스트리 내보내기
- 권한 유지 - Systemd 서비스, Windows 서비스, 예약 작업, 시작 항목, LD_PRELOAD
- 리버스 Shell - 정방향 Shell, 역방향 Shell, SOCKS5 프록시 서비스
- 백신 탐지 - 대상 호스트에 설치된 보안 소프트웨어 식별
- 흔적 정리 - 로그 정리 도구
입력/출력
- 대상 입력 - IP/CIDR/도메인/URL, 파일 일괄 가져오기 지원
- 제외 규칙 - 특정 호스트, 포트 제외 지원
- 출력 형식 - TXT/JSON/CSV 다중 형식 출력
- 무음 모드 - Banner 없음, 진행 표시줄 없음, 색상 출력 없음
네트워크 제어
- 프록시 지원 - HTTP/SOCKS5 프록시, 네트워크 카드 지정 지원
- 패킷 전송 제어 - 속도 제한, 최대 패킷 전송 수 제어
- 타임아웃 제어 - 포트 타임아웃, Web 타임아웃, 전역 타임아웃 독립 설정
- 동시성 제어 - 포트 스캔 스레드, 서비스 스캔 스레드 독립 설정
확장 기능
- SDK 임베딩 -
pkg/fscan에서 Go SDK 제공, Agent 또는 보안 플랫폼에 임베딩 가능, 작업 제어(Pause/Resume), 실시간 진행 콜백, TaskID 추적 지원
- Web 관리 인터페이스 - 시각적 스캔 작업 관리(조건부 컴파일 -tags web)
- Lab 훈련장 환경 - 테스트 학습용 Docker 훈련장 내장
- 플러그인 아키텍처 - 서비스 플러그인/Web 플러그인/로컬 플러그인 분리, 확장 용이
- 다국어 지원 - 중/영어 인터페이스 전환(-lang zh/en)
- 성능 통계 - JSON 형식 성능 보고서(-perf)
v2.1.0 업데이트 로그
이번 업데이트는 262개 커밋을 포함하며, 30개 신규 기능, 120개 수정, 54개 리팩토링, 14개 성능 최적화, 20개 테스트 강화를 포함합니다.
아키텍처 리팩토링
- 전역 변수 제거 - Config/State 객체로 마이그레이션, 동시성 안전성 및 테스트 가능성 향상
- SMB 플러그인 통합 - smb/smb2/smbghost/smbinfo를 통합 플러그인으로 통합, smb_protocol.go 추가
- 서비스 탐지 리팩토링 - Nmap 스타일 fallback 메커니즘 구현, 포트 핑거프린트 식별 전략 최적화
- 출력 시스템 리팩토링 - TXT 실시간 디스크 플러시 + 이중 쓰기 메커니즘, 결과 손실 및 순서 뒤바뀜 문제 해결
- i18n 프레임워크 업그레이드 - go-i18n으로 마이그레이션, core/plugins/webscan 모듈 완전 커버
- HostInfo 리팩토링 - Ports 필드를 string에서 int로 변경, 타입 안전성 확보
- 함수 복잡도 최적화 - clusterpoc(125→30), EnhancedPortScan(111→20)
- 코드 감사 - P0-P2 수준 문제 수정, deadcode 정리
- 로그 시스템 최적화 - LogDebug 호출 정리(71→18), 시작 로그 출력 간소화
성능 최적화
- 정규식 사전 컴파일 - 전역 정규식 사전 컴파일, 반복 컴파일 오버헤드 방지
- 메모리 최적화 - map[string]bool을 map[string]struct{}로 변경하여 메모리 절약
- 동시 핑거프린트 매칭 - 다중 고루틴 병렬 매칭, 식별 속도 향상
- 연결 재사용 - SOCKS5 전역 다이얼러 재사용, 반복 핸드셰이크 방지
- 슬라이딩 윈도우 스케줄링 - 적응형 스레드 풀 + 스트리밍 반복자, 포트 스캔 최적화
- CEL 캐시 최적화 - POC 스캔 CEL 환경 캐시, 반복 초기화 감소
- 패키지 수준 변수 추출 - proxyFailurePatterns/resourceExhaustedPatterns/sslSecondProbes 등
- 용량 사전 할당 - 변환 체인 단순화, 단일 문자열 치환
- 동시성 안전 최적화 - 잠금 세분성 및 메모리 할당 최적화
신규 기능
- Web 관리 인터페이스 - 시각적 스캔 작업 관리, 반응형 레이아웃 및 진행 표시
- 다중 형식 POC 적응 - xray 및 afrog 형식 POC 지원
- 지능형 스캔 모드 - 블룸 필터 중복 제거 + 프록시 최적화
- 강화된 핑거프린트 라이브러리 - FingerprintHub 통합(3139개 핑거프린트)
- Favicon 핑거프린트 식별 - mmh3 및 MD5 이중 형식 hash 매칭 지원
- 범용 버전 추출기 - 서비스 버전 정보 자동 추출
- 핑거프린트 우선순위 정렬 - 매칭 결과 지능형 정렬
- 지능형 프로토콜 탐지 - HTTP/HTTPS 프로토콜 유형 자동 식별
- 네트워크 카드 지정 기능 - VPN 시나리오 지원(-iface 매개변수)
- 호스트 제외 파일 - 파일에서 제외 호스트 읽기 지원(-ehf 매개변수)
- ICMP 토큰 버킷 속도 제한 - 고속 스캔으로 인한 라우터 다운 방지
- 포트 스캔 재시도 - 실패 시 자동 재스캔 메커니즘
- RDP 실제 인증 - grdp 라이브러리 통합으로 시스템 핑거프린트 식별 구현
- SMB/FTP 파일 목록 - 익명 접근 시 파일 자동 나열
- 302 리다이렉트 이중 식별 - 원본 응답과 리다이렉트 후 응답 핑거프린트 동시 식별
- TXT 출력 URL 요약 - 끝에 Web 서비스 URL 목록 추가로 일괄 테스트 용이
- nmap 핵심 통합 - 3대 개선: 탐지 전략/매칭 엔진/버전 파싱
- 플러그인 선택적 컴파일 - Build Tags 시스템, 서비스/로컬/Web 플러그인 독립 컴파일 지원
- 기본 포트 확장 - 62개에서 133개 주요 포트로 확장
- 전체 포트 스캔 지원 - 포트 범위 제한 확대
- HTTP 리다이렉트 제어 - 구성 가능한 리다이렉트 횟수 제한
- 성능 분석 지원 - pprof 성능 분석 및 benchmark 테스트 추가
- TCP 패킷 통계 - 서비스 플러그인 TCP 패킷 전송 통계 지원
- fscan-lab 훈련장 - 내부망 침투 훈련 플랫폼, 모든 취약점 시나리오 커버(미완성)
- Redis 익스플로잇 강화 - 완전한 Redis 익스플로잇 기능 이식(공개키/예약 작업/WebShell/마스터-슬레이브 RCE 쓰기)
- rsync 플러그인 리팩토링 - go-rsync 라이브러리로 인증 로직 리팩토링
버그 수정(120개, 주요 수정 사항 나열)
- RDP 널 포인터 panic - 인증서 파싱으로 인한 크래시 수정(#551)
- 일괄 스캔 누락 - 대규모 스캔 누락 문제 수정(#304)
- JSON 출력 형식 - 출력 형식 오류 수정(#446)
- Redis 약한 비밀번호 탐지 - 탐지 누락 문제 수정(#447)
- 결과 실시간 저장 - 스캔 결과 미저장 문제 수정(#469)
- Nmap 파싱 오버플로 - 8진수 이스케이프 파싱 버그 수정(#478)
- 핑거프린트 식별 경쟁 상태 - webtitle/webpoc 경쟁 상태 문제 수정(#474)
- MySQL 연결 검증 - information_schema 라이브러리로 검증 변경
- 프록시 포트 오판 - 프록시 모드에서 포트 상태 판단 오류 수정
- Context 타임아웃 - 22곳 플러그인 타임아웃 미응답 문제 수정
- ICMP 경쟁 조건 - 동시 스캔 경쟁 문제 수정
- IPv6 주소 형식 - 4곳 주소 형식 문제 수정
- POC 고동시성 멈춤 - Context 미전파 문제 수정
- Ctrl+C 결과 손실 - 시그널 처리 추가로 결과 쓰기 보장
- SOCKS5 전체 에코 - 프록시 연결 검증 추가
- 서비스 탐지 누수 - 연결 미종료 문제 수정
- webtitle 응답 폐기 - 일부 응답 데이터 폐기로 식별 실패 문제 수정
- TXT 취약점 정보 누락 - 출력에서 취약점 상세 누락 수정
- JSON 핑거프린트 누락 - SERVICE 결과 Target 형식 통일
- 스캔 소요 시간 표시 - 완료 소요 시간이 0으로 표시되는 문제 수정
- 허위 취약점 기록 - TXT 출력 시스템 리팩토링으로 오탐 제거
- Redis 크로스 플랫폼 경로 - 익스플로잇 기능의 경로 및 타임아웃 문제 수정
- Windows 컴파일 경고 - fscan-lite 플랫폼 호환성 수정
- Go 1.20 호환 - 의존성 다운그레이드로 호환성 유지
테스트 강화(20개)
- 단위 테스트 - 핵심 모듈 커버리지 74-100%
- 동시성 안전 테스트 - State 객체, 핑거프린트 매칭 엔진 전용 테스트
- 통합 테스트 - Web 스캔/포트 스캔/서비스 탐지/SSH 인증/ICMP 탐지
- CLI 매개변수 테스트 - 명령줄 매개변수 파싱 검증
- 성능 벤치마크 테스트 - AdaptivePool, 서비스 탐지 전략 benchmark
- ResultBuffer 테스트 - 중복 제거 및 완전도 점수 검증
엔지니어링 개선
- CI 프로세스 최적화 - golangci-lint v2 업그레이드, 빌드 단계 간소화
- Issue 자동화 - GitHub Issue 템플릿 최적화, Project 자동화 워크플로
- Lint 전체 수정 - revive/errcheck/shadow/staticcheck/gosimple 모두 통과
- README 재작성 - 중/영어 문서 전면 업데이트
- 코드 형식 통일 - gofmt/goimports 표준화
빠른 시작
# C 클래스 스캔
./fscan -h 192.168.1.1/24
# 포트 지정
./fscan -h 192.168.1.1 -p 22,80,443,3389
# 생존 탐지만
./fscan -h 192.168.1.1/24 -ao
# 브루트포스 비활성화
./fscan -h 192.168.1.1/24 -nobr
# Web 스캔
./fscan -u http://192.168.1.1
# 로컬 플러그인
./fscan -local systeminfo
# Hash 충돌
./fscan -h 192.168.1.1 -m smb2 -user admin -hash xxxxx
# Redis 공개키 쓰기
./fscan -h 192.168.1.1 -m redis -rf id_rsa.pub
컴파일
# 표준 컴파일
go build -ldflags="-s -w" -trimpath -o fscan .
# Web 관리 인터페이스 포함
go build -tags web -ldflags="-s -w" -trimpath -o fscan-web .
설치
# Arch Linux
yay -S fscan-git
실행 스크린샷
fscan -list-plugins를 사용하여 현재 빌드에서 사용 가능한 모듈 이름, 유형, 기본 포트 및 호출 방식을 확인하세요.
-m으로 고정 포트가 있는 모듈을 지정하고 -p/-pf를 전달하지 않은 경우, 스캔 범위는 선택한 모듈의 기본 포트 합집합을 사용합니다.
예를 들어 fscan -hf ip.txt -m netbios는 137,139를 사용합니다. -p를 지정하면 비표준 포트를 스캔할 수 있으며, Web 모듈은 여전히 일반 포트 범위를 사용합니다.
-pwda/-usera는 기본 사전에 추가됩니다. -pwd/-user 또는 -pwdf/-userf와 함께 사용하면 지정된 사전에 추가됩니다.
fscan.exe -h 192.168.x.x


fscan.exe -h 192.168.x.x -rf id_rsa.pub (Redis 공개키 쓰기)

fscan.exe -h 192.168.x.x -m ssh -user root -pwd password

fscan.exe -h 192.168.x.x -m ssh -user root -pwda pass1 pass2 pass3 (여러 비밀번호 추가)
fscan.exe -h 192.168.x.x -p80 -proxy http://127.0.0.1:8080
