DEV Community

Higor Diego
Higor Diego

Posted on

Desvendando a criptografia do Firefox e resgatando senhas salvas!

FirefoxDecrypt

Quem nunca aproveitou aquela funcionalidade incrível do navegador para economizar tempo e evitar o estresse de lembrar todas as senhas dos diversos sites em que estamos cadastrados? Com tantos perfis diferentes para gerenciar atualmente, essa comodidade se tornou uma verdadeira mão na roda!

No entanto, é normal que surjam algumas dúvidas sobre a segurança desse processo, afinal, estamos confiando informações sensíveis nas mãos do navegador. Mas não se preocupe, vamos desvendar juntos como o Firefox lida com esse aspecto tão importante.

Neste artigo, mergulharemos mais fundo no funcionamento do Firefox e como ele armazena nossas senhas. Será que essa prática é realmente segura? Vamos entender melhor como nossos dados são tratados e, assim, nos sentirmos mais tranquilos ao utilizar essa comodidade do navegador.

Encontrando o local de armazenamento

Nesta seção, vamos descobrir onde fica a pasta que armazena os dados do Firefox no seu perfil padrão. Esse local pode variar dependendo da sua plataforma. Confira abaixo os caminhos:

Windows:

C:/Users/<username>/AppData/Roaming/Mozilla/Firefox
Enter fullscreen mode Exit fullscreen mode

Mac OS X El Capitan:

~/Library/Application Support/Firefox
Enter fullscreen mode Exit fullscreen mode

Linux:

~/.mozilla/firefox
Enter fullscreen mode Exit fullscreen mode

Ao executar em seu computador, lembre-se de substituir pelo nome de usuário da sua máquina. Essas informações serão úteis para o processo de recuperação das senhas, que veremos em detalhes adiante.

Agora, entrando na pasta específica, iremos listar os conteúdos para identificar o arquivo importante para a nossa ação:

└─$ cd cwprco4r.default-esr && ls -lah 
...
-rw-r--r--  1 higor higor 2,5K jul 22 09:30 logins.json
...
Enter fullscreen mode Exit fullscreen mode

Acima temos o arquivo importante para nossa ação o restante dos arquivos que contêm nessa pasta não são importantes para ação desse artigo.

Realizando um comando de leitura como cat logins.json, iremos ter a seguinte a saída.

{
  "nextId": 3,
  "logins": [
    {
      "id": 1,
      "hostname": "chrome://FirefoxAccounts",
      "httpRealm": "Firefox Accounts credentials",
      "formSubmitURL": null,
      "usernameField": "",
      "passwordField": "",
      "encryptedUsername": "MEIEEPgAAAAAAAAAAAAAAAAAAAEwFAYJITKoZIhvcNabAwcE7x8cECOMFrk7xgPbEBBjqYBBzCDYxqHeHziM1jV/M7lzxfYpY3os=",
      "encryptedPassword": "MIIDdAQQ+AAAAAAAAAAAAAAAAAAAATAUBggqhkiG9w0gc2aae45DBwQISyY0ItSG+VQEgat1gNIkM7/xitAyu7BaD8YvkZ3GUfbfsUxGkTJyZwKFyQVjnwVlBgUmrC84lSycKkzdoeDsX2VFQoka90izrJ7gwxSlCbXX8DotPYjNGZEjIOKuODsxbXHEen7m/UIh0UqkKKtkQeU9OxG3vViGrPJgZs2kLpJtpX3YEVGbgHig6orJtZtjfkSfB2CTpaSsGDHJBsKwFt1wUYOp8NdQPndrRcTZ3kF9if93rDhfxlgkpePGYYl3NkgQIu6jJ76hOLYeEh0Mm7mCIHa/jiKwUHtU6xVxc3OMX0BY/E0jCeN6NMuxC44HgPhjkKqMGaKBNxp/SdMO7a2L3dPw0pndkKhx5XweylFU4KBcrRJSWzAPbHsRQ5gOg4umn6R+idKJpp3UbBovlte4fWOJyk+2hSLabKdHvOX82D5Hbg03ThOI62uXyVsAqmAxgLUsIAh9kRxA2MyfwnD5OVF4lBCQzEmPVTGfs8mi196WxYXJekC2Bn4ARH1rZlJo7c6bsGBcw5dRx5QqGmOrYYhSUr1+B9onLV+Ja1n+G8dNXGq3803+nSAcLZOBzq3YxB0+dJ/o4S9M+jNZChnDiJ3LF2JXIqKY5MnIw7sFrI0y1YTvEUWeVrGAGh3vDqBVOtlznx7G4VdX92nGjwuHDfH07QDXplVYbjthIvRN6Ykm+MLGoTY84kWuGkqpczeXtUQp3P5/JziUVCePdoaJhwU4JATpNXy25PNcgprW2SFQ4L/jCJ3L9JL9P+XRSZ3nVzDqm+xVLqWQVmda1fDWAAkmRmzPaDF+M5hXTM4NVJy8DbLrQislKsBWcw1GUCZNe0ja4019vXkUqV0LhAa7EnoidgoxBPVCUw0/37/2lAGURMdo5Q6dujWtku6fMhlsr7SVtVTaxnK9jZnkhqb2H8qhW4aoajHeym9EpKYKsqlraragGT8Cn7NmQs7BTicEQwvOYP+oUEFAcXYIX1yE/3zmQSH29QfkeobX1PcwaIRuct6hf8IG13TjOQe/K5k6UJep9XTEpUpfW7dWcipRLnXKXK+pSBwpj1WYHpYG7+qdSmf/85YiexedTWk5px/9DyH1RlqH7UT4Uern4ynEOBJcys9InNFGRiBhvQtvXclBanP",
      "guid": "{a2eb5150-685d-4615-a254-1c5dd58bee56}",
      "encType": 1,
      "timeCreated": 1689961688625,
      "timeLastUsed": 1689961688625,
      "timePasswordChanged": 1689961698732,
      "timesUsed": 1
    },
    {
      "id": 2,
      "hostname": "https://example.website.net",
      "httpRealm": null,
      "formSubmitURL": "https://example.website.net",
      "usernameField": "EmailAddress",
      "passwordField": "Password",
      "encryptedUsername": "MEIEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcE7x8cECOMFrk7xgPbEBBjqYBBzCDYxqHeHziM1jV/M7lzxfYpY3os=",
      "encryptedPassword": "MFIEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcvcrBCiECFZc/kfDKvcrBCinGLow37uiKmg7K83IUGntneBODTMeV1jMrg95p3sCQzSknnBdG2ef",
      "guid": "{f0459b50-b0fe-4512-a085-e94e72319579}",
      "encType": 1,
      "timeCreated": 1687392175539,
      "timeLastUsed": 1689971142811,
      "timePasswordChanged": 1687392175539,
      "timesUsed": 2
    }
  ],
  "potentiallyVulnerablePasswords": [],
  "dismissedBreachAlertsByLoginGUID": {},
  "version": 3,
  "sync": {
    "lastSync": 1689961704.49,
    "syncID": "MDoEEPgAAoZIhvcNAwAAAAAAAAAAA03210x,mmmAAAAAoZIhvcNAwEwFAYIKoZIhvcNAwcECD42iieWPdOhBBAjVsIqtcbz7b/ttYPhb2D0ZI63"
  }
}
Enter fullscreen mode Exit fullscreen mode

Esse arquivo contém as informações necessárias para recuperarmos as senhas salvas no navegador.

Identificação de criptografia e biblioteca de segurança

Para garantir a segurança, o nome de usuário e senha são criptografados usando um padrão de criptografia chamado PKCS #11 (Public-Key Cryptography Standards #11). Esse padrão define uma interface padrão para acessar dispositivos criptográficos, como cartões inteligentes e tokens USB, tornando as operações criptográficas seguras e protegendo informações sensíveis.

O Firefox adota esse padrão por meio da biblioteca NSS, que possui diferentes nomes dependendo do sistema operacional:

Windows:

nss3.dll
Enter fullscreen mode Exit fullscreen mode

Mac OS X El Capitan:

libnss3.dylib
Enter fullscreen mode Exit fullscreen mode

Linux:

libnss3.so
Enter fullscreen mode Exit fullscreen mode

Essas bibliotecas são essenciais para o processo de descriptografia das senhas.

Descriptografando as Senhas

Agora, vamos ao passo de descriptografia! Para isso, precisamos seguir os seguintes passos:

  • Clone o repositório contendo o código necessário para a descriptografia:
git clone git@github.com:unode/firefox_decrypt.git
Enter fullscreen mode Exit fullscreen mode
  • Execute o código, informando o caminho para a pasta que contém os arquivos do Firefox:
python firefoxy_decrypt.py /home/higor/.mozilla/firefox/cwprco4r.default-esr

Enter fullscreen mode Exit fullscreen mode

O resultado esperado será a exibição das informações das senhas salvas no navegador:

Website:   https://example.website.net
Username: 'higor@gmail.com'
Password: 'teste#123'

Enter fullscreen mode Exit fullscreen mode

Conclusão

Guardar senhas no navegador pode ser extremamente prático, economizando tempo e esforço na hora de acessar nossas contas. No entanto, é fundamental ser cuidadoso e seguir boas práticas de segurança. Evite usar computadores públicos para acessar contas importantes e nunca compartilhe suas senhas com terceiros.

Espero que este artigo tenha sido útil e informativo!

Continue nos acompanhando para mais conteúdos sobre tecnologia, segurança cibernética e outros assuntos interessantes.

Até a próxima!

Referências

https://medium.com/geekculture/how-to-hack-firefox-passwords-with-python-a394abf18016

Top comments (0)