Segurança de Aplicação

Escalação de Privilégios em Segurança de Aplicações

Quer entender melhor o que é a Escalação de Privilégios e como ela pode afetar a segurança das aplicações? 

Sabemos que a vulnerabilidade de Escalação de Privilégios acontece quando o sistema operacional ou a aplicação ficam vulneráveis e permitem, com isso, que um usuário use privilégios de outro usuário para acessar esse sistema.

Mas, para entender realmente o que acontece nesse cenário, precisamos entender como se dão as proteções e como são usados os privilégios dentro de um sistema.

Portanto, neste artigo vamos abordar como a exploração de falhas nesta proteção pode comprometer  a segurança das aplicações, e como evitá-las. Confira!

Entendendo a Escalação de Privilégios em Segurança de Aplicações

Nos últimos artigos temos falado sobre algumas vulnerabilidades que julgamos serem interessantes no contexto de Application Security. 

Isso de forma alguma quer colocar criticidade e importância nestas vulnerabilidades abordadas, somente trazendo o tema para maiores reflexões sobre o assunto.

Tendo isso sido colocado, hoje vamos tratar um pouco de uma vulnerabilidade que podemos encontrar em um grande número de aplicações. Vamos tratar um pouco sobre Escalação de Privilégios em Segurança de Aplicações.

Mas, para falarmos sobre Escalação de Privilégios, primeiro é necessário entendermos o que é e quais os impactos que este tipo de vulnerabilidade pode trazer para nossas aplicações

Em uma busca no site do MITRE por Privilege Escalation, é possível encontrar um total de 1389 vulnerabilidades — um número bastante considerável para uma vulnerabilidade.

O MITRE é uma organização sem fins lucrativos que gerencia fundos de desenvolvimento e pesquisa (federally funded research and development centers — FFRDCs) que oferece suporte ao governo dos Estados Unidos.

Portanto, podemos perceber a importância dessa vulnerabilidade. Vamos continuar e entender melhor o que vem a Escalação de Privilégios. 

O que é Escalação de Privilégios em Segurança de Aplicações?

escalação de privilégios - imagem

De forma resumida, a vulnerabilidade de Privilege Escalation acontece quando o sistema operacional ou mesmo a aplicação está vulnerável, permitindo que um usuário acesse o mesmo nível de privilégios de outro.

Essa é a visão simples da vulnerabilidade.

Mas, para entender o que acontece, precisamos primeiro compreender como se dão as proteções e como são usados os privilégios dentro de um sistema.

Sistemas computacionais geralmente são construídos para serem usados por vários usuários, cada um com suas áreas e privilégios específicos.

Mas alguns privilégios são comuns a todos, como por exemplo o de leitura e escrita em alguns recursos.

Essa construção é feita sobre um sistema chamado de Modos de Proteção, que funciona como limite de atuação de usuários ou recursos dentro dos sistemas.

Sendo assim, cada recurso ou aplicação, por exemplo, possui um limite de permissões. 

Este limite é muitas vezes exemplificado por círculos concêntricos, mostrando que a mudança de um nível a outro precisa de mais permissões — passando de uma zona A para uma zona B, por exemplo.

Na imagem a seguir você pode visualizar um exemplo de privilégios sendo ilustrados por anéis (rings), sendo cada cor — de fora pra dentro — a escalação de um privilégio mais alto.

privilege scalation rings example

Porém, é importante ressaltarmos que neste artigo não vamos nos aprofundar no conceito de proteção — ou protection modes —, mas apenas mostrar que há uma divisão e um controle sobre quem e quando podem usar recursos dos sistemas.

Portanto, é neste princípio de rings de proteção que se baseiam os controles feitos sobre permissionamento para sistemas, e eles podem ser explorados caso as aplicações e os sistemas não estejam devidamente protegidos.

Formas de escalação de privilégio

Quando se explora uma vulnerabilidade de Privilege Escalation dentro de uma aplicação, há uma violação dos controles de permissionamento ou mesmo de validação de qual usuário está realizando uma ação.

Quando há uma violação, a vulnerabilidade pode ser explorada de duas formas: vertical e horizontalmente. Vamos explicar melhor cada uma delas a seguir.

1. Escalação de Privilégios Vertical

Esse tipo de exploração acontece quando um usuário com um nível de privilégio menor consegue realizar ações com privilégios acima do seu nível.

Por isso, essa exploração também pode ser chamada de elevação de privilégios de usuário.

2. Escalação de Privilégios Horizontal

Esse tipo de exploração acontece quando usuário consegue acessar funções de outros usuários no seu mesmo nível de privilégio, mas que inicialmente não estariam acessíveis a ele.

Lembre-se, quando nos referimos a um usuário, ele também pode ser um sistema ou outra aplicação — ou seja, não necessariamente é uma pessoa.

Como a Escalação de Privilégios funciona?

Bem, agora que vimos o que vem a ser uma vulnerabilidade de Privilege Escalation, vamos ver como ela se dá, e quais seriam as melhores formas de atuar de forma preventiva.

Normalmente os ataques de Privilege Escalations são um dos primeiros passos dados pelos atacantes para realizar um ataque maior.

Como já falamos acima, há duas possibilidades de ataques que Privilege Escalation, uma focando na mudança de permissionamento com usuário de mesmo nível, e outra ganhando privilégios de usuários acima do nível do usuário atual.

Então, ataques do tipo horizontais são usados quando há um interesse em obter informações que talvez o usuário usado como base não tenha acesso.

Ou seja, com este tipo de ataque, o atacante teria acesso a dados e informações que podem servir de fonte para os próximos passos.

Em sistemas web, por exemplo, esse tipo de ataque seria o comprometimento de um outro usuário de mesmo nível, mas com permissões diferentes do usuário atual.

Imagine esse ataque horizontal em um sistema de e-commerce, por exemplo, ou mesmo em um sistema de gestão interno de empresas.

Com isso, a possibilidade de ter acesso a outras informações é enorme.

No entanto, o tipo de ataque mais perigoso geralmente acaba sendo o de escalação vertical de privilégios, onde o atacante consegue comprometer o sistema e conseguir acesso a privilégios de usuários acima do seu atual.

Esse tipo de ataque, que também é conhecido como Elevação de Privilégios, é muito comum a busca por usuários como administradores em sistemas Windows, ou usuários root em sistemas *UNIX.

O potencial impacto deste tipo de ataque é enorme, visto que ao ganhar acesso como um usuário administrador, independente de sistemas Windows ou *UNIX, o atacante passaria a ter o controle total sobre o sistema.

Sugestões de mitigação 

Agora que vimos as possibilidades de ataques verticais e horizontais, assim com a capacidade desse tipo de ataque comprometer a segurança dos sistemas, vamos então focar em mitigações que dizem respeito a implementação de soluções em aplicações.

É importante ressaltar que quando falamos em Escalação de Privilégios no cenário de Segurança de Aplicações, a mitigação de riscos deve ser pensada sempre de dentro pra fora nas empresas.

Uma cultura de Segurança Contínua e a difusão de um programa de Desenvolvimento Seguro por meio de treinamentos, e a formação de um time de Security Champions vão ser sempre os melhores aliados para manter o nível de alerta elevado entre os envolvidos com a Segurança das Aplicações.

1. Valide o Controle de Acesso

Basicamente, quando temos a escalação de privilégios, ela se deu por meio da violação de permissões em aplicações.

Isso significa que houve falha no processo de validação de controles de acesso.

E em aplicações web isso é mais presente quando a validação deste controle de acesso se dá do lado menos seguro da aplicação, que é o do usuário. 

Validações de dados e/ou entradas que sejam críticas ao sistema nunca devem ser feitas do lado do cliente, e isso vale para todos os aspectos de segurança.

Quando sistemas são construídos para validar dados do lado do cliente e depois transmitir para o servidor, estes podem ser afetados por manipulação de dados por parte de uma atacante.

2. Estabeleça sempre o menor privilégio possível

Para evitarmos a escalação de privilégios, precisamos entender que a implementação de permissões em sistemas é feita basicamente usando uma matriz de permissionamento, e estes permissionamentos devem estar relacionados a funções que podem ser executadas — sendo sempre o mínimo possível e necessário.

No exemplo acima, podemos ver como as funções previamente definidas são relacionadas com alguma permissão específica que pode ser realizada.

Estas permissões podem ser comandos, ações ou mesmo acessos.

Assim, como podemos ver na próxima imagem, estas funções seriam relacionadas com um usuário, que passaria a possuir as permissões relacionadas à sua função.


Privilege Scalation Example

Portanto, como imaginamos, o cruzamento entre o usuário e a função determina a quais permissões o usuário tem acesso. A quebra desse relacionamento ou a implementação equivocada desse relacionamento permite um ataque de Privilege Escalation.

Sendo assim, uma das formas de mitigação de ataques de Privilege Escalation é a implementação correta de um sistema de controle de acesso.

O conceito de menor privilégio da OWASP

A realização de testes em sistemas é de extrema importância, e a OWASP reconhece e oferece uma ajuda para dar suporte a execução desses testes. 

Portanto, neste documento a OWASP mostra um pequeno exemplo de como o conceito de  least privilege pode ser entendido e usado para mitigar vulnerabilidade de Privilege Escalation.

O OWASP Testing Guide é um conjunto de documentos que ajuda aos desenvolvedores a realizarem uma série de testes em suas aplicações, um destes testes é o relacionado a Privilege Escalation, e é uma leitura altamente recomendada.

2. Mantenha validação Server Side

A forma mais simples de evitar a Escalação de Privilégios e manter a Segurança de uma Aplicação é não transmitir dados sensíveis para o lado do cliente

Então, usar essa abordagem quer dizer que a única coisa que será transmitida e recebida do lado do cliente será o ID de sessão do usuário.

Ao se manter os dados do lado do servidor, elimina-se a possibilidade de alteração dos dados, não permitindo que dados maliciosos sejam enviados para o sistema.

No entanto, nem sempre isso é possível, por isso precisamos entender o que estamos transmitindo e como podemos proteger esse dado.

É importante buscar uma forma de manter o máximo possível de dados sensíveis sendo usado e processado apenas do lado do servidor, de forma que seja entregue ao usuário apenas seu resultado. 

Embora essa seja uma abordagem de segurança para a aplicação, manter os dados do lado do servidor trás uma série de desafios.

A manutenção persistente da sessão, por exemplo, é um desses desafios, além da própria validação de cada requisição HTTP.

Portanto, as implicações deste tipo de proteção devem ser pensadas com bastante cuidado, pois vão impactar no desempenho do sistema.

Mesmo assim, entendemos que esse tipo de abordagem é necessário para sistemas que atuem em mercados críticos e que podem ser altamente visados.

3. Tenha atenção com Cookies

A maneira mais segura de usar cookies é por meio de mecanismos de assinatura digital dos dados transmitidos.

Para isso, é possível utilizar em frameworks modernos a assinatura digital de dados, garantindo que os dados não foram alterados ao serem transmitidos. 

Em frameworks como o node.js, isso pode ser feito usando cookie-parse por meio do secret.  

Esse tipo de abordagem garante a integridade dos dados, mantendo ainda o dado visível ao usuário.

Entenda que, usando essa abordagem de assinatura digital, tanto a resposta quanto a solicitação HTTP ainda carregam toda a sessão. 

No entanto, é importante lembrar que é preciso ter um cuidado extra para não armazenar muitos dados na sessões.

Afinal, lembre-se que, ao fazer isso, a capacidade de resposta do site pode ser afetada, pois com um grande número de dados armazenados, aumentará também a necessidade de processamento da resposta.

Com isso você vai diminuir a chance do atacante explorar a Escalação de Privilégios e aumentar a Segurança da Aplicação, uma vez que o acesso aos dados trocados será muito mais difícil.

4. Implemente a criptografia dos dados

Caso você queira que o session state seja mais robusto contra alterações e que garanta a confidencialidade dos dados sendo transmitidos, você vai precisar usar criptografia.

No entanto, entenda que ao usar criptografia você vai colocar um esforço a mais no processamento de sua aplicação — e isso tem que estar previamente planejado para o seu sistema.

Neste processo, você vai precisar criptografar em cada requisição e decriptografar em cada resposta.

Dessa forma, você garante a segurança e a confidencialidade dos dados trocados, dificultando a Escalação de Privilégios.

O que esperamos?

Este artigo não tem a pretensão de ser um documento único de referência, mesmo porque aqui apenas fizemos uma introdução ao tema da Escalação de Privilégios em Segurança de Aplicações.

Portanto, buscamos chamar a atenção para o problema, e apontar alguns cuidados básicos que devem ser tomados com a finalidade de evitar esse tipo de exploração.

Esperamos também despertar a busca por mais informações sobre a Escalação de Privilégios e outras vulnerabilidades, e que isso possa trazer cada vez mais segurança para as suas aplicações.

vulnerability management
About author

Articles

Mais de 15 anos de experiência em segurança da informação e aplicações, graduado em processamento de dados, trabalhei como professor universitário e participei ativamente como instrutor de treinamento para mais de 6000 desenvolvedores em equipes de TI. Sou pai de duas meninas e trader nas horas vagas.
Related posts
Segurança de Aplicação

A Importância da Supply Chain para a Segurança das Aplicações

Para iniciar, quando pensamos em desenvolvimento de software, geralmente associamos essa área a…
Read more
Segurança de Aplicação

O que é WAAP (Web Application and API Protection)

Primeiramente, bem-vindo ao mundo da Proteção de Aplicativos Web e API (WAAP – Web…
Read more
Segurança de Aplicação

Os desafios em segurança de aplicações no uso da inteligência artificial por desenvolvedores

À medida que a inteligência artificial (IA) se torna cada vez mais presente em nosso dia a dia…
Read more

Deixe um comentário