Armazenamento temporário seguro

1

Estou tentando encontrar uma maneira de armazenar dados com segurança pela duração de uma sessão - especificamente, para senhas em uma caixa de salto - para que o usuário precise digitar a senha de um determinado destino apenas uma vez na caixa de salto. sessão. Idealmente, eu gostaria de esconder os dados até mesmo do root.

Embora eu confie nas pessoas com acesso root, não confio necessariamente em todos os programas que são executados como raiz - por exemplo, backups que podem expor os dados.

O SELinux não funciona - as políticas disponíveis no RHEL precisariam de muito trabalho, não são portáveis e, é claro, Selinux é uma droga .

A criptografia não funcionará. Depois, preciso descobrir onde armazenar a chave.

Executando um daemon e colocando os dados lá / autenticando usando a passagem de credenciais de soquete, no entanto, há algum esforço em implementar isso, e gostaria de ter certeza de que os dados foram eliminados no final da sessão (o que pode não sempre terminar de forma limpa).

Usar o O_TMPFILE para criar um arquivo não nomeado parece resolver muitos problemas de preenchimento de dados e limpeza no final da sessão. Mas como outro processo pode acessar os dados? Eu suponho que a resposta seria ter o processo de propriedade também abrir um soquete de escuta e lidar com os pedidos dessa maneira - mas existe uma solução mais fácil?

Eu deveria repensar isso completamente?

    
por symcbean 22.03.2018 / 21:28

1 resposta

2

Você pode usar o chaveiro do kernel (e, em particular, o comando keyctl ) para armazenar seus dados de maneira segura.

O chaveiro do kernel tem granularidade suficiente para armazenar chaves que estão disponíveis para um usuário específico ou até mesmo para uma sessão específica (assim, se você estiver conectado usando SSH e no console ou usando SSH de duas máquinas diferentes, as sessões separados um do outro.)

Um exemplo de uso de exemplo é:

$ keyctl add user mypassword supersecret @s
543456789

O kernel armazenou uma chave chamada "mypassword", com valor "supersecret", somente na sessão ( @s , considere também @u para o chaveiro do usuário).

Você pode usar o comando padd para ler stdin:

$ echo -n supersecret | keyctl padd user mypassword @s
543456789

Então, quando você precisar recuperá-lo:

$ keyctl print 543456789
supersecret

Se você quiser procurá-lo a partir de sua descrição ("mypassword"), você pode usar o comando search para fazer isso:

$ keyctl search @s user mypassword
543456789

(E, em seguida, use o ID da chave para imprimi-lo usando keyctl print .)

Há muito mais que o chaveiro pode fazer ... Se você quiser usá-lo, talvez comece lendo o página man do keyctl que pode dar uma boa idéia de quais operações são suportadas e de qual chaveiro usar.

    
por 22.03.2018 / 22:16

Tags