美文网首页
Linux下的漏洞缓解措施

Linux下的漏洞缓解措施

作者: 小小怪吃吃吃 | 来源:发表于2020-11-13 16:10 被阅读0次

    Linux下的程序保护机制具体包括如下:

    1、NX

        NX保护(数据执行保护)在windows中也被称为DEP,是指禁止程序在非可执行的内存区中执行指令。通过现代的内存保护单元(MPU)机制对程序内存按页的粒度进行全线设置,其基本规则为可写权限与可执行权限互斥。
        因此,在开启NX保护的程序中不能直接使用shellcode执行任意代码。所有可以被修改写入shellcode的内存都不可执行,所有可以被执行的代码数据都是不可被修改的。
        gcc默认开启NX保护,关闭方法是在编译时加入“-z execstack”参数。

    2、Stack Canary

        Stack Canary保护是专门针对栈溢出攻击设计的一种保护机制。由于栈溢出攻击的主要目标是通过溢出覆盖函数栈高位的返回地址,因此其思路是在函数开始执行前,即在返回地址前写入一个字长的随机数据,在函数返回前校验该值是否被改变,如果被改变,则认为是发生了栈溢出。程序会直接终止。
        gcc默认使用Stack Canary保护,关闭方法是在编译时加入“-fno-stack-protector”参数。

    3、ASLR

        Address Space Layout Randomization,地址空间随机化。ASLR的目的是将程序的堆栈地址和动态链接库的加载地址进行一定的随机化,这些地址之间是不可读写执行的未映射内存,降低攻击者对程序内存结构的了解程序。这样,即使攻击者布置了shellcode并可以控制跳转,由于内存地址结构未知,依然无法执行shellcode。
        ASLR是系统等级的保护机制,使用root权限可以进行修改。关闭方法是修改/proc/sys/kernel/randomize_va_space文件的内容为0。

    4、PIE

        代码段随机化,与ASLR保护十分相似,PIE保护的目的是让可执行程序ELF的地址进行随机化加载,从而使得程序的内存结构对攻击者完全未知,进一步提高程序的安全性。
        gcc编译时开启PIE的方法为添加参数“-fpic -pie”。较新版本的gcc默认开启PIE,可以设置“-no-pie”来关闭。

    5、Relro

        重定位,一般分为partial relro和full relro,前者重定位信息(如got表)可写,后者不可写。
        full relro保护与linux下的Lazy Binding机制有关,其主要作用是禁止.GOT.PLT表和其他一些相关内存的读写,从而阻止攻击者通过写.GOT.PLT表来进行攻击利用的手段。
        gcc开启full relro的方法是添加参数“-z retro”。

    参考:
    《从0到1:CTFer成长之路》
    《CTF特训营》

    相关文章

      网友评论

          本文标题:Linux下的漏洞缓解措施

          本文链接:https://www.haomeiwen.com/subject/mozvbktx.html