Inhaltsverzeichnis:
- Nehmen Sie keine Annahmen über Benutzereingaben vor.
- Fehlerhaft behandeln
- Ein Programmprotokoll verwalten
- Verfolgen Sie einen guten Entwicklungsprozess
- Implementierung einer guten Versionskontrolle
- Benutzer sicher authentifizieren
- Remote-Sitzungen verwalten
- Verschleiern Sie Ihren Code
- Signieren Sie Ihren Code mit einem digitalen Zertifikat
- Verwenden Sie eine sichere Verschlüsselung, wo immer nötig
Video: Jedes Spiel hacken und Mod Menü erstellen [Cheat Engine und Visual C#] BKhacks 2024
Als C ++ - Programmierer müssen Sie lernen, was Sie in Ihrem C ++ - Code tun sollten, um zu vermeiden, Programme zu schreiben, die anfällig für Hacker sind. Es werden auch Funktionen beschrieben, die Sie aktivieren können, wenn Ihr Betriebssystem sie unterstützt, z. B. Adressraum-Layout-Randomisierung (ASLR) und Datenausführungsverhinderung (Data Execution Prevention, DEP).
Nehmen Sie keine Annahmen über Benutzereingaben vor.
Der Tunnelblick des Programmierers ist während der frühen Entwicklungsphase in Ordnung. Irgendwann jedoch muss sich der Programmierer (oder, noch besser, ein anderer Programmierer, der nichts mit der Entwicklung des Codes zu tun hatte) zurücklehnen und das unmittelbare Problem vergessen. Sie muss sich fragen: "Wie wird dieses Programm auf illegale Eingabe reagieren? "
Hier einige Regeln zum Überprüfen der Eingabe:
-
Nehmen Sie keine Annahmen über die Länge der Eingabe vor.
-
Akzeptieren Sie in Ihren Puffern fester Länge (oder bei Verwendung von Puffern variabler Größe) nicht mehr Eingaben, als Sie Platz haben.
-
Überprüfen Sie den Bereich jedes numerischen Werts, um sicherzustellen, dass dies sinnvoll ist.
-
Suchen Sie nach Sonderzeichen, die von einem Hacker zum Einschleusen von Code verwendet werden können, und filtern Sie diese heraus.
-
Übergeben Sie keine Rohdaten an einen anderen Dienst, z. B. einen Datenbankserver.
Und führen Sie die gleichen Prüfungen für die von den Remote-Services zurückgegebenen Werte durch. Der Hacker befindet sich möglicherweise nicht auf der Eingabeseite, er kann sich auf der Antwortseite befinden.
Fehlerhaft behandeln
Ihr Programm sollte angemessen auf Fehler reagieren, die innerhalb des Programms auftreten. Wenn Ihr Aufruf einer Bibliotheksfunktion z. B. ein nullptr, zurückgibt, sollte das Programm dies erkennen und etwas Vernünftiges tun.
Vernünftig ist hier recht liberal zu verstehen. Das Programm muss nicht herumschnüffeln, um herauszufinden, warum die Funktion keine vernünftige Adresse zurückgegeben hat. Es könnte sein, dass die Anfrage wegen zu unangemessener Eingabe zu viel Speicher war. Oder es könnte sein, dass der Konstruktor irgendeine Art von illegaler Eingabe erkannt hat.
Es spielt keine Rolle. Der Punkt ist, dass das Programm seinen Zustand so gut wie möglich wiederherstellen und für das nächste Bit der Eingabe einrichten sollte, ohne vorhandene Datenstrukturen wie den Heap zu zerstören oder zu beschädigen.
Ein Programmprotokoll verwalten
Erstellen und verwalten Sie Laufzeitprotokolle, die es jemandem ermöglichen, zu rekonstruieren, was im Falle eines Sicherheitsfehlers passiert ist. (In der Tat gilt dies auch für alle Arten von Fehlern.) Zum Beispiel möchten Sie wahrscheinlich jedes Mal protokollieren, wenn sich jemand bei Ihrem System anmeldet oder aus ihm herausmeldet.
Sie möchten auf jeden Fall wissen, wer in Ihrem System angemeldet war, als ein Sicherheitsereignis eintrat - dies ist die Gruppe, die am meisten von einem Sicherheitsverlust bedroht ist und die am meisten misstrauisch ist, wenn sie nach Angeklagten sucht.Außerdem sollten Sie Systemfehler protokollieren, die die meisten Ausnahmen enthalten würden.
Ein reales Produktionsprogramm enthält eine große Anzahl von Aufrufen, die ungefähr wie folgt aussehen:
log (DEBUG, "Benutzer% s eingegebenes legales Passwort", sUser);
Dies ist nur ein Beispiel. Jedes Programm benötigt eine Art Protokollfunktion. Ob es tatsächlich log () genannt wird, ist unwesentlich.
Verfolgen Sie einen guten Entwicklungsprozess
Jedes Programm sollte einem durchdachten, formalen Entwicklungsprozess folgen. Dieser Prozess sollte mindestens die folgenden Schritte enthalten:
-
Anforderungen erfassen und dokumentieren, einschließlich Sicherheitsanforderungen.
-
Design überprüfen.
-
Befolgen Sie einen Codierungsstandard.
-
Unterwerfstest.
-
Führen Sie formale Abnahmeprüfungen durch, die auf den ursprünglichen Anforderungen basieren.
Darüber hinaus sollten Peer Reviews an Schlüsselpunkten durchgeführt werden, um zu verifizieren, dass die Anforderungen, das Design, der Code und die Testverfahren von hoher Qualität sind und Unternehmensstandards erfüllen.
Implementierung einer guten Versionskontrolle
Die Versionskontrolle ist eine seltsame Sache. Es ist natürlich, sich nicht um die Version 1. 1 zu kümmern, wenn Sie unter der Pistole sind, um Version 1. 0 aus der Tür und in die ausgestreckten Hände der wartenden Benutzer zu bekommen. Die Versionskontrolle ist jedoch ein wichtiges Thema, das frühzeitig angesprochen werden muss, da sie in das ursprüngliche Design des Programms eingebaut und nicht später verschraubt werden muss.
Ein fast trivialer Aspekt der Versionskontrolle besteht darin, zu wissen, welche Version des Programms ein Benutzer verwendet. Wenn ein Benutzer aufruft und sagt: "Das macht er, wenn ich darauf klicke", muss der Helpdesk wirklich wissen, welche Version des Programms der Benutzer verwendet. Er könnte ein Problem in seiner Version beschreiben, das bereits in der aktuellen Version behoben wurde.
Benutzer sicher authentifizieren
Die Benutzerauthentifizierung sollte unkompliziert sein: Der Benutzer stellt einen Kontonamen und ein Kennwort bereit, und Ihr Programm sucht den Kontonamen in einer Tabelle und vergleicht die Kennwörter. Stimmen die Passwörter überein, wird der Benutzer authentifiziert. Aber wenn es um Antihacking geht, ist nichts so einfach.
Speichern Sie die Kennwörter niemals selbst in der Datenbank. Dies wird als Speicherung im Klartext bezeichnet und gilt als sehr schlechte Form. Es ist viel zu einfach für einen Hacker, die Passwortdatei in die Finger zu bekommen. Speichern Sie stattdessen eine sichere Transformation des Passworts.
Remote-Sitzungen verwalten
Sie können bestimmte Annahmen treffen, wenn Ihre gesamte Anwendung auf einem einzelnen Computer ausgeführt wird. Zum einen müssen Sie sich, sobald sich der Benutzer authentifiziert hat, keine Sorgen darüber machen, dass er in eine andere Person umgewandelt wird. Anwendungen, die mit einem entfernten Server kommunizieren, können diese Annahme nicht treffen - ein Hacker, der auf der Leitung zuhört, kann warten, bis der Benutzer sich selbst authentifiziert und dann die Sitzung entführt.
Was kann der sicherheitsorientierte Programmierer tun, um diese Situation zu vermeiden? Sie möchten den Benutzer nicht wiederholt nach seinem Passwort fragen, nur um sicherzustellen, dass die Verbindung nicht gekapert wurde. Die alternative Lösung besteht darin, eine Sitzung einzurichten und zu verwalten. Dazu führen Sie aus, dass der Server der Remoteanwendung ein Sitzungscookie sendet, sobald sich der Benutzer erfolgreich authentifiziert hat.
Verschleiern Sie Ihren Code
Code-Verschleierung ist der Akt, die ausführbare Datei für einen Hacker so schwierig wie möglich zu machen.
Die Logik ist einfach. Je einfacher es für einen Hacker ist, zu verstehen, wie Ihr Code funktioniert, desto einfacher wird es für den Hacker sein, Schwachstellen zu erkennen.
Der einfachste Schritt, den Sie ergreifen können, ist sicherzustellen, dass Sie nur eine Release-Version Ihres Programms verteilen, die keine Debug-Symbolinformationen enthält. Wenn Sie die Projektdatei zum ersten Mal erstellen, achten Sie darauf, dass sowohl eine Debug- als auch eine Release-Version erstellt wird.
Verteilen Sie niemals Versionen Ihrer Anwendung mit enthaltenen Symbolinformationen.
Signieren Sie Ihren Code mit einem digitalen Zertifikat
Bei der Codesignierung wird ein sicherer Hash des ausführbaren Codes generiert und mit einem Zertifikat einer gültigen Zertifizierungsstelle kombiniert. Der Prozess funktioniert folgendermaßen: Die Firma, die das Programm erstellt, muss sich zuerst bei einer der Zertifizierungsstellen registrieren.
Sobald die Zertifizierungsstelle überzeugt ist, dass Meine Firma eine gültige Software-Entität ist, stellt sie ein Zertifikat aus. Dies ist eine lange Zahl, die jeder verwenden kann, um zu verifizieren, dass der Inhaber dieses Zertifikats die berühmte My Company of San Antonio ist.
Verwenden Sie eine sichere Verschlüsselung, wo immer nötig
Wie jede gute Warnung hat diese Ermahnung mehrere Teile. Erstens: "Verwenden Sie Verschlüsselung wo nötig. "Dies erinnert gewöhnlich an die Übermittlung von Bankkontoinformationen über das Internet, aber Sie sollten allgemeiner denken.
Daten, die über das Internet oder über einen kleineren Bereich übertragen werden, werden allgemein als Daten in Bewegung bezeichnet. Daten in Bewegung sollten verschlüsselt werden, es sei denn, sie wären für einen Hacker nicht von Nutzen.
Auf der Festplatte gespeicherte Daten werden als Daten im Ruhezustand bezeichnet. Diese Daten sollten auch verschlüsselt werden, wenn die Gefahr besteht, dass die Festplatte verloren geht, gestohlen oder kopiert wird. Unternehmen verschlüsseln routinemäßig die Festplatten auf ihren Firmenlaptops, falls ein Laptop am Sicherheitsscanner am Flughafen gestohlen oder irgendwo im Taxi gelassen wird.
Kleine tragbare Speichermedien wie USB-Sticks sind besonders anfällig dafür, verloren zu gehen - Daten auf diesen Geräten sollten verschlüsselt werden.