Application Security Praxisbeispiele

 

Seit es Anwendungen gibt, gibt es Bedrohungsakteure mit Lizenzen zum Umgehen, IP zum Abgreifen,
Daten zu stehlen und Aktionen zu untergraben. Anwendungsbesitzer entwickelten Abwehrmaßnahmen gegen diese Bedrohungen und
dann konterten die Bedrohungsakteure mit neuen Tools und Prozessen, um die Abwehrmaßnahmen zu umgehen. Dieses Katz-und-Maus-Spiel
Zyklus dauert bis heute an. Und während einige spezifische Techniken nicht mehr funktionieren, gibt es allgemeine
Grundsätze, die auch im anhaltenden Kampf zum Schutz von Anwendungen vor unbeabsichtigter Nutzung weiterhin gültig sind.

Wir entwickeln und verfeinern diese Best Practices seit mehr als 2 Jahrzehnten. Und während sie
allgemein anwendbar, manche stehen im Widerspruch zueinander und manche sind nur in bestimmten Szenarien sinnvoll.

Das Wichtigste ist, dass Sie bewusst vorgehen, die Bedrohungen berücksichtigen und dann anwenden.
relevante Abhilfemaßnahmen. Danach sehen Sie, was passiert, und nehmen dann Änderungen vor, denn Variation ist eine der
die wichtigsten zugrunde liegenden Prinzipien. Egal, ob Sie OODA (Observe, Orient, Decide, Act) oder PDCA praktizieren
(Planen, Tun, Prüfen, Handeln), lassen Sie Ihren Schutz nicht stagnieren. Sie haben eine Investition in Ihren
Verwenden Sie die Anwendung, um etwas Wertvolles zu tun; achten Sie dabei auf die Aufrechterhaltung der Integrität ihres Betriebs.

Es folgt eine Liste von Prinzipien und Ideen. Wählen Sie diejenigen aus, die für Sie funktionieren, aber tun Sie es bewusst. Wenn Sie
Wenn Sie eine Idee ignorieren möchten, ist das in Ordnung. Stellen Sie nur sicher, dass Sie dafür einen gültigen Grund haben.

Befolgen Sie Standards

Erstens: Wenn es allgemeine Standards wie OWASP MASVS (https://mas.owasp.org/MASVS/11-MASVSRESILIENCE/) oder Richtlinien gibt, die sich auf Ihre Branche oder Ihr Vertriebsmodell beziehen, verwenden Sie diese, während
Erstellen und Priorisieren von Bedrohungen, damit Sie nicht versehentlich etwas auf diesen Checklisten übersehen. Hier
sind einige spezifische Wachtypen, die den OWASP MASVS-Resilienzkategorien zugeordnet sind.

Anleitungsbeispiel

Mindset-Prinzipien

Denken Sie wie ein Psychologe

Denken Sie außerdem daran, dass es sich bei Bedrohungsakteuren um Menschen mit denselben Neigungen und Vorurteilen handelt wie bei uns allen.
Wenn Sie über den Schutz Ihrer Anwendung nachdenken, achten Sie auf mögliche Motivationen, konkurrierende Wünsche,
typische Verhaltensweisen und welche anderen menschlichen Eigenschaften auch immer in den Wunsch einer Person hineinspielen, Sie anzugreifen
Anwendung. Betrachten Sie Maslows Motivationsmodell, kognitive Verzerrungen und andere Faktoren, die Wege der
Denken Sie nach und nutzen Sie es zu Ihrem Vorteil.

Kennen Sie Ihren Gegner

Wenn Sie wissen, was ein Bedrohungsakteur will und warum er es will, können Sie den richtigen Schutz für Ihre
Anwendung. In Bezug auf Maslows Motivationsmodell könnte ein Bedrohungsakteur einen Angriff monetarisieren wollen, um
ihre grundlegendsten Bedürfnisse zu erfüllen. Ein anderer Bedrohungsakteur möchte vielleicht „Street Cred“ und sucht daher nach
Wertschätzung an der Spitze der Hierarchie. Erstere können davon überzeugt werden, Ihre Anwendung nicht mehr anzugreifen, wenn
Es gibt eine ähnliche Anwendung von einer anderen Organisation, die leichter erfolgreich angegriffen werden kann. In letzterem
In diesem Fall kann der Bedrohungsakteur davon profitieren, die größte bekannte Herausforderung anzugreifen, so dass, wenn/falls er Erfolg hat,
Sie können einen Elitestatus beanspruchen. Jeder hat ein anderes Konzept von „Rendite“ und „Investition“.
Das Verständnis des ROI-Modells Ihres Gegners kann Ihnen bei der Planung Ihres Schutzes helfen.

Frustrieren Sie Ihren Gegner

Generell gilt: Je mehr Ihre Schutzmaßnahmen Bedrohungsakteure frustrieren können, desto wahrscheinlicher ist es, dass sie aufgeben
ihren Angriff. Wenn man seinen Kopf zu oft gegen die Wand schlägt, stellt man schließlich die
Vorteil der Fortsetzung.

Vorbereitende Grundsätze

Modellieren Sie Ihre Bedrohungen

Beginnen Sie mit der Aufzählung der Bedrohungen für Ihre Anwendung und ordnen Sie sie dann nach Priorität. Sie benötigen dies
Ranking, um zu wissen, welche Bedrohungen zuerst angegangen werden müssen oder welche Minderung den Vorzug geben sollte, wenn zwei Bedrohungen miteinander konkurrieren
Abhilfemaßnahmen. Diese Liste hilft auch, wenn Sie eine Leistungsoptimierung vornehmen müssen. Die Stärke der Sicherheit kann
angepasst werden, um mehr Zyklen für Ihre Anwendungslogik bereitzustellen, jedoch nicht auf Kosten der Vernachlässigung der
wirkungsvolle Bedrohungen.

Untersuchen Sie Angriffstools

Wenn Sie verstehen möchten, wie einfach es ist, eine Anwendung anzugreifen, schauen Sie sich die OWASP MASTG (Mobile
Application Security Testhandbuch). Es listet mehrere Bedrohungstools und Beispiele auf, wie sie zum Testen verwendet werden
Anwendungsresilienz. Durch Analysen vor und nach dem Schutz können Sie sicher sein, dass Sie
die wichtigsten Bedrohungen anzugehen. [Hinweis: Seien Sie vorsichtig mit Jailbreaks, Rootkits und Angriffsframeworks
da sie die Deaktivierung von Sicherheitskontrollen erfordern und selbst bösartige Nutzdaten enthalten können!]

Sei der Bösewicht

Bevor Sie einen Schutz entwickeln, greifen Sie Ihre Anwendung an (zumindest in Gedanken), um zu verstehen, was eine Bedrohung ist
Akteur versuchen könnte. Die Entwicklung einer konfrontativen Denkweise ist wichtig, um wirksame Schutzmaßnahmen zu schaffen. Viele
Wachen und Schutzmaßnahmen sind erst dann sinnvoll, wenn Sie den Angriffsvektor verstehen, vor dem sie schützen.

Tragen Sie Ihren Teil bei, bevor Sie schützen

Anwendungsschutzprodukte können die Sicherheit Ihrer Anwendung verbessern, aber beginnen Sie bitte mit sicheren
Kodierungspraktiken und verwenden Sie alle anderen anwendbaren Tools (SAST, DAST, SCA usw.), um nach anderen zu suchen
Schwachstellen frühzeitig und häufig zu erkennen. Nutzen Sie die Vorteile des OWASP MASTG und des OWASP MASVS für
Informationen zu sicheren Codierungspraktiken, guter Plattformnutzung usw.

Grundlegende Schutzprinzipien

Multiplizieren Sie die Optionen

Wie viele andere Menschen auch, wählen Bedrohungsakteure wahrscheinlich den Weg des geringsten Widerstands, wenn sie mit mehreren
Möglichkeiten. Schaffen Sie also viele Pfade, indem Sie viele Wachen mit unterschiedlichen Reaktionen einsetzen, um Bedrohungsakteure zu führen
zu Sackgassen oder Honigtöpfen oder „einem Labyrinth aus verwinkelten kleinen Gängen, alle gleich“. Selbst ohne Zugabe von Honig
Töpfe usw. - je mehr Heu zum Heuhaufen hinzufügt, desto schwieriger wird es, die Nadel zu finden.

Ursache und Wirkung auflösen

Ursache und Wirkung sind wertvolle Werkzeuge für den Bedrohungsakteur. Jedes Mal, wenn er eine Änderung vornimmt und eine
Reaktion, erfahren sie mehr darüber, wann Ihre Anwendung ihre Prüfungen durchführt und wie sie auf die
Manipulationsereignisse, die es sieht. Die Verbindung zwischen Ursache und Wirkung zu unterbrechen – oder sie zumindest ein wenig zu lockern – ist eine
wirksame Gegenmaßnahme. Es ist zwar verlockend – und macht auch Sinn –, sofort abzustürzen oder auszusteigen
eine Anwendung, wenn ein Angriff erkannt wird, ist ein besserer Ansatz, die laufende App subtil zu unterbrechen. Wenn
Angreifer lösen eine Erkennung aus, wissen aber nicht, dass sie es getan haben, werden sie wahrscheinlich das nächste versuchen. Wenn sie
mehrere Schritte in einer Kette von Ereignissen, die ihren Angriff ausmachen, bevor sie erkennen, dass sie erwischt wurden,
Ihre Aufgabe, den einzelnen Ausfallpunkt zu isolieren, ist umso schwieriger. Das macht es für Angreifer schwieriger,
Finden und deaktivieren Sie Ihre Wachen.

Beseitigung einzelner Ausfallpunkte

Einzelne Ausfallpunkte machen Ihren Schutz anfällig, also verknüpfen Sie mehrere Wachen miteinander und etablieren Sie eine
Schwellenwert dessen, was auf Manipulation hindeutet. Dies gilt insbesondere dann, wenn Wachen Heuristiken verwenden. Als
Beispielsweise verwendet Virtual Control Detection heuristische Techniken, um festzustellen, ob die Interaktion mit dem
Gerät ist wahrscheinlich eine Person oder nicht. Wie bei jeder heuristischen Entscheidung ist die virtuelle Kontrollerkennung
ungefähr und spiegelt möglicherweise nicht immer die wahre Quelle der Interaktion wider. Kombinieren Sie Virtual Control
Erkennung mit anderen Eingaben bei der Bestimmung der Reaktion.

Imitieren Sie die Mücke

Eine größere Anzahl kleinerer Wachen ist einer kleineren Anzahl größerer Wachen vorzuziehen. Kleinere Wachen sind
schwerer zu finden als größere Wachen, außerdem bieten sie eine größere Fähigkeit, sich gegenseitig zu überlappen, was eine größere
Maß an Verteidigung in der Tiefe. Auch kleine, versteckte Manipulationsaktionen, die sich anhäufen, können verwendet werden, um einen
Angriff durch tausend Stiche.

Verwenden Sie Guard-Netzwerke

Guard-Netzwerke sind Gruppen von Guards, die zusammenarbeiten, um die Anwendung und die anderen Guards in
das Netzwerk. Durch die Schaffung eines Gewirrs von Schutzmechanismen kann es sehr schwierig werden, einzelne
Wache. In diesem Fall gilt: Je größer das Gewirr, desto besser, bis zu dem Punkt, an dem zusätzliche Wachen
eine nachteilige Auswirkung auf die Leistung.

Setzen Sie gezielte Wachen ein

Setzen Sie Schutzmaßnahmen ein, um Ihre wichtigsten Vermögenswerte zu schützen, und berücksichtigen Sie die Angriffsmethoden, die am häufigsten
gefährlich. Wenn beispielsweise der Entzug einer Lizenz ein Problem darstellt, sollten sich Ihre Schutzmaßnahmen auf Ihre Lizenzierung konzentrieren
Logik, Lizenzcodepfade, Validierung der Lizenzargumente und Rückgabewerte der Lizenzroutine.

Regelmäßig ändern und bewegen

Der Schutz erfolgt halb zufällig basierend auf Ihrem Code, Ihrer Guardspec oder Blaupause, der Produktversion und
der Schutz-Seed. Ändern Sie Ihren Seed für jede Version (und speichern Sie ihn), damit Sie sicher sein können, dass
Ihr Schutz ist jedes Mal anders. Dadurch wird der Angreifer aufgeregt, da er von vorne beginnen muss
für jede Veröffentlichung. Es gibt keinen Grund, dem Angreifer die Arbeit leichter als nötig zu machen.

Bieten Sie keine Werbegeschenke an

Geben Sie eine Anwendung niemals für die Produktion frei, wenn einer der Schutzmechanismen oder andere Funktionen auf den Debugmodus eingestellt sind.
Debug-Meldungen können offenlegen, welche Art von Schutz angewendet wird und wo er injiziert wird. Sie versuchen,
Machen Sie es dem Angreifer schwer und bleiben Sie stets auf der Hut.

Fangen Sie einfach an und iterieren Sie

Wenn Sie den Schutz zum ersten Mal in Ihre Anwendung integrieren, nutzen Sie alle automatischen Schutzoptionen
(Standardkonfigurationen, Zero-Config usw.), um die anfängliche Integration des Schutzes in Ihre CI-Pipeline durchzuführen.
Dadurch können Sie den Schutz schneller in Ihren Software-Entwicklungszyklus integrieren. Sie
Sie können den Schutz später an Ihre spezifischen Sicherheits- und Leistungsanforderungen anpassen. Denken Sie daran,
Gehen Sie zurück und passen Sie Ihren Schutz auf das entsprechende Niveau an, das in Ihrer anfänglichen Bedrohungsanalyse ermittelt wurde.

Erweiterte Schutzprinzipien

Einführung nichtdeterministischen Verhaltens

Neben der Sicherstellung, dass viele Ihrer Wachen nur auf unsichtbare Weise reagieren, sollten Sie auch Wachen in Betracht ziehen, die nur
Trigger einige der Zeit. Durch die Verwendung von Ausführungswahrscheinlichkeiten oder Zeitschwellenwerten oder Kombinationen von
Guard-Ausgänge können ein wenig Geheimnis darüber aufkommen lassen, was Ihre Anwendung tut. Verwenden Sie Manipulationsaktionen, die
Ändern Sie Ihren Code nur geringfügig, aber schützen Sie dennoch Ihre ursprüngliche Absicht.

Alles melden

Wenn Sie einige dieser subtilen Reaktionstechniken verwenden, ist es dennoch wichtig, jedes Manipulationsereignis zu melden an
App Aware. Diese wertvollen Daten können auf Muster untersucht werden, die Ihnen helfen können, Ihre Zukunft zu verbessern
Schutzmaßnahmen – insbesondere um dabei zu helfen, zwischen normalen Benutzern, Exploit-Entwicklern und Exploit-Benutzern zu unterscheiden.

Separate Wachnetzwerke

Bringen Sie das Konzept eines Schutznetzwerks auf die nächste Ebene. Verwenden Sie mehrere Schutznetzwerke, die unabhängig voneinander sind
voneinander, so dass, wenn ein Bedrohungsakteur ein Wachnetzwerk identifiziert, andere darauf warten
in den Kulissen, um den Angriff zu erkennen.

Verwenden Sie nicht zielgerichtete Wachen

Fügen Sie neben gezielten Schutzmaßnahmen auch Schutzmaßnahmen an ungewöhnlichen oder unwichtigen Stellen Ihrer Anwendung hinzu. Dies
verhindert, dass Ihr wichtigster und am stärksten geschützter Code zu sehr auffällt. Es kann auch
Fangen Sie Angriffe ab, die Sie beim Aufbau Ihres Schutzes nicht berücksichtigt haben. Dies ist ein weiterer Fall, in dem die tiefgreifende Verteidigung glänzt.

Erwartete Fehlerfälle einbeziehen

Wenn Sie eine Funktion haben, die eine Bedingung auswertet und dann zwischen dem Happy Path und dem
Unhappy Path: Ein Bedrohungsakteur könnte versuchen, die Auswertungsfunktion durch eine Funktion zu ersetzen, die immer
true. Wenn Sie dieser Funktion einen Aufruf mit Argumenten hinzufügen, die zu einem Fehlschlag führen sollten, der Aufruf aber trotzdem erfolgreich ist,
wissen, dass etwas falsch ist. Beachten Sie, dass diese sichere Programmierpraxis keine Anwendung erfordert
Schutz zu funktionieren. Das Hinzufügen und Schützen dieses Codes erhöht jedoch die Gesamtleistung Ihrer Anwendung
Daher werden beide empfohlen.

Threads strategisch einsetzen

Erwägen Sie, einige Ihrer Guards auf Hintergrund-Threads laufen zu lassen. Alles auf einem einzigen Thread laufen zu lassen
macht die Arbeit des Angreifers einfacher. Wenn ein Angreifer gezwungen wird, mehrere Threads zu beobachten, wird seine Arbeit schwieriger.

Vorsicht vor Threading-Problemen

Wenn Sie Guards oder andere Schutzmechanismen in Multithread-Code installieren (empfohlen!), achten Sie darauf, dass die
Funktionen, die Sie verwenden, sind Thread safeWenn ein Guard-Typ kein Thread ist safe out of the box, betrachten
Platzieren Sie alle Guards eines Typs auf einem Thread oder fügen Sie ein Mutex hinzu, um mehrere Threads zu synchronisieren.

Muster sorgfältig abgleichen

Wenn Sie reguläre Ausdrücke verwenden, um Aufruforte oder geschützte Bereiche zu identifizieren, überprüfen Sie sorgfältig Ihre
Schutzprotokolle regelmäßig, um sicherzustellen, dass Sie das erreichen, was Sie erwarten. Unbeabsichtigte
Overmatching kann Folgen haben wie starke Leistungseinbußen, extreme Code-Aufblähung und kann
sogar Fehler einführen. Verwenden Sie passende Funktionen, um Ihr Leben einfacher zu machen, nicht schwieriger, wenn Sie müssen
Debuggen Sie unklare Fehler.

Variieren Sie benutzerdefinierte Manipulationsreaktionsfunktionen

Eine weitere Möglichkeit, einzelne Fehlerquellen zu beseitigen, besteht darin, mehrere Manipulationsreaktionsfunktionen anstelle einer einzigen zu verwenden.
Geben Sie dem Angreifer mehr Arbeit, nicht weniger.

Verwenden Sie manipulationsfreie Reaktionen, um wichtige Dinge zu erledigen

Wenn Sie nur Manipulationsreaktionen verwenden, ist es für einen Angreifer einfacher, ganze Schutzvorrichtungen zu entfernen.
Operationen in nicht manipulierenden Reaktionen führen dazu, dass nichts Gutes passiert, wenn ein Angreifer einen Schutz entfernt.
Sie möchten, dass der Angreifer in jedem Fall ein Skalpell und keine Axt verwendet.

Verwenden Sie beschädigten und reparierten Code und Daten, wo
Möglich

Einige Plattformen, wie z. B. Windows, ermöglichen es Ihnen, Code zu beschädigen, zu reparieren und erneut zu beschädigen, um statische und
dynamische Analyse schwieriger. Wenn das mit Ihrer Plattform möglich ist, tun Sie es! Andere Plattformen, wie iOS, erlauben keine
Code ändern, aber Sie können immer noch Daten ändern. Auf restriktiven Plattformen sollten Sie die Beschädigung, Reparatur und
erneute Beschädigung von Daten, die Ihre Codeausführung steuern. Eine Switch-Anweisung, die sowohl echte als auch falsche
Code, der durch einen Datenwert ausgewählt wird, kann einen Teil des Schutzwertes bieten, den weniger restriktive
Plattformen.

Wählen Sie nach Möglichkeit gute Aufruforte

Wenn Sie Schutzprodukte verwenden, die die Angabe von Aufruforten erlauben, sollten Sie diese mischen. Lösen Sie nicht alle Ihre
Guards an einer Stelle. Setzen Sie einige Aufrufe bei Funktionsstarts. Setzen Sie einige Aufrufe innerhalb von Funktionen. Setzen Sie
einige Aufrufe beim Start. Setzen Sie einige Aufrufe in Abständen. Variationen können die Verwirrung erhöhen.

Wartungsgrundsätze

Intelligenteres Debuggen

Unsere Schutzprodukte verfügen über Funktionen, die beim Debuggen von Schutzzeit- und Laufzeitproblemen helfen. Überprüfen Sie
Weitere Einzelheiten finden Sie in der Dokumentation.

Hilfe Support Hilfe für Sie

Wenn Sie den Kundendienst um Hilfe bitten, geben Sie so viele Informationen wie möglich an, einschließlich Protokolle,
Guardspecs/Blueprints, ungeschützte Anwendungen, Debug-Informationen, Mapfiles, Schutzbefehle,
Versionen der verwendeten Schutzprodukte usw. Wenn man alles hat, was man braucht, um ein Problem zu reproduzieren, führt das immer dazu,
auf die schnellste Auflösung.

Kryptographieprinzipien

Verwenden Sie White-Box-Krypto

Wenn Ihre Anwendung sensible Daten verarbeitet, verwenden Sie hoffentlich bereits Kryptographie. Wenn
Sie liefern Schlüssel in Ihrer Anwendung, diese können oft mit einem der vielen Angriffstools gefunden und kopiert werden
zu diesem Zweck erstellt. Mit einer White-Box-Krypto-Lösung wie Digital.ai Schlüssel- und Datenschutz können
Stellen Sie sicher, dass Ihre Schlüssel niemals im Speicher vorhanden sind, während Ihre Anwendung weiterhin die erforderlichen
kryptografische Operationen.

Bei der White-Box-Kryptografie werden kanonische Schlüssel durch Code ersetzt, sodass sie nicht so leicht gefunden und gestohlen werden können.
Und obwohl Ihre Schlüssel eine andere Form haben, ermöglichen sie Ihrer Anwendung dennoch die Interaktion mit
Endpunkte, die normale kryptografische Implementierungen wie OpenSSL verwenden.

White-Box-Kryptographie schützt Ihre Schlüssel, da der äquivalente Code zum klassischen Schlüssel nicht umkehrbar ist
Format. Gleichzeitig Digital.ai Key & Data White-Box-Kryptographieschlüssel sind effektiv eng gebunden
zur statisch verknüpften White-Box-Algorithmus-Implementierung. Da diese White-Box-Kryptographie-Schlüssel
durch die Verknüpfung einer Ersatzbibliothek leicht rotiert werden können, erhalten Ihre Anwendungen zusätzliche Widerstandsfähigkeit gegen Bedrohungen
Schauspieler.

Gehen Sie sicher vorwärts!

Bedenken Sie, dass der Schutz von Anwendungen vor sich entwickelnden Bedrohungsakteuren eine dauerhafte Herausforderung ist.
Der kontinuierliche Katz-und-Maus-Zyklus zwischen Anwendungsbesitzern und böswilligen Akteuren erfordert, dass Sie
Bleiben Sie angesichts sich entwickelnder Bedrohungen proaktiv und anpassungsfähig. Digital.ai ist Ihr Partner in diesem Zyklus und
Wir ermutigen Sie, die von uns bereitgestellten Tools im Rahmen der in diesem Dokument beschriebenen Ratschläge zu verwenden, um
um Ihr Vermögen zu schützen. Im Zweifelsfall wenden Sie sich an uns! Wir sind für Sie da.