精华内容
下载资源
问答
  • 关闭Linux 内存地址随机化机制

    万次阅读 2012-09-27 13:02:10
    关闭Linux 内存地址随机化机制, 禁用进程地址空间随机化.可以将进程的mmap的基址,stack和vdso页面地址固定下来. 可以通过设置kernel.randomize_va_space内核参数来设置内存地址随机化的行为. 目前randomize_va_...
    关闭Linux 内存地址随机化机制, 禁用进程地址空间随机化.可以将进程的mmap的基址,stack和vdso页面地址固定下来. 可以通过设置kernel.randomize_va_space内核参数来设置内存地址随机化的行为.
    

    目前randomize_va_space的值有三种,分别是[0,1,2]

    0 - 表示关闭进程地址空间随机化。
    1 - 表示将mmap的基址,stack和vdso页面随机化。
    2 - 表示在1的基础上增加栈(heap)的随机化。


     # echo 0 >/proc/sys/kernel/randomize_va_space 


    通过用下面这个程序,可以检查是否修改成功(x86_64):
    // gcc -g stack.c -o stack
    //
    unsigned long sp(void){ asm("mov %rsp, %rax");}
    int main(int argc, char **argv)
    {
        unsigned long esp = sp();
        printf("Stack pointer (ESP : 0x%lx)\n",esp);
        return 0;
    }
    


    关闭前运行结果

    -bash-4.1# ./stack
    Stack pointer (ESP : 0x7fff50162e50)
    -bash-4.1# ./stack
    Stack pointer (ESP : 0x7fff5d023730)
    -bash-4.1# ./stack
    Stack pointer (ESP : 0x7ffff9982180)
    -bash-4.1# ./stack
    Stack pointer (ESP : 0x7fffb23612a0)
    -bash-4.1# ./stack
    Stack pointer (ESP : 0x7ffffd5a4980)
    -bash-4.1# ./stack
    Stack pointer (ESP : 0x7fffbac61bf0)

    关闭后运行结果
    -bash-4.1# ./stack
    Stack pointer (ESP : 0x7fffffffeaf0)
    -bash-4.1# ./stack
    Stack pointer (ESP : 0x7fffffffeaf0)
    -bash-4.1# ./stack
    Stack pointer (ESP : 0x7fffffffeaf0)
    -bash-4.1# ./stack
    Stack pointer (ESP : 0x7fffffffeaf0)
    -bash-4.1# ./stack
    Stack pointer (ESP : 0x7fffffffeaf0)
    -bash-4.1# ./stack
    Stack pointer (ESP : 0x7fffffffeaf0)
    

    参考:
    http://en.wikipedia.org/wiki/Address_space_layout_randomization
    http://xorl.wordpress.com/2011/01/16/linux-kernel-aslr-implementation/
    展开全文
  • 进程内存地址随机化--与位置无关

    千次阅读 2017-03-09 16:28:26
    如果程序每次运行内存地址不一样,那么就能提升一定的安全性。 1. 动态库  在编译的时候加上-PIC选项即可。 2. 应用程序  在编译的时候增加 -fPIE和-pie选项。其中-fPIE用于编译器,-pie用于连接器。 3. 注意事项 ...

         与位置无关码即每次运行地址不一样,分为两种,一种是动态连接库,一种是与位置无关的应用程序。如果程序每次运行内存地址不一样,那么就能提升一定的安全性。

    1. 动态库

        在编译的时候加上-PIC选项即可。

    2. 应用程序

        在编译的时候增加 -fPIE和-pie选项。其中-fPIE用于编译器,-pie用于连接器。

    3. 注意事项

    (1)某些版本较低的编译器不支持pie选项。

    (2)如果支持,实验方法是编译后的应用程序运行后,使用/proc/[pid]/maps查看内存地址分布情况。然后重新启动应用程序,再次使用/proc/[pid]/maps命令查看内存地址分布情             况,然后比较这两次地址,看应用程序代码段地址是否一样,如果不一样,表面pie选项起作用了。

    (3)只编译(预处理、编译、汇编)不连接,加-c -o选项。

    (4)file命令查看elf格式文件,如果是shared object,那么表示此程序支持PIE与位置无关;如果是executable表示编译和连接分别
              没有加-fPIE和-pie选项。

    (5)cat /proc/pid/maps可以查看进程映射的内存区域和访问权限等信息,如果每次只需应用程序内存区域地址都是变化的,那么说明
              此应用程序在编译和连接时分别加了-fPIE和-pie选项。

    (6)CFLAGS   表示用于 C 编译器的选项 ,如指定头文件(.h文件)的路径等
              CXXFLAGS 表示用于 C++ 编译器的选项。
              LDFLAGS  表示用于连接的选项,比如gcc 等编译器会用到的一些优化参数,也可以在里面指定库文件的位置。
              LIBS:   告诉链接器要链接哪些库文件。

    (7)cat /proc/sys/kernel/randomize_va_space的值含义和设置:
             0 - 表示关闭进程地址空间随机化。
    1 - 表示将mmap的基址,stack和vdso页面随机化。
    2 - 表示在1的基础上增加栈(heap)的随机化。
             可这样设置这个值:  echo 1 >  /proc/sys/kernel/randomize_va_space


    展开全文
  • 学过编译原理可知,C语言程序中所有变量的逻辑地址编译后都是确定了的,但是在linux平台上实际使用中可以发现变量的地址不是固定的,如下: * 示例代码 #include <stdio.h> int main(){ int a; printf(...

    说明

    • 学过编译原理可知,C语言程序中所有变量的内存地址编译后都是确定了的,但是在linux平台上实际使用时可以发现变量的内存地址并不是固定的,如下:
    * 示例代码
    #include <stdio.h>
    
    int main(){
        int a;
        
        printf("%p\n", &a);
        return 0;
    }
    * 运行结果
    xxx@Lenovo-V110-15IKB:~/$ ./test
    0x7ffdd2ec0124
    xxx@Lenovo-V110-15IKB:~/$ ./test
    0x7ffc577a9644
    xxx@Lenovo-V110-15IKB:~/$ ./test
    0x7fffef5827e4
    xxx@Lenovo-V110-15IKB:~/$ ./test
    0x7fff44595414
    xxx@Lenovo-V110-15IKB:~/$ ./test
    0x7fffe93e1964
    

    理解

    • 程序都是在运行阶段分配内存,所有变量的逻辑地址都是在编译后就确定了,但都是相对的偏移地址,只不过全局变量是相对数据段的偏移,局部变量是相对程序栈顶的偏移。
    • 变量地址会发生变化是因为ASLR机制导致了内存段地址发生了变化。

    ASLR

    • 地址空间布局随机化(ASLR)可以帮助克服某些类型的缓冲区溢出攻击,ASLR可以将基数,库,堆和堆栈放在进程地址空间中的任意随机位置,这使攻击程序很难预测下一条指令的内存地址。
    • ASLR内置在Linux内核中,并由参数控制 /proc/sys/kernel/randomize_va_space,该 randomize_va_space参数可以采用以下值:
    0 : 禁用ASLR。如果使用norandmapsboot参数引导内核,则将应用此设置。
    1 : 随机化堆栈,虚拟动态共享对象(VDSO)页面和共享内存区域的位置。数据段的基地址位于可执行代码段的结尾之后。
    2 : 随机化堆栈,VDSO页,共享内存区域和数据段的位置。这是默认设置。
    
    • 设置
    echo 0 > /proc/sys/kernel/randomize_va_space
    * 注意:非root用户如下设置会报错
    sudo echo 0 > /proc/sys/kernel/randomize_va_space
    bash: /proc/sys/kernel/randomize_va_space: Permission denied
    * 因为这样写系统会认为是sudo 命令重定向,而sudo命令不支持重定向,正确写法: 
    sudo sh -c "echo 0 > /proc/sys/kernel/randomize_va_space"
    
    • 关闭ASLR后,测试发现变量的地址就是固定的。
    展开全文
  • 文章目录Windows安全机制地址随机化:ASLR机制原理映像随机化堆栈随机化PEB与TEB随机化绕过攻击未启用ASLR的模块利用部分覆盖进行定位内存地址利用Heap spray进行内存地址定位利用Java applet heap spray定位内存...

    Windows安全机制

    微软关于内存保护机制

    1. GS编译技术
    2. SEH的安全校验机制
    3. Heap Cookie,Safe Unlinking等一系列堆安全机制
    4. DEP数据执行保护
    5. ASLR加载地址随机
    6. SEHOP SEH的覆盖保护`

    地址随机化:ASLR机制

    原理

    地址随机化需要程序自身和操作系统的双重支持,会在PE头中设置IMAGE_DLL_CHARACTERISTICS_DYNAMIC_BASE标识来说明支持ASLR。
    在这里插入图片描述
    编译器可以在这里设置,其中地址随机化包含了映像随机化,堆栈随机化,PEB与TEB随机化

    映像随机化

    在PE文件映射到内存时,对加载虚拟地址进行随机化处理,系统重启这个地址是变化的。
    出于兼容性考虑,这个选项也可以通过注册表关闭
    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SessionManager\Memory Management\MoveImages
    当为-1时,强制随机化
    在这里插入图片描述
    当没有时可以新建

    堆栈随机化

    堆栈的基址是打开程序的时候确定的,同一个程序任意两次运行时的堆栈基址是不同的。

    PEB与TEB随机化

    微软在xp sp2之后不再使用固定的PEB基址0x7FFDF000和TEB基址0x7FFDE00

    mov eax,FS:[0x18]
    mov teb,eax
    mov eax,dword ptr[eax+0x30]
    mov peb,eax
    

    这样也可以快速确定TEB和PEB的地址

    绕过

    对于映像随机化,虽然模块的加载地址变了,但低2个字节不变。
    对于ASLR堆栈随机化,可以使用JMP esp和heap spray等绕过限制
    对于PEB和TEB的随机化,也是可以通过FS的偏移来定位的

    攻击未启用ASLR的模块

    Flash Player ActiveX9.0.262是没有开启ASLR模块的。Flash9k.ocx的加载基址是固定的。
    环境要求Windows Vista SP0

    利用部分覆盖进行定位内存地址

    在这里插入图片描述
    只覆盖返回地址的低2位,因为高两位会变。注意到eax的值正好是shellcode的起始位置,所以我们可以在返回地址处覆盖一个jmp/call eax
    在这个模块中搜索指令jmp/call eax,地址为00401430,其中高两位0040会变,而1430不会变。所以把返回地址的低两位覆盖为1430即可。

    但是成功跳转到shellcode位置,shellcode确未成功执行。

    利用Heap spray进行内存地址定位
    利用Java applet heap spray定位内存地址
    为.net控件禁用ASLR
    展开全文
  • linux内核地址随机化-kaslr

    千次阅读 2020-02-27 18:50:03
    未开启内核地址随机化 Virtual kernel memory layout: modules:0xffffff8000000000 - 0xffffff8008000000 (128MB) vmalloc: 0xffffff8008000000 - 0xffffffbebfff0000 (250GB) .text: 0xffffff8008080000 - 0...
  • 阿里聚漏洞扫描器有一个检测项叫未使用地址空间随机化技术, 本文主要介绍该项技术的原理和扫描器的检测方法。
  • KASLRfinder摘要:KASLRfinder是一个小型实用程序,可用于查找Windows 10内核及其驱动程序在内存中的加载位置-尽管地址已通过内核地址空间布局随机化进行了随机化(KASLRfinder摘要:KASLRfinder是一个小型实用程序...
  • 0x00 背景知识 ...随着内存地址随机化,使得响应的应用变得随机。这意味着同一应用多次执行所使用内存空间完全不同,也意味着简单的缓冲区溢出攻击无法达到目的。 GDB从版本7开始,第一次在Ubuntu ...
  • 5.利用部分覆盖进行定位内存地址 映像随机化只是对映像加载基址的强两个字节做随机化处理,我们可以选择覆盖这个地址的 最后一个字节;此外,ASLR 只是随机化了映像的加载基址,而没有对指令序列进行随机化, 也...
  • 出发点常规的缓冲区溢出利用技术以及其衍生的Ret2libs和ROP利用技术在利用栈缓冲区溢出漏洞进行攻击时,需要事先熟悉被攻击进程的虚拟地址空间布局以便采用硬编码方式布局栈内存。由于操作系统每次加载进程和动态...
  • Address space layout randomization:地址空间布局随机化,是参与保护缓冲区溢出问题的一个计算机安全技术。是为了防止攻击者在内存中能够可靠地对跳转到特定利用函数。ASLR包括随机排列程序的关键数据区域的位置,...
  • Delphi 随机内存加密实例代码,生成随机的加密密钥,主要是在内存中运行数据压缩、数据加密的代码,程序是利用随机生成的加密密钥,来生成每次都不一样的EXE文件,所有“加壳”的EXE程序运行前先在内存中解密->解压-...
  • 快速排序与随机化快速排序. 2 快速排序. 2 随机化快速排序. 3 快排与随机化快排性能分析. 4 不同配置的计算机运算效果. 4 不同初始序列对快速排序的影响. 7 数据相对于其多运算的平均值的波动. 11 ...
  • 内存的初始

    千次阅读 2017-03-29 10:23:13
    内存的初始
  • ASLR(Address Space Layout Randomization),地址空间格局的随机化,就是用来防范Ret2libc攻击手段的另一个重要的安全特性。那么,什么是Ret2libc攻击,ASLR的原理是什么,开发人员如何使用这个安全特性,就是我们...
  • ),地址空间格局的随机化,就是用来防范 Ret2libc 攻击手段的另一个重要的安全特性。那么,什么是 Ret2libc 攻击, ASLR 的原理是什么,开发人员如何使用这个安全特性,就是我们这篇文章要探讨的内容。 2.   ...
  • 【4】快排及随机化算法

    千次阅读 2018-10-02 15:32:10
    随机化快速排序随机选取主元素也能达到这种效果且 无需对分布做任何假设(没有一种分布会引起最差的结果) 分析(数学高能预警) 令 T ( n ) T(n) T ( n ) 为运行时间的随机变量,假设随机数(主元素)是独立的...
  • 内存地址空间布局

    万次阅读 2014-12-04 11:58:18
    在32位模式下虚拟地址空间总是一个4GB的内存地址块。这些虚拟地址通过页表(page table)映射到物理内存,页表由操作系统维护并被处理器引用。每一个进程拥有一套属于它自己的页表,但是还有一个隐情。只要虚拟地址...
  • 现在真实的持久化内存对于我们普通人来说还不可用,在进行实验和测试的时候可能需要我们模拟持久化内存来进行使用。 现在在一台主机(没有服务器o(╥﹏╥)o)上测试划分一块内存区域来进行持久化内存的模拟。 环境...
  • 空间格局随机化ASLR

    万次阅读 2010-01-27 20:39:00
    ),地址空间格局的随机化,就是用来防范 Ret2libc 攻击手段的另一个重要的安全特性。那么,什么是 Ret2libc 攻击, ASLR 的原理是什么,开发人员如何使用这个安全特性,就是我们这篇文章要探讨的内容。 2.   ...
  • 内存单元和内存单元地址

    千次阅读 2013-10-28 15:01:19
    内存单元地址  我们每个人,在不断的成长,无论何时,都在不断的学习着,通过书本,通过师傅,通过失败,我们不断的总结着,不断的整理着自己的知识,使其系统,理论,以便能解决更多复杂的问题。但是具有这样...
  • 内存没有初始内存越界的后果

    千次阅读 热门讨论 2010-02-02 10:33:00
    那么多半你是变量没有初始或者是内存小规模越界了。如果你发现你的程序在调试器里好好的,独立运行会挂,那么恭喜你,99%就是变量没有初始或者是内存越界。 这次老衲犯白痴。两件都碰上了。上集:首先的症状...
  • [原创/讨论] Windows 核心编程研究系列之二: 读取指定物理内存地址中的内容 ...关键字:windows内核,物理内存 ...现在我们反过来看一下,如果已知一个物理内存地 址 (假设地址有效),如何取得物理地
  • O 格式(ASLR地址空间布局随机化)

    万次阅读 2017-10-14 12:57:34
    2.4 ASLR地址空间布局随机化 2.5、代码签名: see also 淘宝联盟逆向笔记 前言 什么是编译? 1、CPU 由上亿个晶体管组成,在运行的时候,单个晶体管只能根据电流的流通或关闭来确认两种状态,人类根据这种状态创造了...
  • 奇怪的是,我在golang 1.2环境中编译上面的示例代码后反复运行,输出结果中key的次序是非随机化的。 不过,不管如何,这个默认的次序肯定是不能依赖的。 2. 业务依赖key次序时,如何解决随机化问题 其实Go ...
  • Uboot 内存初始(2440)

    千次阅读 2014-03-13 21:49:46
    Uboot 内存初始(2440) 内存分类,DRAM:需要定期充电(刷新),否则数据会丢失,存取速度慢。SRAM:具有静止存储功能的内存,不需要定期刷新操作就能保存它内部存储的数据,存取速度快,CPU内部的steppingstone...
  • ●在一个系统中,进程是和其他进程共享CPU和主存资源。但是共享资源会造成一些不可避免的问题,例如由于存储器不够而 进程无法运行,亦或是存储器被... 当CPU要执行某条指令时,它会生成一个有效物理地址,通过存...
  • 避免物理内存碎片

    万次阅读 2013-07-01 13:55:26
    物理内存碎片,是指系统空闲物理内存被使用过的物理内存分割开,导致buddy系统无法满足page分配申请,尤其是申请的连续空间较大的情况下。 一般情况下,出错信息如下: [ 3308.564000] lowmem_reserve[]: 0 ...
  • Redis内存优化

    千次阅读 2020-04-16 14:50:06
    使用maxmemory参数限制最大可用内存,当超出内存上限maxmemory时使用LRU等删除策略释放空间以及防止所用内存超过服务器物理内存。 2.配置内存回收策略 Redis所用内存达到maxmemory上限时会触发相应的溢出控制策略...
  • Linux进程地址空间和进程的内存分布

    万次阅读 多人点赞 2018-05-15 20:13:18
    本文为转载的!!! 原网址为:https://blog.csdn.net/yusiguyuan/article/details/45155035一 进程空间分布概述 对于一个进程,其空间分布如下图所示: 程序段...初始过的数据(Data):在程序运行初已经对变量...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 308,778
精华内容 123,511
关键字:

内存地址随机化