Schutz Ihrer Webanwendung: So schließen Sie sie vor Eingriffen Dritter

Bild

Von einem Übersetzer: Wir veröffentlichen für Sie einen Artikel von Jim Medlock, einem Programmierer und Softwarearchitekten. Medlock spricht über die grundlegenden Möglichkeiten zum Schutz Ihrer Anwendung oder Ihres Webdienstes. Es ist erwähnenswert, dass dieses Material wahrscheinlich für unerfahrene Programmierer nützlich ist. Wenn die Profis ihre Kommentare hinterlassen, sind alle dankbar.

Warum sollte sich jemand die Mühe machen, die App zu hacken? Ja, schon allein deshalb, weil es im Laufe der Zeit immer mehr Menschen gibt, die dies tun möchten. Dies sind "normale" Hacker, für die die Überwindung des Schutzes von jemandem von sportlichem Interesse ist, Cyberkriminelle, die Dienste und Websites gewinnbringend unterbrechen, Regierungsorganisationen.

In den letzten Monaten haben viele große Unternehmen die Nachrichten nach riesigen Informationslecks veröffentlicht. Darunter befinden sich Facebook und seine 50 Millionen gestohlenen Konten, die FIFA mit 3,4 TB Daten und 70 Millionen Dokumenten, Google mit 0,5 Millionen Konten und Marriott Hotels mit Daten von 427 Millionen Kunden des gesamten Netzwerks.

Skillbox empfiehlt: Zweijähriger Praktikumskurs "Ich bin ein PRO-Webentwickler . "

Wir erinnern Sie daran: Für alle Leser von „Habr“ - ein Rabatt von 10.000 Rubel bei der Anmeldung für einen Skillbox-Kurs mit dem Promo-Code „Habr“.


Quelle

Nicht nur die Anzahl der Hackerangriffe nimmt zu, sondern auch der Schaden, den Cyberkriminelle anrichten. Laut Experten beträgt die durchschnittliche Größe der direkten und indirekten Verluste, die durch Cyberkriminelle verursacht werden, 3,86 Millionen US-Dollar pro erfolgreichem Hack. Dies ist natürlich ein Durchschnitt des Marktes; reelle Zahlen variieren und so ziemlich.

Noch ein paar Statistiken. Schäden, die durch Cyberkriminelle verursacht werden, können anhand der folgenden Daten beurteilt werden:

  • $ 148 - der "Preis" eines gestohlenen Kontos;
  • 40 Millionen US-Dollar - für 1 Million Konten;
  • 350 Millionen US-Dollar - für 50 Millionen Konten.



Geld ist nicht das einzige Argument: Überlegen Sie, wie lange es dauern wird, bis alles in Ordnung ist.

Infrastruktursicherheit vs. Anwendungssicherheit




Die meisten Sicherheitsmaßnahmen zielen darauf ab, die Basis der IT-Infrastruktur wie Server, Speicher und Rechenzentrum zu schützen. Es ist notwendig, aber nicht nur sie müssen geschützt werden.

Sicherheitsmaßnahmen in Bezug auf die Anwendung selbst sind ebenfalls äußerst wichtig. Sie bieten eine ganze Reihe von Methoden zum Auffinden, Beheben und Verhindern der böswilligen Verwendung von Lücken in Ihrer Software. Es lohnt sich, diese hervorzuheben:

  • Codeüberprüfung durch Spezialisten für Informationssicherheit, wenn das Ziel ausschließlich darin besteht, nach Orten zu suchen, die im Hinblick auf die Cybersicherheit problematisch sind;
  • Blackbox-basierte Prüfung basierend auf der Arbeit mit der Anwendung;
  • Überprüfung der Anwendungsarchitektur vor dem Schreiben des Großteils des Codes;
  • die Verwendung automatischer Werkzeuge zur Bewertung des Schutzes;
  • Start von Kopfgeldprogrammen, mit denen Spezialisten von Drittanbietern Problembereiche finden können.

Die effektivsten Maßnahmen basieren auf dem Konzept der schichtweisen Sicherheit. In diesem Fall verwendet jedes der geschützten Elemente seine eigenen Werkzeuge.



Mit clientseitig können Sie nichts anfangen


Das Problem ist, dass Sie Ihr Projekt wahrscheinlich nicht auf der Benutzerseite schützen können. Moderne Browser sind trotz der Bemühungen ihrer Entwickler anfällig.

Bei Webdiensten ist die schwache Komponente des gesamten Systems der Schlüssel für die Autorisierung. Beispielsweise müssen Anwendungen, die die GitHub-API verwenden, die Tokenauthentifizierung unterstützen. Wenn der Täter den Schlüssel in die Hand bekommen kann, hat er auf GitHub Zugriff auf den Code und die Projekte des Opfers.

Für einen Frontend-Entwickler besteht die Gefahr, dass er sich der vollständigen Sicherheit seines Dienstes sicher sein kann, wenn Maßnahmen wie private Schlüssel und Token bereitgestellt werden. Das alles ist gut, aber die gleichen Browser sind ein schwaches Glied.

Ist es sicher, Sicherheitsdaten wie Schlüssel vom gesamten Projekt zu trennen?


In der Regel werden Umgebungsvariablen verwendet, um Daten in eine Datei zu extrahieren, z. B. .env. Ein weiterer Schritt besteht darin, den Namen solcher Dateien zu .gitignore hinzuzufügen, wodurch die Ausführung von Git-Push-Befehlen zum Hochladen in öffentliche Repositorys verhindert wird, in denen die Datei für alle geöffnet ist.



Das alles ist gut, aber .env-Dateien sind nicht verschlüsselt. Im Fall von Create React App können sie mit der Option Developer Tools im Browser im Verzeichnis build / static / js überprüft werden. Hier ist zum Beispiel, was wir finden, wenn wir 0.chunk.js untersuchen.



Wie Sie sehen, bietet dieser Ansatz keine besonderen Vorteile. In einigen Fällen ist es besser, wichtige Sicherheitselemente im Quellcode zu speichern. Es gibt ein weiteres attraktives Szenario, in dem die Codetrennung verwendet wird, um das Laden von Skripten mit Umgebungsvariablen zu verzögern, bis der Benutzer die Anwendung authentifiziert. Wenn der Client-Computer jedoch kompromittiert wird, funktioniert nichts - schließlich ist das Dateisystem für Eindringlinge zugänglich.

Lösung




Im Gegensatz zum Client-Teil können Serveranwendungen geschützt werden, damit wichtige Daten nicht in die Hände von Angreifern gelangen. Zu diesem Zweck können Sie Oauth verwenden, um eine zusätzliche Ebene für Authentifizierung und Zugriffskontrolle, Verschlüsselung und Protokolle wie HTTPS und TLS zu erhalten.



Das Dilemma der Sicherung von Anwendungsgeheimnissen kann durch die Implementierung einer serverseitigen API gelöst werden. Gleichzeitig fungiert es als Proxyserver, um die Clientanwendung von den von ihm verwendeten Dienstanbietern zu isolieren. Anstatt private Daten auf der Clientseite zur Authentifizierung im Dienst zu verwenden, authentifiziert sich die API von der Serveranwendung, führt Anforderungen aus und gibt die Ergebnisse erst dann an den Client zurück. Die privaten Schlüssel oder sonstigen Daten werden diesen unter keinen Umständen mitgeteilt.

Integrierter Ansatz




Ja, Komplexität besteht nicht nur aus Worten. Um den Benutzern Vertrauen in den zuverlässigen Schutz ihrer Daten zu geben, ist eine sorgfältige Planung sowie eine durchdachte Sicherheitsstrategie erforderlich, die auf einem umfassenden Schutz und der Liebe zum Detail basiert.

Es reicht nicht aus, sich auf „Technologieinseln“ zu verlassen. Es ist notwendig, alle Elemente miteinander zu verbinden, um zu verstehen, wie das gesamte System funktioniert.

Nur in diesem Fall ist die Anwendung oder der Dienst sicher.

Source: https://habr.com/ru/post/de433538/


All Articles