Sicherheit von Swift-Apps: Top-10-Schwachstellen für iOS/macOS

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Einleitung: Warum die Sicherheit von Swift-Apps kritisch ist

Swift ist eine leistungsstarke und moderne Programmiersprache, die von Apple für die Entwicklung von Apps für iOS, macOS, watchOS und tvOS entwickelt wurde. Trotz integrierter Sicherheitsmechanismen (ARC, sichere Speicherverwaltung, optionale Typen) werden jedes Jahr Tausende von Apps aufgrund von Entwicklerfehlern Opfer von Angriffen. Laut dem OWASP Mobile Top 10 Bericht entstehen die meisten Schwachstellen in mobilen Apps auf der Client-Seite. In diesem Artikel analysieren wir die 10 häufigsten Schwachstellen von Swift-Apps, geben Codebeispiele und zeigen, wie man sie vermeidet.



1. Unsichere Datenspeicherung (Insecure Data Storage)

Problem

Entwickler speichern oft vertrauliche Daten (Tokens, Passwörter, API-Schlüssel) in UserDefaults, Plist-Dateien oder Core Data ohne Verschlüsselung. Auf jailbrokenen Geräten kann ein Angreifer leicht darauf zugreifen.

Beispiel für anfälligen Code

// Anfälliger CodeUserDefaults.standard.set("secret_token_123", forKey: "api_token")UserDefaults.standard.set("password123", forKey: "user_password")

Lösung

Verwenden Sie den Keychain zum Speichern sensibler Daten. Swift bietet praktische Wrapper wie KeychainSwift oder das Security Framework.

// Sichere Speicherung mit Keychainimport KeychainSwift

let keychain = KeychainSwift()keychain.set("secret_token_123", forKey: "api_token")keychain.set("password123", forKey: "user_password", withAccess: .accessibleWhenUnlockedThisDeviceOnly)


2. Code-Injection und SQL-Injection (Code Injection & SQL Injection)

Problem

Wenn Ihre App SQLite, Core Data mit NSPredicate oder WebView zur Anzeige von Webinhalten verwendet, kann ein Angreifer durch Benutzereingaben schädlichen Code einschleusen.

Beispiel für anfälligen Code

// Anfällige SQLite-Abfragelet userInput = "1' OR '1'='1"let query = "SELECT * FROM users WHERE id = '\\(userInput)'"

Lösung

Verwenden Sie parametrisierte Abfragen oder NSPredicate mit sicheren Platzhaltern.

// Sichere Abfrage mit Parameternlet query = "SELECT * FROM users WHERE id = ?"let statement = try db.prepare(query)try statement.bind(1, userInput)


3. Ungesicherte Netzwerkkommunikation (Insecure Network Communication)

Problem

Verwendung von HTTP anstelle von HTTPS, Ignorieren von SSL-Zertifikaten (App Transport Security) oder Senden von Daten ohne Verschlüsselung.

Beispiel für anfälligen Code

// Anfälliger Code: Deaktivierung von ATSlet url = URL(string: "http://example.com/api/login")!let task = URLSession.shared.dataTask(with: url) { data, response, error in    // Verarbeitung ungeschützter Daten}

Lösung

Konfigurieren Sie App Transport Security (ATS) in der Info.plist und verwenden Sie HTTPS. Für die Zertifikatsprüfung wenden Sie SSL Pinning an.

// Sichere Anfrage mit SSL Pinning (Beispiel mit Alamofire)let evaluator = PinnedCertificatesTrustEvaluator(certificates: [certificate])let session = Session(serverTrustManager: ServerTrustManager(evaluators: ["example.com": evaluator]))session.request("https://example.com/api/login").responseJSON { response in    // Verarbeitung geschützter Daten}


4. Injection über WebView (WebView Injection)

Problem

Das Laden von HTML-Inhalten mit Benutzerdaten in WKWebView ohne Bereinigung kann zu XSS-Angriffen und Diebstahl von Cookies führen.

Beispiel für anfälligen Code

// Anfälliger Codelet userComment = "<script>alert('XSS')</script>"let html                

Blogs

Buchempfehlungen