Diferencia entre revisiones de «Escenario: Integridade con hash e ataques»

De MediaWiki
Ir a la navegación Ir a la búsqueda
(Página creada con « = Introdución = Este escenario ten como principal obxectivo explicar a base dos mecanismos que permiten verificar a integridade da información, impedindo que esta sexa m…»)
 
Línea 88: Línea 88:
  
 
Hai que valorar a importancia das colisións en funcións hash; xa que en función do campo de aplicación, pode ter unha importancia relativa. Unha colisión hash supón que dous documentos con contidos diferentes teñen o mesmo resumo hash. Outra cousa é que o contido deses arquivos teña algún sentido. Sen embargo, e como xa se indicou no punto anterior, recoméndase o uso de funcións hash sen problemas coñecidos.
 
Hai que valorar a importancia das colisións en funcións hash; xa que en función do campo de aplicación, pode ter unha importancia relativa. Unha colisión hash supón que dous documentos con contidos diferentes teñen o mesmo resumo hash. Outra cousa é que o contido deses arquivos teña algún sentido. Sen embargo, e como xa se indicou no punto anterior, recoméndase o uso de funcións hash sen problemas coñecidos.
 +
 +
= Configuración do escenario =
 +
== Imaxes ISO de Linux Ubuntu e arquivos hash ==
 +
 +
Para este escenario é preciso descargar ó equipo a imaxe iso de Linux Ubuntu Server 16.04.6 de 64 bits e os arquivos cos hashes MD5, SHA-1 e SHA-256. Podemos ir ó s[http://releases.ubuntu.com/ itio web oficial de descarga de Linux Ubuntu] e ir hacia abaixo na paina e escoller á sección adicada a Ubuntu 16.0.4.7 LTS (Xenial Xerus):
 +
 +
Unha vez dentro da sección de Ubuntu 16.0.4.7 descendemos e procedemos a descargar os arquivos MD5SUMS, SHA1SUMS, SHA256SUMS e ubuntu-16.04.6-server-i386.iso:
 +
 +
== Instalación de GtkHash ==
 +
 +
Para o escenario empregaremos a ferramenta [http://gtkhash.sourceforge.net/ GtkHash], que ven sendo unha utilidade que permite comprobar a integridade de arquivos. A súa instalación é moi sinxela, e pode facerse a través do centro de software de Ubuntu Linux ou a través da liña de comandos:
 +
 +
$ sudo apt update
 +
$ sudo apt install gtkhash
 +
 +
Unha vez rematada a instalación, probamos a lanzar o programa e debe aparecer algo coma isto:
 +
 +
== Cálculo de hashes ==
 +
 +
Para comprobar a integridade da imaxe iso do Linux Ubuntu Server descargada o que faremos é calcular o hash da iso e comparar o seu valor co hash indicado no repositorio oficial de Ubuntu:
 +
 +
Se coinciden, o arquivo descargado é o mesmo que hai nos repositorios oficiais.
 +
 +
Se non coinciden, hai discrepancias entre o arquivo descargado e o que hai no repositorio oficial. Non é o  mesmo arquivo.
 +
 +
=== Comprobación do hash por liña de comandos ===
 +
 +
Os arquivos MD5SUMS, SHA1SUMS e SHA256SUMS conteñen os hashes das diferentes imaxes iso aloxadas no sitio de descargas oficial de Ubuntu. Como xa se indicou, Canonical está deixando de lado os hashes md5 e sha1 en favor de sha256 como pode comprobarse se accedemos ás páxinas adicadas ás últimas versións (20.04 e 22.04).
 +
 +
MD5SUMS: contén os hashes MD5 das seguintes imaxes iso.
 +
5416371cc0e990871746ddaac89f1a5e *ubuntu-16.04.6-desktop-amd64.iso
 +
feefb18e7916c9a16bb09923ed98df64 *ubuntu-16.04.6-desktop-i386.iso
 +
ac8a79a86a905ebdc3ef3f5dd16b7360 *ubuntu-16.04.6-server-amd64.iso
 +
1817138b1a181507c5ebd5ec8a3f40ba *ubuntu-16.04.6-server-i386.iso
 +
SHA1SUMS: contén os hashes SHA-1 das seguintes imaxes iso.
 +
a09607901183ab25c675626024aa402663fa2558 *ubuntu-16.04.6-desktop-amd64.iso
 +
4e3528f6d45a25692f6f9c1f8acf9a3b7c114c5f *ubuntu-16.04.6-desktop-i386.iso
 +
056b7c15efc15bbbf40bf1a9ff1a3531fcbf70a2 *ubuntu-16.04.6-server-amd64.iso
 +
40343e90c9b8355ee6512e7680486df2f084eb1d *ubuntu-16.04.6-server-i386.iso
 +
SHA256SUMS: contén os hashes SHA-256 das seguintes imaxes iso.
 +
eecb9c8160cdb08adf0c2f17daa1d403f5a55f14a856a5973f32f267eb9db039 *ubuntu-16.04.6-desktop-i386.iso
 +
7509cabb2f9f6ba0a95f8454d432be2ef26679d31ce35baa626acc5321460fab *ubuntu-16.04.6-server-i386.iso
 +
8ba7e2687fb8a2152504475e92e489aace543059fd4ba7ffe10111c42394853b *ubuntu-16.04.7-desktop-amd64.iso
 +
b23488689e16cad7a269eb2d3a3bf725d3457ee6b0868e00c8762d3816e25848 *ubuntu-16.04.7-server-amd64.iso
 +
A utilidade sha256sum permite calcular o hash sha256 do arquivo e co comando grep podemos comprobar se o hash está na lista:
 +
 +
asir@incus:~$ sha256sum ubuntu-16.04.6-server-amd64.iso
 +
7509cabb2f9f6ba0a95f8454d432be2ef26679d31ce35baa626acc5321460fab  ubuntu-16.04.6-server-i386.iso
 +
asir@incus:~$ grep 7509cabb2f9f6ba0a95f8454d432be2ef26679d31ce35baa626acc5321460fab SHA256SUMS
 +
7509cabb2f9f6ba0a95f8454d432be2ef26679d31ce35baa626acc5321460fab *ubuntu-16.04.6-server-i386.iso
 +
No caso de non coincidir o hash calculado co presente no arquivo SHA256SUMS, non aparecería nada como saída do comando grep e eso significaría que o arquivo .iso é diferente ó orixinal.
 +
 +
Eu descarguei a imaxe iso de Ubuntu 16.04.06  de 32 bits para amosar as utilidades md5sum e sha1sum que permiten calcular o hash md5 e sha1 do arquivo respectivamente:
 +
 +
asir@incus:~$ md5sum ubuntu-16.04.6-server-i386.iso
 +
1817138b1a181507c5ebd5ec8a3f40ba  ubuntu-16.04.6-server-i386.iso
 +
asir@incus:~$ grep 1817138b1a181507c5ebd5ec8a3f40ba MD5SUMS
 +
1817138b1a181507c5ebd5ec8a3f40ba *ubuntu-16.04.6-server-i386.iso
 +
Repítense as operacións anteriores para SHA-1:
 +
 +
asir@incus:~$ sha1sum ubuntu-16.04.6-server-i386.iso
 +
40343e90c9b8355ee6512e7680486df2f084eb1d  ubuntu-16.04.6-server-i386.iso
 +
asir@incus:~$ grep 40343e90c9b8355ee6512e7680486df2f084eb1d SHA1SUMS
 +
40343e90c9b8355ee6512e7680486df2f084eb1d *ubuntu-16.04.6-server-i386.iso
 +
Comprobación do hash con GtkHash
 +
O uso da aplicación GtkHash é moi sinxelo e básicamente consiste en indicar o arquivo sobre o que calcularemos o hash e indicar no campo Comprobar o hash co que comparar. Comprobamos a continuación o hash SHA256:
 +
 +
Hash SHA256
 +
 +
Fig. Verificación do hash SHA256
 +
 +
O mesmo podería facer se o que temos é o hash md5 ou o sha1.
 +
 +
Hash sha1
 +
 +
Fig. Verificación do hash SHA-1
 +
 +
Hash md5
 +
 +
Fig. Verificación do hash MD5
 +
 +
GtkHash é unha aplicación moi sinxela e cómoda de usar; sen embargo, non hai que olvidar que as mesmas comprobacións podémolas facer por liña de comandos. Pode ocorrer que non haxa contorno gráfico no equipo onde precisemos facer a verificación dun hash.
 +
 +
Tamén é posible empregar o comando Get-FileHash no PowerShell de Windows. Por defecto calcula o hash sha256 pero co parámetro -algorith pódese indicar o hash no que estemos interesados:
 +
 +
PS C:\Users\magasix> Get-FileHash -algorith md5 .\ubuntu-16.04.6-server-i386.iso
 +
 +
Algorithm      Hash                                                                  Path
 +
---------      ----                                                                  ----
 +
MD5            1817138B1A181507C5EBD5EC8A3F40BA                                      C:\Users\magasix\ubuntu-16.04...
 +
 +
PS C:\Users\magasix> Get-FileHash -algorith sha1 .\ubuntu-16.04.6-server-i386.iso
 +
 +
Algorithm      Hash                                                                  Path
 +
---------      ----                                                                  ----
 +
SHA1            40343E90C9B8355EE6512E7680486DF2F084EB1D                              C:\Users\magasix\ubuntu-16.04...
 +
 +
PS C:\Users\magasix> Get-FileHash .\ubuntu-16.04.6-server-i386.iso
 +
 +
Algorithm      Hash                                                                  Path
 +
---------      ----                                                                  ----
 +
SHA256          7509CABB2F9F6BA0A95F8454D432BE2EF26679D31CE35BAA626ACC5321460FAB      C:\Users\magasix\ubuntu-16.04...
 +
 +
 +
= Ataques a contrasinais =
 +
 +
== Codificar non é seguro ==
 +
 +
Codificar é o proceso de transformar un tipo de información noutra, sen perder nada de información nesa transformación. Para recuperar a mensaxe orixinal é preciso coñecer o código empregado para realizar a decodificación.
 +
 +
Protexer información mediante códigos non é seguro xa que se a outra parte coñece o código empregado, pode proceder a decodificar a mensaxe e acceder á información orixinal. A modo de exemplo, o seguinte texto correspóndese cunha mensaxe de correo electrónico enviada polo malware HawkEye Keylogger. Este malware adícase a recopilar información do equipo  vítima (principalmente credenciais) e exfiltrala, neste caso mediante mensaxes de email. Tanto o subject como o corpo da mensaxe están codificados en base64 polo que acceder á información roubada é trivial e un analista de seguridade podería ver as credenciais comprometidas:
 +
 +
From: sales.del@macwinlogistics.in
 +
To: sales.del@macwinlogistics.in
 +
Date: 10 Apr 2019 20:38:08 +0000
 +
Subject: =?utf-8?B?SGF3a0V5ZSBLZXlsb2dnZXIgLSBSZWJvcm4gdjkgLSBQYXNzd29yZHMgTG9ncyAtIHJvbWFuLm1jZ3VpcmUgXCBCRUlKSU5HLTVDRDEtUEMgLSAxNzMuNjYuMTQ2LjExMg==?=
 +
Content-Type: text/plain; charset=utf-8
 +
Content-Transfer-Encoding: base64
 +
 +
SGF3a0V5ZSBLZXlsb2dnZXIgLSBSZWJvcm4gdjkNClBhc3N3b3JkcyBMb2dzDQpyb21hbi5t
 +
Y2d1aXJlIFwgQkVJSklORy01Q0QxLVBDDQoNCj09PT09PT09PT09PT09PT09PT09PT09PT09
 +
PT09PT09PT09PT09PT09PT09PT09PT09DQpVUkwgICAgICAgICAgICAgICA6IGh0dHBzOi8v
 +
bG9naW4uYW9sLmNvbS9hY2NvdW50L2NoYWxsZW5nZS9wYXNzd29yZA0KV2ViIEJyb3dzZXIg
 +
ICAgICAgOiBJbnRlcm5ldCBFeHBsb3JlciA3LjAgLSA5LjANClVzZXIgTmFtZSAgICAgICAg
 +
IDogcm9tYW4ubWNndWlyZTkxNEBhb2wuY29tDQpQYXNzd29yZCAgICAgICAgICA6IFBAc3N3
 +
MHJkJA0KUGFzc3dvcmQgU3RyZW5ndGggOiBWZXJ5IFN0cm9uZw0KVXNlciBOYW1lIEZpZWxk
 +
ICAgOiANClBhc3N3b3JkIEZpZWxkICAgIDogDQpDcmVhdGVkIFRpbWUgICAgICA6IA0KTW9k
 +
aWZpZWQgVGltZSAgICAgOiANCkZpbGVuYW1lICAgICAgICAgIDogDQo9PT09PT09PT09PT09
 +
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KDQo9PT09PT09PT09PT09
 +
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KVVJMICAgICAgICAgICAg
 +
ICAgOiBodHRwczovL3d3dy5iYW5rb2ZhbWVyaWNhLmNvbS8NCldlYiBCcm93c2VyICAgICAg
 +
IDogQ2hyb21lDQpVc2VyIE5hbWUgICAgICAgICA6IHJvbWFuLm1jZ3VpcmUNClBhc3N3b3Jk
 +
ICAgICAgICAgIDogUEBzc3cwcmQkDQpQYXNzd29yZCBTdHJlbmd0aCA6IFZlcnkgU3Ryb25n
 +
DQpVc2VyIE5hbWUgRmllbGQgICA6IG9ubGluZUlkMQ0KUGFzc3dvcmQgRmllbGQgICAgOiBw
 +
YXNzY29kZTENCkNyZWF0ZWQgVGltZSAgICAgIDogNC8xMC8yMDE5IDI6MzU6MTcgQU0NCk1v
 +
ZGlmaWVkIFRpbWUgICAgIDogDQpGaWxlbmFtZSAgICAgICAgICA6IEM6XFVzZXJzXHJvbWFu
 +
Lm1jZ3VpcmVcQXBwRGF0YVxMb2NhbFxHb29nbGVcQ2hyb21lXFVzZXIgRGF0YVxEZWZhdWx0
 +
XExvZ2luIERhdGENCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
 +
PT09PT09PT09DQoNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
 +
PT09PT09PT09DQpOYW1lICAgICAgICAgICAgICA6IFJvbWFuIE1jR3VpcmUNCkFwcGxpY2F0
 +
aW9uICAgICAgIDogTVMgT3V0bG9vayAyMDAyLzIwMDMvMjAwNy8yMDEwDQpFbWFpbCAgICAg
 +
ICAgICAgICA6IHJvbWFuLm1jZ3VpcmVAcGl6emFqdWtlYm94LmNvbQ0KU2VydmVyICAgICAg
 +
ICAgICAgOiBwb3AucGl6emFqdWtlYm94LmNvbQ0KU2VydmVyIFBvcnQgICAgICAgOiA5OTUN
 +
ClNlY3VyZWQgICAgICAgICAgIDogTm8NClR5cGUgICAgICAgICAgICAgIDogUE9QMw0KVXNl
 +
ciAgICAgICAgICAgICAgOiByb21hbi5tY2d1aXJlDQpQYXNzd29yZCAgICAgICAgICA6IFBA
 +
c3N3MHJkJA0KUHJvZmlsZSAgICAgICAgICAgOiBPdXRsb29rDQpQYXNzd29yZCBTdHJlbmd0
 +
aCA6IFZlcnkgU3Ryb25nDQpTTVRQIFNlcnZlciAgICAgICA6IHNtdHAucGl6emFqdWtlYm94
 +
LmNvbQ0KU01UUCBTZXJ2ZXIgUG9ydCAgOiA1ODcNCj09PT09PT09PT09PT09PT09PT09PT09
 +
PT09PT09PT09PT09PT09PT09PT09PT09PT09DQoNCg==
 +
 +
.
 +
 +
Ben por liña de comandos ou a través da aplicación web Cyberchef pódese recuperar o contido orixinal aplicando unha decodificación bas64. Cyberchef funciona con receitas (recipes) que permiten aplicar accións sobre unha entrada de texto e neste caso aplicamos From Base64 sobre o texto do corpo do email:
 +
 +
Cyberchef
 +
 +
Hashes Windows
 +
Se temos un volcado da base de datos SAM de usuarios e contrasinais dun sistema Windows é posible ver o hash do contrasinal:
 +
 +
Administrator:500:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
 +
dumper:1004:ebd1b59f4f5a6843aad3b435b51404ee:7324322d85d3714068d67eccee442365:::
 +
admin:1005:7cc48b08335cd858aad3b435b51404ee:556a8f7773e850d4cf4d789d39ddaca0::
 +
 +
O resaltado en negriña é o hash NTLM empregado polos sistemas Windows modernos e como pode verse non emprega salt, polo que é susceptible de ataques de precómputo, onde a partir dunha listaxe de contrasinais calcúlase o correspondente hash; e ademais dou hashes iguais, implican contrasinais idénticos. Hai servizos online que permiten 'romper' password hashes como Crackstation:
 +
 +
Crackstation
 +
 +
Hashes Linux
 +
Aquí a cousa cambia polo uso de diferentes algoritmos e o emprego de salt. O ser o salt algo aleatorio conséguese que:
 +
 +
non ten sentido facer precómputo, xa que sen o salt exacto non vale para nada.
 +
contrasinais idénticos asociados a salts diferentes, tradúcense en hashes diferentes. Podemos estar ante dous usuarios co mesmo contrasinal e veremos hashes diferentes.
 +
Tomando como exemplo esta entrada do arquivo /etc/shadow dun equipo Linux
 +
 +
root:$6$jzcdBmCLz0zF2.b/$6sok07AjDc3TN3oeI/NqrdZ6NSQly3ADW6lvs3z5q.5GDqsCypL8WtL7ARhzDcdYgukakXWeNbiIP7GyigCse/:19762:0:99999:7:::
 +
 +
root --> trátase da entrada asociada á conta de root dun sistema Linux
 +
$6$ --> hash SHA-512
 +
jzcdBmCLz0zF2.b/ --> salt
 +
6sok07AjDc3TN3oeI/NqrdZ6NSQly3ADW6lvs3z5q.5GDqsCypL8WtL7ARhzDcdYgukakXWeNbiIP7GyigCse/ --> hash do salt+password
 +
Para facer o ataque podemos empregar john o hashcat e un arquivo de contrasinais como rockyou (usado no tema anterior):
 +
 +
manuel@x99:~$ nano hash_linux
 +
root:$6$jzcdBmCLz0zF2.b/$6sok07AjDc3TN3oeI/NqrdZ6NSQly3ADW6lvs3z5q.5GDqsCypL8WtL7ARhzDcdYgukakXWeNbiIP7GyigCse/:19762:0:99999:7:::
 +
manuel@x99:~$ john hash_linux --wordlist=rockyou.txt
 +
Created directory: /home/manuel/.john
 +
Loaded 1 password hash (crypt, generic crypt(3) [?/64])
 +
Press 'q' or Ctrl-C to abort, almost any other key for status
 +
shadow123        (root)
 +
1g 0:00:00:20 100% 0.04798g/s 391.5p/s 391.5c/s 391.5C/s yogibear..love03
 +
Use the "--show" option to display all of the cracked passwords reliably
 +
Session completed
 +
É unha cuestión de tempo e ter un diccionario axeitado. Pensade que moita xente usa como contrasinal datos da súa vida: nomes (parella, fillos, cidades, lugares, mascotas, ...), números (matrículas, dni, datas nacemento, ...), ... información que en moitos casos é pública.
 +
 +
= Conclusións =
 +
 +
Se estades configurando sistemas vosos:
 +
* optade por sistemas robustos (md5 non é unha forma segura de gardar contrasinais nin información)
 +
* hai que consultar a documentación dos sistema (sistema operativo, xestor de base de datos, ...)
 +
 +
No caso de ser usuario de sistemas/aplicacións xestionados por outra xente, activade o modo paranoico:
 +
* non podedes saber se os vosos contrasinais gárdanse en claro (sí, hai xente que o fai)
 +
* non podedes saber se están empregando un sistema robusto para gardar a inforamción (pensade que pode haber fugas de información).
 +
 +
Polo tanto, usade '''contrasinais longas''' e '''complexas''' que dificulten os ataques e '''evitade a reutilización de contrasinais''' para evitar que si un sistema queda comprometido, afecte a outros.

Revisión del 11:21 9 feb 2026

Introdución

Este escenario ten como principal obxectivo explicar a base dos mecanismos que permiten verificar a integridade da información, impedindo que esta sexa modificada de forma inadvertida. Ademáis, os conceptos que se revisan neste escenario servirán para comprender unha parte do funcionamento dos protocolos SSL/TLS e do proceso de firma electrónica.

Neste escenario realizaranse as accións necesarias para:

  • Descargar a imaxen iso de Ubuntu Server 16.0.4.6 e os arquivos cos hashes md5, sha1 e sha256.
  • Calcular o hash md5 da imaxen iso descargada usando a utilidade md5sum e verificar que se corresponde co esperado.
  • Calcular o hash sha-1 da imaxen iso descargada usando a utilidade sha1sum e verificar que se corresponde co esperado.
  • Calcular o hash sha-256 da imaxen iso descargada usando a utilidade sha256sum e verificar que se corresponde co esperado.
  • Instalar a utilidade gráfica GtkHash e verificar novamente os hashes md5, sha-1 e sha-256.
NOTA. O motivo de usar a imaxen de Ubuntu Server 16.0.4.6 é para traballar os hashes md5, sha-1 e sha-256, xa que a partir da versión 18.04 Canonical únicamente proporciona o hash sha-256.

Funcións hash

Unha función hash é unha función matemática que converte un conxunto de datos noutro, normalmente nunha cadea de lonxitude fixa. O valor devolto pola función hash chámase resumo, checksum, suma hash ou hash. As funcións hash tamén son coñecidas como funcións resumo ou funcións digest. A seguinte imaxe exemplifica o funcionamento dunha función hash:

Funcionamento dunha función hash

Fig. Funcionamento das funcións hash. Fonte: Wikipedia. Licenza CC BY-SA 3.0.

A modo de exemplo, creamos un arquivo de texto e calculamos o hash MD5 usando o comando md5sum en Linux Ubuntu:

$ nano arquivo.txt 
ola mundo
$ cat arquivo.txt 
ola mundo
md5sum arquivo.txt
2c61dba1b7d13d2224bb94a08044cc96  arquivo.txt

O resultado 2c61dba1b7d13d2224bb94a08044cc96 é o resumo ou hash do noso arquivo. Ó aplicar unha función hash a un documento ou ficheiro o valor resumo é unha cadea que identifica inequívocamente o contido.

Pódese entender o resumo como o 'adn' que identifica únivocamente a ese arquivo; é dicir, non vai haber outro arquivo co mesmo adn (resumo ou hash).

De feito, se o contido do arquivo cambia, tamén cambiará o hash:

$ nano arquivo.txt
ola mundo
adeus mundo
$ cat arquivo.txt 
ola mundo
adeus mundo
$ md5sum arquivo.txt
aec5dd5542ecd96b30b773a475624c7d  arquivo.txt

Hai dúas características moi interesantes das funcións hash:

  • Funcionan nunha soa dirección; e polo tanto, é imposible calcular os datos orixinais a partir do valor resumo.
  • O valor resumo, resultado de aplicar a función hash a un documento, é unha cadea que identifica inequívocamente o contido.

Estas características fan que as funcións hash se usen para:

  • Comprobación da integridade dun ficheiro: as funcións hash permiten saber se un ficheiro sufriu modificacións; xa que un cambio no contido do ficheiro, tradúcese nun valor resumo diferente. Esto permite usar as funcións hash para:
  • Comprobar se un arquivo descargado/enviado/almacenado corrompeuse (erros fortuitos). Por exemplo, verificar a validez dunha imaxe iso descargada antes de queimala nun CD.
  • Comprobar se o contido de arquivos de configuración, binarios do sistema, …, sufriu modificacións. Por exemplo, calcúlase o hash de determinados arquivos de configuración e binarios do sistema. Se o equipo fose asaltado e o atacante realizase modificacións nalgún arquivo de configuración ou binario, podería detectarse xa que os hashes deses arquivos cambiaron. Esta técnica é usada por sistemas HIDS (host-based intrusion detection system) como tripwire e OSSEC.
  • Identificación de ficheiros: como o hash depende do contido do arquivo é posible identificar arquivos con independencia do seu nome e/ou ubicación. Un exemplo desta funcionalidade pódese atopar no software Vicus da Garda Civil, reeemprazo de Hispalis. Vicus rastrexa os hashes dos arquivos que se intercambian en redes P2P e compáraos cos hashes de vídeo e fotografías de carácter pedófilo das súas bases de datos. Se coincide o hash dun arquivo da rede P2P co hash dun arquivo da base de datos da Garda Civil, quere dicir que na rede P2P hai material ilícto.
  • Almacenamento de contrasinais: en vez de gardar o contrasinal dos usuarios, gárdase o hash do contrasinal. Cando un usuario quere autenticarse indicando o seu contrasinal, calcúlase o hash e compárase co valor do hash almacenado.

Un exemplo podémolo atopar no arquivo de contrasinais /etc/shadow dos sistemas Linux:

$ sudo cat /etc/shadow
[sudo] password for magasix: 
root:!:16250:0:99999:7:::
...
landscape:*:16250:0:99999:7:::
magasix:$6$S3lsgIO5$0nEdz4z9yddTWla2TzS1M3cGscwgXTfwlcnYVSM3fT/3HR1YG2otS6DWBJZgvpOOgz0jS/GITsiziVsW/W2Ct0:16250:0:99999:7:::
tecnico:$6$RTCAje1r$HwfQCdL0NnoVie6hDFVKoies6l1SA5GlPvnDajLQvRjeh9TowrFOIg6keBT8svp4p1oQSBM3xbhI0c7R5FXj5/:16719:0:99999:7:::
...

O campo password ten o seguinte formato: $*A$*B$*C

  • A --> número que indica o tipo de función hash usada.
 - 1 para MD5.
 - 2 para Blowfish.
 - 3 para NT Hash.
 - 5 para SHA-256.
 - 6 para SHA-512.
 - y para Yescrypt, que é o sistema que están a adoptar distribucións como Debian, Ubuntu, Fedora, Arch, ..., xa que presenta melloras que ralentizan os ataques de contrasinais.
  • B: Salt. Combinación aleatoria usada para crear o hash do contrasinal pensada para dificultar a recuperación do contrasinal en caso de ataque (dúas contrasinais iguais pero con diferente salt teñen hashes distintos).
  • C: Hash calculado a partir do contrasinal e o salt.

Colisións

Unha colisión hash prodúcese cando dúas entradas diferentes a unha función hash producen o mesmo valor resumo. No exemplo da seguinte imaxe pode verse unha colisión; xa que dous valores diferentes de entrada (John Smith e Sandra Dee), levan ó mesmo hash.

Colisión en función hash

Fig. Colisión hash. Fonte: Wikipedia. Licenza Dominio Público.

Cando o rango de posibles valores resumo é menor que o rango de posibles valores de entrada haberá colisións. En criptografía, acéptase o uso de funcións hash especialmente deseñadas para garantir que as colisións son computacionalmente imposibles; é dicir, o tempo para lograr unha colisión hash é tan grande que non se considera factible. Exemplos de funcións hash usadas en criptografía son MD5 (Message Digest Algorithm), SHA (Secure Hash Algorith) e RIPEPMD-160.

A finais de 2008, e tras descubrirse varios erros no deseño, MD5 foi considerado criptográficamente roto e non apto para o seu uso polo departamento de seguridade nacional de EEUU. Algo semellante sucedeu con SHA-1 polo que a partir do ano 2010 recomendouse o uso de SHA-2.

Hai que valorar a importancia das colisións en funcións hash; xa que en función do campo de aplicación, pode ter unha importancia relativa. Unha colisión hash supón que dous documentos con contidos diferentes teñen o mesmo resumo hash. Outra cousa é que o contido deses arquivos teña algún sentido. Sen embargo, e como xa se indicou no punto anterior, recoméndase o uso de funcións hash sen problemas coñecidos.

Configuración do escenario

Imaxes ISO de Linux Ubuntu e arquivos hash

Para este escenario é preciso descargar ó equipo a imaxe iso de Linux Ubuntu Server 16.04.6 de 64 bits e os arquivos cos hashes MD5, SHA-1 e SHA-256. Podemos ir ó sitio web oficial de descarga de Linux Ubuntu e ir hacia abaixo na paina e escoller á sección adicada a Ubuntu 16.0.4.7 LTS (Xenial Xerus):

Unha vez dentro da sección de Ubuntu 16.0.4.7 descendemos e procedemos a descargar os arquivos MD5SUMS, SHA1SUMS, SHA256SUMS e ubuntu-16.04.6-server-i386.iso:

Instalación de GtkHash

Para o escenario empregaremos a ferramenta GtkHash, que ven sendo unha utilidade que permite comprobar a integridade de arquivos. A súa instalación é moi sinxela, e pode facerse a través do centro de software de Ubuntu Linux ou a través da liña de comandos:

$ sudo apt update
$ sudo apt install gtkhash

Unha vez rematada a instalación, probamos a lanzar o programa e debe aparecer algo coma isto:

Cálculo de hashes

Para comprobar a integridade da imaxe iso do Linux Ubuntu Server descargada o que faremos é calcular o hash da iso e comparar o seu valor co hash indicado no repositorio oficial de Ubuntu:

Se coinciden, o arquivo descargado é o mesmo que hai nos repositorios oficiais.

Se non coinciden, hai discrepancias entre o arquivo descargado e o que hai no repositorio oficial. Non é o mesmo arquivo.

Comprobación do hash por liña de comandos

Os arquivos MD5SUMS, SHA1SUMS e SHA256SUMS conteñen os hashes das diferentes imaxes iso aloxadas no sitio de descargas oficial de Ubuntu. Como xa se indicou, Canonical está deixando de lado os hashes md5 e sha1 en favor de sha256 como pode comprobarse se accedemos ás páxinas adicadas ás últimas versións (20.04 e 22.04).

MD5SUMS: contén os hashes MD5 das seguintes imaxes iso. 5416371cc0e990871746ddaac89f1a5e *ubuntu-16.04.6-desktop-amd64.iso feefb18e7916c9a16bb09923ed98df64 *ubuntu-16.04.6-desktop-i386.iso ac8a79a86a905ebdc3ef3f5dd16b7360 *ubuntu-16.04.6-server-amd64.iso 1817138b1a181507c5ebd5ec8a3f40ba *ubuntu-16.04.6-server-i386.iso SHA1SUMS: contén os hashes SHA-1 das seguintes imaxes iso. a09607901183ab25c675626024aa402663fa2558 *ubuntu-16.04.6-desktop-amd64.iso 4e3528f6d45a25692f6f9c1f8acf9a3b7c114c5f *ubuntu-16.04.6-desktop-i386.iso 056b7c15efc15bbbf40bf1a9ff1a3531fcbf70a2 *ubuntu-16.04.6-server-amd64.iso 40343e90c9b8355ee6512e7680486df2f084eb1d *ubuntu-16.04.6-server-i386.iso SHA256SUMS: contén os hashes SHA-256 das seguintes imaxes iso. eecb9c8160cdb08adf0c2f17daa1d403f5a55f14a856a5973f32f267eb9db039 *ubuntu-16.04.6-desktop-i386.iso 7509cabb2f9f6ba0a95f8454d432be2ef26679d31ce35baa626acc5321460fab *ubuntu-16.04.6-server-i386.iso 8ba7e2687fb8a2152504475e92e489aace543059fd4ba7ffe10111c42394853b *ubuntu-16.04.7-desktop-amd64.iso b23488689e16cad7a269eb2d3a3bf725d3457ee6b0868e00c8762d3816e25848 *ubuntu-16.04.7-server-amd64.iso A utilidade sha256sum permite calcular o hash sha256 do arquivo e co comando grep podemos comprobar se o hash está na lista:

asir@incus:~$ sha256sum ubuntu-16.04.6-server-amd64.iso 7509cabb2f9f6ba0a95f8454d432be2ef26679d31ce35baa626acc5321460fab ubuntu-16.04.6-server-i386.iso asir@incus:~$ grep 7509cabb2f9f6ba0a95f8454d432be2ef26679d31ce35baa626acc5321460fab SHA256SUMS 7509cabb2f9f6ba0a95f8454d432be2ef26679d31ce35baa626acc5321460fab *ubuntu-16.04.6-server-i386.iso No caso de non coincidir o hash calculado co presente no arquivo SHA256SUMS, non aparecería nada como saída do comando grep e eso significaría que o arquivo .iso é diferente ó orixinal.

Eu descarguei a imaxe iso de Ubuntu 16.04.06 de 32 bits para amosar as utilidades md5sum e sha1sum que permiten calcular o hash md5 e sha1 do arquivo respectivamente:

asir@incus:~$ md5sum ubuntu-16.04.6-server-i386.iso 1817138b1a181507c5ebd5ec8a3f40ba ubuntu-16.04.6-server-i386.iso asir@incus:~$ grep 1817138b1a181507c5ebd5ec8a3f40ba MD5SUMS 1817138b1a181507c5ebd5ec8a3f40ba *ubuntu-16.04.6-server-i386.iso Repítense as operacións anteriores para SHA-1:

asir@incus:~$ sha1sum ubuntu-16.04.6-server-i386.iso 40343e90c9b8355ee6512e7680486df2f084eb1d ubuntu-16.04.6-server-i386.iso asir@incus:~$ grep 40343e90c9b8355ee6512e7680486df2f084eb1d SHA1SUMS 40343e90c9b8355ee6512e7680486df2f084eb1d *ubuntu-16.04.6-server-i386.iso Comprobación do hash con GtkHash O uso da aplicación GtkHash é moi sinxelo e básicamente consiste en indicar o arquivo sobre o que calcularemos o hash e indicar no campo Comprobar o hash co que comparar. Comprobamos a continuación o hash SHA256:

Hash SHA256

Fig. Verificación do hash SHA256

O mesmo podería facer se o que temos é o hash md5 ou o sha1.

Hash sha1

Fig. Verificación do hash SHA-1

Hash md5

Fig. Verificación do hash MD5

GtkHash é unha aplicación moi sinxela e cómoda de usar; sen embargo, non hai que olvidar que as mesmas comprobacións podémolas facer por liña de comandos. Pode ocorrer que non haxa contorno gráfico no equipo onde precisemos facer a verificación dun hash.

Tamén é posible empregar o comando Get-FileHash no PowerShell de Windows. Por defecto calcula o hash sha256 pero co parámetro -algorith pódese indicar o hash no que estemos interesados:

PS C:\Users\magasix> Get-FileHash -algorith md5 .\ubuntu-16.04.6-server-i386.iso

Algorithm Hash Path


---- ----

MD5 1817138B1A181507C5EBD5EC8A3F40BA C:\Users\magasix\ubuntu-16.04...

PS C:\Users\magasix> Get-FileHash -algorith sha1 .\ubuntu-16.04.6-server-i386.iso

Algorithm Hash Path


---- ----

SHA1 40343E90C9B8355EE6512E7680486DF2F084EB1D C:\Users\magasix\ubuntu-16.04...

PS C:\Users\magasix> Get-FileHash .\ubuntu-16.04.6-server-i386.iso

Algorithm Hash Path


---- ----

SHA256 7509CABB2F9F6BA0A95F8454D432BE2EF26679D31CE35BAA626ACC5321460FAB C:\Users\magasix\ubuntu-16.04...


Ataques a contrasinais

Codificar non é seguro

Codificar é o proceso de transformar un tipo de información noutra, sen perder nada de información nesa transformación. Para recuperar a mensaxe orixinal é preciso coñecer o código empregado para realizar a decodificación.

Protexer información mediante códigos non é seguro xa que se a outra parte coñece o código empregado, pode proceder a decodificar a mensaxe e acceder á información orixinal. A modo de exemplo, o seguinte texto correspóndese cunha mensaxe de correo electrónico enviada polo malware HawkEye Keylogger. Este malware adícase a recopilar información do equipo vítima (principalmente credenciais) e exfiltrala, neste caso mediante mensaxes de email. Tanto o subject como o corpo da mensaxe están codificados en base64 polo que acceder á información roubada é trivial e un analista de seguridade podería ver as credenciais comprometidas:

From: sales.del@macwinlogistics.in To: sales.del@macwinlogistics.in Date: 10 Apr 2019 20:38:08 +0000 Subject: =?utf-8?B?SGF3a0V5ZSBLZXlsb2dnZXIgLSBSZWJvcm4gdjkgLSBQYXNzd29yZHMgTG9ncyAtIHJvbWFuLm1jZ3VpcmUgXCBCRUlKSU5HLTVDRDEtUEMgLSAxNzMuNjYuMTQ2LjExMg==?= Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: base64

SGF3a0V5ZSBLZXlsb2dnZXIgLSBSZWJvcm4gdjkNClBhc3N3b3JkcyBMb2dzDQpyb21hbi5t Y2d1aXJlIFwgQkVJSklORy01Q0QxLVBDDQoNCj09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09DQpVUkwgICAgICAgICAgICAgICA6IGh0dHBzOi8v bG9naW4uYW9sLmNvbS9hY2NvdW50L2NoYWxsZW5nZS9wYXNzd29yZA0KV2ViIEJyb3dzZXIg ICAgICAgOiBJbnRlcm5ldCBFeHBsb3JlciA3LjAgLSA5LjANClVzZXIgTmFtZSAgICAgICAg IDogcm9tYW4ubWNndWlyZTkxNEBhb2wuY29tDQpQYXNzd29yZCAgICAgICAgICA6IFBAc3N3 MHJkJA0KUGFzc3dvcmQgU3RyZW5ndGggOiBWZXJ5IFN0cm9uZw0KVXNlciBOYW1lIEZpZWxk ICAgOiANClBhc3N3b3JkIEZpZWxkICAgIDogDQpDcmVhdGVkIFRpbWUgICAgICA6IA0KTW9k aWZpZWQgVGltZSAgICAgOiANCkZpbGVuYW1lICAgICAgICAgIDogDQo9PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KDQo9PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KVVJMICAgICAgICAgICAg ICAgOiBodHRwczovL3d3dy5iYW5rb2ZhbWVyaWNhLmNvbS8NCldlYiBCcm93c2VyICAgICAg IDogQ2hyb21lDQpVc2VyIE5hbWUgICAgICAgICA6IHJvbWFuLm1jZ3VpcmUNClBhc3N3b3Jk ICAgICAgICAgIDogUEBzc3cwcmQkDQpQYXNzd29yZCBTdHJlbmd0aCA6IFZlcnkgU3Ryb25n DQpVc2VyIE5hbWUgRmllbGQgICA6IG9ubGluZUlkMQ0KUGFzc3dvcmQgRmllbGQgICAgOiBw YXNzY29kZTENCkNyZWF0ZWQgVGltZSAgICAgIDogNC8xMC8yMDE5IDI6MzU6MTcgQU0NCk1v ZGlmaWVkIFRpbWUgICAgIDogDQpGaWxlbmFtZSAgICAgICAgICA6IEM6XFVzZXJzXHJvbWFu Lm1jZ3VpcmVcQXBwRGF0YVxMb2NhbFxHb29nbGVcQ2hyb21lXFVzZXIgRGF0YVxEZWZhdWx0 XExvZ2luIERhdGENCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09DQoNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09DQpOYW1lICAgICAgICAgICAgICA6IFJvbWFuIE1jR3VpcmUNCkFwcGxpY2F0 aW9uICAgICAgIDogTVMgT3V0bG9vayAyMDAyLzIwMDMvMjAwNy8yMDEwDQpFbWFpbCAgICAg ICAgICAgICA6IHJvbWFuLm1jZ3VpcmVAcGl6emFqdWtlYm94LmNvbQ0KU2VydmVyICAgICAg ICAgICAgOiBwb3AucGl6emFqdWtlYm94LmNvbQ0KU2VydmVyIFBvcnQgICAgICAgOiA5OTUN ClNlY3VyZWQgICAgICAgICAgIDogTm8NClR5cGUgICAgICAgICAgICAgIDogUE9QMw0KVXNl ciAgICAgICAgICAgICAgOiByb21hbi5tY2d1aXJlDQpQYXNzd29yZCAgICAgICAgICA6IFBA c3N3MHJkJA0KUHJvZmlsZSAgICAgICAgICAgOiBPdXRsb29rDQpQYXNzd29yZCBTdHJlbmd0 aCA6IFZlcnkgU3Ryb25nDQpTTVRQIFNlcnZlciAgICAgICA6IHNtdHAucGl6emFqdWtlYm94 LmNvbQ0KU01UUCBTZXJ2ZXIgUG9ydCAgOiA1ODcNCj09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09DQoNCg==

.

Ben por liña de comandos ou a través da aplicación web Cyberchef pódese recuperar o contido orixinal aplicando unha decodificación bas64. Cyberchef funciona con receitas (recipes) que permiten aplicar accións sobre unha entrada de texto e neste caso aplicamos From Base64 sobre o texto do corpo do email:

Cyberchef

Hashes Windows Se temos un volcado da base de datos SAM de usuarios e contrasinais dun sistema Windows é posible ver o hash do contrasinal:

Administrator:500:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0::: dumper:1004:ebd1b59f4f5a6843aad3b435b51404ee:7324322d85d3714068d67eccee442365::: admin:1005:7cc48b08335cd858aad3b435b51404ee:556a8f7773e850d4cf4d789d39ddaca0::

O resaltado en negriña é o hash NTLM empregado polos sistemas Windows modernos e como pode verse non emprega salt, polo que é susceptible de ataques de precómputo, onde a partir dunha listaxe de contrasinais calcúlase o correspondente hash; e ademais dou hashes iguais, implican contrasinais idénticos. Hai servizos online que permiten 'romper' password hashes como Crackstation:

Crackstation

Hashes Linux Aquí a cousa cambia polo uso de diferentes algoritmos e o emprego de salt. O ser o salt algo aleatorio conséguese que:

non ten sentido facer precómputo, xa que sen o salt exacto non vale para nada. contrasinais idénticos asociados a salts diferentes, tradúcense en hashes diferentes. Podemos estar ante dous usuarios co mesmo contrasinal e veremos hashes diferentes. Tomando como exemplo esta entrada do arquivo /etc/shadow dun equipo Linux

root:$6$jzcdBmCLz0zF2.b/$6sok07AjDc3TN3oeI/NqrdZ6NSQly3ADW6lvs3z5q.5GDqsCypL8WtL7ARhzDcdYgukakXWeNbiIP7GyigCse/:19762:0:99999:7:::

root --> trátase da entrada asociada á conta de root dun sistema Linux $6$ --> hash SHA-512 jzcdBmCLz0zF2.b/ --> salt 6sok07AjDc3TN3oeI/NqrdZ6NSQly3ADW6lvs3z5q.5GDqsCypL8WtL7ARhzDcdYgukakXWeNbiIP7GyigCse/ --> hash do salt+password Para facer o ataque podemos empregar john o hashcat e un arquivo de contrasinais como rockyou (usado no tema anterior):

manuel@x99:~$ nano hash_linux root:$6$jzcdBmCLz0zF2.b/$6sok07AjDc3TN3oeI/NqrdZ6NSQly3ADW6lvs3z5q.5GDqsCypL8WtL7ARhzDcdYgukakXWeNbiIP7GyigCse/:19762:0:99999:7::: manuel@x99:~$ john hash_linux --wordlist=rockyou.txt Created directory: /home/manuel/.john Loaded 1 password hash (crypt, generic crypt(3) [?/64]) Press 'q' or Ctrl-C to abort, almost any other key for status shadow123 (root) 1g 0:00:00:20 100% 0.04798g/s 391.5p/s 391.5c/s 391.5C/s yogibear..love03 Use the "--show" option to display all of the cracked passwords reliably Session completed É unha cuestión de tempo e ter un diccionario axeitado. Pensade que moita xente usa como contrasinal datos da súa vida: nomes (parella, fillos, cidades, lugares, mascotas, ...), números (matrículas, dni, datas nacemento, ...), ... información que en moitos casos é pública.

Conclusións

Se estades configurando sistemas vosos:

  • optade por sistemas robustos (md5 non é unha forma segura de gardar contrasinais nin información)
  • hai que consultar a documentación dos sistema (sistema operativo, xestor de base de datos, ...)

No caso de ser usuario de sistemas/aplicacións xestionados por outra xente, activade o modo paranoico:

  • non podedes saber se os vosos contrasinais gárdanse en claro (sí, hai xente que o fai)
  • non podedes saber se están empregando un sistema robusto para gardar a inforamción (pensade que pode haber fugas de información).

Polo tanto, usade contrasinais longas e complexas que dificulten os ataques e evitade a reutilización de contrasinais para evitar que si un sistema queda comprometido, afecte a outros.