当前位置:网站首页>安全漏洞是如何被发现的?
安全漏洞是如何被发现的?
2022-08-04 05:32:00 【安鸾彭于晏】
在解答“安全漏洞是如何被发现的?”这个问题之前,我们先要弄清楚一个概念“安全漏洞”是什么?安全漏洞是指软件、硬件或者系统的一种设计缺陷,使攻击者可以实现设计者预期意外的某些非法操作,进而达到破坏系统运行或者危害用户的目的。比如围墙下的狗洞做得太大,让小偷可以避开监控偷偷钻进来,这就是一个漏洞。
但是缺陷并不一定是漏洞。还是刚刚这个狗洞,如果一开始做的太小了,过两年之后狗都长大了,不能钻过这个狗洞了,所以这个狗洞只好废弃,就不能称作漏洞了,只能说是一个“缺陷”
如果一个缺陷只是影响系统运行,没有达到危害系统安全的程度,一般只称为“bug”,而漏洞的英文名通常是vulnerability(脆弱点,或者说脆弱性)
黑客利用漏洞来搞事情,并不一定用的是“未知漏洞”有可能用的是“已知漏洞”,比方说他知道某个老版本的软件有一个某漏洞,结果一看有个公司正好在用这个版本的软件,还没打补丁,那他就可能利用这个漏洞。
下面分别来说说“如何发现未知漏洞”和“如何发现已知漏洞”
如何发现未知漏洞?
方法一:源代码分析
顾名思义,这种方法需要源代码,但是不一定要靠人的肉眼来一段一段看代码,有很多自动化的方法。
简单来说,就是通过大量对已知的安全漏洞的研究,分析出漏洞产生的原理、模式和常见的代码规律,形成一个知识库,之后再利用这个知识库,对新开发的软件或者系统的源代码进行自动检测,从中发现潜在的未知漏洞。
方法二:人工代码分析
这是系统专家或代码高手常用的“挖洞”方法。这些人往往精通某个特定的系统或软件,如Windows、Android、iOS、web建站系统、常用软件等,或者精通某一类编程语言,如VB、C、C++、Java等,能直接通过肉眼找出安全漏洞,有源代码就看源代码,没有源代码就看反编译的代码。
不过,这种挖洞方法过于依赖高手的存在,往往具有一定的偶然性,难以“量产”。在企业级应用中有很大的局限性。
方法三:恶意程序分析
这是安全分析人员常用的挖洞方法,用来发现别人已经知道并且在用,但是自己还不知道的漏洞。
当安全分析人员捕获到某些新型木马病毒样本时,就会将它们放入一个隔离的虚拟环境中运行,以观察这些程序的活动和行为
如果某个木马病毒在攻击过程中利用的是一个或者几个新型漏洞,就会在这种分析中显现出来,并被安全分析人员捕获。
不过这种方法实际操作起来也不那么容易,毕竟全球每天都有大量新的木马病毒诞生,要从中找出几个特殊的样本,犹如大海捞针。
方法四:模糊测试分析
为了保证软件系统的稳定性和健壮性,测试人员往往会使用人工或自动化的方法对软件和系统进行模糊测试或者叫崩溃测试。比如手动在软件界面中随意单击,或向软件输入各种烂七八糟的数据。如果这些行为引起了软件的崩溃,如闪退、显示异常等,就说明软件的编写是有缺陷的。而每一个缺陷的背后都有可能潜藏着一个安全漏洞。
方法五:业务流程分析
有些安全漏洞并不是由程序代码引起的,而是由于业务流程的设计本身存在安全风险(设计逻辑的漏洞)
比如,一个实名认证系统要求验证用户的身份证,但无法识别验证者使用的是否是自己的身份证,那么这个认证系统的设计实际上就是有漏洞的,就给了犯罪分子可乘之机。
在业务流程中找漏洞,需要了解业务,但不一定需要拥有高超的计算机技术,因此受到各类犯罪团伙的青睐。有时,安全人员对此类漏洞的发现能力还不及黑产团伙。
如何检测已知的安全漏洞
方法一:开源代码检测
如今,绝大多数的软件或系统都是在开源工程的基础上进行开发的。所谓开源工程,是指源代码已经公开的代码工程,它们往往是由一些大公司或开源组织发布的,如Android、Linux等。微软、谷歌、亚马逊、阿里巴巴、腾讯、华为、百度等公司都发布过大量的开源工程。
使用开源工程进行开发,难免会把开源工程本身存在的安全漏洞引入到新开发的软件或者系统中。因此,我们可以用已知的开源漏洞库区检测新开发的软件或系统的源代码,这就是源代码检测
方法二:网络扫描检测
如果一个系统或设备是联网的,那么就可以通过网络扫描的方式来检测漏洞,具体的方法是:首先根据已知漏洞库构造一些特殊的数据包,再将这些数据包发送给要检测的系统或这杯,根据系统或设备做出的反应,来判断其是否具有特定的安全漏洞。一般来说,安全扫描所用的数据包都是无害的,而攻击者则可能直接发送有害的数据包。
并非所有已知漏洞都能够进行自动化的扫描检测。同时,根据相关法律规定,进行扫描检测,首先需要得到系统或设备所有者的授权或同意。
方法三:渗透测试
渗透测试是大型企业和机构对其内部信息系统进行漏洞风险评估的一种方法。这些信息系统的构成往往比较复杂,是多种网络技术、应用和服务的综合系统。对这样的系统进行漏洞检测,需要综合多样的漏洞发现技术,而不是使用某一类单一的漏洞发现技术。
渗透测试一般由企业和机构聘请渗透测试工程师或安全服务人员在互联网上对其内部信息系统进行入侵或神呕吐,主要目的是检测纯技术型漏洞,一般不涉及员工安全意识或管理盲区等问题。
方法四:红队测试
红队测试是从实战攻防演习中衍生出来的一种安全检测方法,主要目的是使用接近真实攻击者的思维和技术手段,去发现企业和机构内部的业务系统漏洞、IT架构漏洞和安全管理盲区。这些漏洞和盲区的实际危害远远大于一般代码漏洞和纯技术型漏洞。
红队测试,就是只有攻击队,而没有防守队的一种简化形式,它比渗透测试的范围更广,更接近实战。
边栏推荐
猜你喜欢
随机推荐
JVM intro
基于Webrtc和Janus的多人视频会议系统开发4 - 改造信令交互系统完成sdp交换过程
Implementation of CAS lock-free queue
MySQL索引
Vmmem 进程(WSL2)消耗内存巨大
Treating as key frame since WebRTC-SpsPpsIdrIsH264Keyframe is disabled 解决
JDBC第一学之进行数据库连接时出现The server time zone.....解决办法
指针的运算【C语言】
Shell基础
counting cycle
strlen 转义字符
第三章 标准单元库(下)
Socket编程详解
Tencent and NetEase have taken action one after another. What is the metaverse that is so popular that it is out of the circle?
Rules.make - suitable for viewing in edit mode
[日常办公][shell]常用代码段
C语言无符号整型运算
JUC并发容器——ConcurrentLinkedQueue
LeetCode_Nov_2nd_Week
Object.requireNonNull 方法说明