MemGuard
Enclave de software para armazenamento de informações sensíveis na memória.
Este pacote tenta reduzir a probabilidade de dados sensíveis serem expostos quando na memória. Ele visa suportar todos os principais sistemas operacionais e é escrito em Go puro.
Recursos
- Os dados sensíveis são criptografados e autenticados na memória com XSalsa20Poly1305. O esquema usado também defende contra ataques de inicialização a frio.
- A alocação de memória contorna o runtime da linguagem usando chamadas de sistema para consultar o kernel por recursos diretamente. Isso evita interferência do coletor de lixo.
- Buffers que armazenam dados em texto simples são fortificados com páginas de guarda e valores de canário para detectar acessos e estouros espúrios.
- Esforços são feitos para evitar que dados sensíveis toquem o disco. Isso inclui travar a memória para evitar troca (swapping) e lidar com core dumps.
- Imutabilidade em nível de kernel é implementada para que a tentativa de modificação de regiões protegidas resulte em uma violação de acesso.
- Múltiplos endpoints fornecem capacidades de purga de sessão e terminação segura, bem como tratamento de sinais para evitar que dados remanescentes sejam deixados para trás.
- Ataques de canal lateral são mitigados ao garantir que a cópia e comparação de dados sejam feitas em tempo constante.
Algumas funcionalidades foram inspiradas pelo libsodium, então créditos a eles.
Documentação completa e uma visão geral da API podem ser encontradas aqui. Amostras de código interessantes e úteis podem ser encontradas no subpacote examples.
Instalação
$ go get github.com/awnumar/memguard
A API é experimental e pode ter alterações instáveis. Você deve fixar uma versão. [módulos]
Contribuindo
- Enviar amostras de programa para
./examples.
- Reportar bugs, vulnerabilidades e quaisquer dificuldades no uso da API.
- Escrever bibliotecas de segurança e criptografia úteis que utilizem memguard.
- Implementar proteções específicas do kernel/CPU.
- Enviar melhorias de desempenho.
Issues são para reportar bugs e discussão sobre propostas. Pull requests devem ser feitos contra o branch master.