Linux保护技术

[TOC]

linux保护技术

NX保护

作用:

​ 将数据(栈,堆)所在内存页标识为不可执行,当程序成功转入shellcode时,程序会尝试在数据页面上执行指令,此时CPU就会抛出异常,而不是去执行恶意指令

编译选项:

  • 关闭:

-z execstack

  • 开启:

-z noexecstack

PIE保护

作用:

​ 使得程序地址空间分布随机化,增加ROP等利用的难度

编译选项:

  • ​ 关闭:

-no-pie

  • ​ 开启:

-pie -fPIC

canary保护

作用:

​ 函数开始执行的时候会先往栈里插入canary值,当函数真正返回的时候会验证canary值是否合法,如果不合法就停止程序运行。可以防止栈溢出覆盖返回地址

编译选项:

  • 关闭:

-fno-stack-protector

  • 启用(只为局部变量中含有char的函数插入保护代码):

-fstack-protector、

  • 启用(为所有函数插入保护代码):

-fstack-proctor-all

Fortify保护

作用:

主要用来防止格式化字符串漏洞。包含%n的格式化字符串不能位于程序内存中的可写地址。当使用位置参数时,必须使用范围内的所有参数,如果要使用%7$x,必须同时使用1$2$3$4$5$6$。

编译选项:

  • 关闭:

-D_FORTIFY_SOURCE=0

  • 开启:

-D_FORTIFY_SOURCE=2

RELRO保护

作用:

设置符号重定位表为只读,并在程序启动时就解析并绑定所有动态符号,从而对GOT表攻击。

编译选项:

  • 开启(部分):

-z lazy

  • 开启(全部):

-z now

0%