Desvendando a criptografia do Firefox e resgatando senhas salvas!
Tags: security, python, programming, tutorial
Published: 2023-07-22 21:56:41


![FirefoxDecrypt](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/qwvxp7efmr6x2qme3y8k.jpg)

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:

```sh
C:/Users/<username>/AppData/Roaming/Mozilla/Firefox
```
Mac OS X El Capitan:

```sh
~/Library/Application Support/Firefox
```
Linux:

```sh
~/.mozilla/firefox
```

Ao executar em seu computador, lembre-se de substituir <username> 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:

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

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.

```sh
{
  "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"
  }
}
```
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:

```sh
nss3.dll
```

Mac OS X El Capitan:

```sh
libnss3.dylib
```

Linux:
```sh
libnss3.so
```
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:

```sh
git clone git@github.com:unode/firefox_decrypt.git
```

- Execute o código, informando o caminho para a pasta que contém os arquivos do Firefox:

```sh
python firefoxy_decrypt.py /home/higor/.mozilla/firefox/cwprco4r.default-esr

```

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

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

```

## 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