Das Besitzmodell von mobilen Endgeräten wechselt von einem COD (Company-owend-Device) zu einem BYOD (Bring-Your-Own-Device) beziehungsweise CYOD (Choose-Your-Own-Device)-Modell. Das Unterstützen der Work-Life-Balance soll hier mit einer Multi-Plattform-Strategie optimal unterstützt werden.
Dabei darf der Mobilitätsbegriff nicht auf Endgeräte alleine reduziert werden. Mobilität beschreibt den Kontext des Anwenders, das Endgerät "nur" die Gelegenheit der Nutzung. Aufgrund der Cloud Dienste sind die Endgeräte ferner in einem breiten Spektrum mit verschiedenen Betriebssystemen wie Android, iOS und Windows vertreten.
Faktoren wie Kommunikation in Echtzeit, Synchronisation zwischen Geräten und Back-End-Systemen stellen dabei nur einige der Herausforderungen auf der gesamten Kommunikationsstrecke von der App bis in das jeweilige Zielsystem dar.
Ohne professionelle Unterstützung verlieren Unternehmen gerade in dieser Spannweite zunehmend den Kampf um die Sicherheit ihrer Daten. Sie brauchen Best-Practice-Lösungen und Leitplanken, gerade in der Individualentwicklung. Dieser Artikel gibt 10 Handlungsempfehlungen für App-Entwickler und -Architekten in diesem Umfeld.
Authentifizierung für Geräte und APPs
Eine allgemein gültige Anforderung ist eine angemessene und ausreichende Authentifizierung.
Als Grundlage kann empfohlen werden, dass Sie sowohl für die eingesetzten Geräte als auch für Apps mit schützenswerten Daten auf ein mindestens sechsstelliges alphanumerisches Kennwort zurückgreifen.
Eine Fingerabdruck-basierte Authentifizierung ist, am Beispiel von TouchID unter iOS, als Ergänzung zur Verbesserung der Benutzerakzeptanz zu empfehlen - für App und Gerät.
Verwenden Sie neben der Authentifizierung des Benutzers auch Merkmale des Endgerätes, wie zum Beispiel die Geräte-ID (UDID), die International Mobile Equipment Identity (IMEI) oder auch App spezifische Eigenschaften (VendorID), um einen Zugriff gegen ein Back-End-System oder einen API-Layer zu ermöglichen.
Trennen Sie die Authentifizierung an der App von den Anmeldeinformationen eines eventuell im Unternehmen befindlichen Back-End-Systems. Stellen Sie damit sicher, dass beispielsweise die SAP-Kennungen Ihrer Anwender nicht nach außen transparent sind.
Führen Sie hierzu einen Benutzer ein und erweitern Sie dies um ein personenbezogenes Zertifikat, das im Rahmen eines Initialen Roll-Outs auf dem Endgerät installiert wird und allen Ihren Apps zur Verfügung steht.Beachten Sie bei diesem Registrierungsprozess, dass die dafür notwendigen Kommunikationsparameter, zum Beispiel die URL zum Registrierungsdienst, durch den Anwender zur Laufzeit gepflegt werden. Dies ermöglicht Ihnen die vorherige persönliche Übergabe der notwendigen Informationen (eMail, Telefonisch, SMS) an den Anwender und dessen Verifizierung (bei Bedarf).
Das vortäuschen falscher Identitäten (Spoofing) kann über diese Kombination erschwert werden. Auch die Erweiterung von App-Berechtigungen (Privilegien) wird durch das im Backe-End hinterlegte Rollenmodell verhindert.
Absicherung der Kommunikationsstrecke
Sicherheit umfasst die komplette Kommunikationsstrecke. Stellen Sie mit einer auf den Transportsicherheitsprotokollen SSL / TLS 1.2 aufbauenden Kommunikationsstrecke sicher, dass es zu keiner Manipulation oder Überwachung durch Dritte kommen kann. Unterbinden Sie die Möglichkeit mit einer schwächeren Verbindung Daten auszutauschen.
Unterbinden Sie Man-in-the-Middle-Angriffe. Hierzu gibt es verschiedene am Markt etablierte Techniken:
Als eine Maßnahme gilt das HSTS-Verfahren (Strict Transport Security). Vereinfacht ausgedrückt erzwingt dies die Verschlüsselung der Kommunikation über alle Ports des IP-Protokolls für alle im Zertikat enthaltenen Subdomains.
Das so genannte Certificate Pinning kann verwendet, um die Kompromittierung durch betrügerische Zertifikate zu verhindern. Dieses Verfahren hilft dabei "untergeschobene" Fremdzertifikate zu erkennen, da die Identität des eigentlich echten Zertikates bekannt ist.
Datensicherheit und -schutz
Nutzen Sie immer die stärkste Geräteverschlüsselung der jeweiligen Plattform (bei iOS NSFileProtectionComplete), vertrauen Sie dieser jedoch nicht uneingeschränkt. Eine App-spezifische Verschlüsselung ist unerlässlich.
Diese Verschlüsselung der lokalen Datenablage darf nicht nur auf Faktoren basieren, die sich auf dem Endgerät befinden. Das hartcodieren dieser Informationen ist als grob fahrlässig zu bewerten, da Methoden für das Reverse-Engineering auch für Leien im Internet verfügbar sind. Ein oft gesehener Fehler ist die gefühlte Sicherheit von hartcodierten sicherheitsrelevanten Informationen durch eine selbst implementierte Verschleierung. So setzte sogar ein prominenter Hersteller, bis vor wenigen Monaten, noch auf eine BASE64 Verschleierung seiner wichtigsten Sicherheitsregeln.
Verwenden Sie für eine starke Verschlüsselung einen Schlüssel aus verschiedenen Teilen. Teile für eine Verschlüsselung können sich ergeben aus:
- Anwender spezifische Authentifizierungdaten (zum Beispiel Kennwort)
- entfernte Teilschlüssel (zum Beispiel per Webserver zum Download angebotene Schlüssel)
- eindeutige IDs (zum Beispiel UUID, MAC Adressen, VendorID)
- Hidden App-Keys (zum Beispiel Inhalte eines speziellen App spezifischen Strings)
- mathematische Formeln (zum Beispiel Schlüsselzahlen (Teile) auf Basis von Koordinaten auf einer elliptischen Kurve)
Die Kombination aus diesen Teilen sorgt nun dafür, dass die Daten nur in Kombination von Gerät, Anwender und Back-End zugreifbar sind. Fehlt eine Komponente ist es nicht möglich.
Verbinden Sie die entfernten Teilschlüssel (oder werden diese in Kombination zueinander gesetzt) mit der Notwendigkeit der zertifikatbasierten verschlüsselten Kommunikation, können Sie alleine durch das entfernen des Zertifikates den Schlüssel nachhaltig unbrauchbar machen. Die Unbrauchbarkeit eines Schlüssels ist, wie die Praxis der iOS Standardverschlüsselung zeigt, der beste und schnellste Weg die Daten unbrauchbar zu machen.
Die aktuellen Plattformen am Markt bieten Mechanismen für eine sichere Datenablage von Anmeldeinformationen, wie zum Beispiel Keychain in iOS. Verwenden Sie auch hier die jeweils höchsten Sicherheitseinstellungen (zum Beispiel thisdeviceOnly). Verschlüsseln Sie nicht nur Dateien sondern auch Datenbanken (beispielsweise SQLCipher).
Verwenden Sie in Bezug auf den Datenschutz keine personenbezogenen Daten beziehungsweise schränken Sie die notwendigen Datenquellen und Zugriffe auf Sensoriken auf ein Mindestmaß ein.
Entwicklervorgaben
Auch ohne boshafte Absicht können Entwickler einige Fehler machen oder mögliche Datenabflüsse nicht bedenken.
Unterbinden Sie überall dort, wo es nicht gebraucht wird, beispielsweise die Möglichkeit einer Datenübergabe an andere APPs.
Überwachen und leeren Sie die Zwischenablage bei betreten und verlassen Ihrer App.
Stellen Sie sicher, dass keine App Screenshots, zum Beispiel vom System für die Multitasking Ansicht, erstellt werden.
Stellen Sie auch bei Speicherung auf gegebenenfalls freigegebenen Medien wie SD-Karten eine Verschlüsselung sicher.
Sorgen Sie dafür, dass bei Produktiv-Apps keine sensiblen Informationen in Logfiles enthalten sind. Dies betrifft neben den Benutzerdaten auch Informationen zu Kommunikationsstrecken.
Informieren Sie sich über Plattformbesonderheiten zur Texteingabe.
Nutzen Sie Passwortfelder des Systems für sensible Informationen und unterbinden Sie die Gefahr von Keyloggern in dem Sie fremde virtuelle Tastaturen verbieten oder eigene Tastaturen vorschreiben. Seien Sie sich bewusst, für welche Felder Sie eine Autovervollständigung der Systemplattform erlauben wollen oder nicht.Achten Sie darauf, dass Ihr Entwicklungsprozess dahingehend abgesichert ist, dass Temp- und Cache-Dateien höchstens in der Entwicklungsphase, jedoch nicht im produktiven Umfeld vorgehalten werden.
Verwenden Sie native Entwicklungsmethoden um die höchste Sicherheit zu gewährleisten.
Vollziehen Sie eine Validierung Ihrer, in der App enthaltenen, Eingabefelder und parsen Sie gegebenenfalls kritische Steuerzeichen um eine Code Injection zu vermeiden.
Beziehen Sie Ihre definierte Entwicklungsumgebung aus zuverlässigen und validen Quellen (z.B.xCodeGhost).
Sichern Sie Ihren App Codes selbst gegen Einblicke durch Fremde ab. Greifen Sie hierzu auf Obfuscation-Verfahren zurück. Dieses Verfahren sichert Ihren Code durch eine Verschleierung von Methodennamen inklusive der Aufruf- beziehungsweise Rückgabeparameter. Auch das Verändern des Kontrollflussess durch Einführen von überflüssigen Routinen, Kontrollschleifen aber auch von Code Transformationen (aus z.B. a=b+c wird a=b-(-c)). Hierfür existieren für alle Plattformen sehr gute Hilfsmittel um dies , im Rahmen eines Distributionsprozesses einzuführen.
Vergessen Sie bei allem nicht Ihre Backen-Systeme. Sorgen Sie für eine Robustheit der Systeme auf spontane Kommunikationsaufkommen, beispielsweise durch Loadbalancer. Gerade bei einer Vielzahl im Feld verfügbaren Apps kann es leicht zu denial of service Szenarien kommen.
Rooting-, Jailbreak- und App-Schutz
Nutzen Sie Sicherheits-SDKs am Markt um Ihre App Entwicklung abzusichern. Bauen Sie Ihre Apps mit diesen SDKs undvermeiden Sie Wrapping Technologien.
Nutzen Sie aktuelle Kenntnisse (zum Beispiel Gefahren durch Method Swizzling), um eine ausgefeilte Kompromitierungsprüfung zu implementieren.
Erstellen Sie sowohl über Ihre App und über Ihre Runtime (beispielsweise geladene Bibliotheken) entsprechende Prüfsummen, die Sie lokal und/oder remote überprüfen. Stellen Sie eine Fliegenfalle (Honeypot) auf, um einem unversierten Angreifer eine leichte Beute zu bieten. Überwachen Sie diese beim App-Start als auch zur Laufzeit auf Manipulationen.
Erst wenn Sie mit den verschiedenen Techniken einer Kompromittierungsprüfung sicherstellen können, dass das Gerät aber auch die App selbst unversehrt sind, dürfen Sie die Arbeitsdaten in der App anbieten.
Erkennen Sie eine Kompromittierung müssen Sie entsprechende Eskalationsregeln definieren und umsetzen. Diese können von Warnmeldungen, über Information an die Back-End Systeme bis zur Löschung reichen. Es hat sich in der Vergangenheit als erfolgsversprechend gezeigt, eine App vor der Prüfung mit "Demodaten" zu Befüllen. Ein Angreifer kann so nur sehr schwer erkennen, wann der "richtige" Datentopf geladen wurde und sein Angriff erfolgreich war.
Sichere Distribution
Definieren Sie den Weg der Verteilung von (Inhouse-)Applikationen als festen Bestandteil Ihrer Entwicklungs- und Rollout-Umgebung. Beachten Sie dabei, neben der Sicherstellung des Transportweges auch die Bereitstellung von BETA-Applikationen, die Anbindung an Code-Verwaltungs-Systeme (SVN, GIT) aber auch entsprechende Issue-Tracking und Reporting-Systeme.
Automatisieren Sie die Systeme weitgehend. Nutzen Sie feste Release Zyklen um in festen Abständen neue Versionen (Major-, Minor-, BugFix-Releases) auszuliefern. Die Verlässlichkeit Ihres Handelns wird Ihre Softwarequalität weiter positiv beeinflussen und damit Ihre Sicherheit.
User-Centric-Design
Ihr Anwender steht im Mittelpunkt. Eine App muss ihn bei seiner Arbeit unterstützen und dabei seine Herausforderungen und Probleme lösen. Nur wenn Sie den Anwender in den Mittelpunkt stellen erlangen Sie die Akzeptanz und die Usability, damit der Anwender Ihre App und die darin vorhandenen Sicherheitsmaßnahmen als Unterstützung und nicht als Behinderung ansieht.
Schatten-IT, also die Nutzung von nicht vorgesehenen (privaten) Tools, stellt ein enormes Risiko dar. Oft nutzen Mitarbeiter dies ohne boshafte Absicht. In vielen Fällen führen interne Regularien oder "low fun" Policies auf Endgeräten dazu, dass private Tools und Systeme als Alternative genutzt werden. Diese sind unberechenbar.
Stellen Sie daher für Ihre mobile Lösung immer den Anwender in den Fokus um diesen Themen entgegen zu wirken.
Schutz von Mitarbeiter und Unternehmen
Beachten Sie neben den Gefahren der Manipulation von Daten beziehungsweise dem Verlust selbiger auch die Sicherheit für Ihre Mitarbeiter beziehungsweise Sie als Unternehmer.
Sorgen Sie für die Protokollierung von Arbeitsschritten und Informationsständen. Dieses Protokollieren beinhaltet dabei zum einen die an den Anwender übermittelte Daten als auch die von ihm getroffenen Interaktionen wie Lesen der Information. Die Vorhaltezeit der Daten können Sie nach dem Prinzip der Datenreduktion (nur so lange wie nötig) auf eine bestimmte Dauer rollierend einschränken.
Gerade bei dienstlichen Tätigkeiten muss dafür Sorge getragen werden, dass ein Mitarbeiter zum Beispiel nur an abgeschalteten Maschinen arbeitet. Meldet die App einen falschen Zustand kann dies, in diesem Beispiel, für den Nutzer der App gesundheitliche Konsequenzen nach sich ziehen.
Auch Aussagen zu "nicht erhaltenen Informationen" (Repudiation, also das Abstreiten von Aktionen) und daraus resultierenden "nicht Arbeiten" mit eventuell möglichen Konventionalstrafen können so vorgebeugt werden.
Sicherheit in den UI-Grundsätzen
Auch wenn Sie den Anwender in den Fokus Ihrer App heben (siehe Punkt 7), gibt es einige grundsätzliche Prinzipen um die Sicherheit einer App zu erhöhen. Verfolgen Sie hierzu das KISS Prinzip (Keep it simple and stupid). Dieses Prinzip beschreibt die Anforderung, Ihre UI und die dahinter liegende Architektur so einfach wie möglch zu gestalten. Komplexität führt oft zu einer Unübersichtlichkeit und damit zu Fehlern. Gerade in der späteren Wartung ist es wichtig zu wissen, was in welchem Architekturbaustein passiert.
Die gleiche Komplexitätsreduktion müssen Sie auch bei den möglichen Eintrittspunkten Ihrer Apps beziehungsweise Daten anwenden. Vor allem die Frage, inwiefern eine App mit Daten von außen versorgt (und gestartet) wird, ist hier zu betrachten. Dabei kann e sich zum Beispiel um Serverdienste in der App oder das Share/OpenIn-Sheet von anderen APPs handeln. Jeder Eintrittspunkt kann ein Risiko darstellen.
Validieren Sie die eingehenden Daten inklusive der jeweiligen Quellen auf Gültigkeit.
Nutzen Sie das MVC Konzept (Modell-View-Controll).
Verankern Sie die Modell/Controll Komponenten in Ihren Back-End-Systemen.
Das Frontend (die App) sollte im idealfall nur eine Repräsentation der Daten beinhalten.
Diese Funktion kann natürlich noch erweitert werden um Validierungsprüfungen von Eingaben (Punkt 4) und Offlinefähigkeit (Punkt 3). Die eigentliche Verarbeitungslogik und Prozessintelligenz ist nicht in der App vorzuhalten. Stellen Sie immer die Notwendigkeitsfrage beim Umgang mit Daten und Informationen. Welche Daten und Informationen müssen "Wann" verfügbar sein?
Stetige Weiterbildung
Die hier aufgeführten Handlungsprinzipien müssen Sie stetig an neue Herausforderungen messen. Regelmäßige Prüfung des Status-Quo und die Erkenntnis von gelebten abzulassen und neue Verfahren aufzunehmen muss ebenso akzeptiert werden.
Schicken Sie Ihre verantwortlichen Mitarbeiter auf Weiterbildungen und Konferenzen. Nicht nur für die App-Entwicklung sondern auch zum Thema Cybersecurity. Verfolgen Sie ferner einschlägige Twitter Accounts und Webseiten um am "Puls der Zeit" zu sein.
Fazit
Entwickeln Sie Ihre Apps mit einem agilen Team und fester Teilnahme des jeweiligen Fachbereichs. Begleiten Sie die Menschen bei ihrer Arbeit und lassen Sie Feedbackschleifen durch Referenzgruppen zu. Mobile Apps entstehen in kürzester Zeit. Verfallen Sie bei der Entwicklung nicht in althergebrachte Muster wie Lastenheft, Wasserfall-Projekt, Ergebnisübergabe. Zusammen mit den Handlungsprinzipien sind Sie auf einem guten Weg. (bw)