Android系统安全 — 2.0-移动终端栈溢出的保护机制设置

news/2024/5/3 13:27:17/文章来源:https://blog.csdn.net/qincheng168/article/details/127056401

简介

操作系统提供了许多安全机制来尝试降低或阻止缓冲区溢出攻击带来的安全风险。例如 NX/DEP、 ASLR(PIE)、CANARY、FORTIFY、RELRO 等手段。

栈保护

1.NX/DEP

Linux 和 Windows 平台都支持对非可执行代码的保护,在 Linux 平台中被称为 NX (No-eXecute protect) ,在 Windows 中叫做 DEP (Data Execution Prevention) 。

其基本原理是将数据所在内存页标识为不可执行,当程序溢出成功转入 ShellCode 时,程序会尝试在数据页面上执行指令,此时 CPU 就会抛出异常,而不是去执行恶意指令。

nx dep

GCC 编译器默认开启了 NX 选项,可以通过添加 -z execstack 编译参数关闭 NX 选项。

-z execstack  //关闭
-z noexecstack //开启

2. Canary

当启用栈保护后,函数开始执行的时候会先往栈里插入 Cookie 信息,函数返回时会验证 Cookie 信息是否合法,非法则停止运行。

攻击者在覆盖返回地址的时候往往也会将 Cookie 信息给覆盖掉,导致栈保护检查失败进而阻止 ShellCode 的执行,在 Linux 中将 Cookie 信息称为 Canary 。

GCC 在 4.2 版本中添加了 -fstack-protector 和 -fstack-protector-all 编译参数以支持栈保护功能,4.9 新增了 -fstack-protector-strong 编译参数让保护的范围更广,在编译时可以配置控制是否开启栈保护以及程度。

-fstack-protector //启用保护,不过只为局部变量中含有数组的函数插入保护
-fstack-protector-all //启用保护,为所有函数插入保护
-fstack-protector-strong  //针对gcc4.9以后版本,为所有函数插入保护
-fstack-protector-explicit //只对有明确stack_protect attribute的函数开启保护
-fno-stack-protector //禁用保护.

3. ASLR

Address Space Layout Randomization, ASLR 地址空间布局随机化,该技术在 2005 年的 Kernel 2.6.12 版本中引入,会将进程的某些内存空间地址进行随机化来增大入侵者预测目的地址的难度,从而降低进程被成功入侵的风险。

一般情况下NX和地址空间分布随机化(ASLR)会同时工作。因为 Linux 中堆空间可以通过 mmap() 以及 brk() 这两个系统调用完成的,而在不同的等级上面可能会只有部分接口被随机化。如果当前 ASLR 等级为 1,那么当申请空间大于 128K 时,系统通过 mmap() 分配空间,得到的地址是随机的;而当申请空间小于 128K 时,系统是通过 brk() 进行分配的,得到的地址是静止的.

GCC编译器修改:

-fno-pie -no-pie  //关闭
-fpie -pie  //可执行等级1
-fPIE -pie  //可执行等级2
-fpic       //共享库等级1
-fPIC       //共享库等级2

Linux运行修改:

# sysctl -n kernel.randomize_va_space
cat /proc/sys/kernel/randomize_va_space# sysctl -w kernel.randomize_va_space=0
echo 2 > /proc/sys/kernel/randomize_va_space

4. FORTIFY

用于检查是否存在缓冲区溢出的错误,针对的是字符串、内存操作函数,例如 memcpy memset strcpy strcats snprintf 等等。

可以通过 _FORTIFY_SOURCE 宏定义检查的级别:

  • _FORTIFY_SOURCE=1 仅在编译时检查。
  • _FORTIFY_SOURCE=2 在程序运行时也会检查,如果判断到缓冲区溢出则会直接终止程序。

实际上 GCC 会到生成了一些附加代码,通过对数组大小的大小进行判断,从而达到防止缓冲区溢出的作用

-D_FORTIFY_SOURCE=1 //较弱检查
-D_FORTIFY_SOURCE=1 //较强检查

5.  RELRO

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

GCC 提供了一种 Read Only Relocation 的方法,其原理为是由 linker 指定 binary 的一块经过 dynamic linker 处理过 relocation 之后的区域为只读.

设置符号重定向表格为只读或在程序启动时就解析并绑定所有动态符号,从而减少对 Global Offset Table, GOT 攻击。

norelro        // 关闭
lazy          // 部分开启 即Partial RELRO
now           // 全部开启

6.其他

动态路径搜索:可以通过 -Wl,--disable-new-dtags 表明使用 RPATH ;通过 -Wl,--enable-new-dtags 标示使用 RUNPATH 

checksec: 是一个 Bash 脚本,可以用来检查可执行文件属性,例如 PIE RELRO PaX Canaries, ASLR, Fortify Source等等属性。

详细可以查看官网 TrapKit CheckSec 或者 Github CheckSec ,也可以直接使用 本地保存 。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_14333.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Mybatis框架】初识Mybatis

CSDN话题挑战赛第2期 参赛话题:学习笔记 MyBatis1、MyBatis简介1.1、MyBatis历史1.2、MyBatis特性2. 搭建MyBatis2.1 创建一个Maven项目2.2 在项目下新建我们的MyBatis项目2.3 引入依赖2.4 创建MyBatis的核心配置文件2.5 创建mapper接口2.6 创建MyBatis的映射文件2.…

AWS 中文入门开发教学 34- MySQL@RDS - 准备工作 - VPC子网,安全组,DB子网组,参数组,选项组

知识点 建立RDS MySQL前的准备工作实战演习 VPC子网,安全组,DB子网组,参数组,选项组 VPC子网 Name: deeplearnaws-db-1cCIDR: 172.16.21.0/24 安全组 Name: deeplearnaws-db-sg <- 可以直接使用之前创建的,但生产环境时应只保留3306端口 DB子网组 Name: deeplearnaws-db-su…

JavaScript学习Day008(jQuery操作)

DOM操作分类 DOM操作分为三类 DOM Core&#xff1a;任何一种支持DOM的编程语言都可以使用它&#xff0c;如getElementById() HTML-DOM&#xff1a;用于处理HTML文档&#xff0c;如document.forms CSS-DOM&#xff1a;用于操作CSS&#xff0c;如element.style.color"gree…

【NLP】第12章 检测客户情绪以做出预测

&#x1f50e;大家好&#xff0c;我是Sonhhxg_柒&#xff0c;希望你看完之后&#xff0c;能对你有所帮助&#xff0c;不足请指正&#xff01;共同学习交流&#x1f50e; &#x1f4dd;个人主页&#xff0d;Sonhhxg_柒的博客_CSDN博客 &#x1f4c3; &#x1f381;欢迎各位→点赞…

JavaScript数组与对象

数组对象 「创建数组的两种方式」 1. 字面量方式var arr [1,"test",true];2. 实例化数组对象 new Array() var arr new Array(); 注意&#xff1a;上面代码中arr创建出的是一个空数组&#xff0c;如果需要使用构造函数Array创建非空数组&#xff0c;可以在创建数…

SpringCloud-19-Spring Cloud Hystrix介绍和服务端降级

8 Hystrix&#xff1a;Spring Cloud服务熔断与降级组件 8.1 分布式系统面临的问题 复杂分布式体系结构中的应用程序往往由多个服务组成&#xff0c;这些服务之间相互依赖&#xff0c;依赖关系错综复杂&#xff0c;每个依赖关系在某些时候将不可避免的失败&#xff01; 若一个…

最优化理论与方法2

凸优化问题&#xff1a; 对于最优化问题P&#xff1a; min f(x1, x2 , …,xn) s.t. : gi ( x1 , x2 , … , xn) < 0 , i 1 , … , m hi ( x1 , x2 , … , xn) 0 ,i 1 , … , l 1 . 记可行域为S { x ∈ Rn | gi(x)<0 , i1,…,m , hi(x)0 , i 1 , … , l.} 2.当f(x…

交通流域关键词

关键词&#xff1a; ●交通拥堵&#xff1a;traffic jam 或 traffic congestion ●元胞传输模型&#xff1a;cellular transport model 或 cell transport model(细胞传输模型) ●元胞自动机&#xff1a;cellular automata ●VSL(可变速度限制)&#xff1a;variable speed …

Python3 安装软件出现 cl.exe failed with exit status 2 错误

最近因项目需要&#xff0c;开始深入接触python。遇到的一些环境问题&#xff0c;分享下。 requirements.txt中包含一系列所需组件&#xff0c;部分组件安装会报cl.ext错误。 如错误问题&#xff1a;Python3 安装pycrypto 2.6.1 出现 cl.exe failed with exit status 2 错误 …

Android国际化多语言切换

关于App国际化&#xff0c;之前有讲到国际化资源、字符换、布局相关&#xff0c;想要了解的猛戳用力抱一下APP国际化。借着本次重构多语言想跟大家聊一下多语言切换&#xff0c;多语言切换对于一款国际化App来讲是重中之重&#xff0c;并非难事&#xff0c;但是若要做好也是一件…

LeetCode-136-只出现一次的数字

1、哈希表 利用哈希表记录每个元素和其出现的次数&#xff0c;最后遍历哈希表找到只出现一次的数字。缺点在于额外空间为O(n)O(n)O(n)。 class Solution { public:int singleNumber(vector<int> &nums) {unordered_map<int, int> hs;for (auto i: nums) {hs[…

疫情下低代码平台将是企业的曙光

全球疫情的爆发&#xff0c;加速了企业数字化转型进程&#xff0c;为了响应不断变化和增加的业务需求&#xff0c;需要充足的资金以及专业的开发人员才能够有效推行数字化管理。然而在这样的情景下&#xff0c;人员的缺少&#xff0c;时间的效率等问题&#xff0c;导致很多企业…

图像分类数据集(线性神经网络,需结合从零实现softmax回归一起学习)

文章目录图像分类数据集读取小批量整合所有组件小结图像分类数据集 导入必要的类包。 import torch import torchvision from torch.utils import data #torchvision是pytorch的一个图形库&#xff0c;它服务于PyTorch深度学习框架的&#xff0c;主要用来构建计算机视觉模型。…

Kafka设计原理——副本数据同步机制(watermark 和 leader epoch)

文章目录LEO更新机制follower副本LEO更新leader副本LEO更新HW更新机制follower更新HWleader更新HW使用HW衡量数据同步情况的缺陷LEO更新机制 follower副本LEO更新 Kafka设计了两套follower副本LEO属性&#xff0c;一套LEO值保存在follower副本所在的broker缓存上&#xff1b;…

详解 B2B 用户、组织、员工、角色

整理了一下 toB 多组织系统中常见的实体关系&#xff0c;往往在实际项目中这些基础模块是公司老前辈已经开发完成的&#xff0c;因此新人在此基础上开发一些相关的业务模块很容易被这些模糊不清的关系搞晕。 一、定义 user 用户&#xff0c;操作者的唯一标识&#xff0c;通常…

去中心化时代的创作者经济

所谓创作者经济&#xff0c;具体是指利用各种互联网工具&#xff0c;由个人或团体进行内容创作、分发及一系列与创作者相关服务下产生的经济收益。 这一概念也主要在当前的 web2互联网时代&#xff0c;并且有很多鲜明的案例凸显出了创作者经济的强大潜力&#xff0c;像我们熟知…

SpringCloud-20-Spring Cloud Hystrix客户端服务降级

8.5 客户端服务降级 通常情况下&#xff0c;我们都会在客户端进行服务降级&#xff0c;当客户端调用的服务端的服务不可用时&#xff0c;客户端直接进行服务降级处理&#xff0c;避免其线程被长时间、不必要地占用。沿用microservice-cloud-consumer-dept-openFeign客户端工程…

ConcurrentHashMap简单案例

concurrenthashmap 线程安全集合类 线程安全基本分类 线程安全集合类可以分为三大类&#xff1a; 遗留的线程安全集合如 Hashtable &#xff0c; Vector 使用 Collections 装饰的线程安全集合&#xff0c;如 Collections.synchronizedCollectionCollections.synchronizedLis…

【剑指offer】链表篇-含题目代码思路解析

【剑指offer】链表篇1. JZ6 从尾到头打印链表C注意2. JZ24 反转链表C(双指针法)注意3. JZ25 合并两个排序的链表C注意4. JZ52 两个链表的第一个公共结点C 【错误】C【正确】注意5. JZ23 链表中环的入口结点C注意6. JZ22 链表中倒数最后k个结点C注意7. JZ35 复杂链表的复制8. JZ…

如何实时计算中证1000指数的主买/主卖交易量

主买是指以卖方的报价成交&#xff0c;主卖是指以买方的报价成交。 一般来说&#xff0c;主动买入就是资金流入&#xff0c;主动卖出就是资金流出&#xff0c;所以实时统计主买/主卖交易量能够实时监控资金的流入流出情况。本文基于中证 1000 指数&#xff0c;介绍如何利用 Dol…