CEVIU Logo
Voltar

No Linux, a memória do seu processo é literalmente um arquivo

Aprofundamento CEVIU

Aprofundamento

A interface /proc/<pid>/mem não é um arquivo no disco, mas uma janela em tempo real para o espaço de endereçamento virtual de um processo, mapeada byte a byte, sem intermediários. Ela opera sob o mesmo mecanismo que ptrace, e seu acesso depende estritamente do modo PTRACE_MODE_ATTACH_FSCREDS, não de permissões POSIX. Isso significa que o kernel valida quem pode ler ou escrever ali com base em relações de depuração, não em dono/grupo/permissoes. Para acessar regiões válidas, o desenvolvedor precisa cruzar os dados de /proc/<pid>/maps: só assim identifica se um endereço está em uma região de memória legível, escrita ou executável, essencial para evitar EINVAL ou EPERM ao usar lseek() e read().

O sistema /proc existe desde 1992, mas /mem foi adicionado muito depois, como parte da evolução do suporte a depuração e análise dinâmica. Sua documentação oficial (proc_pid_mem(5)) foi atualizada em fevereiro de 2026, e a renderização HTML mais recente data de maio de 2026, sinal de que ainda é ativamente mantida, não um relicário. Projetos como o gVisor da Cloudflare já a usaram em produção para stack unwinding em sandboxs, mostrando que ela vai além de ferramentas de pentest: é um componente de infraestrutura de observabilidade em ambientes seguros.

O que mudou

Não houve mudança funcional em /proc/<pid>/mem entre as notícias anteriores e a atual, a interface permanece inalterada desde sua estabilização. O que mudou foi o contexto de segurança: enquanto artigos anteriores (como os sobre CIFSwitch e CVE-2026-31525) tratavam de falhas específicas de lógica ou overflow, esta notícia reforça que a ameaça muitas vezes não está na vulnerabilidade em si, mas na exposição intencional de superfícies de ataque como /mem. Em 2012, Linus corrigiu um caso em que /proc/self/mem podia ser aberto antes de um exec SUID, hoje, o Yama bloqueia isso por padrão. Ou seja, o kernel evoluiu não ao remover a interface, mas ao restringir seu uso por meio de políticas de ptrace_scope.

Por que isso importa

Para desenvolvedores de sistemas, essa interface é um exemplo prático de como o kernel equilibra poder e controle: oferece acesso de baixo nível à memória sem exigir módulos externos ou syscalls customizadas, mas delega a segurança inteiramente ao modelo de depuração. Isso impacta diretamente testes de integração, ferramentas de profiling como perf e até implementações de runtime de linguagens que precisam inspecionar pilhas de outros processos. Para times de segurança, entender /proc/<pid>/mem ajuda a diferenciar explorações reais de falsos positivos em detecções de memória anômala, especialmente quando combinada com eventos como o CIFSwitch, onde a cadeia de privilégios envolve múltiplas camadas de autenticação e acesso a recursos do kernel.

Linha do tempo

  1. Introdução inicial do sistema de arquivos /proc no kernel Linux (versão 0.97.3)

  2. Correção de vulnerabilidade de escalada de privilégios relacionada ao uso de /proc/self/mem antes de exec SUID

  3. Publicação da análise técnica sobre /proc/<pid>/mem como manifestação do princípio Unix 'tudo é um arquivo'

Perguntas frequentes

Posso ler a memória de qualquer processo com /proc/<pid>/mem?

Não. O acesso depende de permissões de ptrace: por padrão, só processos com privilégios root ou filhos diretos podem abrir esse arquivo. Se o módulo Yama estiver ativo com ptrace_scope=1 (configuração padrão em muitas distros), até mesmo processos do mesmo usuário são bloqueados.

Por que /proc/<pid>/mem não aparece ao listar /proc/<pid>/ com ls?

É um pseudo-arquivo gerado dinamicamente pelo kernel no momento da leitura, não existe fisicamente no sistema de arquivos. Ele só é exposto quando o processo está em execução e o kernel decide criar a entrada, o que explica por que comandos como 'ls' não o listam por padrão.

Essa interface é usada apenas por hackers ou também tem aplicações legítimas?

Tem uso legítimo diário: depuradores como GDB, ferramentas de despejo de memória (ex: gcore), analisadores de vazamento de memória e até runtimes de linguagens que precisam inspecionar estados de threads. A diferença está no contexto, e em quem controla o acesso.

Como saber quais regiões da memória posso ler com /proc/<pid>/mem?

Consultando /proc//maps, que mostra o layout completo da memória virtual: endereços, permissões (rwx), nome do mapeamento (ex: libc.so) e deslocamentos. Sem cruzar esses dados, tentativas de leitura em regiões não mapeadas ou protegidas retornam erro.

Fontes

Avalie este artigo:
Compartilhar:
Categoria
CEVIU Web Dev
Publicado
02 de junho de 2026
Editoria
CEVIU Web Dev

Quer receber mais sobre CEVIU Web Dev?

Conteúdo curado diariamente, direto no seu e-mail.

Conteúdo curado diariamenteDiversas categoriasCancele quando quiser