elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.


 


Tema destacado: Guía actualizada para evitar que un ransomware ataque tu empresa


  Mostrar Mensajes
Páginas: 1 2 3 4 [5] 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 ... 216
41  Seguridad Informática / Seguridad / Re: Extraer MasterKey de cartera Bitcoin en: 29 Octubre 2020, 23:27
¿Qué se supone que quieres lograr?
La finalidad, me refiero.

Extraer la llave cifrada para posteriormente intentar descifrarlo. Vamos básicamente crackear el password por fuerza bruta.
42  Seguridad Informática / Seguridad / Extraer MasterKey de cartera Bitcoin en: 29 Octubre 2020, 16:35
Publico este tema aquí, ya que no se en qué sección queda mejor publicarlo.

Estoy intentando extraer la información Cifrada de una cartera bitcoin, en específico la información del Key para posteriormente intentar descifrarlo por algún ataque de fuerza bruta.

Quiero extraerla por que no quiero depender del bitcoin core ya que si se realiza el ataque por fuerza bruta mediante algún script bash o algun otro metodo NO compilado, el ataque puede ser realmente ineficiente.

También quiero brincarme algunos pasos innecesarios de funciones tipo rehash o PBKDF2 (key derivation) ya que aunque no consumen mucho CPU si quitan algunos miles de ciclos de procesamiento que a la larga pueden hacer aun mas eterno el proceso de crackeo.

Segun he leido la informacion del Key cifrado el salt y el numero de iteraciones esta contenida en un campo de 64 bytes del wallet.dat llamado mkey.

Segun vi en el siguiente Link:

Código:
https://bitcoin.stackexchange.com/questions/48070/format-of-mkey-field-in-encrypted-wallet-dat-file

La data contiene los siguientes campos:

mkey, nID, encrypted_key, salt, derivation_method, derivation_rounds, other_derivation_parameters

Citar
  • mkey - a size prefixed string denoting the start of the master key data.
  • nID - an integer whose purpose I have been unable to determine.
  • encrypted_key - a size prefixed buffer containing the encrypted master key.
  • salt - a size prefixed buffer containing the salt data used when encrypting the key.
  • derivation_method - an integer containing either 0 or 1 for the method used to encrypt the master key using the wallet password.
  • derivation_rounds – an integer containing the number of rounds used to encrypt the master key.
  • other_derivation_parameters
mkey es solo el ascii "mkey", se que el encrypted_key debe de ser de 32 bytes y el salt de 16, restando solo 12 bytes para los otros datos, sin embargo no estoy seguro del orden de los mismos.

Si vemos la siguiente imagen:





Vemos que ahí esta la data, escribí un pequeño programa que la encuentra y la extrae, pero no se en que orden este, con ver los datos de esta cartera y otras me doy cuenta de algunos datos que pueden ser números como los primeros 8 bytes después del mkey, pueden ser números, al igual que los últimos 4 antes de ckey.


Edit

Solucionado el master key cifrado son 48 bytes que se encuentran a un offset de -72 bytes de la primera coincidencia del string mkey.

Para esta cartera en cuestión el Master Key Cifrado es:

CEC646179A7F947349A0AA99EC7122B01F72BF18FFA4FDC760635D8C13109DA196D3DC802D5AABB23FA6C6AABA9A1DBB

Saludos

43  Seguridad Informática / Criptografía / Funcion BytesToKeySHA512AES en el bitcoin en: 29 Octubre 2020, 15:26
Recientemente publique el tema:Como determina la función AES256CBCDecrypt una correcta desencriptación El cual esta relacionado con este de forma algo indirecta.

Todo esto viene del análisis que estoy realizando al código fuente del Bitcoin Core.

Hoy hablaré sobre la función BytesToKeySHA512AES la cual es una de las primeras que se utilizan cuando intentas desbloquear una cartera bitcoin protegida con un passphrase.

BytesToKeySHA512AES básicamente toma las passphrase ingresada + un salt proporcionado por el mismo archivo wallet.dat y los transforma en un (key, iv) para posteriormente utilizarlos como material para descifrar la llave cifrada.

El código fuente de BytesToKeySHA512AES, lo pueden encontrar en

Código:
https://github.com/bitcoin/bitcoin/blob/master/src/wallet/crypter.cpp
 

Tiene 3 parámetros de entrada y 2 de salida
Entrada:
Salt
Passphrase
Count

Salida:
Key
IV

La parte interesante del código es la siguiente:

Código
  1.    for(int i = 0; i != count - 1; i++)
  2.        di.Reset().Write(buf, sizeof(buf)).Finalize(buf);

Básicamente obtiene el hash sha512 de si mismo (count -1) veces ya la que primera vez fue el hash sha512 de (passphrase + IV) como muestra el siguiente código:

Código
  1.    di.Write((const unsigned char*)strKeyData.data(), strKeyData.size());
  2.    di.Write(chSalt.data(), chSalt.size());
  3.    di.Finalize(buf);

Posteriormente copia los primeros 32 bytes al Key y los siguientes 16 bytes al Vector IV

Si no están familiarizados con la sintaxis  del codigo anterior dejare un código en PHP ejemplificando lo que hace la función:

Código
  1. <?php
  2. $salt = "BBBBBBBBBBBBBBBB";
  3. $passphrase = "AAAAA";
  4. $key_ ="";
  5. $iv_ = "";
  6. BytesToKeySHA512AES($salt ,$passphrase,2,$key_, $iv_ );
  7.  
  8. echo "Key:\n";
  9. var_dump($key_);
  10. echo "IV:\n";
  11. var_dump($iv_);
  12.  
  13. function BytesToKeySHA512AES($chSalt,$strKeyData,$count,&$key,&$iv) {
  14. $ctx = hash_init('sha512');
  15. hash_update($ctx,$strKeyData);
  16. hash_update($ctx,$chSalt);
  17. $buf = hash_final($ctx,true);
  18. $i = 0;
  19. while($i != $count -1) {
  20.  
  21. /* //Estas tres líneas básicamente se transforman en una simple llamada a hash
  22. $ctx = hash_init('sha512');
  23. hash_update($ctx,$buf);
  24. $buf = hash_final($ctx,true);
  25. */
  26. $buf = hash('sha512',$buf,true);
  27. $i++;
  28. }
  29. echo "hash:\n";
  30. var_dump($buf);
  31. $key = mb_substr($buf,0,32);
  32. $iv = mb_substr($buf,32,16);
  33. }
  34. ?>

Lo escribí en PHP ya que es mas fácil darle seguimiento a las funciones hash, solo que no estoy 100% seguro de como manejar las copia de los bytes del hash resultante al key y al IV respectivamente.

Saludos
44  Programación / Programación C/C++ / Re: Por que no hay fallo de segmento en este codigo? en: 29 Octubre 2020, 02:17
Un vector es como un arreglo fijo, pero tienen muchas diferencias si lees un poco sobre los mismos encontraras que

Citar
Instead, vector containers may allocate some extra storage to accommodate for possible growth, and thus the container may have an actual capacity greater than the storage strictly needed to contain its elements (i.e., its size). Libraries can implement different strategies for growth to balance between memory usage and reallocations, but in any case, reallocations should only happen at logarithmically growing intervals of size so that the insertion of individual elements at the end of the vector can be provided with amortized constant time complexity (see push_back).

Sigue probando mas index a ver hasta donde llega, tiene que marcar segment fault en algun punto.

Saludos!
45  Seguridad Informática / Criptografía / Como determina la función AES256CBCDecrypt una correcta desencriptación en: 28 Octubre 2020, 15:00
Muy buena dia, estoy con una pequeña duda ya que estoy tratando de automatizar un proceso de crackeo por fuerza bruta de una key de 256 bits (Se que es improbable, sin embargo la clave esta ahi del 0 al 2^256)  :rolleyes: :rolleyes: :rolleyes:

La función original recibe 2 parametros un un KeyCifrada, y el candidato a Key como segundo parametro:

Código
  1. Decrypt(KeyCifrada,KeyCandidato);

Dicha función realiza un llamado internamente a AES256CBCDecrypt


Código:
   AES256CBCDecrypt dec(Key.data(), IV.data(), true);
    nLen = dec.Decrypt(KeyCifrada.data(), KeyCifrada.size(), KeyCandidato);
    if(nLen == 0)
        return false;

y si nLen es igual a 0 entonces retorna false indicando que Key Candidato no es un Key valido.

Mi duda es la siguiente como determina internamente AES256CBCDecrypt  que la KeyCandidato es valida.

Saludos


Edit
Platicando con Kub0x me corrigio el KeyCandidato no es parámetro de entrada si no de salida

Si vemos el link
Código:
https://fabcoin.pro/aes_8cpp_source.html#l00176

en la linea 112 hay se muestra que las comprobaciones las hace directamente sobre el texto descifrado y si alguna de ellas no pasa simplemente regresa 0.

Me comenta kub0x que  existen varios valores Key y IV de entrada que podrian dar una salida valida, siendo esto un falso positivo, sin embargo me gustaría investigar cuantas veces pasa eso en realidad.

Saludos



Edit 2
Tal como menciono Kub0x, el proceso arroja muchos falsos positivos.

Programe un programa multihilo para crackear un key

Código:
albertobsd $ g++ -o crack_wallet_mt crack_wallet_mt.c -Wint-to-pointer-cast  -pthread
albertobsd $ ./crack_wallet_mt
OK
Thread 3, count: 142
key_material: 6120fbf417fcf689ce5ef35f8094d2e4ff584f2652fff824c94c23dae07633e7
iv_material: 226fe385941a98f5fa0274f2917793c7
decipher_key: 01f970cde83114aef95f5bda80866249053b3067a25cd551fa87d57e9a1406be72496a13439c363ee317b478966891
OK
Thread 2, count: 296
key_material: 4c167299eabda7932ce63d2ca44045a45f00316a45ca72a4acfca3bdd73fd2a5
iv_material: fc238b78db6d6d3c3ebc4cdb4075ccef
OK
Thread 1, count: 443
decipher_key: 0053614707620edd364dfd688249bcf316ba2973df40fa6fa70df7bb532bbc483de465c8e9336c2ef66dc51a7633d4
key_material: 609615afd2c0714b603d077cae58b8561e1fae8445a87cf0c1e8847be0c9acca
iv_material: 36b905f01e1b898b3cd3efa298db88da
decipher_key: a7333cf2484dbc21158b25600a131d707bbb38d4f6dd2fff92e6c2dae3d8c053499ffa19532a99b3c48a59d2574ecc
OK
Thread 0, count: 773
key_material: 93cb1954410e9676fbbf3cd6b17ccfaae4d8e874b6f577e32b9bbbd1c37ea0c3
iv_material: 5fd321427cd14a9ae2c9a2f95f14d629
decipher_key: fdfebebeb779e4df9aa76746f02cd000d93c6e69d7b4fad30214369a2dab84295716a30dc585efcd6a22a16235

Con solo 4 Hilos y solo probando 1554 hashes random me dio 4 resultados que la función AES256CBCDecrypt considera válidos, pense que serian mucho menos el ratio de falsos positivos, pero asi no me da tiempo de probarlos manualmente, tendrás que optimizar ese proceso también.


46  Seguridad Informática / Bugs y Exploits / Re: Vulnerabilidades por malas practicas streaming en: 23 Octubre 2020, 16:47
De hecho ya los habias publicado desde el otro dia....
47  Foros Generales / Foro Libre / Re: La RTX 3090 puede romper contraseñas por fuerza bruta en: 23 Octubre 2020, 16:22
Hay que utilizarla para crackear la cartera bitcoin de 600 millones de Dolares.
48  Seguridad Informática / Bugs y Exploits / Re: Vulnerabilidades por malas practicas streaming en: 22 Octubre 2020, 20:48
Interesante

mi sorpresa fue que este servicio de streaming no cifra sus contenidos o son tan despistados que dejan las URL al publico en contenidos de prueba que usan internamente.

Cuando dices que no cifran sus contenidos a que te refieres? veo que las URLs van por https.

Estoy revisando los enlaces que colocaste,investigare un poco mas.

===
Edito, es un extraño CSRF por que no valida que quien visita la URL tenga los permisos de verla
Ya estoy viendo Fox Sport sin registrarme ni nada


49  Programación / Desarrollo Web / Re: Existe esto ( bot para redes sociales solo para publicar contenido) en: 7 Octubre 2020, 22:15
Primera, subforo equivocado para publicar esto.

Comienza buscando la API para facebook y para instagram.

Si se puede hacer.

Saludos
50  Foros Generales / Dudas Generales / Re: Creación de pagina web en: 8 Septiembre 2020, 05:09
Anteriormente utilizaba notepad++ pero ahora utiliza Atom.
Páginas: 1 2 3 4 [5] 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 ... 216
Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines