一 漏洞的概念
漏洞是指信息系统的硬件、软件、操作系统、网络协议、数据库等在设计上、实现上出现的可以被攻击者利用的错误、缺陷和疏漏。
通俗的说,漏洞就是可以被攻击利用的系统弱点。 本文将重点讨论软件漏洞。
二 软件普遍存在的攻击面
1 代码层面
是否可以被逆向分析,是否可以被篡改并重打包
检测/利用方式:静态代码审计 等
2 通信层面
通信是否可以被劫持,更新机制是否存在问题,证书校验机制是否严格
例如:HTTP和HTTPS的区别、中间人攻击(证书校验)、密钥长度过短
3 文件层面
关键文件是否可以被替换或更改,数据是否明文存储
例如:DLL劫持(早期Windows系统)、本地数据未加密
检测/利用方式:数据库恢复取证等
4 业务逻辑
登陆认证是否可以被绕过,是否存在重放攻击风险
例如:业务逻辑缺陷(例如银行负金额转账)、重放攻击
检测/利用方式:重放攻击等
5 运行时
运行的内存是否可以远程注入,关键组件是否暴露
例如:本地游戏作弊器
检测/利用方式:漏洞扫描等
三 漏洞研究概述
1 漏洞研究方向:
1)漏洞扫描与检测
- 源码扫描
- 特征扫描: 端口、函数、特征字符串、已有知识库
2)漏洞攻击检测
- 基于流量的检测
- 基于插桩的检测: CFO控制流图、ROP链检测、异常跳转检测
3)漏洞危害评估
- 评估维度
- 评估指标
- 评分标准
4)漏洞挖掘
- 代码审计
- 补丁比较
- Fuzz
5)漏洞利用
- 污点分析
- 符号执行
- shellcode编写
- 利用技巧: jmp esp、 jmp ebp、 ROP、 堆喷射
6)漏洞分析(获取漏洞细节)
- 静态分析
- 动态调试
四 漏洞类型详解
1 按效果分类:
1)代码执行
代码执行漏洞是指应用程序本身过滤不严,用户可以通过请求将代码注入到应用中执行。当应用在调用一些能将字符串转化成代码的函数(如php中的eval)时,没有考虑到用户是否能控制这个字符串,将造成代码注入漏洞。
2)信息泄露
3)提权
提权即提高自己在服务器中的权限,主要针对网站入侵过程中,当入侵某一网站时,通过各种漏洞提升webshell权限以夺得该服务器权限。
4)拒绝服务DOS
通过输入畸形数据使系统进入异常或崩溃状态,从而影响系统或软件正常运行,影响服务正常使用。
5)认证绕过
通过构造特定输入,使程序进入由于涉及疏漏而产生的逻辑路径,该逻辑路径可绕过系统正常的身份认证等环节,从而可以非授权的获取系统或数据访问权限。如SQL注入等。
2 按类型分类:
1)栈溢出漏洞
2)堆溢出漏洞
3)格式化字符串漏洞
4)释放再使用(UAF) 漏洞
五 POC EXP Shellcode
POC:全称"Proof of Concept",中文”概念验证“,常指一段漏洞证明的代码。
EXP:全称"Exploit",中文”利用“,指利用系统漏洞进行攻击的动作。
Shellcode:成功exploit后,真正的目标系统执行的代码或指令,playload的一种,由于其建立正向/反向shell而得名。
EXP相当于导弹,Shellcode相当于核弹头或者是炸药。
六 漏洞利用防护机制
1 GS编译保护机制
为了解决返回地址被栈溢出覆盖的问题。
其基本原理是修改C编译器GCC,编译时,在函数返回地址之前插入一个数值,以便将一个“探测”值插入到返回地址的前面。在任何函数返回之前,它检查这个值有没有被改变。如果攻击者在栈溢出攻击时改写返回地址,探测器的值就可能被改变,系统就会相应地中止执行。
该方法可以有效防止缓冲区溢出修改函数返回地址,但无法防止缓冲区溢出通过改写其他内存区域来攻击系统。
2 DEP机制
**数据执行保护(DEP)**是软硬件相结合的技术。当EDP开启时,系统会将多个内存页的属性标记为不可执行,当程序试图执行位于不可执行页面(堆、栈及内存池等)上的代码时,就会触发访问违规异常。程序就转而处理异常,或直接将进程终止。
3 ASLR机制
地址空间分布随机化(Address Space Layout Randomization, ASLR)是一种用于阻止缓冲区溢出攻击的计算机安全技术。
为了防止攻击者跳转到内存中的特定函数位置,ASLR在一个进程的地址空间中随机地排列程序的关键区域,包括可执行代码的基址,以及栈、堆和库模块的位置。
该机制及其对抗在我的博文网络攻防技术——缓冲区溢出攻击(基于服务器)有体现,可以参考。
4 SafeSEH机制
Windows是以SEH节点链表的形式来组织和管理异常处理结构的,其结构如下图所示:
SafeSEH在程序调用异常处理函数之前,对要调用的异常处理函数进行一系列有效性校验,当发现异常处理函数不可靠时将终止异常处理函数的调用。
七 参考文献/链接
- 《网络攻防技术》(第2版) 机械工业出版社
- 栈溢出 https://blog.csdn.net/Little_Small_Joze/article/details/113615610
- 堆溢出 https://blog.csdn.net/Morphy_Amo/article/details/122323280
- 静态代码审查 https://blog.csdn.net/qq_36828822/article/details/127183643
- HTTP和HTTPS https://blog.csdn.net/xiaoming100001/article/details/81109617
- 中间人攻击 https://baike.baidu.com/item/%E4%B8%AD%E9%97%B4%E4%BA%BA%E6%94%BB%E5%87%BB/1739730?fr=ge_ala
- 抓包 https://baike.baidu.com/item/%E6%8A%93%E5%8C%85/9929103?fr=ge_ala
- 彩虹表 https://baike.baidu.com/item/%E5%BD%A9%E8%99%B9%E8%A1%A8/689313
- DLL劫持 https://blog.csdn.net/qq_46804551/article/details/12454660
- 重放攻击 https://baike.baidu.com/item/%E9%87%8D%E6%94%BE%E6%94%BB%E5%87%BB/2229240?fr=ge_ala
- Fuzz测试 https://blog.51cto.com/u_14601424/7771675
- 代码执行 https://blog.csdn.net/weixin_45007073/article/details/113038152
- 提权 https://blog.csdn.net/weixin_45677119/article/details/111561223
- 格式化字符串漏洞 https://blog.csdn.net/weixin_62675330/article/details/122907791
- UAF https://blog.csdn.net/microzone/article/details/70800169/
- 绕过GS:攻击SEH机制 https://zhuanlan.zhihu.com/p/32331375
- 网络攻防技术——缓冲区溢出攻击(基于服务器)https://blog.csdn.net/wion03/article/details/133856446