安全漏洞

什么是漏洞?

bug的由来,大家都知道吧,是一桩趣事,计算机有史以来第一起故障是由一个虫子(bug)引起的,所以bug后来被用于描述计算机程序故障,运行缺陷,逻辑错误等等。然后把找bug的行为称之为debug。

在bug包含的场景中,有一些缺陷场景很是特殊,它们本身会破坏程序的本身(拒绝服务),做出程序不该做的危险操作(终端指令执行),甚至可以拿到其他用户的数据(越权)等等。为了区分,下载乃常用 vulnerability(弱点,脆弱性)来特指安全类的bug。

在大陆,大众理解的bug就是指代的程序缺陷:

  • 按钮点击未响应
  • 页面加载异常

等等;但是,对于安全类的缺陷常用漏洞来指代。

注意,接下来这个文集讲解的所有漏洞基本都泛指安全漏洞

我学到这里的时候,有想到计算机病毒,后来查阅了一下相关资料之后,可以简单的说一下区别:

  • 计算机病毒本质上就是为了恶意攻击而开发的程序
  • 安全漏洞是设计缺陷而被利用的被动弱点

这里举个很经典的例子:

于2017年5月12日集中爆发的WannaCry勒索病毒,就是利用了Windows系统的SMBv1漏洞组件进行了勒索攻击。远程发送特制的数据包,寻找445端口开启的主机,利用EternalBlue工具远程注入恶意代码,成功之后获取系统的控制权,然后修改用户文件,进行加密,后缀改成.WNCRY,除非支付比特币赎金,否则无法解密。并且还可以横向传播,对局域网的其他主机相继进行感染。

这个故事很经典,感兴趣可以搜索相关信息查看。作为信息安全的安全漏洞的反面教程是最为合适的。

总而言之,安全漏洞属于程序预期之外的可造成安全问题的缺陷

漏洞分类

了解完了安全漏洞相关的概念之后,接着来说一下常用的漏洞分类。根据我的学习了解,行业内根据漏洞是否具有普遍性,将其分为了 通用性漏洞事件型漏洞

通用性漏洞

简单来说就是全网通杀,多见于第三方组件、常用框架、或者是售卖给第三方的系统软件(OA系统)等这种在互联网上有一定数量规模的独立部署或者使用的程序。

特点总结:

  • 漏洞程序或者组件是第三方提供的
  • 漏洞程序或者组件是独立部署或者使用的,不依托于提供商平台
  • 漏洞程序或者组件在市面上有一定数量规模的使用

举个例子:

2021年年底的Log4J2反序列化命令执行漏洞。Log4J2作为一个Java日志记录的知名第三方组件,当自身的漏洞被挖掘之后,全网所有使用该组件的应用也就通通都存在了漏洞。

事件型漏洞

属于业务自己的应用系统独有的漏洞,可以被称之为某个漏洞点,修改之后就没有安全风险了,可以作为一次是影响到了自己的安全事件进行对待。

这一类漏洞通常是跟自身业务逻辑代码挂钩的,与第三方组件或者应用没有关系的。比如说:业务系统有一个接口没有经过授权就可以查看用户的信息,它影响的就仅仅是自身平台的用户,这就是属于事件型漏洞。

我这次的文集学习内容也会集中到这一类漏洞。

漏洞风险程度

了解完漏洞的相关概念,我们来讲讲漏洞的危害,因为这关系到了为什么要修复漏洞,说不定可以就此解决一些疑惑:”为什么如此注重安全?“

风险三要素

  • 漏洞危害:直接代表一个漏洞可以导致的安全结果,比如:我可以随意执行命令,从而批量获取用户信息,或者可以造成系统拒绝服务。
  • 影响范围:表示一个漏洞可以波及到的量级(数据量或者持续时间);比如:是只能影响到一个用户,还是能够影响到多个用户,是中断服务几分钟,还是中断服务一整天?甚至更久?
  • 利用难度:代表一个利用该漏洞时需要付出的成本(资源,时间成本);比如:一个需要用户交互的漏洞肯定是要比一个可以直接利用的漏洞的利用难度要高。这里说个题外话,有人说黑客为啥不拿下某宝某东?严格意义上来说,没有绝对安全的系统,如果要拿下是有办法的(硬要说的话人就是最大的安全隐患),但是为什么不拿下呢?因为贵,攻击的成本要大于产出,故而没有必要,这就是典型的难度高的例子。

风险定级

当总结出了漏洞风险三要素之后,就可以正确的看待漏洞的风险承担了。那么,凡是都有个轻重缓急,总不能是个漏洞就马上修复。因为大家平时开发也挺忙的。

所以!这里就对漏洞进行了分级,每个级别对应了不同的修复时间:

业内的共识对漏洞总共分为了五个等级:

  • 严重:十万火急,晚一秒就有巨额损失,马上修复!
  • 高危:风险很大,影响很广,利用难度低,需要尽快修复(3天之内)
  • 中危:风险适中,利用难度较大,有一定的利用成本,可以暂缓修复(一周到15天左右)
  • 低危:风险低,损失有限,修复时间可以缓一缓
  • 无危害:直接忽略,没有关系

漏洞修复

谈完漏洞本身,现在要说一下企业内部为了治理漏洞需要做那些建设:(以下内容直接取自互联网大牛总结)

仅仅靠程序上线之后再发现漏洞,那么明显风险已经暴露出去了,网络上多少攻击都盯着呢。所以漏洞治理要融入到程序开发的流程之中,在行内,大家把这个东西叫做软件安全开发生命周期(SDLC)

常见的SDLC实践是:

  • 需求分析阶段

    • 安全意识培训:提高开发安全意识
    • 需求风险评估:参与需求评审,指出潜在安全风险
  • 开发阶段

    • 安全代码插件:IDE内置安全代码插件,随时指出潜在代码风险,在LLM AI时代,也可以通过内置的copliot或者Claude之类的进行指摘
    • 安全编码规范:为开发者进行安全编码规范制定,提高代码的整体安全性
  • 测试阶段

    • 白盒代码审计:自动化代码安全审计工具,对程序进行代码扫描
    • 人工安全测试:部署测试环境之后,通过安全人员手工测试发现潜在漏洞
  • 上线与运营

    • 黑盒扫描:服务上线之后,常态化的对其进行漏洞扫描,随时可以发现风险
    • 攻防演练:定期举办安全攻防演练,对服务进行模拟攻击,发现安全问题
    • SRC收录:鼓励社会安全从业者挖掘业务漏洞,给予奖励(分包),增加发现率

总结

这个是扫盲篇,其实在学习这个内容之前,我对这一块儿也是很模糊的,写下这个扫盲的内容也是为了对安全漏洞有一个更全面的了解,理解安全的重要性。

网络安全是开发,乃至于全公司共同的责任。

最后修改:2025 年 06 月 26 日
收款不要了,给孩子补充点点赞数吧