目录
技能展示
文章
日记
时间线
项目展示
分类
标签
Android Bash Burp C++ CS CTF DLL劫持 Docker Fastjson Fastjson2 FNV-1a FreeCMS FRP GetShell GitHub IPv6 Java JNDI John JS加密 JS逆向 K8s Kafka Kali lama-cleaner Linux mitmproxy MSF MySQL Nim Nmap NPS Office OID Payload Phar PHP phpMyAdmin POP链 PWN Pyinstaller Python RCE RSA Shellcode SNMP SQL注入 SSH SSRF Ubuntu USB Web Webshell Web安全 Windows XSS YAML Zookeeper 主机探测 代码审计 伪协议 免杀 内网 内网穿透 加密 加解密 参数 反序列化 反弹shell 命令 哈希碰撞 图像处理 域渗透 字符串逃逸 容器 密码学 密码破解 提权 数据库 文件上传 日志分析 未授权访问 权限维持 汇总 流量分析 消息队列 溯源 漏洞 漏洞分析 漏洞利用 端口扫描 编译 网络管理 资产探测 跨平台 运维 进程隐藏 逆向
目录
目录
818 字
4 分钟
GCC编译针对Linux保护机制
GCC编译针对Linux保护机制
1. 栈保护(Stack Canary)
栈保护机制通过在栈上插入一个随机的“金丝雀值”(Canary),在函数返回前检查该值是否被修改,从而防止栈溢出攻击。
启用栈保护
1gcc -fstack-protector -o program program.c-fstack-protector:对包含敏感函数(如使用alloca或缓冲区较大的函数)启用栈保护。
启用强栈保护
1gcc -fstack-protector-strong -o program program.c-fstack-protector-strong:对更多函数启用栈保护,覆盖范围比-fstack-protector更广。
启用全栈保护
1gcc -fstack-protector-all -o program program.c-fstack-protector-all:对所有函数启用栈保护。
禁用栈保护
1gcc -fno-stack-protector -o program program.c-fno-stack-protector:禁用栈保护。
2. 数据执行保护(NX/DEP)
数据执行保护机制通过将栈和堆标记为不可执行,防止攻击者执行注入的 shellcode。
启用 NX 保护
1gcc -z noexecstack -o program program.c-z noexecstack:将栈标记为不可执行。
禁用 NX 保护
1gcc -z execstack -o program program.c-z execstack:将栈标记为可执行。
3. RELRO(Relocation Read-Only)
RELRO 机制通过将动态链接器的重定位表标记为只读,防止攻击者修改 GOT(Global Offset Table)。
启用 Partial RELRO
1gcc -Wl,-z,relro -o program program.c-Wl,-z,relro:启用 Partial RELRO,部分重定位表标记为只读。
启用 Full RELRO
1gcc -Wl,-z,relro,-z,now -o program program.c-Wl,-z,relro,-z,now:启用 Full RELRO,所有重定位表在程序启动时解析并标记为只读。
禁用 RELRO
1gcc -Wl,-z,norelro -o program program.c-Wl,-z,norelro:禁用 RELRO。
4. 地址空间布局随机化(ASLR)
ASLR 机制通过随机化程序的内存布局(如栈、堆、共享库的地址),增加攻击者预测内存地址的难度。
启用 ASLR
ASLR 是操作系统的特性,无法通过 gcc 直接启用或禁用。但可以通过以下方式控制:
-
启用 ASLR:
1echo 2 | sudo tee /proc/sys/kernel/randomize_va_space -
禁用 ASLR:
1echo 0 | sudo tee /proc/sys/kernel/randomize_va_space
5. 位置无关代码(PIC/PIE)
位置无关代码(Position Independent Code, PIC)和位置无关可执行文件(Position Independent Executable, PIE)通过将代码和数据的地址随机化,增强 ASLR 的效果。
启用 PIE
1gcc -fPIE -pie -o program program.c-fPIE:生成位置无关代码。-pie:生成位置无关可执行文件。
禁用 PIE
1gcc -no-pie -o program program.c-no-pie:禁用 PIE。
6. 格式化字符串保护
格式化字符串保护机制通过检查 printf 等函数的格式化字符串,防止格式化字符串漏洞。
启用格式化字符串保护
1gcc -Wformat -Wformat-security -o program program.c-Wformat:检查格式化字符串的正确性。-Wformat-security:检查格式化字符串的安全性问题。
7. 其他安全选项
启用堆栈检查
1gcc -fstack-check -o program program.c-fstack-check:检查栈溢出。
启用缓冲区溢出检查
1gcc -D_FORTIFY_SOURCE=2 -o program program.c-D_FORTIFY_SOURCE=2:启用缓冲区溢出检查。
8. 综合示例
以下是一个综合启用多种保护机制的编译命令:
1gcc -fstack-protector-strong -z noexecstack -Wl,-z,relro,-z,now -fPIE -pie -D_FORTIFY_SOURCE=2 -o program program.c- 启用强栈保护。
- 启用 NX 保护。
- 启用 Full RELRO。
- 启用 PIE。
- 启用缓冲区溢出检查。
9. 总结
通过 gcc 的编译参数,可以灵活地启用或禁用 Linux 的保护机制。常见的保护机制包括:
- 栈保护(
-fstack-protector) - 数据执行保护(
-z noexecstack) - RELRO(
-Wl,-z,relro,-z,now) - PIE(
-fPIE -pie) - 格式化字符串保护(
-Wformat -Wformat-security)
在实际开发中,建议根据程序的安全需求,合理启用这些保护机制,以提高程序的安全性。
部分信息可能已经过时
目录
技能展示
文章
日记
时间线
项目展示
分类
标签
Android Bash Burp C++ CS CTF DLL劫持 Docker Fastjson Fastjson2 FNV-1a FreeCMS FRP GetShell GitHub IPv6 Java JNDI John JS加密 JS逆向 K8s Kafka Kali lama-cleaner Linux mitmproxy MSF MySQL Nim Nmap NPS Office OID Payload Phar PHP phpMyAdmin POP链 PWN Pyinstaller Python RCE RSA Shellcode SNMP SQL注入 SSH SSRF Ubuntu USB Web Webshell Web安全 Windows XSS YAML Zookeeper 主机探测 代码审计 伪协议 免杀 内网 内网穿透 加密 加解密 参数 反序列化 反弹shell 命令 哈希碰撞 图像处理 域渗透 字符串逃逸 容器 密码学 密码破解 提权 数据库 文件上传 日志分析 未授权访问 权限维持 汇总 流量分析 消息队列 溯源 漏洞 漏洞分析 漏洞利用 端口扫描 编译 网络管理 资产探测 跨平台 运维 进程隐藏 逆向
目录