Ich möchte ein "Red Teaming"
Michael Schneider
Liebe Entwickler,
Was zuerst gesagt werden muss: Ich schätze eure Arbeit sehr. Ehrlich, es gibt so viele Dinge, die ihr im Laufe der letzten Dekade erschaffen habt, die richtig nützlich sind. Ich meine, ich kann auf meinem Handy Netflix-Filme anschauen. Ich kann unterwegs auf alle meine Notizen, kann Bilder versenden, Mitteilungen und wasauchimmer. Ich kann via Bluetooth meinem Telefon Texte diktieren während ich zur Arbeit fahre. Das Telefon schreibt alles auf und versteht mich sogar. Ich kann von hier ans andere Ende dieser Welt fliegen und alles, was ich dazu tun muss, ist einen Flug zu finden, zu buchen, einzuchecken und meinen Weg zum Hotel zu finden. All das kann ich mit meinem Handy. Es ist wundervoll! Ein bisschen macht es mich zwar nervös, aber es ist vor allem eins: wundervoll.
Aber trotz der Tatsache, dass ihr all diese Dinge supergut macht: Wir müssen reden.
Wisst ihr, ich verdiene mein Geld damit, Leuten zu sagen, wie sie Dinge mit der grösstmöglichen Sicherheit tun können, wie sie sich selbst keinen Schaden zufügen. Sicherheit ist aber eine ganz lustige Sache: Du kannst etwas fantastisches erschaffen, das wunderbar funktioniert so lange alles nach Plan geht und keiner auf die Idee kommt, daran herumzuspielen. Aber sobald jemand den falschen Knopf drückt wird die Sache haarig. Schaut’s euch mal so an: Du kannst ein sehr, sehr schönes, starkes und luxuriöses Auto ohne Sicherheitsgurte und Bremsen bauen. Es ist immer noch wunderschön anzusehen und würde sich wohl auch auf einer Teststrecke super fahren lassen – aber sobald du es auf den alltäglichen Strassenverkehr loslässt, wo andere Fahrzeuge – Ampeln und wasweissich sind – wird es schwierig.
Tatsache ist: Viele von euch sind nicht wirklich gut darin, Dinge sicher zu entwickeln. Unter euch sind die direkten Nachfolger der PHP-Developer in den frühen 2000er-Jahren. Enthusiastische Leute, die Appliaktionen entwickeln, die innerlich total kaputt sind, weil euch keiner gesagt hat, welchen Probleme ihr von Beginn an aus dem Weg gehen sollt. Keiner hat ihnen gesagt, dass sie jeden Input von jedem User genau unter die Lupe nehmen müssen. Das ging so lange gut, bis ihr Code auf’s übelste missbraucht worden ist. Und zwar von jemanden, der eine simple SQL Injection beherrscht. Und auf einmal war der gesamte Inhalt ihrer Datenbank gelöscht. Wir habe währen den vergangenen zehn Jahren mit diesen Leuten gearbeitet und wir sind nahe daran, ein Minimum an kollektiver Erfahrung zusammenzutragen, das verhindert, dass so etwas nicht mehr in in jedem Fall vorkommt, sondern nur noch manchmal.
Das bringt mich züruck zu euch. Viele der Developer, die ich kenne, haben mir gesagt, dass sie vor ein paar Jahren mit dem Entwickeln von iOS- oder Android-Apps begonnen haben. Dass sie Engineers gewesen sind – oder Designer oder Consultants – bevor sie in dieses spannende neue Berufsfeld eingetaucht sind. Kurz: Wenige von euch hatten je mit den Problemen zu tun, mit denen die vorherige Generation der Programmierer zu kämpfen hatten, also ist das Ganze hier recht neu für euch. Also habt ihr dort angefangen, wo alle anderen angefangen haben. Ganz am Anfang . Eure Applikationen, obwohl schnell und hübsch, leiden manchmal unter grauenhaftem Security Design. Ihr verschlüsselt Dinge nicht anständig. Ihr vermasselt Authentications. Ihr verletzt die Privatsphäre eurer User, weil ihr es nicht besser wisst (oder es ist euch egal). Und das müssen wir ändern.
Daher habe ich eine Liste von drei Dingen erstellt, die ich euch gerne auf den Weg mitgeben will. Keine Sorge, es ist nicht viel. Weil ich beschränke mich auf drei einfache Dinge. Hoffentlich zieht ihr Nutzen daraus. Lasst mich wissen, was ihr davon haltet.
Okay, hier geht’s nicht nur um Sicherheit. Das ist eigentlich solider Rat für euer Business: Ihr programmiert etwas das anderen Leuten Nutzen bringen soll. Es gibt Leute, die eine Menge Geld mit kleinen nützlichen Apps gemacht haben, die sich auf ihre Nutzer und ihre Befürfnisse konzentrieren anstelle von Technologie und dem Einkommen der Entwickler.
Eine Menge Probleme kann komplett eliminiert werden indem ihr herausfindet, was eure User wollen. Müsst ihr eure User wirklich mit drei verschiedenen Application Usage Services tracken oder reicht einer? Oder sogar gar keiner? Wäre es nicht cool, wenn eure App konfigurierbar, sodass die User Features ein- und ausschalten könnten? Ganz so wie sie es wollen? Ich habe für einige Unternehemen gearbeitet, die grosse Apps abschiessen mussten, weil sie dies oder das nicht konnten.
Wirklich. Das ist wichtig. Wir haben 2013 und wenn eure App irgendwelche Daten mit einer Remote Location austauscht, insbesondere wenn sie sensitiv sind, bitte verschlüsselt sie sauber. Und entschlüsselt sie auch wieder genau so sauber wie ihr sie verschlüsselt. Das ist gar nicht so schwer. Benutzt einfach die SSL Libraries, die mit allen gängigen Plattformen mitgeliefert werden und nutzt diese sauber. Stellt sicher, dass ihr ein gültiges Certificate – nein, kein selbst signiertes – auf eurem Server habt. Und stellt auch sicher, dass eure App so richtig ausrastet, wenn sie ein ungültiges Certificate vorgesetzt bekommt. Weil in diesem Falle wird jemand in einem Café von einem Teenie mit Firesheep attackiert. Oder ihr habt vergessen, euer Certificate zu erneuern. Aber daran seid ihr dann selbst schuld.
Mal Ehrlich: das ist wahrscheinlich das lästigste mit mobilen Apps dieser Tage. Aber lasst mich euch sagen: Die Mühe, Applications mit SSL-Kommunikation zu programmieren, ist zwar gross aber sie ist es wert. Ihr wollt doch nicht, dass eure User wichtige Daten, inklusive Login-Daten, Dokumenten oder wasauchimmer in Klartext verschickt. Das sind mobile Geräte. Sie sind dazu bestimmt, überall benutzt zu werden. In einem Café, beim Kollegen zuhause oder an Konferenzen. Sie müssen in der Lage sein, einfachen Attacken standzuhalten, die in einem feindlich gesinnten Netzwerk auftreten können. Alles andere ist grob fahrlässig. (Und, bitte, erzählt mir jetzt nichts von Performance. Wir haben 2013 und wir benutzen alle Handies mit Quad-Core-Prozessoren. Das passt schon.)
Es ist Juli 2013. In Apple’s AppStore gibt es 950000 Apps. Die Chancen stehen also nicht schlecht, dass eure App nicht die erste sein wird, die das macht, was eure App macht. Behaltet diesen Gedanken im Kopf und schaut euch an, wie andere Entwickler spezifische Probleme gelöst haben. Vor Kurzem habe ich eine App überprüft, die folgende Funktion hatte: Sie konnte Erinnerungs-Mails an eine beliebige Adresse senden. Wisst ihr, wie 99.9 Prozent der Apps dieses Problem lösen?
GET https://einmailgateway.tld/send?r=eine@mailadresse.tld&subject=Notification&msg=Das ist der Notification-Text&APIKEY=<API KEY einfügen>
Und jetzt ratet mal, wie diese App das Problem gelöst hat? Indem sie ein ganzes SMTP-Subsystem eingebaut hat. Von Grund auf. Das Subsystem verbindet sich mit einem Mailserver mittels Klartext-SMTP, authentisiert sich mit einem Passwort, das aus der App Binary ausgelesen werden kann…) und versendet dann ein E-Mail. Funktioniert es? Ja. Ist das eine kreative Lösung? Verdammt ja. Solltet ihr das tun? Bitte nicht.
Es gibt da einige weitere Dinge, über die wir redden könntne. Zum Beispiel, dass ihr Sicherheitsfeatures die OS-spezifisch sind, wie die Data Protection API auf iOS, benutzen könnt. Oder dass ihr Daten dort abspeichern könnt, wo ihr vermutet dass keiner nachschauen wird. Im Filesystem des Geräts, zum Beispiel. Oder wie ihr sichergehen könnt, dass Daten nicht auf dem Gerät gespeichert werden, obwohl sie nicht mehr notwendig sind, was dann zum Vermüllen des Filesystems des Users führen kann und im schlimmsten Falle sogar zu einem Datenleck…
Aber, ernsthaft, wenn ihr nur diese drei Ratschläge befolgt, die ich oben beschrieben habe, dann wären wir alle wesentlich besser dran. Danke!
Beste Grüsse Stefan
Unsere Spezialisten kontaktieren Sie gern!
Michael Schneider
Marisa Tschopp
Michèle Trebo
Andrea Covello
Unsere Spezialisten kontaktieren Sie gern!