mirror of
https://github.com/carlospolop/hacktricks
synced 2024-12-26 04:53:39 +00:00
805 lines
33 KiB
Markdown
805 lines
33 KiB
Markdown
# Volatility - CheatSheet
|
||
|
||
{% hint style="success" %}
|
||
Aprenda e pratique Hacking AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||
Aprenda e pratique Hacking GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||
|
||
<details>
|
||
|
||
<summary>Support HackTricks</summary>
|
||
|
||
* Confira os [**planos de assinatura**](https://github.com/sponsors/carlospolop)!
|
||
* **Junte-se ao** 💬 [**grupo do Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo do telegram**](https://t.me/peass) ou **siga**-nos no **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||
* **Compartilhe truques de hacking enviando PRs para os repositórios do** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||
|
||
</details>
|
||
{% endhint %}
|
||
|
||
|
||
|
||
<figure><img src="https://files.gitbook.com/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-L_2uGJGU7AVNRcqRvEi%2Fuploads%2FelPCTwoecVdnsfjxCZtN%2Fimage.png?alt=media&token=9ee4ff3e-92dc-471c-abfe-1c25e446a6ed" alt=""><figcaption></figcaption></figure>
|
||
|
||
[**RootedCON**](https://www.rootedcon.com/) é o evento de cibersegurança mais relevante na **Espanha** e um dos mais importantes na **Europa**. Com **a missão de promover o conhecimento técnico**, este congresso é um ponto de encontro fervilhante para profissionais de tecnologia e cibersegurança em todas as disciplinas.
|
||
|
||
{% embed url="https://www.rootedcon.com/" %}
|
||
|
||
Se você quer algo **rápido e louco** que lançará vários plugins do Volatility em paralelo, você pode usar: [https://github.com/carlospolop/autoVolatility](https://github.com/carlospolop/autoVolatility)
|
||
```bash
|
||
python autoVolatility.py -f MEMFILE -d OUT_DIRECTORY -e /home/user/tools/volatility/vol.py # It will use the most important plugins (could use a lot of space depending on the size of the memory)
|
||
```
|
||
## Instalação
|
||
|
||
### volatility3
|
||
```bash
|
||
git clone https://github.com/volatilityfoundation/volatility3.git
|
||
cd volatility3
|
||
python3 setup.py install
|
||
python3 vol.py —h
|
||
```
|
||
### volatility2
|
||
|
||
{% tabs %}
|
||
{% tab title="Método1" %}
|
||
```
|
||
Download the executable from https://www.volatilityfoundation.org/26
|
||
```
|
||
{% endtab %}
|
||
|
||
{% tab title="Método 2" %}
|
||
```bash
|
||
git clone https://github.com/volatilityfoundation/volatility.git
|
||
cd volatility
|
||
python setup.py install
|
||
```
|
||
{% endtab %}
|
||
{% endtabs %}
|
||
|
||
## Comandos do Volatility
|
||
|
||
Acesse a documentação oficial em [Referência de comandos do Volatility](https://github.com/volatilityfoundation/volatility/wiki/Command-Reference#kdbgscan)
|
||
|
||
### Uma nota sobre plugins “list” vs. “scan”
|
||
|
||
O Volatility tem duas abordagens principais para plugins, que às vezes são refletidas em seus nomes. Plugins “list” tentarão navegar pelas estruturas do Kernel do Windows para recuperar informações como processos (localizar e percorrer a lista encadeada de estruturas `_EPROCESS` na memória), handles do SO (localizando e listando a tabela de handles, desreferenciando quaisquer ponteiros encontrados, etc). Eles se comportam mais ou menos como a API do Windows se solicitada a, por exemplo, listar processos.
|
||
|
||
Isso torna os plugins “list” bastante rápidos, mas tão vulneráveis quanto a API do Windows à manipulação por malware. Por exemplo, se um malware usar DKOM para desvincular um processo da lista encadeada `_EPROCESS`, ele não aparecerá no Gerenciador de Tarefas e nem no pslist.
|
||
|
||
Os plugins “scan”, por outro lado, adotarão uma abordagem semelhante à escultura da memória para coisas que podem fazer sentido quando desreferenciadas como estruturas específicas. O `psscan`, por exemplo, lerá a memória e tentará criar objetos `_EPROCESS` a partir dela (usa a varredura de pool-tag, que busca por strings de 4 bytes que indicam a presença de uma estrutura de interesse). A vantagem é que pode encontrar processos que já saíram, e mesmo que o malware interfira na lista encadeada `_EPROCESS`, o plugin ainda encontrará a estrutura presente na memória (já que ainda precisa existir para o processo ser executado). A desvantagem é que os plugins “scan” são um pouco mais lentos que os plugins “list” e podem, às vezes, gerar falsos positivos (um processo que saiu há muito tempo e teve partes de sua estrutura sobrescritas por outras operações).
|
||
|
||
De: [http://tomchop.me/2016/11/21/tutorial-volatility-plugins-malware-analysis/](http://tomchop.me/2016/11/21/tutorial-volatility-plugins-malware-analysis/)
|
||
|
||
## Perfis do SO
|
||
|
||
### Volatility3
|
||
|
||
Como explicado no readme, você precisa colocar a **tabela de símbolos do SO** que deseja suportar dentro de _volatility3/volatility/symbols_.\
|
||
Pacotes de tabela de símbolos para os vários sistemas operacionais estão disponíveis para **download** em:
|
||
|
||
* [https://downloads.volatilityfoundation.org/volatility3/symbols/windows.zip](https://downloads.volatilityfoundation.org/volatility3/symbols/windows.zip)
|
||
* [https://downloads.volatilityfoundation.org/volatility3/symbols/mac.zip](https://downloads.volatilityfoundation.org/volatility3/symbols/mac.zip)
|
||
* [https://downloads.volatilityfoundation.org/volatility3/symbols/linux.zip](https://downloads.volatilityfoundation.org/volatility3/symbols/linux.zip)
|
||
|
||
### Volatility2
|
||
|
||
#### Perfil Externo
|
||
|
||
Você pode obter a lista de perfis suportados fazendo:
|
||
```bash
|
||
./volatility_2.6_lin64_standalone --info | grep "Profile"
|
||
```
|
||
Se você quiser usar um **novo perfil que você baixou** (por exemplo, um de linux), você precisa criar em algum lugar a seguinte estrutura de pastas: _plugins/overlays/linux_ e colocar dentro dessa pasta o arquivo zip contendo o perfil. Em seguida, obtenha o número dos perfis usando:
|
||
```bash
|
||
./vol --plugins=/home/kali/Desktop/ctfs/final/plugins --info
|
||
Volatility Foundation Volatility Framework 2.6
|
||
|
||
|
||
Profiles
|
||
--------
|
||
LinuxCentOS7_3_10_0-123_el7_x86_64_profilex64 - A Profile for Linux CentOS7_3.10.0-123.el7.x86_64_profile x64
|
||
VistaSP0x64 - A Profile for Windows Vista SP0 x64
|
||
VistaSP0x86 - A Profile for Windows Vista SP0 x86
|
||
```
|
||
Você pode **baixar perfis do Linux e Mac** de [https://github.com/volatilityfoundation/profiles](https://github.com/volatilityfoundation/profiles)
|
||
|
||
No trecho anterior, você pode ver que o perfil é chamado `LinuxCentOS7_3_10_0-123_el7_x86_64_profilex64`, e você pode usá-lo para executar algo como:
|
||
```bash
|
||
./vol -f file.dmp --plugins=. --profile=LinuxCentOS7_3_10_0-123_el7_x86_64_profilex64 linux_netscan
|
||
```
|
||
#### Descobrir Perfil
|
||
```
|
||
volatility imageinfo -f file.dmp
|
||
volatility kdbgscan -f file.dmp
|
||
```
|
||
#### **Diferenças entre imageinfo e kdbgscan**
|
||
|
||
[**Daqui**](https://www.andreafortuna.org/2017/06/25/volatility-my-own-cheatsheet-part-1-image-identification/): Ao contrário do imageinfo, que simplesmente fornece sugestões de perfil, **kdbgscan** é projetado para identificar positivamente o perfil correto e o endereço KDBG correto (se houver múltiplos). Este plugin escaneia as assinaturas KDBGHeader vinculadas aos perfis do Volatility e aplica verificações de sanidade para reduzir falsos positivos. A verbosidade da saída e o número de verificações de sanidade que podem ser realizadas dependem de o Volatility conseguir encontrar um DTB, então, se você já conhece o perfil correto (ou se você tem uma sugestão de perfil do imageinfo), então certifique-se de usá-lo.
|
||
|
||
Sempre dê uma olhada no **número de processos que o kdbgscan encontrou**. Às vezes, imageinfo e kdbgscan podem encontrar **mais de um** **perfil** adequado, mas apenas o **válido terá algum processo relacionado** (Isso ocorre porque para extrair processos o endereço KDBG correto é necessário).
|
||
```bash
|
||
# GOOD
|
||
PsActiveProcessHead : 0xfffff800011977f0 (37 processes)
|
||
PsLoadedModuleList : 0xfffff8000119aae0 (116 modules)
|
||
```
|
||
|
||
```bash
|
||
# BAD
|
||
PsActiveProcessHead : 0xfffff800011947f0 (0 processes)
|
||
PsLoadedModuleList : 0xfffff80001197ac0 (0 modules)
|
||
```
|
||
#### KDBG
|
||
|
||
O **bloco de depuração do kernel**, referido como **KDBG** pelo Volatility, é crucial para tarefas forenses realizadas pelo Volatility e vários depuradores. Identificado como `KdDebuggerDataBlock` e do tipo `_KDDEBUGGER_DATA64`, contém referências essenciais como `PsActiveProcessHead`. Esta referência específica aponta para o início da lista de processos, permitindo a listagem de todos os processos, o que é fundamental para uma análise completa da memória.
|
||
|
||
## Informações do SO
|
||
```bash
|
||
#vol3 has a plugin to give OS information (note that imageinfo from vol2 will give you OS info)
|
||
./vol.py -f file.dmp windows.info.Info
|
||
```
|
||
O plugin `banners.Banners` pode ser usado no **vol3 para tentar encontrar banners linux** no dump.
|
||
|
||
## Hashes/Senhas
|
||
|
||
Extraia hashes SAM, [credenciais em cache de domínio](../../../windows-hardening/stealing-credentials/credentials-protections.md#cached-credentials) e [segredos lsa](../../../windows-hardening/authentication-credentials-uac-and-efs/#lsa-secrets).
|
||
|
||
{% tabs %}
|
||
{% tab title="vol3" %}
|
||
```bash
|
||
./vol.py -f file.dmp windows.hashdump.Hashdump #Grab common windows hashes (SAM+SYSTEM)
|
||
./vol.py -f file.dmp windows.cachedump.Cachedump #Grab domain cache hashes inside the registry
|
||
./vol.py -f file.dmp windows.lsadump.Lsadump #Grab lsa secrets
|
||
```
|
||
{% endtab %}
|
||
|
||
{% tab title="vol2" %}
|
||
```bash
|
||
volatility --profile=Win7SP1x86_23418 hashdump -f file.dmp #Grab common windows hashes (SAM+SYSTEM)
|
||
volatility --profile=Win7SP1x86_23418 cachedump -f file.dmp #Grab domain cache hashes inside the registry
|
||
volatility --profile=Win7SP1x86_23418 lsadump -f file.dmp #Grab lsa secrets
|
||
```
|
||
{% endtab %}
|
||
{% endtabs %}
|
||
|
||
## Memory Dump
|
||
|
||
O memory dump de um processo irá **extrair tudo** do estado atual do processo. O módulo **procdump** irá apenas **extrair** o **código**.
|
||
```
|
||
volatility -f file.dmp --profile=Win7SP1x86 memdump -p 2168 -D conhost/
|
||
```
|
||
<figure><img src="https://files.gitbook.com/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-L_2uGJGU7AVNRcqRvEi%2Fuploads%2FelPCTwoecVdnsfjxCZtN%2Fimage.png?alt=media&token=9ee4ff3e-92dc-471c-abfe-1c25e446a6ed" alt=""><figcaption></figcaption></figure>
|
||
|
||
[**RootedCON**](https://www.rootedcon.com/) é o evento de cibersegurança mais relevante na **Espanha** e um dos mais importantes na **Europa**. Com **a missão de promover o conhecimento técnico**, este congresso é um ponto de encontro fervente para profissionais de tecnologia e cibersegurança em todas as disciplinas.
|
||
|
||
{% embed url="https://www.rootedcon.com/" %}
|
||
|
||
## Processos
|
||
|
||
### Listar processos
|
||
|
||
Tente encontrar processos **suspeitos** (pelo nome) ou **inesperados** processos filhos (por exemplo, um cmd.exe como filho de iexplorer.exe).\
|
||
Pode ser interessante **comparar** o resultado do pslist com o do psscan para identificar processos ocultos.
|
||
|
||
{% tabs %}
|
||
{% tab title="vol3" %}
|
||
```bash
|
||
python3 vol.py -f file.dmp windows.pstree.PsTree # Get processes tree (not hidden)
|
||
python3 vol.py -f file.dmp windows.pslist.PsList # Get process list (EPROCESS)
|
||
python3 vol.py -f file.dmp windows.psscan.PsScan # Get hidden process list(malware)
|
||
```
|
||
{% endtab %}
|
||
|
||
{% tab title="vol2" %}
|
||
```bash
|
||
volatility --profile=PROFILE pstree -f file.dmp # Get process tree (not hidden)
|
||
volatility --profile=PROFILE pslist -f file.dmp # Get process list (EPROCESS)
|
||
volatility --profile=PROFILE psscan -f file.dmp # Get hidden process list(malware)
|
||
volatility --profile=PROFILE psxview -f file.dmp # Get hidden process list
|
||
```
|
||
{% endtab %}
|
||
{% endtabs %}
|
||
|
||
### Dump proc
|
||
|
||
{% tabs %}
|
||
{% tab title="vol3" %}
|
||
```bash
|
||
./vol.py -f file.dmp windows.dumpfiles.DumpFiles --pid <pid> #Dump the .exe and dlls of the process in the current directory
|
||
```
|
||
{% endtab %}
|
||
|
||
{% tab title="vol2" %}
|
||
```bash
|
||
volatility --profile=Win7SP1x86_23418 procdump --pid=3152 -n --dump-dir=. -f file.dmp
|
||
```
|
||
{% endtab %}
|
||
{% endtabs %}
|
||
|
||
### Linha de comando
|
||
|
||
Algo suspeito foi executado?
|
||
|
||
{% tabs %}
|
||
{% tab title="vol3" %}
|
||
```bash
|
||
python3 vol.py -f file.dmp windows.cmdline.CmdLine #Display process command-line arguments
|
||
```
|
||
{% endtab %}
|
||
|
||
{% tab title="vol2" %}
|
||
```bash
|
||
volatility --profile=PROFILE cmdline -f file.dmp #Display process command-line arguments
|
||
volatility --profile=PROFILE consoles -f file.dmp #command history by scanning for _CONSOLE_INFORMATION
|
||
```
|
||
{% endtab %}
|
||
{% endtabs %}
|
||
|
||
Os comandos executados no `cmd.exe` são gerenciados pelo **`conhost.exe`** (ou `csrss.exe` em sistemas anteriores ao Windows 7). Isso significa que, se **`cmd.exe`** for encerrado por um atacante antes que um memory dump seja obtido, ainda é possível recuperar o histórico de comandos da sessão a partir da memória do **`conhost.exe`**. Para fazer isso, se uma atividade incomum for detectada dentro dos módulos do console, a memória do processo associado **`conhost.exe`** deve ser despejada. Em seguida, ao procurar por **strings** dentro desse dump, linhas de comando usadas na sessão podem potencialmente ser extraídas.
|
||
|
||
### Ambiente
|
||
|
||
Obtenha as variáveis de ambiente de cada processo em execução. Pode haver alguns valores interessantes.
|
||
|
||
{% tabs %}
|
||
{% tab title="vol3" %}
|
||
```bash
|
||
python3 vol.py -f file.dmp windows.envars.Envars [--pid <pid>] #Display process environment variables
|
||
```
|
||
{% endtab %}
|
||
|
||
{% tab title="vol2" %}
|
||
```bash
|
||
volatility --profile=PROFILE envars -f file.dmp [--pid <pid>] #Display process environment variables
|
||
|
||
volatility --profile=PROFILE -f file.dmp linux_psenv [-p <pid>] #Get env of process. runlevel var means the runlevel where the proc is initated
|
||
```
|
||
{% endtab %}
|
||
{% endtabs %}
|
||
|
||
### Privilégios de token
|
||
|
||
Verifique os tokens de privilégios em serviços inesperados.\
|
||
Pode ser interessante listar os processos que utilizam algum token privilegiado.
|
||
|
||
{% tabs %}
|
||
{% tab title="vol3" %}
|
||
```bash
|
||
#Get enabled privileges of some processes
|
||
python3 vol.py -f file.dmp windows.privileges.Privs [--pid <pid>]
|
||
#Get all processes with interesting privileges
|
||
python3 vol.py -f file.dmp windows.privileges.Privs | grep "SeImpersonatePrivilege\|SeAssignPrimaryPrivilege\|SeTcbPrivilege\|SeBackupPrivilege\|SeRestorePrivilege\|SeCreateTokenPrivilege\|SeLoadDriverPrivilege\|SeTakeOwnershipPrivilege\|SeDebugPrivilege"
|
||
```
|
||
{% endtab %}
|
||
|
||
{% tab title="vol2" %}
|
||
```bash
|
||
#Get enabled privileges of some processes
|
||
volatility --profile=Win7SP1x86_23418 privs --pid=3152 -f file.dmp | grep Enabled
|
||
#Get all processes with interesting privileges
|
||
volatility --profile=Win7SP1x86_23418 privs -f file.dmp | grep "SeImpersonatePrivilege\|SeAssignPrimaryPrivilege\|SeTcbPrivilege\|SeBackupPrivilege\|SeRestorePrivilege\|SeCreateTokenPrivilege\|SeLoadDriverPrivilege\|SeTakeOwnershipPrivilege\|SeDebugPrivilege"
|
||
```
|
||
{% endtab %}
|
||
{% endtabs %}
|
||
|
||
### SIDs
|
||
|
||
Verifique cada SSID pertencente a um processo.\
|
||
Pode ser interessante listar os processos que utilizam um SID de privilégios (e os processos que utilizam algum SID de serviço).
|
||
|
||
{% tabs %}
|
||
{% tab title="vol3" %}
|
||
```bash
|
||
./vol.py -f file.dmp windows.getsids.GetSIDs [--pid <pid>] #Get SIDs of processes
|
||
./vol.py -f file.dmp windows.getservicesids.GetServiceSIDs #Get the SID of services
|
||
```
|
||
{% endtab %}
|
||
|
||
{% tab title="vol2" %}
|
||
```bash
|
||
volatility --profile=Win7SP1x86_23418 getsids -f file.dmp #Get the SID owned by each process
|
||
volatility --profile=Win7SP1x86_23418 getservicesids -f file.dmp #Get the SID of each service
|
||
```
|
||
{% endtab %}
|
||
{% endtabs %}
|
||
|
||
### Handles
|
||
|
||
Útil saber a quais outros arquivos, chaves, threads, processos... um **processo tem um handle** (aberto)
|
||
|
||
{% tabs %}
|
||
{% tab title="vol3" %}
|
||
```bash
|
||
vol.py -f file.dmp windows.handles.Handles [--pid <pid>]
|
||
```
|
||
{% endtab %}
|
||
|
||
{% tab title="vol2" %}
|
||
```bash
|
||
volatility --profile=Win7SP1x86_23418 -f file.dmp handles [--pid=<pid>]
|
||
```
|
||
{% endtab %}
|
||
{% endtabs %}
|
||
|
||
### DLLs
|
||
|
||
{% tabs %}
|
||
{% tab title="vol3" %}
|
||
```bash
|
||
./vol.py -f file.dmp windows.dlllist.DllList [--pid <pid>] #List dlls used by each
|
||
./vol.py -f file.dmp windows.dumpfiles.DumpFiles --pid <pid> #Dump the .exe and dlls of the process in the current directory process
|
||
```
|
||
{% endtab %}
|
||
|
||
{% tab title="vol2" %}
|
||
```bash
|
||
volatility --profile=Win7SP1x86_23418 dlllist --pid=3152 -f file.dmp #Get dlls of a proc
|
||
volatility --profile=Win7SP1x86_23418 dlldump --pid=3152 --dump-dir=. -f file.dmp #Dump dlls of a proc
|
||
```
|
||
{% endtab %}
|
||
{% endtabs %}
|
||
|
||
### Strings por processos
|
||
|
||
Volatility nos permite verificar a qual processo uma string pertence.
|
||
|
||
{% tabs %}
|
||
{% tab title="vol3" %}
|
||
```bash
|
||
strings file.dmp > /tmp/strings.txt
|
||
./vol.py -f /tmp/file.dmp windows.strings.Strings --strings-file /tmp/strings.txt
|
||
```
|
||
{% endtab %}
|
||
|
||
{% tab title="vol2" %}
|
||
```bash
|
||
strings file.dmp > /tmp/strings.txt
|
||
volatility -f /tmp/file.dmp windows.strings.Strings --string-file /tmp/strings.txt
|
||
|
||
volatility -f /tmp/file.dmp --profile=Win81U1x64 memdump -p 3532 --dump-dir .
|
||
strings 3532.dmp > strings_file
|
||
```
|
||
{% endtab %}
|
||
{% endtabs %}
|
||
|
||
Ele também permite buscar por strings dentro de um processo usando o módulo yarascan:
|
||
|
||
{% tabs %}
|
||
{% tab title="vol3" %}
|
||
```bash
|
||
./vol.py -f file.dmp windows.vadyarascan.VadYaraScan --yara-rules "https://" --pid 3692 3840 3976 3312 3084 2784
|
||
./vol.py -f file.dmp yarascan.YaraScan --yara-rules "https://"
|
||
```
|
||
{% endtab %}
|
||
|
||
{% tab title="vol2" %}
|
||
```bash
|
||
volatility --profile=Win7SP1x86_23418 yarascan -Y "https://" -p 3692,3840,3976,3312,3084,2784
|
||
```
|
||
{% endtab %}
|
||
{% endtabs %}
|
||
|
||
### UserAssist
|
||
|
||
**Windows** mantém um registro dos programas que você executa usando um recurso no registro chamado **UserAssist keys**. Essas chaves registram quantas vezes cada programa é executado e quando foi executado pela última vez.
|
||
|
||
{% tabs %}
|
||
{% tab title="vol3" %}
|
||
```bash
|
||
./vol.py -f file.dmp windows.registry.userassist.UserAssist
|
||
```
|
||
{% endtab %}
|
||
|
||
{% tab title="vol2" %}
|
||
```
|
||
volatility --profile=Win7SP1x86_23418 -f file.dmp userassist
|
||
```
|
||
{% endtab %}
|
||
{% endtabs %}
|
||
|
||
|
||
|
||
<figure><img src="https://files.gitbook.com/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-L_2uGJGU7AVNRcqRvEi%2Fuploads%2FelPCTwoecVdnsfjxCZtN%2Fimage.png?alt=media&token=9ee4ff3e-92dc-471c-abfe-1c25e446a6ed" alt=""><figcaption></figcaption></figure>
|
||
|
||
[**RootedCON**](https://www.rootedcon.com/) é o evento de cibersegurança mais relevante na **Espanha** e um dos mais importantes na **Europa**. Com **a missão de promover o conhecimento técnico**, este congresso é um ponto de encontro fervente para profissionais de tecnologia e cibersegurança em todas as disciplinas.
|
||
|
||
{% embed url="https://www.rootedcon.com/" %}
|
||
|
||
## Serviços
|
||
|
||
{% tabs %}
|
||
{% tab title="vol3" %}
|
||
```bash
|
||
./vol.py -f file.dmp windows.svcscan.SvcScan #List services
|
||
./vol.py -f file.dmp windows.getservicesids.GetServiceSIDs #Get the SID of services
|
||
```
|
||
{% endtab %}
|
||
|
||
{% tab title="vol2" %}
|
||
```bash
|
||
#Get services and binary path
|
||
volatility --profile=Win7SP1x86_23418 svcscan -f file.dmp
|
||
#Get name of the services and SID (slow)
|
||
volatility --profile=Win7SP1x86_23418 getservicesids -f file.dmp
|
||
```
|
||
{% endtab %}
|
||
{% endtabs %}
|
||
|
||
## Rede
|
||
|
||
{% tabs %}
|
||
{% tab title="vol3" %}
|
||
```bash
|
||
./vol.py -f file.dmp windows.netscan.NetScan
|
||
#For network info of linux use volatility2
|
||
```
|
||
{% endtab %}
|
||
|
||
{% tab title="vol2" %}
|
||
```bash
|
||
volatility --profile=Win7SP1x86_23418 netscan -f file.dmp
|
||
volatility --profile=Win7SP1x86_23418 connections -f file.dmp#XP and 2003 only
|
||
volatility --profile=Win7SP1x86_23418 connscan -f file.dmp#TCP connections
|
||
volatility --profile=Win7SP1x86_23418 sockscan -f file.dmp#Open sockets
|
||
volatility --profile=Win7SP1x86_23418 sockets -f file.dmp#Scanner for tcp socket objects
|
||
|
||
volatility --profile=SomeLinux -f file.dmp linux_ifconfig
|
||
volatility --profile=SomeLinux -f file.dmp linux_netstat
|
||
volatility --profile=SomeLinux -f file.dmp linux_netfilter
|
||
volatility --profile=SomeLinux -f file.dmp linux_arp #ARP table
|
||
volatility --profile=SomeLinux -f file.dmp linux_list_raw #Processes using promiscuous raw sockets (comm between processes)
|
||
volatility --profile=SomeLinux -f file.dmp linux_route_cache
|
||
```
|
||
{% endtab %}
|
||
{% endtabs %}
|
||
|
||
## Registro hive
|
||
|
||
### Imprimir hives disponíveis
|
||
|
||
{% tabs %}
|
||
{% tab title="vol3" %}
|
||
```bash
|
||
./vol.py -f file.dmp windows.registry.hivelist.HiveList #List roots
|
||
./vol.py -f file.dmp windows.registry.printkey.PrintKey #List roots and get initial subkeys
|
||
```
|
||
{% endtab %}
|
||
|
||
{% tab title="vol2" %}
|
||
```bash
|
||
volatility --profile=Win7SP1x86_23418 -f file.dmp hivelist #List roots
|
||
volatility --profile=Win7SP1x86_23418 -f file.dmp printkey #List roots and get initial subkeys
|
||
```
|
||
{% endtab %}
|
||
{% endtabs %}
|
||
|
||
### Obter um valor
|
||
|
||
{% tabs %}
|
||
{% tab title="vol3" %}
|
||
```bash
|
||
./vol.py -f file.dmp windows.registry.printkey.PrintKey --key "Software\Microsoft\Windows NT\CurrentVersion"
|
||
```
|
||
{% endtab %}
|
||
|
||
{% tab title="vol2" %}
|
||
```bash
|
||
volatility --profile=Win7SP1x86_23418 printkey -K "Software\Microsoft\Windows NT\CurrentVersion" -f file.dmp
|
||
# Get Run binaries registry value
|
||
volatility -f file.dmp --profile=Win7SP1x86 printkey -o 0x9670e9d0 -K 'Software\Microsoft\Windows\CurrentVersion\Run'
|
||
```
|
||
{% endtab %}
|
||
{% endtabs %}
|
||
|
||
### Dump
|
||
```bash
|
||
#Dump a hive
|
||
volatility --profile=Win7SP1x86_23418 hivedump -o 0x9aad6148 -f file.dmp #Offset extracted by hivelist
|
||
#Dump all hives
|
||
volatility --profile=Win7SP1x86_23418 hivedump -f file.dmp
|
||
```
|
||
## Sistema de Arquivos
|
||
|
||
### Montar
|
||
|
||
{% tabs %}
|
||
{% tab title="vol3" %}
|
||
```bash
|
||
#See vol2
|
||
```
|
||
{% endtab %}
|
||
|
||
{% tab title="vol2" %}
|
||
```bash
|
||
volatility --profile=SomeLinux -f file.dmp linux_mount
|
||
volatility --profile=SomeLinux -f file.dmp linux_recover_filesystem #Dump the entire filesystem (if possible)
|
||
```
|
||
{% endtab %}
|
||
{% endtabs %}
|
||
|
||
### Escanear/dump
|
||
|
||
{% tabs %}
|
||
{% tab title="vol3" %}
|
||
```bash
|
||
./vol.py -f file.dmp windows.filescan.FileScan #Scan for files inside the dump
|
||
./vol.py -f file.dmp windows.dumpfiles.DumpFiles --physaddr <0xAAAAA> #Offset from previous command
|
||
```
|
||
{% endtab %}
|
||
|
||
{% tab title="vol2" %}
|
||
```bash
|
||
volatility --profile=Win7SP1x86_23418 filescan -f file.dmp #Scan for files inside the dump
|
||
volatility --profile=Win7SP1x86_23418 dumpfiles -n --dump-dir=/tmp -f file.dmp #Dump all files
|
||
volatility --profile=Win7SP1x86_23418 dumpfiles -n --dump-dir=/tmp -Q 0x000000007dcaa620 -f file.dmp
|
||
|
||
volatility --profile=SomeLinux -f file.dmp linux_enumerate_files
|
||
volatility --profile=SomeLinux -f file.dmp linux_find_file -F /path/to/file
|
||
volatility --profile=SomeLinux -f file.dmp linux_find_file -i 0xINODENUMBER -O /path/to/dump/file
|
||
```
|
||
{% endtab %}
|
||
{% endtabs %}
|
||
|
||
### Tabela de Arquivos Mestre
|
||
|
||
{% tabs %}
|
||
{% tab title="vol3" %}
|
||
```bash
|
||
# I couldn't find any plugin to extract this information in volatility3
|
||
```
|
||
{% endtab %}
|
||
|
||
{% tab title="vol2" %}
|
||
```bash
|
||
volatility --profile=Win7SP1x86_23418 mftparser -f file.dmp
|
||
```
|
||
{% endtab %}
|
||
{% endtabs %}
|
||
|
||
O **sistema de arquivos NTFS** usa um componente crítico conhecido como _tabela de arquivos mestre_ (MFT). Esta tabela inclui pelo menos uma entrada para cada arquivo em um volume, cobrindo a própria MFT também. Detalhes vitais sobre cada arquivo, como **tamanho, carimbos de data/hora, permissões e dados reais**, estão encapsulados dentro das entradas da MFT ou em áreas externas à MFT, mas referenciadas por essas entradas. Mais detalhes podem ser encontrados na [documentação oficial](https://docs.microsoft.com/en-us/windows/win32/fileio/master-file-table).
|
||
|
||
### Chaves/Certificados SSL
|
||
|
||
{% tabs %}
|
||
{% tab title="vol3" %}
|
||
```bash
|
||
#vol3 allows to search for certificates inside the registry
|
||
./vol.py -f file.dmp windows.registry.certificates.Certificates
|
||
```
|
||
{% endtab %}
|
||
|
||
{% tab title="vol2" %}
|
||
```bash
|
||
#vol2 allos you to search and dump certificates from memory
|
||
#Interesting options for this modules are: --pid, --name, --ssl
|
||
volatility --profile=Win7SP1x86_23418 dumpcerts --dump-dir=. -f file.dmp
|
||
```
|
||
{% endtab %}
|
||
{% endtabs %}
|
||
|
||
## Malware
|
||
|
||
{% tabs %}
|
||
{% tab title="vol3" %}
|
||
```bash
|
||
./vol.py -f file.dmp windows.malfind.Malfind [--dump] #Find hidden and injected code, [dump each suspicious section]
|
||
#Malfind will search for suspicious structures related to malware
|
||
./vol.py -f file.dmp windows.driverirp.DriverIrp #Driver IRP hook detection
|
||
./vol.py -f file.dmp windows.ssdt.SSDT #Check system call address from unexpected addresses
|
||
|
||
./vol.py -f file.dmp linux.check_afinfo.Check_afinfo #Verifies the operation function pointers of network protocols
|
||
./vol.py -f file.dmp linux.check_creds.Check_creds #Checks if any processes are sharing credential structures
|
||
./vol.py -f file.dmp linux.check_idt.Check_idt #Checks if the IDT has been altered
|
||
./vol.py -f file.dmp linux.check_syscall.Check_syscall #Check system call table for hooks
|
||
./vol.py -f file.dmp linux.check_modules.Check_modules #Compares module list to sysfs info, if available
|
||
./vol.py -f file.dmp linux.tty_check.tty_check #Checks tty devices for hooks
|
||
```
|
||
{% endtab %}
|
||
|
||
{% tab title="vol2" %}
|
||
```bash
|
||
volatility --profile=Win7SP1x86_23418 -f file.dmp malfind [-D /tmp] #Find hidden and injected code [dump each suspicious section]
|
||
volatility --profile=Win7SP1x86_23418 -f file.dmp apihooks #Detect API hooks in process and kernel memory
|
||
volatility --profile=Win7SP1x86_23418 -f file.dmp driverirp #Driver IRP hook detection
|
||
volatility --profile=Win7SP1x86_23418 -f file.dmp ssdt #Check system call address from unexpected addresses
|
||
|
||
volatility --profile=SomeLinux -f file.dmp linux_check_afinfo
|
||
volatility --profile=SomeLinux -f file.dmp linux_check_creds
|
||
volatility --profile=SomeLinux -f file.dmp linux_check_fop
|
||
volatility --profile=SomeLinux -f file.dmp linux_check_idt
|
||
volatility --profile=SomeLinux -f file.dmp linux_check_syscall
|
||
volatility --profile=SomeLinux -f file.dmp linux_check_modules
|
||
volatility --profile=SomeLinux -f file.dmp linux_check_tty
|
||
volatility --profile=SomeLinux -f file.dmp linux_keyboard_notifiers #Keyloggers
|
||
```
|
||
{% endtab %}
|
||
{% endtabs %}
|
||
|
||
### Escaneando com yara
|
||
|
||
Use este script para baixar e mesclar todas as regras de malware yara do github: [https://gist.github.com/andreafortuna/29c6ea48adf3d45a979a78763cdc7ce9](https://gist.github.com/andreafortuna/29c6ea48adf3d45a979a78763cdc7ce9)\
|
||
Crie o diretório _**rules**_ e execute-o. Isso criará um arquivo chamado _**malware\_rules.yar**_ que contém todas as regras yara para malware.
|
||
|
||
{% tabs %}
|
||
{% tab title="vol3" %}
|
||
```bash
|
||
wget https://gist.githubusercontent.com/andreafortuna/29c6ea48adf3d45a979a78763cdc7ce9/raw/4ec711d37f1b428b63bed1f786b26a0654aa2f31/malware_yara_rules.py
|
||
mkdir rules
|
||
python malware_yara_rules.py
|
||
#Only Windows
|
||
./vol.py -f file.dmp windows.vadyarascan.VadYaraScan --yara-file /tmp/malware_rules.yar
|
||
#All
|
||
./vol.py -f file.dmp yarascan.YaraScan --yara-file /tmp/malware_rules.yar
|
||
```
|
||
{% endtab %}
|
||
|
||
{% tab title="vol2" %}
|
||
```bash
|
||
wget https://gist.githubusercontent.com/andreafortuna/29c6ea48adf3d45a979a78763cdc7ce9/raw/4ec711d37f1b428b63bed1f786b26a0654aa2f31/malware_yara_rules.py
|
||
mkdir rules
|
||
python malware_yara_rules.py
|
||
volatility --profile=Win7SP1x86_23418 yarascan -y malware_rules.yar -f ch2.dmp | grep "Rule:" | grep -v "Str_Win32" | sort | uniq
|
||
```
|
||
{% endtab %}
|
||
{% endtabs %}
|
||
|
||
## MISC
|
||
|
||
### Plugins externos
|
||
|
||
Se você quiser usar plugins externos, certifique-se de que as pastas relacionadas aos plugins sejam o primeiro parâmetro utilizado.
|
||
|
||
{% tabs %}
|
||
{% tab title="vol3" %}
|
||
```bash
|
||
./vol.py --plugin-dirs "/tmp/plugins/" [...]
|
||
```
|
||
{% endtab %}
|
||
|
||
{% tab title="vol2" %}
|
||
```bash
|
||
volatilitye --plugins="/tmp/plugins/" [...]
|
||
```
|
||
{% endtab %}
|
||
{% endtabs %}
|
||
|
||
#### Autoruns
|
||
|
||
Baixe-o de [https://github.com/tomchop/volatility-autoruns](https://github.com/tomchop/volatility-autoruns)
|
||
```
|
||
volatility --plugins=volatility-autoruns/ --profile=WinXPSP2x86 -f file.dmp autoruns
|
||
```
|
||
### Mutexes
|
||
|
||
{% tabs %}
|
||
{% tab title="vol3" %}
|
||
```
|
||
./vol.py -f file.dmp windows.mutantscan.MutantScan
|
||
```
|
||
{% endtab %}
|
||
|
||
{% tab title="vol2" %}
|
||
```bash
|
||
volatility --profile=Win7SP1x86_23418 mutantscan -f file.dmp
|
||
volatility --profile=Win7SP1x86_23418 -f file.dmp handles -p <PID> -t mutant
|
||
```
|
||
{% endtab %}
|
||
{% endtabs %}
|
||
|
||
### Symlinks
|
||
|
||
{% tabs %}
|
||
{% tab title="vol3" %}
|
||
```bash
|
||
./vol.py -f file.dmp windows.symlinkscan.SymlinkScan
|
||
```
|
||
{% endtab %}
|
||
|
||
{% tab title="vol2" %}
|
||
```bash
|
||
volatility --profile=Win7SP1x86_23418 -f file.dmp symlinkscan
|
||
```
|
||
{% endtab %}
|
||
{% endtabs %}
|
||
|
||
### Bash
|
||
|
||
É possível **ler a partir da memória o histórico do bash.** Você também poderia despejar o arquivo _.bash\_history_, mas ele foi desativado, você ficará feliz em saber que pode usar este módulo de volatilidade.
|
||
|
||
{% tabs %}
|
||
{% tab title="vol3" %}
|
||
```
|
||
./vol.py -f file.dmp linux.bash.Bash
|
||
```
|
||
{% endtab %}
|
||
|
||
{% tab title="vol2" %}
|
||
```
|
||
volatility --profile=Win7SP1x86_23418 -f file.dmp linux_bash
|
||
```
|
||
{% endtab %}
|
||
{% endtabs %}
|
||
|
||
### Linha do Tempo
|
||
|
||
{% tabs %}
|
||
{% tab title="vol3" %}
|
||
```bash
|
||
./vol.py -f file.dmp timeLiner.TimeLiner
|
||
```
|
||
{% endtab %}
|
||
|
||
{% tab title="vol2" %}
|
||
```
|
||
volatility --profile=Win7SP1x86_23418 -f timeliner
|
||
```
|
||
{% endtab %}
|
||
{% endtabs %}
|
||
|
||
### Drivers
|
||
|
||
{% tabs %}
|
||
{% tab title="vol3" %}
|
||
```
|
||
./vol.py -f file.dmp windows.driverscan.DriverScan
|
||
```
|
||
{% endtab %}
|
||
|
||
{% tab title="vol2" %}
|
||
```bash
|
||
volatility --profile=Win7SP1x86_23418 -f file.dmp driverscan
|
||
```
|
||
{% endtab %}
|
||
{% endtabs %}
|
||
|
||
### Obter área de transferência
|
||
```bash
|
||
#Just vol2
|
||
volatility --profile=Win7SP1x86_23418 clipboard -f file.dmp
|
||
```
|
||
### Obter histórico do IE
|
||
```bash
|
||
#Just vol2
|
||
volatility --profile=Win7SP1x86_23418 iehistory -f file.dmp
|
||
```
|
||
### Obter texto do notepad
|
||
```bash
|
||
#Just vol2
|
||
volatility --profile=Win7SP1x86_23418 notepad -f file.dmp
|
||
```
|
||
### Captura de tela
|
||
```bash
|
||
#Just vol2
|
||
volatility --profile=Win7SP1x86_23418 screenshot -f file.dmp
|
||
```
|
||
### Master Boot Record (MBR)
|
||
```bash
|
||
volatility --profile=Win7SP1x86_23418 mbrparser -f file.dmp
|
||
```
|
||
O **Master Boot Record (MBR)** desempenha um papel crucial na gestão das partições lógicas de um meio de armazenamento, que são estruturadas com diferentes [sistemas de arquivos](https://en.wikipedia.org/wiki/File\_system). Ele não apenas contém informações sobre o layout das partições, mas também possui código executável que atua como um carregador de inicialização. Este carregador de inicialização inicia diretamente o processo de carregamento de segunda fase do SO (veja [carregador de inicialização de segunda fase](https://en.wikipedia.org/wiki/Second-stage\_boot\_loader)) ou trabalha em harmonia com o [registro de inicialização do volume](https://en.wikipedia.org/wiki/Volume\_boot\_record) (VBR) de cada partição. Para um conhecimento mais aprofundado, consulte a [página do MBR na Wikipedia](https://en.wikipedia.org/wiki/Master\_boot\_record).
|
||
|
||
## Referências
|
||
|
||
* [https://andreafortuna.org/2017/06/25/volatility-my-own-cheatsheet-part-1-image-identification/](https://andreafortuna.org/2017/06/25/volatility-my-own-cheatsheet-part-1-image-identification/)
|
||
* [https://scudette.blogspot.com/2012/11/finding-kernel-debugger-block.html](https://scudette.blogspot.com/2012/11/finding-kernel-debugger-block.html)
|
||
* [https://or10nlabs.tech/cgi-sys/suspendedpage.cgi](https://or10nlabs.tech/cgi-sys/suspendedpage.cgi)
|
||
* [https://www.aldeid.com/wiki/Windows-userassist-keys](https://www.aldeid.com/wiki/Windows-userassist-keys) \* [https://learn.microsoft.com/en-us/windows/win32/fileio/master-file-table](https://learn.microsoft.com/en-us/windows/win32/fileio/master-file-table)
|
||
* [https://answers.microsoft.com/en-us/windows/forum/all/uefi-based-pc-protective-mbr-what-is-it/0fc7b558-d8d4-4a7d-bae2-395455bb19aa](https://answers.microsoft.com/en-us/windows/forum/all/uefi-based-pc-protective-mbr-what-is-it/0fc7b558-d8d4-4a7d-bae2-395455bb19aa)
|
||
|
||
<figure><img src="https://files.gitbook.com/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-L_2uGJGU7AVNRcqRvEi%2Fuploads%2FelPCTwoecVdnsfjxCZtN%2Fimage.png?alt=media&token=9ee4ff3e-92dc-471c-abfe-1c25e446a6ed" alt=""><figcaption></figcaption></figure>
|
||
|
||
[**RootedCON**](https://www.rootedcon.com/) é o evento de cibersegurança mais relevante na **Espanha** e um dos mais importantes na **Europa**. Com **a missão de promover o conhecimento técnico**, este congresso é um ponto de encontro fervilhante para profissionais de tecnologia e cibersegurança em todas as disciplinas.
|
||
|
||
{% embed url="https://www.rootedcon.com/" %}
|
||
|
||
{% hint style="success" %}
|
||
Aprenda e pratique Hacking AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||
Aprenda e pratique Hacking GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||
|
||
<details>
|
||
|
||
<summary>Support HackTricks</summary>
|
||
|
||
* Confira os [**planos de assinatura**](https://github.com/sponsors/carlospolop)!
|
||
* **Junte-se ao** 💬 [**grupo do Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo do telegram**](https://t.me/peass) ou **siga**-nos no **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||
* **Compartilhe truques de hacking enviando PRs para os repositórios do** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||
|
||
</details>
|
||
{% endhint %}
|