Bezahlvorgänge abwickeln via SMS-Tan: Das ist ein vorgeschriebener Sicherheitsstandard für Banken – und ihre Kunden. Doch bis zur Inbetriebnahme auf Webseiten oder in Apps ist es ein langer Weg: In der Entwicklung von sicheren Bezahlsystemen stehen zahlreiche Tests und die Frage: Wie können Entwicklungsteams ohne Stolpersteine sichere Tests durchführen.
Um Online-Bezahlvorgänge zu testen, benötigen Entwickler:innen Test-SMS. Diese individuelle TAN müssen bei der jeweiligen Bank eingegeben werden. Nur: Wie kommt das Team zum Testen an die TAN? Im denkwerk haben wir kurzerhand ein SMS-Gateway mit einer Zwei-Faktor-Authentifizierung entwickelt und gebaut. Eine Test-SMS wird über einen Raspberry Pi-Computer in einem Slack-Channel versendet. So können alle Beteiligten im WebDev ohne Hindernisse die Abläufe auf Reibungslosigkeit hin prüfen. Um anderen zu helfen, haben wir die Anleitung zum Nachbauen bei GitHub hinterlegt!
André Laugks, unser Technical Director, sagt, wie's geht:
„Wir wollten den Bezahlvorgang einer von uns betreuten E-Commerce-Plattform im Produktionsbetrieb testen. Nun ist seit dem 1. Januar 2021, der Einführung des Nachrichtenprotokolls 3D Secure 2.0, eine Zwei-Faktor-Authentifizierung (2FA) durch eine Bank verpflichtend. Für einen Test benötigten wir zum einen eine reelle Kreditkarte, da Test-Kreditkarten vom Payment-Gateway nicht unterstützt werden. Zum zweiten ist der PayPal-Account, um eine PayPal-Zahlung im Produktionsbetrieb zu testen, mit einer Zwei-Faktor-Authentisierung (2FA) per SMS-TAN abgesichert.“
Unsere Idee war, durch einen eigenen SMS-Gateway einen Payment-Prozess automatisiert zu testen. Ein Szenario war, einen Selenium-Test durchzuführen, bei dem die User-Journey nachgestellt und alle Formularfelder eines Nutzers oder einer Nutzerin mit Daten ausgefüllt werden. Durch diesen Test könnten wir einen Bestellprozess durchlaufen, wobei die Eingabe der Kreditkarten-Daten automatisch vervollständigt werden. Dieser Test-Prozess nimmt die SMS entgegen, extrahiert die TAN aus der SMS und schließt den Bestellprozess ab.
Das klang einfacher als es ist, da es Abhängigkeiten zu Dritten gab: Einmal der Payment-Provider, der das Kreditkarten-Formular zur Verfügung stellt. Nach der Formulareingabe leitet er die Kreditkarten-Daten auf Seite der Bank weiter, auf der die TAN automatisiert eingegeben werden muss.
Ein weiteres Hindernis war, dass wir in unserem Fall bei automatisierten und wiederkehrenden Tests ein endliches Produkt erwerben werden. Bei geringer Verfügbarkeit stünde das ‚echten‘ Kunden und Kundinnen nicht mehr zur Verfügung, solange wir unseren Kauf nicht stornieren. Natürlich könnte aber auch ein virtuelles Produkt zum Testen bereitgestellt werden.
Aber der Reihe nach: Vor Covid-19 – und als unser gesamtes Team noch vor Ort im Büro arbeitete, benutzten wir ein Samsung S5 Smartphone.
An dieses Gerät sendete die ausstellende Bank jeweils eine SMS-TAN. Alle involvierten und verantwortlichen Entwickler und Entwicklerinnen für den Bezahlprozess konnten bequem die TANs vom Smartphone ablesen und dementsprechend den Bezahlprozess im Produktionsbetrieb testen.
Das Samsung S5 befand sich am Stromnetz und lud, deshalb war das Ablesen der SMS-TAN etwas lästig. Daraufhin installierten wir die App IFTTT auf das S5 und leiteten die SMS-Nachrichten an einen Channel der Kommunikationssoftware Slack um, auf den die Entwickler und Entwicklerinnen Zugriff hatten.
Nach Ausbruch der Pandemie hat es dem Team im Homeoffice sehr geholfen, die SMS-Nachrichten über den Slack-Channel zu erhalten – weil alle Betreffenden einen Zugang dazu hatten.
Dann erreichten uns auf einmal keine SMS-Nachrichten mehr im Slack-Channel. Erst ein Neustart der App brachte Abhilfe: Wir führten das auf die Android-Version zurück, für die es keine Updates mehr gab.
Zunächst evaluierten wir mehrere Anbieter von SMS-Gateways, die interessante Funktionen anbieten, wie etwas das Anlegen einer virtuellen Mobilnummer für die Bank, das Weiterleiten an 1-n weitere Smartphones oder die Bereitstellung einer API. Anbieter von SMS-Gateways richten sich jedoch mehr an Unternehmen, die via SMS mit ihren Kunden kommunizieren und Informationen versenden.
Einerseits wollten wir aber bei der Bank nicht erneut die Mobilnummer ändern und waren andererseits nicht von den monatlichen Kosten überzeugt.
Wir kamen zu dem Schluss: Lasst uns einen eigenen SMS-Gateway umsetzen! Die Funktionalitäten, die wir benötigen, waren überschaubar – SMS annehmen und intern weiterleiten.
Die SMS sendeten wir anfangs wieder in den Slack-Channel, stellten dazu aber auf eine Mini-Applikation mit den Frameworks Symfony und Bootstrap um. Diese Applikation stellt einen RESTful-Endpoint (API) bereit, mit Hilfe dessen der Raspberry Pi-Computer die SMS an die Applikation leitet. Fertig war unser SMS-Gateway!
Raspberry Pi 4Huawei
E173 UMTS Stick
Simcard
Raspbian GNU/Linux 10 (Buster)
Gammu (v1.40.0) and Gammu-smsd (v1.40.0)
picocom v3.1
modeswitch v2.5.2
Es muss sichergestellt werden, dass der Raspberry Pi mit einer frischen Installation von Raspbian OS 10 (Buster) auf einer SD-Karte geupdatet ist.