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
Introdução inicial do sistema de arquivos /proc no kernel Linux (versão 0.97.3)
Correção de vulnerabilidade de escalada de privilégios relacionada ao uso de /proc/self/mem antes de exec SUID
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
- lcamtuf.substack.comfonte original
- Categoria
- CEVIU Web Dev
- Publicado
- 02 de junho de 2026
- Editoria
- CEVIU Web Dev
