使用Syscall()实现混淆和无文件攻击的技术分析

本文分析了一种使用Python编写的恶意软件,它通过直接调用syscall()函数实现代码混淆和无文件活动,特别探讨了利用memfd_create系统调用在内存中创建文件描述符的技术细节。

使用Syscall()实现混淆/无文件活动

本周末我发现了一个恶意软件样本。这个样本看起来更像是一个概念验证,因为第二阶段的载荷非常简单,但它吸引我注意的是其使用了巧妙的代码混淆技术。

该投放器是一个简单的Python脚本(SHA256:e6f7afb92153561ff6c584fee1b04fb132ba984e8a28ca63708a88ebad15b939),在VirusTotal上的检测分数较低,仅为4/62[1]。该脚本包含一个嵌入的Base64载荷,解码后将被执行。这个第二阶段是一个ELF文件,表明该脚本针对Linux系统。

吸引我注意的是它直接使用syscall()[2]而非传统函数:

1
2
3
4
5
6
import ctypes
libc = ctypes.CDLL(None)
syscall = libc.syscall
[...]
fd = syscall(319, "", 1)
os.write(fd, content)

许多网站都记录了完整的系统调用列表[3]。系统调用319是"memfd_create",顾名思义,它允许在内存中创建文件描述符(即无需接触文件系统)。

Base64载荷并不十分有趣,它是一个ELF文件(SHA256:52fc723f7e0c4202c97ac5bc2add2d1d3daa5c3f84f3d459a6a005a3ae380119),仅使用单字节XOR密钥加密文件:

[1] https://www.virustotal.com/gui/file/e6f7afb92153561ff6c584fee1b04fb132ba984e8a28ca63708a88ebad15b939/detection [2] https://man7.org/linux/man-pages/man2/syscalls.2.html [3] https://www.chromium.org/chromium-os/developer-library/reference/linux-constants/syscalls/

Xavier Mertens (@xme)
Xameco
高级ISC处理员 - 自由职业网络安全顾问
PGP密钥

关键词: 恶意软件 Python 系统调用 混淆 无文件攻击

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计