Data Protection API (DPAPI)

  1. CONCEITOS
    1. ENCRYPTING FILE SYSTEM (EFS)
    2. SECURITY ACCOUNT MANAGER (SAM)
    3. CRYPTOAPI E CNG
    4. ENTROPIA
  2. DPAPI (DATA PROTECTION API)
    1. O QUE É DPAPI?
    2. O QUE A DPAPI PROTEGE?
    3. SEGURANÇA DA DPAPI
  3. KEYS
    1. Pre Key
    2. Blob Key
    3. Master Key
      1. Estrutura da Master Key
      2. Backup e Restauração da Master Key
  4. CRIPTOGRAFIA DE DADOS NA DPAPI
  5. DESCRIPTOGRAFANDO ARQUIVOS BLOB CRIPTOGRAFADOS COM A DPAPI
    1. RECUPERANDO SENHAS DE CONEXÃO WIRELESS NO WINDOWS 7
    2. RECUPERANDO SENHAS DO FACEBOOK ARMAZENADAS NO INTERNET EXPLORER
  6. DPAPI-NG
  7. CONCLUSÃO

1. Conceitos

Os mecanismos a seguir estão relacionados a DPAPI:

1.1 Encrypting File System (EFS)

O Encrypting File System (EFS) é um “filtro” que prove encriptação a nível de sistema de arquivos no Windows que foi introduzido na versão 3.0 do NTFS. Ele é utilizado para criptografar arquivos específicos, não o volume inteiro como o BitLocker. A chave privada necessária para descriptografar arquivos EFS é encriptada no disco através da DPAPI.

Os diretórios SystemCertificates, RSA e Protect possuem o atributo Sistema definido. Isso previne que os arquivos sejam criptografados pelo EFS, o que poderia torná-los inacessíveis.

1.2 Security Accounts Manager (SAM)

O Security Accounts Manager (SAM) ou Gerenciador de Contas de Segurança é o banco de dados de senhas do Windows. Ele é armazenado como um arquivo de registro e contém hashes LM ou NTLM de senhas de usuários.

1.3 CryptoAPI e CNG

A API de Criptografia (também conhecida como CryptoAPI, Microsoft Cryptography API, MS-CAPI ou simplesmente CAPI) provê uma implementação dos principais algoritmos criptográficos (incluindo SHA1, 3DES e AES) para permitir aplicativos armazenar e usar chaves criptográficas e certificados. A DPAPI usa esta API como seu provedor de criptografia padrão.

Há atualmente duas APIs de criptografia providas pela Microsoft. A API de criptografia original foi introduzida inicialmente no Windows NT 4.0, e ainda é suportada nas versões atuais do Windows. Recentemente, a Microsoft introduziu a nova geração da API de Criptografia (CNG) com o Windows Vista; esta interface depende do serviço de isolamento CNG (keyiso) do Windows Vista e superiores, não disponível no Windows XP.

A CryptoAPI e a interface CNG no Windows permitem aos aplicativos marcarem chaves privadas como não exportáveis, prevenindo que usuários extraiam a informação da chave privada instalada no sistema.

1.4 Entropia

Uma pequena desvantagem ao usar a senha do usuário para criptografar dados é que todas as aplicações executando no mesmo contexto do usuário podem acessar qualquer informação protegida que elas conhecem. Para contra-atacar isso, a DPAPI permite a um aplicativo usar um segredo adicional ao proteger dados, chamado entropia. Este segredo adicional será necessário para desproteger os dados. Assim, a não ser que conheça o segredo adicional, um aplicativo não pode acessar dados protegidos por outro aplicativo. Esta informação é passada como um parâmetro para funções DPAPI e portanto não são armazenadas em disco.

Por exemplo, o Internet Explorer 7 – 9 usam o endereço URL como entropia ao criptografar a senha de um site e salvá-la como uma blob DPAPI. Então, para descriptografar a blob, você precisará prover o endereço da URL como um parâmetro de entropia.

2. DPAPI (Data Protection API)

A DPAPI é somente um conjunto de funções que provê aos aplicativos de usuário e ao sistema operacional mecanismos para armazenar informações confidenciais, cabendo aos aplicativos decidir onde armazenarão esta informação. As informações são criptografadas usando 3DES (Windows XP/Vista) ou AES256 (Windows 7) e a chave que não é armazenada em lugar algum do sistema operacional, tornando o mecanismo de proteção de dados confiável.

2.1 O que é DPAPI?

Iniciando com o Windows 2000, a Microsoft incorporou aos seus sistemas operacionais uma interface especial de proteção de dados, conhecida como Data Protection Application Programming Interface (DPAPI). A DPAPI é utilizada atualmente em diversos aplicativos e subsistemas do Windows. Ela tornou-se popular entre os programadores primeiramente devido a sua simplicidade de uso, por consistir somente de um conjunto de funções para criptografar e descriptografar dados, CryptProtectData e CryptUnprotectData.

Apesar de sua aparente simplicidade, a implementação técnica da DPAPI é um tanto complicada. Talvez, este é o motivo por que sua estrutura interna e princípios de operação do DPAPI estiveram ocultos por tanto tempo.

Em 2005, a Passcape Software introduziu um algoritmo que simula a operação da DPAPI. Em outras palavras, para descriptografar blobs DPAPI, não é necessário carregar o contexto do usuário; porém, é necessário possuir a senha do usuário. A descriptografia offline da DPAPI não torna o sistema mais vulnerável; ao mesmo tempo que permitirá que sistemas operacionais alternativos como o Linux e ferramentas forenses leiam arquivos criptografados, que a torna útil a pesquisadores, experts e analistas forenses.

2.2 O que a DPAPI protege?

DPAPI é utilizada para proteger os seguintes tipos de informações pessoais:

  • Senhas e dados de auto-preenchimento do Internet Explorer, Google Chrome
  • Senha de contas de e-mail do Outlook, Windows Mail, Windows Mail, etc.
  • Senhas de contas do gerenciador interno de FTP
  • Senhas de pastas e recursos compartilhados de outros computadores
  • Senhas de conexões de rede (Wireless, RAS, DSL, VPN etc.)
  • Chave de criptografia no Windows CardSpace e Windows Vault
  • Senha de conexões da área de trabalho remota, .NET Passport
  • Chaves privadas do Encrypting File System (EFS), e-mail criptogrado S-MIME, outros certificados do usuário, SSL/TLS do Internet Information Services (IIS)
  • EAP/TLS e 802.1x (VPN e autenticação WiFi)
  • Senhas de rede do Gerenciador de Credenciais, no Painel de Controle (Windows Vault).
  • Dados pessoais em qualquer aplicativo protegidos com a função CryptProtectData da API. Por exemplo, no Dropbox, Skype, Windows Rights Management Services, Windows Media, MSN messenger, Google Talk, iCloud, etc.

dpapi1

A encriptação na DPAPI é baseada na senha do usuário; portanto, informações criptografadas em uma conta não pode ser descriptografada por outra. Ainda que você consiga redefinir a senha e ganhar acesso a conta, você não será capaz de recuperar a maioria das outras senhas. Por quê? Por que a senha do usuário participa na criação da Master Key do usuário, que é usada pela DPAPI, criptografia EFS e outros subsistemas do Windows.

2.3 Segurança da DPAPI

DPAPI foi criada levando em consideração muitos aspectos em termos de segurança. Aqui vai uma lista de recursos chave que a distinguem de sistemas similares:

  • DPAPI trabalha no topo da CryptoAPI. Você pode criar seu próprio modelo de criptografia (Blowfish, AES, etc) e usá-lo com a DPAPI.
  • Tamanho de todas as chaves de criptografia em todos os algoritmos são suficientes para prevenir um possível ataque de força bruta.
  • Por razões de segurança, a validade da Master Key é limitada. Porém, a implementação possuí pontos fracos, que serão discutidos abaixo.
  • Toda a comunicação com o controlador de domínio ocorrem via uma comunicação RPC segura.
  • Dados em cache não são escritos nem no disco, nem na memória virtual.

Porém, há alguns pontos fracos, que podem enfraquecer a segurança da DPAPI:

  • CRYPTPROTECT_LOCAL_MACHINE – flag definida na função CryptProtectData, bastante conveniente em certos casos, podem de fato comprometer a informação do usuário, não provendo proteção adequada. Quando definida, a criptografia não depende da senha de logon do usuário. Por outro lado, tal comportamento não contradiz o conceito da DPAPI e é relacionada a peculiaridades da implementação da interface.
  • Toda vez que a DPAPI criptografa informações, ela procura pelo GUID da Master Key em um arquivo chamado Preferred e verifica se a Key precisa ser renovada. O tempo máximo de vida de uma Key é de três meses. Se a Key não precisa ser renovada, a DPAPI simplesmente a utiliza. Caso contrário, a DPAPI cria uma nova chave, atualiza o arquivo Preferred, e usa a chave recém-criada. O arquivo Preferred contém somente dois campos: o GUID da Master Key e a data e hora que a DPAPI utiliza para determinar quando renovar a Key. O campo de data e hora não é protegido por nenhum mecanismo HMAC e pode ser alterado arbitrariamente. Um atacante pode aproveitar esta falta de verificação para estender a vida da chave indefinidamente e assim certificar-se que eles serão capazes de descriptografar blobs DPAPI indefinidamente assim que eles conseguirem descriptografar a Key atual. Como mencionado anteriormente, o tempo máximo de vida de uma Key é de três meses.
  • A DPAPI é vulnerável a ataques online, especialmente aqueles realizados por cavalos-de-troia. A DPAPI permite aplicativos de usuário acessarem informações protegidas de forma transparente, desde que o usuário tenha logado no sistema e possua seu perfil de usuário carregado. Novamente, este comportamento é por design e permite que qualquer aplicativo executando com os privilégios do usuário, e possuindo acesso ao perfil do usuário, acessar livremente informações confidenciais em nome do usuário.

3. Keys

3.1 Pre key

Esta chave simétrica criptografada pelo algoritmo RC4 é utilizada para descriptografar a Master Key e é derivada da senha do usuário.

3.2 Blob key

Esta chave é utilizada diretamente para criptografar e descriptografar dados. Este nível de criptografia existe para permitir que cada programa adicione uma entropia, como a Google faz com o GTalk.

3.3 Master Key

Master Keys são arquivos binários criptografados com a senha do usuário (ou a senha do sistema, caso a Master Key seja do sistema) e utilizados para descriptografar informações protegidas (por exemplo: certificados EFS, MSN, Outlook, Internet Explorer, credenciais do Skype, etc).

Para preparar-se para criptografar dados de usuário, a DPAPI gera uma Master Key única para cada usuário. Assim que esta Key é gerada, a DPAPI a utiliza para criptografar e descriptografar informações de usuário todas as vezes que uma aplicação a requisita.

A Microsoft não documentou este processo, mas pesquisadores de segurança acreditam que o seguinte mecanismo é utilizado para calcular e armazenar a Master Key da DPAPI para um usuário específico:

  1. Uma Master Key é gerada – 512 bytes aleatórios.
  2. Um hash de senha é calculado na senha do usuário usando o algoritmo SHA-1.
  3. O resultado é armazenado no final do arquivo CREDHIST.
  4. O HMAC-SHA1 da Master Key Encryption Key (para validação da integridade) é calculado usando a Master Key ENcryption Key como a Key.

Por questões de segurança, Master Keys expiram. Isso significa que após um período de tempo (codificado em três meses), uma nova Master Key é gerada e será diferente da antiga devido a semente aleatória ser diferente, e possivelmente por que o usuário alterou sua senha. Esta expiração previne que um atacante, ao comprometer uma Master Key, acesse todos os dados protegidos do usuário.

Você provavelmente deve estar pensando como uma aplicação pode desproteger dados protegidos após a expiração da Master Key. A resposta envolve um processo com duas etapas. Primeiro, a DPAPI não deleta nenhuma Master Key expirada porque a DPAPI não possuí nenhum modo de saber se uma Master Key ainda é utilizada por um blob. Ao invés disso, elas são mantidas para sempre no diretório do perfil do usuário, protegidas pela senha do usuário. Segundo, cada Master Key possuí um Identificador Global Único (GUID) que é retornado aos aplicativos. A DPAPI utiliza a Master Key correspondente para desproteger os dados.

Outra questão que você deve ter é como a DPAPI acessa as Master Keys após o usuário alterar sua senha. A resposta é novamente um processo de duas etapas. Primeiro, para resolver este problema, uma solução direta seria re-encriptar todas as Master Keys com a nova senha. Porém, a Microsoft escolheu uma solução diferente que consiste em re-encriptar somente a última Master Key. Acredita-se que as razões por trás desta decisão é garantir que o usuário não esperará muito tempo após alterar sua senha, devido a re-encriptação de todas as Master Keys resultar em tempos inaceitáveis de espera. Segundo, a decisão de re-encriptar somente a última Master Key requer que todos os hashes de senhas sejam armazenados. Caso contrário, os usuários não conseguirão acessar seus dados criptografados com uma Master Key que não foi re-encriptada com a nova senha. O sistema mantém um arquivo de “Histórico de Credenciais” (CREDHIST) com todos os hashes de senhas antigas no diretório do perfil do usuário para garantir que um usuário conseguirá acessar todas as informações criptografadas com a DPAPI anteriormente. Quando um usuário altera sua senha usando ferramentas padrões e APIs do sistema operacional, a DPAPI irá automaticamente abrir o arquivo CREDHIST, descriptografar todas as Master Keys usando a senha antiga, e criptografa todas as Master Keys com a nova senha.

CREDHIST

Por outro lado, se a senha de um usuário ser alterada de uma localização remota (como um Administrador redefinindo a senha do usuário usando ferramentas administrativas) ou por um aplicativo que não usa APIs de troca de senha do sistema operacional (ex, usando chntpw), a DPAPI não será capaz de interferir no processo de mudança de senha, descriptografando e criptografando todas as Master Keys do arquivo CREDHIST. Apesar do usuário manter a habilidade de logar-se no sistema, a DPAPI não será capaz de descriptografar as Master Keys e todos os dados do usuário criptografados com a DPAPI tornam-se indisponíveis (por exemplo, chaves EFS, certificados de e-mail, etc) – isso por que seu arquivo CREHIST ainda armazena Master Keys criptografadas com a senha antiga.

definir-senha

Para garantir a segurança de informações protegidas, depois que uma senha é redefinida em uma conta de usuário local, alguns tipos de informações não podem mais ser acessadas, como:

  • Email criptografado com a chave pública do usuário
  • Senhas da Internet salvas no computador
  • Arquivos criptografados pelo usuário

A única forma de alterar a senha sem perder o acesso as informações criptografadas é definindo a senha anterior do usuário usando um disco de redefinição de senha do usuário ou usando Contas de usuário no Painel de Controle, e todas as blobs DPAPI tornam-se disponíveis novamente: isso acontece por que a DPAPI prudentemente mantém todas as cópias de Master Keys ainda que elas não possam ser descriptografadas.

3.3.1 Estrutura da Master Key

O arquivo da Master Key é um arquivo de contêiner especial, consistindo de 5 unidades:

  1. Cabeçalho e informações do sistema
  2. Master Key do Usuário
  3. Backup local da chave de criptografia
  4. Arquivo de histórico de credenciais CREDHIST
  5. Backup da Master Key do domínio

3.3.2 Backup e Restauração da Master Key

Devido a funcionalidade de restauração de senha ser essencial como parte da administração de contas de usuário do domínio, a DPAPI armazena uma cópia de backup da Master Key quando o computador é membro de um domínio com Windows Server 2003 ou superior. Quando a Master Key é gerada, a DPAPI comunica-se com o controlador de domínio. Controladores de domínio possuem um par de chaves pública/privada associadas exclusivamente com a DPAPI (Data Recovery Agent, ou DRA). O cliente DPAPI local obtém a chave pública do controlador de domínio usando uma chamada RPC mutualmente autenticada e protegida. O cliente encripta a Master Key com a chave pública do controlador de domínio. Então ele armazena um backup da Master Key além da Master Key protegida pela senha do usuário.

Ao desproteger uma informação, se a DPAPI não puder usar a Master Key protegida com a senha do usuário, ela envia o backup da Master Key ao controlador de domínio usando uma chamada RPC segura. Como todos os controladores de domínio possuem uma cópia da chave privada para o certificado de criptografia, o controlador de domínio então descriptografa o backup da Master Key com sua chave privada e a envia de volta ao cliente usando a mesma chamada RPC segura para que o cliente possa acessar dados criptografados com a DPAPI e potencialmente re-encriptar o arquivo CREDHIST. Esta chamada RPC protegida é utilizada para certificar-se que ninguém escutando na rede possa obter a Master Key.

Agora você deve estar pensando o quão bem este backup funciona com clientes do domínio, mas você também deve estar imaginando como este processo ocorre em usuários domésticos que executam sistemas stand-alone ou em grupos de trabalho.

O Windows XP possuí um novo recurso: o disco de redefinição de senha. Um usuário pode criar um disco de redefinição no Painel de controle a qualquer momento, e ele permite ao usuário redefinir sua senha e recuperar o acesso total ao sistema. Quando a nova senha é definida pelo disco de redefinição, todas as Master Keys do usuário são re-encriptadas com a nova senha.

Mas o que aconteceria se um usuário altera sua senha após o disco de redefinição de senha ser criado? Tudo ocorrerá normalmente. O processo é simples, e ao mesmo tempo, robusto. Ao criar um disco de recuperação de senha, o sistema cria um par de chaves público/privada criptografadas com RSA 2048-bit. A senha atual do usuário é criptografada usando a chave pública e armazenada na chave de registro do usuário HKEY_LOCAL_MACHINE/SECURITY/Recovery/%SID% (para Windows XP – Windows Vista) ou em HKEY_LOCAL_MACHINE/C80ED86A-0D28-40dc-B379-BB594E14EA1B (para Windows 7). De qualquer forma, o acesso a estas chaves é negado a todos os usuários do sistema, incluindo Administradores. E a chave privada é necessária para descriptografar a senha salva no registro. Se após criar o disco de redefinição de senha o usuário alterar sua senha, a nova senha é criptografada com a chave RSA pública e armazenada no registro, substituindo a antiga. Devido a chave RSA pública corresponder a chave privada armazenada no disco de redefinição, a chave pública pode ser usada a qualquer tempo para descriptografar a nova senha criada e armazenada no registro. O Windows Password Recovery pode descriptografar a senha em texto-puro do usuário quando o disco de recuperação de senha está disponível.

4. Criptografia de dados na DPAPI

A DPAPI é outro mecanismo de proteção de dados não publicado para a comunidade de segurança. Mesmo assim, acredita-se que as informações a seguir estejam corretas. Se um aplicativo requisitar encriptação de dados DPAPI, acredita-se que a informação a seguir é correta:

  1. Quando aplicativos requisitam o uso da DPAPI, eles normalmente chamam a função CryptProtectData(), especificando a informação a ser criptografada e um parâmetro opcional de entropia. Se a entropia não é especificada, qualquer programa no contexto atual do usuário pode descriptografar a informação ao obter acesso físico ao DPAPI blob.
  2. A função CryptProtectData() pertence a família CryptoAPI e está localizada no arquivo Crypt32.dll. De lá, a requisição é processada e enviada via um canal RPC local seguro ao processo do sistema Local Security Authority (LSA), e o contexto do usuário é trocado para o do sistema. Todas as manipulações subsequentes são realizadas no contexto do sistema local. Estas chamadas RPC locais nunca atravessam a rede, então todos os dados continuam no computador local.
    1. A DPAPI extraí a Master Key atual do arquivo CREDHIST usando a senha atual do usuário (a operação continua até que a Master Key seja descriptografada ou que todas as credenciais do histórico de credenciais sejam utilizadas) e segue o processo de criptografia da Master Key, mas descriptografando ao invés de criptografando.
    2. O hash da etapa anterior é combinada com uma entropia (opcional) e a senha do usuário. Esta etapa resulta em uma Session Key.
    3. A informação em texto-puro é criptografada usando o Protocolo 3DES (Windows XP/Vista) ou AES256 (Windows 7) com a Session Key.
    4. A hash do texto-puro é gerada com HMAC-SHA-1 usando a mesma Session Key.
    5. A função retorna uma blob criptografada que o aplicativo pode armazenar em qualquer lugar; a blob inclui a informação criptografada do usuário, o HMAC das informações do usuário para validação da integridade, e o GUID da Master Key.
  3. No LSA, informação é encriptada e enviada de volta a Crypt32.dll via o canal RPC local seguro; de lá, a informação retorna ao aplicativo original.

dpapi-2

A descriptografia DPAPI funciona da maneira inversa: a aplicação do usuário somente envia a blob criptografada e, como resultado, recebe o texto-puro. A descriptografia do conteúdo de uma blob DPAPI possuí 5 etapas:

  1. Extrair o GUID da Master Key da estrutura de dados da blob.
  2. Usar o GUID da Master Key para encontrar o arquivo da Master Key relacionado. Se a blob foi encriptada com uma das senhas anteriores do usuário, então o CREDHIST precisará ser descriptografado e a SHA1 correta deverá ser extraída do CREDHIST.
  3. Usar o SHA1 correto para calcular a Pre key que foi utilizada para criptografar a Master Key.
  4. Usar a Pre key para descriptografar a Master Key.
  5. Calcular a Blob key (para validação de integridade) usando uma versão levemente modificada do HMAC.

Para evitar o pedido de senhas toda vez que as funções CryptProtectData / CryptUnprotectData são chamadas, o Windows armazena em cache a senha do usuário e a armazena nas profundezas do LSA durante a sessão do usuário. Por isso, a DPAPI funciona exclusivamente online, somente quando o usuário realiza logon no sistema.

5. Descriptografando arquivos blob criptografados com a DPAPI

Selecione o arquivo blob criptografado com a DPAPI

Você deve especificar o SID do usuário e senha de logon do usuário para descriptografar dados criptografados pela DPAPI. Porém, algumas DPAPI criptografadas pela conta SISTEMA, requer credenciais do computador. Neste caso, você precisará prover os arquivos de registro SYSTEM e SECURITY. Arquivos opcionais de entropia são necessários quando a blob é criada usando entropia.

dpapi_decrypt1

No primeiro passo, especifique o local do arquivo com a blob DPAPI. De fato, a DPAPI não provê um armazenamento protegido para objetos, não restringindo aplicações dos usuários em termos de local de armazenamento de qualquer tipo de informação. No Windows, blobs DPAPI podem ser armazenadas em qualquer lugar: em arquivos de texto ou binário, banco de dados, registro, Active Directory, etc. Há uma ferramenta especial para localizar, extrair e salvar blobs DPAPI para arquivos. Com esta ferramenta, por exemplo, você pode salvar todas as blobs DPAPI do registro de um usuário para arquivos individuais e usá-las no programa. Para poder descriptografar dados, você precisará configurar o diretório Windows do drive de destino.

Abaixo estão algumas localizações para alguns objetos DPAPI.

  • Senhas do Internet Explorer e do Outlook, senhas WiFi (somente XP): registro do usuário, %APPDATA%\ntuser.dat
  • Google Chrome: %LOCALAPPDATA%\Google\Chrome
  • Senhas WiFi (Windows Vista e superiores): %PROGRAMDATA%\Microsoft\Wlansvc
  • Senhas de conexões de rede (Gerenciador de Credenciais do Windows): %LOCALAPPDATA%\Microsoft\Credentials ou %APPDATA%\Microsoft\Credentials
Selecione a Master Key

dpapi_decrypt2

  • Master Keys de usuários são criptografadas automaticamente pelo serviço de Armazenamento protegido e são armazenadas em %UserProfile%\AppData\Roaming\Microsoft\Protect\%SID%. Por exemplo, C:\Users\John\AppData\Roaming\Microsoft\Protect\S-1-5-21-2893984454-3019278361-1452863341-1003, e %SID% é o identificador de segurança do usuário. Para um usuário de domínio que possuí perfil Roaming, a Master Key reside no Controlador de domínio e é baixada para o perfil do usuário no computador local até que o computador seja reiniciado.
  • A DPAPI provê criptografia a nível de máquina, que é compartilhada com todos os usuários do computador e não usam um perfil de usuário particular. Master Keys do sistema são armazenadas em %WINDIR%\System32\Microsoft\Protect e são usadas para descriptografar blobs DPAPI. Todas as blobs DPAPI criadas com a flag CRYPTPROTECT_LOCAL_MACHINE na função CryptProtectData são protegidas com Master Keys do sistema, que usam a senha da conta de computador local (sim, o computador possuí uma conta), que é armazenada no LSA secret chamado DPAPI_SYSTEM, necessário para descriptografar Master Keys do sistema e descriptografar blobs do sistema.

Deve ser notado que existem diversas Master Keys, e somente uma delas é adequada para descriptografar um certo objeto (a que possuí o nome armazenado dentro da blob DPAPI). Ao procurar por uma Master Key, o programa poderá filtrar nomes desnecessários. O diretório %APPDATA%\Microsoft\Protect também contém o arquivo CREDHIST, que é opcional e na maioria dos casos não é necessário para descriptografia.

Descriptografando a Master Key

dpapi_decrypt3

Ao menos dois parâmetros devem ser especificados para descriptografar a Master Key do usuário: a senha de logon do usuário e seu identificador de segurança (SID), que é normalmente especificado no diretório da Master Key ou no arquivo CREDHIST. De uma forma ou de outra, o Windows Password Recovery obtém o SID do usuário automaticamente.

Para descriptografar uma Master Key do sistema, como dito anteriormente, definir uma senha não faz sentido, já que o programa obtém todas as informações necessárias para recuperá-la de dois arquivos do registro: SYSTEM e SECURITY. Esta é uma peculiaridade da implementação da DPAPI e não um bug.

Se uma entropia adicional foi utilizada ao criar a blob DPAPI, você precisará criar manualmente o arquivo binário de entropia e especificar o caminho para ele. Por exemplo, ao criptografar senhas, o Internet Explorer usa o nome UNICODE do site como entropia.

Iniciando com a versão 9.7, o Windows Password Recovery utiliza algumas novas vulnerabilidades na proteção da DPAPI Master Key revelada pela própria empresa. Assim, para descriptografar uma Master Key de um usuário do domínio, a senha de logon não é necessária.

Descriptografando informações

dpapi_decrypt4

Tendo em mãos o necessário, o Windows Password Recovery realiza a descriptografia das informações da blob DPAPI, que você pode copiar para a área de transferência ou salvar para um arquivo.

Recuperando senhas de conexão Wireless no Windows 7

Para descriptografar senhas de conexão Wireless, nós precisamos localizar os respectivos blobs DPAPI no diretório C:\Program Data\Microsoft\Wlansvc.

Senhas de conexão de rede Wireless são protegidas pela flag CRYPTPROTECT_LOCAL_MACHINE, então para recuperá-las precisamos da Master Key do sistema no diretório C:\Windows\System32\Microsoft\Protect\S-1-5-18\User (S-1-5-18 é o SID do sistema).

Nós não precisamos da senha do usuário. Ao invés disso, precisamos de dois arquivos de registro, SYSTEM e SECURITY para finalizar a descriptografia e obter a senha de conexão Wireless em texto plano no Windows 7.

Outros pesquisadores, como a Nir Sofer, oferecem ferramentas que permitem descriptografar segredos específicos.

Recuperando senhas do Facebook armazenadas no Internet Explorer

Para descriptografar a senha do Facebook, nós precisamos definir corretamente três parâmetros: o SID do usuário, a senha de logon do usuário e a entropia que a blob DPAPI foi criptografada. O programa normalmente extraí o SID do usuário automaticamente do diretório da Master Key. Se isto não aconteceu, você precisará obter este parâmetro manualmente (por exemplo, analisando o arquivo CREDHIST). A senha da conta do usuário é obrigatória. Mas o que fazer em relação a entropia?

dpapi9

Você precisará criar manualmente um arquivo binário com informações de entropia e informar o caminho para o arquivo no programa. Se você possuí um editor HEX e conhecimento suficiente para trabalhar confortavelmente nele, você pode tentar criar o segredo manualmente. Caso contrário, você pode baixá-lo aqui.

DPAPI-NG

DPAPI era problemática para atacantes e analistas forenses devido a dados DPAPI somente poderem ser descriptografados no sistema e sob a conta que eles foram criptografados.

Porém, com o lançamento do Windows 8, a Microsoft mudou esta situação lançando uma nova-geração da DPAPI chamada (advinha!) DPAPI-NG. A principal mudança é que dados DPAPI de um computador podem ser descriptografados em outro, funcionalidade necessária para trabalhar em nuvem (sincronização de dados) – mas, de acordo com a Microsoft, “somente após autenticação e autorização apropriadas“.

Conclusão

Em um ataque offline o atacante precisa executar ataques de força bruta (ou adivinhar) a senha do usuário e obter o seu hash, então uma senha “forte” definitivamente é a primeira linha de defesa eficiente.

Muitas tentativas foram realizadas por vários times open-source na esperança de prover compatibilidade completa com o Windows e suporte completo ao NTFS. Porém, nenhum time foi capaz de completar uma implementação totalmente funcional. Assim, até a DPAPI ser totalmente compreendida, não há esperanças de uma implementação completa do sistema de arquivos NTFS devido a chaves privadas do EFS não poderem ser descriptografadas. Sem uma re-implementação, camadas de compatibilidade como o Wine não serão capazes de suportar completamente aplicativos base do Windows como o Internet Explorer, por que eles não podem acessar informações protegidas como preenchimento automático de senha.


Referências

  1. Inside Win2K NTFS, Part 2 – Windows IT Pro – http://www.windowsitpro.com/Articles/Index.cfm?ArticleID=15900
  2. EFS, Credentials, and Private Keys from Certificates Are Unavailable After a Password Is Reset – Microsoft Support – https://support.microsoft.com/en-us/kb/290260
  3. .net – How to export non-exportable private key from store – Stack Overflow – http://stackoverflow.com/questions/3914882/how-to-export-non-exportable-private-key-from-store
  4. Certificate Store Migration – MSDN – http://msdn.microsoft.com/en-us/library/windows/desktop/bb204781(v=vs.85).aspx
  5. Public Key Certificate Locations in Windows – Citrix Blogger – http://citrixblogger.org/2010/09/13/public-key-certificate-locations-in-windows/
  6. How Private Keys Are Stored – Microsoft TechNet – http://technet.microsoft.com/en-us/library/cc962112.aspx
  7. Encrypted File System Recovery – Beginning to see the light – http://www.beginningtoseethelight.org/efsrecovery/index.htm
  8. Chapter 6 – Digital Certificates – Microsoft TechNet  – https://technet.microsoft.com/library/Dd361898
  9. Internet Explorer – “The associate private key cannot be found” error and “certutil -repairstore” failure with Windows certificate and key files? – ServerFault – http://serverfault.com/questions/695532/the-associate-private-key-cannot-be-found-error-and-certutil-repairstore-fa
  10. How can we rely on ‘do not allow private key export’ – Windows Server-Security Forum – Microsoft Social TechNet – https://social.technet.microsoft.com/Forums/windowsserver/en-US/4493b001-d908-4397-b860-2206d5cbf85f/how-can-we-rely-on-do-not-allow-private-key-export
  11. Managing trust of third-party certification authorities – Microsoft TechNet – https://technet.microsoft.com/en-us/library/cc759284(v=ws.10).aspx
  12. Automatic updating of trusted root authorities – Microsoft TechNet – https://technet.microsoft.com/en-us/library/cc787832(v=ws.10).aspx
  13. Certificate Authority Trust Model – Citrix Blogger – https://citrixblogger.org/2010/09/09/certificate-authority-trust-model/
  14. appsec – How can I enumerate all the saved RSA keys in the Microsoft CSP? – Information Security Stack Exchange – http://security.stackexchange.com/questions/1771/how-can-i-enumerate-all-the-saved-rsa-keys-in-the-microsoft-csp
  15. What Does USMT Migrate? – Microsoft TechNet  –https://technet.microsoft.com/en-us/library/hh825238.aspx
  16. Decrypting DPAPI data – Jean-Michel Picod, Elie Bursztein
    EADS, Stanford University – https://www.blackhat.com/presentations/bh-dc-10/Picod_Jean-Michel/BlackHat-DC-2010-Picod-DPAPI-slides.pdf
  17. Recovering Windows Secrets and EFS Certificates Offline – Jean-Michel Picod, Elie Bursztein
    EADS, Stanford University – https://www.usenix.org/legacy/event/woot10/tech/full_papers/Burzstein.pdf
  18. How can I mitigate the threat that DPAPick poses to my DPAPI protected data? – Information Security Stack Exchange – http://security.stackexchange.com/questions/2243/how-can-i-mitigate-the-threat-that-dpapick-poses-to-my-dpapi-protected-data
  19. Don’t let paranoia over the NSA and TPM weaken your security – ZDNet – http://www.zdnet.com/article/dont-let-paranoia-over-the-nsa-and-tpm-weaken-your-security/
  20. Happy DPAPI! – Zena Forense – http://blog.digital-forensics.it/2015/01/happy-dpapi.html
  21. Windows Data Protection – MSDN – https://msdn.microsoft.com/en-us/library/ms995355.aspx
  22. Mechanics of User Identification and Authentication: Fundamentals of Identity Management – Dobromir Todorov – https://books.google.com.ar/books?id=eIPA4v0u05EC&pg=PA201&lpg=PA201&dq=DPAPI+%22%5CMicrosoft%5CCrypto%5CRSA%22&source=bl&ots=gvWYCg_Nje&sig=6yYraP7ZseuXNJAMUF-YOU3rjhU&hl=es-419&sa=X&ei=CukyU–yHYLekQe85IGwBg#v=onepage&q=DPAPI%20%22%5CMicrosoft%5CCrypto%5CRSA%22&f=false
  23. DPAPI Secrets. Security analysis and data recovery in DPAPI (Part 1) – Passcape Software – http://www.passcape.com/index.php?section=blog&cmd=details&id=20
  24. DPAPI Secrets. Security analysis and data recovery in DPAPI (Part 2) – Passcape Software – http://www.passcape.com/index.php?section=blog&cmd=details&id=21
  25. DPAPI-NG – Passcape Software – http://www.passcape.com/index.php?section=blog&cmd=details&id=26
  26. Exporting Non-Exportable RSA Keys – NCC Group – https://www.nccgroup.trust/globalassets/our-research/uk/whitepapers/exporting_non-exportable_rsa_keys.pdf
  27. Microsoft CryptoAPI – Wikipedia, The Free Encyclopedia – https://en.wikipedia.org/wiki/Microsoft_CryptoAPI
  28. Export non-exportable private keys from Windows key store – Apuntes de root – https://apuntesderootblog.wordpress.com/2014/12/16/export-non-exportable-private-keys-from-windows-key-store/
  29. Recovering domain cached passwords – Passcape Software –  http://www.passcape.com/index.php?section=blog&cmd=details&id=4
  30. Sysinternals Autlogon and encrypting passwords – Keith’s Consulting Blog – https://keithga.wordpress.com/2013/12/19/sysinternals-autologon-and-securely-encrypting-passwords/
Anúncios

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s