Förderjahr 2017 / Stipendien Call #12 / ProjektID: 2180 / Projekt: Automatisierte Generierung von personenbezogenen Passwortlisten
Nachdem die ersten Kapitel der Theorie abgeschlossen waren, musste als Belohnung etwas Praxis her. In diesem Blogpost geht es um die Module, die bereits Tweets und Postings von Twitter und Facebook extrahieren.
Die kleinste Einheit des Tools, das letztendlich automatisiert nach Informationen über eine Person suchen und daraus Passwortlisten erstellen soll, bildet ein Modul. Ein Modul stellt eine Quelle dar, aus der personenbezogene Daten extrahiert werden können. Da jede Quelle anders aufgebaut ist, muss für das dazu passende Modul immer individuell die Durchführbarkeit überprüft und ein Script angefertigt werden.
Nach einer kurzen Planungsphase konnte ich mich bereits in die ersten Scripts stürzen und ich wählte für den Einstieg die Quelle Twitter.
Der Kurznachrichtendienst Twitter bietet eine Programmierschnittstelle (kurz API) an, über die Tweets von einer Userin oder von einem User ausgelesen werden können. Im ersten Moment war die Freude groß, bis ich ernüchtert feststellen musste, dass die kostenlose Version der API nur Tweets der letzten 7 Tage herausrückt. Für größere Zeiträume gibt es eine “Enterpriseversion”, deren Preis jedoch nur auf Anfrage an Firmen verraten wird und für mich nicht in Frage kommt.
Es musste also ein anderer Weg her und ich fand diesen mit Selenium und einer simulierten manuellen Extraktion. Dabei wird ein Browser simuliert, der den Feed der Zielperson öffnet und regelmäßig nach unten scrollt, bis alle Tweets geladen wurden. Dies hat den Nachteil, dass für das Scrollen Pausen eingeplant werden müssen und dadurch nur etwa 380 Tweets pro Minute extrahiert werden können. Für durchschnittliche Nutzerinnern und Nutzer von Twitter sollte dies jedoch zu keinen all zu großen Verzögerungen führen.
Bei Facebook unterscheiden sich die öffentlichen Profile von Firmen oder berühmten Personen stark im internen Aufbau der Seite von privaten Profilen. Im ersten Schritt wurden nur öffentliche Profile betrachtet. Die Erweiterung auf private Profile sollte aber keine groben Anpassungen benötigen, weshalb mit einer Fertigstellung des Moduls in den kommenden Tagen zu rechnen ist.
Mein Scraper für Facebook nutzt die bereitgestellte Programmierschnittstelle “Graph API” und arbeitet dadurch merklich schneller als das Twittermodul. Die API gibt jedoch auch nur 100 Posts pro Anfrage aus, weshalb auch hier etwas getrickst werden musste, indem der Zeitraum dynamisch so lange angepasst wird, bis alle Posts extrahiert wurden.
Frontend
Für eine einfache Interaktion mit den Scripts wurde außerdem bereits ein einfaches Frontend mit dem Python-Framework Flask erstellt. Darüber kann der Scrapingprozess einfach gestartet werden und in Zukunft sind hier auch weitere Einstellungen zu finden.
In den nächsten Wochen werden die bestehenden Module verfeinert und ein bis zwei Quellen hinzugefügt, bevor mit der Weiterverarbeitung der Posts begonnen werden kann. Mehr dazu im Februar! Bis bald :)