ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

GCC安全编译项参考

2022-08-26 09:30:20  阅读:188  来源: 互联网

标签:GCC 参考 保护 开启 NX 编译 地址 执行 溢出


PIE(ASLR) 代码段、数据段地址随机化

进程地址空间各区域随机化的措施,称之为ASLR(Address Space Layout Randomization)。ASLR通过随机放置进程关键数据区域的地址空间来防止攻击者能可靠地跳转到内存的特定位置来利用函数。现代操作系统一般都加设这一机制,以防范恶意程序对已知地址进行Return-to-libc攻击。

-fpie -pie // 开启PIE,此时强度为1
-fPIE -pie // 开启PIE,此时为最高强度2 


CANARY 堆栈溢出保护

栈溢出保护是一种缓冲区溢出攻击缓解手段,当函数存在缓冲区溢出攻击漏洞时,攻击者可以覆盖栈上的返回地址来让shellcode能够得到执行。当启用栈保护后,函数开始执行的时候会先往栈里插入cookie信息,当函数真正返回的时候会验证cookie信息是否合法,如果不合法就停止程序运行。攻击者在覆盖返回地址的时候往往也会将cookie信息给覆盖掉,导致栈保护检查失败而阻止shellcode的执行。

-fno-stack-protector // 禁用
-fstack-protector // 开启
-fstack-protector-all // 完全开启 

 

NX(DEP) 堆栈禁止执行

NX(No-eXecute),基本原理是将数据所在内存页标识为不可执行,当程序溢出成功转入shellcode时,程序会尝试在数据页面上执行指令,此时CPU就会抛出异常,而不是去执行恶意指令。

-z execstack // 禁用NX保护
-z noexecstack // 开启NX保护 


RELRO  GOT写保护

设置符号重定向表格为只读或在程序启动时就解析并绑定所有动态符号,从而减少对GOT(Global Offset Table)攻击。

-z norelro // 关闭
-z lazy // 部分开启
-z now // 全部开启

 

FORTIFY

fority用于检查是否存在缓冲区溢出的错误

-D_FORTIFY_SOURCE=1 // 较弱的检查
-D_FORTIFY_SOURCE=2 // 较强的检查 常用函数加强检查

 

标签:GCC,参考,保护,开启,NX,编译,地址,执行,溢出
来源: https://www.cnblogs.com/sciapex/p/16626492.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有