当前位置: 首页 > news >正文

Linux平台下安全编译

https://blog.csdn.net/tabactivity/article/details/126660974
扫描下开启了哪些安全选项:
git clone https://github.com/slimm609/checksec.sh/

延迟拷贝 写时拷贝
fp指针
重定向表
写时拷贝 内核

-noexecstack和-pie是在Linux系统中编译可执行文件时使用的编译器选项。

-noexecstack选项告诉链接器将生成的可执行文件标记为不需要可执行栈。这是一种安全措施,防止潜在的缓冲区溢出攻击。默认情况下,程序的堆栈是可执行的,这意味着攻击者可以将恶意代码注入堆栈,然后执行它。通过使用-noexecstack,堆栈被标记为不可执行,使得攻击者更难利用缓冲区溢出漏洞。

-pie选项代表位置无关可执行文件。当在编译过程中使用此选项时,生成的可执行文件每次运行时会加载到不同的内存地址。这增加了额外的安全层,使得攻击者更难利用内存破坏漏洞。对于现代的Linux发行版来说,位置无关可执行文件很常见,因为它们有助于防范某些类型的攻击,比如返回导向编程(ROP)。

-noexecstack和-pie都是与安全相关的标志,可以提高生成的可执行文件的安全性。

-relro 是一个与链接器相关的选项,用于加强可执行文件的安全性。

-relro 选项代表 “RELocation Read-Only”,它在链接时将可执行文件中所有的可重定位目标(relocatable object)的全局偏移表(GOT)和程序链接表(PLT)设为只读。这样做可以防止攻击者利用全局偏移表和程序链接表进行攻击,例如通过修改函数的调用地址或劫持动态链接。

通常,链接器在执行可执行文件时会加载它所依赖的共享库,并使用全局偏移表和程序链接表来解析和调用库函数。但这也使得攻击者可以修改这些表中的地址,实现动态链接的劫持攻击。

使用-relro选项后,链接器会在可执行文件加载时将这些表标记为只读,以提高安全性。这可以减少动态链接劫持攻击的风险,但也可能导致一些不兼容的问题,特别是对于某些需要在运行时修改全局偏移表和程序链接表的程序。

总之,-relro选项是一种加强可执行文件安全性的措施,通过将全局偏移表和程序链接表标记为只读,减少了动态链接劫持攻击的可能性。

可执行的二进制 和不可以执行的静态库的相互调用关系:会不会有影响

限制了noexecstack的可以被链接起来 运行吗??? 是不是调用了动态库???

限制了noexecstack的可执行文件可以被链接起来,但运行时可能会遇到问题。当设置noexecstack标志时,操作系统会禁止在该可执行文件的栈上执行代码。这可以提高程序的安全性,因为它可以阻止来自栈缓冲区溢出等攻击的代码执行。但是,某些程序可能依赖于在栈上执行代码,如果无法在栈上执行代码,这些程序可能无法正常运行,甚至无法链接。

请注意,noexecstack只能向操作系统发出请求,要求操作系统禁止在栈上执行代码。操作系统可以选择是否禁止在栈上执行代码。因此,即使设置了noexecstack标志,某些操作系统仍可以允许在栈上执行代码。因此,与操作系统相关的设置可能会影响可执行文件的行为。

如果您遇到问题,建议您检查操作系统的文档,了解如何将可执行文件与noexecstack标志链接起来,并在希望在栈上执行代码的情况下,尝试使用其他方法保护程序的安全性。

进程分配内存的时候的全局变量表???

动态库被加载进来???

两个进程有一个没加noexecstack,互相linker会不会有问题?

溢出栈攻击详解 木马 414

写时拷贝(copy-on-write,简称COW)和延迟拷贝(lazy copy)是两种优化技术,用于减少复制操作的开销。它们通常在操作系统和编程语言的实现中使用。

写时拷贝(Copy-on-Write)是一种延迟复制的技术。当有多个进程或线程共享同一块内存时,它们实际上共享同一个内存页面,而不是复制多个副本。只有当某个进程或线程试图修改该内存页面时,才会将该内存页面复制到新的位置,并且修改只影响到修改者的副本,而不会影响到其他共享者。这样可以减少内存的复制开销,提高效率。

延迟拷贝(Lazy Copy)是在创建副本时不立即复制数据,而是在需要修改时才进行复制。这主要用于数据结构,例如数组或字符串,在创建副本时只复制相关的元数据和指针,而不复制实际的数据。当其中一个副本需要修改时,才会将数据复制到新的位置,并且进行修改。这样可以减少创建副本时的时间和空间开销,特别是当数据很大时。

总结起来,写时拷贝和延迟拷贝都是为了避免不必要的复制操作,从而提高性能和节省资源。它们通常被用于处理共享数据或大型数据结构的情况下。

相关文章:

  • Git搭建
  • 通过FileZilla配置FTP
  • gitlab.rb主要配置
  • linux install nvm
  • 如何令containerd连接私有harbor
  • SQL基础知识(四)
  • Golang内置类型和函数及接口、Init函数和main函数
  • 无状态应用管理Deployment
  • 面试经典题---3.无重复字符的最长子串
  • php二次开发股票系统代码:腾讯股票数据接口地址、批量获取股票信息、转换为腾讯接口指定的股票格式
  • 幻兽帕鲁服务器数据备份
  • x-cmd pkg | httpx - 为 Python 设计的下一代 HTTP 客户端库
  • 04 SB实战 -微头条之头条模块(登录验证拦截器+发布文章+修改文章)
  • 分享7种SQL的进阶用法
  • 【OCC学习23】使用Draw探索OCC API 【完结】
  • php的引用
  • 2017 年终总结 —— 在路上
  • Apache的基本使用
  • Linux CTF 逆向入门
  • magento 货币换算
  • MySQL几个简单SQL的优化
  • 关键词挖掘技术哪家强(一)基于node.js技术开发一个关键字查询工具
  • 使用putty远程连接linux
  • 微信小程序实战练习(仿五洲到家微信版)
  • 验证码识别技术——15分钟带你突破各种复杂不定长验证码
  • 一些关于Rust在2019年的思考
  • 远离DoS攻击 Windows Server 2016发布DNS政策
  • 阿里云服务器购买完整流程
  • 大数据全解:定义、价值及挑战
  • 浅谈sql中的in与not in,exists与not exists的区别
  • ​​​​​​​​​​​​​​汽车网络信息安全分析方法论
  • ​软考-高级-系统架构设计师教程(清华第2版)【第15章 面向服务架构设计理论与实践(P527~554)-思维导图】​
  • #[Composer学习笔记]Part1:安装composer并通过composer创建一个项目
  • #免费 苹果M系芯片Macbook电脑MacOS使用Bash脚本写入(读写)NTFS硬盘教程
  • (4) PIVOT 和 UPIVOT 的使用
  • (八)Docker网络跨主机通讯vxlan和vlan
  • (分享)自己整理的一些简单awk实用语句
  • (附源码)spring boot北京冬奥会志愿者报名系统 毕业设计 150947
  • (三)centos7案例实战—vmware虚拟机硬盘挂载与卸载
  • (十七)Flask之大型项目目录结构示例【二扣蓝图】
  • (一)appium-desktop定位元素原理
  • (一)Neo4j下载安装以及初次使用
  • (转)http协议
  • (转)MVC3 类型“System.Web.Mvc.ModelClientValidationRule”同时存在
  • *p=a是把a的值赋给p,p=a是把a的地址赋给p。
  • .cfg\.dat\.mak(持续补充)
  • .NET C# 使用 SetWindowsHookEx 监听鼠标或键盘消息以及此方法的坑
  • .NET Core 控制台程序读 appsettings.json 、注依赖、配日志、设 IOptions
  • .NET 发展历程
  • .NET8.0 AOT 经验分享 FreeSql/FreeRedis/FreeScheduler 均已通过测试
  • .net安装_还在用第三方安装.NET?Win10自带.NET3.5安装
  • .net对接阿里云CSB服务
  • .NET开发不可不知、不可不用的辅助类(三)(报表导出---终结版)
  • @EnableConfigurationProperties注解使用
  • @modelattribute注解用postman测试怎么传参_接口测试之问题挖掘