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 (markdown)、html 和 json。
扫描完成后,您可以在 shared/reports 中找到汇总报告的摘要文件。原始 Nmap XML 输出文件位于 shared/xml_files 中。
默认情况下 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 中添加这些及其他标志,请在运行 make build 后运行容器并传入 Nmap 标志,示例如下:
$ docker run -v $(CURDIR)/shared:/shared flan_scan <Nmap-flags>
Flan Scan 目前支持将 Latex 报告和原始 Nmap XML 输出文件推送至 GCS 存储桶或 AWS S3 存储桶。Flan Scan 需要两个环境变量才能将结果推送至云端。第一个是 upload,其值为 gcp 或 aws。第二个是 bucket,其值为用于上传结果的 S3 或 GCS 存储桶的名称。要设置环境变量,请在运行 make build 后运行容器并设置环境变量,示例如下:
$ docker run --name <container-name> \
-v $(CURDIR)/shared:/shared \
-e upload=<gcp or aws> \
-e bucket=<bucket-name> \
-e format=<可选,值为 md、html 或 json 之一> \
flan_scan
以下是一些将所需的 AWS 或 GCP 认证密钥作为环境变量添加到容器中的示例。不过,也可以通过 Kubernetes 中的 Secret 来暴露所需的环境变量,或使用其他密钥管理工具来实现。
将 GCS 服务账号的私钥复制到 /shared 目录
$ cp <path-to-local-gcs-key>/key.json shared/
运行容器并设置 GOOGLE_APPLICATION_CREDENTIALS 环境变量为 GCS 密钥的路径
$ docker run --name <container-name> \
-v $(CURDIR)/shared:/shared \
-e upload=gcp \
-e bucket=<bucket-name> \
-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 <container-name> \
-v $(CURDIR)/shared:/shared \
-e upload=aws \
-e bucket=<s3-bucket-name> \
-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 实现,该 ConfigMap 将本地文件系统中的文件挂载为卷,以便容器在部署后访问。kustomization.yaml 文件包含如何创建名为 shared-files 的 ConfigMap 的示例。该 ConfigMap 随后在 deployment.yaml 中作为卷挂载。
以下是部署 Flan Scan 到 Kubernetes 的简单步骤:
kustomization.yaml 中添加本地 ips.txt 文件的路径,然后运行 kubectl apply -k .。kubectl get configmap 确保 ConfigMap 已正确创建。deployment.yaml 中设置云提供商所需的环境变量和密钥。kubectl apply -f deployment.yaml 启动运行 Flan Scan 的 Deployment。Flan Scan 应该已成功在 Kubernetes 上运行!