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

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

相关推荐
王大傻092812 分钟前
安全漏洞的生命周期
网络·安全·web安全
thinkMoreAndDoMore1 小时前
linux内核匹配I2C设备
linux·运维·服务器
小政同学6 小时前
【NFS故障】共享的文件无法执行
linux·运维·服务器
AI木马人7 小时前
3.【Prompt工程实战】如何设计一个可复用的Prompt系统?(避免每次手写提示词)
linux·服务器·人工智能·深度学习·prompt
ch3nyuyu7 小时前
Ubuntu(乌班图)基础指令
linux·运维·网络
minglie17 小时前
gcc编译器汇总
linux
挽安学长7 小时前
保姆级教程,通过GACCode使用Claude Code Desktop!
运维·服务器
其实防守也摸鱼8 小时前
软件安全与漏洞--6、软件安全需求分析
网络·安全·网络安全·软件需求·等保·法律
firstacui8 小时前
MGRE实验
运维·服务器·网络
白菜欣9 小时前
Linux —《开发三件套:gcc/g++、gdb、make/Makefile 全解析》
linux·运维