Linkmetax
← 返回博客
·Linkmetax 运维团队·11 分钟阅读

企业 IT 资产盘点:如何利用开源工具自动化发现内网僵尸服务器与未授权资产?

企业内网 IT 资产盘点完整方案。Nmap / Masscan / OSQuery 扫描脚本、影子 IT 发现、CMDB 建立、僵尸服务器清理实战。

IT 资产管理内网扫描影子 IT

「我们公司有多少台服务器?技术老板回答『大概 200-400 台吧』。盘点完才发现:实际 638 台,其中 110 台没业务在跑,120 台运维不知道存在。」

这种「资产黑洞」是大企业的通病——既费钱(每台云主机几百到几千一月),又是安全洞(无人维护的机器 = 黑客最爱)。这篇给一套自动化盘点方案。


一、3 类隐藏资产

类 1:僵尸服务器

  • 业务下线了,服务器忘记关
  • 离职员工的开发机 / 测试机
  • 项目结束了,机器没归档

类 2:影子 IT

  • 员工自己开的服务器(公司不知道)
  • 部门私采的云资源(没走 IT)
  • 历史遗留:合并 / 收购带来的未盘点

类 3:未授权服务

  • 服务器上跑着没批准的服务(如开 SSH 给私人 / 装挖矿)
  • 内网开放危险端口
  • 弱密码 / 默认凭据

二、为什么必须盘点

财务理由

  • 100 台僵尸云主机 × 500 元/月 = 5 万/月浪费
  • 3 年 = 180 万

安全理由

  • 无人维护 = 不打补丁 = 黑客最爱
  • 一台被攻破 → 内网横向渗透
  • 某客户案例:被勒索 → 入口是 2 年没人管的开发机

合规理由

  • 等保 2.0 / ISO 27001 / SOC 2 都要求 IT 资产台账
  • 审计时拿不出 = 不合规

三、自动化盘点 4 步法

Step 1: 全网扫描(活跃 IP / 开放端口)
Step 2: 服务识别(每个端口是什么服务)
Step 3: 资产关联(IP → 业务 → 负责人)
Step 4: 持续监控(新增 / 变化告警)

四、Step 1:全网扫描

工具 1:nmap(经典)

# 扫描整个内网 C 段
nmap -sn 10.0.0.0/16 -oG live-hosts.txt

# 扫描每台机器开放端口
nmap -p- -T4 -A 10.0.0.1 -oN host-details.txt

工具 2:masscan(极速)

比 nmap 快 100 倍,1 分钟扫完 65535 端口

sudo masscan 10.0.0.0/16 -p1-65535 --rate 10000 -oG ports.txt

工具 3:rustscan

rustscan -a 10.0.0.0/16 -- -A -sC

内网扫描合规建议

  • ⚠️ 必须得到 IT 负责人书面授权
  • 扫描时段选业务低峰
  • 不要扫描合作伙伴 / 客户的 IP
  • 保留扫描日志

五、Step 2:服务识别

工具:nmap + 服务指纹

nmap -sV -p- 10.0.0.1
# 输出:22/tcp open ssh OpenSSH 8.9
#       3306/tcp open mysql MySQL 8.0.32

自动化报告

#!/bin/bash
# scan-report.sh
TARGETS="10.0.0.0/16"
DATE=$(date +%Y%m%d)

mkdir -p reports
masscan $TARGETS -p1-65535 --rate 5000 -oJ reports/scan-$DATE.json

# 转成 CSV 给业务
python parse_scan.py reports/scan-$DATE.json reports/scan-$DATE.csv

六、Step 3:资产关联

发现的 IP 必须关联到业务。

方法 1:与 CMDB 对账

  • 公司有 CMDB?拿扫描结果对账
  • 没在 CMDB 的 = 影子资产

方法 2:与云厂商账单对账

  • 阿里云 / 腾讯云账单导出
  • 列出所有 ECS / VPC
  • 与扫描结果比对

方法 3:OSQuery 主动上报

# /etc/osquery/osquery.conf
{
  "schedule": {
    "system_info": {
      "query": "SELECT hostname, cpu_brand, physical_memory FROM system_info;",
      "interval": 3600
    },
    "open_ports": {
      "query": "SELECT * FROM listening_ports;",
      "interval": 3600
    }
  }
}

所有服务器装 OSQuery → 上报到中心 → 自动入 CMDB。

方法 4:DHCP / DNS 日志

  • DHCP 日志:什么 MAC 拿过什么 IP
  • DNS 查询:什么 IP 在解析什么域名 → 推断业务

七、Step 4:持续监控

自动化日扫描

# /etc/cron.daily/asset-scan
#!/bin/bash
TODAY=$(date +%Y%m%d)
YESTERDAY=$(date -d "yesterday" +%Y%m%d)

masscan 10.0.0.0/16 -p22,80,443,3306,5432,6379,3389 \
    --rate 5000 -oJ /var/log/scan-$TODAY.json

# 对比昨天,找新增 IP
python compare_assets.py \
    /var/log/scan-$YESTERDAY.json \
    /var/log/scan-$TODAY.json \
    --new-hosts /var/log/new-hosts-$TODAY.txt

# 有新增 → 告警
if [ -s /var/log/new-hosts-$TODAY.txt ]; then
    curl -X POST https://feishu-webhook \
        -d "{\"text\":\"⚠️ 内网新增主机: $(cat /var/log/new-hosts-$TODAY.txt)\"}"
fi

告警维度

  • 新增主机
  • 新开放端口
  • 服务版本变化(可能被攻破)
  • 长时间不活跃(疑似僵尸)

八、自动化扫描脚本(Linkmetax 内部用)

#!/bin/bash
# discover-assets.sh - 内网资产自动发现 + 存活探测

SUBNETS=("10.0.0.0/16" "192.168.0.0/16" "172.16.0.0/12")
OUTPUT_DIR="/var/log/asset-discovery"
DATE=$(date +%Y%m%d_%H%M%S)

mkdir -p "$OUTPUT_DIR"

echo "===== 资产发现开始: $DATE ====="

for subnet in "${SUBNETS[@]}"; do
    echo "--- 扫描 $subnet ---"

    # 1. 存活探测
    nmap -sn $subnet -oG "$OUTPUT_DIR/live-$DATE.gnmap"

    # 2. 端口扫描(常见端口)
    masscan $subnet -p21,22,23,80,443,445,1433,3306,3389,5432,6379,8080,8443,9200 \
        --rate 5000 -oJ "$OUTPUT_DIR/ports-$DATE.json"

    # 3. 服务指纹(针对存活主机)
    grep "Up$" "$OUTPUT_DIR/live-$DATE.gnmap" | awk '{print $2}' > "$OUTPUT_DIR/live-ips-$DATE.txt"
    nmap -sV -iL "$OUTPUT_DIR/live-ips-$DATE.txt" -oN "$OUTPUT_DIR/services-$DATE.txt"
done

# 汇总
LIVE_COUNT=$(cat "$OUTPUT_DIR/live-ips-"*.txt | sort -u | wc -l)
echo "===== 发现存活主机: $LIVE_COUNT ====="

# 风险标记
echo "===== 高危端口 ====="
grep -E "(445|3389|3306|6379|9200)" "$OUTPUT_DIR/services-$DATE.txt" | head -20

九、僵尸服务器清理流程

Step 1:列出候选

  • 30 天 CPU 平均 < 5% → 候选
  • 90 天无登录 → 候选
  • 不在 CMDB → 候选

Step 2:调研归属

  • 查 IP 历史(DHCP / 申请记录)
  • 联系疑似业务方
  • 1 周内无人认领 → 标记淘汰

Step 3:归档

  • 数据备份 → S3 冷存
  • 配置 / 日志归档
  • 业务关停通告

Step 4:关停 / 释放

  • 阿里云 / 腾讯云直接释放 ECS
  • 物理机下电 + 拆零件

真实节省

某 300 人公司清理 80 台僵尸:

  • 月省 4 万云费
  • 减少 80 个攻击面
  • IT 满意度上升

十、Pro Tips:5 个有用的命令

# 1. 查内网所有 SSH 开放的机器
nmap -p22 --open 10.0.0.0/16

# 2. 查内网所有数据库端口(高危)
nmap -p1433,3306,5432,6379,27017 --open 10.0.0.0/16

# 3. 查弱密码(针对 SSH 已知账号)
hydra -L users.txt -P weak_passwords.txt ssh://10.0.0.1

# 4. 查内网 Windows 共享
smbmap -H 10.0.0.0/24

# 5. 查内网 Web 服务(开放 80/443/8080 等)
nmap -p80,443,8080,8443 --script=http-title 10.0.0.0/16

写在最后

我们整理了 《内网资产自动化扫描与存活探测 Shell 脚本》

  • 完整版本(含上述全部功能)
  • 多子网批量扫描
  • 飞书 / 钉钉告警集成
  • 历史趋势对比

📥 免费获取联系销售取脚本 →

或了解我们的 企业 IT 安全方案,含资产盘点 + 持续监控 + 应急响应。

📥PDF 白皮书

下载《企业 IT 资产盘点:如何利用开源工具自动化发现内网僵尸服务器与未授权资产?》PDF 完整版

留下邮箱,立刻获取本文 PDF + 后续企业 AI / 软件采购干货

  • ✓ 含全部图表、检查清单、参考链接
  • ✓ 可用于内部分享 / 招投标资料引用
  • ✓ 后续更新自动推送 · 不发垃圾邮件

提交即表示同意我们处理你的邮箱用于发送资料 · 不会用于第三方营销

想把这些经验落到你的企业?

1 个工作日内出方案 · 可签 NDA · 支持招投标

联系解决方案架构师 →