Galileo Computing < openbook > Galileo Computing - Professionelle Bücher. Auch für Einsteiger.
Professionelle Bücher. Auch für Einsteiger.

Inhaltsverzeichnis
Geleitwort des Gutachters
Vorwort
1 Einführung
2 Einstieg in die Praxis
3 Aufwachen – analoger Wecker
4 Daten, Tabellen und Controller
5 Animationen und Layer
6 Programmieren, aber sicher
7 Jahrmarkt der Nützlichkeiten
A Die Buch-DVD
Stichwort

Download:
- ZIP, ca. 23,6 MB
Buch bestellen
Ihre Meinung?

Spacer
Apps entwickeln für iPhone und iPad von Klaus M. Rodewig, Clemens Wagner
Das Praxisbuch
Buch: Apps entwickeln für iPhone und iPad

Apps entwickeln für iPhone und iPad
geb., mit DVD
515 S., 34,90 Euro
Galileo Computing
ISBN 978-3-8362-1463-6
Pfeil 6 Programmieren, aber sicher
Pfeil 6.1 Sicherheitsmechanismen von iOS
Pfeil 6.2 Bedrohungen, Angriffe, Sicherheitslücken und Maßnahmen
Pfeil 6.2.1 Arten von Sicherheitslücken
Pfeil 6.3 Threat Modeling
Pfeil 6.3.1 Erstellen eines Datenflussdiagramms
Pfeil 6.3.2 STRIDE
Pfeil 6.3.3 Generische Design-Grundsätze
Pfeil 6.3.4 Threat Modeling aus der Tube – das Microsoft SDL Threat Modeling Tool
Pfeil 6.4 Sicherer Entwicklungszyklus
Pfeil 6.4.1 Awareness
Pfeil 6.4.2 Umgebung
Pfeil 6.4.3 Training
Pfeil 6.4.4 Dokumentation
Pfeil 6.4.5 Requirements
Pfeil 6.4.6 Design
Pfeil 6.4.7 Implementierung
Pfeil 6.4.8 Security-Testing
Pfeil 6.4.9 Deployment
Pfeil 6.4.10 Security Response
Pfeil 6.4.11 Sicherheitsmetriken
Pfeil 6.4.12 Abschließende Bemerkung
Pfeil 6.5 Sicherheit in der iOS-API
Pfeil 6.5.1 Keychain
Pfeil 6.5.2 Dateiattribute
Pfeil 6.5.3 Jailbreak-Erkennung
Pfeil 6.5.4 Event-Handling

Galileo Computing - Zum Seitenanfang

6.2 Bedrohungen, Angriffe, Sicherheitslücken und MaßnahmenZur nächsten Überschrift

Vor der theoretischen und praktischen Betrachtung von IT-Sicherheit für App-Programmierer ist die Klärung der Begriffe Bedrohung, Maßnahme, Angriff und Sicherheitslücke angebracht. Gegen jede App, jedes IT-System oder jede Infrastruktur wirken Bedrohungen. Eine Bedrohung gegen eine Online-Banking-App beispielsweise wäre der unbefugte Zugriff auf die in der App hinterlegten Zugangsdaten zum Konto.

Sie als Programmierer können diese Bedrohung nicht beseitigen; eine Bedrohung ist immer vorhanden. Sie können aber Maßnahmen treffen, um die Bedrohung zu minimieren. In diesem Fall wäre eine denkbare Maßnahme die Verwendung einer angemessen sicheren Verschlüsselung, um die Zugangsdaten zu schützen.

Ein Angreifer, der in den Besitz der Zugangsdaten kommen möchte, kann auf verschiedene Arten versuchen, die Zugangsdaten zu erlangen. Diese Arten nennt man Angriffe. Wirksame Maßnahmen hindern einen Angreifer daran, erfolgreiche Angriffe durchzuführen.

Weist ein Programm eine Sicherheitslücke auf, so kann ein Angreifer mithilfe eines Angriffs eine Bedrohung realisieren. Eine mögliche Sicherheitslücke wäre im vorliegenden Beispiel die falsche Verwendung von Kryptografie, sodass der Angreifer die verschlüsselten Zugangsdaten entschlüsseln kann.

Als Programmierer muss man sich über die Bedrohungen im Klaren sein, die auf die eigene App wirken. Denn eine naheliegende Weisheit ist: Es sind nur Maßnahmen gegen existente Bedrohungen notwendig. Eine App, die keine Daten speichert, muss auch keine Maßnahmen gegen potenziellen Datendiebstahl treffen. Nun ist dieses Beispiel etwas übertrieben und geht an der eigentlichen Problemstellung jedes Programmierers vorbei: Welche Bedrohungen wirken denn überhaupt auf meine App? Als Programmierer muss oder sollte man kein Fachmann für IT-Sicherheit sein. Man hat genug damit zu tun, die Programmiersprache, die API und die Plattform zu kennen, für die man programmiert.

Bedrohung, Angriff und Maßnahme lassen sich übersichtlich in sogenannten Bedrohungsbäumen darstellen. Für das vorstehende Beispiel, den unbefugten Zugriff auf Zugangsdaten, sieht ein möglicher Bedrohungsbaum wie in Abbildung 6.1 gezeigt aus.

Abbildung

Abbildung 6.1 Bedrohungsbaum

Es gehört einiges an Fleißarbeit und Erfahrung mit Sicherheitslücken und Angriffen dazu, um alle erdenklichen Bedrohungen für eine App zu identifizieren und diese Bedrohungen samt möglicher Angriffe und Maßnahmen in Bedrohungsbäumen darzustellen. Allerdings ist die Kenntnis über mögliche Bedrohungen die Grundlage angemessener und effizienter Maßnahmen. Ganz getreu dem schlauen Spruch, den der bekannte chinesische Stratege und Heerführer Sun Tzu schon vor 2500 Jahren postuliert hat:

»Wenn du den Feind und dich selbst kennst, brauchst du den Ausgang von hundert Schlachten nicht zu fürchten. Wenn du weder den Feind noch dich selbst kennst, wirst du in jeder Schlacht unterliegen.« (Sun Tzu, »Die Kunst des Krieges«)
Galileo Computing - Zum Seitenanfang

6.2.1 Arten von SicherheitslückenZur vorigen Überschrift

Eine Sicherheitslücke ist ein Fehler, den ein Angreifer ausnutzen kann, um schädliche Aktionen ausführen zu können. Fehler können sich über verschiedene Wege in eine App einschleichen. Man unterscheidet zwischen Design- und Implementierungsfehlern. Designfehler sind Fehler, die ihren Ursprung in der Architektur oder Anwendungslogik haben. Ein klassischer Designfehler sind z. B. der Verzicht auf Verschlüsselung für die Übertragung sensibler Daten oder die clientseitige Validierung von Sicherheitsparametern. Designfehler sind schwer zu finden und schwer zu beheben, insbesondere sobald eine App einmal implementiert ist.

Neben Designfehlern gibt es das große Feld der Implementierungsfehler. Darunter fallen alle Fehler, die in der Implementierungsphase einer App auftreten. Sie reichen von der Verwendung unsicherer Funktionen über das Auftreten sprachspezifischer Sicherheitslücken (z. B. Formatstring- und Speicher-Fehler in C-Funktionen) sowie die falschen Verwendung von Sicherheitsfunktionen bis hin zu arithmetischen Fehlern und Überläufen. Implementierungsfehler lassen sich einfacher finden als Designfehler, einige sogar durch die automatisierte Analyse des Quellcodes.

Das Kreuz mit dem C

Eine grundsätzliche Gefahr bei der Arbeit mit Objective-C ist die düstere Vergangenheit dieser Sprache. Der Vater von Objective-C, die Sprache C, weist einige konzeptionelle Sicherheitslücken auf, die durch die Verwendung von C in ein iOS-Projekt einschleppen kann. Die bekannteste dieser Sicherheitslücken ist der Buffer Overflow. Da dieser oft und ausführlich genug beschrieben wurde, hier nur eine kurze Erwähnung, um das Bewusstsein für die Gefahren von C zu schärfen. C prüft keine Grenzen. Das bedeutet, dass der Programmierer bei der Angabe von Grenzen in Funktionen durch Unachtsamkeit Grenzen und damit Speicher überschreiben kann. Ein Beispiel dafür ist die Funktion strcpy zum Kopieren von Zeichenketten auf die Standard-C-Library. strcpy übernimmt zwei Parameter, char *s1 und const char *s2, und kopiert s2 inklusive abschließender Null (\0) nach s1.

#include <stdio.h>
void cpStr(char* in)
{
char tmp[8];
strcpy(tmp, in);
printf("%s\n", tmp);
}
int main(int argc, char* argv[])
{
cpStr(argv[1]);
return 0;
}

Das Programm nimmt den ersten Kommandozeilenparameter und kopiert ihn in der Funktion cpStr in einen statischen Buffer von acht Zeichen Größe. Das geht so lange gut, bis der Parameter länger als sieben Zeichen ist (zuzüglich abschließender Null) und somit die Größe des Zielbuffers tmp überschreitet. Dann überschreibt C nämlich gnadenlos Stack-Speicher, und ein Buffer Overflow findet statt. Schleust dann ein Angreifer statt harmloser Zeichenkombinationen Shellcode als Kommandozeilenparameter ein, kann er über diese Sicherheitslücke diesen Code auf dem System ausführen – ein sicherheitstechnischer SuperGAU.

Das Beispiel zeigt, dass auch die vermeintlich korrekte Verwendung von C-Funktionen zu schweren Sicherheitslücken führen kann. Verwenden Sie daher, wenn Sie sich über die potenziellen Folgen nicht vollkommen im Klaren sind, möglichst immer die höchste Abstraktionsebene – im Regelfall also Cocoa.

Das Vermeiden von Implementierungsfehlern setzt Wissen und Erfahrung beim Programmierer voraus. Der Vermeidung von Designfehlern muss man sich aktiv nähern, indem man die Architektur einer App prüft, bevor sie in die Implementierungsphase geht. Eine bewährte Methodik dafür ist das Threat Modeling, das der folgende Abschnitt ausführlich beschreibt.



Ihr Kommentar

Wie hat Ihnen das <openbook> gefallen? Wir freuen uns immer über Ihre freundlichen und kritischen Rückmeldungen.







<< zurück
  Zum Katalog
Zum Katalog: Apps entwickeln für iPhone und iPad





Apps entwickeln für iPhone und iPad
Jetzt bestellen


 Ihre Meinung?
Wie hat Ihnen das <openbook> gefallen?
Ihre Meinung

 Buchempfehlungen
Objective-C 2.0 & Cocoa





 Objective-C 2.0
 Cocoa


Zum Katalog: Mac OS X Lion






 Mac OS X Lion


Zum Katalog: Mac OS X und UNIX






 Mac OS X
 und UNIX


Zum Katalog: Android 3






 Android 3


Zum Katalog: Java ist auch eine Insel






 Java ist auch
 eine Insel


Zum Katalog: CSS






 CSS


Zum Katalog: jQuery






 jQuery


 Shopping
Versandkostenfrei bestellen in Deutschland und Österreich
InfoInfo




Copyright © Galileo Press 2011
Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken. Ansonsten unterliegt das <openbook> denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.


[Galileo Computing]

Galileo Press, Rheinwerkallee 4, 53227 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, info@galileo-press.de