[ad_1]

Uma breve observação – este artigo trata da teoria de como quebrar senhas com hash. Compreender como os cibercriminosos executam ataques é extremamente importante para entender como proteger os sistemas contra esses tipos de ataques. Tentar invadir um sistema que você não possui provavelmente é ilegal em sua jurisdição (além de invadir seus próprios sistemas, [and often does] violar qualquer garantia para esse produto).

Este artigo pressupõe algum nível de conhecimento das funções de hash e das técnicas básicas de quebra de senha – se você não entender esses tópicos, consulte Este artigo.

Então, você obteve um conjunto de senhas com hash. A força bruta do hash levará uma muito muito tempo. Como você pode acelerar esse processo?

Espere, pensei que as funções de hash fossem unidirecionais! Como você decifra funções de hash?

Infelizmente, as funções de hash usadas para senhas de hash nem sempre são tão seguras quanto as funções de hash geralmente aprovadas. Por exemplo, a função de hash usada para dispositivos antigos do Windows é conhecida como LM Hash, que é tão fraca que pode ser quebrada em alguns segundos.

Além disso, você não precisa fazer engenharia reversa do hash. Em vez disso, você pode usar um conjunto pré-calculado de senhas de texto sem formatação e o valor de hash correspondente (, ) Isso informa ao hacker qual valor de texto sem formatação produz um hash específico.

Com isso, você saberá que valor de texto simples produz o hash que você está procurando. Quando você digita uma senha, o computador hash esse valor e o compara com o valor armazenado (onde corresponderá) e você poderá se autenticar. Portanto, você não precisa adivinhar a senha de alguém, apenas um valor que criará o mesmo hash.

Isso é chamado de colisão. Essencialmente, como um hash pode receber dados de qualquer tamanho ou conteúdo, há possibilidades ilimitadas para dados que podem ser hash.

Como um hash converte esse texto em um conteúdo de comprimento fixo (por exemplo, 32 caracteres), há um número finito de combinações para um hash. É um número muito grande de possibilidades, mas não infinito.

Eventualmente, dois conjuntos diferentes de dados produzirão o mesmo valor de hash.

As tabelas pré-computadas são muito úteis para conseguir isso, pois economizam tempo e poder de computação significativos. O uso de um conjunto pré-calculado de hashes para procurar um hash de senha é chamado de ‘ataque da tabela de pesquisa’. Essas tabelas são usadas pelos administradores de sistema para testar a força das senhas de seus usuários e geralmente estão disponíveis online ou para compra. No entanto, eles também podem ser usados ​​por hackers nefastos.

Se uma senha é insegura (digamos que alguém use uma senha de 5 caracteres), ela pode ser quebrada com relativa facilidade. Por exemplo, uma senha de 5 caracteres minúsculos pode ser usada apenas para criar 11.881.376 senhas diferentes (26 ^ 5).

Para um hash dessa senha, mesmo que o hash seja criptograficamente seguro (use um algoritmo apropriado), ainda seria muito fácil calcular todas as senhas possíveis e seus hashes correspondentes. As tabelas de pesquisa funcionam muito bem para esses tipos de hashes de senha.

No entanto, à medida que as senhas aumentam de tamanho, o armazenamento (e, portanto, o custo de armazenamento) é necessário para todas as senhas possíveis e o hash correspondente aumenta exponencialmente. Por exemplo, se a senha que você está tentando decifrar tiver 8 caracteres, mas usar números (10 dígitos), letras minúsculas (26), letras maiúsculas (26) e alguns caracteres especiais (10), o número de senhas possíveis saltará para 722.204.136.308.736 – que é MUITO espaço de armazenamento, quando você percebe que cada um está com uma função de hash como SHA-256.

As tabelas Rainbow resolvem esse problema oferecendo necessidades de armazenamento reduzidas, mas levam mais tempo para calcular as possíveis senhas. No nível mais básico, essas são essencialmente tabelas de pesquisa pré-calculadas que permitem encontrar rapidamente o texto simples que corresponde ao hash que você possui. Se o hash e o texto sem formatação estiverem contidos na tabela que você possui – semelhante aos ataques de dicionário -, você estará apenas procurando ver se a senha está contida na tabela que você possui. Caso contrário, você não será capaz de decifrar a senha. Você pode encontrá-los online gratuitamente ou para compra.

Verificação de saída Este artigo para um tutorial sobre como criar suas próprias tabelas de arco-íris.

Eu ainda estou interessado. Como as tabelas do arco-íris funcionam?

Se você quiser pular a explicação detalhada de como eles funcionam, fique à vontade para rolar até a seção ‘Como se proteger contra esses ataques’.

Para evitar o hash e armazenar cada texto sem formatação possível até encontrar o hash necessário (como uma tabela de pesquisa), você faz o hash de cada texto sem formatação e armazena o resultado em uma tabela para procurar mais tarde sem precisar regenerá-los. Isso leva mais tempo, mas economiza memória.

Para gerar a tabela, você cria ‘cadeias’ de hashes e texto sem formatação usando uma função de hash e uma função de redução. Uma função de redução apenas cria texto sem formatação a partir de um hash (não faz engenharia reversa do hash, mas cria texto sem formatação diferente do hash). Também é uma função de mão única.

Portanto, para calcular a tabela, use um de seus hashes, h1, na sua função de redução, R (), para criar o texto simples p1.

R (h1) = p1.

Então você usa a função de hash H () com p1 para criar um novo hash.

H (p1) = h2.

Usando nosso exemplo de antes:

Se o conjunto de texto sem formatação for [abcdefghijklmnopqrstuvwxyz]{5} (estamos procurando uma tabela arco-íris de todas as senhas compostas por letras minúsculas de comprimento 5) e estamos usando o MD5 (um algoritmo de hash):

Um hash pode ser ab56b4d92b40713acc5af89985d4b786 (h1). Agora, aplicamos a função de redução, que pode ser tão simples usando as últimas 5 letras no hash.

R (ab56b4d92b40713acc5af89985d4b786) = cafdb

H (cafdb) = 81a516edabf924cd0f727d329e855b1f

Por que eles são chamados de tabelas arco-íris?

Cada coluna usa uma função de redução diferente. Portanto, se cada coluna fosse colorida, seria um arco-íris muito longo e fino.

O uso de diferentes funções de redução reduz o número de mesclagens de cadeia (colisões) que ocorreram frequentemente com cadeias de hash, o predecessor das tabelas arco-íris. Isso significa essencialmente que, se você continuar usando a mesma função de redução, há uma chance de acabar com duas cadeias diferentes que convergem para o mesmo texto simples. O uso de diferentes funções de redução reduz a chance de isso acontecer, embora não seja impossível.

Ótimo, como você cria uma cadeia?

Para criar uma cadeia, você está usando a função de redução e a função de hash (de mão única) para criar uma ‘cadeia’ de hashes e texto sem formatação. Cada uma dessas ‘cadeias’ continuaria por k etapas e, quando a cadeia terminar, armazenará apenas o primeiro texto simples e o último hash da cadeia.

Portanto, uma cadeia de amostra é assim:

p1 -> h1 = H (p1) -> R1 (h1) = p2 -> H (p2) = h2 -> R2 (h2) = p3 -> H (p3) = h3

Cada função de redução é diferente (representada por R1, R2, R3 etc.). Uma tabela de amostra de cadeias (cada linha é uma cadeia de comprimento 5) é semelhante à seguinte. Observe que isso é preenchido com dados falsos apenas para dar um exemplo – a função de hash não é uma função de hash que você acharia usada para senhas de hash.

As funções de redução, R1 e R2 são definidas da seguinte forma – R1 recebe os 3 primeiros dígitos do hash e R2 leva as 2 últimas letras do hash:

p1 -> h1 = H (p1) -> R1 (h1) = p2 -> H (p2) = h2 -> R2 (h2) = p3 -> H (p3) = h3

2 -—> abdu2934 -—> 293 -—> 83kdnif8-—> if-—> ike83jd3

15-—> dks2ne94-—> 294-—> ld932nd9-—> ld-—> ldie938d

20-—> ld93md8d-—> 938-—> lxked93k-—> lx-—> 93mdkg8d

Em uma tabela arco-íris, apenas o primeiro ponto inicial e o terminal são salvos para economizar no armazenamento, assim:

ponto final do ponto de partida (texto sem formatação), após k percorrer a cadeia (hash)

p1 – ​​h1k

p2-—> h2k

p3-—> h3k

Então, quando você tiver um hash (h) onde não conhece o texto sem formatação (?), Você o comparará com as cadeias.

  1. Primeiro, você verificará se o hash está na lista de hashes finais (h1k, h2k etc.). Nesse caso, você pode ir para a etapa 3.
  2. Caso contrário, você pode reduzir o hash para texto sem formatação diferente (R1) e, em seguida, hash esse texto sem formatação (usando a função hash e a próxima função de redução acima) e compará-lo com a lista de hashes finais (h1k, h2k, h3k, etc.). Quando corresponde a um dos hashes finais, essa cadeia provavelmente conterá o hash original.
  3. Para encontrar o hash original na cadeia, pegue o texto simples inicial dessa cadeia (portanto, se corresponder a h1k, comece com p1) e aplique as funções de hash e redução para se mover ao longo da cadeia até atingir o hash conhecido e seu texto simples correspondente. Dessa forma, você pode percorrer os hashes na cadeia sem que eles ocupem espaço de armazenamento em sua máquina.

Embora você não tenha certeza de que as cadeias conterão o hash que você precisa, quanto mais cadeias você gerou (ou está referenciando), mais seguro você pode ter. Infelizmente, cada cadeia gasta muito tempo para gerar, e aumentar o número de cadeias aumenta o tempo que você precisa.

Como você se defende contra esses tipos de ataques?

Primeiro, uma defesa em camadas de todos os sistemas. Se você puder impedir o comprometimento de seus sistemas por outros métodos (para que o invasor não possa obter uma cópia de suas senhas com hash), o invasor não poderá decifrá-las.

Você também pode usar salga, que adiciona um valor aleatório à senha antes de criptografá-la. Isso significa que o valor pré-calculado que você encontrou (que corresponde ao hash) não funcionará. O texto criptografado não se baseia apenas no texto não criptografado. Como o sal é diferente para cada senha, cada uma precisa ser quebrada individualmente.

A salga agora está incluída na maioria dos principais tipos de hash como uma opção. Embora o Windows atualmente não use salga, ele pode criptografar os hashes armazenados se você usar a ferramenta ‘SYSKEY’.

Você também pode usar ’rounds’ ou hash de senha várias vezes. O uso de rodadas (principalmente se o número de rodadas for escolhido aleatoriamente para cada usuário) dificulta o trabalho do hacker. Isso é mais eficaz quando combinado com salga.

Infelizmente, um hacker que possui senhas com hash também terá acesso ao número de rodadas usadas e ao salt usado (porque, para obter essa lista, eles provavelmente foram comprometidos. O sal e o número de rodadas usadas são armazenados com a senha hash, o que significa que, se o invasor tiver um, ele também terá o outro, mas não poderá usar tabelas arco-íris pré-computadas disponíveis on-line e precisará calcular suas próprias tabelas (que consomem muito tempo).

Um outro método projetado para aumentar a dificuldade de quebrar a senha é usar uma pimenta. O Pepper é semelhante ao salt, mas enquanto um salt não é secreto (é armazenado com a senha com hash), o pepper é armazenado separadamente (por exemplo, em um arquivo de configuração) para impedir que um hacker o acesse. Isso significa que a pimenta é secreta e sua eficácia depende disso.

O Pepper precisa ser diferente para cada aplicativo usado e deve ser longo o suficiente para ser seguro. Pelo menos 112 bits são recomendados pelo Instituto Nacional de Padrões e Tecnologia.

Embora o uso de pimenta possa ser eficaz em alguns casos, existem algumas desvantagens. Primeiro, nenhum algoritmo atual suporta pimentas, o que significa praticamente que isso é impossível de implementar em escala. Ou seja, a menos que você esteja criando seus próprios algoritmos. Ouvir Bruce Schneier. Não faça isso.

Para um artigo mais longo sobre os problemas com pimentas, confira esta discussão.

Por fim, use senhas fortes (pelo menos 12 caracteres) e complexas e implemente políticas de senhas fortes em todos os sistemas. Isso pode incluir forçar os usuários a criar senhas fortes, testar sua força regularmente, usar gerenciadores de senhas no nível corporativo, impor o uso do 2FA e assim por diante.

Confuso sobre o que cria uma senha forte?

Screen Shot 2019 08 26 at 5.21.11 PM 1
https://xkcd.com/936/

Parece realmente fácil ser hackeado. Devo me preocupar?

A coisa mais importante a lembrar sobre hackers é que ninguém quer fazer mais trabalho do que precisa. Por exemplo, calcular tabelas arco-íris é muito trabalhoso. Se houver uma maneira mais fácil de obter sua senha, é provavelmente o que um ator nefasto tentará primeiro (como phishing!).

Isso significa que habilitar as práticas recomendadas básicas de segurança cibernética é provavelmente a maneira mais fácil de evitar ser invadido. De fato, a Microsoft relatado recentemente apenas ativar o 2FA acabará bloqueando 99,9% dos ataques automatizados.

Screen Shot 2019 08 27 at 1.18.47 PM
https://xkcd.com/538/

Feliz hacking!

Leitura adicional:

Mais detalhes sobre cadeias de hash

Outra explicação das tabelas do arco-íris

Uma lista de tabelas arco-íris on-line

[ad_2]

Fonte