- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
程序开发环境安全.pdf
程序开发环境安全
--连接器中的漏洞
余科技,赵伟
启明星辰积极防御实验室
前言
这是一篇关于讨论程序开发环境中 接器漏
洞相关安全的演讲。
这是一个我们可能平时忽视的问题,大家考
虑过日常使用开发环境时可能会遇到的安全
问题吗?
为什么要研究开发环境的安全
起因:
在日常的使用中发现多个开发环境的安全漏
洞,却从来没有真正关注过开发环境的安全
问题。提供源程序的软件 被认为是安全
的,没有人在重新编译 接前会想到编译或
者连接过程本身将导致自己受到攻击。
环境
通常的程序开发环境可能包括(以Intel
x86下的Windows与Linux平台为主):
编译器:CL,gcc
连接器:Link, ld
调试器:VC 自带的调试器,GDB
Etc.
重点
连接器安全是这个ppt的重点
什么是 接器, 接器的作用
连接器存在的漏洞
下面我们讲一个linux下ld的漏洞实例
连接器
为了深入了解该漏洞,我们先来描述一下连接器流
程
连接器工作的一般过程:
当连接器运行时,它首先会扫描输入文件,找出每
个段的大小,收集所有符号的定义和引用。连接器
会建立一个段表用来记录输入文件中所有的段,一
个符号表记录所有导入或导出的符号。
第一遍扫描
第二遍扫描
Linux平台下
大家可能 有过的经历:
经常碰到Gcc在编译的时候出现崩溃
(Segfault)的情况,去年发现一个相关漏
洞,当时以为在gcc当中进行调试时很困
惑。
真正的原因:ld使用了bfd库,bfd库中存在
多个漏洞
ld连接流程
Ld简介:通常是编译程序的最后一步
Ld连接流程
抽象层bfd库简介
Bfd库的作用:为ld提供一个通用界面,使
ld可以对各种格式的目标文件进行相同的操
作
Bfd库工作流程概要:
打开目标文件后,自动检测文件格式
对应处理对象和例程
Bfd库对elf文件的解析
Elf文件格式简介1 ELF文件头
ELF文件头
char magic[4] = \177ELF;// magic number
char class; // address size, 1 = 32 bit,2 = 64 bit
char byteorder; // 1 = little-endian,2 = big-endian
char hversion; // header version,always 1
char pad[9];
short filetype; // file type: 1 = relocatable,2 = executable,
// 3 = shared object,4 = core image
short archtype; // 2 = SPARC,3 = x86,4 = 68K,etc.
int fversion; // file version,always 1
int entry; // entry point if executable
Elf文件格式简介2 ELF文件头
接上页
int phdrpos; // file position of program header or 0
int shdrpos; // file position of section header or 0
int flags; // architecture specific flags, usually 0
short hdrsize; // size of this ELF header
short phdrent; // size of an entry in program header
short phdrcnt; // number of entries in program header or 0
short shdrent; // size of an entry in
文档评论(0)