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

Documentos relacionados