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

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

你可能感兴趣的:(linux,安全,运维)