Mobile Application Development and Security - Exam.pdf

Mobile Application Development and Security - Exam
Mobile Application Development and Security - Exam Aufgabe 1) Betrachte eine mobile Anwendung, die auf einer hybriden Plattform entwickelt wird und Zugriff auf eine externe Backend-Datenbank hat. Die Anwendung nutzt das MVVM-Designmuster und implementiert Mechanismen zur Datenverschlüsselung und sicheren API-Kommunikation. a) Beschreibe den Aufbau und die Interaktion der einzelnen Komponenten dies...

© StudySmarter 2024, all rights reserved.

Mobile Application Development and Security - Exam

Aufgabe 1)

Betrachte eine mobile Anwendung, die auf einer hybriden Plattform entwickelt wird und Zugriff auf eine externe Backend-Datenbank hat. Die Anwendung nutzt das MVVM-Designmuster und implementiert Mechanismen zur Datenverschlüsselung und sicheren API-Kommunikation.

a)

Beschreibe den Aufbau und die Interaktion der einzelnen Komponenten dieser Anwendung (UI, Backend, API, Datenbank) im Detail. Erläutere dabei, wie das MVVM-Designmuster in dieser Architektur konkret umgesetzt wird. Welche Vorteile bietet dieses Designmuster in Bezug auf die Trennung von Anliegen (separation of concerns)?

Lösung:

Eine mobile Anwendung, die auf einer hybriden Plattform entwickelt wird und Zugriff auf eine externe Backend-Datenbank hat, kann in verschiedene Komponenten unterteilt werden. Hier ist eine detaillierte Beschreibung des Aufbaus und der Interaktion dieser Komponenten unter Berücksichtigung des MVVM-Designmusters:

  • UI (User Interface): Die Benutzeroberfläche ist für die Darstellung der Daten und die Interaktion mit dem Benutzer verantwortlich. Sie besteht aus verschiedenen Ansichten und Steuerelementen, die in einer hybriden Plattform wie Ionic oder React Native implementiert werden können. Die UI-Komponenten sind eng mit den ViewModels verbunden, die die Daten und Logik bereitstellen, die in der Benutzeroberfläche angezeigt werden.
  • ViewModel: Das ViewModel ist eine zentrale Komponente im MVVM-Designmuster. Es agiert als Vermittler zwischen der Benutzeroberfläche und dem Modell (Backend/Database) und stellt die Daten und Befehle bereit, die von der UI genutzt werden. Das ViewModel enthält keine Logik zur Darstellung, sondern nur die Daten und Logik zur Verarbeitung dieser Daten. Es kommuniziert direkt mit dem Modell, um Daten zu laden und zu speichern.
  • Backend: Das Backend enthält die Geschäftslogik und stellt die Schnittstelle zur Datenbank bereit. Es bietet verschiedene API-Endpunkte an, die vom ViewModel aufgerufen werden können, um Daten abzufragen oder zu speichern. Das Backend sollte so gestaltet sein, dass es alle sicherheitsrelevanten Aspekte, wie Authentifizierung, Autorisierung und Datenverschlüsselung, berücksichtigt.
  • API: Die API dient als Brücke zwischen der mobilen Anwendung und dem Backend. Sie ermöglicht die Kommunikation zwischen der mobilen Anwendung und den Backend-Diensten. Die API-Endpunkte sind so gestaltet, dass sie sichere Datenübertragungen ermöglichen, indem sie beispielsweise HTTPS und eine Authentifizierungsmethode wie OAuth verwenden.
  • Datenbank: Die externe Datenbank speichert die persistenten Daten, die von der Anwendung verwendet werden. Das Backend kommuniziert mit der Datenbank, um Daten zu speichern und abzurufen. Die Datenbank sollte Sicherheitsmechanismen wie verschlüsselte Speicherung und sichere Zugriffsmechanismen implementieren.

Das MVVM-Designmuster wird in dieser Architektur wie folgt umgesetzt:

  • Modell: Das Modell besteht aus den Daten und der Geschäftslogik, die im Backend und der Datenbank implementiert sind.
  • ViewModel: Das ViewModel stellt eine Abstraktionsschicht zwischen der Benutzeroberfläche und dem Modell dar. Es kommuniziert mit dem Backend über die API, um Daten zu laden und zu speichern. Die Logik zur Verarbeitung der Daten und die Vorbereitung der Daten für die Anzeige in der UI sind Teil des ViewModels.
  • Ansicht (View): Die Ansicht besteht aus den UI-Komponenten, die auf die Daten und Befehle des ViewModels zugreifen, um die Daten darzustellen und Benutzerinteraktionen zu handhaben.

Vorteile des MVVM-Designmusters in Bezug auf die Trennung von Anliegen (Separation of Concerns):

  • Klare Trennung: Das MVVM-Muster trennt klar die Zuständigkeiten von UI, Benutzerinteraktionen und Datenlogik. Dadurch wird der Code wartbarer und verständlicher.
  • Testbarkeit: Da die Logik im ViewModel und nicht in der UI liegt, kann die Anwendungslogik einfacher getestet werden. UI-Tests können getrennt von der Geschäftslogik durchgeführt werden.
  • Wiederverwendbarkeit: Die ViewModels können unabhängig von der spezifischen UI wiederverwendet werden, was die Entwicklung von verschiedenen Oberflächen (z. B. für unterschiedliche Plattformen) erleichtert.
  • Erweiterbarkeit: Durch die Trennung der Verantwortlichkeiten kann die Anwendung leichter erweitert und angepasst werden, ohne dass Änderungen an allen Komponenten notwendig sind.

b)

Erkläre die Maßnahmen, die zur Sicherstellung der Authentifizierung, Datenverschlüsselung und sicheren API-Kommunikation in der Anwendung getroffen werden müssen. Gehe dabei insbesondere auf die folgenden Punkte ein:

  • Wie kann eine sichere Datenübertragung zwischen UI und Backend gewährleistet werden?
  • Welche Methoden zur Datenverschlüsselung sind zu empfehlen und warum?
  • Wie kann sichergestellt werden, dass nur authentifizierte Benutzer auf die API zugreifen können?

Lösung:

Um die Sicherheit einer mobilen Anwendung zu gewährleisten, die auf einer hybriden Plattform entwickelt wird und auf eine externe Backend-Datenbank zugreift, müssen verschiedene Maßnahmen zur Authentifizierung, Datenverschlüsselung und sicheren API-Kommunikation getroffen werden. Hier sind die detaillierten Erläuterungen zu den genannten Punkten:

  • Wie kann eine sichere Datenübertragung zwischen UI und Backend gewährleistet werden?
  • HTTPS: Die Verwendung von HTTPS (Hypertext Transfer Protocol Secure) ist unerlässlich, um eine sichere Datenübertragung zwischen der Benutzeroberfläche und dem Backend zu gewährleisten. HTTPS verschlüsselt die Daten, die über das Internet gesendet werden, und schützt vor Abhör- und Man-in-the-Middle-Angriffen.
  • SSL/TLS-Zertifikate: Um HTTPS zu implementieren, muss die Anwendung SSL/TLS-Zertifikate verwenden. Diese Zertifikate stellen die Identität der Website sicher und verschlüsseln die Datenübertragung. Zertifikate sollten von vertrauenswürdigen Zertifizierungsstellen (CAs) ausgestellt und regelmäßig erneuert werden.
  • API-Keys: Jeder Anfrage an die API sollte mit einem API-Key versehen sein, um sicherzustellen, dass nur autorisierte Anwendungen auf die API zugreifen können. API-Keys sollten nicht hartkodiert in den Anwendungen gespeichert, sondern sicher verwaltet werden.
  • Welche Methoden zur Datenverschlüsselung sind zu empfehlen und warum?
  • AES (Advanced Encryption Standard): AES ist ein weit verbreiteter symmetrischer Verschlüsselungsalgorithmus, der sowohl sicher als auch effizient ist. AES wird häufig verwendet, um sensible Daten zu verschlüsseln, die in der Datenbank oder während der Übertragung gespeichert werden. AES ist aufgrund seiner Stärke und Effizienz eine empfohlene Methode zur Datenverschlüsselung.
  • RSA (Rivest-Shamir-Adleman): RSA ist ein asymmetrisches Verschlüsselungsverfahren, das weit verbreitet ist, um Daten während der Übertragung zu verschlüsseln und digitale Signaturen zu erstellen. RSA ist nützlich, um geheime Schlüssel sicher zu übertragen, die dann für symmetrische Verschlüsselungsalgorithmen wie AES verwendet werden können.
  • Public-Key-Infrastruktur (PKI): PKI ermöglicht die Verwaltung von öffentlichen und privaten Schlüsseln sowie digitalen Zertifikaten. Durch den Einsatz von PKI kann sichergestellt werden, dass nur vertrauenswürdige Parteien auf die verschlüsselten Daten zugreifen können.
  • Wie kann sichergestellt werden, dass nur authentifizierte Benutzer auf die API zugreifen können?
  • OAuth 2.0: OAuth 2.0 ist ein weit verbreitetes Autorisierungsprotokoll, das sicherstellt, dass nur authentifizierte Benutzer auf die API zugreifen dürfen. Es ermöglicht Benutzern, Anwendungen Zugriff auf ihre Daten zu gewähren, ohne ihre Anmeldeinformationen direkt an die Anwendung weiterzugeben. OAuth 2.0 verwendet Zugriffstoken, um autorisierte Anfragen zu validieren. Diese Token sollten regelmäßig erneuert und sicher gespeichert werden.
  • JWT (JSON Web Tokens): JWTs sind kompakte, URL-sichere Token, die zur Authentifizierung und Autorisierung verwendet werden können. JWTs enthalten verschlüsselte Informationen über den Benutzer und können vom Backend überprüft werden, um sicherzustellen, dass nur authentifizierte Benutzer auf die API zugreifen. JWTs haben den Vorteil, dass sie einfach zu handhaben und zu überprüfen sind.
  • Multi-Faktor-Authentifizierung (MFA): MFA erhöht die Sicherheit, indem es von Benutzern verlangt, sich mit mehr als nur einem Faktor zu authentifizieren. Zum Beispiel muss ein Benutzer neben einem Passwort auch einen Einmalcode eingeben, der über eine mobile App generiert oder per SMS gesendet wird. Dies reduziert die Wahrscheinlichkeit, dass unbefugte Benutzer auf die API zugreifen können.

Durch die Implementierung dieser Maßnahmen kann sichergestellt werden, dass die Datenübertragung sicher ist, die Daten verschlüsselt sind und nur authentifizierte Benutzer auf die API zugreifen können.

Aufgabe 2)

Vergleiche die Entwicklungsumgebungen und die Sicherheitsrichtlinien von iOS und Android. Gehe insbesondere auf die Unterschiede in den Entwicklungsumgebungen und den Verteilungsmechanismen der Apps ein, sowie auf die allgemeinen Sicherheitsrichtlinien der beiden Plattformen.

a)

Teil 1: Erläutere die Hauptunterschiede in den Entwicklungsumgebungen von iOS und Android. Gehe dabei auf die verwendeten Programmiersprachen und die jeweiligen IDEs ein.

Lösung:

Teil 1:

  • Programmiersprachen
    • iOS: Die primäre Programmiersprache für die Entwicklung von iOS-Anwendungen ist Swift. Einige Entwickler verwenden immer noch Objective-C, aber Swift wird zunehmend bevorzugt.
    • Android: Die Hauptprogrammiersprachen für Android sind Java und Kotlin. Java war traditionell die erste Wahl, aber Kotlin wird nun offiziell von Google unterstützt und gewinnt an Beliebtheit aufgrund seiner modernen Features.
  • Integrierte Entwicklungsumgebungen (IDEs)
    • iOS: Die offizielle IDE für die iOS-Entwicklung ist Xcode. Xcode wird von Apple bereitgestellt und bietet alles Notwendige für die Entwicklung von iOS-, macOS-, watchOS- und tvOS-Anwendungen. Es unterstützt UI-Design, Codierung, Testing und Debugging.
    • Android: Die gängigste IDE für die Android-Entwicklung ist Android Studio. Es wird von Google unterstützt und basiert auf IntelliJ IDEA. Android Studio bietet Funktionen wie einen Layout-Editor, Code-Analyse, Debugging und einen Emulator zur App-Überprüfung.

b)

Teil 2: Diskutiere die Unterschiede in der App-Verteilung zwischen iOS und Android. Berücksichtige dabei nicht nur den Apple App Store und den Google Play Store, sondern auch die Möglichkeiten der Verteilung über Drittanbieter bei Android.

Lösung:

Teil 2:

  • Apple App Store
    • Der Apple App Store ist der einzige offizielle Marktplatz für iOS Apps.
    • Jede App muss einem strengen Prüfprozess unterzogen werden, der Sicherheit, Datenschutz und Qualität sicherstellen soll.
    • Die Einreichungsgebühren und die jährlichen Entwicklergebühren sind höher im Vergleich zu Android.
  • Google Play Store
    • Der Google Play Store ist der offizielle Marktplatz für Android Apps.
    • Der Prüfprozess für Apps ist oft weniger streng als der des Apple App Stores, was zu einer schnelleren Veröffentlichung führen kann.
    • Die Einreichungsgebühren und jährlichen Entwicklergebühren sind niedriger als bei Apple.
  • Drittanbieter bei Android
    • Android ermöglicht die Verteilung von Apps auch über Drittanbieter-Marktplätze wie Amazon Appstore und Samsung Galaxy Store.
    • Android-Geräte erlauben es Anwendern, Apps direkt über .apk (Android Package Kit) Dateien zu installieren, was als Sideloading bekannt ist.
    • Dieses Sideloading ermöglicht mehr Flexibilität, kann aber auch zu erhöhten Sicherheitsrisiken führen, wenn Benutzer Apps aus unsicheren Quellen installieren.

c)

Teil 3: Analysiere die Sicherheitsrichtlinien von iOS und Android. Welche Plattform hat strengere Prüfprozesse und warum? Wie wirken sich diese Richtlinien auf die Sicherheit der mobilen Anwendungen aus?

Lösung:

Teil 3:

  • Sicherheitsrichtlinien von iOS
    • Apple hat sehr strenge Sicherheitsrichtlinien für die Einreichung von Apps im Apple App Store.
    • Jede App durchläuft einen rigorosen Prüfprozess, um sicherzustellen, dass sie frei von Malware und anderen Sicherheitsbedrohungen ist.
    • Apple setzt auf ein geschlossenes Ökosystem, das heißt, Apps können nur aus dem Apple App Store heruntergeladen werden (außer Geräte sind gejailbreakt, was jedoch nicht empfohlen wird).
    • iOS-Anwendungen laufen in einer strikten Sandbox-Umgebung, was den Zugriff auf andere Apps und die Betriebssystemebene einschränkt.
    • Ein wichtiger Sicherheitsmechanismus ist die App-Signierung. Jede App muss von einem zertifizierten Apple-Entwickler signiert werden.
    • Diese Maßnahmen machen es schwieriger für schädliche Anwendungen, das System zu kompromittieren, was iOS allgemein als sicherer gelten lässt.
  • Sicherheitsrichtlinien von Android
    • Android hat auch Sicherheitsrichtlinien, jedoch ist der Prüfprozess im Google Play Store weniger streng im Vergleich zu Apple.
    • Google verwendet eine Kombination aus automatischen Überprüfungen und manuellen Prüfungen, aber die Automatisierung führt manchmal dazu, dass schädliche Apps durch den Prüfprozess gelangen.
    • Android bietet Nutzern die Möglichkeit, Apps aus Drittanbieterquellen zu installieren (Sideloading), was zu erhöhten Sicherheitsrisiken führen kann.
    • Android-Apps laufen ebenfalls in einer Sandbox-Umgebung, aber die Offenheit des Systems kann zu mehr potenziellen Schwachstellen führen.
    • Es gibt Mechanismen wie die Google Play Protect, die Anwendungen auf Malware überprüfen und Sicherheitsupdates auf Geräten ausrollen.
  • Vergleich und Auswirkungen
    • iOS hat strengere Prüfprozesse und ein geschlossenes Ökosystem, was die Wahrscheinlichkeit von Sicherheitsproblemen reduziert und somit die Sicherheit der mobilen Anwendungen erhöht.
    • Die Offenheit von Android ermöglicht eine größere Flexibilität und Freiheit für Entwickler und Nutzer, führt aber auch zu einem erhöhten Risiko von Malware und anderen Sicherheitsbedrohungen.
    • Die strengen Sicherheitsrichtlinien von Apple können als hinderlich für manche Entwickler empfunden werden, bieten jedoch eine sicherere Plattform für Endnutzer.
    • Andererseits erlaubt Android mehr Innovation und Anpassung, erfordert aber von Nutzern und Entwicklern eine größere Aufmerksamkeit auf Sicherheit.

Aufgabe 3)

Sicherheitsrisiken in mobilen Anwendungen und Bedrohungsmodelle

  • Datendiebstahl: durch ungeschützte API-Schnittstellen oder unsichere Datenübertragung.
  • Schadsoftware: installiert durch bösartige Apps oder Schwachstellen in Apps.
  • Phishing-Angriffe: Benutzer durch gefälschte Apps oder Links zur Preisgabe sensibler Informationen verleitet.
  • Bedrohungsmodelle: STRIDE, DREAD, und OWASP Mobile Top Ten.
  • STRIDE: Spoofing, Tampering, Repudiation, Information Disclosure, Denial of Service, Elevation of Privilege.
  • DREAD: Damage Potential, Reproducibility, Exploitability, Affected Users, Discoverability.

a)

Erkläre anhand eines Beispiels, wie ein Datendiebstahl in einer mobilen Anwendung durch eine ungeschützte API-Schnittstelle stattfinden könnte. Wie könnte man dies mithilfe des Bedrohungsmodells STRIDE analysieren und verhindern?

Lösung:

Beispiel für Datendiebstahl durch eine ungeschützte API-Schnittstelle in einer mobilen Anwendung

Stell Dir vor, Du benutzt eine mobile Anwendung, um Deine Bankkontodaten zu verwalten. Diese App kommuniziert mit einem Server über eine API-Schnittstelle. Die API ist jedoch nicht ausreichend gesichert, das heißt, sie überträgt Daten ohne Verschlüsselung.

Ein Angreifer kann sich in das Netzwerk einklinken und den Datenverkehr zwischen der mobilen Anwendung und dem Server abfangen. Da die Daten unverschlüsselt übertragen werden, kann der Angreifer sensible Informationen wie Benutzername, Passwort und Kontostand abfangen und für bösartige Aktivitäten nutzen.

Analyse des Szenarios mithilfe des STRIDE-Modells

  • Spoofing (Vortäuschung): Ein Angreifer könnte sich als legitimer Benutzer ausgeben, indem er gefälschte Authentifizierungstoken oder Sitzungs-IDs verwendet, die durch die ungeschützte API abgreifbar sind.
  • Tampering (Manipulation): Der Angreifer könnte die übertragenen Daten auf dem Weg zwischen dem Client und dem Server verändern, z. B. durch das Ändern des Kontostands oder das Einfügen neuer Transaktionen.
  • Repudiation (Leugnung): Benutzer oder Angreifer könnten ihre Aktionen in der App leugnen, da es keine sichere Protokollierung gibt, die beweisen könnte, wer was getan hat.
  • Information Disclosure (Offenlegung von Informationen): Dies ist der Hauptaspekt des Datendiebstahls in diesem Szenario. Unverschlüsselte Datenübertragung führt direkt zur Preisgabe sensibler Informationen.
  • Denial of Service (Dienstverweigerung): Ein Angreifer könnte die API mit Anfragen überlasten, sodass legitime Benutzer keinen Zugriff mehr auf die Dienste haben.
  • Elevation of Privilege (Berechtigungseskalation): Angreifer könnten Schwachstellen in der API nutzen, um höhere Berechtigungen zu erlangen und mehr Kontrolle über den Server oder die Anwendung zu gewinnen.

Verhinderungsmaßnahmen

  • Verschlüsselung: Implementierung der SSL/TLS-Verschlüsselung für alle Datenübertragungen zwischen der mobilen Anwendung und dem Server, um sicherzustellen, dass Daten nicht im Klartext übertragen werden.
  • Authentifizierung und Autorisierung: Nutzung starker Authentifizierungs- und Autorisierungsmechanismen wie OAuth, um sicherzustellen, dass nur autorisierte Benutzer Zugriff auf die API haben.
  • Token-Sicherheit: Einsetzen sicherer Tokens und regelmäßige Rotation der Tokens, um die Gefahr von Missbrauch zu minimieren.
  • Eingabevalidierung: Alle Eingaben, die an die API gesendet werden, sollten validiert werden, um sicherzustellen, dass sie keine bösartigen Inhalte enthalten.
  • Protokollierung und Überwachung: Implementierung umfassender Logs und Überwachungsmaßnahmen, um verdächtige Aktivitäten zu erkennen und darauf zu reagieren.

b)

Analysiere einen Phishing-Angriff auf eine mobile Banking-App mithilfe des DREAD-Modells. Lege dabei besonderes Augenmerk auf die Dimensionen 'Damage Potential' und 'Exploitability'.

Lösung:

Analyse eines Phishing-Angriffs auf eine mobile Banking-App mithilfe des DREAD-Modells

Ein Phishing-Angriff wird oft durchgeführt, indem ein Angreifer eine gefälschte Version einer legitimen mobilen Banking-App erstellt. Diese gefälschte App imitiert die Benutzeroberfläche und Funktionen der echten App, um Benutzer dazu zu bringen, ihre Anmeldedaten einzugeben. Die eingegebenen Daten werden dann an den Angreifer gesendet, der sie für böswillige Zwecke verwenden kann.

Das DREAD-Modell hilft dabei, Bedrohungen strukturiert zu analysieren und zu bewerten. Hier sind die fünf Dimensionen des DREAD-Modells angewendet auf einen Phishing-Angriff:

  • Damage Potential (Schadenspotenzial): Diese Dimension bewertet das potenzielle Ausmaß des Schadens, der durch die Bedrohung verursacht werden kann.
    • Bei einem erfolgreichen Phishing-Angriff auf eine mobile Banking-App können Angreifer vollen Zugriff auf die Bankkonten der betroffenen Benutzer erhalten. Dies kann zu erheblichen finanziellen Verlusten führen, einschließlich unautorisierter Abhebungen und Überweisungen.
    • Zudem können die Angreifer persönliche und vertrauliche Informationen der Benutzer stehlen, wie z.B. Sozialversicherungsnummern, Adressen und Telefonnummern, was zu Identitätsdiebstahl und weiterem Missbrauch führen kann.
  • Reproducibility (Reproduzierbarkeit): Diese Dimension bewertet, wie leicht der Angriff wiederholbar ist.
    • Phishing-Angriffe sind oft sehr reproduzierbar, insbesondere wenn der Angreifer eine gefälschte App erstellt hat, die leicht kopiert und weiterverbreitet werden kann.
    • Angreifer können dieselbe Phishing-Technik auf viele Benutzer anwenden, indem sie die gefälschte App in verschiedenen App-Stores und über verschiedene Kanäle verbreiten.
  • Exploitability (Ausnutzbarkeit): Diese Dimension bewertet, wie leicht die Bedrohung ausgenutzt werden kann.
    • Phishing-Angriffe auf mobile Banking-Apps sind oft relativ einfach auszuführen, da sie keine tiefgehenden technischen Kenntnisse erfordern. Der Angreifer muss lediglich eine gefälschte Version der App erstellen, die täuschend echt aussieht.
    • Viele Benutzer sind nicht ausreichend geschult, um gefälschte Apps und Phishing-Versuche zu erkennen, was die Ausnutzbarkeit weiter erhöht.
    • Veröffentlichung in inoffiziellen App-Stores oder durch Social Engineering-Techniken, die Benutzer dazu verleiten, APK-Dateien direkt zu installieren, macht es einfach für Angreifer, die gefälschte App zu verteilen.
  • Affected Users (Betroffene Benutzer): Diese Dimension bewertet die Anzahl der Benutzer, die von der Bedrohung betroffen sein könnten.
    • Phishing-Angriffe können potenziell viele Benutzer betreffen, insbesondere wenn die gefälschte App weit verbreitet wird.
    • Je bekannter und beliebter die mobile Banking-App ist, desto größer ist die Anzahl der potenziell betroffenen Benutzer.
  • Discoverability (Entdeckbarkeit): Diese Dimension bewertet, wie wahrscheinlich es ist, dass die Bedrohung entdeckt wird.
    • Gefälschte Apps können möglicherweise eine Weile unentdeckt bleiben, insbesondere wenn sie in weniger regulierten App-Stores veröffentlicht oder direkt (über Social Engineering) an Benutzer verteilt werden.
    • Allerdings könnten Sicherheitsmechanismen und Benutzerberichte schnellere Entdeckung und Entfernung dieser gefälschten Apps ermöglichen.

Besonderer Fokus auf 'Damage Potential' und 'Exploitability'

Damage Potential: Der Schaden, der durch einen erfolgreichen Phishing-Angriff auf eine mobile Banking-App entsteht, kann enorm sein. Neben direktem finanziellem Verlust für den betroffenen Benutzer kann der Angreifer auch persönliche Informationen stehlen, was zu weiterem Missbrauch und langfristigem Schaden wie Identitätsdiebstahl führen kann. Die geschädigten Benutzer verlieren nicht nur Geld, sondern auch Vertrauen in die Sicherheit von mobilen Banking-Diensten.

Exploitability: Phishing-Angriffe sind relativ einfach durchzuführen. Das Erstellen einer gefälschten App, die täuschend echt aussieht, erfordert keine tiefgehenden technischen Kenntnisse. Angreifer können öffentlich zugängliche Entwicklungstools und Ressourcen nutzen, um die gefälschte App zu erstellen. Darüber hinaus nutzen sie oft Social Engineering-Techniken, um Benutzer dazu zu verleiten, die gefälschte App zu installieren. Durch die Verteilung über inoffizielle Kanäle oder App-Stores können Angreifer eine breite Zielgruppe erreichen.

c)

Beschreibe zwei mögliche Schwachstellen und entsprechende Bedrohungsszenarien, die in der OWASP Mobile Top Ten gelistet sind, und erläutere präventive Maßnahmen, die ergriffen werden können, um diese zu vermeiden.

Lösung:

Beschreibung und Prävention von Schwachstellen und Bedrohungsszenarien aus der OWASP Mobile Top Ten

Die OWASP Mobile Top Ten listet die häufigsten und kritischsten Sicherheitsschwachstellen in mobilen Anwendungen auf. Hier sind zwei Beispiele für Schwachstellen und entsprechende Bedrohungsszenarien sowie präventive Maßnahmen:

M1: Improper Platform Usage (Fehlerhafte Nutzung der Plattform)

Schwachstelle: Diese Schwachstelle betrifft die unsachgemäße Nutzung der Funktionen der mobilen Plattform, wie unsachgemäße Nutzung von Android Intents, iOS Keychain, oder anderer sicherheitsrelevanter Plattform-APIs.

Bedrohungsszenario: Ein Entwickler verwendet unsicheres Intent für die Kommunikation zwischen App-Komponenten. Ein Angreifer kann eine bösartige App erstellen, die auf diese Intents lauscht und sensible Daten wie Benutzeranmeldedaten oder Token abfängt.

Präventive Maßnahmen:

  • Schulung der Entwickler in der sicheren Nutzung von Plattform-APIs und der Best Practices für die mobile Entwicklung.
  • Verwendung von sicheren Kommunikationsmethoden, wie z.B. verschlüsselte Intents oder andere Mechanismen, die die Plattform bietet, um sensitive Informationen sicher zu übertragen.
  • Regelmäßige Sicherheitsbewertungen und Code-Reviews, um sicherzustellen, dass die App-Architektur und die Plattformnutzung sicher sind.
M2: Insecure Data Storage (Unsichere Datenspeicherung)

Schwachstelle: Diese Schwachstelle tritt auf, wenn sensible Daten unverschlüsselt auf dem Gerät gespeichert werden. Dadurch kann ein Angreifer durch verschiedene Angriffe (z.B. physischer Zugriff, Malware) auf diese Daten zugreifen.

Bedrohungsszenario: Eine mobile Bankanwendung speichert Sitzungs-IDs und Kontonummern unverschlüsselt in einer SQLite-Datenbank auf dem Gerät. Ein Angreifer, der physischen Zugriff auf das Gerät erlangt oder eine Malware installiert, kann diese Daten auslesen und für unbefugte Transaktionen verwenden.

Präventive Maßnahmen:

  • Verwenden von sicheren Speichermechanismen wie dem Android Keystore oder dem iOS Keychain, die speziell für die sichere Speicherung sensitiver Daten entwickelt wurden.
  • Verschlüsselung aller gespeicherten Daten mit starken Verschlüsselungsalgorithmen, um sicherzustellen, dass die Daten im Falle eines Zugriffs durch einen Angreifer unlesbar sind.
  • Implementierung weiterer Sicherheitsmechanismen wie Remote-Wipe-Funktionen, um sensible Daten im Falle eines Geräteverlusts oder -diebstahls löschen zu können.

Aufgabe 4)

Mobile Application Development and Security:Die Entwicklung und Sicherheit mobiler Anwendungen erfordert sowohl statische als auch dynamische Analyse, um die Qualität und Sicherheit des Codes zu gewährleisten. Die statische Codeanalyse beinhaltet die Untersuchung des Quellcodes ohne Ausführung des Programms, um Sicherheitslücken, Syntaxfehler und Schwachstellen zu finden. Dynamische Analyse hingegen bewertet das Verhalten der Anwendung während der Laufzeit und überwacht Speicherverbrauch, Performance und Runtime-Anomalien. Beispiele für Tools zur statischen Analyse sind SonarQube, PMD und FindBugs, während Valgrind, Dyba und Instrumentation Frameworks zur dynamischen Analyse verwendet werden.

a)

a) Erläutere die beiden Hauptunterschiede zwischen statischer Codeanalyse und dynamischer Analyse. Gehe dabei auf den jeweiligen Zeitpunkt der Analyse sowie auf die Art der entdeckten Probleme ein.

Lösung:

Hauptunterschiede zwischen statischer Codeanalyse und dynamischer Analyse:

  • Zeitpunkt der Analyse:Die statische Codeanalyse erfolgt vor der Ausführung des Programms. Das bedeutet, dass der Quellcode untersucht wird, während die Anwendung noch nicht gestartet wurde. Im Gegensatz dazu wird die dynamische Analyse während der Laufzeit der Anwendung durchgeführt. Hierbei wird die bereits laufende Anwendung überwacht.
  • Art der entdeckten Probleme:Die statische Codeanalyse identifiziert Probleme wie Sicherheitslücken, Syntaxfehler und Schwachstellen, indem sie den Quellcode überprüft. Diese Methode kann jedoch keine Probleme aufdecken, die erst während der Programmausführung auftreten. Dynamische Analyse hingegen untersucht das Verhalten der Anwendung in Echtzeit und kann deshalb Laufzeitprobleme wie Speicherlecks, Performance-Probleme und Runtime-Anomalien erkennen.

b)

b) Beschreibe zwei Anwendungsfälle, in denen statische Codeanalyse besonders vorteilhaft ist. Erkläre, warum diese Methode in diesen Fällen besser geeignet ist.

Lösung:

Anwendungsfälle, in denen statische Codeanalyse besonders vorteilhaft ist:

  • Frühes Erkennen von Sicherheitslücken:In der frühen Phase der Entwicklung kann die statische Codeanalyse genutzt werden, um Sicherheitslücken im Quellcode zu identifizieren. Da diese Methode den Code untersucht, ohne dass er ausgeführt wird, können Entwickler mögliche Schwachstellen und Sicherheitsprobleme schnell und effizient erkennen. Dadurch können potenzielle Sicherheitsrisiken bereits im Vorfeld behoben werden, bevor sie in die Produktionsumgebung gelangen.
  • Automatisierung von Code-Reviews:Statische Codeanalyse-Tools wie SonarQube können in den CI/CD (Continuous Integration/Continuous Deployment) Prozess integriert werden, um automatisierte Code-Reviews durchzuführen. Dies ermöglicht es Entwicklungsteams, kontinuierlich und schnell Feedback zu erhalten, wodurch die Codequalität verbessert wird. Automatisierte Code-Reviews auf Basis der statischen Analyse können wiederholte Fehler und Code-Stil-Probleme erkennen, was die Überprüfung des Codes effizienter und konsistenter macht.

Warum diese Methode vorteilhaft ist:

  • Frühe Fehlererkennung: Durch die Untersuchung des Quellcodes ohne ihn auszuführen, können Fehler und Sicherheitslücken sehr früh im Entwicklungsprozess erkannt und behoben werden. Dies spart Zeit und Kosten, weil Probleme nicht erst während der Laufzeit oder im späteren Verlauf der Entwicklung entdeckt werden.
  • Kontinuierliche Qualitätsüberprüfung: Die Integration von statischer Codeanalyse in automatisierte Build-Prozesse ermöglicht konstante Prüfungen des Codes. Die Entwickler erhalten kontinuierlich Feedback und können sofort auf potenzielle Probleme reagieren, was die Gesamtqualität des Codes nachhaltig verbessert.

c)

c) Nimm an, Du entwickelst eine mobile Anwendung und entdeckst mithilfe dynamischer Analyse ein Speicherleck. Beschreibe die Schritte, die Du unternimmst, um das Problem zu identifizieren und zu lösen. Gehe dabei auf die relevanten Tools und Techniken ein.

Lösung:

Schritte zur Identifizierung und Lösung eines Speicherlecks mithilfe dynamischer Analyse:

  • Schritt 1: Durchführung der dynamischen Analyse: Verwende ein dynamisches Analysetool wie Valgrind oder ein Instrumentation Framework, um die mobile Anwendung während der Laufzeit zu überwachen. Diese Tools können Speicherverbrauch und -management überwachen und auf mögliche Speicherlecks hinweisen.
  • Schritt 2: Reproduzieren des Speicherlecks: Versuche, die Bedingungen, unter denen das Speicherleck auftritt, zu identifizieren und zu reproduzieren. Dies kann beinhalten, bestimmte Funktionen der Anwendung verstärkt zu nutzen oder spezifische Szenarien durchzuspielen, die das Leck auslösen.
  • Schritt 3: Analyse der Speicherberichte: Untersuche die Berichte und Logs, die das dynamische Analysetool erzeugt hat. Diese Berichte sollten Informationen darüber liefern, welche Teile des Codes Speicherlecks verursachen. Valgrind zum Beispiel zeigt detaillierte Informationen über Speicherzuweisungen und -freigaben, die zur Identifizierung des Problems genutzt werden können.
  • Schritt 4: Codeüberprüfung und Debugging: Sobald der problematische Codeabschnitt identifiziert ist, überprüfe diesen sorgfältig. Achte dabei speziell auf Bereiche, in denen Speicher allokiert, aber möglicherweise nicht freigegeben wird. Nutze Debugging-Tools, um den Code Schritt für Schritt zu durchlaufen und die Speicherzuweisungen zu überprüfen.
  • Schritt 5: Behebung des Speicherlecks: Nachdem das Speicherleck identifiziert wurde, optimiere den Code, um sicherzustellen, dass der Speicher ordnungsgemäß freigegeben wird. Dies kann das Hinzufügen von free() Aufrufen in C/C++ oder die ordnungsgemäße Handhabung von Objekten in Sprachen wie Java oder Swift beinhalten.
  • Schritt 6: Validation und Regressionstests: Führe nach der Behebung des Speicherlecks erneute dynamische Analysen und Regressionstests durch, um sicherzustellen, dass das Problem wirklich behoben ist und keine neuen Probleme eingeführt wurden. Vergleiche die neuen Speicherberichte mit den alten, um die Verbesserung zu bestätigen.
  • Schritt 7: Code-Review und Dokumentation: Führe ein Code-Review durch, um sicherzustellen, dass die Änderungen robust und korrekt sind. Dokumentiere die Änderungen und den gefundenen Fehler, damit das Team aus den Erfahrungen lernen und ähnliche Probleme in Zukunft vermeiden kann.

d)

d) Angenommen, Du hast einen Algorithmus implementiert, der möglicherweise Performanzprobleme aufweist. Erläutere, wie Du mithilfe der dynamischen Analyse die Laufzeitkomplexität des Algorithmus messen und analysieren würdest. In deinem Antwort kannst du auch mathematische Formeln verwenden, um die Analyse zu veranschaulichen.

Lösung:

Schritte zur Messung und Analyse der Laufzeitkomplexität eines Algorithmus mithilfe dynamischer Analyse:

  • Schritt 1: Auswahl eines geeigneten Tools:Verwende ein dynamisches Analysetool wie Valgrind (mit dem Callgrind-Tool), Dyba oder ein spezielles Performance-Analysetool wie Android Profiler für Android-Anwendungen oder Instruments für iOS-Anwendungen.
  • Schritt 2: Profiling-Sitzung starten:Starte das Analysetool und beginne mit der Profiling-Sitzung, während der Algorithmus ausgeführt wird. Führe den Algorithmus mit verschiedenen Eingabegrößen aus, um eine repräsentative Menge an Daten zu erhalten.
  • Schritt 3: Datensammlung:Das Tool wird nun verschiedene Metriken wie CPU-Nutzung, Laufzeit und Anzahl der ausgeführten Anweisungen sammeln. Diese Daten können verwendet werden, um die Performance des Algorithmus zu bewerten.
  • Schritt 4: Analyse der gesammelten Daten:Untersuche die Berichte und Profiling-Daten, die das Tool erstellt hat. Achte besonders auf die Laufzeit in Abhängigkeit von der Eingabegröße (\(n\)).
  • Schritt 5: Schätzung der Laufzeitkomplexität:Verwende die gesammelten Daten, um die Laufzeitkomplexität zu schätzen. Zum Beispiel, wenn die Laufzeit des Algorithmus für verschiedene Eingabegrößen \(n\) gemessen wurde und die Ergebnisse \(T(n)\) wie folgt sind:
  • Für \(n = 10\), \(T(10) = 5 \text{ms}\)
  • Für \(n = 20\), \(T(20) = 20 \text{ms}\)
  • Für \(n = 30\), \(T(30) = 45 \text{ms}\)

    Man kann beobachten, dass \(T(n)\) etwa gleich \(\frac{n^2}{2}\) ist. Das deutet darauf hin, dass die Laufzeitkomplexität \(O(n^2)\) ist.

  • Schritt 6: Mathematische Darstellung:Um die Analyse zu veranschaulichen, kannst Du mathematische Formeln verwenden:
    • Allgemeine Annahme: \(T(n) \approx k \cdot n^2\), wobei \(k\) eine Konstante ist.
    • Bei den gemessenen Ergebnissen könnte man schließen: \(T(n) \approx \frac{n^2}{2}\), was auf eine quadratische Laufzeitkomplexität hindeutet.
  • Schritt 7: Optimierung:Identifiziere auf Basis der gewonnenen Erkenntnisse die Bereiche des Algorithmus, die optimiert werden können. Führe Verbesserungen durch und wiederhole den Analyseprozess, um die Effekte der Optimierungen zu bewerten.
Sign Up

Melde dich kostenlos an, um Zugriff auf das vollständige Dokument zu erhalten

Mit unserer kostenlosen Lernplattform erhältst du Zugang zu Millionen von Dokumenten, Karteikarten und Unterlagen.

Kostenloses Konto erstellen

Du hast bereits ein Konto? Anmelden