Skip to main content

Proteger aplicativos com autenticação e controles de acesso

Objetivos de aprendizagem

Após concluir esta unidade, você estará apto a:

  • Descrever a importância de fazer autenticação e controle de acesso.
  • Explicar métodos de ataque que tiram proveito de autenticações inválidas.
  • Listar métodos de ataque que tiram proveito de controles de acesso inválidos.

Autenticação e acesso a aplicativos

Imagine a segurança de um aeroporto. Antes de fazer o embarque, os passageiros precisam provar sua identidade ao funcionário do portão, que confere o documento com a lista de passageiros e com um banco de dados de pessoas indesejadas. Essas etapas de autenticação física funcionam como as etapas de autenticação lógica que os usuários precisam concluir antes de poder acessar recursos tecnológicos, inclusive aplicativos. 

Um segurança confere a identidade e o bilhete de um passageiro de uma linha aérea

Os engenheiros de segurança de aplicativos restringem o acesso aos dados a usuários que tenham sido identificados, autenticados e autorizados. A autenticação verifica a identidade de alguém por meio de credenciais, normalmente um nome de usuário e uma senha, para permitir o login em um aplicativo. Isso permite que o aplicativo conceda aos usuários os privilégios necessários, o que os impede de acessar algumas coisas e permite acessar outras. Esse conceito de conceder e restringir acesso a recursos se chama autorização. Todo o processo de identificar, autenticar e autorizar usuários é conhecido como controle de acesso.  

Os engenheiros de segurança de aplicativos têm um papel primordial no gerenciamento da autorização, do login e das permissões de usuários do aplicativo. Isso protege contra o comprometimento de senhas, chaves ou tokens por invasores. Com isso, os engenheiros de aplicativos controlam, gerenciam e auditam o acesso a aplicativos, especialmente o acesso privilegiado (administrativo). 

Os engenheiros executam aplicativos usando o mínimo de privilégios possível (um conceito conhecido como "menor privilégio"). Eles também testam o aplicativo para ver se há problemas de controle de acesso vertical e horizontalmente. Um problema horizontal ocorre quando um usuário pode exibir/modificar informações de outro usuário. Um problema vertical ocorre quando um usuário pode obter acesso administrativo erroneamente. 

Por exemplo, os engenheiros de segurança de aplicativos protegem contra referências diretas a objetos não protegidos, o que permite aos invasores contornar a autorização e acessar diretamente recursos no sistema. Isso ocorre quando o aplicativo usa a entrada fornecida pelo usuário para recuperar um objeto (por exemplo, um registro ou arquivo de banco de dados) sem fazer verificações de autorização suficientes. 

Nota

Um token normalmente é usado da seguinte forma: em vez de ter que se autenticar para cada recurso, o usuário se autentica dessa forma uma vez (em uma sessão com tempo limitado), obtém um token temporário do servidor e usa os dados de identidade nesse token nas demais autenticações durante a sessão.

Proteção contra autenticação inválida

Um risco evitado pelos engenheiros de segurança de aplicativos é a autenticação inválida. Ele ocorre quando um invasor ganha acesso não autorizado às contas e compromete um sistema. O impacto desse risco pode ser grave, por exemplo, permitir que um invasor lave dinheiro, roube benefícios do INSS de uma pessoa ou até sua identidade. O risco de invasores explorarem autenticação inválida é alto. 

Os invasores podem acessar facilmente nomes de usuário e senhas válidos adivinhando as informações por meio da presença do usuário nas redes sociais ou usando credenciais válidas disponíveis para venda na dark web (técnica chamada de preenchimento de credenciais). Os invasores testam se os aplicativos e os softwares associados usam as contas administrativas padrão. Se não funcionar, o invasor usa um ataque de força bruta para adivinhar a senha do usuário ou usa um programa automatizado que insere todas as palavras de um dicionário sistematicamente como senha (conhecido como ataque de dicionário) para obter acesso ilícito. 

Nota

O preenchimento de credenciais ocorre quando um invasor usa nomes de usuário e senhas obtidos em uma violação de outra empresa para fazer login em outros serviços digitais. Como muitas pessoas reutilizam nomes de usuário e senhas entre sites, os invasores podem obter acesso a outras contas além daquelas que foram originalmente comprometidas.  

Isso é bem assustador. Como os engenheiros de segurança de aplicativos podem ajudar? Eles têm o papel crucial de avaliar um aplicativo para garantir que ele não ficará vulnerável a autenticações inválidas. Com isso, os engenheiros de segurança de aplicativos verificam os seguintes pontos fracos.

Senhas padrão, fracas ou muito comuns

Os engenheiros verificam se o aplicativo não usa credenciais padrão (por exemplo, admin/admin para contas administrativas). Eles verificam se o aplicativo tem senhas fracas, exigem que os usuários criem senhas com determinado número de caracteres e caracteres especiais e que não sejam comuns. O National Institute of Standards and Technology (NIST) tem diretrizes sobre tamanho, complexidade e revezamento de senhas. 

Autenticação baseada em conhecimento (KBA)

Muitas vezes, os sites permitem que os usuários redefinam uma senha com perguntas de KBA, por exemplo, o nome da rua em que viviam na infância ou o nome do seu cachorro. O problema com essa abordagem é que muitas dessas informações pessoais podem ser encontradas na presença da pessoa nas mídias sociais ou disponíveis na dark web devido a violações anteriores. 

Os engenheiros de segurança de aplicativos implementam mecanismos de recuperação de conta mais fortes do que a KBA, por exemplo, exigência de envio de um código para um email ou número de telefone registrado ao qual o usuário tem acesso. Eles também limitam e atrasam as tentativas de login com falha para evitar que os invasores usem ataques de força bruta e dicionário e adivinhem as senhas, além de garantir que o aplicativo envia um alerta aos administradores em caso de tentativas de login com falha. 

Senhas de texto sem formatação ou hash fraco 

O armazenamento e a inserção de senhas dos usuários em texto sem formatação significam que agentes hostis podem lê-las facilmente. Os engenheiros de segurança de aplicativos fazem com que todas as senhas de recursos de aplicativo sejam salgadas e hasheadas. Isso pode parecer um livro de receitas, mas o que ocorre é que outros dados são adicionados à senha e ela é embaralhada de maneira irreversível. 

Assim, mesmo que seja roubada, ninguém poderá usar a senha. Alguns algoritmos de computador (por exemplo, MD5) usados para criptografar senhas através de uma função de hash são fracos porque podem sofrer engenharia reversa facilmente. Os engenheiros de segurança de aplicativos evitam o uso desses algoritmos e implementam algoritmos de hash fortes.  

Autenticação de fator único 

O uso somente de nome de usuário e senha (algo que o usuário sabe) é chamado de autenticação de fator único (SFA, Single-Factor Authentication). Como um invasor pode adivinhar ou roubar senhas, os engenheiros de segurança de aplicativos implementam autenticação multifator (MFA, Multi-Factor Authentication) sempre que possível para proteger a autenticação no aplicativo. 

A MFA usa tanto algo que o usuário sabe (por exemplo, senha) quanto algo que ele tem (um celular) ou algo único dele (rosto ou impressão digital). Por exemplo, um usuário insere o nome de usuário e a senha em um aplicativo. Outra solicitação de autenticação é enviada para seu celular e deve ser aprovada por ele. Essa camada extra de segurança dificulta o comprometimento das contas por invasores. 

Gerenciamento de ID de sessão e token impróprio 

O gerenciamento de ID de sessão e token impróprio pode permitir que um invasor sequestre a sessão e se faça passar pela vítima. Para proteger a ID de sessão contra sequestro, os engenheiros tomam algumas precauções. Eles fazem com que o nome da ID não seja descritivo para que os invasores não possam obter informações sobre as tecnologias e linguagens de programação usadas pelo aplicativo. 

Assim como as senhas, as IDs de sessão devem ser longas o suficiente para impedir ataques de força bruta. E elas devem ser imprevisíveis para impedir que os invasores as adivinhem. Os engenheiros de segurança de aplicativos também armazenam o significado ou a lógica de negócios das IDs de sessão no lado do servidor (não no lado do cliente disponível para o usuário). 

Por fim, os engenheiros de segurança de aplicativos implementam ferramentas de gerenciamento de sessão internas em vez de criar outras do zero e estão cientes das vulnerabilidades da estrutura que escolheram usar. Para saber mais sobre gerenciamento de sessão, consulte a Folha de consulta OWASP associada. 

Nota

Uma sessão é uma série de solicitações e respostas associadas a um usuário que é enviada a um aplicativo. As IDs de sessão definem direitos de acesso às interações do usuário pela duração da sessão.

Proteção contra controle de acesso inválido

Enquanto a autenticação conecta um usuário a uma conta, o controle de acesso impõe as políticas de permissões do usuário. Quando ele é inválido, os invasores encontram formas de exibir ou editar as contas de outra pessoa ou de agir como administradores e usar as funções privilegiadas para acessar, alterar ou excluir registros. Essa é uma fraqueza de segurança comum, e o impacto pode ser grave dependendo do tipo de dados que o invasor consegue acessar. 

Os engenheiros de segurança de aplicativos protegem os aplicativos contra esse risco usando várias estratégias.

  • Negação por padrão: se uma solicitação não for especificamente permitida, ela será negada. Por exemplo, se um administrador criar outra conta de usuário, a conta deverá não ter acesso ou ter acesso mínimo por padrão até ser configurada.
  • Menor privilégio: todos os usuários recebem o mínimo de acesso possível.
  • Imposição de propriedade do registro: somente alguns usuários criam, leem, atualizam ou excluem um registro.
  • Registro de falhas no controle de acesso: crie um registro e alerte administradores quando uma senha é inserida incorretamente.
  • Gerenciamento de tokens: defina horas de validade para tokens e exclua os tokens armazenados após o logout. Isso impede que os tokens sejam usados indefinidamente e que um invasor adultere tokens para elevar os privilégios.
  • Testes preliminares e frequentes: por fim, o engenheiro de segurança de aplicativos testa essas proteções de controle de acesso durante o processo de garantia de qualidade e durante o SDLC.

Resumo

Você conheceu as estratégias que os engenheiros de segurança de aplicativos usam para proteger as funções de controle de acesso e autenticação de um aplicativo e garantir que apenas usuários legítimos poderão acessar seus recursos e funcionalidades atribuídos. Agora é hora de ver uma última consideração sobre a proteção de aplicativos: garantir que os dados confidenciais não sejam expostos.

Recursos

Continue a aprender de graça!
Inscreva-se em uma conta para continuar.
O que você ganha com isso?
  • Receba recomendações personalizadas para suas metas de carreira
  • Pratique suas habilidades com desafios práticos e testes
  • Monitore e compartilhe seu progresso com os empregadores
  • Conecte-se a orientação e oportunidades de carreira