Cadeia de abastecimento
O que é typosquatting?
O typosquatting é um ataque que regista um nome próximo de um nome popular e espera que alguém o escreva mal. Começou com os domínios de sites. No software, os atacantes publicam pacotes maliciosos com nomes como crossenv em vez de cross-env, e um único erro de escrita num comando de instalação executa o código deles na máquina de um programador ou num pipeline de CI.
Atualizado a
Como funciona o typosquatting de pacotes
- Escolher um alvo. O atacante escolhe um pacote popular, onde até uma pequena taxa de erros de escrita se acumula.
- Registar um nome próximo. Difere numa letra, num hífen em falta, num carácter trocado ou num sufixo plausível.
- Esconder a carga maliciosa. O pacote envolve muitas vezes o verdadeiro, pelo que tudo continua a funcionar e nada parece errado.
- Executar na instalação. Os gestores de pacotes podem executar scripts durante a instalação, pelo que o código corre antes de alguém o chamar, com acesso a variáveis de ambiente e tokens.
- Roubar e propagar. As credenciais roubadas permitem ao atacante publicar mais pacotes ou chegar a mais sistemas.
Técnicas comuns de typosquatting
| Técnica | Pacote real | Imitação |
|---|---|---|
| Separador em falta | cross-env |
crossenv |
| Sufixo acrescentado | jquery |
jquery.js |
| Letras trocadas | ffmpeg |
ffmepg |
| Letra omitida | mongoose |
mongose |
| Prefixo acrescentado | sqlite |
node-sqlite |
Todas as imitações acima vêm de uma única campanha real, descrita a seguir.
Um exemplo real: crossenv
Em 2017, um utilizador do npm chamado hacktask publicou crossenv, imitando o popular cross-env. Mantinha o comportamento do pacote verdadeiro e enviava também as variáveis de ambiente de quem o instalava para o servidor do atacante. Num build, é nas variáveis de ambiente que estão os tokens. A análise do Snyk concluiu que era um de mais de 30 pacotes maliciosos da mesma conta e que passou despercebido durante cerca de duas semanas, até um engenheiro o detetar.
Porque é que os assistentes de programação com IA agravam o problema
Um assistente de IA pode sugerir um pacote que não existe. Se um atacante registar esse nome, a pessoa seguinte que aceitar a sugestão instala o malware. A isto chama-se por vezes slopsquatting. Os agentes automatizados que instalam dependências sem que uma pessoa leia o nome aumentam ainda mais o risco.
Typosquatting vs confusão de dependências
Ambos exploram a forma como os nomes de pacotes são resolvidos, mas o erro é diferente.
| Typosquatting | Confusão de dependências | |
|---|---|---|
| De quem é o erro | Uma pessoa escreve mal um nome | Um sistema de build escolhe o registo errado |
| O nome | Próximo de um pacote público | Idêntico a um pacote privado interno |
| Como tem êxito | Alguém o instala por acidente | Uma versão pública com um número mais alto tem prioridade |
| Principal defesa | Lockfiles e revisão das novas dependências | Pacotes com scope e uma configuração do registo que mantém privados os nomes internos |
A confusão de dependências tornou-se famosa em 2021, quando o investigador Alex Birsan a usou para executar código em mais de 35 organizações, entre elas a Apple, a Microsoft e o PayPal, ao abrigo de programas de bug bounty ou com autorização.
Como evitar o typosquatting
-
Instale a partir de um lockfile na CI. Use
npm cie os seus equivalentes. Um erro de escrita só pode então chegar através de uma alteração revista. Consulte o que um lockfile faz e não faz. - Reveja as novas dependências nos pull requests. Olhe para o próprio nome e leia o diff do lockfile em vez de o saltar.
- Verifique antes de instalar. Compare o nome com a documentação do próprio projeto e desconfie de um pacote com poucas descargas, uma primeira publicação recente ou sem ligação a um repositório.
- Limite os scripts de instalação. Desative-os sempre que o seu build o permita.
- Aguarde antes de adotar novos pacotes. Os pacotes maliciosos são muitas vezes encontrados e removidos pouco depois de surgirem.
- Limite o que um build pode alcançar. Um build que só pode comunicar com hosts conhecidos não consegue enviar os seus segredos a um atacante, mesmo que um pacote malicioso seja executado. Consulte a política de egress do GitHub Actions.
- Verifique cada sugestão de IA. Confirme que o pacote existe e que é o pretendido antes de o instalar.
Tenha presente que um typosquat não tem CVE no dia em que surge, pelo que uma análise SCA baseada em avisos de segurança não o assinala. Para saber mais, consulte as boas práticas de segurança da cadeia de abastecimento de software.
Typosquatting de domínios
A forma original do ataque, também chamada URL hijacking, regista um domínio como o de um banco ou de uma página de início de sessão com um erro ortográfico. Os visitantes que escrevem mal o endereço vão parar a uma cópia do site criada para roubar credenciais ou distribuir malware. As defesas são diferentes: registe erros ortográficos comuns dos seus próprios domínios, monitorize registos de nomes semelhantes e use um gestor de palavras-passe, que não preenche automaticamente no domínio errado.
Como o CRACI limita os danos
O CRACI não deteta novos pacotes maliciosos pelo comportamento nem pela reputação, pelo que deve usar uma firewall de pacotes ou uma ferramenta de análise de comportamento para isso. O que faz é contê-los. Como seu runner de GitHub Actions, aplica uma política de egress que bloqueia as ligações de que o seu build não precisa, pelo que um pacote que rouba segredos não tem para onde os enviar, mesmo quando ninguém viu o ataque antes. Cada pacote que um job obteve fica registado, pelo que, assim que um ataque é conhecido, pode ver que builds o trouxeram, e as versões com uma CVE publicada são assinaladas e podem ser bloqueadas por policy gates. Consulte o que é um ataque à cadeia de abastecimento.
Typosquatting: perguntas frequentes
O que é typosquatting, em termos simples?
É registar um nome quase igual a um nome popular, como um pacote ou um site, e esperar que alguém o escreva mal. A imitação entrega então malware ou rouba credenciais.
Qual é um exemplo de typosquatting?
Em 2017, o pacote npm crossenv imitou o popular cross-env. Funcionava como o pacote verdadeiro e enviava também as variáveis de ambiente dos utilizadores para o servidor do atacante.
Qual é a diferença entre typosquatting e confusão de dependências?
O typosquatting depende de uma pessoa escrever mal o nome de um pacote público. A confusão de dependências usa o nome exato de um pacote privado e depende de um sistema de build obter, em vez dele, uma versão pública.
O typosquatting é ilegal?
Publicar malware ou roubar credenciais é ilegal na maioria dos países. O typosquatting de domínios pode também violar a legislação sobre marcas, como o Anticybersquatting Consumer Protection Act dos EUA.
O que é slopsquatting?
Uma variante em que um atacante regista um nome de pacote que os assistentes de IA tendem a inventar. Quem instalar o pacote sugerido recebe o código do atacante.
Como detetar o typosquatting?
Reveja as novas dependências pelo nome e pelos metadados, e use uma ferramenta que compare os nomes dos pacotes com os de pacotes populares ou que analise o comportamento. Os scanners baseados em avisos de segurança só ajudam depois de o pacote ter sido reportado.
Contenha o pacote que não apanhou
Bloqueie as ligações de saída de que os seus builds não precisam e mantenha um registo de cada pacote que obtiveram.
Marcar demo