影刀RPA 网络安全自动化:漏洞扫描与补丁管理

📅 2026/7/22 4:04:34
影刀RPA 网络安全自动化:漏洞扫描与补丁管理
影刀RPA 网络安全自动化漏洞扫描与补丁管理什么情况用什么 → 怎么做 → 有什么坑作者林焱 | 飞行社出品什么情况用什么企业服务器越来越多漏洞也越来越多。手动登录每台服务器跑yum update或apt upgrade重复劳动到怀疑人生。这套方案适合企业运维团队自动化漏洞扫描自动化补丁管理Windows/Linux安全合规审计等保2.0、网络安全法核心工具影刀RPA Nessus/OpenVAS漏洞扫描 Ansible补丁管理 合规报告生成怎么做第一步自动化漏洞扫描OpenVAS拼多多店群自动化报活动上架importrequestsimportjsonimporttimedefinit_openvas_client(openvas_url,username,password): 初始化OpenVAS客户端 OpenVAS是开源漏洞扫描工具 try:# 1. 登录获取tokenlogin_urlf{openvas_url}/loginlogin_data{username:username,password:password}responserequests.post(login_url,jsonlogin_data,verifyFalse)resultresponse.json()iftokeninresult:print(fOpenVAS登录成功)returnresult[token]else:print(f⚠️ OpenVAS登录失败:{result})returnNoneexceptExceptionase:print(f⚠️ OpenVAS连接失败:{e})returnNonedefcreate_scan_task(openvas_url,token,target_ip,scan_configFull and fast): 创建扫描任务 target_ip: 目标IP或IP段如 192.168.1.0/24 scan_config: 扫描配置Full and fast, Full and very deep等 headers{Authorization:fBearer{token}}# 1. 创建目标Targettarget_data{name:fAuto Target{target_ip},hosts:target_ip,port_range:T:1-65535,U:1-65535,# TCPUDP全端口alive_test:Consider alive}responserequests.post(f{openvas_url}/targets,headersheaders,jsontarget_data,verifyFalse)target_idresponse.json()[id]print(f目标已创建:{target_id})# 2. 创建扫描任务Tasktask_data{name:fAuto Scan{target_ip},config_id:get_config_id(openvas_url,headers,scan_config),target_id:target_id}responserequests.post(f{openvas_url}/tasks,headersheaders,jsontask_data,verifyFalse)task_idresponse.json()[id]print(f扫描任务已创建:{task_id})returntask_iddefstart_scan_task(openvas_url,token,task_id):启动扫描任务headers{Authorization:fBearer{token}}responserequests.post(f{openvas_url}/tasks/{task_id}/start,headersheaders,verifyFalse)ifresponse.status_code202:print(f扫描任务已启动:{task_id})returnTrueelse:print(f⚠️ 启动扫描任务失败:{response.text})returnFalsedefget_scan_report(openvas_url,token,task_id):获取扫描报告headers{Authorization:fBearer{token}}# 1. 等待扫描完成轮询状态whileTrue:responserequests.get(f{openvas_url}/tasks/{task_id},headersheaders,verifyFalse)task_statusresponse.json()[status]iftask_statusDone:print(f扫描已完成)breakelse:print(f扫描中... 状态:{task_status})time.sleep(30)# 每30秒查询一次# 2. 获取报告IDresponserequests.get(f{openvas_url}/tasks/{task_id},headersheaders,verifyFalse)report_idresponse.json()[last_report][id]# 3. 下载报告PDF格式report_urlf{openvas_url}/reports/{report_id}/downloadresponserequests.get(report_url,headersheaders,verifyFalse)report_filef/tmp/openvas_report_{task_id}.pdfwithopen(report_file,wb)asf:f.write(response.content)print(f扫描报告已下载:{report_file})returnreport_file# 完整流程示例tokeninit_openvas_client(https://openvas.company.com,admin,password)iftoken:task_idcreate_scan_task(token,192.168.1.0/24)iftask_id:start_scan_task(token,task_id)report_fileget_scan_report(token,task_id)第二步自动化补丁管理Linux - Ansibleimportsubprocessimportjsondefrun_ansible_playbook(playbook_path,inventory_path,extra_varsNone): 执行Ansible Playbook自动化补丁管理 playbook_path: playbook文件路径 inventory_path: inventory文件路径定义要管理的服务器 extra_vars: 额外变量如 {patch_type: security} print(f开始执行Ansible Playbook:{playbook_path})# 1. 构造ansible-playbook命令cmd[ansible-playbook,-i,inventory_path,# inventory文件playbook_path]ifextra_vars:cmd.extend([--extra-vars,json.dumps(extra_vars)])try:# 2. 执行playbookresultsubprocess.run(cmd,capture_outputTrue,textTrue,timeout3600# 最多执行1小时)ifresult.returncode0:print(f✅ Playbook执行成功)print(result.stdout)returnTrueelse:print(f⚠️ Playbook执行失败)print(result.stderr)returnFalseexceptExceptionase:print(f⚠️ 执行Playbook失败:{e})returnFalse# Ansible Playbook示例update_packages.yml --- - name: Update packages on Linux servers hosts: all become: yes # 使用sudo权限 tasks: - name: Update yum cache (CentOS/RHEL) yum: update_cache: yes when: ansible_os_family RedHat - name: Update apt cache (Ubuntu/Debian) apt: update_cache: yes when: ansible_os_family Debian - name: Install security updates (CentOS/RHEL) yum: name: * security: yes state: latest when: ansible_os_family RedHat - name: Install security updates (Ubuntu/Debian) apt: upgrade: security when: ansible_os_family Debian - name: Reboot if kernel updated reboot: reboot_timeout: 300 when: kernel_updated | default(false) # 使用示例successrun_ansible_playbook(playbook_path/opt/ansible/update_packages.yml,inventory_path/opt/ansible/inventory/hosts,extra_vars{patch_type:security})第三步自动化补丁管理Windows - PowerShellimportsubprocessdefrun_windows_update(remote_host,username,password): 远程执行Windows Update使用PowerShell Windows补丁管理需要使用PSWindowsUpdate模块 print(f开始执行Windows Update:{remote_host})# 1. 构造PowerShell脚本远程执行ps_script # 安装PSWindowsUpdate模块如果没装 Install-Module -Name PSWindowsUpdate -Force -AllowClobber # 检查可用更新 Get-WindowsUpdate # 安装所有可用更新自动重启 Install-WindowsUpdate -AcceptAll -AutoReboot # 2. 将脚本保存到临时文件importtempfilewithtempfile.NamedTemporaryFile(modew,suffix.ps1,deleteFalse)asf:f.write(ps_script)ps_script_pathf.name# 3. 使用WinRM远程执行需要开启WinRM服务cmd[python,-m,pywinrm,--host,remote_host,--username,username,--password,password,--script,ps_script_path]try:resultsubprocess.run(cmd,capture_outputTrue,textTrue,timeout3600)ifresult.returncode0:print(f✅ Windows Update执行成功)print(result.stdout)returnTrueelse:print(f⚠️ Windows Update执行失败)print(result.stderr)returnFalseexceptExceptionase:print(f⚠️ 执行Windows Update失败:{e})returnFalsefinally:# 删除临时脚本文件os.remove(ps_script_path)# 或者使用Ansible管理Windows补丁推荐 Ansible Playbook for Windows Updatewin_update.yml --- - name: Update Windows servers hosts: windows gather_facts: no tasks: - name: Install all updates win_updates: category_names: - SecurityUpdates - CriticalUpdates reboot: yes reboot_timeout: 1800 第四步生成安全合规报告等保2.0defgenerate_security_compliance_report(scan_results,output_file): 生成安全合规报告等保2.0要求 scan_results: 漏洞扫描结果OpenVAS报告 importopenpyxlfromopenpyxl.stylesimportFont,Alignmentprint(f生成安全合规报告:{output_file})# 1. 创建Excel工作簿wbopenpyxl.Workbook()wswb.active ws.title安全合规报告# 2. 写入报告头ws[A1]安全合规报告等保2.0ws[A1].fontFont(boldTrue,size14)ws[A2]f生成时间:{datetime.now().strftime(%Y-%m-%d %H:%M:%S)}# 3. 漏洞汇总ws[A4]漏洞汇总ws[A4].fontFont(boldTrue)ws[A5]高危漏洞数量ws[B5]scan_results.get(high_vulns,0)ws[A6]中危漏洞数量ws[B6]scan_results.get(medium_vulns,0)ws[A7]低危漏洞数量ws[B7]scan_results.get(low_vulns,0)# 4. 补丁状态ws[A9]补丁状态ws[A9].fontFont(boldTrue)ws[A10]已安装补丁数ws[B10]scan_results.get(patches_installed,0)ws[A11]待安装补丁数ws[B11]scan_results.get(patches_pending,0)# 5. 合规检查项等保2.0要求ws[A13]等保2.0合规检查ws[A13].fontFont(boldTrue)compliance_checks[(身份鉴别,通过ifscan_results.get(auth_check)else不通过),(访问控制,通过ifscan_results.get(access_control)else不通过),(安全审计,通过ifscan_results.get(audit_check)else不通过),(入侵防范,通过ifscan_results.get(intrusion_prevention)else不通过),]fori,(check_item,status)inenumerate(compliance_checks):ws[fA{14i}]check_item ws[fB{14i}]status# 不通过的项标红ifstatus不通过:ws[fB{14i}].fontFont(colorFF0000)# 6. 保存报告wb.save(output_file)print(f✅ 报告已生成:{output_file})returnoutput_file第五步影刀RPA完整流程编排【定时触发】每周一凌晨1:00 ↓ 【Python节点】init_openvas_client() → 登录OpenVAS ↓ 【Python节点】create_scan_task() → 创建扫描任务 ↓ 【Python节点】start_scan_task() → 启动扫描 ↓ 【等待】扫描完成OpenVAS回调或轮询状态 ↓ 【Python节点】get_scan_report() → 获取扫描报告 ↓ 【条件判断】是否有高危漏洞 ├─ 是 → 【企微告警】发送高危漏洞告警 └─ 否 → 继续 ↓ 【Python节点】run_ansible_playbook() → 执行补丁管理 ↓ 【条件判断】补丁安装是否成功 ├─ 否 → 【企微告警】发送补丁安装失败通知 └─ 是 → 继续 ↓ 【Python节点】generate_security_compliance_report() → 生成合规报告 ↓ 【发送邮件】将报告发送给安全团队 ↓ 【生成报告】安全运维周报.xlsx → 包含漏洞数量、补丁状态、合规检查结果有什么坑坑1漏洞扫描误报False PositiveOpenVAS等工具可能把正常服务误判为漏洞导致运维人员疲于应对。解决方案人工复核 建立白名单# 建立漏洞白名单已知误报VULN_WHITELIST[TCP Timestamp,# 通常误报ICMP Timestamp,# 通常误报# ...]deffilter_false_positives(vuln_list):过滤误报漏洞filtered[]forvulninvuln_list:ifvuln[name]notinVULN_WHITELIST:filtered.append(vuln)returnfiltered坑2补丁安装后需要重启业务中断Windows补丁安装后经常需要重启如果在业务高峰期重启会导致服务中断。解决方案使用维护窗口 负载均衡# 1. 只在维护窗口执行补丁安装如凌晨2:00-4:00# 在Ansible Playbook中加条件判断 --- - name: Install Windows updates win_updates: category_names: - SecurityUpdates reboot: no # 先不重启 when: ansible_date_time.hour 2 and ansible_date_time.hour 4 - name: Reboot if needed win_reboot: reboot_timeout: 300 when: ansible_date_time.hour 2 and ansible_date_time.hour 4 # 2. 如果使用负载均衡先摘除节点 → 补丁安装重启 → 重新加入集群坑3等保2.0合规检查项很多手动检查耗时等保2.0有上百个检查项手动检查需要几天时间。TEMU店群矩阵自动化运营核价报活动解决方案使用自动化合规检查工具如Lynis、OpenSCAP# 使用Lynis进行自动化安全审计Linuxwgethttps://downloads.cisofy.com/lynis/lynis.tar.gztarxvf lynis.tar.gzcdlynis ./lynis audit system# 使用OpenSCAP支持等保2.0基线检查oscap xccdfeval--profilexccdf_org.ssgproject.content_profile_standard\/usr/share/xml/scap/ssg/content/ssg-rhel7-ds.xml坑4漏洞扫描对生产环境有影响某些漏洞扫描会发送恶意payload可能触发WAF/IPS告警甚至导致服务崩溃。解决方案使用被动扫描 在测试环境先扫描# 1. 先在测试环境扫描镜像生产环境create_scan_task(openvas_url,token,192.168.2.0/24)# 测试环境# 2. 生产环境使用被动扫描不发送payload只分析流量![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/4f0f4437fa6a42cda9bffd2ae9dc9c36.png#pic_center)# 使用Nessus的Passive Vulnerability ScannerPVS总结功能节省时间附加价值自动化漏洞扫描每周省2小时及时发现漏洞降低风险自动化补丁管理每周省3小时避免人为遗漏提高安全性合规报告生成每次省1小时满足等保2.0要求避免合规风险自动化加固—提高系统整体安全性实际落地建议先在测试环境验证避免扫描/补丁导致生产故障使用维护窗口在低峰期执行补丁安装做好回滚准备补丁安装失败时能快速回滚定期审计每月做一次完整的安全审计网络安全自动化能为运维/安全团队节省70%以上的日常漏洞管理时间同时提高系统整体安全性。