Existem conceitos de sandboxing para módulos de kernel binários proprietários no linux?

1

Muito tem sido feito para avançar a segurança entre processos ( UID do mesmo) e priveledge caindo em userland , mas é comum que os componentes proprietários do kernel Linux sejam usados (parece que a GPLv2 não realmente resolver problema de módulo de kernel de código fechado, infelizmente).

Minha pergunta é sobre o conceito (existente ou em desenvolvimento) para "proteger" um módulo do kernel de origem fechada.

Parece-me que, em tempos de paranoia justificada (wikileaks, post snowden), as pessoas têm procurado maneiras de impedir um possível backdoor em um módulo de kernel proprietário, certo?

    
por humanityANDpeace 27.02.2016 / 08:36

2 respostas

4

Sim, existe um conceito de sandbox para drivers proprietários. Ele é chamado de drivers da terra do usuário.

Se você executar o código dentro do kernel, ele terá acesso a tudo, então é impossível proteger o cache. (Impossível com relação ao sistema Linux - esse sistema pode ser executado em uma máquina virtual e, em seguida, a VM faria o sandboxing.)

Os drivers da terra do usuário são possíveis para alguns tipos de periféricos. Por exemplo, alguns periféricos USB podem ser dirigidos a partir da terra do usuário via libusb e usbfs . Os sistemas de arquivos podem ser implementados na userland por meio do FUSE .

Dado que um driver malicioso para um periférico geralmente pode alavancar seu acesso ao periférico para acessar o resto do sistema (por exemplo, configurando o periférico para DMA e, portanto, acessando memória arbitrária), não há muito sentido em tentar proteger um driver. Se você não confia no driver, não o use.

É possível fazer algum sandbox executando o driver dentro de uma máquina virtual e configurando o hipervisor para permitir que a VM acesse apenas um periférico específico. Isso só é útil se o próprio periférico tiver acesso apenas a uma parte específica da memória, o que pode ser feito com uma IOMMU (o IOMMU tem que permanecer sob o controle do hipervisor, é claro). Nem todos os sistemas suportam esse sandboxing - mais uma vez, se você não confia no periférico, por que o teria em seu computador?

    
por 28.02.2016 / 22:32
1

Eu acho que é possível e as CPUs dão algum suporte para restringir os acessos de parte dos códigos do kernel.

Mas há duas dificuldades: os módulos proprietários do kernel são programados por empresas de hardware, portanto, mesmo que o kernel possa restringir o acesso a determinados endereços, o lado do hardware pode ter acesso irrestrito.

A segunda dificuldade: Eu duvido que as pessoas do kernel implementarão tal plano: uma regra implícita do kernel do Linux "não gosta de pessoas de código fechado", e tal plano tornará as tarefas mais fáceis / mais aceitáveis.

    
por 27.02.2016 / 13:20