首页 > 其他分享 >GCC安全编译项参考

GCC安全编译项参考

时间:2022-08-26 09:35:07浏览次数:79  
标签: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,编译,地址,执行,溢出
From: https://www.cnblogs.com/sciapex/p/16626492.html

相关文章

  • linux驱动开发0_另一种方式编译ZYNQ镜像
    一、petanlinux工具编译镜像文件,最终就只有两个文件BOOT.BIN和image.ub,这两个文件包括u-boot、linux内核、设备树、PL端的bitstream、fsbl等,虽然方便但是速度太慢;二、......
  • 痞子衡嵌入式:MCUXpresso IDE下设置代码编译优化等级的几种方法
    大家好,我是痞子衡,是正经搞技术的痞子。今天痞子衡给大家分享的是MCUXpressoIDE下设置代码编译优化等级的几种方法。最近公司芯片设计团队正在开发一款全新的基......
  • 虚幻引擎UE编译报错问题综合
    1、未引入模块(虚幻C++编译无法解析的外部符号“_declspec(dllimport)”错误解决思路)无法解析的外部符号"__declspec(dllimport)public:__cdeclSTextBlock::STextBlo......
  • pybind11使用记录---ubuntu下使用cmake编译c++工程为python库
    前言:因为最近c++下的工程需要在python下调用,所以需要把c++编译成可供python调用的库,记录一下具体做法:编译c++有多种方法,因为我的是cmake构建的工程,所以直接在cmake的......
  • 编译链接
    编译链接分为4个步骤:预处理、编译、汇编、链接1、预处理(预编译)预编译过程把源文件变成.i文件,主要处理以#开头的预编译指令,比如#include、#define等2、编译编译是把预处......
  • ubuntu升级gcc/g++版本
    1.确认待升级的版本是否存在,若存在,则跳转到第4步sudoapt-cachesearchgcc-92.不存在则需要添加ubuntutoolchain的test源sudoadd-apt-repositoryppa:ubuntu-t......
  • Building GCC from source
    BuildingGCCfromsourceInthisguidewearegoingtowalkthroughthestepsrequiredtobuildGCC9.1.0fromsource.Additionallyweshallseehowthesequ......
  • 基于opencv的RTSP(rtsp)流读取和保存(C++可cmake编译-附带py方法)
     因其工作需要使用C++读取rtsp流,本文将针对linux下c++版读取视频流保存视频,凌乱且各种错误。现将将其成功执行的流程和代码记录,顺带也写了一份python读取rtsp方法,供自己......
  • SV编译器指令(Compiler Directives)
    SystemVerilog提供大量编译器指令来指导代码进程,比如`define、`ifdef、`elsif、`ifndef、`timescale、`default_nettype等。它们前面是(`)字符(重音字符)(不要将其与撇......
  • gcc编译器的常用命令行参数
    在学习常用的gcc命令行参数前,先了解gcc在执行编译工作的过程1、预处理,生成.i的文件[预处理器cpp]2、将预处理后的文件转换成汇编语言,生成文件.s[编译器egcs]3......