Por Vinicius Lôbo
Introdução
AdBlocks, PassManagers, VideoDownloaders, PrivacyEssentials, Translators etc. Se você já ouviu alguns desses nomes, possivelmente já conhece (ou está familiarizado) com extensões de navegadores. Elas nos ajudam a bloquear anúncios chatos antes de vídeos, procurar por produtos com preços mais baratos, proteger nossa “privacidade” e afins, mas você já parou para pensar como elas funcionam? Quais são as permissões que elas possuem no navegador e no seu sistema operacional? Será que essas ferramentas tão amadas podem estar escondendo propósitos maliciosos por trás de suas funcionalidades? Vamos abordar nesse artigo um pouco mais sobre as extensões de navegadores, o que elas podem fazer e seus possíveis riscos.
Sobre as extensões
Por definição da documentação oferecida pelos navegadores, as extensões são ferramentas capazes de modificar e estender as capacidades de um navegador. Alterar a aparência, adicionar funcionalidades e bloquear features indesejáveis são só algumas das diversas funções que essas ferramentas podem empregar. São criadas com tecnologias web-based, como HTML, CSS e JavaScript (as vezes Typescript, embora não seja tão comum) e normalmente são distribuídas pelas próprias lojas dos navegadores, porém, podem ser publicadas em outros sites, como o GitHub por exemplo. Uma característica bem especial sobre as extensões, é que elas tem seu próprio conjunto de API’s JavaScript, que permitem funcionalidades específicas a elas, como por exemplo: bookmarks, que permite a manipulação e interação da extensão com o sistema de bookmarks do navegador; menus, que permite a extensão adicionar itens ao sistema de menu do navegador; notifications, que habilita a extensão a apresentar notificações ao usuário pelo sistema do sistema operacional, entre outras.
Conhecendo seus internals
Agora que entendemos um pouco mais sobre o porquê da existência das extensões e para que servem, vamos nos aprofundar um pouco mais sobre como são criadas e a arquitetura “por trás dos panos”.
A imagem acima ilustra a estrutura e a organização de uma extensão, como definida pela documentação da Mozilla MDN Web Docs. Nela podemos entender os arquivos que constroem uma extensão e como se relacionam, vamos passar por cada um e dar uma breve explicação:
-
Manifest
Esse arquivo é responsável por definir os metadados e informações sobre a sua
extensão (como o nome, versão, ícones, descrição etc.) e os arquivos e scripts que serão chamados para modificar o navegador, assim como as permissões que serão utilizadas pelas API’s (iremos nos aprofundar sobre as permissões mais na frente).
-
Background Script
O background tem como principal objetivo, monitorar as atividades e reagir a eventos no navegador, como navegar para uma nova página, remover bookmarks ou fechar abas e ser responsável por acessar as WebExtension JavaScript API’s. Como o nome indica, ele permanece ativo em background e roda no contexto da extensão, não interagindo diretamente com a página do navegador.
-
Content Script
Já o content, é o arquivo que roda no contexto da página do navegador, conseguindo acessar o conteúdo e injetar JavaScript daquela página em específico, alterando as características, coletando informações (spoiler do que vem por aí ;P), adicionando funções, entre outros.
-
Browser Action, Page Action e Options Page
Extensões podem conter elementos de interface de usuário que são definidas por esses arquivos, sejam eles páginas de opções (para configuração da extensão por exemplo), sidebars (painéis na esquerda do navegador) ou popups (diálogos acionados pelo usuário ao clicar no ícone da extensão por exemplo). No geral, essas actions e páginas são responsáveis por alterar as funcionalidades da extensão por escolha do usuário.
-
Web Accessible Resources
Recursos e mídias (como imagens, HTML, CSS e JavaScript) que podem ser colocadas para serem acessadas e exibidas pelo content script. Esses conteúdos são referenciados por um esquema de URI específico.
Pensando sobre segurança
Visto que entendemos um pouco mais sobre a arquitetura e organização das extensões e como os arquivos que as constroem se relacionam, é evidente que os principais arquivos que envolvem a modificação do navegador são o Content e Background scripts, e uma característica interessante que pode se notar, é que enquanto um tem acesso às API’s e não às páginas do navegador (background) o outro funciona da maneira inversa (content). Essa separação de funções faz parte de um dos mecanismos de segurança que compõem as extensões: Privilege Separation, Isolated Worlds e Permissions.
Vamos entrar em detalhes sobre cada um e entender suas necessidades:
-
Privilege Separation
As extensões dividem as principais funções em dois componentes distintos isolados uma da outra: content scripts e backgrounds scripts. Content scripts interagem com as páginas e executam com privilégios baixos (no contexto da extensão). Já os background scripts não interagem com as páginas e rodam com privilégios altos na extensão. Vale salientar que mesmo estando isoladas, elas ainda podem se comunicar por meio de um canal autenticado e trocar dados coletados.
-
Isolated Worlds
Os content scripts conseguem ler e modificar o conteúdo das páginas, porém, ambos rodam em engines JavaScript diferentes e tem Heaps diferentes, assim as páginas web não tem acesso direto às funções e variáveis do content script.
-
Permissions
Durante a criação da extensão (como vimos antes) são definidas uma lista de permissões no manifest referentes às WebExtensions API’s que serão usadas pelo background script. Essas API’s não poderão ser utilizadas (e a extensão não será publicada na loja, por exemplo) sem que esta lista esteja bem definida no manifest.
Esses mecanismos existem para proteger as extensões contra ataques externos e de sites e aplicações maliciosas que queiram às comprometer.
E essas permissões? O que elas fazem?
É aqui que as coisas começam a ficar interessantes, vamos começar falar sobre as permissões. Existe uma lista extensa de permissões que uma extensão pode utilizar. Abaixo temos uma lista das 30 extensões mais populares do Firefox e as permissões que elas utilizam:
Como podemos observar, temos algumas permissões comumente utilizadas, como “storage”, “tabs”, “webRequest” e “webNavigation”, cada uma com funções específicas, porém, se olharmos para as não tão comuns, conseguimos notar nomes que podem chamar a atenção, como “browsingData”, “history”, “clipboard”, “downloads” e “privacy”, para os interessados por segurança, essas permissões podem brilhar aos olhos e trazer curiosidades sobre seus funcionamentos, que tal olharmos de maneira rápida as suas funções?
- browsingData: permite às extensões limpar os dados acumulados enquanto o usuário utiliza o navegador;
- history: permite a manipulação do histórico de sessão do navegador;
- clipboard: permite às extensões copiar e adicionar dados no clipboard do usuário;
- downloads: permite às extensões interagir com o download manager dos navegadores, podendo baixar, cancelar, pausar, mostrar e abrir arquivos na máquina do usuário;
- privacy: permite o acesso e a modificação de configurações de privacidade no navegador (como redes, serviços e websites).
Baixar e abrir arquivos na máquina? Possibilidade de manipulação de histórico? Modificação de configurações de privacidade? Levemente preocupante, concorda? Aqui já é possível identificar o principal problema: o desenvolvimento de extensões maliciosas, que se aproveitam dessas permissões para coletar dados, modificar e acessar informações privadas do usuário e baixar arquivos potencialmente maliciosos são só alguns exemplos do que pode ser feito. Vale salientar que os problemas de segurança que podem surgir com o uso dessas permissões não vêm da sua existência, já que elas por definição não são necessariamente maliciosas, citando meu amigo e bússola, Felipe Azevedo: “Definir malware como software malicioso é simplista demais, o software não é por definição maligno, mas sim a intenção com o qual ele é feito e o que pode ser feito com o mesmo”.
Um problema não tão novo
O uso e desenvolvimento de extensões para cunho malicioso não é uma novidade, Threat Actors tem utilizado essa técnica em campanhas de malware com o intuito de roubar informações dos navegadores de usuários, como registrado pela MITRE ATT&CK.
Um exemplo prático, é com o malware Grandoreiro, que faz uso de uma extensão maliciosa, baixada de um servidor remoto e injetada no navegador da vítima através de uma alteração no atalho do navegador para carregar a extensão com o parâmetro “–load-extension”, como detalha a imagem a seguir:
Analisando e Demonstrando uma extensão maliciosa
Com tudo o que vimos até agora, vamos observar uma extensão maliciosa desenvolvida como uma prova de conceito para esta pesquisa. Ela tem o propósito de agir como um spyware, adquirindo informações sobre a vítima, em sua máquina, captando as teclas digitadas (keylogger) e outras funcionalidades. As imagens abaixo mostram trechos de seu código e uma breve explicação sobre eles:
Aqui podemos ver o manifest.json da extensão com suas permissões e chamadas para os background e content scripts.
A imagem acima mostra uma das funções do content script, ela é responsável por capturar as entradas de teclado digitadas pelo usuário no navegador.
Já nessa função, temos uma função responsável por percorrer o DOM da página que a vítima está visitando e renderiza-la em uma imagem png, com uso da lib html2canvas.
Por último, temos parte do background script, responsável por criar a conexão com o content e verificar as urls que a vítima visita.
Após analisado rapidamente trechos do código e funcionamento de algumas funções que nossa extensão executa, vamos ver como ela se comporta no navegador na perspectiva da vítima:
Aqui observamos o navegador da vítima com a extensão instalada e atuando.
A vítima utiliza seu navegador normalmente, sem notar diferenças nem possíveis problemas.
Já aqui, podemos ver o servidor do Atacante, recebendo seu histórico de acesso, dados sobre o sistema operacional, geolocalização, teclas digitadas e screenshots de seu navegador, todos esses dados são armazenados em logs no servidor do atacante.
Conclusão
É indescritível a importância que os navegadores têm na utilização diária do usuário. São ferramentas fundamentais e praticamente obrigatórias para o acesso às informações, notícias, vídeos de gatinhos etc. Porém, as empresas proprietárias dos websites criam mecanismos (muitas vezes obrigatórios) que limitam a experiência do usuário. Tendo em vista a vontade crescente dos usuários de ter mais controle e personalização sobre seus navegadores e sua experiência no geral na Internet, as extensões de navegadores tem ganhado mais força. Como descrito no início deste artigo, as extensões mais famosas publicadas nas lojas, tem a funcionalidade de bloquear propagandas (AdBlobcks), guardar senhas em cofres locais (PassManagers), baixar vídeos de websites (VideoDownloaders), traduzir palavras de outras línguas (Translators) etc., demonstrando, assim, a busca constante dos usuários por extensões que possam modificar a funcionalidade do navegador e lhe trazer uma experiência mais agradável ao acessar a Internet.
Vale salientar que que nunca estamos seguros uma vez que estamos on-line. Os meios que atacantes têm desenvolvido para roubar os dados de usuários e causar prejuízos vem ficando cada vez mais avançados e mais complexos de serem detectados. O uso de extensões maliciosas não é uma técnica completamente nova, mas que não é amplamente divulgada. Como citado de exemplo durante o artigo, a campanha do malware Grandoreiro (observada em 2016) que fez diversas vítimas no Brasil, México, Portugal e Espanha, utilizava uma extensão maliciosa como técnica para roubar cookies de sessão dos usuários infectados.
Com tudo o que vimos, fica o questionamento: “Como podemos mitigar um problema como esse?”. A resposta é mais simples do que parece, precisamos desenvolver mais o senso de segurança na mente da população ativa na Internet. Como fazer? Na minha pouca experiência não consigo encontrar um procedimento robusto que leve a uma solução definitiva, o que pode ser feito em curto prazo, é o uso de ferramentas (de fontes confiáveis) para verificar a segurança das extensões dos navegadores (ex.: https://browsercheck.qualys.com/) ou artigos adicionais sobre o tema e mais dicas à serem seguidas para se manter seguro (ex.: https://www.wired.com/story/how-to-audit-browser-extensions-security-chrome-firefox-edge-safari/). Mas ao aprender mais sobre como as extensões podem ser perigosas, a dica que dou para conhecidos e amigos: só instale uma extensão se for ultra mega importante. Se houver algum site que faz a mesma coisa, acesse o site, é mais seguro. A maioria dos usuários da Internet não sabem dos perigos que se pode encontrar durante a utilização, principalmente quando a fonte desses vetores maliciosos é de certa forma confiável, no nosso caso, as lojas dos navegadores. Infelizmente, quando tratamos de arquivos e programas maliciosos, é comum que os usuários contem com softwares antivírus para resolver todo seu problema, quando na verdade, nem sempre esses programas são detectados (como a extensão que desenvolvemos por exemplo), basta ao usuário se questionar se ele deve ou não instalar aquele arquivo desconhecido. Mais uma vez citando Felipe: “O melhor antivírus que existe, é o bom senso”.
Motivação & Agradecimentos
Hallo! Meu nome é Vinicius Lôbo. Sou estudante de Ciência da Computação em Recife – PE, PcD Monocular e maluco por Radiohead :P. Neste Artigo, compartilhei um pouco do conhecimento adquirido durante meus estudos como estagiário na Tempest.
Para quem já leu alguns posts aqui no Sidechannel, já deve saber que ao final do período de estágio na Tempest, especialmente do time de Consultoria Técnica, devemos desenvolver uma pesquisa e apresentar os seus resultados. Essa publicação nasceu como parte desse processo, em que realizei uma análise envolvendo extensões de navegador. Este tema foi indicado pelo mestre Jodson Leandro, que não foi apenas meu orientador técnico durante todo o processo, mas foi quem um dia me disse “Acho que esse tema combina contigo, mas talvez seja chato de desenvolver, você consegue?” e eu me senti na obrigação de aceitar esse desafio, valeu Jodinho! Live long and prosper.
Também gostaria de agradecer fortemente à Felipe Azevedo, que foi minha bússola, pessoa técnica responsável por me acompanhar durante o primeiro período de estágio e quem me ajudou muito durante o processo de desenvolvimento da extensão que foi visto neste artigo; também um grande agradecimento à Rodolfo Tavares, que foi o cara que me achou perdido na faculdade e disse “E aí? Gosta de segurança né? Agora vai ter que estudar”. Se não fosse por ele, por todo estudo que me passou e todas as dúvidas que ele tirou, possivelmente eu não estaria aqui :].
Referências
Alcorn, W., Frichot, C., and Orru, M. The Browser Hacker’s Handbook. Willey, 2014.
MDN Web Docs. Browser Extensions. Acesso em: 15 dezembro, 2022. Disponível em: <https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions>
Chrome Developers. Extensions. Acesso em: 15 dezembro, 2022. Disponível em:<https://developer.chrome.com/docs/extensions/>
Carlini, N., Porter Felt, A., and Wagner, D. ResearchGate. An Evaluation of the Google Chrome Extension Security Architecture. Acesso em 19 dezembro, 2022. Disponível em: <https://www.researchgate.net/publication/228448075_An_Evaluation_of_the_Google_Chrome_Extension_Security_Architecture>
MITRE Organization, MITRE ATT&CK. Browser Extensions. Acesso em 22 dezembro, 2022. Disponível em: <https://attack.mitre.org/techniques/T1176/>
MITRE Organization, MITRE ATT&CK. Grandoreiro. Acesso em 22 dezembro, 2022. Disponível em: <https://attack.mitre.org/software/S0531/>