1. 项目概述
在网络安全领域,资产发现始终是攻防对抗的第一道战线。传统方法依赖IP段扫描、证书指纹匹配等技术,但面对现代企业复杂的数字资产版图,这些基于精确匹配的技术往往力不从心。想象一下,当一家大型集团拥有数百个分散在不同云服务商、使用不同域名体系的业务系统时,仅靠技术指纹很难完整勾勒出它的数字版图。
这正是AI驱动的资产发现技术大显身手的场景。通过自然语言处理(NLP)技术,我们能够从网站标题、描述、备案信息等"软数据"中挖掘出传统方法无法发现的隐藏关联。就像刑侦专家通过行为模式锁定犯罪嫌疑人一样,这项技术能捕捉到"XX云计算服务"与"XX集团数字科技事业部"之间微妙的语义关联。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 技术原理深度解析
2.1 词嵌入与语义向量
NLP模型的核心魔法在于将文字转换为数学向量。以中文模型text2vec为例,它会将"智慧城市解决方案"这样的短语转换为一个768维的向量。这个转换过程不是简单的编码,而是通过在海量文本数据上训练,让模型学习到词语之间的深层语义关系。
关键点在于:语义相近的文本,其向量在高维空间中的位置也相近。比如"云计算服务"和"云端计算解决方案"的向量夹角会很小,而它们与"游戏资讯"的向量则相距甚远。这种特性使得我们可以用数学方法量化文本之间的语义相似度。
2.2 相似度计算实战
在实际操作中,我们使用余弦相似度(Cosine Similarity)来衡量向量之间的相似程度。计算公式如下:
code复制similarity = (A·B) / (||A|| * ||B||)
其中A和B是两个向量,"·"表示点积,"|| ||"表示向量的模。这个值范围在-1到1之间,越接近1表示相似度越高。
在资产发现场景中,我们通常会设定一个阈值(如0.65)。当两个资产的文本描述向量相似度超过这个阈值时,就认为它们可能存在关联。这个阈值需要根据具体场景调整:
- 金融行业可能设得较高(0.7+)
- 互联网企业可能稍低(0.6左右)
- 集团型公司要考虑子公司命名差异
3. 环境搭建详解
3.1 基础环境配置
推荐使用Python 3.8+环境,主要依赖三个核心库:
- sentence-transformers:提供预训练NLP模型和相似度计算工具
- pandas:数据处理和分析
- scikit-learn:辅助机器学习操作
安装命令:
bash复制pip install sentence-transformers pandas scikit-learn
对于中文场景,特别推荐shibing624/text2vec-base-chinese模型。它在中文语义相似度任务上表现优异,且对商业文本有很好的理解能力。
3.2 性能优化技巧
当处理大规模资产数据时,有几个性能优化点值得注意:
- GPU加速:使用CUDA环境可以提升10倍以上的编码速度
python复制device = "cuda" if torch.cuda.is_available() else "cpu"
model = SentenceTransformer('shibing624/text2vec-base-chinese', device=device)
- 批量处理:避免单条编码,利用模型的批量处理能力
python复制# 不好的做法
vectors = [model.encode(text) for text in texts]
# 推荐做法
vectors = model.encode(texts, batch_size=32)
- 缓存机制:对已经处理过的资产建立向量缓存,避免重复计算
4. 核心实现流程
4.1 数据预处理要点
原始数据质量直接影响分析效果。我们需要特别注意:
- 字段合并策略:
python复制df['text_for_nlp'] = df['title'].fillna('') + " [SEP] " + df['description'].fillna('')
使用[SEP]分隔符让模型更好地区分不同字段的信息。
- 文本清洗:
- 移除HTML标签
- 统一全角/半角字符
- 过滤特殊符号
- 保留关键标点(如"·"在企业名称中很重要)
- 缺失值处理:
python复制df = df.fillna({'title':'', 'description':''})
4.2 核心算法实现
完整的资产关联分析流程:
python复制def find_related_assets(core_company, assets_df, threshold=0.65):
# 定位核心资产
core_mask = assets_df['title'].str.contains(core_company, na=False)
if not core_mask.any():
raise ValueError(f"未找到包含'{core_company}'的核心资产")
core_text = assets_df[core_mask].iloc[0]['text_for_nlp']
# 文本向量化
model = SentenceTransformer('shibing624/text2vec-base-chinese')
corpus_embeddings = model.encode(assets_df['text_for_nlp'].tolist())
core_embedding = model.encode(core_text)
# 计算相似度
similarities = util.cos_sim(core_embedding, corpus_embeddings)[0]
assets_df['similarity'] = similarities
# 结果筛选
related_assets = assets_df[
(assets_df['similarity'] > threshold) &
(~core_mask)
].sort_values('similarity', ascending=False)
return related_assets
5. 实战效果分析
5.1 典型发现案例
在实际测试中,我们发现了几类传统方法难以发现的关联资产:
- 业务描述关联:
- 核心资产:"XX银行-个人金融服务"
- 隐藏资产:"数字财富管理平台"(实际是该银行的理财子公司运营)
- 子公司命名差异:
- 核心资产:"XX集团"
- 隐藏资产:"云智科技"(工商信息显示为集团全资子公司)
- 历史遗留系统:
- 核心资产:"XX新零售平台"
- 隐藏资产:"XX商城管理系统"(旧系统,未及时下线)
5.2 效果评估指标
为了量化分析效果,我们定义了三个关键指标:
- 召回率(Recall):
- 传统方法发现的资产数:120
- NLP方法新增发现数:83
- 召回率提升:+69%
- 准确率(Precision):
- 随机抽样验证50个新增发现
- 确认有效关联:42个
- 准确率:84%
- 业务价值:
- 发现3个未纳入监控的生产系统
- 识别出7个使用默认密码的测试环境
- 定位到2个已弃用但未下线的敏感系统
6. 进阶应用场景
6.1 多模态资产发现
将NLP与图像识别结合,实现更全面的资产发现:
- Logo识别:
- 使用CNN模型提取网站favicon特征
- 与已知企业logo库比对
- 界面风格分析:
- 对网站首页截图进行特征提取
- 识别使用相同UI框架的关联系统
python复制# 伪代码示例
def multi_modal_analysis(url):
# 文本分析
text_features = nlp_model.extract(text_content)
# 图像分析
screenshot = get_screenshot(url)
image_features = vision_model.extract(screenshot)
# 特征融合
combined_features = fuse(text_features, image_features)
return find_similar_assets(combined_features)
6.2 动态监控体系
建立持续性的资产监控机制:
- 自动化采集:
- 定期爬取企业相关的新域名、新IP
- 监控SSL证书透明日志
- 跟踪子公司工商变更信息
- 智能分析:
- 每日自动运行NLP关联分析
- 设置相似度变化告警阈值
- 生成资产关联图谱
- 风险评分:
- 根据资产类型、暴露面、历史漏洞等
- 计算每个资产的风险分值
- 优先处理高风险新发现
7. 防御对策建议
7.1 企业防护方案
对于需要保护自身资产信息的企业,建议:
- 元信息管理:
- 统一各系统的title/description模板
- 避免在测试环境使用生产业务描述
- 对不同类型的系统采用差异化的描述风格
- 网络架构:
- 对边缘系统实施严格的网络隔离
- 使用WAF过滤特征采集行为
- 对敏感接口实施请求频率限制
- 监控体系:
- 建立数字资产CMDB
- 定期使用同类技术自查
- 监控证书/域名系统变更
7.2 个人开发建议
对于开发人员,有几个实用建议:
- 模板差异化:
html复制<!-- 避免使用 -->
<powered by="XX科技统一开发平台">
<!-- 推荐使用 -->
<powered by="技术团队">
- 错误信息处理:
python复制# 不好的做法
raise Exception("XX集团支付系统数据库连接失败")
# 推荐做法
raise Exception("系统服务暂时不可用")
- 测试数据管理:
- 使用生成式AI创建仿真业务描述
- 避免直接复制生产环境文本
- 定期清理测试系统的历史数据
8. 常见问题排查
在实际使用中,我们总结了几个典型问题及解决方案:
- 相似度普遍偏低:
- 检查文本编码是否一致
- 验证模型是否支持该领域术语
- 尝试增加文本长度(合并更多字段)
- 结果不稳定:
- 确保每次使用相同模型版本
- 检查输入文本是否含有随机变化内容
- 考虑使用模型集成(多个模型投票)
- GPU内存不足:
python复制# 启用梯度检查点
model = SentenceTransformer(model_name, device="cuda",
checkpoint="gradient")
# 或使用fp16精度
model = model.half()
- 中文分词异常:
- 检查是否混入其他语言字符
- 验证模型是否针对简体/繁体优化
- 对专业术语添加自定义词典
9. 技术演进方向
这项技术还在快速发展中,有几个值得关注的趋势:
- 大语言模型应用:
- 使用GPT类模型生成更丰富的语义表示
- 实现跨语言资产关联(如中英文官网对比)
- 自动解析网页正文关键内容
- 图神经网络:
- 将资产关联关系构建成知识图谱
- 利用GNN挖掘深层关联路径
- 可视化呈现资产拓扑结构
- 增量学习:
- 持续吸收新发现的资产特征
- 动态调整相似度计算策略
- 建立企业专属的识别模型
- 隐私计算:
- 在加密数据上计算相似度
- 实现跨企业的安全协作分析
- 满足GDPR等合规要求
在实际操作中,我强烈建议从简单场景入手,先验证技术可行性,再逐步扩展到复杂环境。要注意平衡查全率和准确率,根据不同的业务场景调整相似度阈值。同时务必确保所有操作都在合法授权的范围内进行,建立完善的数据使用审批流程。
