zoukankan      html  css  js  c++  java
  • checksec与二进制保护机制

    参考: https://www.it610.com/article/1295251903365586944.htm

    1.Relro:Full Relro(重定位表只读)

    Relocation Read Only, 重定位表只读。重定位表即.got 和 .plt 两个表。
    此项技术主要针对GOT改写的攻击方式,它分成两种,Partial RELRO和FULL RELRO Partial 。
    (部分)RELRO容易受到攻击,例如攻击者可以atoi.got为system.plt进而输入/bin/shx00获得shell,完全RELRO使整个GOT只读,从而无法被覆盖,但这样会大大增加程序的启动时间,因为程序在启动之前需要解析所有的符号。

    2.Stack:No Canary found(能栈溢出)

      Canary, 金丝雀。金丝雀原来是石油工人用来判断气体是否有毒。
    而应用于在栈保护上则是在初始化一个栈帧时在栈底(stack overflow 发生的高位区域的尾部)设置一个随机的 canary 值,当函数返回之时检测 canary 的值是否经过了改变,以此来判断 stack/buffer overflow 是否发生,若改变则说明栈溢出发生,程序走另一个流程结束,以免漏洞利用成功。 因此我们需要获取 Canary 的值,或者防止触发 stack_chk_fail 函数,或是利用此函数。

    3.NX: NX enable(不可执行内存)

    Non-Executable Memory,不可执行内存。了解 Linux 的都知道其文件有三种属性,即 rwx,而 NX 即没有 x 属性。如果没有 w 属性,我们就不能向内存单元中写入数据,如果没有 x 属性,写入的 shellcode 就无法执行。所以,我们此时应该使用其他方法来 pwn 掉程序,其中最常见的方法为 ROP (Return-Oriented Programming 返回导向编程),利用栈溢出在栈上布置地址,每个内存地址对应一个 gadget,利用 ret 等指令进行衔接来执行某项功能,最终达到 pwn 掉程序的目的。

    4.PIE: PIE enable(开启ASLR 地址随机化)

    Address space layout randomization,地址空间布局随机化。通过将数据随机放置来防止攻击。
    PTE(Position-Independent Executable,位置无关可执行文件)技术与ASLR技术类似,ASLR将程序运行时的堆栈以及共享库的加载地址随机化,而PIE及时则在编译时将程序编译为位置无关,即程序运行时各个段(如代码但等)加载的虚拟地址也是在装载时才确定。在PIE和ASLR同时开启的情况下,攻击者将对程序的内存布局一无所知,传统改写GOT表项也难以进行,因为攻击者不能获得程序的.got段的虚地址。

    总结

    各种安全选择的编译参数如下:

    NX:-z execstack / -z noexecstack (关闭 / 开启)
    Canary: -fno-stack-protector /-fstack-protector / -fstack-protector-all (关闭 / 开启 / 全开启)
    PIE:-no-pie / -pie (关闭 / 开启)
    RELRO:-z norelro / -z lazy / -z now (关闭 / 部分开启 / 完全开启)
    
  • 相关阅读:
    关于 var YAHOO = window.YAHOO || {}; 的解释
    javacsript 上传文件(与websrvice对接)原创
    Jquery ajax参数设置
    分页存储过程(对有主键的表效率极高) ,以及在asp.net中配合LtpPageControl的用法
    一些常用的dos命令
    SQL字符串函数
    (转)UML建模风格之状态图概要
    (转)也谈设计模式,实例票据打印 解析 Decorator
    (转)UML建模风格之状态图详述
    JQuery find方法Bug
  • 原文地址:https://www.cnblogs.com/Higgerw/p/14056444.html
Copyright © 2011-2022 走看看