O que Analisando Artefatos de Arquivos LNK e Jump Lists faz?
Visão Geral
Arquivos LNK (atalhos) do Windows e Jump Lists são artefatos forenses críticos que fornecem evidências de acesso a arquivos, execução de programas e comportamento do usuário. Arquivos LNK são criados automaticamente quando um usuário abre um arquivo através do Windows Explorer ou das caixas de diálogo Abrir/Salvar, armazenando metadados sobre o arquivo de destino, incluindo seu caminho original, carimbos de data/hora, número de série do volume, nome NetBIOS e endereço MAC do sistema host. As Jump Lists, introduzidas no Windows 7, estendem isso mantendo listas por aplicativo de arquivos acessados recentemente e frequentemente. Esses artefatos persistem mesmo após os arquivos de destino serem excluídos, tornando-os inestimáveis para estabelecer que um usuário acessou arquivos específicos em horários específicos.
Quando Usar
- Ao investigar incidentes de segurança que exigem a análise de artefatos de arquivos LNK e Jump Lists
- Ao construir regras de detecção ou consultas de caça a ameaças para este domínio
- Quando analistas de SOC precisam de procedimentos estruturados para este tipo de análise
- Ao validar a cobertura de monitoramento de segurança para técnicas de ataque relacionadas
Pré-requisitos
- LECmd (Eric Zimmerman) para análise de arquivos LNK
- JLECmd (Eric Zimmerman) para análise de Jump Lists
- Python 3.8+ com bibliotecas pylnk3 ou LnkParse3
- Imagem forense ou coleta de triagem de um sistema Windows
- Timeline Explorer para análise de CSV
Localizações de Arquivos LNK
| Localização | Descrição |
|---|---|
%USERPROFILE%\AppData\Roaming\Microsoft\Windows\Recent\ | Arquivos recentes acessados |
%USERPROFILE%\Desktop\ | Atalhos criados pelo usuário |
%USERPROFILE%\AppData\Roaming\Microsoft\Windows\Start Menu\ | Atalhos do Menu Iniciar |
%USERPROFILE%\AppData\Roaming\Microsoft\Office\Recent\ | Documentos recentes do Office |
Estrutura do Arquivo LNK
Cabeçalho Shell Link (76 bytes)
| Offset | Tamanho | Campo |
|---|---|---|
| 0x00 | 4 | HeaderSize (sempre 0x0000004C) |
| 0x04 | 16 | LinkCLSID (sempre 00021401-0000-0000-C000-000000000046) |
| 0x14 | 4 | LinkFlags |
| 0x18 | 4 | FileAttributes |
| 0x1C | 8 | CreationTime (FILETIME) |
| 0x24 | 8 | AccessTime (FILETIME) |
| 0x2C | 8 | WriteTime (FILETIME) |
| 0x34 | 4 | FileSize do destino |
| 0x38 | 4 | IconIndex |
| 0x3C | 4 | ShowCommand |
| 0x40 | 2 | HotKey |
Campos Forenses Chave em Arquivos LNK
- Carimbos de data/hora do arquivo de destino: Horários de criação, acesso e modificação do arquivo referenciado
- Informações do volume: Número de série, tipo de unidade, rótulo do volume
- Informações de compartilhamento de rede: Caminho UNC, nome do compartilhamento
- Identificadores de máquina: Nome NetBIOS, endereço MAC (do TrackerDataBlock)
- Rastreamento de Link Distribuído: ID da máquina e GUID do objeto
Análise com Ferramentas EZ
LECmd - Analisador de Arquivos LNK
# Analisar todos os arquivos LNK na pasta Recent
LECmd.exe -d "C:\Evidence\Users\suspect\AppData\Roaming\Microsoft\Windows\Recent" --csv C:\Output --csvf lnk_analysis.csv
# Analisar um único arquivo LNK com detalhes completos
LECmd.exe -f "C:\Evidence\Users\suspect\Desktop\Confidential.docx.lnk" --json C:\Output
# Analisar arquivos LNK com níveis de detalhe adicionais
LECmd.exe -d "C:\Evidence\Users\suspect\AppData\Roaming\Microsoft\Windows\Recent" --csv C:\Output --csvf lnk_all.csv --all
JLECmd - Analisador de Jump Lists
# Analisar Jump Lists Automáticas
JLECmd.exe -d "C:\Evidence\Users\suspect\AppData\Roaming\Microsoft\Windows\Recent\AutomaticDestinations" --csv C:\Output --csvf jumplists_auto.csv
# Analisar Jump Lists Personalizadas
JLECmd.exe -d "C:\Evidence\Users\suspect\AppData\Roaming\Microsoft\Windows\Recent\CustomDestinations" --csv C:\Output --csvf jumplists_custom.csv
# Analisar todas as jump lists com saída detalhada
JLECmd.exe -d "C:\Evidence\Users\suspect\AppData\Roaming\Microsoft\Windows\Recent\AutomaticDestinations" --csv C:\Output --csvf jumplists_auto.csv --ld
Estrutura da Jump List
Destinos Automáticos (automaticDestinations-ms)
São arquivos OLE Compound (Armazenamento Estruturado) identificados pelo hash AppID no nome do arquivo:
| Hash AppID | Aplicação |
|---|---|
| 5f7b5f1e01b83767 | Windows Explorer Fixados/Frequentes |
| 1b4dd67f29cb1962 | Windows Explorer Recentes |
| 9b9cdc69c1c24e2b | Bloco de Notas |
| a7bd71699cd38d1c | Notepad++ |
| 12dc1ea8e34b5a6 | Microsoft Paint |
| 7e4dca80246863e3 | Painel de Controle |
| 1cf97c38a5881255 | Microsoft Edge |
| f01b4d95cf55d32a | Windows Explorer |
| 9d1f905ce5044aee | Microsoft Excel |
| a4a5324453625195 | Microsoft Word |
| d00655d2aa12ff6d | Microsoft PowerPoint |
| bc03160ee1a59fc1 | Outlook |
Destinos Personalizados (customDestinations-ms)
Criados quando os usuários fixam itens nas jump lists dos aplicativos. Esses arquivos contêm entradas LNK sequenciais.
Script de Análise em Python
import struct
import os
from datetime import datetime, timedelta
FILETIME_EPOCH = datetime(1601, 1, 1)
def filetime_to_datetime(filetime_bytes: bytes) -> datetime:
"""Converte Windows FILETIME (intervalos de 100 ns desde 1601) para datetime."""
ft = struct.unpack("<Q", filetime_bytes)[0]
if ft == 0:
return None
return FILETIME_EPOCH + timedelta(microseconds=ft // 10)
def parse_lnk_header(lnk_path: str) -> dict:
"""Analisa o cabeçalho Shell Link de um arquivo LNK."""
with open(lnk_path, "rb") as f:
header = f.read(76)
header_size = struct.unpack("<I", header[0:4])[0]
if header_size != 0x4C:
return {"error": "Cabeçalho LNK inválido"}
link_flags = struct.unpack("<I", header[0x14:0x18])[0]
file_attrs = struct.unpack("<I", header[0x18:0x1C])[0]
result = {
"header_size": header_size,
"link_flags": hex(link_flags),
"file_attributes": hex(file_attrs),
"creation_time": filetime_to_datetime(header[0x1C:0x24]),
"access_time": filetime_to_datetime(header[0x24:0x2C]),
"write_time": filetime_to_datetime(header[0x2C:0x34]),
"file_size": struct.unpack("<I", header[0x34:0x38])[0],
"has_target_id_list": bool(link_flags & 0x01),
"has_link_info": bool(link_flags & 0x02),
"has_name": bool(link_flags & 0x04),
"has_relative_path": bool(link_flags & 0x08),
"has_working_dir": bool(link_flags & 0x10),
"has_arguments": bool(link_flags & 0x20),
"has_icon_location": bool(link_flags & 0x40),
}
return result
Casos de Uso de Investigação
Evidência de Acesso a Arquivos
- Analise os arquivos LNK da pasta Recent para identificar documentos acessados
- Faça referência cruzada com carimbos de data/hora do MFT e entradas do USN Journal
- Observe que os arquivos LNK persistem mesmo após os arquivos de destino serem excluídos
Acesso a Mídia Removível
- Arquivos LNK referenciando letras de unidade E:, F:, G: indicam uso de mídia removível
- O número de série do volume no LNK identifica o dispositivo específico
- O endereço MAC no TrackerDataBlock identifica a máquina de origem
Atividade de Compartilhamento de Rede
- Arquivos LNK com caminhos UNC (\servidor\compartilhamento) indicam acesso a arquivos em rede
- O nome NetBIOS identifica o servidor remoto
- Os carimbos de data/hora estabelecem quando o acesso ocorreu
Diferenças Entre Windows 10 e Windows 11
Pesquisas recentes (IEEE 2025) mostram que o Windows 11 produz artefatos diferentes de LNK e Jump Lists:
- Menos arquivos LNK automáticos gerados para certos tipos de arquivo
- Comportamento modificado de Jump Lists para aplicativos modernos
- Aplicativos UWP/MSIX podem não gerar Jump Lists tradicionais
- O Acesso Rápido do Windows 11 substitui algumas funcionalidades de Recentes
Referências
- Formato de Arquivo Binário Shell Link: https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-shllink/
- Análise de LNK da Magnet Forensics: https://www.magnetforensics.com/blog/forensic-analysis-of-lnk-files/
- Análise Forense de Jump Lists 2025: https://www.cybertriage.com/blog/jump-list-forensics-2025/
- Eric Zimmerman's LECmd/JLECmd: https://ericzimmerman.github.io/
Exemplo de Saída
$ LECmd.exe -d "C:\Evidence\Users\jsmith\AppData\Roaming\Microsoft\Windows\Recent" --csv /analysis/lnk_output
LECmd v1.11.0 - Analisador de Arquivos LNK
============================================
Processando 47 arquivos LNK...
--- Arquivo LNK: Q4_Report.xlsx.lnk ---
Origem: C:\Evidence\Users\jsmith\Recent\Q4_Report.xlsx.lnk
Caminho Destino: C:\Users\jsmith\Downloads\Q4_Report.xlsm
Destino Criado: 2024-01-15 14:33:45 UTC
Destino Modificado: 2024-01-15 14:33:45 UTC
Destino Acessado: 2024-01-15 14:35:12 UTC
Tamanho do Arquivo: 251.904 bytes
Tipo de Unidade: Fixa (C:)
Serial do Volume: A4E7-3F21
ID da Máquina: DESKTOP-J5M1TH
Endereço MAC: 48:2A:E3:5C:9B:01
--- Arquivo LNK: update_client.exe.lnk ---
Origem: C:\Evidence\Users\jsmith\Recent\update_client.exe.lnk
Caminho Destino: C:\ProgramData\Updates\update_client.exe
Destino Criado: 2024-01-15 14:34:02 UTC
Destino Modificado: 2024-01-15 14:34:02 UTC
Destino Acessado: 2024-01-15 14:36:30 UTC
Tamanho do Arquivo: 1.258.496 bytes
Tipo de Unidade: Fixa (C:)
Serial do Volume: A4E7-3F21
ID da Máquina: DESKTOP-J5M1TH
Diretório de Trabalho: C:\ProgramData\Updates
Argumentos: --silent --no-update-check
Janela de execução: Oculto
======================================================================
$ JLECmd.exe -d "C:\Evidence\Users\jsmith\AppData\Roaming\Microsoft\Windows\Recent\AutomaticDestinations" --csv /analysis/jumplist_output
JLECmd v1.5.0 - Analisador de Jump Lists
==========================================
Processando 23 arquivos de AutomaticDestinations...
--- Aplicação: Microsoft Excel (AppID: 12dc1ea8e34b5a6) ---
Entradas: 15
Mais Recentes:
Entrada 0: C:\Users\jsmith\Downloads\Q4_Report.xlsm (2024-01-15 14:35:12 UTC)
Entrada 1: \\FILESERV01\Finance\Budget_2024.xlsx (2024-01-14 09:22:30 UTC)
Entrada 2: C:\Users\jsmith\Documents\Expenses\Dec2023.xlsx (2024-01-10 16:45:00 UTC)
--- Aplicação: Windows Explorer (AppID: f01b4d95cf55d32a) ---
Entradas: 28
Mais Recentes:
Entrada 0: C:\ProgramData\Updates\ (2024-01-15 14:36:25 UTC)
Entrada 1: E:\Backup\ (2024-01-15 15:30:00 UTC)
Entrada 2: \\FILESERV01\HR\Employees\ (2024-01-15 16:12:45 UTC)
--- Aplicação: cmd.exe (AppID: 9b9cdc69c1c24e2b) ---
Entradas: 5
Mais Recentes:
Entrada 0: C:\Windows\System32\cmd.exe (2024-01-15 14:36:00 UTC)
Resumo:
Total de arquivos LNK processados: 47
Total de entradas de Jump List: 156
Artefatos suspeitos: 3 (execução em janela oculta, acesso a unidade USB, compartilhamentos de rede)
CSV exportado para: /analysis/lnk_output/ e /analysis/jumplist_output/