利用 KUMA API 自动化从已安装包检测 Linux 发行版
一位 SOC 分析师面临为大公司清点操作系统库存的挑战。他没有手动检查 18,000 台设备,而是编写了一个 Python 脚本,通过 KUMA 平台 API 获取已安装软件数据,并分析软件包来精确识别 Linux 发行版。该方案采用加权评分系统,综合考虑独特系统包、包管理器和版本后缀。
KUMA API 操作与 JSON 处理
KUMA(卡巴斯基统一监控与分析平台)通过其 API 提供资产数据,但存在一些限制——如 Web 界面无法直接过滤资产。认证使用令牌,避免硬编码凭证。以下是发起请求的示例代码:
token = "my_token"
url = "my_api_url"
api_header={
"Content-Type": "application/json",
"Authorization": f"Bearer {token}"
}
req = request.get(url, headers=api_header)
data = req.json()
JSON 响应结构包含操作系统和已安装软件字段。要提取嵌套数据如软件包列表,使用递归函数:
def recursive_extract(data, result=None):
result = []
if isinstance(data, dict):
for key, value in data.items():
if key == "software":
result.append(value)
recursive_extract(value, result)
return result
Linux 软件包版本规范
理解软件包版本是分析的关键。标准语义化版本遵循 MAJOR.MINOR.PATCH 格式,如 2.36.105。发行版会添加专属后缀:
- Ubuntu:.ubuntu 或 +ubuntu
- Debian:.deb 或 +deb
- ALT Linux:.alt 或 +alt
- Astra Linux:.astra 或 astra
复杂示例:2.2.6-2+deb10u9+ci1+astra1,其中 deb10 指向 Debian 10,u9 是第九次更新,astra 表示 Astra Linux 适配。
Linux 发行版检测算法
算法扫描已安装软件包,识别操作系统类型、具体发行版、版本和置信度。它采用加权评分系统:
- 150 分:独特系统包(如 ubuntu-release)
- 20 分:包管理器(apt、yum、rpm)
- 15 分:版本后缀(.ubuntu、.alt)
- 10 分:发行版专属包
- 5 分:间接指标
支持的发行版包括 Ubuntu、Debian、ALT Linux、Astra Linux、Fedora 等。逻辑流程如下:
- 扫描软件包,为每个发行版累积分数。
- 汇总分数,选择最高分者。
- 平分时优先系统包。
- 从系统包或后缀提取版本。
置信度级别:高(≥150 分)、中(20–49 分)、低(<20 分)。
关键实现特性
- 灵活输出:支持 CSV 或 JSON,可选按置信度过滤。
- 处理不完整数据:即使 OS 信息缺失(os: null)或软件数组为空也能工作。
- 优先级层级:独特系统包权重最高,提升准确性。
- 可扩展设计:轻松添加新发行版和指标。
主要收获
- 通过 KUMA API 自动化 OS 清点,为数千设备节省数小时。
- 加权评分精准识别 Linux 发行版软件包数据。
- 覆盖主流发行版,包括俄罗斯的 ALT Linux 和 Astra Linux。
- CSV/JSON 输出灵活,与其他工具无缝集成。
- 对不完整数据鲁棒,适合实际场景。
— Editorial Team
暂无评论。