Skip to content
KitploitKITPLOIT
FerramentasBlog
Enviar
FerramentasBlog
Enviar

Ferramentas de Hacking, PenTest e Cibersegurança para o seu Arsenal de Segurança!

Kitploit é um diretório de ferramentas de hacking, cibersegurança e pentesting. Descubra as últimas atualizações de projetos para encontrar vulnerabilidades, analisar sistemas, automatizar testes e fortalecer sua segurança.

··Feeds·Contato·Privacidade·© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
Ferramentas/GitHubGitHub/velocidex/linpmem
Forensia de MemóriaAnálise ForenseForensia DigitalResposta a Incidentes
GitHubvelocidex/linpmem

Linpmem

Driver de kernel Linux para aquisição de memória física, permitindo acesso de leitura a qualquer endereço físico, incluindo memória reservada e buracos de memória, com informações de CR3 e serviços de tradução de virtual para físico.

Ver Repositório
105122há 1 anoRevisado pelo Kitploit

Mais Populares

Ver todos →

Descubra as ferramentas mais usadas pela nossa comunidade.

Explore todas as ferramentas

Navegue pela nossa coleção de ferramentas

Ver todas as ferramentas →
Compartilhar

Linpmem -- uma ferramenta de aquisição de memória física para Linux

alt text

Linpmem é uma ferramenta Linux x64 para leitura de memória física.

Assim como sua contraparte Windows, Winpmem, este não é um despejador de memória tradicional. O Linpmem oferece uma API para leitura de qualquer endereço físico, incluindo memória reservada e buracos de memória, mas também pode ser usado para despejo de memória normal. Além disso, o driver oferece uma variedade de modos de acesso para ler memória física, como byte, word, dword, qword e modo de acesso buffer, onde o modo de acesso buffer é apropriado na maioria dos casos padrão. Se a leitura exigir uma leitura alinhada de byte/word/dword/qword, o Linpmem fará exatamente isso.

Atualmente, os recursos do Linpmem incluem:

  1. Leitura a partir de endereço físico (modo de acesso byte, word, dword, qword ou buffer)
  2. Serviço de informação CR3 (especificar processo alvo por pid)
  3. Serviço de tradução de endereço virtual para físico

O Controle de Cache será adicionado no futuro para suporte aos modos de acesso de leitura especializados.

Tabela de resumo

  • Compilando o Driver do Kernel
  • Carregando o Driver
  • Uso
    • Código de Exemplo
    • Ferramenta CLI
    • Biblioteca
    • Ferramenta de despejo de memória
  • Biblioteca
  • Distribuições Linux Testadas
  • Lidando com Secure Boot
  • Problemas Conhecidos
  • Em Andamento
  • Trabalho Futuro
  • Agradecimentos

Compilando o driver do kernel

Pelo menos por agora, você deve compilar o driver Linpmem você mesmo. Um método para carregar um driver Linpmem pré-compilado em outros sistemas Linux está atualmente em andamento, mas ainda não está finalizado. Dito isso, compilar o driver Linpmem não é difícil, basicamente é executar 'make'.

Passo 1 - obtendo os cabeçalhos corretos

Você precisa do make e de um compilador C. (Recomendamos gcc, mas clang também deve funcionar).

Certifique-se de ter os linux-headers instalados (usando qualquer gerenciador de pacotes que sua distribuição Linux alvo tenha). O nome exato do pacote pode variar conforme sua distribuição. Uma maneira rápida (independente de distribuição) de verificar se você tem o pacote instalado:

root@kitploit:~
ls -l /usr/lib/modules/`uname -r`/

É isso, você pode prosseguir para o passo 2.

Sistema estrangeiro: Atualmente, se você quiser compilar o driver para outro sistema, por exemplo, porque você quer criar um despejo de memória mas não pode compilar no alvo, você precisa baixar o pacote de cabeçalhos diretamente dos repositórios de pacotes da distribuição Linux daquele sistema. Verifique se a versão do pacote corresponde exatamente à versão do release e do kernel em execução no sistema estrangeiro. Caso o outro sistema esteja usando um kernel compilado por você, você deve obter uma cópia do diretório de build daquele kernel. Em seguida, coloque a localização de qualquer um dos diretórios na variável de ambiente KDIR.

root@kitploit:~
export KDIR=caminho/para/pacote/de/cabeçalhos/extraído/ou/raiz/do/kernel

Passo 2 - make

Compilar o driver é simples, basta digitar:

root@kitploit:~
make

Isso deve produzir linpmem.ko no diretório de trabalho atual.

Você pode querer verificar precompiler.h antes e escolher se compilará para release ou debug (por exemplo, com impressão de debug). Não há muitas outras configurações de pré-compilador agora.

Carregando o Driver

O módulo linpmem.ko pode ser carregado usando insmod caminho-para-linpmem.ko, e descarregado com rmmod caminho-para-linpmem.ko. (Isso carregará o driver apenas para este tempo de atividade.) Se você compilou para debug, dê uma olhada também no dmesg.

Após carregar, para se comunicar com o driver, você precisa criar o dispositivo:

root@kitploit:~
mknod /dev/linpmem c 42 0

Se você não conseguir se comunicar com o driver, verifique potencialmente no log dmesg para confirmar que '42' foi de fato o major registrado:

root@kitploit:~
[12827.900168] linpmem: registered chrdev with major 42

Embora normalmente o kernel tente realmente atribuir esse número.

Você pode usar chown no dispositivo para dá-lo ao seu usuário, se não quiser ter um console root aberto o tempo todo. (Ou apenas continue usando-o em um console root.)

  • Observe a saída do dmesg. Por favor, reporte erros se vir algum!
  • Aviso: se houver uma mensagem de erro no dmesg do Linpmem pedindo para reiniciar, melhor fazê-lo imediatamente.
  • Aviso: esta é uma versão inicial.

Uso

Código de Exemplo

Há um código de exemplo demonstrando e explicando (em detalhes) como interagir com o driver. A referência da API do espaço do usuário também pode ser encontrada em ./userspace_interface/linpmem_shared.h.

  1. cd demo
  2. gcc -o test test.c
  3. (sudo) ./test // <= você precisa de sudo se não usou chown no dispositivo.

Este código é importante se você quiser entender como interagir diretamente com o driver em vez de usar uma biblioteca. Também pode ser usado como um teste de função curto.

Ferramenta de Interface de Linha de Comando

Existe uma ferramenta de interface de linha de comando (opcional) básica para o Linpmem, a ferramenta CLI pmem. Ela pode ser encontrada aqui: https://github.com/vobst/linpmem-cli. Além do código fonte, há também uma ferramenta CLI pré-compilada, bem como a biblioteca estática pré-compilada e cabeçalhos que podem ser encontrados aqui (assinados). Nota: esta é uma versão preliminar, certifique-se de verificar atualizações, pois muitas adições e melhorias virão em breve.

A ferramenta CLI pmem pode ser usada para testar as várias funções do Linpmem de uma maneira (relativamente) segura e conveniente. O Linpmem também pode ser carregado por esta ferramenta em vez de usar insmod/rmmod, com algumas opções extras no futuro. Isso também tem a vantagem de que pmem cria automaticamente o dispositivo certo para você para uso imediato. É extremamente portátil e roda em qualquer sistema Linux (e, de fato, foi testado até mesmo em um Linux 2.6).

root@kitploit:~
$ ./pmem -h
Cliente de linha de comando para o driver linpmem

Uso: pmem [OPÇÕES] [COMANDO]

Comandos:
  insmod  Carregar o driver linpmem
  help    Imprimir esta mensagem ou a ajuda do subcomando dado

Opções:
  -a, --address <ENDEREÇO>            Endereço para operações de leitura física
  -v, --virt-address <VIRT_ENDERECO>  Traduzir endereço no espaço de endereço do processo alvo (padrão: processo atual)
  -s, --size <TAMANHO>                Tamanho das operações de leitura de buffer
  -m, --mode <MODO>                   Modo de acesso para operações de leitura [valores possíveis: byte, word, dword, qword, buffer]
  -p, --pid <PID>                     Processo alvo para informações cr3 e traduções virtual-para-físico
      --cr3                           Consultar valor cr3 do processo alvo (padrão: processo atual)
      --verbose                       Exibir saída de debug
  -h, --help                          Imprimir ajuda (veja mais com '--help')
  -V, --version                       Imprimir versão

Se você quiser compilar a ferramenta cli você mesmo, mude para seu diretório e siga as instruções no Readme (cli) para compilá-la. Caso contrário, basta baixar o programa pré-construído, ele deve funcionar em qualquer Linux. Para carregar o driver do kernel com a ferramenta cli:

root@kitploit:~
# pmem insmod caminho/para/linpmem.ko

A vantagem de usar a ferramenta pmem para carregar o driver é que você não precisa criar o arquivo de dispositivo você mesmo, e ela oferecerá (nas próximas versões) a opção de escolher quem possui o dispositivo linpmem.

Bibliotecas

A interface de linha de comando pmem é apenas um invólucro fino em torno de uma pequena biblioteca Rust que expõe uma API para interfacear com o driver. Usuários mais avançados também podem usar esta biblioteca. A biblioteca é automaticamente compilada (como biblioteca estática portátil) junto com a ferramenta cli pmem ao compilar a partir de https://github.com/vobst/linpmem-cli, mas também incluída (pré-compilada) aqui (assinada). Nota: esta é uma versão preliminar, mais em breve.

Se você não quiser usar a biblioteca de modo de usuário e preferir interfacear com o driver diretamente por conta própria, você pode encontrar sua API/interface de espaço do usuário e documentação em ./userspace_interface/linpmem_shared.h. Também fornecemos código de exemplo em demo/test.c que explica como usar o driver diretamente.

Wrapper Python

LinPyMem: Um wrapper Python para o driver linpmem. Disponível no PyPI.

Ferramenta de despejo de memória

Ainda não implementada.

Distribuições Linux Testadas

  • Debian, 6.4.X auto-compilado, Qemu/KVM, não paravirtualizado.
    • PTI: desligado/ligado
  • Debian 12, Qemu/KVM, totalmente paravirtualizado.
    • PTI: ligado
  • Ubuntu server, Qemu/KVM, não paravirtualizado.
    • PTI: ligado
  • Fedora 38, Qemu/KVM, totalmente paravirtualizado.
    • PTI: ligado
  • Teste Linux baremetal, AMI BIOS: Linux 6.4.4
    • PTI: ligado
  • Teste Linux baremetal, HP: Linux 6.4.4
    • PTI: ligado
  • Baremetal, Arch[-hardened], Dell BIOS, Linux 6.4.X
  • Baremetal, Debian, 6.1.X
  • Baremetal, Ubuntu 20.04 com Secure Boot ativado. Funciona, mas assine o driver primeiro.
  • Baremetal, Ubuntu 22.04, Linux 6.2.X

Lidando com Secure Boot

Se o sistema relatar a seguinte mensagem de erro ao carregar o módulo, pode ser por causa do secure boot:

root@kitploit:~
$ sudo insmod linpmem.ko
insmod: ERROR: could not insert module linpmem.ko: Operation not permitted

Existem diferentes maneiras de ainda assim carregar o módulo. A óbvia é desabilitar o secure boot nas configurações UEFI.

Se sua distribuição suportar, uma solução mais elegante seria assinar o módulo antes de usá-lo. Isso pode ser feito usando os seguintes passos (testado no Ubuntu 20.04).

  1. Instale mokutil:
    root@kitploit:~
    $ sudo apt install mokutil
    
  2. Crie o material da chave de assinatura:
    root@kitploit:~
    $ openssl req -new -newkey rsa:4096 -keyout mok-signing.key -out mok-signing.crt -outform DER -days 365 -nodes -subj "/CN=Algum nome descritivo/"
    
    Certifique-se de ajustar as opções às suas necessidades. Especialmente, considere o comprimento da chave (-newkey), a validade (-days), a opção de definir uma frase secreta para a chave (-nodes; deixe-a de fora se quiser definir uma frase secreta), e o nome comum a ser incluído no certificado (-subj).
  3. Registre o novo MOK:
    root@kitploit:~
    $ sudo mokutil --import mok-signing.crt
    
    Será solicitada uma senha, necessária no passo seguinte. Considere usar uma senha que você possa digitar em um layout de teclado US.
  4. Reinicie o sistema. Ele entrará em um menu de inscrição MOK. Siga as instruções para inscrever sua nova chave.
  5. Assine o módulo Uma vez que o MOK esteja inscrito, você pode assinar seu módulo.
    root@kitploit:~
    $ /usr/src/linux-headers-$(uname -r)/scripts/sign-file sha256 caminho/para/sua/MOK.key caminho/para/sua/MOK.cert caminho/para/linpmem.ko
    

Depois disso, você deve conseguir carregar o módulo.

Observe que, de uma perspectiva de prontidão forense, você deve preparar um módulo assinado antes de precisar dele, pois o sistema será reiniciado duas vezes durante o processo descrito acima, destruindo a maioria dos seus dados voláteis na memória.

Problemas Conhecidos

  • Leitura de página grande não está implementada. Linpmem reconhece uma página grande e rejeita a leitura, por enquanto.
  • A leitura de espaço de E/S mapeado e DMA será feita com cache de CPU ativado.
  • Nenhum bloqueio é obtido durante a caminhada pela tabela de páginas. Isso pode levar a resultados engraçados quando modificações concorrentes estão ocorrendo. Este é um problema geral e (principalmente insolúvel) de leitura de RAM ao vivo, sem interromper todo o sistema operacional completamente.
  • Secure Boot (Ubuntu): por favor, assine seu driver antes de usar.
  • Qualquer criptografia de memória baseada em CPU, por exemplo, AMD SME, Intel SGX/TDX, ...
  • Chips Pluton?

(Por favor, reporte problemas potenciais se encontrar algo.)

Em andamento

  • Carregar driver pré-compilado em qualquer Linux.
  • Controle de cache do processador. Exemplo: para leitura não armazenada em cache de espaço de E/S mapeado e DMA.

Trabalho futuro

  • Suporte Arm/Mips. (trabalho distante)
  • Kernels legados (como 2.6), kernels baseados em Unix

Agradecimentos

Linpmem, assim como Winpmem, não existiriam sem o trabalho de nossos predecessores do projeto REKALL (agora aposentado): https://github.com/google/rekall.

  • Gostaríamos de agradecer a Mike Cohen e Johannes Stüttgen por seu trabalho pioneiro e contribuição de código aberto no remapeamento de PTE, uma técnica que ainda está em uso 10 anos depois.

Nossos contribuidores de código aberto:

  • Viviane Zwanger
  • Valentin Obst
Baixar ferramenta