漏洞检测的几种方法

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了漏洞检测的几种方法相关的知识,希望对你有一定的参考价值。

漏洞扫描有以下四种检测技术:
  1.基于应用的检测技术。它采用被动的、非破坏性的办法检查应用软件包的设置,发现安全漏洞。
  2.基于主机的检测技术。它采用被动的、非破坏性的办法对系统进行检测。通常,它涉及到系统的内核、文件的属性、操作系统的补丁等。这种技术还包括口令解密、把一些简单的口令剔除。因此,这种技术可以非常准确地定位系统的问题,发现系统的漏洞。它的缺点是与平台相关,升级复杂。
  3.基于目标的漏洞检测技术。它采用被动的、非破坏性的办法检查系统属性和文件属性,如数据库、注册号等。通过消息文摘算法,对文件的加密数进行检验。这种技术的实现是运行在一个闭环上,不断地处理文件、系统目标、系统目标属性,然后产生检验数,把这些检验数同原来的检验数相比较。一旦发现改变就通知管理员。
  4.基于网络的检测技术。它采用积极的、非破坏性的办法来检验系统是否有可能被攻击崩溃。它利用了一系列的脚本模拟对系统进行攻击的行为,然后对结果进行分析。它还针对已知的网络漏洞进行检验。网络检测技术常被用来进行穿透实验和安全审记。这种技术可以发现一系列平台的漏洞,也容易安装。但是,它可能会影响网络的性能。
  网络漏洞扫描
  在上述四种方式当中,网络漏洞扫描最为适合我们的Web信息系统的风险评估工作,其扫描原理和工作原理为:通过远程检测目标主机TCP/IP不同端口的服务,记录目标的回答。通过这种方法,可以搜集到很多目标主机的各种信息(例如:是否能用匿名登录,是否有可写的FTP目录,是否能用Telnet,httpd是否是用root在运行)。
  在获得目标主机TCP/IP端口和其对应的网络访问服务的相关信息后,与网络漏洞扫描系统提供的漏洞库进行匹配,如果满足匹配条件,则视为漏洞存在。此外,通过模拟黑客的进攻手法,对目标主机系统进行攻击性的安全漏洞扫描,如测试弱势口令等,也是扫描模块的实现方法之一。如果模拟攻击成功,则视为漏洞存在。
  在匹配原理上,网络漏洞扫描器采用的是基于规则的匹配技术,即根据安全专家对网络系统安全漏洞、黑客攻击案例的分析和系统管理员关于网络系统安全配置的实际经验,形成一套标准的系统漏洞库,然后再在此基础之上构成相应的匹配规则,由程序自动进行系统漏洞扫描的分析工作。
  所谓基于规则是基于一套由专家经验事先定义的规则的匹配系统。例如,在对TCP80端口的扫描中,如果发现/cgi-bin/phf/cgi-bin/Count.cgi,根据专家经验以及CGI程序的共享性和标准化,可以推知该WWW服务存在两个CGI漏洞。同时应当说明的是,基于规则的匹配系统有其局限性,因为作为这类系统的基础的推理规则一般都是根据已知的安全漏洞进行安排和策划的,而对网络系统的很多危险的威胁是来自未知的安全漏洞,这一点和PC杀毒很相似。
  这种漏洞扫描器是基于浏览器/服务器(B/S)结构。它的工作原理是:当用户通过控制平台发出了扫描命令之后,控制平台即向扫描模块发出相应的扫描请求,扫描模块在接到请求之后立即启动相应的子功能模块,对被扫描主机进行扫描。通过分析被扫描主机返回的信息进行判断,扫描模块将扫描结果返回给控制平台,再由控制平台最终呈现给用户。
  另一种结构的扫描器是采用插件程序结构。可以针对某一具体漏洞,编写对应的外部测试脚本。通过调用服务检测插件,检测目标主机TCP/IP不同端口的服务,并将结果保存在信息库中,然后调用相应的插件程序,向远程主机发送构造好的数据,检测结果同样保存于信息库,以给其他的脚本运行提供所需的信息,这样可提高检测效率。如,在针对某FTP服务的攻击中,可以首先查看服务检测插件的返回结果,只有在确认目标主机服务器开启FTP服务时,对应的针对某FTP服务的攻击脚本才能被执行。采用这种插件结构的扫描器,可以让任何人构造自己的攻击测试脚本,而不用去了解太多扫描器的原理。这种扫描器也可以用做模拟黑客攻击的平台。采用这种结构的扫描器具有很强的生命力,如着名的Nessus就是采用这种结构。这种网络漏洞扫描器的结构如图2所示,它是基于客户端/服务器(C/S)结构,其中客户端主要设置服务器端的扫描参数及收集扫描信息。具体扫描工作由服务器来完成。
参考技术A 系统安全漏洞,也可以称为系统脆弱性,是指计算机系统在硬件、软件、协议的设计、具体实现以及系统安全策略上存在的缺陷和不足。系统脆弱性是相对系统安全而言的,从广义的角度来看,一切可能导致系统安全性受影响或破坏的因素都可以视为系统安全漏洞。安全漏洞的存在,使得非法用户可以利用这些漏洞获得某些系统权限,进而对系统执行非法操作,导致安全事件的发生。漏洞检测就是希望能够防患于未然,在漏洞被利用之前发现漏洞并修补漏洞。本文作者通过自己的实践,介绍了检测漏洞的几种方法。 漏洞检测可以分为对已知漏洞的检测和对未知漏洞的检测。已知漏洞的检测主要是通过安全扫描技术,检测系统是否存在已公布的安全漏洞;而未知漏洞检测的目的在于发现软件系统中可能存在但尚未发现的漏洞。现有的未知漏洞检测技术有源代码扫描、反汇编扫描、环境错误注入等。源代码扫描和反汇编扫描都是一种静态的漏洞检测技术,不需要运行软件程序就可分析程序中可能存在的漏洞;而环境错误注入是一种动态的漏洞检测技术,利用可执行程序测试软件存在的漏洞,是一种比较成熟的软件漏洞检测技术。 安全扫描 安全扫描也称为脆弱性评估(Vulnerability Assessment),其基本原理是采用模拟黑客攻击的方式对目标可能存在的已知安全漏洞进行逐项检测,可以对工作站、服务器、交换机、数据库等各种对象进行安全漏洞检测。 到目前为止,安全扫描技术已经达到很成熟的地步。安全扫描技术主要分为两类:基于主机的安全扫描技术和基于网络的安全扫描技术。按照扫描过程来分,扫描技术又可以分为四大类:Ping扫描技术、端口扫描技术、操作系统探测扫描技术以及已知漏洞的扫描技术。 安全扫描技术在保障网络安全方面起到越来越重要的作用。借助于扫描技术,人们可以发现网络和主机存在的对外开放的端口、提供的服务、某些系统信息、错误的配置、已知的安全漏洞等。系统管理员利用安全扫描技术,可以发现网络和主机中可能会被黑客利用的薄弱点,从而想方设法对这些薄弱点进行修复以加强网络和主机的安全性。同时,黑客也可以利用安全扫描技术,目的是为了探查网络和主机系统的入侵点。但是黑客的行为同样有利于加强网络和主机的安全性,因为漏洞是客观存在的,只是未被发现而已,而只要一个漏洞被黑客所发现并加以利用,那么人们最终也会发现该漏洞。 安全扫描器,是一种通过收集系统的信息来自动检测远程或本地主机安全性脆弱点的程序。安全扫描器采用模拟攻击的形式对目标可能存在的已知安全漏洞进行逐项检查。目标可以是工作站、服务器、交换机、数据库等各种对象。并且,一般情况下,安全扫描器会根据扫描结果向系统管理员提供周密可靠的安全性分析报告,为提高网络安全整体水平提供了重要依据。 安全扫描器的性质决定了它不是一个直接的攻击安全漏洞的程序,它是一个帮助我们发现目标主机存在着弱点的程序。一个优秀的安全扫描器能对检测到的数据进行分析,帮助我们查找目标主机的安全漏洞并给出相应的建议。 一般情况下,安全扫描器具备三项功能: ● 发现Internet上的一个网络或者一台主机; ● 一旦发现一台主机,能发现其上所运行的服务类型; ● 通过对这些服务的测试,可以发现存在的已知漏洞,并给出修补建议。 源代码扫描 源代码扫描主要针对开放源代码的程序,通过检查程序中不符合安全规则的文件结构、命名规则、函数、堆栈指针等,进而发现程序中可能隐含的安全缺陷。这种漏洞分析技术需要熟练掌握编程语言,并预先定义出不安全代码的审查规则,通过表达式匹配的方法检查源程序代码。本回答被提问者采纳 参考技术B

漏洞检测可以分为对已知漏洞的检测和对未知漏洞的检测。

已知漏洞的检测主要是通过安全扫描技术,检测系统是否存在已公布的安全漏洞;而未知漏洞检测的目的在于发现软件系统中可能存在但尚未发现的漏洞。

现有的未知漏洞检测技术有源代码扫描、反汇编扫描、环境错误注入等。

1、源代码扫描

源代码扫描主要针对开放源代码的程序,通过检查程序中不符合安全规则的文件结构、命名规则、函数、堆栈指针等,进而发现程序中可能隐含的安全缺陷。

2、反汇编扫描

反汇编扫描对于不公开源代码的程序来说往往是最有效的发现安全漏洞的办法。分析反汇编代码需要有丰富的经验,也可以使用辅助工具来帮助简化这个过程,但不可能有一种完全自动的工具来完成这个过程。

3、环境错误注入

由程序执行是一个动态过程这个特点,不难看出静态的代码扫描是不完备的。环境错误注入是一种比较成熟的软件测试方法,这种方法在协议安全测试等领域中都已经得到了广泛的应用。

错误注入,即在软件运行的环境中故意注入人为的错误,并验证反应——这是验证计算机和软件系统的容错性、可靠性的一种有效方法。错误注入方法就是通过选择一个适当的错误模型试图触发程序中包含的安全漏洞。

参考技术C 这个简单啊选择漏洞扫描修复工具你可以试试腾讯电脑管家,打开腾讯电脑管家,点击工具箱,然后选漏洞修复就可以了。
腾讯电脑管家是一款免费专业的杀毒软件。
集“专业病毒查杀、智能软件管理、系统安全防护”于一身,
开创了“杀毒 + 管理”的创新模式。
参考技术D 可以安装一个电脑管家在电脑上
然后打开工具箱,在里面找到修复漏洞功能
使用这个功能,去修复电脑所有检测出的高危漏洞即可

python检测挖矿特征的几种方式

电脑性能上:

①cpu和内存使用率(常见):

python 实时得到cpu和内存的使用情况方法_python_脚本之家
https://www.jb51.net/article/141835.htm

②c盘剩余容量(有的挖矿程序会占用c盘大量内存):

Python实现获取磁盘剩余空间的2种方法_python_脚本之家
https://www.jb51.net/article/115604.htm

③直接对已有挖矿进程库进行杀死:

Python3之查看windows下所有进程并杀死指定进程 - Quincy.Coder的博客 - CSDN博客
https://blog.csdn.net/qq_33733970/article/details/80751957

整理并加上其他功能(流量,端口)完成代码如下:

  1 #!/usr/bin/python3
  2 # coding:utf-8
  3 from tkinter import *
  4 import psutil,linecache,ctypes,wmi
  5 import os,datetime,time,platform,sys,socket
  6 
  7 def net_is_used(port,ip=127.0.0.1):#端口检测
  8     s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
  9     try:
 10         s.connect((ip,port))
 11         s.shutdown(2)
 12         print(%s:%d is used % (ip,port))
 13         return True
 14     except:
 15         print(%s:%d is unused % (ip,port))
 16         return False
 17 
 18 def get_network_flow(os):#当前流量特征
 19     if os == "Windows":
 20         c = wmi.WMI()
 21         for interfacePerTcp in c.Win32_PerfRawData_Tcpip_TCPv4():
 22             sentflow = float(interfacePerTcp.SegmentsSentPersec)  #已发送的流量
 23             receivedflow = float(interfacePerTcp.SegmentsReceivedPersec) #接收的流量
 24             present_flow = sentflow+receivedflow    #算出当前的总流量
 25         time.sleep(1)
 26         for interfacePerTcp in c.Win32_PerfRawData_Tcpip_TCPv4():
 27            sentflow = float(interfacePerTcp.SegmentsSentPersec)  #已发送的流量
 28            receivedflow = float(interfacePerTcp.SegmentsReceivedPersec) #接收的流量
 29            per_last_present_flow = sentflow+receivedflow     #算出1秒后当前的总流量
 30         present_network_flow = (per_last_present_flow - present_flow)/1024
 31         return "%.2f"%present_network_flow
 32 
 33 def getMemCpu():
 34     global n
 35     data = psutil.virtual_memory()
 36     total = data.total #总内存,单位为byte
 37     free = data.available #可以内存
 38     memory = "Memory usage:%d"%(int(round(data.percent)))+"%\n"#内存使用率
 39     cpu = "CPU:%0.2f"%psutil.cpu_percent(interval=1)+"%\n"#CPU使用率
 40     if int(round(data.percent))>75 and psutil.cpu_percent(interval=1) > 75:#挖矿一个特征
 41         n=1#☆☆☆阈值
 42     else:
 43         n=0
 44     return memory+cpu
 45 
 46 def get_free_space_mb(folder):#C盘内存剩余量
 47     if platform.system() == Windows:
 48         free_bytes = ctypes.c_ulonglong(0)
 49         ctypes.windll.kernel32.GetDiskFreeSpaceExW(ctypes.c_wchar_p(folder), None, None, ctypes.pointer(free_bytes))
 50         return free_bytes.value/1024/1024/1024
 51     else:
 52         st = os.statvfs(folder)
 53         return st.f_bavail * st.f_frsize/1024/1024
 54 
 55 def on_click():#开始检测按钮函数  
 56     global num,n,cont
 57     os = platform.system()
 58     label[text] = 正在检测···
 59     info=getMemCpu()
 60     info = info +"C free space:%0.2f"%get_free_space_mb(C:\\) + "G\n"
 61     flow=get_network_flow(os)
 62     if float(flow) > 3000:#病毒一般占用3033KB/s☆☆☆阈值
 63         n=1
 64     info = info + "traffic:" + flow + "KB/s"
 65     conte=linecache.getlines(port.txt)#端口在port文件中
 66     for i in range(len(conte)):#病毒一般占用4位数端口,端口范围可选,或针对端口关闭
 67         if net_is_used(int(conte[i])):
 68             n=1
 69     #if net_is_used(xxx):xxx为指定端口
 70     #    n=1
 71     if get_free_space_mb(C:\\) < 1:
 72         n=1
 73     pids = psutil.pids()
 74     cont=linecache.getlines(process.txt)
 75     for j in range(len(cont)):
 76             cont[j]=cont[j][:len(cont[j])-1]
 77     for pid in pids:
 78         p = psutil.Process(pid)
 79         #print(p.name())
 80         for j in range(len(cont)):
 81             if p.name() == cont[j]:
 82                 n=1
 83     myfile=open(test.txt,a)
 84     if n==0:
 85         message[text] = 本系统现未遭受挖矿攻击\n+info
 86         middle=time.strftime(%Y%m%d%H%M,time.localtime(time.time()))+ normal  + str("%.2f"%get_free_space_mb(C:\\)) +   + flow
 87         message[bg] = green
 88         myfile.write(\n+middle)
 89     if n==1:
 90         message[text] = 本系统正在遭受挖矿,紧急!\n+info
 91         middle=time.strftime(%Y%m%d%H%M,time.localtime(time.time()))+ warning + str("%.2f"%get_free_space_mb(C:\\)) +   + flow
 92         message[bg] = yellow
 93         myfile.write(\n+middle)
 94     myfile.close()
 95     label[text] = 完成检测!
 96 
 97 def on_click2():#读取日志按钮函数
 98     label[text] = 日志读取
 99     content=linecache.getlines(test.txt)
100     logs=‘‘
101     for i in range(len(content)):
102         mid=‘‘
103         mid=content[i][0:4]+.+content[i][4:6]+.+content[i][6:8]+ +content[i][8:10]+:+content[i][10:]
104         logs=logs+mid
105     message[text] = logs
106 
107 def on_click3():#重置按钮函数
108     message[text] = ‘‘
109     label[text] = 欢迎使用本反挖矿系统 
110     message[bg] = white
111 
112 def on_click4():#杀死文件中进程函数
113     global n,cont
114     pids = psutil.pids()
115     #cont=linecache.getlines(‘process.txt‘)
116     for pid in pids:
117         p = psutil.Process(pid)
118         #print(p.name())
119         for j in range(len(cont)):
120             if p.name() == cont[j]:
121                 cmd = taskkill /f /t /im + "+cont[j]+"
122                 os.system(cmd)
123                 message[text] = 指定文件中进程已清除
124                 message[bg] = green
125 
126 n=0
127 root=Tk(className=反挖矿系统)
128 root.geometry(400x300)
129 label = Label(root)  
130 label[text] = 欢迎使用本反挖矿系统  
131 message = Label(root,text=‘‘)   
132 label.pack() 
133 button = Button(root,text=开始使用,command=on_click)
134 button.pack() 
135 button2 = Button(root,text=查看日志,command=on_click2)  
136 button2.pack() 
137 button3 = Button(root,text=重置界面,command=on_click3)  
138 button3.pack()
139 button4 = Button(root,text=杀死进程,command=on_click4)  
140 button4.pack()
141 message.pack()
142 root.mainloop()

 

以上是关于漏洞检测的几种方法的主要内容,如果未能解决你的问题,请参考以下文章

注入漏洞的检测方法

如何检测网站服务器的漏洞?

渗透检测步骤

Git任意代码执行漏洞检测与修复(CVE-2018-11235)

漏洞检测方法如何选?详解源代码与二进制SCA检测原理

漏洞检测方法如何选?详解源代码与二进制SCA检测原理