- 1、本文档共25页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
CCPPPP--SSuummmmiitt
C++ Summit 2020 渗透视角下的
C/C++安全编码
实践
目录 CPP-Summit 2020
1.从一个漏洞说起 (CVE-2020-8597)
2.安全函数
3.静态扫描
4.fuzzing
5.安全编译选项
6.总结
2
CPP-Summit 2020
CVE-2020-8597
CVE-2020-5987 是pppd软件中存在17年之久的远程代码执行漏洞,CVSS评分为
9.8分(严重程度 :Critical)。
Ubuntu/Debian/Fedora等系统
均受影响。
漏洞发生在处理Extensible
Authentication Protocol (EAP)消息
的eap.c :eap_request函数中。
如右图所示 ,inp中是网络传输
的ppp数据 ,len和vallen均可控。
代码中存在逻辑错误 ,未判断
len - vallen与sizeof(rhostname)的
大小 ,导致 1429行发生缓冲区溢出。
3
CPP-Summit 2020
CVE-2020-8597
通过精心EAP数据包中的内容 ,
在调用到BCOPY时覆盖函数返回
地址 :
BCOPY(inp + vallen, rhostname, len - vallen);
如右图示意图所示 :
char rhostname[256]; //栈上的变量
函数返回地址覆盖之后 ,可以
通过执行ShellCode或ROP等方式
控制程序执行流 ,让pppd进程执行
恶意代码。
4
CPP-Summit 2020
CVE-2020-8597
漏洞修复patch:
修改错误的逻辑 ,将if (vallen len + sizeof (rhostname)) 改为 :
if (len - vallen sizeof (rhostname))
思考 :这种方法是针对漏洞的专门修复 ,工程上有没有更普适的方法?
5
CPP-Summit 2020
安全函数
漏洞关键代码 :
BCOPY(inp + vallen, rhostname, len - vallen);
BCOPY是一个宏定义 ,没有长度判断,无保护机制 :
#define BCOPY(s, d, l) memcpy(d, s, l)
使用安全函数memcpy_s :
memcpy_s(rhostname,sizeof(rhostname),
文档评论(0)