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

 

 


Tema destacado: Sigue las noticias más importantes de seguridad informática en el ttwitter! de elhacker.NET


  Mostrar Mensajes
Páginas: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 [16] 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 ... 230
151  Seguridad Informática / Criptografía / Re: Funcion BytesToKeySHA512AES en el bitcoin en: 31 Octubre 2020, 19:20 pm
bruteforcear el passhprase usando la PBKDF o bien bruteforcear la clave AES que resulta de la PBKDF.

La primera opciones tienes que pasar por el proceso completo es decir generar un passphrase random de N cantidad de bytes que buen puede ser 1 byte o bien puede ser 1GB, posteriormente pasarlos por el PBKDF sha512 con un mínimo de 25000 iteraciones.

Yo se que la gente no mete passphrase de 1GB de longitud y también están limitadas por los caracteres fácilmente  localizables por el teclado sin embargo las mínimo 25K iteraciones del sha512 hacen el proceso un poco mas ineficientes para el crackeo desde el momento que cada passphrase random tiene que pasar por ese proceso.

La segunda opciones que mencionas es la que voy implementar ya que solo tienes que generar el KEY y el IV de forma aleatoria y pasalos a la función  AES256CBCDecrypt saltándose el costoso proceso de PBKDF.

Además esta opción esta claramente limitada por el tamaño de la dupla Key,IV y en la primera opción no voy a estar seguro si probe todas las combinaciones posibles en el passphrase además que un passphrase de mas 46 dígitos ya es mas costoso por que incluyen más posibilidades y el proceso del PBKDF.

Supongo que esto ya lo sabes y es prácticamente imposible, pero bueno, ánimo que igual suena la flauta.

Si claro que se que es improbable, pero al final mi objetivo será encontrar el camino más eficiente para hacerlo, independientemente de su probabilidad.

Saludos!
152  Seguridad Informática / Seguridad / Re: Extraer MasterKey de cartera Bitcoin en: 30 Octubre 2020, 16:58 pm
Si y no,  Si se puede hacer multihilo (multi thread) pero estás limitado por la cantidad de Cores/threads que tenga el CPU, ahorita muchos no pasan de 4 Cores / 8 Threads o 8 Cores / 16 Threads.

Esto sin considerar el restarle el proceso del sistema operativo que no es poco generalmente te va a quitar como mínimo 1 Core y 2 threads.

Puedo hacerlo Multihilo SI, de hecho es lo que tengo pensado hacer. Pero no he podido empezar ya que de la información que tengo no se cual es Key, cual es Salt y cual es numero de Derivaciones, esto solo para hacer algunas pruebas con una cartera que si tengo la contraseña, si funciona para esta cartera debería de funcionar para la cartera que realmente quiero crackear.

Por cierto si quieres potencia olvida te python Lo que esta escrito en C o C++ si funcionara bien, pero todo lo que entre en algun script de python se verá afectado y/o consumirá más memoria de la necesaria

Saludos!



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

Saludos
153  Seguridad Informática / Seguridad / Re: Extraer MasterKey de cartera Bitcoin en: 30 Octubre 2020, 02:06 am
millones mal habidos al loco de McAfee...

Interesante esa parte de la historia no me la sabia, puedes desarrollar un poco mas tu punto?
154  Sistemas Operativos / GNU/Linux / Re: Drivers de impresora en Elementary OS en: 30 Octubre 2020, 01:48 am
Muchas veces los drivers para linux están implementados de manera genérica y las opciones son limitadas, probablemente no se pueda hacer.

Realmente nunca he tenido la oportunidad de revisar ese sistema sin embargo en otros linux me pasa lo mismo, di por hecho que era cosa de Linux.
155  Seguridad Informática / Seguridad / Re: Extraer MasterKey de cartera Bitcoin en: 29 Octubre 2020, 23:46 pm
Se que es casi improbable y muy costoso en tiempo y poder de computo pero para nada es imposible

Lo hago por hobby y simplemente por saber un poco más del tema, no lo voy a olvidar, es una lotería de mil millones de dolares asi que si existe la posibilidad de hacerlo no pierdo nada con intentarlo.

Saludos!

156  Seguridad Informática / Seguridad / Re: Extraer MasterKey de cartera Bitcoin en: 29 Octubre 2020, 23:27 pm
¿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.
157  Seguridad Informática / Seguridad / Extraer MasterKey de cartera Bitcoin en: 29 Octubre 2020, 16:35 pm
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

158  Seguridad Informática / Criptografía / Funcion BytesToKeySHA512AES en el bitcoin en: 29 Octubre 2020, 15:26 pm
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
159  Programación / Programación C/C++ / Re: Por que no hay fallo de segmento en este codigo? en: 29 Octubre 2020, 02:17 am
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!
160  Seguridad Informática / Criptografía / Como determina la función AES256CBCDecrypt una correcta desencriptación en: 28 Octubre 2020, 15:00 pm
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.


Páginas: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 [16] 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 ... 230
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines