Give me Your Coins - noconname.org · Manager del Laboratorio de Seguridad de EY. Miembro del grupo...
Transcript of Give me Your Coins - noconname.org · Manager del Laboratorio de Seguridad de EY. Miembro del grupo...
Give me Your Coins Quienes Somos?
Albert Puigsech
@apuigsech apuigsech
Manager del Laboratorio de Seguridad de EY. Miembro del grupo int3pids. Creador de la publicación 7a69ezine.
Albert Sellarès
@whatsbcn whats
Manager de sistemas corporat ivos y middlewares de SCM Spain. Miembro del grupo int3pids. Fundador de Catux.
http://codelearn.cat
Que es el Bitcoin?
• Cryptomoneda digital basada en tecnología P2P.
• Opensource.
• Creada el 03/01/2009.
• Precio actual de 1BTC = $ 341,19 (máximo de $ 1.124,76).
• Capitalización de $ 4.587.813.644.
• Uso cada vez más común…
Que es el Bitcoin?
Objetivos del protocolo
Dirección Cantidad 1KFHE7w8BhaENAswwryaoccDb6qcT6DbYY 12,5 132g9WnereWcX9WWERKN5EitbrQ882XhyF 324 1HVSj4rJeyDf7qPrdT1NUUMY2E7eAMqrU6 21 14VBbPB51ZoR1g4rr61HJqN96tGFPVasP5 93,2 1N4yHtPoEve5JDqRCwyTmYbRBhNB9RsrwM 1,34 1DBouUjWTmxCv7rR5ZSBGNHSyyyqw3kFJf 1.002,32 39k5aPEfL9bFxS5kH3ND9SeU6YwXx5LyVs 234,2 1K3gP1zoxkfBMu28sK71ik3nkqgSA9JAHY 31,3 1AiygjiYr2jnyDaE1hF4dYV21gavxa7HyY 23,01 1PqTsyCsLcb2Wf63bXNjVQaxrLuLZQvAbd 43,11 1GqkohjQZgSsyb3AxaPJWNLLGx7Vh8sXM2 11,221
... …
• Mantener un estado de cuentas común para toda la red bitcoin. • No depender de ninguna entidad central.
Problema complejo
1KFHE7w8BhaEN 100
132g9WnereWcX9 0
1HVSj4rJeyDf7qPr 0
14VBbPB51ZoR1g 0
1KFHE7w8BhaEN 100
132g9WnereWcX9 0
1HVSj4rJeyDf7qPr 0
14VBbPB51ZoR1g 0
1KFHE7w8BhaEN 100
132g9WnereWcX9 0
1HVSj4rJeyDf7qPr 0
14VBbPB51ZoR1g 0
1KFHE7w8BhaEN 100
132g9WnereWcX9 0
1HVSj4rJeyDf7qPr 0
14VBbPB51ZoR1g 0
1KFHE7w8BhaEN 100
132g9WnereWcX9 0
1HVSj4rJeyDf7qPr 0
14VBbPB51ZoR1g 0
1KFHE7w8BhaEN 100
132g9WnereWcX9 0
1HVSj4rJeyDf7qPr 0
14VBbPB51ZoR1g 0
1KFHE7w8BhaEN 100
132g9WnereWcX9 0
1HVSj4rJeyDf7qPr 0
14VBbPB51ZoR1g 0
1KFHE7w8BhaEN 100
132g9WnereWcX9 0
1HVSj4rJeyDf7qPr 0
14VBbPB51ZoR1g 0
1KFHE7w8BhaEN 100
132g9WnereWcX9 0
1HVSj4rJeyDf7qPr 0
14VBbPB51ZoR1g 0
1KFHE7w8BhaEN 100
132g9WnereWcX9 0
1HVSj4rJeyDf7qPr 0
14VBbPB51ZoR1g 0
1KFHE7w8BhaEN 100
132g9WnereWcX9 0
1HVSj4rJeyDf7qPr 0
14VBbPB51ZoR1g 0
1KFHE7w8BhaEN 100
132g9WnereWcX9 0
1HVSj4rJeyDf7qPr 0
14VBbPB51ZoR1g 0
Problema complejo
1KFHE7w8BhaEN 0
132g9WnereWcX9 100
1HVSj4rJeyDf7qPr 0
14VBbPB51ZoR1g 0
1KFHE7w8BhaEN 0
132g9WnereWcX9 100
1HVSj4rJeyDf7qPr 0
14VBbPB51ZoR1g 0
1KFHE7w8BhaEN 100
132g9WnereWcX9 0
1HVSj4rJeyDf7qPr 0
14VBbPB51ZoR1g 0
1KFHE7w8BhaEN 0
132g9WnereWcX9 0
1HVSj4rJeyDf7qPr 21
14VBbPB51ZoR1g 105,7
1KFHE7w8BhaEN 0
132g9WnereWcX9 0
1HVSj4rJeyDf7qPr 0
14VBbPB51ZoR1g 100
1KFHE7w8BhaEN 100
132g9WnereWcX9 0
1HVSj4rJeyDf7qPr 0
14VBbPB51ZoR1g 0
Tx
Tx
Problema complejo
Blockchain
Block1
Block2
Block3
Block4
• Lista ordenada de bloques
• Contenido de los bloques
Magic no: 0xd9b4bef9 Blocksize: 731 kb Block header: {
Version: 2 hashPrevBlock: 00000000000000001980ab5a00a4f0dd39f5b42c0290c56fdbd979ae hashMerkleRoot: 1718dd4673a12e44755a28a7136a7f174d287d0e34aca5e0c402b1dc Time: 2014-10-30 20:32:36 Bits: 404655552 Nonce: 3565647076
} Transactions list: [ Coinbase TX, TX1, TX2, … ]
Blockchain
Block1
Block2
Block3
Block4
• Lista ordenada de bloques
• Contenido de los bloques
Magic no: 0xd9b4bef9 Blocksize: 731 kb Block header: {
Version: 2 hashPrevBlock: 00000000000000001980ab5a00a4f0dd39f5b42c0290c56fdbd979ae hashMerkleRoot: 1718dd4673a12e44755a28a7136a7f174d287d0e34aca5e0c402b1dc Time: 2014-10-30 20:32:36 Bits: 404655552 Nonce: 3565647076
} Transactions list: [ Coinbase TX, TX1, TX2, … ]
Blockchain
Block1
Block2
Block3
Block4
• Lista ordenada de bloques
• Contenido de los bloques
Magic no: 0xd9b4bef9 Blocksize: 731 kb Block header: {
Version: 2 hashPrevBlock: 00000000000000001980ab5a00a4f0dd39f5b42c0290c56fdbd979ae hashMerkleRoot: 1718dd4673a12e44755a28a7136a7f174d287d0e34aca5e0c402b1dc Time: 2014-10-30 20:32:36 Bits: 404655552 Nonce: 3565647076
} Transactions list: [ Coinbase TX, TX1, TX2, … ]
Blockchain
Block1
Block2
Block3
Block4
• Lista ordenada de bloques
• Contenido de los bloques
Magic no: 0xd9b4bef9 Blocksize: 731 kb Block header: {
Version: 2 hashPrevBlock: 00000000000000001980ab5a00a4f0dd39f5b42c0290c56fdbd979ae hashMerkleRoot: 1718dd4673a12e44755a28a7136a7f174d287d0e34aca5e0c402b1dc Time: 2014-10-30 20:32:36 Bits: 404655552 Nonce: 3565647076
} Transactions list: [ Coinbase TX, TX1, TX2, … ]
Blockchain
Block1
Block2
Block3
Block4
• Lista ordenada de bloques
• Contenido de los bloques
Magic no: 0xd9b4bef9 Blocksize: 731 kb Block header: {
Version: 2 hashPrevBlock: 00000000000000001980ab5a00a4f0dd39f5b42c0290c56fdbd979ae hashMerkleRoot: 1718dd4673a12e44755a28a7136a7f174d287d0e34aca5e0c402b1dc Time: 2014-10-30 20:32:36 Bits: 404655552 Nonce: 3565647076
} Transactions list: [ Coinbase TX, TX1, TX2, … ]
Blockchain
Block1
Block2
Block3
Block4
• Lista ordenada de bloques
• Contenido de los bloques
Magic no: 0xd9b4bef9 Blocksize: 731 kb Block header: {
Version: 2 hashPrevBlock: 00000000000000001980ab5a00a4f0dd39f5b42c0290c56fdbd979ae hashMerkleRoot: 1718dd4673a12e44755a28a7136a7f174d287d0e34aca5e0c402b1dc Time: 2014-10-30 20:32:36 Bits: 404655552 Nonce: 3565647076
} Transactions list: [ Coinbase TX, TX1, TX2, … ]
Blockchain
• Recompensa y comisiones
• Problema bifurcación del blockchain
• Transacción valida a los 6 bloques
Block11 Block12
Blockchain
• Recompensa y comisiones
• Problema bifurcación del blockchain
• Transacción valida a los 6 bloques
Block11 Block12
Block13
Block13’
Blockchain
• Recompensa y comisiones
• Problema bifurcación del blockchain
• Transacción valida a los 6 bloques
Block11 Block12
Block13 Block14
Block13’
Blockchain
• Recompensa y comisiones
• Problema bifurcación del blockchain
• Transacción valida a los 6 bloques
Block11 Block12
Block13 Block15 Block14
Block13’ Block14’
Blockchain
• Recompensa y comisiones
• Problema bifurcación del blockchain
• Transacción valida a los 6 bloques
Block11 Block12
Block13 Block15 Block14
Block13’ Block14’
Transacciones
Version: 1, Lock_time: 0, In: {
Prev_out { Hash: a522dc2d250547c7bc478ba52d9a0be77b13400e1f70281171d71e72d98, N:1 } ScriptSig: 3044022003e0a21281b57572ab2f86bf...35006e9ca0d35d91cc9da91bd32
} Out: { Value: "10.00000000", ScriptPubKey: "OP_DUP OP_HASH160 19c9778c665bf9aadd978c2f62dc70a0127aa096 OP_EQUALVERIFY OP_CHECKSIG“ }, { Value: "5.41630000", ScriptPubKey: "OP_DUP OP_HASH160 5ae860b1f8298c8aafcfa420b6326a2bd1d64bdb OP_EQUALVERIFY OP_CHECKSIG“ } },
Transacciones
Version: 1, Lock_time: 0, In: {
Prev_out { Hash: a522dc2d250547c7bc478ba52d9a0be77b13400e1f70281171d71e72d98, N:1 } ScriptSig: 3044022003e0a21281b57572ab2f86bf...35006e9ca0d35d91cc9da91bd32
} Out: { Value: "10.00000000", ScriptPubKey: "OP_DUP OP_HASH160 19c9778c665bf9aadd978c2f62dc70a0127aa096 OP_EQUALVERIFY OP_CHECKSIG“ }, { Value: "5.41630000", ScriptPubKey: "OP_DUP OP_HASH160 5ae860b1f8298c8aafcfa420b6326a2bd1d64bdb OP_EQUALVERIFY OP_CHECKSIG“ } },
Transacciones
Version: 1, Lock_time: 0, In: {
Prev_out { Hash: a522dc2d250547c7bc478ba52d9a0be77b13400e1f70281171d71e72d98, N:1 } ScriptSig: 3044022003e0a21281b57572ab2f86bf...35006e9ca0d35d91cc9da91bd32
} Out: { Value: "10.00000000", ScriptPubKey: "OP_DUP OP_HASH160 19c9778c665bf9aadd978c2f62dc70a0127aa096 OP_EQUALVERIFY OP_CHECKSIG“ }, { Value: "5.41630000", ScriptPubKey: "OP_DUP OP_HASH160 5ae860b1f8298c8aafcfa420b6326a2bd1d64bdb OP_EQUALVERIFY OP_CHECKSIG“ } },
Transacciones
Version: 1, Lock_time: 0, In: {
Prev_out { Hash: a522dc2d250547c7bc478ba52d9a0be77b13400e1f70281171d71e72d98, N:1 } ScriptSig: 3044022003e0a21281b57572ab2f86bf...35006e9ca0d35d91cc9da91bd32
} Out: { Value: "10.00000000", ScriptPubKey: "OP_DUP OP_HASH160 19c9778c665bf9aadd978c2f62dc70a0127aa096 OP_EQUALVERIFY OP_CHECKSIG“ }, { Value: "5.41630000", ScriptPubKey: "OP_DUP OP_HASH160 5ae860b1f8298c8aafcfa420b6326a2bd1d64bdb OP_EQUALVERIFY OP_CHECKSIG“ } },
Transacciones
Version: 1, Lock_time: 0, In: {
Prev_out { Hash: a522dc2d250547c7bc478ba52d9a0be77b13400e1f70281171d71e72d98, N:1 } ScriptSig: 3044022003e0a21281b57572ab2f86bf...35006e9ca0d35d91cc9da91bd32
} Out: { Value: "10.00000000", ScriptPubKey: "OP_DUP OP_HASH160 19c9778c665bf9aadd978c2f62dc70a0127aa096 OP_EQUALVERIFY OP_CHECKSIG“ }, { Value: "5.41630000", ScriptPubKey: "OP_DUP OP_HASH160 5ae860b1f8298c8aafcfa420b6326a2bd1d64bdb OP_EQUALVERIFY OP_CHECKSIG“ } },
Transacciones
Version: 1, Lock_time: 0, In: {
Prev_out { Hash: a522dc2d250547c7bc478ba52d9a0be77b13400e1f70281171d71e72d98, N:1 } ScriptSig: 3044022003e0a21281b57572ab2f86bf...35006e9ca0d35d91cc9da91bd32
} Out: { Value: "10.00000000", ScriptPubKey: "OP_DUP OP_HASH160 19c9778c665bf9aadd978c2f62dc70a0127aa096 OP_EQUALVERIFY OP_CHECKSIG“ }, { Value: "5.41630000", ScriptPubKey: "OP_DUP OP_HASH160 5ae860b1f8298c8aafcfa420b6326a2bd1d64bdb OP_EQUALVERIFY OP_CHECKSIG“ } },
WhoamI
Vectores de Ataque: • Monedero / Cliente
• Procesos
• Criptografía
• Comunicaciones
• Pools
• Exchangers / Bancos
• Auto-traders
• Personas
Ataques
WhoamI
Ataques al Monedero / Cliente:
• Robo de un monedero no cifrado El monedero contiene la clave privada necesaria para realizar las transacciones.
• Fuerza bruta a la clave del monedero En caso de robo de un monedero cifrado, se puede realizar un ataque de fuerza bruta offline.
• Generación débil de par de claves La generación de claves predecibles, permitiría a un atacante conocer la clave privada necesaria para realizar transacciones. Ejemplo: IV predecible.
Ataques
WhoamI
Ataques a los Procesos :
• Validar un bloque con transacciones eliminadas El atacante omite algunas transacciones al validar un bloque. No es un problema real, ya que estas serán incluidas en bloques posteriores.
• Doble gasto El atacante pretende hacer un doble uso de una cantidad de bitcoins. Este ataque no puede realizarse de forma autónoma, pero sí con otros factores:
• Condición de carrera • Finney Attack • Ataques de >50% de calculo
Ataques
WhoamI
Ataques a las Comunicaciones:
• Captura de tráfico Alguien con capacidad de capturar tráfico y saliente de un nodo puede ser capaz de ver que transacciones han sido generadas por ese mismo nodo y romper el anonimato.
Ataques
WhoamI
Ataques a la Criptografía:
• Debilidades en SHA-256 o ECDSA Actualmente SHA-256 y ECDSA son considerados seguros, pero podrían aparecer debilidades en el futuro. Si esto sucediera bitcoin podría cambiar a algoritmos más seguros.
• Generación de muchas direcciones
Las direcciones tienen actualmente 160bits, lo que supone la existencia de 2^160 direcciones distintas. Se trata de una cantidad enorme que debería impedir la existencia de colisiones.
Ataques
WhoamI
Ataques a los Pools:
• Denegación de Servicio Los pools deben ir validando los bloques que envían sus colaboradores. Si alguien envía muchos bloques puede ocasionar problemas de denegación de servicio en el pool
• Vulnerabilidades en Infraestructura, Servicios o Aplicaciones Una vulnerabilidad en alguno de los componentes del pool puede permitir diversos ataques (dependiendo de la vulnerabilidad):
• Acceso al monedero del pool y realizar transacciones. • Cambiar la cuenta de ‘reward’ de los usuarios. • Secuestrar los bloques resueltos por el pool.
Ataques
WhoamI
Ataques a los Exchangers / Bancos:
• Vulnerabilidades en Infraestructura, Servicios o Aplicaciones Una vulnerabilidad en un exchanger puede permitir diversos ataques (dependiendo de la vulnerabilidad):
• Acceso al monedero del exchanger y real izar transacciones.
• Cambiar la cuenta de wilthdrawal de los usuarios.
Ataques
WhoamI
Ataques a los Auto-traders:
• Patrones predecibles y explotables Actualmente existen muchos sistemas que operan en mercados de bitcoins (y otras monedas) de forma autónoma usando algoritmos. Algunos de estos algoritmos pueden suponer patrones predecibles y explotables por otros traders.
Ataques
WhoamI
Ataques a las Personas
• SCAM Internet esta plagado de estafadores que se escudan en el anonimato del bitcoin:
• Cobro de servicios sin ofrecerlos • Cobro de ventas sin enviar el producto • Crowdfounding fraudulentos • Malware con diversos fines
Ataques
• Actualmente el software más usado como front-end de pools. • Open-source • Vulnerabilidad no pública, pero ya parcheada L
• Uso de templates Smarty editables per el administrador.
public function createToken($strType, $account_id=NULL) { $data = $account_id.$strType.microtime(); $strToken = hash('sha256', $data); if (!$iToken_id = $this->tokentype->getTypeId($strType)) { $this->setErrorMessage('Invalid token type: ' . $strType); return false; } $stmt = $this->mysqli->prepare(" INSERT INTO $this->table (token, type, account_id) VALUES (?, ?, ?) "); if ($stmt && $stmt->bind_param('sii', $strToken, $iToken_id, $account_id) && $stmt->execute()) return $strToken; return $this->sqlError(); }
Vulnerabilidad en MPOS
• Explotación: 1. Hacer una petición HTTP con 3 solicitudes de cambio de
contraseña (para las que se genera el token). Usuario hacker Usuario admin Usuario hacker
2. Obtener el tiempo (en segundos) de la respuesta HTTP. 3. Obtener los dos tokens de reset para el usuario hacker. 4. Hacer fuerza bruta off-line del microtime (basandose en
el time retornado por el servidor) 5. Generar un diccionario de tokens. 6. Resetear la cuenta de admin.
Vulnerabilidad en MPOS
• Explotacion: 7. Creación de una plantilla smarty a través de la interfaz.
${system(‘…’)} 8. Ejecutar el cliente y solicitar una transacción. 9. Pegarse un bañito.
Vulnerabilidad en MPOS
WhoamI Preguntas?