奇安信安全设备自动化巡检机器人开发实践
1. 项目背景与需求分析
"手搓奇安信安全设备巡检机器人"这个项目名称背后,反映的是当前企业安全运维中的一个普遍痛点——如何高效完成大批量安全设备的日常巡检工作。作为国内头部安全厂商,奇安信的天擎终端安全系统、天眼威胁检测系统等产品在企业环境中部署广泛,但随之而来的是运维人员需要面对的设备数量激增问题。
在实际工作中,安全运维团队通常需要:
- 每天检查数百台终端上的天擎客户端运行状态
- 定期验证天眼设备的日志采集完整性
- 监控浏览器等终端应用的安全策略生效情况
- 确保所有设备策略同步更新
传统的人工巡检方式存在三大瓶颈:
- 效率低下:人工逐台检查耗时耗力,200台设备完整巡检可能需要4-6小时
- 标准不一:不同运维人员的检查项和判断标准存在差异
- 响应滞后:问题发现往往存在时间延迟,错过最佳处置窗口
2. 技术方案设计思路
2.1 核心功能规划
基于上述痛点,我们设计的巡检机器人需要实现以下核心能力:
设备状态采集层
- 通过WMI/PowerShell获取终端基础信息(CPU、内存、磁盘)
- 调用天擎客户端本地API查询防护状态
- 解析天眼设备的syslog日志流
- 捕获浏览器进程的安全策略加载情况
自动化巡检层
- 预设检查项模板(CPU利用率阈值、病毒库版本号等)
- 支持定时触发和手动立即执行两种模式
- 异常状态自动分级(警告/严重/致命)
结果处理层
- 生成可视化巡检报告(HTML/PDF)
- 微信/邮件实时告警推送
- 自动创建运维工单(对接OA系统)
2.2 关键技术选型
经过对比测试,最终技术栈确定如下:
开发语言
- Python 3.8+(丰富的安全设备对接库)
- Go(高并发采集场景)
核心框架
- Flask(轻量级Web控制台)
- Celery(分布式任务调度)
数据库
- PostgreSQL(结构化巡检数据存储)
- Redis(实时状态缓存)
特别注意事项
- 天擎客户端v6.0+版本开始强化了API调用鉴权
- 天眼设备需要预先配置syslog转发策略
- 浏览器策略检查需处理沙箱环境限制
3. 具体实现过程
3.1 环境准备与依赖安装
建议使用Python虚拟环境隔离依赖:
python -m venv qianxin_robot source qianxin_robot/bin/activate # Linux/Mac pip install -r requirements.txt关键依赖库说明:
psutil:跨平台系统信息采集requests:REST API调用paramiko:SSH设备管理openpyxl:Excel报告生成
3.2 天擎客户端状态检查实现
通过分析天擎的本地服务接口,我们发现其状态数据存储在:
C:\Program Files\Qianxin\TianQing\status.db使用SQLite查询示例:
import sqlite3 def get_tianqing_status(): conn = sqlite3.connect(r'C:\Program Files\Qianxin\TianQing\status.db') cursor = conn.cursor() cursor.execute("SELECT * FROM agent_status") return cursor.fetchall()重要提示:天擎v7.2+版本开始对该数据库进行了加密,需要先调用
QAXDecrypt.dll解密
3.3 天眼设备日志检查
通过配置syslog转发,我们可以实时获取设备状态:
import syslog_server class TianYanHandler: def handle_log(self, log): if 'detection_rate' in log: rate = float(log.split('=')[1]) if rate < 0.95: alert('检测率下降', log)建议检查的关键指标:
- 日志接收延迟(<60秒)
- 规则加载成功率(>99%)
- 检测事件吞吐量(匹配设备规格)
3.4 浏览器策略验证
通过Selenium自动化测试验证策略生效:
from selenium import webdriver options = webdriver.ChromeOptions() options.add_argument("--proxy-server=127.0.0.1:8080") driver = webdriver.Chrome(options=options) try: driver.get("http://testmalware.com") assert "Blocked by Qianxin" in driver.page_source finally: driver.quit()4. 典型问题排查指南
4.1 天擎客户端无响应
现象:采集超时或返回空数据排查步骤:
- 检查
QianxinTianQing服务状态Get-Service QianxinTianQing | Select Status - 验证本地API端口(默认20111)
telnet 127.0.0.1 20111 - 检查客户端版本兼容性
HKEY_LOCAL_MACHINE\SOFTWARE\Qianxin\TianQing\Version
4.2 天眼日志中断
常见原因:
- 网络ACL阻断514端口
- 天眼设备磁盘写满
- syslog服务异常
应急处理:
# 临时启用TCP传输 logger -n <天眼IP> -P 514 -T "test message"5. 巡检报告优化建议
可视化方案对比:
| 方案 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|
| Excel | 兼容性好 | 数据量大时卡顿 | 小型环境 |
| Power BI | 交互性强 | 需要额外授权 | 常态化监控 |
| Grafana | 实时性好 | 学习成本高 | 运维中心 |
推荐指标看板:
- 终端防护覆盖率(>=98%)
- 策略同步延迟(<5分钟)
- 病毒库过期设备数(<=3台)
- 高风险终端TOP10列表
6. 安全注意事项
- 采集账号必须遵循最小权限原则
- 巡检结果数据需要加密存储
- API调用频率控制在5次/分钟以下
- 敏感配置信息使用Vault等工具管理
实际部署中发现,当天擎客户端版本跨越v6.3到v7.0时,本地数据库结构会发生重大变更。建议在代码中加入版本判断逻辑:
def check_tianqing_version(): reg_path = r'SOFTWARE\Qianxin\TianQing' try: with winreg.OpenKey(winreg.HKEY_LOCAL_MACHINE, reg_path) as key: version = winreg.QueryValueEx(key, 'Version')[0] if version.startswith('7.'): return 'new' return 'legacy' except: return 'unknown'对于需要卸载重装客户端的特殊情况,可以通过静默卸载命令处理:
"C:\Program Files\Qianxin\TianQing\uninst.exe" /S但需要注意,部分企业环境会设置卸载密码保护。这种情况下建议先通过管理控制台临时解除保护策略。