
꽤 멋진 취약점 스캐너
Flan Scan은 가벼운 네트워크 취약점 스캐너입니다. Flan Scan을 사용하면 네트워크에서 열려 있는 포트를 쉽게 찾고, 서비스와 버전을 식별하며, 네트워크에 영향을 미치는 관련 CVE 목록을 얻을 수 있습니다.
Flan Scan은 Nmap과 vulners 스크립트를 래핑하여 Nmap을 본격적인 네트워크 취약점 스캐너로 변환합니다. Flan Scan을 사용하면 컨테이너 내에서 Nmap을 로컬로 쉽게 배포하고, 결과를 클라우드로 푸시하며, Kubernetes에서 스캐너를 배포할 수 있습니다.
이 저장소를 클론합니다.
Docker가 설정되어 있는지 확인합니다:
$ docker --version
스캔하려는 IP 주소 또는 CIDR 목록을 shared/ips.txt에 추가합니다.
컨테이너를 빌드합니다:
$ make build
$ make start
기본적으로 flan은 LaTeX 보고서를 생성합니다. 다른 형식을 얻으려면 다음을 실행하세요:
$ make html
추가로 지원되는 형식은 md (마크다운), html 및 json입니다.
스캔이 완료되면 shared/reports에서 스캔을 요약한 보고서를 찾을 수 있습니다. shared/xml_files에서 Nmap의 원시 XML 출력도 확인할 수 있습니다.
기본적으로 Flan Scan은 다음 Nmap 명령을 실행합니다:
$ nmap -sV -oX /shared/xml_files -oN - -v1 $@ --script=vulners/vulners.nse <ip-address>
-oX 플래그는 스캔 결과의 XML 버전을 /shared/xml_files 디렉토리에 추가하고, -oN - 플래그는 "일반" Nmap 결과를 콘솔에 출력합니다. -v1 플래그는 상세 수준을 1로 높이고, -sV 플래그는 서비스 감지 스캔(Nmap의 기본 포트 및 SYN 스캔 외에도)을 실행합니다. --script=vulners/vulners.nse는 감지된 서비스를 관련 CVE와 매칭하는 스크립트입니다.
Nmap을 사용하면 UDP 스캔을 실행하고 IPv6 주소를 스캔할 수도 있습니다. 이러한 플래그 및 기타 플래그를 Flan Scan의 Nmap 명령에 추가하려면 make build를 실행한 후 컨테이너를 실행하고 다음과 같이 Nmap 플래그를 전달하세요:
$ docker run -v $(CURDIR)/shared:/shared flan_scan <Nmap-flags>
Flan Scan은 현재 LaTeX 보고서와 원시 XML Nmap 출력 파일을 GCS 버킷 또는 AWS S3 버킷으로 푸시하는 것을 지원합니다. Flan Scan은 결과를 클라우드로 푸시하기 위해 두 개의 환경 변수가 필요합니다. 첫 번째는 upload로, gcp 또는 aws 두 값 중 하나를 취합니다. 두 번째는 bucket이며, 값은 결과를 업로드할 S3 또는 GCS 버킷의 이름입니다. 환경 변수를 설정하려면 make build를 실행한 후 다음과 같이 환경 변수를 설정하여 컨테이너를 실행하세요:
$ docker run --name <컨테이너-이름> \
-v $(CURDIR)/shared:/shared \
-e upload=<gcp 또는 aws> \
-e bucket=<버킷-이름> \
-e format=<선택 사항, md, html 또는 json 중 하나> \
flan_scan
아래는 컨테이너에 필요한 AWS 또는 GCP 인증 키를 환경 변수로 추가하는 몇 가지 예제입니다. 그러나 이는 Kubernetes에서 필요한 환경 변수를 노출하는 시크릿 또는 다른 시크릿 관리 도구를 통해서도 수행할 수 있습니다.
GCS 서비스 계정의 프라이빗 키를 /shared 파일에 복사합니다.
$ cp <로컬-gcs-키-경로>/key.json shared/
GOOGLE_APPLICATION_CREDENTIALS 환경 변수를 GCS 키 경로로 설정하여 컨테이너를 실행합니다.
$ docker run --name <컨테이너-이름> \
-v $(CURDIR)/shared:/shared \
-e upload=gcp \
-e bucket=<버킷-이름> \
-e GOOGLE_APPLICATION_CREDENTIALS=/shared/key.json
-e format=<선택 사항, md, html 또는 json 중 하나> \
flan_scan
AWS_ACCESS_KEY_ID 및 AWS_SECRET_ACCESS_KEY 환경 변수를 S3 서비스 계정의 해당 변수로 설정합니다.
docker run --name <컨테이너-이름> \
-v $(CURDIR)/shared:/shared \
-e upload=aws \
-e bucket=<s3-버킷-이름> \
-e AWS_ACCESS_KEY_ID=<your-aws-access-key-id> \
-e AWS_SECRET_ACCESS_KEY=<your-aws-secret-access-key> \
-e format=<선택 사항, md, html 또는 json 중 하나> \
flan_scan
Flan Scan을 Kubernetes와 같은 컨테이너 오케스트레이션 시스템에 배포할 때는 컨테이너가 / 디렉토리에 ips.txt라는 파일에 접근할 수 있어야 합니다. Kubernetes에서는 ConfigMap을 사용하여 로컬 파일 시스템의 파일을 마운트하고, 배포 후 컨테이너가 접근할 수 있는 볼륨으로 만들 수 있습니다. kustomization.yaml 파일에는 shared-files라는 ConfigMap을 생성하는 예제가 있습니다. 이 ConfigMap은 deployment.yaml 파일에서 볼륨으로 마운트됩니다.
Kubernetes에 Flan Scan을 배포하는 몇 가지 간단한 단계는 다음과 같습니다:
kustomization.yaml에 로컬 ips.txt 파일의 경로를 추가한 다음 kubectl apply -k .를 실행합니다.kubectl get configmap을 실행하여 ConfigMap이 제대로 생성되었는지 확인합니다.deployment.yaml 내에서 클라우드 제공업체에 필요한 환경 변수와 시크릿을 설정합니다.kubectl apply -f deployment.yaml을 실행하여 Flan Scan을 실행하는 배포를 시작합니다.Flan Scan이 Kubernetes에서 성공적으로 실행되어야 합니다!