Security Check-Liste für iOS Developer

Mobile WebComments are off for this post.

Kategorie

Massnahmen

Schutz von lokalen Daten auf
dem Device
Dateien:

Files schützen über NSFileProtectionKey, vollständiges Schutz über NSFileProtectionComplete ( Pass-Code ist erforderlich)

Passwörter:

  • möglichst nicht lokal speichern, falls nötig die System „KeyChain„ nutzen (Passwort +Zusatz „Salt“ mit secItemAdd als Hash speichern, die Daten können auch als nicht übertragbar auf andere Devices markiert werden )
  • Auf keinen Fall , Passwörter in NSUserDefaults oder in pLists speichern

CoreData/Sqlite:

Datenbank File analog alle Dateien über NSFileProtectionKey NSFileProtectionComplete schützen ( Pass-Code ist erforderlich)

Cookie Management:

  • Session Id’s und OAuth Tokens sollten auch revoked werden, und möglichst nicht lange gültig bleiben
  • Session Id’s möglichst nicht lokal speichern, falls nötig in der „KeyChain“
  • keine statischen Tokens als Session-Id’s nutzen ( z.B Device-ID oder ähnliches)

Cache:

Das Default HTTP und HTTPS Caching bei Bedarf gezielt deaktivieren (willCacheResponse ) um sensitiven Daten nicht zu cachen

Backgrounding:

  • Screenshots für den HomeScreen deaktivieren bei sensiblen Daten
  • alle sensitiven Daten die entschlüsselt im Arbeitsspeicher der App rum liegen, entfernen

Zusatz Verschlüsselung:

bei Bedarf und bei sensiblen Daten kann über Crypto Librairies (Common Cryptor/ AES) ein eigenes Verschlüsselung/Entschlüsselung System der Daten eingebaut werden ( System Pass-Code ist hier nicht nötig, eigen erstelltes Master-Key kann benutzt werden)

Schutz des Transport der
Daten über das Netzwerk
Authentifizierung und Autorisierung:

sollte auf dem Server durchführt werden ( z.B über OAuth Services)

SSL/TLS:

  • HTTPS Protocol (HTTP+ SSL/TLS) nutzen, iOS sorgt automatisch für die Verschlüsselung der Verbindung und für die Prüfung und Austausch der Zertifikate (Voraussetzung ist dass, die Zertifikate von einer von Apple anerkannten CA-Authority stammen)
  • Standardmässig funktioniert Zertifikatsbasierte Authentifizierung nicht mit selbst signierten Zertifikaten. Das kann aber über NSURLConnection oder NSURLSession angepasst werden.

Selbst signierte Zertifikate

  • Der gesamte Zertifikat Validierungsprozess muss implementiert werden, dazu gehört nicht nur die Verschlüsselung, sondern die gegenseitige Authentifizierung zwischen Server und Client.
  • Fehler und Warnungen bei der Authentifizierung von Zertifikaten sollten nicht unterdrückt werden:
    -Der Aufruf von
    continueWithoutCredentialForAuthenticationChallenge
    in didReceiveAuthenticationChallenge führt dazu dass, die Verschlüsselung zwar funktioniert aber das jeder SSL Server vertraut wird.
    setAllowsAnyHTTPSCertificate darf auch nicht benutzt werden, dieser hebelt die Zertifikat Prüfung vollständig aus.

  • Damit die Authentifizierung funktioniert muss die ganze Vertrauenskette des Self signed Zertifikate bis zum ROOT Zertifikat valid sein, d.h der eingesetzte ROOT Zertifikat muss in der Liste der vertrauenswürdigen Zertifikate hinzugefügt werden. Der Zertifikat kann zum Beispiel in dem Bundle der App mitgeliefert, oder als ein E-Mail Attachement, vom Client in die keyChain übernommen werden „Certficate Pinning“. Die Prüfung der „gepinnten“ Zertifikat erfolgt in den delegate Methoden
    willSendRequestForAuthenticationChallenge
    und
    shouldTrustProtectionSpace von NSURLConnection.

  • Wenn ein gültige Zertifikat für andere Hostnamen als in der in der Zertifikat eingetragen benutzt werden soll, kann das auch angepasst werden.

VPN:

Das Erzwingen der Kommunikation über VPN für bestimmte Domäne, kann über Konfiguration Profil erreicht werden ( InHouse Apps)

Schutz bei der Kommunikation
( Benutzer-Input, Aufruf externe Apps, WebView)
Eingabe Validierung:

  • Die Validierung der Benutzer-Eingaben sollte sowohl auf dem Client als auch dem Server erfolgen.
  • Alle externen Input Werte die als Parameter für die Klassen NSURL,NSStream.CFStream benutzt werden, müssen „encoded“ und validiert werden.

Copy/Paste:

  • Für sensitive Daten, Copy/Paste disablen
  • Inhalt vom UIPasteboard validieren vor der Übernahme der Daten
  • UIPasteboard leeren, wenn die App im Background tritt

Logging:

Keine unnötigen oder gar sensitiven Informationen im Device log
ausgeben.

Autocompletion &Auto-Korrektur

Für sensitive Daten, beide desaktivieren

URL Schemas:

  • URL Schemas können missbraucht werden, daher Inhalt validieren vor der Ausführung, und Mechanismen bauen um zu prüfen, ob der Empfänger berechtigt ist

  • Definieren App spezifische Schemas um bereits von anderen Apps registrierten URL Schema zu vermeiden.

WebView:

  • Die Funktion stringByEvaluatingJavaScriptFromString
    kann bei „unescaped“ Eingaben innerhalb der WebView zur Cross-Site-Scripting führen.
  • Beim Einsatz von shouldStartLoadWithRequest
    in Verbindung mit
    performSelector
    um ObjC Funktionen aus JavaScript auszuführen, sollten die Aufrufe vorher validiert werden.

QRCodes:

immer URL’s und Daten aus dem QRCodes validieren, bevor es ausgeführt wird.

Schutz von SourceCode und
Laufzeit System
IPA Files:

IPA Files sind normale Zip Dateien, daher keine sensitiven Daten in pLists und Ressource Files, da dieser lesbar sind.
Mitgelieferte Sqlite DB Files sind auch lesbar, daher verschlüsseln bei Bedarf.

Debug:

Das Debugging der Release Version blockieren

Externe Libraries:

  • Prüfen was externe Libraries ( z.B für Web Statistik, Ads, Tracking) mit den Benutzer Daten anstellen (Code und Traffic monitoren)

  • möglichst nur Librairies, benutzen , wo der Source Code vorhanden und geprüft werden kann, und davon nur die benötigten Klassen extrahieren.

Diese Liste ist nicht abschliessend. Weitere Massnahmen können je nach Projekt,
bzw bei neuen iOS Versionen notwendig werden.
Im Rahmen von Projekten sollten folgende Aspekte zusätzlich berücksichtigt
werden:
Priorisierung/Gewichtung der Massnahmen
-Tests und Prozeduren für die Verifikation, ob die Massnahme greift,
definieren
-weitere Massnahmen im Bereich Enterprise Apps ( Zugriff auf interne
Unternehmen Netzwerk)
Aufwand-Schätzung der einzelnen Massnahmen und Gegenüberstellung Aufwand/ und
Wahrscheinlichkeit des Eintritt des Risikos

About the author:

Top