Untitled
Transcripción
Untitled
Samsung Pay: Numeros Tokenizados Y sus Fallas Salvador Mendoza Twitter: @Netxing Blog: salmg.net Agenda ● Terminologia ● Fallas Importantes ● Que es MST? ● Escenarios peligrosos ● Cómo se validan los tokens? ● Herramientas: ● Analizando numeros tokenizados ● Protocolos MST y NFC ● Etapas del token JamSpay, TokenGet y MagSpoofPI ● Tokens internacionales ● Otras Investigaciones Terminologia ● NFC: Comunicación de campo cercano (Near Field Communication) ● MST: Transmisión Magnética Segura (Magnetic Secure Transmission) ● VTS: Protocolo de intercambio de tokens (Visa Token Service) ● Números Tokenizados: Es un proceso donde el número de cuenta principal(PAN) es reemplazada por un valor sustituto = Token ● Token: Es un vale autorizado para intercambiarlo por algún producto o servicio ● TSP: Proveedor de servicio de tokens(Token Service Provider) ● PAN: Número de cuenta principal (Primary Account Number) Que es la tecnología MST? ● Un campo que emite señales magnéticas ● Ondas magneticas que la terminal interpreta como el pasar una tarjeta física por esta ● Sin seguridad, ya que solo la transmisión es de un sentido Analizando #s tokenizados(Token) %4012300001234567^21041010647020079616?;4012300001234567^210410106470200796 16?~4012300001234567^21041010647020079616? % = Primer centinela para la pista 1 ^ = Separador ? = Finalizador para cada pista ; = Segundo centinela par la pista 2 ~ = Tercer centinela para la pista 3 Un número tokenizado sigue exactamente el formato del American Banking Association (ABA) y IATA: lo que es la pista 2; simulando perfectamente el deslizamiento de la tarjeta física por la terminal. Analizando una pista Segunda track = ;4012300001234567^21041010647020079616? Los últimos 20 dígitos son el corazón del token: 21041010647020079616 2104-101-0647020079 616 21/04 Últimos 20 digitos del Nueva fecha de expiración. token. 101 064702-0079-616 Codigo de servicio: 1: Disponible para intercambio internacional. 0: Transacciones autorizadas bajo reglas normales. 1: Sin restricciones. 064702: Maneja el rango de transacciones o el CVV. 0079: Id de las transacciones, incrementa +1 en cada transacción. 616: Números aleatorios, siguen el formato ABA, generados por un criptograma o array. NFC = MST-ID+1 + 3 random digits Modo Offline/online Sin internet; el Contador intermedio no cambia %4012300001234567^2104101082000(constante)0216242? %4012300001234567^21041010820000217826? %4012300001234567^21041010820000218380? […] Con internet, el Contador se incrementa +1: %4012300001234567^21041010820000233969? %4012300001234567^21041010820000234196? %4012300001234567^21041010820010235585? ← +1 Modo Offline http://www.samsung.com/hk_en/business-images/insights/2015/Samsung_Pay_Will_Transform_the_Mobile_Wallet_Experience-0.pdf Etapas del Token ●Active: Estado Normal. ●Pending:Esperando respuesta de TSP ●Disposed: Token Destruido. ●Enrolled: Token Registrado. ●Expired: Expirado después de un lapso de tiempo. ●Suspended_provision: PAN válido, esperando más datos. ●Suspended: VTSP va a declinar la transacción con un token suspendido. Actualizando el Estado del Token //SAMPLE REQUEST URL https://sandbox.api.visa.com/vts/provisionedTokens/{vProvisionedToken ID}/suspend?apikey={apikey} // Header content-type: application/jsonx-pay-token: {generated from request data} // Body { "updateReason": { "reasonCode": "CUSTOMER_CONFIRMED", "reasonDesc": "Customer called" } } // SAMPLE RESPONSE // Body {} Source: Visa Developer Center Bases de Datos/Directorios/Archivos Databases > 20 Directorios/Archivos vasdata.db, suggestions.db, mc_enc.db /system/csc/sales_code.dat, SPayLogs/ spay.db, spayEuFw.db, PlccCardData_enc.db B1.dat, B2.dat, pf.log, /dev/mst_ctrl membership.db, image_disk_cache.db, loyaltyData.db /efs/prov_data/plcc_pay/plcc_pay_enc.dat transit.db, GiftCardData.db, personalcard.db /efs/prov_data/plcc_pay/plcc_pay_sign.dat CERT.db, MyAddressInfoDB.db, serverCertData.db /sdcard/dstk/conf/rootcaoper.der gtm_urls.db, statistics.db, mc_enc.db /efs/pfw_data, /efs/prov_data/pfw_data spayfw_enc.db, collector_enc.db, cbp_jan_enc.db /sys/class/mstldo/mst_drv/transmit… many more cbp_jan_enc.db CREATE TABLE tbl_enhanced_token_info (_id INTEGER PRIMARY KEY AUTOINCREMENT, vPanEnrollmentID TEXT, vProvisionedTokenID TEXT, token_requester_id TEXT, encryption_metadata TEXT, tokenStatus TEXT, payment_instrument_last4 TEXT, payment_instrument_expiration_month TEXT, payment_instrument_expiration_year TEXT, token_expirationDate_month TEXT, token_expirationDate_year TEXT, appPrgrmID TEXT, static_params ... https://sandbox.api.visa.com/vts/provisionedTokens/{vProvi sionedTokenID}/suspend?apikey={apikey} Fallas Teóricas Passwords Estaticos ● paramString = LFWrapper.encrypt("OverseaMstSeq", paramString); ● bool1 = b.edit().putString(paramString, LFWrapper.encrypt("PropertyUtil", null)).commit(); ● String str = LFWrapper.encrypt("tui_lfw_seed", Integer.toString(paramInt)); Expiración del Token ● ● El campo de expiración del token estaba en blanco. ivdRetryExpiryTime usa formato timestamp. ● Si Samsung Pay genera un token pero si este no es usado para hacer una compra, ese token queda activo y se puede usar para hacer un cargo a la tarjeta usando otro dispositivo. Tarjetas con Números Similares Agregando y eliminando la misma tarjeta: ● %4059557240050212^22111014803010255698? July 18, Mon 8:27pm Eliminada ● %4059557240056045^22111014804000001352? July 18, Mon 8:29pm Eliminada ● %4059557240056052^22111014804000001457? July 18, Mon 8:31pm ● %4059557240056052^22111014848010007855? July 22, Fri 10:00pm Eliminada ● %4059557240056557^22111014902000001888? July 22, Fri 10:03pm ● %4059557240056557^22111014902000002230? July 22, Fri 10:04pm Ataques Escenarios Peligrosos: ● Revirtiendo las funciones encrypt/decrypt ● Ingenieria Social ● Interfiriendo señales MST ● Ataque en tiempo real de una terminal a terminal ● Ataque contra protocolo NFC ● Adivinando el siguiente token Funciones Encrypt/Decrypt Ingenieria Social(TokenGet) TokenGet: ● Raspberry Pi Zero ● Bateria Lipo 3.7 V ● PowerBoost 1000 ● Lector de tarjetas de una cabeza ● Adaptadores USB ● USB WIFI ● Mini OTG USB ● Banda para el brazo https://www.youtube.com/watch?v=QMR2JiH_ymU Interfiriendo MST: JamSpay - PoC ● ● ● ● ● ● ● ● Raspberry Pi Zero Bateria Lipo 5 V Lector de tarjetas de una cabeza MagSpoof Adaptadores USB USB WIFI Mini OTG USB Mini-box https://www.youtube.com/watch?v=ytV7xNJP1o8 Proyecto Beta MagSpoofPI Beta Project: MagSpoofPI ● ● ● ● SPI Bus Pin 7 (GPIO 4) Enable/Disable Pin 15(GPIO 22) Reset MagSpoofPI (integrado usando avr-gcc) Do It Yourself: https://hackaday.io/project/14754-m agspoofpi https://www.youtube.com/watch?v=uOlwORnZy7g Ataque en tiempo real - PoC MagSpoof + Raspberry Pi = MagSpoofPI ● Raspberry Pi 3 ● Lipo 3.7 V ● PowerBoost 1000 ● Cable USB ● MagSpoof Detalles de este proyecto: https://salmg.net/2016/08/27/magspoofpi/ https://www.youtube.com/watch?v=zuDdb3XSupE Tokens de Samsung Pay a Nivel Internacional - PoC https://www.youtube.com/watch?v=EphR18sSjgA Thanks @Sabasacustico Ataque al protocolo NFC Cómo es que se generan dos tokens simultáneamente? Dos tokens para una transacción MST: %4012300001234567^21041010820000216242?[…] NFC: %4012300001234567^21042010820000217969?[...] Ataque contra protocolo NFC Ataque contra protocolo NFC ATS: ... 77 66 9F 26 08 35 56 96 3E DB 9E D7 8A 94 04 08 03 03 00 82 02 00 40 9F 36 02 00 50 9F 6C 02 01 80 9F 6E 04 23 8C 00 00 9F 10 20 1F 43 01 00 20 00 00 00 00 00 00 00 00 06 68 17 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 57 13 XX XX D2 21 12 01 68 17 01 00 80 44 3F 5F 34 01 00 9F 27 01 80 90 00 80 CA 9F 17 00 69 85 80 CA 9F 36 00 69 85 ... Ataque contra protocolo NFC - PoC https://www.youtube.com/watch?v=cD97Bey_2yA Adivinar un Token? Arreglando las fallas con un solo “Update” Futuras Investigaciones ● Ataques de fuerza bruta para adivinar tokens o incluso adivinar números de tarjetas virtuales. ● Ingeniería inversa a la función del servidor para validar los últimos dígitos de los tokens. ● Usar tokens de Samsung Pay para comprar bitcoins. ● Obtener datos del servicio Samsung Pay desde su mismo framework usando cabeceras y certificados válidos. Conclusiones ● Samsung Pay tiene niveles de seguridad pero es un hecho que puede ser colateralmente atacado. ● El sistema de pagos tiene algunas limitaciones en el proceso de tokenización que puede afectar la seguridad de sus clientes. ● Finalmente, los tokens generados por Samsung Pay pueden ser utilizados en otros dispositivos diferentes a los Samsung. Preguntas? Salvador Mendoza Twitter: @Netxing Blog: salmg.net [email protected] Greetz, Hugs & Stuff Samy Kamkar (@samykamkar) Andres Sabas (@Sabasacustico) Pedro Joaquin (@_hkm) Luis Colunga (@sinnet3000) Harold Short (@HaroldFredShort) RMHT (raza-mexicana.org) Los Razos GDG modesto group Gracias BugCON! Salvador Mendoza Twitter: @Netxing Blog: salmg.net