Sven Rautenberg: Bankdaten automatisiert auslesen - HBCI?

Beitrag lesen

Aloha!

Aber nochmal, zur Posting-Überschrift:

Aha, in jedem kleinen Problem steckt ein großes, dass gerne heraus will (Murphys Computergesetze). :)

Ich suche nach der Möglichkeit, Kontodaten - wie auch immer - möglichst automatisiert in eine eigene Datenbank zu übertragen. Ich will nur auslesen können, klar, Überweisungen tätigen wäre natürlich noch ne ecke netter, aber das muß (erstmal) nicht sein.

Ich sehe da nur 2 Möglichkeiten:

  1. Ich versuche mich mit PHP/PERL über den Server mit meine Benutzerdaten beim Online-Banking einzuloggen... aber wenn dann was passiert bin ichs wohl selber Schuld, also nicht so gut, oder?

Du bist ohnehin selber Schuld, wenn was passiert. Banken, die hohe Sicherheitsmassnahmen betreiben, auferlegen ihren Kunden meist das gesamte Risiko der Transaktion, d.h. wenn etwas passiert, muss der Kunde beweisen, dass er alles richtig und die Bank den Fehler gemacht hat. Es gab (gibts die heute noch) mal eine Sparkasse, die hat nur minimale Sicherheitsvorkehrungen getroffen (https war's zwar wohl schon, aber ansonsten nur schlichte PIN/TAN), aber auch das Risiko getragen. Eigentlich ein gutes Argument: Wenn der Kunde ohnehin kein Risiko trägt, dann reichen übliche Verschlüsselungsmechanismen aus, um möglichen Mitlesern den Inhalt zu verschleiern (irgendwann kommt man mit genügend Rechenpower ja doch dran), aber das System wird durch die (vermeintlich) geringere Sicherheit einfacher bedienbar. HBCI ist schlicht und einfach nur wahnsinnig umständlich und auch sehr immobil. Mit PIN kann ich locker von allen Internet-Rechnern der Welt meinen Kontostand abfragen. HBCI-Kommunikation erfordert mindestens eine Diskette, deren Inhalt niemand wissen soll - die schleppe ich nicht mit mir herum, und im Zweifel hat der Rechner, den ich benutzen will, kein Laufwerk, oder es ist kaputt, oder wegen Virengefahr abgeschaltet.

Zurück zur Frage:
Ja, mit einem hinreichend ausgestatteten Skript kannst du im Prinzip den Browserzugriff emulieren. Du benötigst allerdings die Fähigkeit, HTTPS zu sprechen, denn unverschlüsselt wirst du keinen Zugang kriegen.

Der weitere Verlauf ist dann ganz schlicht der, dass du ein POST des Login-Formulars abschickst (eventuell ist es notwendig, das Formular vorher zu parsen und auf irgendwelche Session-IDs zu untersuchen), danach ein GET der Kontostandsseite (parsen und abspeichern des Kontostandes), und am Ende ein GET der Logoutseite.

Verhalte dich einfach wie ein ganz normaler Browser. Sende HTTP-Header, welche von einem echten Browser kommen. Bedenke, dass du unter Umständen Javascript analysieren musst, falls die Navigation es zwingend erfordert. Die Kontostandsseite dürfte sich aber vermutlich normal ermitteln und vom Skript abrufen lassen, sofern sie nicht ohnehin die erste Seite ist, die man kriegt.

  1. per HBCI
    Ich habe mir mal igrendwoher ne Spezifizierung besorgt, die ist ja einfach nur Wahnsinn. Hat da hier jemand schonmal was mit gemacht? und wie sollte das dann praktisch laufen? Mit hbci stelle ich eine http-Verbindung zu einem Bankenserver her oder?  Obwohl mir http sehr ungeeignet erscheint, da Zustandslos, naja.

Zustandlos ist korrekt - was zwei verschiedene Requests angeht. Ein einzelner Request hat aber immer Frage und Antwort. Und HBCI sorgt dafür, dass zwei aufeinanderfolgende Fragen identifizierbar sind, denn der Kunde signiert seine Frage ja digital - das ist besser als jede Cookie-Session-ID, das identifiziert den Benutzer nicht nur pseudonym, sondern eindeutig persönlich. Anders gehts ja gar nicht im Bankverkehr. HTTP ist wirklich nur das Transportprotokoll, um die Daten von A nach B zu kriegen.

Oder haltet Ihr so eine HBCI Selbstentwicklung auf einem Linux-Server für ein größeres Sicherheitsleck?

Mit gewissen mulmigen Gefühlen wäre ich dabei. Allerdings: Kann man den kommerziellen Herstellern mehr Vertrauen schenken? Man benutzt etwas, von dem die Bank behauptet, dass es sicher sei, von dem aber sonst niemand den Quelltext gesehen hat. Wie gut sind die Bankexperten? Wie gut die Softwareentwickler? Wie gut wärst du, und wieviel Vertrauen schenkst du dir?

Allerdings musst du bedenken, dass auch bei Methode 1 die Zugangsdaten zur Bank sicher verwahrt werden müssen. Wer die PIN kennt, der kann den Kontostand abfragen - jederzeit wieder. Regelmäßige Änderungen der PIN sollten erfolgen. Andererseits: Solange die Kontostände, egal, wie sie gewonnen werden, ohnehin auf einem Rechner gespeichert werden, ist es auch egal, ob dort die PIN zusätzlich gespeichert ist. Wer widerrechtlich und unbefugt Zugriff auf diesen Rechner erlangt, kann spionieren, egal ob ein Webinterfaceskript existiert, oder nicht. Unter Linux kann man diesen Angriff relativ schwer machen, sofern der Angreifer keinen Zugriff auf die Hardware hat (und beispielsweise die Festplatte ausbaut und auf einem anderen Rechner, auf dem er Root ist, mountet).

- Sven Rautenberg