Sicherheit für mobile Applikationen

Implementation gemäss dem Secure Mobile Development Life Cycle

Apps laufen auf unsicheren Plattformen. Dennoch lassen sie sich in der Praxis für ihren Bestimmungszweck genügend sicher umsetzen. Zentral sind dabei ein umfassendes Verständnis des Themas und die richtige Anwendung der Technologien, Methoden und Prozesse.

teaser_focus_mobile_app_sec_287x192

Mobile-Apps spielen in kritischen Geschäftsbereichen eine zunehmend wichtige Rolle. Bei Finanzdienstleistern dienen sie als Kundenkanal oder bequeme Authentisierungslösung, den Kunden an der Kasse oder im Online-Shop zum Bezahlen ihrer Einkäufe usw.

 

Während die Anforderungen an die Sicherheit bei der Implementation einer Mobile App hoch sind, gilt zugleich die Mehrzahl der heutigen mobilen Geräte als unsichere Plattformen. In der Theorie lassen sich auf unsicheren Plattformen keine 100% sicheren Lösungen bauen. Die Praxis zeigt aber, dass es möglich ist, Apps mit den richtigen Massnahmen für ihren Bestimmungszweck genügend sicher umzusetzen. Dieser Artikel nennt die wichtigsten Aspekte.

 

Zentral: Know-how der Entwickler

Mit der Anwendung von App Hardening Tools allein ist es nicht getan. Vielmehr bildet im Secure Mobile Development Life Cycle (SMDLC) das Know-how der Mitarbeitenden eine kritische Voraussetzung. Sie müssen in der Lage sein, Risiken und Schutzbedürfnisse in einer App abzuschätzen und passende Massnahmen zu implementieren. Notwendig ist zudem eine sichere Entwicklungsumgebung. Dazu zählt neben den Entwicklungstools ein gemanagtes Repository für den Sourcecode und die Drittartefakte (z.B. Libraries), die in einer App verbaut werden. Ein durchgängiges Identitäts- und Access-Management stellt sicher, dass nur berechtigte Personen Zugriff auf die Entwicklung haben und dass nachvollziehbar dokumentiert ist, wer was gemacht hat.

 

Der SMDLC besteht grob aus drei Phasen:

  • Mobile-App-Architektur und -Design
  • Mobile-App-Implementation (Coding und funktionale Isolation)
  • Sicherhalten der Mobile App (Hardening, Auditing und Proactive Management)
infographic_smdlc
Zoom
Secure Mobile Development Life Cycle

Architektur und Design

Je komplexer die Architektur, desto höher ist das Risiko von Sicherheitslücken einer Mobile-App. Sie ist deshalb so zu designen, dass eine möglichst hohe Gewissheit über ihr Funktionieren erreicht wird. Dazu gehört auch, dass sich die Grundmechanismen der Lösung einfach an Projektmitarbeitende vermitteln lassen. Ebenfalls wichtig ist die Möglichkeit, durch automatisierte Tests zu verifizieren, ob die sicherheitsrelevanten Mechanismen korrekt implementiert wurden. 

 

Eine auf mobilen Geräten installierte Mobile App entzieht sich der Kontrolle des App-Anbieters. Die App läuft in einer nicht vertrauenswürdigen Umgebung und ist zusätzlichen Angriffsvektoren ausgesetzt. Kritischer Code oder kritische Daten sollen daher wo möglich serverseitig in einer State-of-the-Art-Service-Architektur umgesetzt und über gesicherte APIs der App angeboten werden.

 

Für die Funktionalität, die als App auf dem mobilen Gerät ausgeführt wird, ist ein passender technologischer Ansatz zu wählen: native, hybrid oder HTML5. Der Entscheid richtet sich nach den konkreten Anforderungen an die App. Unabhängig davon gilt als Grundregel: Für Funktionalität mit hohen Sicherheitsanforderungen ist die Implementation als native Code vorzuziehen. Dieser ist so kompilierbar, dass er keine Metadaten mitliefert, die das Reverse-Engineering vereinfachen, und lässt sich daher besser schützen. Der Ausdruck "native Code" bezieht sich hierbei auf Code, der in C/C++ geschrieben wurde. Er kann in eine native wie auch in eine hybride App integriert werden, nicht aber in eine mobile Web-App.

 

Implementation: Secure Coding & Co.

Für die eigentliche Implementation sind die Grundregeln für sicheres Programmieren zentral. Als hilfreich erweisen sich z.B. die plattformunabhängigen OWASP Secure Coding Practices ergänzt durch die plattformspezifischen Secure Coding Guidelines. Letztere helfen, die Funktion einer Plattform korrekt zu verwenden. Ein wichtiger Punkt, denn viele der Angriffsvektoren sind auf eine unsachgemässe Verwendung der Plattformfunktionen zurückzuführen. Ein typischer Fehler ist das Speichern von sensitiven Informationen (z.B. Passwörter) auf dem Gerät.

 

Ein weiteres  Thema sind Benutzereingaben. Sie müssen client- und serverseitig geprüft (validated) und von injiziertem Schadcode gesäubert werden (sanitized). Bei der Eingabe sensitiver Informationen sind besondere Massnahmen zu beachten: Grundsätzlich sollen keine Third-Party-Keypads zugelassen werden, da diese Benutzereingaben zum Teil zwecks Analyse und weiterer Services auf externe Server senden. Ebenso sind Copy, Caching,  Autokorrektur und -vervollständigung bei der Eingabe abzuschalten sowie WebViews zu vermeiden, da sie anfällig auf Hijacking bzw. Injizzieren von Touch-Events sind.

 

Funktionale Isolation

Da das Gerät, auf dem die App läuft, bei der Entwicklung von Mobile-Apps als grundsätzlich nicht vertrauenswürdig anzusehen ist, kann man auch einem Systemfunktionsaufruf aus der App nicht vertrauen. Ein Angreifer könnte den Aufruf abfangen und die übergebenen Parameter lesen oder modifizieren. Dies ist besonders kritisch, wenn es um kryptographische Funktionen geht, bei denen ein Teil der Parameter bzw. Rückgabewerte typischerweise schützenswerte Daten sind.

 

Hier kommt das Konzept der funktionalen Isolation zum Zug. Um sicherzustellen, dass sicherheitskritische Funktionen auch auf einem kompromittierten  System korrekt funktionieren, werden sie als fester Bestandteil der Mobile-App ausgeliefert. Es empfiehlt sich z.B., die Library für kryptographische Operationen in die App einzukompilieren.

 

Eine weitere Massnahme ist die applikatorische End-zu-End-Verschlüsselung sensitiver Daten. Sie werden für die Übertragung zwischen Mobile-App und Server durch einen in die App einkompilierten Public-Key verschlüsselt. Der Private-Key wird sicher auf Serverseite verwaltet. Dies gewährleistet, dass nur die Applikation Zugriff auf die Daten hat und Man-in-the-middle-Angriffe verhindert werden.

 

Hardening der Mobile-App

Im nächsten Schritt wird die Mobile-App durch sogenanntes Hardening geschützt. Dies umfasst zum einen den Schutz gegen Integritätsrisiken wie die Modifikation oder das Einschleusen von Code oder die Manipulation von Ressourcen (z.B. Texte, URLs). Zum anderen sollen Vertraulichkeitsrisiken wie Reverse-Engineering oder Codeanalyse durch sogenannte Code und Control Flow Obfuscation gemindert werden.

 

Diese Schutzmechanismen haben ihren Preis: Der Fussabdruck der App (Grösse des App-Codes und Speicherbedarf) nimmt zu, die Performance kann sinken. Letztlich ist es entscheidend, die Balance zwischen Schutz und Performance zu finden.

 

Auditing und Penetration-Testing

Nun geht es darum, die Wirksamkeit der Sicherheitsmassnahmen zu prüfen. Die ausgeklügeltsten Massnahmen nützen nichts, wenn z.B. durch einen Konfigurationsfehler in der Build-Pipeline die Mechanismen nicht korrekt auf die Mobile-App appliziert werden. Ein regelmässiges Auditing der Entwicklungsprozesse und architektonischen Entscheide sowie ein möglichst unabhängiges Testing (Penetration-Testing, Ethical-Hacking usw.) der Sicherheitsmassnahmen sind deshalb fundamental.

 

Proaktives App-Management

Um möglichen Angreifern das Leben weiter zu erschweren, empfiehlt es sich, auch dann das Hardening periodisch anzuwenden und die App in den App-Store hochzuladen, wenn sich an der App nichts geändert hat. Denn so müssen Angreifer immer wieder von vorne beginnen, die App zu verstehen und Schwachpunkte zu finden.

 

80 Prozent Handwerk

Fazit: Bei der Entwicklung einer Mobile-App ist man gut beraten, der Umgebung, in der sie ausgeführt wird, grundsätzlich nicht zu trauen. Das Bauen einer sicheren App beginnt beim Design. Der Einsatz von Hardening-Tools ist notwendig, aber nicht ausreichend. Eine sichere App zu entwickeln bedeutet zu 80% Handwerk und nur zu 20% Einsatz von Tools. Verfügen die Mitarbeitenden über das nötige Security-Wissen und verstehen ihr Handwerk, lassen sich auf gängigen Plattformen für ihren Bestimmungszweck definitiv genügend sichere Mobile-Apps entwickeln.

 

Dieser Beitrag ist die gekürzte Fassung eines Artikels, der im Swiss IT Magazine erschienen ist.