Simple Science

Ciência de ponta explicada de forma simples

# Informática# Criptografia e segurança# Sistemas operativos

Entendendo a Compartimentalização de Software para Segurança

Aprenda como a compartimentalização melhora a segurança de software, limitando o acesso e a interação.

― 6 min ler


Compartimentalização naCompartimentalização naSegurança de Softwareataques.de aplicativos e limitar o impacto dosUma estratégia pra melhorar a segurança
Índice

A compartmentalização de software é um método de design que divide um aplicativo em seções ou componentes separados, que podem interagir entre si enquanto são limitados em termos do que podem fazer. Isso ajuda a melhorar a segurança, limitando o impacto de qualquer ataque potencial. Se uma seção do software for comprometida, o atacante só pode acessar os privilégios concedidos a essa seção, reduzindo o possível dano.

A Necessidade de Compartmentalização

Nos últimos anos, o cenário de ameaças para sistemas de software tem se tornado cada vez mais complexo. Medidas de segurança tradicionais geralmente não são suficientes para proteger contra novas e desconhecidas vulnerabilidades. A Compartimentalização oferece uma forma de aumentar a segurança, limitando o que cada parte do software pode acessar e fazer. Ao impor o princípio do menor privilégio, os compartimentos só recebem o acesso mínimo necessário para realizar suas tarefas.

Desafios na Implementação da Compartimentalização

Um grande desafio ao usar técnicas de compartimentalização é o esforço necessário para adaptar o software existente. Adicionar compartimentalização em aplicativos atuais pode ser caro em termos de tempo e recursos. Além disso, pode haver impactos no desempenho que podem prejudicar a operação geral do software.

Avanços recentes visam fornecer métodos de compartimentalização que minimizem a carga de trabalho de engenharia e o excesso de desempenho. Por exemplo, o ARM Morello integra Capacidades modernas de processador projetadas para uma compartimentalização eficiente.

ARM Morello e CHERI

O ARM Morello representa uma nova direção no design de hardware. Ele combina um processador ARM moderno com instruções especiais que suportam a segurança baseada em capacidades. Isso permite a imposição de limites de compartimento diretamente no hardware.

Instruções RISC Melhoradas com Hardware de Capacidades (CHERI) são um conjunto de instruções que permitem controle de acesso granular sobre a memória. Elas permitem que o software especifique quais partes da memória podem ser acessadas, ajudando a manter as fronteiras de segurança entre os compartimentos.

Abordagens para Compartimentalização

Esse artigo discute duas abordagens para implementar a compartimentalização no ARM Morello.

Abordagem 1: Capacidades Granulares

O primeiro método envolve transformar ponteiros padrão em software em capacidades que podem gerenciar regiões precisas da memória. Esse método permite que um compartimento compartilhe pequenas porções de sua memória com outro, mantendo o acesso rigorosamente controlado.

O processo de converter código existente para usar capacidades pode ser trabalhoso. No entanto, oferece forte isolamento entre compartimentos. Este método é particularmente útil para pequenas funções que precisam ser isoladas do resto do aplicativo.

Abordagem 2: Regiões Compartilhadas sobrepostas

O segundo método simplifica o compartilhamento de dados entre compartimentos criando uma região sobreposta de memória compartilhada. Isso permite que dois ou mais compartimentos acessem a mesma área de memória, facilitando a colaboração.

Enquanto essa abordagem reduz o esforço de engenharia necessário, ela vem com algumas desvantagens em termos de segurança. Como vários compartimentos podem acessar a mesma região de memória, isso aumenta o risco de interferências indesejadas ou vulnerabilidades.

Implementação da Compartimentalização

A compartimentalização pode ser implementada em um sistema operacional em biblioteca como o FlexOS. Este sistema é projetado para suportar várias técnicas de isolamento, permitindo que se adapte a novas capacidades de hardware como as encontradas no ARM Morello.

No FlexOS, os compartimentos são definidos quando o software é construído. Cada compartimento é alocado em suas próprias regiões de memória, garantindo que não se sobreponham, exceto em áreas compartilhadas designadas. Essa estrutura ajuda a manter o isolamento necessário para proteger contra acessos não autorizados.

Alternando entre Compartimentos

Quando diferentes partes do software precisam interagir, ocorre um processo chamado de "troca de domínio de segurança". Essa troca transfere o controle de um compartimento para outro enquanto preserva a segurança.

O comutador é um componente especial que gerencia essas transições. Ele garante que cada compartimento mantenha suas fronteiras de segurança durante a interação, o que é fundamental para preservar a integridade do sistema.

Análise de Desempenho

A eficácia da compartimentalização pode ser medida avaliando seu excesso de desempenho. Isso envolve comparar como os aplicativos compartimentalizados se saem em comparação com seus homólogos não compartimentalizados.

Quando implementada usando a abordagem de capacidade granular, o excesso de desempenho tende a ser relativamente baixo, até atendendo a benchmarks especificados em muitos casos. No entanto, a abordagem de regiões compartilhadas sobrepostas mostrou um excesso maior, especialmente em casos onde o código isolado é acessado com frequência.

Estudo de Caso: SQLite e LibSodium

Para entender melhor as implicações da compartimentalização, duas aplicações de software populares-SQLite e LibSodium-foram analisadas.

LibSodium foi compartimentalizada usando a abordagem granular. Este projeto envolveu identificar funções que poderiam ser isoladas e converter seu uso de ponteiros em capacidades. Embora a carga de trabalho inicial tenha sido significativa, o resultado final mostrou um desempenho excelente com mínimo excesso.

SQLite, por outro lado, usou a abordagem de regiões compartilhadas sobrepostas. Este método exigiu identificar dados compartilhados e inserir portas para gerenciar os limites dos compartimentos. Apesar de um custo de engenharia mais alto, essa abordagem demonstrou um desempenho aceitável, particularmente em cenários onde o código do sistema de arquivos estava isolado.

Conclusão

A compartimentalização de software é uma estratégia eficaz para aumentar a segurança das aplicações. Ao dividir o software em compartimentos, os desenvolvedores podem limitar o dano causado por ataques e aumentar a resiliência geral.

Embora haja desafios em adaptar o software existente para utilizar a compartimentalização, avanços recentes nas capacidades de hardware simplificaram o processo. Abordagens como capacidades granulares e regiões compartilhadas sobrepostas oferecem diferentes trocas que podem ser adaptadas com base nos requisitos específicos de uma aplicação.

À medida que o cenário de segurança de software continua a evoluir, a compartimentalização provavelmente desempenhará um papel vital na construção de sistemas mais seguros. Ao adotar essas metodologias, os desenvolvedores podem criar aplicações que estão melhor equipadas para enfrentar os desafios de um cenário de ameaças crescente.

Fonte original

Título: Software Compartmentalization Trade-Offs with Hardware Capabilities

Resumo: Compartmentalization is a form of defensive software design in which an application is broken down into isolated but communicating components. Retrofitting compartmentalization into existing applications is often thought to be expensive from the engineering effort and performance overhead points of view. Still, recent years have seen proposals of compartmentalization methods with promises of low engineering efforts and reduced performance impact. ARM Morello combines a modern ARM processor with an implementation of Capability Hardware Enhanced RISC Instructions (CHERI) aiming to provide efficient and secure compartmentalization. Past works exploring CHERI-based compartmentalization were restricted to emulated/FPGA prototypes. In this paper, we explore possible compartmentalization schemes with CHERI on the Morello chip. We propose two approaches representing different trade-offs in terms of engineering effort, security, scalability, and performance impact. We describe and implement these approaches on a prototype OS running bare metal on the Morello chip, compartmentalize two popular applications, and investigate the performance overheads. Furthermore, we show that compartmentalization can be achieved with an engineering cost that can be quite low if one is willing to trade off on scalability and security, and that performance overheads are similar to other intra-address space isolation mechanisms.

Autores: John Alistair Kressel, Hugo Lefeuvre, Pierre Olivier

Última atualização: 2023-09-21 00:00:00

Idioma: English

Fonte URL: https://arxiv.org/abs/2309.11332

Fonte PDF: https://arxiv.org/pdf/2309.11332

Licença: https://creativecommons.org/licenses/by/4.0/

Alterações: Este resumo foi elaborado com a assistência da AI e pode conter imprecisões. Para obter informações exactas, consulte os documentos originais ligados aqui.

Obrigado ao arxiv pela utilização da sua interoperabilidade de acesso aberto.

Mais de autores

Artigos semelhantes