Mehr Sicherheit für iOS und Android-Apps

10 Handlungsprinzipien für App-Entwickler und -Architekten

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.