Linux下程序的保护机制

前言

相信很多人,查看程序信息时会用到,checksec这个命令。它会给你返回如下图的结果,但是很多最开始看到的人,很多都看不懂,如果身为小白的我,跟在大佬后面比葫芦画瓢,这样用。这篇博文就是用来解释下面信息的,希望对你有所帮助,同时也是为了以后自己忘记可以回顾。

Stack Canary

Stack Canray是专门针对栈溢出攻击涉及的一中保护机制。由于栈溢出攻击的主要目标是通过溢出覆盖函数栈高位的返回地址,因此其思路是在函数开始执行前,即返回地址前写入一个字长的随机数据(canary),在函数返回前校验该值是否被改变,如果改变则认为是栈溢出,程序直接终止,以此来防止信息泄露。

GCC默认使用Stack Canary保护,关闭方法编译时加入“-fno-stack-protector”参数

ALSR

ALSR,全称 Address Space Layout Randomization(地址空间分布随机化)。目的是将程序的堆栈地址和动态链接库的加载地址进行一定的随机化,这些地址之间是不可读写执行的未映射内存,降低攻击者对程序内存结构的了解程序。这样,即使攻击者布置了shellcode 并可以控制转跳,由于内存地址结构的未知,依然无法执行shellcode。

ASLR是系统等级的保护机制,关闭方式是修改/proc/sys/kernel/randomize_va_space文件的内容为0

PIE

与ASLR保护十分类似,PIE保护的目的是让可执行程序ELF的地址进行随机化加载,从而使得程序的内存结构对攻击者完全未知。

GCC编译时开启PIE的方法是添加参数 “-fpic -pie”,关闭的方法为“-no-pie”。

NX

NX保护在window中也被称为 DEP,是通过现代操作系统的内存保护单元机制对程序内存按页的粒度进行权限设置,其基本规则为可写权限与可执行权限互斥,基本规则是将数据所在内存页标识为不可执行。开启NX保护后,所有可以被修改写入shellcode的内存都不可执行,所有可以被执行的代码数据都不可被修改

GCC默认开启NX保护,关闭方法是编译时加入“-z execstack”参数

RELRO

在Linux系统安全领域数据可以写的存储区就会是攻击的目标,尤其是存储函数指针的区域。 所以在安全防护的角度来说尽量减少可写的存储区域对安全会有极大的好处.

GCC, GNU linker以及Glibc-dynamic linker一起配合实现了一种叫做relro的技术: read only relocation。大概实现就是由linker指定binary的一块经过dynamic linker处理过 relocation之后的区域为只读.

设置符号重定向表格为只读或在程序启动时就解析并绑定所有动态符号,从而减少对GOT(Global Offset Table)攻击。RELRO为” Partial RELRO”,说明我们对GOT表具有写权限。

Linux下程序的保护机制(checksec)相关推荐

  1. Linux下程序崩溃dump时的 core文件的使用方法

    Linux下程序崩溃dump时的 core文件的使用方法 1.在启动程序前执行 ulimit -c unlimited unlimited 表示生成文件的大小限制,也可以修改为自定义的大小,例如: u ...

  2. 从一道面试题谈linux下fork的运行机制

    http://kb.cnblogs.com/page/76622/ 今天一位朋友去一个不错的外企面试linux开发职位,面试官出了一个如下的题目: 给出如下C程序,在linux下使用gcc编译: #i ...

  3. 机制 linux_从一道面试题谈linux下fork的运行机制

    今天一位朋友去一个不错的外企面试linux开发职位,面试官出了一个如下的题目: 给出如下C程序,在linux下使用gcc编译: #include "stdio.h" #includ ...

  4. LINUX下FORK的运行机制详细解析

    摘要:由于fork函数运行机制的复杂性,造就了当两个fork并排时,问题就变得很复杂.解这个题的关键,一是要对linux下进程的机制有一定认识,二是抓住上文提到的几个关于fork的关键点. 今天一位朋 ...

  5. Linux下程序编译通过运行时提示error while loading shared libraries(动态链接库问题)

    问题: Linux下程序编译通过了,但是运行时提示 :error while loading shared libraries: libXXX.so.X: cannot open shared obj ...

  6. Linux下程序的Profiling工具-性能测试工具GNU gprof

    Linux下程序的Profiling工具 http://blog.chinaunix.net/uid-128922-id-289972.html 我们在写程序,特别是嵌入式程序的时候,通常需要对程序的 ...

  7. linux下程序如何实现单实例运行

    1.技术原理 无论是windows还是linux下,程序设计者都会遇到一个问题,那就是如何实现程序的单实例运行.比如,Windows自带的播放软件Windows Medea Player只能启动一个实 ...

  8. linux下程序被Killed

    OS:cent os 6.5 日志路径:/var/log/messages 服务器上跑的一个程序,发现报了Killed.查看/var/log/messages里的日志,发现以下报错: Aug 11 1 ...

  9. linux下程序执行的步骤及其作用

    程序执行的步骤及其作用 在linux下使用gcc编程时,从表面上看是简单的命令的执行,但实际上,程序的执行分为四个步骤:预编译,编译,汇编,链接. 预编译 在linux系统下,一个.c文件经过预编译生 ...

最新文章

  1. 揭秘微软全球最大数据中心
  2. Mybatis 关键组件(注意各组件的最佳作用域)
  3. SharePoint 2013 Disaster Recovery——迁移内容数据库
  4. 关于SAP 对生产订单的月度结算
  5. aws 服务器之间文件转发,aws bucket之间相互拷贝数据
  6. css中padding和magin的区别
  7. javascript做极简时钟特效,再简单没思路你也做不出来
  8. .NET 6 预览版 7 Released
  9. matlab中D A1在哪,A1=d(1:15,:);A2=d(16:30,:);A3=
  10. 【java】java 并发编程 BlockingQueue 和 BlockingDeque
  11. android 显示文章内容,在Android中,RecyclerView在重新创建后没有显示任何内容
  12. GPS定位,经纬度附近地点查询–C#实现方法
  13. VC2008下安装OpenCV2.3.1
  14. 绿坝老板不诚实,蒙骗政府官员
  15. iphone/ipad 横竖屏切换
  16. vs2019豆沙绿背景色及consolas字体设置
  17. 9.25+9.27 联考
  18. Python系列20-Web应用程序-用户账户
  19. 贾又福大象鸿蒙,2016贾又福工作室师生优秀作品全国巡展
  20. 【人脸识别6】用haar+adaboost训练自己的人脸检测器

热门文章

  1. 【数据结构与算法】之深入解析“串联所有单词的子串”的求解思路与算法示例
  2. python获得本机硬件信息
  3. sys.argv[] 的使用详解
  4. django.template.exceptions.TemplateDoesNotExist: rest_framework/api.html
  5. Python3实现旋转数组的3种算法
  6. 操作系统——理论知识
  7. 电子设计基础——电源的各项指标及测量方法
  8. JAVA数组及数组的应用
  9. 【MFC】MFC应用程序框架详解
  10. 【Linux网络编程】IP地址分类和介绍