Kaspersky tem um gerador de senha?

A senha que está sendo construída é convertida em minúsculas. As não letras são removidas. Então, há uma iteração no senha em vez da senha minúscula acabou de ser criada. Isso leva a um cálculo errado da variável de índice (a posição de uma letra no alfabeto). Este índice é usado para recuperar um elemento de uma matriz. Isso leva a uma leitura fora dos limites desta matriz.

Gerenciador de senhas de Kaspersky: todas as suas senhas são pertencentes a nós

O gerador de senha incluído no Kaspersky Mastren Manager teve vários problemas. O mais crítico é que ele usou um prng não adequado para fins criptográficos. Sua única fonte de entropia foi a hora atual. Todas as senhas criadas podem ser forçadas em segundos. Este artigo explica como gerar senhas com segurança, por que o Kaspersky Password Manager falhou e como explorar essa falha. Ele também fornece uma prova de conceito para testar se sua versão estiver vulnerável.

O produto foi atualizado e suas versões mais recentes não são’t afetado por este problema.

Introdução

Dois anos atrás, vimos o Kaspersky Password Manager (KPM), um gerenciador de senhas desenvolvido por Kaspersky. Kaspersky Mastren Manager é um produto que armazena senhas e documentos com segurança em um cofre criptografado, protegido por uma senha. Este cofre está protegido com uma senha mestre; portanto, como em outros gerentes de senha, os usuários precisam lembrar uma única senha para usar e gerenciar todas as suas senhas. O produto está disponível para vários sistemas operacionais (Windows, MacOS, Android, iOS, Web …), os dados criptografados podem ser sincronizados automaticamente entre todos os seus dispositivos, sempre protegidos por sua senha mestre.

A principal funcionalidade do KPM é o gerenciamento de senhas. Um ponto -chave com os gerentes de senha é que, ao contrário dos seres humanos, essas ferramentas são boas para gerar senhas aleatórias e fortes. Para gerar senhas seguras, o Kaspersky Password Manager deve confiar em um mecanismo de geração de senha segura. Primeiro, veremos um exemplo de um bom método de geração de senha, para explicar depois de o método usado por Kaspersky foi falho e como exploramos. Como veremos, as senhas geradas por esta ferramenta podem ser forçadas em segundos.

Depois de um pouco menos de dois anos, essa vulnerabilidade foi corrigida em todas as versões de KPM. .

Gerando senhas robustas de um charset

Por uma questão de simplicidade, vamos’s Estudo como as senhas são geradas no Keepass, um projeto de código aberto. A geração de senha é implementada em várias classes no keepasslib.Criptografia.Namespace de senha do sedorador. Keepass fornece 3 métodos para gerar uma senha: um método baseado em charset, um padrão baseado em padrões e um geração personalizada.

O método mais simples é o gerador de base de charset, que cria uma senha de um determinado charset. Vamos ver como funciona. Aqui está o loop principal responsável pela geração de senha:

Pwcharset pcs = novo pwcharset (pwprofile.CHARST.Para sequenciar());
se(!Pwgenerator.PreparCharset (PCS, PWProfile))
Retorne pwgerror.Invalidcharset;
char [] v = novo char [pwprofile.Comprimento];
tentar
{
para (int i = 0; i < v.Length; ++i)
{
char ch = PwGenerator.GenerateCharacter(pcs, crsRandomSource);
if(ch == char.MinValue)
return PwgError.TooFewCharacters;
v[i] = ch;
if(pwProfile.NoRepeatingCharacters)
pcs.Remove(ch);
}
}

O método Generatecharacter é chamado para gerar todos os caracteres da senha. É preciso um charset e uma fonte aleatória e produz um caractere aleatório do charset. Sua implementação é bastante direta:

Char estático interno GenerateCharacter (PWCharset pwcharset, criptondomstream Crsrandomsource)
{
uint cc = pwcharset.Tamanho;
if (cc == 0)
Retornar char.Minvalue;
uint i = (uint) crsrandomsource.GetRandomuint64 (CC);
retornar PWCharset [i];
}

1. Como o gerador de senha do Kaspersky Password Manager falhou?

O gerador de senhas do Kaspersky Mastren Manager falhou porque usou um PRNG (gerador de números pseudo-aleatórios) que não era adequado para fins criptográficos. Ele se baseou apenas no horário atual como fonte de entropia, facilitando a força bruta das senhas geradas.

2. Por que é importante gerar senhas seguras?

A geração de senhas seguras é importante porque as senhas fracas são facilmente adivinhadas e podem ser comprometidas pelos atacantes. Senhas fortes e aleatórias fornecem melhor segurança para contas on -line e ajudam a proteger informações confidenciais do acesso não autorizado.

. Como o método de geração de senha defeituosa no Kaspersky Password Manager explorouit?

O método de geração de senha defeituosa no Kaspersky Mastren Manager permitiu uma facilidade de forçante bruta das senhas geradas devido à falta de entropia adequada. Ao usar um PRNG baseado apenas no horário atual, tornou -se possível prever e adivinhar com precisão as senhas, tornando -as vulneráveis ​​ao ataque.

4. Qual é o número CVE atribuído à vulnerabilidade no Kaspersky Mastren Manager?

A vulnerabilidade no Kaspersky Password Manager recebeu o número CVE-2020-27020.

5. Como as senhas são geradas em Keepass?

As senhas são geradas no Keepass usando vários métodos, incluindo um gerador baseado em charset. Este método cria senhas com base em um determinado charset, garantindo que as senhas geradas contenham uma mistura de caracteres do conjunto especificado.

6. Qual é o objetivo da classe PWCharset em Keepass?

A classe PWCharset em Keepass é usada para definir e gerenciar conjuntos de caracteres que podem ser usados ​​na geração de senha. Ele permite personalização e controle sobre os caracteres incluídos nas senhas geradas.

7. Como o método Generatecharacter funciona em Keepass?

O método Generatecharacter em Keepass pega um charset e uma fonte aleatória como parâmetros de entrada e retorna um caractere aleatório do charset especificado. Ele garante que o caractere gerado seja selecionado aleatoriamente no conjunto fornecido de caracteres.

8. O que acontece se o conjunto de personagens estiver vazio em Keepass?

Se o conjunto de caracteres estiver vazio em Keepass, o método Generatecharacter retornará o valor do valor.Minvalue. Isso indica que não há caracteres disponíveis no charset especificado e pode resultar em um erro no processo de geração de senha.

9. Como o gerador de senhas no Kaspersky Manager Manager lidou com caracteres que não são de letras?

O gerador de senha no Kaspersky Mastren Manager converteu a senha que está sendo construída para os caracteres minúsculos e removidos sem letras. Esse processo fazia parte da metodologia defeituosa usada pelo gerador, o que acabou levando à vulnerabilidade que permitia fácil forçar bruto das senhas.

10. Tem a vulnerabilidade no Kaspersky Password Manager?

Sim, a vulnerabilidade no Kaspersky Password Manager foi corrigida em todas as versões. As versões mais recentes do produto não são afetadas por este problema.

Kaspersky tem um gerador de senha?

A senha que está sendo construída é convertida em minúsculas. As não letras são removidas. Então, há uma iteração no senha em vez da senha minúscula acabou de ser criada. Isso leva a um cálculo errado da variável de índice (a posição de uma letra no alfabeto). Este índice é usado para recuperar um elemento de uma matriz. Isso leva a uma leitura fora dos limites desta matriz.

Gerenciador de senhas de Kaspersky: todas as suas senhas são pertencentes a nós

O gerador de senha incluído no Kaspersky Mastren Manager teve vários problemas. O mais crítico é que ele usou um prng não adequado para fins criptográficos. Sua única fonte de entropia foi a hora atual. Todas as senhas criadas podem ser forçadas em segundos. Este artigo explica como gerar senhas com segurança, por que o Kaspersky Password Manager falhou e como explorar essa falha. Ele também fornece uma prova de conceito para testar se sua versão estiver vulnerável.

O produto foi atualizado e suas versões mais recentes não são&rsquo;t afetado por este problema.

Introdução

Dois anos atrás, vimos o Kaspersky Password Manager (KPM), um gerenciador de senhas desenvolvido por Kaspersky. Kaspersky Mastren Manager é um produto que armazena senhas e documentos com segurança em um cofre criptografado, protegido por uma senha. Este cofre está protegido com uma senha mestre; portanto, como em outros gerentes de senha, os usuários precisam lembrar uma única senha para usar e gerenciar todas as suas senhas. O produto está disponível para vários sistemas operacionais (Windows, MacOS, Android, iOS, Web ...), os dados criptografados podem ser sincronizados automaticamente entre todos os seus dispositivos, sempre protegidos por sua senha mestre.

A principal funcionalidade do KPM é o gerenciamento de senhas. Um ponto -chave com os gerentes de senha é que, ao contrário dos seres humanos, essas ferramentas são boas para gerar senhas aleatórias e fortes. Para gerar senhas seguras, o Kaspersky Password Manager deve confiar em um mecanismo de geração de senha segura. Primeiro, veremos um exemplo de um bom método de geração de senha, para explicar depois de o método usado por Kaspersky foi falho e como exploramos. Como veremos, as senhas geradas por esta ferramenta podem ser forçadas em segundos.

Depois de um pouco menos de dois anos, essa vulnerabilidade foi corrigida em todas as versões de KPM. A vulnerabilidade foi atribuída CVE-2020-27020.

Gerando senhas robustas de um charset

Por uma questão de simplicidade, vamos&rsquo;s Estudo como as senhas são geradas no Keepass, um projeto de código aberto. A geração de senha é implementada em várias classes no keepasslib.Criptografia.Namespace de senha do sedorador. Keepass fornece 3 métodos para gerar uma senha: um método baseado em charset, um padrão baseado em padrões e um geração personalizada.

O método mais simples é o gerador de base de charset, que cria uma senha de um determinado charset. Vamos ver como funciona. Aqui está o loop principal responsável pela geração de senha:

Pwcharset PCs = novo (PWProfile.CHARST.Para sequenciar()); se(!Pwgenerator.PreparCharset(PCs, PWProfile)) retornar Pwgerror.; Caracteres[] v = novo Caracteres[[PWProfile.Comprimento tentar  para(int eu = 0; eu  v.Comprimento; ++eu)  Caracteres CH = Pwgenerator.GenerateCharacter(PCs, Crsrandomsource); se(CH == Caracteres.Minvalue) retornar Pwgerror.Toofewaracters; v[[eu] = CH se(PWProfile.NorePeatingCharacters) PCs.Remover(CH); > . > 

O método Generatecharacter é chamado para gerar todos os caracteres da senha. É preciso um charset e uma fonte aleatória e produz um caractere aleatório do charset.

interno estático Caracteres GenerateCharacter(Pwcharset pwcharset, Criptondomstream Crsrandomsource)  uint cc = pwcharset.Tamanho; se(cc == 0) retornar Caracteres.Minvalue; uint eu = (uint)Crsrandomsource.GetRandomuint64(cc); retornar pwcharset[[eu]; > 

Finalmente, GetRandomuint64 é um gerador de números aleatórios uniforme que gera valores entre 0 e CC - 1:

interno Ulong GetRandomuint64(Ulong UMAXEXCL)  se(UMAXEXCL == 0)  Depurar.Afirmar(falso);  novo ArgumentOtOfRangeException("Umaxexcl"); > Ulong ugen, urem; fazer  ugen = GetRandomuint64(); urem = ugen % UMAXEXCL; > enquanto(( - urem) > (Ulong.Valor máximo - (UMAXEXCL - 1Ueu))); // Isso garante que o último número do bloco (i.e. // (ugen - urem) + (Umaxexcl - 1)) é gerador;  // while ((ugen - urem) + (umaxexcl - 1) < 0);retornar urem; > 

O que é importante aqui é que cada personagem é gerado independentemente dos outros: Todo personagem é aleatório, e saber qual personagem foi gerado antes, não nos fornece informações sobre o próximo char que será gerado.

Finalmente, vamos&rsquo;S Suponha. ?

Geração de números aleatórios uniformes

Este loop é essencial para uniformemente gerar números em um intervalo.

Imagine que você deseja obter um char aleatório de um charset de 10 chars possíveis, e você tem um método de gerador de números aleatório GetRandom32, que o número de saídas entre 0 e 32 (32 excluído). A maneira direta de produzir esse char seria:

const corda CHARST = "0123456789"; retornar CHARST[[GetRandom32() % 10]; 

Deixar&rsquo;s Veja como os caracteres são gerados:

  • &ldquo;4&rdquo; é retornado se getRandom32 () retornar 4, 14 ou 24 (3 valores possíveis)
  • &ldquo;5&rdquo; é retornado se getRandom32 () retornar 5, 15 ou 25 (3 valores possíveis)
  • Mas &ldquo;1&rdquo; é retornado se getRandom32 () retornar 1, 11, 21 e 31 (4 valores possíveis!)

A distribuição é dada abaixo:

Portanto, há um viés com este método: como se pode ver nas saídas, os dígitos 0 e 1 serão emitidos com mais frequência do que os outros. É comumente chamado de &ldquo;Viés de módulo&rdquo;. Você deve verificar o excelente guia definitivo para &ldquo;Viés modular&rdquo; e como evitá -lo, por segurança Kudelski, para obter mais informações.

Para remover isso &ldquo;Viés de módulo&rdquo;, Um método comum é descartar todos os números maiores ou iguais a 30 (o maior múltiplo de 10 inferiores a 32):

const corda CHARST = "0123456789"; fazer  ugen = GetRandom32(); > enquanto ( > = 30); retornar CHARST[[ugen % 10]; 

É exatamente isso que o Keepass faz, embora o viés no keepass seja muito menos significativo do que no exemplo atual, porque o getRandomuint64 gera valores muito maiores que o tamanho do conjunto de caracteres de senha.

Vimos como selecionar uniformemente um personagem de uma determinada gama de caracteres, assumindo que nossa fonte aleatória é uniforme. Deixar&rsquo;s Veja agora que tipo de fonte é adequada para gerar números aleatórios criptograficamente fortes.

PRNG criptograficamente seguro

Números gerados devem ser aleatório. Mas o que isso significa exatamente? Um bom PRNG comum passará uma série de testes, principalmente testes de aleatoriedade estatística, como testes obstinados ou obstinados.

Um PRNG criptograficamente seguro (CSPRNG) também passará esses testes, mas também possui outros dois requisitos:

  • Deve satisfazer o teste próximo. Conhecendo todos os bits já gerados por um csprng, não existe um método de tempo polinomial que prevê o próximo bit com uma probabilidade mais alta que 0.5.
  • Se, a qualquer momento, todo o estado do CSPRNG estiver comprometido, não há como recuperar os bits devolvidos anteriormente pelo CSPRNG.

Esses pontos são essenciais para a geração de senha. Por exemplo, se uma senha foi comprometida por algum motivo, e se um não-csprng tiver sido usado para gerar essa senha, um invasor poderá poder recuperar a outra senha gerada usando este prng. A maioria dos sistemas operacionais fornece implementações de CSPRNG: CryptGenRandom no Windows, ou /dev /aleatório em sistemas operacionais semelhantes a Unix.

Alguns softwares preferem usar sua própria implementação, muitas vezes semeada, total ou parcialmente, pelo sistema operacional PRNG. Keepass usa dois PRNG, com base em salsa20 e chacha20, e um legado baseado em uma variante de arcfour. Deixar&rsquo;S Suponha que os dois primeiros PRNG sejam criptograficamente seguros: agora temos todos os elementos para gerar senhas aleatórias e seguras de um determinado charset.

Kaspersky&rsquo;s Método de geração de senha

O Kaspersky Mastren Manager possui um gerador de senha embutido, que cria senha de um determinado &ldquo;política&rdquo;. As configurações de política são simples: comprimento da senha, letras maiúsculas, letras minúsculas, dígitos e um conjunto personalizado de chars especiais. Todas essas configurações podem ser configuradas na interface do gerador de senha, como mostrado aqui (esta é a configuração padrão):

Por padrão, o KPM gera senhas de 12 caracteres com um charset estendido.

Enganando a frequência da aparência

O procedimento de geração é muito mais complexo do que o método Keepass. O KPM primeiro escolhe dois flutuadores aleatórios $ r_1 $ e $ r_2 $ entre 0 e 1, e os multiplica com o comprimento do charset de senha para escolher um valor na tabela Charset:

CHARST = . # personagem definido para usar R1 = aleatório.aleatório() r2 = aleatório.aleatório() POS = R1 * r2 * Len(CHARST) retornar CHARST[[POS] 

A distribuição de $ R_1 \ Times R_2 $ é (graças ao Mathworld):

\[\begin P[r_1 r_2 = a] &=& \int_0^1\int_0^1 \delta(xy - a) dy dx \\ &=& \int_0^1\int_^ \delta(z) \frac dz dx \\ &=& \int_0^1 1(x \geq a) \frac dx \\ &=& \int_a^1 \frac dx \\ &=& -ln(a) \end\]

A distribuição desta função não é uniforme: posições mais baixas têm mais chances de ocorrer do que valores próximos a 1. Esse método é bastante intrigante, mas parece que é exatamente o que o KPM queria implementar.

Como é criado o charset? É totalmente ordenado, como &ldquo;abcdefghij…&rdquo;? Não…

  • Para os três primeiros chars, o charset é totalmente ordenado (quase ... veremos isso mais tarde).
  • Então, para os próximos chars, o KPM confia na frequência da carta: assume que as letras menos frequentes (em algum idioma) devem aparecer com mais frequência na senha gerada. A suposta frequência de aparição de cada letra, conforme usada em KPM, é mostrada no gráfico abaixo:

Então, o charset é ordenado de acordo com a frequência inversa de aparência de cada letra: q, x, z, w… n, a, e.

Como os valores mais baixos são mais propensos a aparecer, dada a função de distribuição, podemos assumir alguns chares como &ldquo;q&rdquo; &ldquo;x&rdquo; são muito mais propensos a aparecer em senhas geradas por KPM.

Se essas estatísticas fossem tomadas de forma independente para gerar cada carvão de uma senha, poderíamos ver frequentemente vários &ldquo;q&rdquo;, &ldquo;x&rdquo; ou &ldquo;z&rdquo; nas senhas. No entanto, as coisas são mais complexas: os chars gerados são levados em consideração no cálculo das frequências de aparência. Se um &ldquo;z&rdquo; é gerado, então a probabilidade de aparência de &ldquo;z&rdquo; na tabela de frequência será fortemente aumentada. Uma vez que o charset é ordenado de acordo com esta tabela, &ldquo;z&rdquo; estará no final da mesa e terá muito menos mudanças a serem tomadas.

Essas mudanças também afetam outras letras: depois &ldquo;z&rdquo; foi escolhido, a probabilidade de &ldquo;a&rdquo;, &ldquo;e&rdquo;, &ldquo;m&rdquo;, &ldquo;q&rdquo;, &ldquo;s&rdquo; e &ldquo;x&rdquo; também aumentou. Pelo contrário, &ldquo;h&rdquo; diminuiu. Mas depois &ldquo;h&rdquo; é escolhido, sua probabilidade de aparência aumentará muito.

Nossa hipótese é que o método foi implementado para enganar as ferramentas de quebra de senha padrão. Crackers de senha como Hashcat ou João, o Estripador, tentam quebrar primeiro provável Senha, e.g. Senhas geradas por humanos. O método de rachadura de senha depende do fato de que provavelmente existem &ldquo;e&rdquo; e &ldquo;a&rdquo; em uma senha criada por um humano do que &ldquo;x&rdquo; ou &ldquo;j&rdquo;, ou que os bigrams &ldquo;º&rdquo; e &ldquo;&rdquo; aparecerá com muito mais frequência do que &ldquo;qx&rdquo; ou &ldquo;zr&rdquo;.

Técnicas dedicadas como o Markov Generator, que assumem que existe um modelo de Markov oculto na maneira como as senhas são geradas por seres humanos, podem quebrar diretamente esse método de geração (consulte ataques de dicionário rápido em senhas usando troca de espaço para mais detalhes).

Portanto, as senhas geradas pelo KPM estarão, em média, distantes na lista de senhas candidatas testadas por essas ferramentas. Se um invasor tentar quebrar uma lista de senhas geradas por KPM, ele provavelmente esperará muito tempo até que a primeira seja encontrada. Isso é bastante inteligente.

No entanto, se um atacante sabe Que uma senha foi gerada por KPM, ele pode adaptar sua ferramenta para levar em consideração o modelo seguido por KPM. Como essas senhas são, em certo sentido, tendenciosas (para combater os crackers de senha), esse viés pode ser usado para gerar as senhas mais prováveis ​​geradas por esta ferramenta e testá -las primeiro. Uma maneira direta de fazer isso pode ser usar um gerador de Markov, como o fornecido por João o Estripador (esse método não foi testado).

Podemos concluir que o algoritmo de geração em si não é tão ruim: ele resistirá a ferramentas padrão. No entanto, se um atacante souber que uma pessoa usa KPM, ele poderá quebrar sua senha com muito mais facilidade do que uma senha totalmente aleatória. Nossa recomendação é, no entanto, para gerar senhas aleatórias por tempo suficiente para ser forte demais para ser quebrado por uma ferramenta.

Vimos anteriormente que o KPM escolheu dois valores aleatórios $ r_1 $ e $ r_2 $ para calcular um índice na tabela de charset. Deixar&rsquo;s Veja agora como esses valores são calculados.

KPM&rsquo;s gerador de números aleatórios

Esses dois valores vêm diretamente do kpm prng. Este produto prng flutua uniformemente entre 0 e 1, 1 excluído.

O PRNG usado difere no desktop e na versão da web:

  • A versão da web usada matemática.aleatório() . Esta função não é adequada para gerar números aleatórios criptograficamente seguros (que inclui entropia necessária para gerar senhas), conforme explicado em https: // desenvolvedor.Mozilla.org/en-us/docs/web/javascript/reference/global_objects/math/aleatória. O PRNG subjacente usado pelo Chrome, Firefox e Safari para matemática.Random () é XorShift128+. É muito rápido, mas não adequado para gerar material criptográfico. As consequências de segurança no KPM não foram estudadas, mas aconselhamos Kaspersky a substituí -lo por janela.cripto.getRandomValues ​​(), conforme recomendado pela página de documentação de Mozilla mencionada anteriormente.
  • A versão da área. Mersenne Twister é muito bom e amplamente utilizado PRNG, e o MT 19937 é o Mersenne Twister mais popular. É distribuído uniformemente, tem um período muito longo e é rápido em comparação com o outro &ldquo;bom&rdquo; Prngs.

No entanto, está usando um Mersenne Twister uma boa ideia para criar senhas? Definitivamente não.

O problema com este gerador é que ele não é um csprng. Conhecer alguns de seus OPUTs (624 nesse caso) permite recuperar todo o seu estado e prever todos os valores que ele gerará, além de todos os valores que já gerou (consulte algoritmos Berlekamp-Massey ou Reeds-Slone)).

Ferramentas prontas como o Randcrack estão disponíveis para quebrar o Python&rsquo;. Somente adaptações muito pequenas devem ser necessárias para quebrar a implementação do impulso.

Na prática, explorando essa falha no contexto de Kaspersky&rsquo;O gerenciador de senhas é difícil:

  • As senhas são curtas: 12 chars por padrão. A recuperação de 624 chars de senha exige para pegar 52 senhas.
  • O valor de saída bruto não é conhecido: o valor da saída é a posição no charset de cada letra da senha. Mais valores podem ser necessários.
  • E vimos que essa posição no charset é um produto de dois valores produzidos pelo PRNG.

Não vemos uma maneira direta de atacar este PRNG no contexto de KPM.

Semeando o Mersenne Twister

Vimos que o PRNG gera uniformemente carros alegóricos em [0, 1 [. O código responsável por sua inicialização deve parecer:

MT19937::resultado_type semente = . ; auto mtrand = stdvincular(std::uniform_real_distributionflutuador>(0,1), MT19937(semente 

De onde vem a semente? A função de geração de senha é chamada assim:

std::corda pwlib::gerar senha(pwdlib:: política, int semente)  se (semente == 0)  FileTime ft; GetSystemtimEasFilETime(&ft); semente = ft.dwlowdateTime + ft.DwhighdateTime; > auto mtrand = std::vincular(std::uniform_real_distributionflutuador>(0,1), MT19937(semente)); retornar (política, mtrand); > 

Isso é super interessante por dois motivos:

  • A semente é de apenas 32 bits. Isso significa que pode ser forçado facilmente.
  • Uma instância do PRNG é criada toda vez que uma senha é gerada. Isso significa que o Kaspersky Password Manager pode gerar no máximo US $ 2^$ senhas para um determinado charset.

GetSystemTimEasFilETime é usado como semente apenas se uma semente não for fornecida ao método GeneratePassword. Como é chamado esse método quando um usuário solicita uma nova senha?

std::corda pwlib::gerar senha(pwdlib::Política política)  retornar gerar senha(política, tempo(0)); > 

Portanto, a semente usada para gerar cada senha é o tempo atual do sistema, em segundos. Isso significa que todas as instâncias do Kaspersky Password Manager no mundo gerarão exatamente a mesma senha em um determinado segundo. Isso seria óbvio para identificar se todo clique no &ldquo;Gerar&rdquo; Botão, na interface do gerador de senha, produziu a mesma senha. No entanto, por algum motivo, a geração de senha é animada: dezenas de chars aleatórios são exibidos enquanto a senha real já foi calculada:

Esta animação leva mais de 1 segundo, por isso não é possível clicar várias vezes no &ldquo;Gerar&rdquo; Botão dentro de um segundo. É definitivamente por isso que a fraqueza não havia sido descoberta antes.

As consequências são obviamente ruins: Cada senha pode ser forçada. Por exemplo, existem 315619200 segundos entre 2010 e 2021, para que KPM possa gerar no máximo 315619200 senhas para um determinado charset. O Brutecing deles leva alguns minutos.

É bastante comum que sites ou fóruns exibam o tempo de criação das contas. Conhecendo a data da criação de uma conta, um invasor pode tentar forçar a senha da conta com uma pequena variedade de senhas (~ 100) e obter acesso a ela.

Além disso, senhas de bancos de dados vazados contendo senhas de hash, senhas para arquivos criptografados, volumes de TrueCrypt/Veracrypt, etc. Também pode ser recuperado facilmente se eles tivessem sido gerados usando o Kaspersky Password Manager.

Escrevemos uma prova de conceito para garantir que não estávamos perdendo algo. Ele gera uma lista de 1000 senhas possíveis a partir do horário atual. Para testar o POC:

    Compilar o POC fornecido (pwlib.cpp). O arquivo deve ser compilado com C ++ visual (valores flutuantes no código -fonte não têm exatamente os mesmos valores quando compilados com CLANG ou GCC). Eu usei o visual c ++ 2017 para meus testes. Usando um convite de comando para visual c ++ 32 bits, digite:

 cmake -bbuild -h. msbuild build \ pwbrute.vcxproj 

 Debug \ pwbrute.exe> passa.TXT 

  • Somente minúsculo
  • 12 chars

Não é completamente funcional, mas nos permitiu descobrir um bug no processo de geração de senha, na função que calcula a probabilidade de aparência de uma determinada carta sabendo os chars gerados anteriormente. Aqui está o código pseudo para o método GetContextProbabilities:

 const flutuador *getContextProbabilities(const std::corda &senha)  std::corda LowerCasePassword; // Converter em minúsculas, mantenha apenas minúsculas para (Caracteres c : senha)  se (é inferior(c))  LowerCasePassword += c; > outro se (isupper(c))  LowerCasePassword += Caracteres(c - 'A' + 'a'); > > . int n = 0; para (int eu = LowerCasePassword.comprimento() - 1; eu > = 0; eu--)  int índice = senha[[eu] - 'a'; // fixme: substitua por LowerCasePassword 

A senha que está sendo construída é convertida em minúsculas. As não letras são removidas. Então, há uma iteração no senha em vez da senha minúscula acabou de ser criada. Isso leva a um cálculo errado da variável de índice (a posição de uma letra no alfabeto). Este índice é usado para recuperar um elemento de uma matriz. Isso leva a uma leitura fora dos limites desta matriz.

A frequência das aparências é então calculada a partir de dados não iniciados ou arbitrários em alguns casos. Embora o algoritmo esteja errado, ele realmente torna as senhas mais difíceis de forçar a força de bruta em alguns casos.

O POC atacado gera candidatos apenas para senhas minúsculas para que o índice seja sempre calculado corretamente (caso contrário, o POC exige ser adaptado).

Correção

Kaspersky atribuiu a CVE-2020-27020 a essa vulnerabilidade e publicou um aviso de segurança em sua página da web: https: // suporte.Kaspersky.com/geral/vulnerabilidade.ASPX?el = 12430#270421.

Todas as versões anteriores a essas são afetadas:

  • Kaspersky Password Manager para Windows 9.0.2 patch f
  • Kaspersky Password Manager para Android 9.2..872
  • Kaspersky Password Manager para iOS 9.2.14.31

No Windows, o Mersenne Twister PRNG foi substituído pela função bcryptgenRandom:

flutuador Randomfloat(Bcrypt_alg_handle *halgorithm)  uint32_t eu; BCryptGenRandom(*halgorithm, (uint8_t *)&eu, tamanho de(eu), 0); retornar (flutuador)eu * (1.0 / 0x100000000); > 

O valor de retorno desta função não foi verificado nas versões beta fornecidas por Kaspersky, mas achamos que isso foi corrigido agora.

Matemática.Random () na versão da web foi substituído pela janela segura.cripto.Método getRandomValues ​​().

As versões Android e iOS também foram corrigidas, mas não analisamos as correções.

Conclusão

O Kaspersky Password Manager usou um método complexo para gerar suas senhas. Este método teve como objetivo criar senhas difíceis de quebrar para crackers de senha padrão. No entanto, esse método reduz a força das senhas geradas contra ferramentas dedicadas. Mostramos como gerar senhas seguras que tomam o Keepass como exemplo: métodos simples como desenhos aleatórios são seguros, assim que você se livrar do &ldquo;Viés de módulo&rdquo; Enquanto espreita uma carta de uma determinada gama de chars.

Também estudamos o Kaspersky&rsquo;s prng e mostrou que era muito fraco. Sua estrutura interna, um Twister Mersenne retirado da biblioteca Boost, não é adequado para gerar material criptográfico. Mas a falha principal é que esse PRNG foi semeado com o tempo atual, em segundos. Isso significa que cada senha gerada por versões vulneráveis ​​do KPM pode ser forçada em minutos (ou em um segundo se você souber aproximadamente o tempo de geração).

Finalmente, fornecemos uma prova de conceito que detalha o método de geração completa usada por KPM. < 9.0.2 Patch F. Incidentally, writing this PoC allowed us to spot an out of bounds read during the computation of the frequency of appearance of password chars, which makes passwords a bit stronger that they should have been.

Linha do tempo

  • 15 de junho de 2019: Relatório e prova de conceito enviados a Kasperky através de Hackerone.
  • 17 de junho de 2019: Kaspersky reconhece que recebeu o relatório.
  • 25 de junho de 2019: Kaspersky confirma a vulnerabilidade.
  • 4 de outubro de 2019: Kaspersky envia uma construção de janelas particulares para que possamos verificar se os bugs foram corrigidos e nos informa que eles lançarão uma solução para lidar com senhas geradas anteriormente antes do final do ano.
  • 8 de outubro de 2019: Confirmamos que as vulnerabilidades foram corrigidas, mas relatamos um novo pequeno defeito na correção.
  • 10 de outubro de 2019: Kaspersky Password Manager para Windows 9.0.2 patch d é liberado, corrigindo as vulnerabilidades, mas sem a correção para o defeito relatado. A versão da web também é atualizada.
  • 9 de outubro de 2019: Kaspersky Password Manager para Android versão 9.2.14.872 com a correção é liberada.
  • 10 de outubro de 2019: Kaspersky Password Manager para iOS versão 9.2.14.31 com a correção é liberada.
  • 10 de dezembro de 2019: Kaspersky Password Manager para Windows 9.0.2 patch f é liberado fechando o defeito no patch d.
  • 9 de abril de 2020: Kaspersky nos informa que lançará um patch em outubro para lidar com senhas geradas anteriormente.
  • 13 de outubro de 2020: Kaspersky Password Manager 9.0.. Kaspersky nos informa a mesma notificação também estará presente nas versões móveis durante o primeiro trimestre de 2021. CVE-2020-27020 também foi reservado.
  • 28 de dezembro de 2020: Kaspersky concorda que um relatório sobre a vulnerabilidade pode ser divulgado após a publicação do CVE.
  • 27 de abril de 2021: Kaspersky Security Advisory é publicado.
  • 14 de maio de 2021: as informações para o CVE-2020-27020 são publicadas.

Jean-Baptiste Bédrune

Jean-Baptiste Bédrune

Chefe de pesquisa de segurança

Kaspersky tem um gerador de senha?

A segurança de seus dados depende amplamente da força da sua senha. Uma senha é considerada forte se contiver pelo menos 16 caracteres, incluindo maiúsculas e letras latinas minúsculas, dígitos e caracteres especiais. Kaspersky Password Manager gera senhas exclusivas e fortes. Você pode especificar o comprimento da senha e escolher se deve incluir dígitos, letras e caracteres especiais. Você pode usar o gerador de senha ao criar uma nova conta do site ou alterar sua senha para uma conta existente.

  1. Abra a janela do gerador de senha de uma das seguintes maneiras:
    • Na janela principal do aplicativo, clique em Gerador de senha .
    • Em uma janela do navegador, clique no ícone do aplicativo → O ícone do gerador de senha .
    • Em um campo de senha em um site, passe o mouse sobre o campo ou clique no ícone da chave Para invocar a janela do gerador de senha.

A janela do gerador de senha é aberta e o aplicativo gera uma senha usando as configurações padrão.

  • Altere os parâmetros de senha, se necessário, e pressione o botão Circle Arrows Para gerar a senha. O aplicativo indica se a força da senha é médio ou baixo.
  • Se você deseja salvar parâmetros de geração de senha, selecione a opção personalizada na guia Configurações e especifique os parâmetros necessários. Seus parâmetros serão salvos, mesmo se você trocar a guia ou fechar a janela.
  • Clique cópia de.
  • O aplicativo copia a senha gerada para a área de transferência. Você pode colar manualmente a senha no campo necessário. Se você usar o gerador de senha para criar uma nova conta do site ou alterar sua senha para uma conta existente, o aplicativo colará automaticamente a senha no campo necessário.

    Além disso, você pode gerar uma senha forte e exclusiva ao adicionar novo site, aplicativo ou outro .

    cópia de

    1. Na janela principal do aplicativo, clique em Adicionar, clicar em conta e escolher site, aplicativo ou outro . A janela de entrada é aberta.
    2. No campo de senha, clique em gerar . A janela do gerador de senha é aberta e o aplicativo gera uma senha usando as configurações padrão.
    3. Especifique os parâmetros de geração de senha, se necessário.
    4. Clique . O aplicativo cola automaticamente a senha no campo necessário.

    Kaspersky Mastren Manager salva as últimas 5 senhas geradas copiadas para a área de transferência, caso você as perca. Você pode ver suas senhas copiadas no histórico do gerador de senha. As lojas de aplicativos copiaram senhas no seu computador e não as sincronizam nos dispositivos.

    Se o seu cofre estiver desbloqueado, o gerador de senha estará disponível.

    cópia de

    1. Abra a janela do gerador de senha.
    2. Clique na guia Histórico de senha. Uma lista de suas senhas copiadas mais recentemente abre.
    3. Se você deseja copiar uma senha para a área de transferência, clique no botão Copiar ao lado da senha. A senha é copiada para a área de transferência.
    4. Se você deseja limpar o histórico do gerador de senha, clique em limpar tudo . Suas senhas copiadas são excluídas da história.

    Kaspersky tem um gerador de senha?

    A segurança de seus dados depende amplamente da força da sua senha. Uma senha é considerada forte se contiver pelo menos oito caracteres, incluindo maiúsculas e letras latinas em minúsculas, dígitos e caracteres especiais. Kaspersky Password Manager gera senhas exclusivas e fortes. Você pode especificar o comprimento da senha e escolher se deve incluir dígitos e caracteres especiais. Você pode usar o gerador de senha ao criar uma nova conta do site ou alterar sua senha para uma conta existente.

    1. Desbloqueie o cofre inserindo a senha principal e tocando desbloqueio . Se o seu dispositivo suportar Touch ID/Face ID e Touch ID/Face ID estiverem ativados nas configurações do aplicativo, você poderá usá -lo para desbloquear seu cofre em vez de inserir a senha principal.
    2. Na barra de aba inferior, toque no perfil . Nos iPads, a barra de acesso rápida é sempre exibida na parte esquerda da tela.
    3. Na barra de acesso rápido, toque em gerador de senha . .
    4. Altere os parâmetros de senha, se necessário:
      • Toque em comprimento de senha para especificar o número de caracteres a serem usados ​​ao gerar senhas.
      • Ligue/desative letras maiúsculas (a -z) para usar/não usar letras maiúsculas durante a geração de senha. Por padrão, esse interruptor de alternância está ligado.
      • Ligue/desative letras minúsculas (a -z) para usar/não usar letras minúsculas durante a geração de senha. Por padrão, esse interruptor de alternância está ligado.
      • LIGUE ON/OFF DIGITS (0–9) para usar/não usar numerais durante a geração de senha. Por padrão, esse interruptor de alternância está ligado.
      • Ligue/desative caracteres especiais para usar/não usar caracteres especiais durante a geração de senha. Por padrão, esse interruptor de alternância está ligado. Você pode adicionar ou excluir caracteres especiais usados ​​durante a geração de senha no campo abaixo do interruptor de alternância.

    Para sua conveniência, excluímos os seguintes símbolos semelhantes da geração de senha: 0 (zero), o (capital O), i (capital i) e l (pequeno l).

    O aplicativo gera automaticamente uma nova senha quando os parâmetros são alterados. Se a força da senha gerada for médio ou baixa, o Kaspersky Password Manager notifica -o abaixo da senha. Toque para gerar uma senha novamente usando os parâmetros selecionados.

    O aplicativo copia a senha gerada para a área de transferência. Você pode colar manualmente a senha no campo necessário. Quando você fecha a janela do gerador de senha, o aplicativo salva os parâmetros de senha selecionados até que o cofre seja desbloqueado.

    Para gerar rapidamente senhas e copiá -las para a área de transferência, você também pode usar o widget de senhas na tela inicial do seu dispositivo. Encontre mais informações sobre como adicionar widgets no site de suporte da Apple.

    Gerenciador de senhas

    Kaspersky Mastren Manager é uma ferramenta indispensável para o usuário ativo da Internet. .

    Quando você usa o Kaspersky Password Manager para fazer login, você pode ter certeza de que seus dados estão seguros. O software cria senhas excepcionalmente fortes e impede que suas informações de login sejam roubadas. Todos os dados confidenciais são criptografados e mantidos em um banco de dados dedicado no seu computador.

    Kaspersky Password Manager torna sua experiência na web mais segura, mais rápida e conveniente.

    Últimas versões

    Gerenciador de senhas de Kaspersky

    Benefícios

    Permite acessar sites e aplicativos com apenas um único clique do mouse
    Armazena suas senhas em um banco de dados criptografado no seu computador cria uma senha forte e exclusiva para cada conta
    Inclui uma versão móvel que pode ser carregada de uma unidade flash e executada em outro computador
    Preenche formulários longos para você automaticamente

    Características principais


    • O Kaspersky Mastren Manager se lembra de seus nomes de usuário e suas senhas associadas, para que, quando você retornar a um site, forneça seus dados de login automaticamente. Kaspersky Mastren Manager também trabalha com aplicativos que requerem autenticação.
    • Proteção confiável para suas senhas
      Kaspersky Mastren Manager armazena com segurança suas senhas e dados pessoais em um banco de dados dedicado e criptografado em seu computador. As senhas armazenadas só podem ser decifradas pelo uso de uma senha mestre ou outro método de autenticação definido pelo usuário. Isso garante que suas senhas estejam seguras e impeçam os criminosos de roubá -los.
    • Suporta vários métodos de autenticação
      . Você pode até usar seu telefone celular: suas senhas podem ser configuradas para que elas estejam disponíveis apenas quando seu telefone celular estiver conectado ao seu computador via Bluetooth. Se você deixar seu computador e levar seu telefone com você, o banco de dados irá bloquear automaticamente.
    • Geração de senhas fortes
      A segurança de seus dados depende diretamente de quão fortes são suas senhas. Os usuários geralmente têm senhas semelhantes ou idênticas para várias contas. Ao quebrar uma única senha, um cibercriminal pode facilmente obter acesso a muitas contas. O gerador de senha integrado ao Kaspersky Password Manager criará senhas fortes para você que são extremamente difíceis de quebrar.
    • Importar senhas de outros sistemas operacionais e aplicativos
      Com o Internet Explorer ou Mozilla Firefox, as senhas são armazenadas em um formato desprotegido e podem ser facilmente acessadas por cibercriminosos. Kaspersky Mastren Manager ajuda você a localizar essas senhas desprotegidas e importá -las para o banco de dados de senha criptografada.
    • Versão móvel
      Gerenciador de senhas de Kaspersky&rsquo;A versão móvel fornece acesso às suas senhas enquanto trabalha em qualquer computador, sem ter que instalar nada. A versão móvel pode ser lançada a partir de diferentes tipos de dispositivos móveis, incluindo unidades flash. Se o dispositivo for removido, o Kaspersky Password Manager bloqueia o banco de dados de senha automaticamente e remove qualquer rastro dos dados de sua senha da máquina host.
    • Completa automaticamente formulários longos
      Os formulários do site geralmente exigem a entrada de informações pessoais acima da de nome de usuário e senha. Esses dados adicionais podem incluir: seu nome completo, data de nascimento, sexo, endereço de e -mail, número de telefone, país de residência, etc. O Kaspersky Password Manager pode preencher automaticamente esses tipos de formulários para você, usando informações que você fornece com antecedência. Vários cartões de identificação podem ser usados ​​para armazenar informações pessoais relacionadas aos negócios separadamente.
    • Vários nomes de usuário para um único provedor de contas
      Às vezes, várias senhas devem ser armazenadas para um único site. Por exemplo, você pode ter várias caixas de correio, cada uma com um propósito diferente, registrado em um único provedor de serviços de correio. O Kaspersky Mastren Manager pode armazenar vários nomes de usuário para um único provedor e verificar qual você deseja usar quando faz login.
    • Backup automático
      Kaspersky Mastren Manager cria automaticamente uma cópia de backup do seu banco de dados de senha no seu computador cada vez que for modificado. Você pode restaurar facilmente suas senhas se o banco de dados atual estiver acidentalmente danificado ou se você quiser voltar para uma versão anterior.
    • Proteção eficaz contra keyloggers
      Um keylogger é um programa malicioso que rastreia as teclas da vítima&rsquo;s computador para capturar ilegalmente o usuário&rsquo;s Dados pessoais, como senhas. Kaspersky Mastren Manager insere senhas sem realmente usar o teclado e protege de maneira eficaz seus dados pessoais de keyloggers.
    • Proteção contra ataques de phishing
      Phishing é um tipo de atividade hostil pela qual um cibercriminal convida o usuário a visitar um site para indicar o usuário a divulgar as informações da sua conta. O site falso parece idêntico ao site original e um usuário involuntário fornece, consequentemente, seus dados pessoais. O Kaspersky Mastren Manager contraria efetivamente ataques de phishing, verificando se o URL for autêntico e se seu software estiver atualizado.

    Requisitos de sistema

    Observe que não oferecemos suporte para versões beta ou visualizações de novos sistemas operacionais e.g. Windows 8.1 visualização. Apenas os lançamentos oficiais finais serão suportados.

    • Microsoft Windows XP Home Edition
    • Microsoft Windows XP Professional
    • Microsoft Windows XP Professional X64 Edition
    • Microsoft Windows Vista Home Basic (32/64 bit)
    • Microsoft Windows Vista Home Premium (32/64 bit)
    • Microsoft Windows Vista Business (32/64 bit)
    • Microsoft Windows Vista Enterprise (32/64 bit)
    • Microsoft Windows Vista Ultimate (32/64 bit)
    • Microsoft Windows 7 Premium Home (32/64 bits)
    • Microsoft Windows 7 Professional (32/64 bit)
    • Microsoft Windows 7 Ultimate (32/64 bit)
    • Windows 8 (32/64 bit)
    • Windows 8 Pro (32/64 bit)
    • Windows 8 Enterprise (32/64 bit)
    • Pelo menos 512 MB disponível RAM
      Espaço livre de 10 MB no disco rígido
      mouse de computador
    • Microsoft Internet Explorer 6.0 - 10.0
    • Mozilla Firefox 2.x - 25.x
    • Google Chrome 6.0 - 30.0
    • Maxthon 2.5.x
    • Rebanho 2.х
    • Seamonkey 2.0.8 - 2.22
    • Yandex 1.5

    Kaspersky Mastren Manager tem gerando senhas ruins

    O gerador de números aleatórios no Kaspersky Password Manager não era suficiente. Aqui está o porquê.

    Escrito por Adam Rowe

    Publicado em 7 de julho de 2021

    Você pode ser perdoado por assumir que uma senha gerada aleatoriamente foi gerada aleatoriamente. Esse não tem sido exatamente o caso do Kaspersky Password Manager há pouco menos de dois anos.

    O gerenciador de senhas da empresa de segurança cibernética estava usando um gerador automático embutido com uma falha particularmente gritante. Eles o corrigiram, mas qualquer usuários do Kaspersky Manager Manager devem alterar suas senhas geradas anteriormente o mais rápido possível.

    Aqui está o que deu errado.

    A falha

    O gerador de senha trabalha para criar senhas seguindo um conjunto &ldquo;política,&rdquo; Com configurações que incluem comprimento de senha, cartas maiúsculas, letras minúsculas, dígitos e um conjunto personalizado de caracteres especiais. Eles podem ser personalizados, mas a política padrão é uma senha de 12 caracteres.

    Você já usa um gerenciador de senhas?

    Gerador de senha de Kaspersky

    Então qual é o problema? Bem, qualquer gerador de números aleatórios precisa de uma ou mais fontes de entropia - o elemento de incerteza que garante que o resultado permaneça aleatório. Mas a semente que Kaspersky estava começando era o tempo atual do sistema, em segundos. Sim, tempo, uma das métricas mais previsíveis e não aleatórias.

    Veja como Ledger Donjon, chefe de pesquisa de segurança da Jean-Baptiste Bédune, explicou em uma postagem no blog:

    &ldquo;Portanto, a semente usada para gerar cada senha é o tempo atual do sistema, em segundos. Isso significa que todas as instâncias do Kaspersky Password Manager no mundo gerarão exatamente a mesma senha em um determinado segundo. Isso seria óbvio para identificar se todo clique no &lsquo;Gerear 'Botão, na interface do gerador de senha, produziu a mesma senha.&rdquo;

    A razão pela qual as pessoas não perceberam que cada senha gerada no mesmo segundo foi exatamente o mesmo é porque a interface tem uma animação de um segundo que ela toca, garantindo que ninguém possa gerar duas senhas no mesmo segundo.

    Mas é uma grande falha. Qualquer hacker que conhece o truque pode forçar qualquer senha: o número de segundos do dia é finito, e um hacker pode percorrer todas as 315.619.200 senhas ligadas aos segundos da década entre 2010 e 2021 em apenas alguns minutos.

    E, se uma conta on -line exibir publicamente a data em que foi criada, um hacker precisará executar ainda menos senhas em potencial antes de quebrar uma senha Kaspersky.

    Senhas seguras são essenciais

    Kaspersky foi alertado sobre o problema e lançou uma correção. Mas toda senha que já foi gerada por uma versão vulnerável do software ainda é facilmente rachável - um pouco de pesadelo para todos que estão usando o serviço especificamente para garantir que suas senhas não possam ser quebradas.

    Se você usar o gerenciador de senhas da Kaspersky, altere suas senhas agora. E se você estiver no mercado de um gerenciador de senhas que manterá sua atividade on -line privada, analisamos todas as principais opções em profundidade aqui - nenhuma das quais teve problemas para amarrar seus geradores de números aleatórios a um algoritmo facilmente rachado.