Windows操作系统安全配置缺陷自动检测技术

目录

  • 一,绪论与背景
    • 1.1,绪论
      • 1.1.1,项目概述与背景
      • 1.1.2,定义与术语
  • 二,需求分析
    • 2.1,系统设计概述
      • 2.1.1,需求分析
      • 2.1.2,概要设计
    • 2.2,功能设计
    • 2.3,功能需求
  • 三,详细设计
    • 3.1,系统结构设计
    • 3.2,模块设计
      • 3.2.1,弱口令检测
      • 3.2.2,端口扫描检测
      • 3.2.3,本地安全检测
      • 3.2.4,系统版本及补丁检测
      • 3.2.5,网络配置检测
      • 3.2.6,安全日志检测
    • 3.3,程序函数清单
  • 设计成果
  • 设计心得

一,绪论与背景

1.1,绪论

近年来,随着人类社会的进步和信息技术的发展,人类在能源、环境、交通、居住、安全等领域都面临着严峻的挑战,迫使人们不得不利用大数据、物联网等互联网技术实现更加高效、智能的资源利用和调配模式。
在大数据成为国家战略的今天,企业的组织、生产和经营活动都以数据为基础开展和优化,不仅是信息类产品和服务,在交通、能源电力、市政管理、金融、环境保护、教育、医疗、安防反恐等领域,对互联网的依赖也越来越强。随之而来的数据被泄漏、篡改,网络攻击等问题也越来越严重。
网络安全问题,关乎百姓生活与社会稳定。从大处看,会影响能源、交通等基础设施的正常运行,影响金融、教育、医疗等各行业的秩序,甚至影响地缘政治的稳定;往小处看,每个人的隐私、企业的商业机密泄漏都会带来各种各样的社会问题。
而作为网络空间安全学院学生的我们,也在不断的了解和学习有关安全的知识,这一次的信息安全课程设计,我们选择了题目二——“Windows或Linux操作系统安全配置自动检测技术”。而Windows作为全球应用范围最广,知名度最高的操作系统,在有着强大功能的同时,也隐藏着不少漏洞。安全软件公司 BeyondTrust 近日发布了一份《2021 年度微软漏洞报告》,在 2020 年在微软产品中共发现了 1268 个漏洞,创历史新高,其中 Windows 产品的漏洞达 907 个,且有 132 个为关键性漏洞。更加严重的是,很多Windows用户并没有很强的安全意识,他们对自己的电脑了解不深,对电脑的安全配置也没有一个很好的布置。在互联网技术高度发达、人们的财产和隐私与电脑和网络高度连结的今天,维护互联网、电脑系统的任务迫在眉睫。

1.1.1,项目概述与背景

Windows 系统的“漏洞”就像它的GUI(图形界面)一样“举世闻名”,几乎每个星期都有新的漏洞被发现。这些漏洞常被计算机病毒和黑客们用来非法入侵计算机,进行大肆破坏。虽然微软会及时发布修补程序,但是发布时间是随机的,而且这些漏洞会因Windows软件版本的不同而发生变化,这就使得完全修补所有漏洞成为头号难题。

1.1.2,定义与术语

  • 弱口令:
    没有严格和准确的定义,通常认为容易被别人(他们有可能对你很了解)猜测到或被破解工具破解的口令均为弱口令。弱口令指的是仅包含简单数字和字母的口令,例如“123”、“abc”等,因为这样的口令很容易被别人破解,从而使用户的计算机面临风险,因此不推荐用户使用。

  • Windows power shell :
    Windows PowerShell 是一种命令行外壳程序和脚本环境,使命令行用户和脚本编写者可以利用 .NET Framework的强大功能。它引入了许多非常有用的新概念,从而进一步扩展了您在 Windows 命令提示符和 Windows Script Host 环境中获得的知识和创建的脚本。

  • Telnet :
    Telnet协议是TCP/IP协议族中的一员,是Internet远程登录服务的标准协议和主要方式。它为用户提供了在本地计算机上完成远程主机工作的能力。在终端使用者的电脑上使用telnet程序,用它连接到服务器。终端使用者可以在telnet程序中输入命令,这些命令会在服务器上运行,就像直接在服务器的控制台上输入一样。可以在本地就能控制服务器。要开始一个telnet会话,必须输入用户名和密码来登录服务器。Telnet是常用的远程控制Web服务器的方法。

  • SSH :
    SSH 为 Secure Shell 的缩写,由 IETF 的网络小组(Network Working Group)所制定;SSH 为建立在应用层基础上的安全协议。SSH 是较可靠,专为远程登录会话和其他网络服务提供安全性的协议。利用 SSH 协议可以有效防止远程管理过程中的信息泄露问题。

  • KB:
    KB是微软对补丁的命名方式,是Knowledge Base(知识库)的简称。
    其指的是某个补丁对应微软知识库中哪一篇文章。例如KB888111,就是对应 知识库中888111号文章。

  • POC
    POC,Proof of Concept,中文意思是“观点证明”。这个短语会在漏洞 报告中使用,漏洞报告中的POC则是一段说明或者一个攻击的样例,使得 读者能够确认这个漏洞是真实存在的。

  • EXP
    EXP,Exploit,中文意思是“漏洞利用”。意思是一段对漏洞如何利用 的详细说明或者一个演示的漏洞攻击代码,可以使得读者完全了解漏洞的机 理以及利用的方法。

  • CVE漏洞编号
    CVE 的英文全称是“Common Vulnerabilities & Exposures”公共漏洞和暴露,例如CVE-2015-0057、CVE-1999-0001等等。CVE就好像是一个字典表,为广泛认同的信息安全漏洞或者已经暴露出来的弱点给出一个公共的名称。如果在一个漏洞报告中指明的一个漏洞,如果有CVE名称,你就可以快速地在任何其它CVE兼容的数据库中找到相应修补的信息,解决安全问题。

二,需求分析

2.1,系统设计概述

本系统是对Windows操作系统安全配置等进行全面扫描,从六个方面排查本机操作系统可能出现的风险与问题,并基于一套详尽的评分体系可以给出各项的评分结果以及总评。

2.1.1,需求分析

操作系统本身设计的安全性可能比较高,但可能由于使用和配置的不当,造成操作系统实际的安全性能降低。通过操作系统安全评估,发现主机和网络设备的漏洞和安全隐患。通过实验,使学生认识操作系统安全评估与检测的重要性,掌握操作系统安全评估与检测的内容和方法。

2.1.2,概要设计

最开始我们通过查询各种,得知了一个判断漏洞的方法,根据版本号和补丁与最新版本的对比,但是这样的对比只能证明这是一个潜在的漏洞,也就是说系统有潜在的不安全因素,但不能说系统一定不安全。如果还需要进一步的判断系统是否存在该问题,最好还是设计一个脚本攻击一下。但是我们最终版本,只是设计出来检测潜在的不安全因素,并没有具体的去攻击证明漏洞的存在。我们从以下几个方面进行分析,然后给出一个较为全面的判断。
Windows操作系统安全配置缺陷自动检测技术_第1张图片
该安全检测程序主要从图示几个方面进行权衡打分。分别是安全日志、弱口令、网络配置、版本系统日志、本地安全检测、端口扫描。

  • 弱口令:
    从本地安全策略和爆破尝试出发,进一步检查口令强度。这里的弱口令从两个方面出发,一个是管理员口令,和windows登录时的口令。
  • 端口扫描:
    通过系统cmd指令查询开放的端口号和系统进程的检测,把二者形成的表通过PID匹配,形成一个完整的信息表,再通过已有资料判断是否有高危端口被打开,和一些建议关闭非必须打开的端口被打开了来评判。扫描的信息还获取了本地地址和外部地址,以及端口所在状态,可以利于人工进一步分析。
  • 本地安全检测:
    通过调用power shell查询计算机自身状态,和查找windows本地安全策略,通过windows 10专业版自带的系统文件进行一个全面的评价打分,最后查询防火墙状态。
  • 版本系统自查:
    通过查询windows版本号和对应的补丁,判断系统是否已经达到现版本的最 佳状态。
  • 网络配置:
    查找配置文件中是否有非必须开启的服务。
  • 安全日志:
    调取系统安全日志,对安全日志进行分析,判断有无危害系统安全的行为。

2.2,功能设计

Windows操作系统安全配置缺陷自动检测技术_第2张图片
此软件的功能为对计算机的系统安全进行全方面的扫描,共分为六个部分,生成六分小报告,并最终生成一份总体的报告,每一份报告中都会对该项进行打分,满分为一百分。

2.3,功能需求

Windows操作系统安全配置缺陷自动检测技术_第3张图片

三,详细设计

3.1,系统结构设计

Windows操作系统安全配置缺陷自动检测技术_第4张图片
通过六个部分打分评测,并且各自生成一份具体的报告,然后最后再合成一份整体的报告,对系统进行全面的评测。

3.2,模块设计

3.2.1,弱口令检测

本课题中,针对操作系统弱口令的检测,我们从两个方面开展。
一方面,我们通过读取操作系统本地安全策略中对密码的设置、要求来评判。在windows10的操作系统中,可以设置“密码必须符合复杂性要求”,进一步可以规定具体的密码长度,密码由几种字符组成,密码的最短、最长使用期限等。设置复杂性强的密码且养成更换密码的习惯,可以防范密码泄露、社会工程学等隐患。此外,安全策略中还有账户锁定策略,防止恶意脚本攻击或设备被盗取造成个人信息泄露。
有的时候,设备需要面临多用户使用。设置科学的密码策略,有助于提高全体用户的密码鲁棒性,保障整个系统的安全运转。
Windows操作系统安全配置缺陷自动检测技术_第5张图片
另一方面,我们采用不同角度的实践操作来检验弱口令。
针对弱口令检测的工具有很多,我们选用了Ophcrack、Hydra两个工具分别检测。
Ophcrack有独特的彩虹表结构,找到存储对应哈希值的文件,导入软件,可以进行查找和破解;在Hydra的操作中,在kali的Hydra支持下,我们选用了大小为2万的密码本再次进行了检测,依然未能成功。
Windows操作系统安全配置缺陷自动检测技术_第6张图片

随后,我们使用Python编写脚本,直接向cmd发送指令尝试,发现在用户锁定策略的限制下,无法进行有效的尝试就会被账户锁,且账户锁定期间手动也无法获取管理员权限。
因此,在多次尝试弱口令爆破失败之后,我们采用获取本地安全策略的方式,通过允许最小密码长度,密码复杂度等多维度来衡量弱口令安全分数值。

3.2.2,端口扫描检测

定义:
端口扫描是指发送一组扫描消息,了解其提供的计算机网络服务类型(这些网络服务均与特定的端口号绑定),端口扫描是网络安全工作者的必备的利器。
端口扫描定义是客户端向一定范围的服务器端口发送对应请求,以此确认可使用的端口。虽然其本身并不是恶意的网络活动,但也是网络攻击者探测目标主机服务,以利用该服务的已知漏洞的重要手段。端口扫描的主要用途仍然只是确认远程机器某个服务的可用性。
扫描多个主机以获取特定的某个端口被称为端口清(Portsweep),以此获取特定的服务。例如,基于SQL服务的计算机蠕虫就会清扫大量主机的同一端口以在 1433 端口上建立TCP连接。
通过资料查询,我们了解到:Windows10默认开启一些日常用不到的端口,这些端口让黑客有机可乘(黑客会使用工具扫描计算机上的端口,并入侵这些端口),关闭这些高危端口,可使我们的电脑避免遭受攻击。例如关闭445端口等,可有效防止勒索病毒防止互联网上出现针对Windows操作系统的勒索软件的攻击案例。
当然,因为技术问题,我们的端口扫描和市面上的主要软件还是有所差距,我们的端口扫描主要是查询本地计算机开放的端口、状态、外部地址、以及pid对应的进程。
Windows操作系统安全配置缺陷自动检测技术_第7张图片
算法实现:

1. import sys  
2. import os  
3. import re  
4. class Logger(object):  
5.     def __init__(self, filename="Default.log"):  
6.         self.terminal = sys.stdout  
7.         self.log = open(filename, "a")  
8.
9.     def write(self, message):  
10.         self.terminal.write(message)  
11.         self.log.write(message)  
12.  
13.     def flush(self):  
14.        pass  
15.  
16. sys.stdout = Logger('a.txt')  
17. netinfo = os.popen('netstat -ano')  
18. cmt = re.compile("[^\s]+")  
19.  
20. pids = []  
21. result = []  
22.  
23. i=0  
24. for x in netinfo.readlines():  
25.    temp=cmt.findall(x)  
26.     if(i!=4):  
27.        i+=1  #舍弃前四行  
28.     else:  
29.         result.append(temp) ##双层列表保存netstat读出的信息  
30.         #res[len(res)-1]  
31.  
32. i=0  
33. for y in os.popen('tasklist').readlines():  
34.     temp = cmt.findall(y)  
35.     if (i != 4):  
36.         i += 1  # 舍弃前四行  
37.     else:  
38.         pids.append(temp)  ##双层列表保存netstat读出的信息  
39.  
40. for res in result:  
41.     for pid in pids:  
42.         if(pid[1]==res[len(res)-1]):  
43.             res.append(pid[0])  
44.  
45.  
46.  
47. output = open('D:/data(final).xls','w',encoding='gbk')  
48. output.write('协议\t本地地址r\t外部地址\t状态\tPID\t进程名\n')  
49. for i in range(len(result)):  
50.     for j in range(len(result[i])):  
51.         output.write(str(result[i][j]))    #write函数不能写int类型的参数,所以使用str()转化  
52.         output.write('\t')   #相当于Tab一下,换一个单元格  
53.     output.write('\n')       #写完一行立马换行  
54. print("thanks")  

以上是代码的主要部分
通过python语句调用cmd命令行,在cmd中输入对应指令,查询本机开放端口信息,再查询运行的进程信息。在进程和端口之间有个共通之处,那就是PID。我们通过PID实现了两个表的连接,最终形成了一个完整的表。通过对操作系统的知识学习,PID是进程识别号,每次启动,甚至每台电脑,可能对应的PID对应的进程都不一样,所以PID其实并没有太大作用,需要的是进程的名字。在连接的过程中需要有信息的筛选和匹配,我们使用了python中的正则表达式来帮助我们实现这个目标。
cmd命令行为windows提供了DOS命令netstat,可以显示当前的 TCP/IP 网页持续环境,让用户得知有哪些网络连接正在运作

netstat -ano :-a 可以查询显示所有socket,包括正在监听的 -n 以网络IP地址代替名称,显示出网络连接情形。-o 显示太网统计信息(timers)。

“Tasklist”命令是一个用来显示运行在本地或远程计算机上的所有进程的命令行工具,带有多个执行参数。

我们通过资料查询到的几个危险端口,这些高危端口通过各种百科的定义都是属于一般情况下不会打开,并且有风险。我们有理由认为,这些端口的打开的风险大于收益,因此建议关闭,这一类端口会进行扣分,扣两分,然后建议用户关闭。还有一类是属于有特殊需求的用户可能会开放的端口,但是鉴于常见的计算机都没有这部分需求,所以我们会给出建议并扣分,这类端口扣一分,然后用户可以通过对应的进程和自己的需求自行判断是否需要开放该端口。

该算法还会在每次分析后生成一个文件,类似于日志记录每次的评分,也可以查询历史评分。

3.2.3,本地安全检测

模块设计思路:
1)利用Powershell检查计算机的状态,在这部分内容中,我们利用了Microsoft官网给出的专门检测计算机各项能够代表计算机安全状态的命令Get-MpComputerStatus来检查我们的计算机目前的防护能力,按照我们选出的评分标准进行分数的评判。
2)利用cmd命令secedit /export /cfg gp.txt /log 1.log检测本地安全策略中用户权限分配中的各项并将它到gp.txt中,我们利用查找工具来找到这个txt文件在整个计算机中的位置,我们读取文件后利用正则表达式去查找我们所需的评分项,提取出里面的要点来进行打分。
3)利用cmd命令netsh firewall show config检测本地防火墙状态,监督所有与外界有包经过防火墙的进程,我们利用正则表达式来选取几项得分项判断这些得分项是否符合我们的标准,并给出最后的得分。

3.2.4,系统版本及补丁检测

一个基于主机系统版本号与已有的KB的漏洞扫描程序。
步骤:
1.利用powershell脚本采集主机的系统版本与KB信息
2.在微软官网上收集CVE与KB对应的关系,并存储进数据库(db文件)中
3.用系统版本与KBt与数据库中数据比较,寻找主机没有对应KB的CVE
4.获取上一步中得到的CVE的威胁分类
5.根据威胁分类评分
威胁分类与危险等级评估可见评分手册。
演示效果:
Windows操作系统安全配置缺陷自动检测技术_第8张图片
数据库(CVE与KB对应的关系)展示:
Windows操作系统安全配置缺陷自动检测技术_第9张图片

3.2.5,网络配置检测

简要介绍:
对于网络配置的安全性来说,我们去上网查找了许多资料,在cmd中输入ipconfig就可以查看该电脑的网络配置,不过我们直在安全性上陷入了迷茫,最后才在与网络相关的服务中做文章。我们的计算机中有许多网络部分相关的服务,而这些服务却并不是都对我们的日常使用会有帮助,有一些少用、甚至完全用不上的服务,就可以选择关闭掉。于是我去上网络上找到了一些常见的不必要开启的网络服务,并通过python调用windows的服务系统,检测相关的服务是否关闭,并且会有一个相关的打分评价,评价是基于我去查看windows网络服务具体的内容,根据关闭后对普通用户的影响大小,来进行或高或低的打分评价。同时,作为网络中重要的一环,internet的连接检测也加入在内,原理则是通过调用ping指令,并以www.baidu.com为测试的站点,对网络连接状况进行检测。值得一说的是,加上这一点的理由是我在查阅常见的与网络配置有关的问题的时候,有一个问题是微信和qq可以正常使用,但是上网却做不到。就是因为本身就没有连上internet网络,但是qq与微信有备用的dns服务器,所以能够正常使用。不过比较可惜的是,并没有能够解决有关dns服务器出现问题的进一步处理。
程序编写的思路:
这次有关于网络配置服务的检测程序结构相对比较简单,主要就是引入了wmi类,使用了Win32_Service函数就是可以直接调用服务的信息,再通过if条件来进行具体情况的一个判断,并进行一个相应的打分。而且为了让用户更好的了解这些不太必要的服务的具体情况,我也在后面加上了一些对服务的解释,具体的服务功能和扣分情况有在评分手册里面详细说明。这里可以简单谈谈选择这些服务的原因。
1.DHCP Client
如果是手动分配的ip就可以关闭,不过现在大多都是自动获取ip地址了。
2.Background Intelligent Transfer Service
如果不用系统自动更新,并且已经关闭win10系统自动更新的用户可以关闭此服务。对系统使用没有任何的影响。但是想要使用win10系统自动更新的用户千万不要关闭此服务。
3.Computer Browser
家庭用户一般不会涉及到局域网是可以禁用掉的,但是网吧或企业就要用到局域网文件共享是需要开启这个服务的。
4.IP Helper
用于IPV6的服务,在之前的话可能还要调成手动,现在的话完全可以打开。
5.Print Spooler
不使用打印机的就可以关闭该服务。
6.Remote Registry
如果远程的计算机连接到了你的计算机那么他可以通过字符界面或者其他方式远程修改注册表.这是一个相当严重的漏洞,可以为黑客入侵提供早期的方便(修改某些项目便于入侵,比如操作系统版本). 因此关闭这个服务没有什么害处,而益处很多.强烈建议关闭,并且禁用.另外系统中没有其他服务是依赖或者跟此服务有关联的,所以禁用之后不会对其他服务产生影响。
7.Server
该服务提供RPC支持以及文件、打印和命名管道共享。Server服务是作为文件系统驱动器来实现的,可以处理I/O请求。如果用户没有提供适当的保护,会暴露系统文件和打印机资源。对于Windows系统而言,这是一个高风险服务。Windows中默认共享的存在就是该服务的问题。如果不禁用该服务,每次注销系统或开机后,默认共享就会打开,你的所有重要信息都将暴露出来。同时,由于很多 Windows使用者为了使用方便把管理员密码设置为空密码或非常简单的密码组合,这给了黑客可乘之机。
所以,如果不是工作环境下,不需要使用局域网和共享打印机的,建议关闭此项服务。
8. TCP/IP NetBIOS Helper
NetBIOS在Win 9X下就经常有人用它来进行攻击,然后将此数据写入日志或触发警报为了防止被远程计算机搜索数据,否则一定要禁止它。
9.Windows Remote Management (WS-Management)
如果不是用远程界面就可以关闭的服务。
10. Windows Error Reporting Service
如果电脑性能不是很好的话建议关闭,如果电脑性能优秀的话建议开启,毕竟这些错误的信息有助于微软帮我们改善系统,是跟我们的利益切身相关的。
下面展示一些 内联代码片

1.c = wmi.WMI()  
2.count = 0  
3.score = 100  
4.running_service = c.Win32_Service(State="Running")  
5.for s in running_service:  
6.  
7.    if(s.Name == "Dhcp"):  
8.        print(s.Caption,"服务正在运行,如果不使用动态ip地址,就禁用该服务\n")  
9.        count+=1  
10.        score-=0.5  
11.    if(s.Name == "BrokerInfrastructure"):  
12.        print(s.Caption, "服务正在运行,如果不启动自动更新,就禁用该服务\n")  
13.        count+=1  
14.        score-=1  
15.    if (s.Name == "Browser"):  
16.        print(s.Caption, "服务正在运行,建议禁用\n")  
17.        count += 1  
18.        score-=2  
19.    if (s.Name == "iphlpsvc"):  
20.        print(s.Caption, "服务正在运行,建议禁用。该服务用于转换IPv6 to IPv4\n")  
21.        count += 1  
22.        score-=2  
23.    if (s.Name == "Spooler"):  
24.        print(s.Caption, "服务正在运行,如果不需要打印,建议禁用该服务\n")  
25.        count += 1  
26.        score -= 1.5  
27.    if (s.Name == "RemoteRegistry"):  
28.        print(s.Caption, "服务正在运行,该服务主要用于远程管理注册表,建议禁用该服务\n")  
29.        count += 1  
30.        score -= 2  
31.    if (s.Name == "LanmanServer"):  
32.        print(s.Caption, "服务正在运行,如果不使用文件共享,就禁用该服务。禁用本服务将关闭默认共享\n")  
33.        count += 1  
34.        score -= 1  
35.    if (s.Name == "lmhosts"):  
36.        print(s.Caption, "服务正在运行,建议禁用\n")  
37.        count += 1  
38.        score -= 1  
39.    if (s.Name == "WinRM"):  
40.        print(s.Caption, "服务正在运行,建议禁用\n")  
41.        count += 1  
42.        score -= 1  
43.    if (s.Name == "FontCache"):  
44.        print(s.Caption, "通过缓存常用字体数据优化应用程序的性能。如果尚未运行该服务,则应用程序将启动该服务。也可以禁用该服务,但是这样做会降低应用程序性能。\n")  
45.        count += 1  
46.        score -= 1  
47.    if (s.Name == "WinHttpAutoProxySvc"):  
48.        print(s.Caption, "服务正在运行,建议禁用\n")  
49.        count += 1  
50.        score -= 2  
51.    if (s.Name == "WerSvc"):  
52.        print(s.Caption, "允许在程序停止运行或停止响应时报告错误,并允许提供现有解决方案。还允许为诊断和修复服务生成日志。如果此服务被停止,则错误报告将无法正确运行,而且可能不显示诊断服务和修复的结果。\n")  
53.        count += 1  
54.        score -= 1.5  
55.print ("共 %d 项建议关闭的应用\n" %(count))  
56.print ("评分为%d分" %(score))  

(部分检测服务和打分功能的实现)
而网络连接检测则是通过os.system函数,函数会返回0或者其他值,只有返回0,才表示能够连接到后面的网络地址。

1.import  os  
2.exit_code = os.popen('ping www.baidu.com')  
3.exit_code1 = os.system('ping www.baidu.com')  
4.out = exit_code.read()  
5.print(out)  
6.if exit_code1==0:  
7.    print("网络连接正常\n")  
8.else:  
9.    print("无法连接到Internet\n")  

3.2.6,安全日志检测

安全日志可以记录我们在每个对象上设置的审核策略定义的每个事件,它可以看作是计算机自己记录的“日记”一样,它在记录这些事件的同时为这些事件确定了等级,这可以让我们在众多事件中找到一些异常的可能对我们的计算机造成一定损害的事件,这对于我们来说可谓是一个很实用的工具。
模块设计思路:
在这个部分中,由于Windows系统安全日志存放在C:\Windows\System32\winevt\Log\中,由于系统自带的权限管理和防护,我们如果要在这里对日志进行操作的话会很麻烦,所以我们选择将Windows安全日志调出到D盘以实现整个流程,由于以evtx为扩展名的文件我们是没有办法处理的,因此我们利用一个Microsoft的插件LogParser来实现从evtx文件到csv格式的转化,由于读入csv时会出现编码的问题,因此我们采取了将文件重命名的方法,将csv文件来转化为txt文件。通过对于txt的读取,我们可以看到Windows最近存储的20M系统日志,我们利用正则表达式来实现对于总体的文件所需的事件ID和事件等级的提取,最后利用我们的分数计算函数来计算出我们的计算机在Windows安全日志部分的得分。

3.3,程序函数清单

  • 实现编码的转换
    def change(path,coding):
  • 获得所有txt文件的路径,传入文件所在文件夹路径
    def find_all_file(path):
  • 修改文件编码方式 path是绝对路径
    def change_to_utf_file(path):
  • 判断是不是utf-8编码方式 返回编码格式
    def judge_coding(path):
  • 多线程加速官网漏洞库扫描
    class CVEScanThread(threading.Thread)
  • 多线程加速shodan网站CVE-POC查询
    class POCScanThread(threading.Thread):
  • 获取本系统信息
    Def python_call_powershell()
  • 更新CVEKB数据库
    Def update_cvekb_database()
  • 对官网数据进行分页
    def get_page_num(dstDateStrArg=None)
  • 每一页的查询
    def update_onepage_cvedb_database()
  • 根据系统信息查找无KB的CVE
    def select_CVE(tmpList=[], windowsProductName="", windowsVersion="")
  • 通过一个cve查找poc,用字典存储,便于扣分
    def check_POC_every_CVE(CVE)
  • 多线程查询CVE对应的POC
    def update_cvepoc_dir(cveList=[])
  • 评分函数
    def assessment(cveList=[])
  • 自己定义的端口扫描
    def port_scanning
  • 构成生成日志
    Class Logger
    Def write
    Def flush

设计成果

Windows操作系统安全配置缺陷自动检测技术_第10张图片
Windows操作系统安全配置缺陷自动检测技术_第11张图片

设计心得

本次小学期的选题是windows操作系统安全配置缺陷自动检测技术,我们也通过这次的学习与实践,对windows系统又有了更加深刻的了解。不过比较遗憾的是以我们目前的技术水平只能做到调用windows的本地策略,为用户提交一份有关的报告,并没能做到深入检测系统检测不到的漏洞。虽然我们也知道这样的难度会大大增加,不过我们也相信,这一次又一次的课程实践,能够让我们成长更多,并向着更加高端的技术前进。
在写这部分代码的时候,我们也遇到过很多问题,例如:我们无法利用cmd命令行来实现对于系统日志的打印和修改,我们也没有办法更改csv文件的编码格式,现在仔细一想,我们也算是另辟蹊径,从不同的方向到达了同样的地点,在这其中,我们其实走了不少的弯路,我们在这上面也是花了很长的时间去实现,其实如果按照原本的设想去实现的话,我们其实可以节约很长的时间,可以去实现在更广的领域开展更加深入的探索和研究。在今后的大学时光中,我们会不断吸收和计算机安全相关的知识,让自己的内涵更加充实,从而在更多的项目中发挥出更大的作用。

你可能感兴趣的:(windows安全,漏洞检测,漏洞扫描,windows,安全,系统架构)