初步认识漏洞挖掘

安全漏洞分类

并没有明确的漏洞分类标准,往往按照不同维度对漏洞进行分类例如

  • 按照影响范围分类

    • 本地漏洞(Local Vulnerability):只能通过本地访问系统才能利用的漏洞。
    • 远程漏洞(Remote Vulnerability):可以通过网络远程访问系统并利用的漏洞。
  • 按照漏洞成因分类

    • 输入验证问题(Input Validation Issues):未正确验证用户输入数据导致的漏洞,例如缓冲区溢出。
    • 权限问题(Privilege Issues):未正确实施权限控制导致的漏洞,例如未经授权的访问。
    • 配置错误(Configuration Errors):由于系统配置不当引起的安全漏洞。
    • 逻辑漏洞(Logical Vulnerabilities):程序中的设计或逻辑错误导致的漏洞,通常不是由具体的技术实现问题引起的。
  • 按照利用方式分类

    • 主动攻击(Active Attacks):攻击者主动发送恶意数据或请求来利用漏洞。
    • 被动攻击(Passive Attacks):攻击者通过监听、截取或分析数据流量来利用漏洞。
  • 按照威胁类型分类

    • 拒绝服务(Denial of Service,DoS):利用漏洞使得系统无法提供正常服务。
    • 信息泄露(Information Disclosure):漏洞允许攻击者获取未授权的信息。
    • 提权(Privilege Escalation):漏洞允许攻击者获取比其权限更高的权限。

一个漏洞按照不同分类方式可能所属不同漏洞类型,并没有统一的分类标准.

 以一种概括性的分类方式分类,大概可以分成

  • 代码执行漏洞(Code Execution Vulnerability):攻击者可以运行自己的代码,从而控制受影响的系统。包括:
  • 远程代码执行(Remote Code Execution, RCE)

    • 攻击者通过远程执行恶意代码,例如通过网络传输的恶意数据包或利用Web应用程序中的漏洞来实现对受影响系统的控制。
  • 本地文件包含(Local File Inclusion, LFI)

    • 攻击者通过利用Web应用程序中的文件包含漏洞,包含本地文件系统上的文件并执行其中的代码。
  • 远程文件包含(Remote File Inclusion, RFI)

    • 攻击者通过利用Web应用程序中的文件包含漏洞,包含远程服务器上的文件并执行其中的代码。
  • 命令注入(Command Injection)

    • 攻击者通过向应用程序提交恶意命令,例如在Web应用程序的输入字段中注入操作系统命令,从而在服务器上执行系统命令。
  • 动态评估代码执行(Dynamic Evaluation Code Execution)

    • 漏洞允许攻击者向应用程序提交的数据进行动态评估,如将用户提供的字符串作为代码执行。
  • 代码注入(Code Injection)

    • 类似于命令注入,攻击者通过在应用程序中注入恶意代码,例如通过输入字段注入恶意脚本或代码片段。
  • XML外部实体注入(XML External Entity Injection, XXE)

    • 攻击者利用XML处理器中的漏洞,注入外部实体并执行相关的恶意操作,如读取文件系统内容或执行代码。
  • 模板注入(Template Injection)

    • 攻击者通过向模板引擎(如服务器端模板引擎)注入恶意代码,从而控制应用程序的行为和输出。
  • 服务器端请求伪造(Server-Side Request Forgery, SSRF)

    • 攻击者通过利用Web应用程序的漏洞,使服务器发起未经授权的请求,可能包含执行恶意代码或探测内部网络结构等操作。
  • 反序列化漏洞(Deserialization Vulnerabilities)

    • 攻击者通过利用应用程序中的反序列化漏洞,注入恶意序列化对象并执行其中的代码,从而实现远程代码执行或其他不良影响。

  • 信息泄露漏洞(Information Disclosure Vulnerability):攻击者可以获取受影响的系统中的敏感信息。
  • 敏感信息在日志中的明文存储

    • 应用程序在记录日志时,可能会将包含敏感信息(如密码、会话令牌)的数据以明文形式记录在日志文件中,攻击者可以通过访问这些日志文件获取敏感信息。
  • 未加密的数据库存储

    • 数据库中存储的敏感信息(如用户密码、个人资料)未经过加密处理,如果数据库被攻击者访问或泄露,敏感信息将被直接暴露。
  • 错误的访问控制

    • 应用程序未正确实施访问控制机制,导致攻击者能够通过未经授权的方式访问到敏感数据,例如直接访问其他用户的个人信息。
  • 信息披露通过错误消息

    • 在处理用户请求时,应用程序可能会向用户返回包含敏感信息的详细错误消息,攻击者可以利用这些错误消息来获取关键信息。
  • 目录遍历漏洞

    • 在文件系统访问中,应用程序未正确验证用户请求的路径,导致攻击者可以通过构造特定的请求路径来访问敏感文件或目录。
  • HTTP头信息泄露

    • Web应用程序可能会在HTTP响应头中包含敏感信息,如服务器版本、框架版本等,攻击者可以利用这些信息来进行有针对性的攻击。
  • 配置文件泄露

    • 配置文件(如数据库配置、API密钥、加密密钥)未经适当保护或存储在公共可访问的位置,攻击者可以轻易获取到这些敏感信息。
  • 内部信息泄露

    • 内部员工或合作伙伴意外或恶意泄露了敏感信息,如将客户数据发送给错误的收件人或公开分享敏感信息。
  • 不安全的备份和存档

    • 备份文件或存档文件未经适当保护,可能包含敏感信息,攻击者可以获取这些备份文件并分析其中的数据。
  • 第三方组件或服务的信息泄露

    • 使用的第三方组件或服务存在安全漏洞,可能导致泄露用户数据或其他敏感信息,例如泄露API请求中的参数信息。

  • 拒绝服务漏洞(Denial of Service Vulnerability):攻击者可以使受影响的系统无法正常工作,从而导致服务不可用。
  • 网络流量洪泛(Network Flood)

    • 攻击者发送大量无效或恶意的网络流量到目标系统,耗尽系统的带宽或网络资源,导致合法用户无法访问服务。
  • 协议错误利用(Protocol Exploitation)

    • 攻击者利用协议规范中的漏洞或不一致性,发送特定的恶意请求,导致服务崩溃或无法响应正常请求。
  • 资源耗尽(Resource Exhaustion)

    • 攻击者利用系统或应用程序的资源不足或管理不善,例如内存、CPU、磁盘空间等资源被耗尽,导致系统无法正常运行。
  • DNS放大攻击(DNS Amplification Attack)

    • 攻击者利用开放的DNS服务器,发送伪造的DNS查询请求,并将响应重定向到目标服务器,以此消耗目标服务器的资源。
  • SYN洪水攻击(SYN Flood Attack)

    • 攻击者发送大量伪造的TCP连接请求(SYN包),但不完成握手过程,导致目标服务器耗尽连接资源,无法处理正常的连接请求。
  • HTTP请求洪泛(HTTP Flood Attack)

    • 攻击者发送大量恶意的HTTP请求到目标Web服务器,耗尽服务器的处理能力或带宽,使得正常用户无法访问网站。
  • 零字节攻击(Zero-byte Attack)

    • 攻击者向目标服务器发送零长度的TCP数据包或HTTP请求,占用服务器处理资源,但实际上并没有有效的数据传输,从而影响正常服务。
  • DNS拒绝服务攻击(DNS Denial of Service Attack)

    • 攻击者通过发送大量恶意的DNS请求到目标DNS服务器,使得服务器无法正常响应合法的DNS查询请求,导致DNS服务不可用。
  • 内存泄露(Memory Leak)

    • 应用程序中存在内存泄露问题,随着时间推移,系统的可用内存逐渐减少,最终导致系统性能下降或崩溃。
  • 邮件服务拒绝服务(Mail Server Denial of Service)

    • 攻击者发送大量无效的电子邮件或利用邮件服务器协议的漏洞,消耗邮件服务器的资源或导致服务器崩溃,从而影响邮件服务的可用性。

  • 权限提升漏洞(Privilege Escalation Vulnerability):攻击者可以获得更高的权限,从而控制受影响的系统。
  • 操作系统漏洞

    • 攻击者利用操作系统中的漏洞或未修补的安全补丁,通过特定的操作或代码执行,提升自己的权限到系统管理员或root级别。
  • 应用程序逻辑错误

    • 应用程序设计或实现中的逻辑错误,例如未正确验证用户身份或权限,可能允许攻击者在应用程序中提升其权限级别。
  • 默认配置和密码

    • 系统或应用程序默认的配置、密码或密钥未经修改或更改,攻击者通过使用这些默认凭证来提升其权限。
  • 未授权的访问控制

    • 应用程序或系统未正确实施访问控制措施,攻击者可以利用这些漏洞访问到本应该受到保护的资源或功能。
  • 服务或进程提权

    • 运行在系统上的服务或进程未正确配置权限,攻击者通过利用这些服务或进程的漏洞来提升自己的权限。
  • 文件系统权限错误

    • 文件或目录的权限设置错误,攻击者可以利用文件系统漏洞或错误设置的权限来获取未授权的访问或执行权限。
  • 数据库提权

    • 数据库管理系统(如MySQL、PostgreSQL等)的权限配置错误或漏洞,攻击者可以通过利用这些漏洞提升其在数据库中的权限级别。
  • API和接口漏洞

    • API或其他接口的安全漏洞,攻击者可以通过利用这些漏洞调用未授权的功能或获取未授权的数据。
  • 信息泄露导致的提权

    • 应用程序或系统中发生的信息泄露事件,可能暴露了包括密码、令牌等敏感信息,攻击者利用这些信息进行权限提升攻击。
  • 缓冲区溢出和格式字符串漏洞

    • 缓冲区溢出或格式字符串漏洞可能导致攻击者在程序中执行恶意代码,从而提升其在系统中的权限。

  • 跨站脚本攻击(Cross-Site Scripting):攻击者可以注入恶意脚本,从而控制受影响的系统。

  • 恶意脚本注入到评论框

    • 攻击者在网站的评论框或消息板中注入包含恶意脚本的内容,当其他用户查看评论时,恶意脚本会在其浏览器中执行。
  • 通过恶意链接传播

    • 攻击者通过电子邮件、社交媒体消息或其他途径向用户发送包含恶意脚本的链接,诱使用户点击并执行恶意脚本。
  • 恶意广告脚本

    • 攻击者通过广告网络或其他媒介投放包含恶意脚本的广告,当用户访问包含这些广告的网页时,恶意脚本会被执行。
  • 搜索框中的脚本注入

    • 攻击者在网站的搜索框中输入包含恶意脚本的内容,当其他用户使用该搜索框进行查询时,恶意脚本可能被执行。
  • 存储型 XSS 攻击

    • 攻击者将包含恶意脚本的内容提交到网站的数据库或文件存储中,当其他用户访问包含这些数据的页面时,恶意脚本会被加载和执行。
  • 反射型 XSS 攻击

    • 攻击者构造一个包含恶意脚本的URL,诱使用户点击该URL,当服务器响应时,恶意脚本从URL中反射到响应页面中并执行。
  • DOM 型 XSS 攻击

    • 攻击者通过修改客户端的DOM(文档对象模型),例如通过修改URL的hash部分或使用JavaScript代码来执行恶意操作。
  • 社交工程

    • 攻击者通过社交工程技术诱使用户在受信任的网站上输入恶意脚本,例如通过伪装成合法的网页或应用程序来欺骗用户。
  • 利用第三方插件或脚本

    • 攻击者利用网站使用的第三方插件或脚本存在的漏洞,注入恶意脚本或利用已知的安全问题进行攻击。
  • 通过 Web 编辑器注入

    • 攻击者利用Web页面编辑器(如富文本编辑器)的漏洞,向网页中注入恶意脚本,使得最终用户访问时执行恶意脚本。

漏洞挖掘技术

常用的漏洞挖掘技术包括模型检测、模糊测试、符号执行、二进制比对等,这些传统的漏洞挖掘技术在理论研究上已经比较成熟,并已从各类软件中挖掘出大量漏洞。

机器学习、深度学习的研究进展带动了其在软件漏洞挖掘领域的应用,目前已经开展了一些探索性的工作,如二进制函数相似性识别、函数相似性检测、测试输入生成、路径约束求解等,这些应用为解决传统漏洞挖掘技术的瓶颈问题提供了新的思路,也使得软件漏洞挖掘逐渐变得智能化。

静态漏洞挖掘

静态漏洞挖掘是指在不运行目标程序的前提下分析目标程序(源代码或二进制)的词法、语法和语义等,并结合程序的数据流、控制流信息,通过类型推导、安全规则检查、模型检测等技术挖掘程序中的漏洞。静态漏洞挖掘是常用的软件测试技术,在软件测试中占有非常重要的地位。具有代表性的静态漏洞挖掘工具有面向C/C++源码的Cppcheck[1]、FlawFinder[2], 面向PHP源码的RIPS[3], 面向JAVA源码的FindBugs[4],以及能支持多种类型目标对象的著名商业化漏洞检测工具VeraCode[5]、Fortify[6]、Coverity[7]、Checkmarx[8]等。另外,LLVM[9]、Clang[10]等编译器也提供了大量的静态检测功能,能在编译阶段实现对源代码的安全性检查。

静态漏洞挖掘技术直接对目标程序进行分析,不需要构造程序的执行环境,能提取较为完整的控制流等信息,可能发现动态漏洞挖掘技术难以发现的漏洞。但是,一方面,由于静态漏洞挖掘技术往往依赖于人工构造的漏洞模式,对先验知识依赖性较大;另一方面,因为无法获得程序实际动态运行过程中的上下文信息,静态漏洞挖掘技术具有精度低、误报率高的缺陷。

动态漏洞挖掘

模糊测试

模糊测试(fuzzing)是一种自动化或者半自动化的软件测试技术,通过构造随机的、非预期的畸形数据作为程序的输入,并监控程序执行过程中可能产生的异常,之后将这些异常作为分析的起点,确定漏洞的可利用性。模糊测试技术可扩展性好,能对大型商业软件进行测试,是当前最有效的用于挖掘通用程序漏洞的分析技术,已经被广泛用于如微软、谷歌和Adobe等主流软件公司的软件产品测试和安全审计,也是当前安全公司和研究人员用于挖掘漏洞的主要方法之一。

符号执行

是一种能够系统性探索程序执行路径的程序分析技术,通过对程序执行过程中的被污染的分支条件及其相关变量的收集和翻译,生成路径约束条件,然后使用可满足模理论(SMT)求解器进行求解, 判断路径的可达性以及生成相应的测试输入。通过这种方式产生的测试输入与执行路径之间具有一对一的关系,能够避免冗余测试输入的产生,进而能有效解决模糊测试冗余测试用例过多导致的代码覆盖率增长慢的问题。

  • 24
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值