C ++ Programmierung: 10 Anti-Hacker-Tipps

Als C ++ Programmierer, müssen Sie die Dinge zu lernen, die Sie in Ihrem C ++ Code Schreiben von Programmen tun sollten, zu vermeiden, die für Hacker anfällig sind. Es gibt auch Funktionen beschrieben, die Sie aktivieren können, wenn Ihr Betriebssystem sie unterstützt, wie Address Space Layout Randomization (ASLR) und Data Execution Prevention (DEP).

Don # 8242-t machen Annahmen über Benutzereingaben

Programmer # 8242-s Tunnelblick ist während der frühen Entwicklungsphase in Ordnung. An einem gewissen Punkt, der Programmierer jedoch (oder, besser noch, ein anderer Programmierer, der nichts mit der Entwicklung des Codes zu tun hatte) muss sich zurücklehnen und über das unmittelbare Problem zu vergessen. Sie braucht sich zu fragen, # 147-Wie wird dieses Programm reagiert auf die illegale Eingabe # 148?;

Hier sind einige der Regeln für die Überprüfung Eingang:

  • Machen keine Annahmen über die Länge der Eingabe.

  • Don # 8242-t mehr Eingang akzeptieren, als Sie Raum für Ihre fester Länge Puffer (oder verwendet variabler Größe Puffer).

  • Überprüfen Sie die Reichweite eines jeden numerischen Wert, um sicherzustellen, dass es Sinn macht.

  • Prüfen und herauszufiltern Sonderzeichen, die von einem Hacker verwendet werden kann, Code zu injizieren.

  • Don # 8242-t Pass Roh-Eingangs auf einen anderen Dienst, wie ein Datenbankserver.

Und führen alle die gleichen Prüfungen auf die von Remote-Services zurückgegebenen Werte. Der Hacker kann nicht auf der Eingangsseite ist, er auf der Antwortseite sein kann.

Griff Fehler Anmutig

Ihr Programm sollte vernünftigerweise auf Fehler reagieren, die innerhalb des Programms auftreten. Zum Beispiel, wenn Ihr Anruf an eine Bibliothek Funktion liefert ein nullptr, das Programm sollte dies erkennen und sinnvoll, etwas zu tun.

angemessen hier ist ziemlich großzügig zu verstehen. Das Programm muss nicht zum Schnuppern, genau herauszufinden, warum die Funktion didn # 8242-t eine angemessene Adresse zurück. Es könnte sein, dass der Antrag auf viel zu viel Speicher war wegen unverhältnismäßiger Eingang. Oder es könnte sein, dass der Konstruktor irgendeine Art von illegalen Eingang erkannt.

Es spielt keine # 8242-t Angelegenheit. Der Punkt ist, dass das Programm seinen Zustand wieder herzustellen, so gut es und für das nächste Bit von Eingangs einrichten können ohne Absturz oder eine Beschädigung der vorhandenen Datenstrukturen wie dem Heap.

Pflegen Sie ein Programmprotokoll

Erstellen und Verwalten von Runtime-Protokolle, die jemand erlauben zu rekonstruieren, was im Falle eines Sicherheits Scheitern passiert ist. (Eigentlich ist ebenso wahr im Falle jeglicher Art von Fehler.) Zum Beispiel, haben Sie wahrscheinlich jedes Mal, wenn jemand Zeichen in das oder aus dem System anmelden möchten.

Sie # 8242-ll wollen auf jeden Fall wissen, wer in Ihrem System angemeldet wurde, wenn ein Sicherheitsereignis aufgetreten - das ist die Gruppe, die # 8242-s am meisten gefährdet eines Sicherheitsverlust und die meisten verdächtig sind, wenn sie nach Schuldigen suchen. Darüber hinaus können Sie # 8242-ll wollen keine Systemfehler zu protokollieren, die die meisten Ausnahmen umfassen würde.

Eine reale Produktionsprogramm enthält eine große Anzahl von Anrufen, die in etwa wie folgt aussehen:

log (DEBUG, sUser "Benutzer% s Rechts Passwort eingegeben") -

Dies ist nur ein Beispiel. Jedes Programm wird irgendeine Art von Log-Funktion benötigen. Unabhängig davon, ob es # 8242-s tatsächlich aufgerufen Log() ist unwesentlich.

Folgen Sie einen guten Entwicklungsprozess

Jedes Programm sollte gut durchdacht, formale Entwicklungsprozess folgen. Dieser Prozess sollte zumindest die folgenden Schritte umfassen:

  • Sammeln und Dokumenten-Anforderungen, einschließlich der Sicherheitsanforderungen.

  • Bewertung Design.

  • Halten Sie sich an einem Codierungsstandard.

  • Unterziehen Sie Unit-Test.

  • Führen formale Akzeptanztests, die auf den ursprünglichen Anforderungen basieren.

Darüber hinaus Peer Reviews sollten an Schlüsselpunkten durchgeführt werden, um sicherzustellen, dass die Anforderungen, Design, Code und Testverfahren hoher Qualität und Unternehmensstandards entsprechen.

Implementieren Sie eine gute Versionskontrolle

Die Versionskontrolle ist eine seltsame Sache. Es # 8242-s natürlich nicht über die Version 1.1, wenn Sie # 8242-re unter der Pistole zu sorgen Version 1.0 aus der Tür zu bekommen und in die wartenden Benutzer # 8242- ausgestreckten Händen. Allerdings ist die Versionskontrolle ein wichtiges Thema, das frühzeitig angesprochen werden müssen, weil sie in das Programm # 8242-s ursprünglichen Entwurf und nicht verschraubt später gebaut werden müssen.

Eine fast triviale Aspekt der Versionskontrolle ist, zu wissen, welche Version des Programms ein Benutzer verwendet. Wenn ein Benutzer anruft und sagt, # 147-Es tut dies, wenn ich auf das klicken, # 148- die Help-Desk muss wirklich wissen, welche Version des Programms der Benutzer verwendet. Er konnte ein Problem in seiner Version sein beschreibt, die # 8242-s bereits in der aktuellen Version behoben.

Authentifizieren von Benutzern sicher

Die Benutzerauthentifizierung sollte einfach sein: Der Benutzer gibt einen Kontonamen und ein Kennwort ein, und Ihr Programm sieht den Kontonamen in einer Tabelle und vergleicht die Passwörter. Wenn die Kennwörter übereinstimmen, wird der Benutzer authentifiziert. Aber wenn es um antihacking kommt, ist nichts so einfach.

Zunächst speichern nie die sich Passwörter in der Datenbank. Dies nennt man sie speichern in der klaren und wird als sehr schlecht angesehen. Es # 8242-s viel zu einfach für ein Hacker seine Hände auf die Passwort-Datei zu erhalten. Stattdessen sparen Sie ein sicheres Passwort des zu transformieren.

Verwalten Remote-Sitzungen

Sie können bestimmte Annahmen getroffen werden, wenn alle Ihre Anwendung auf einem einzigen Computer ausgeführt wird. Für eine Sache, sobald sich der Benutzer authentifiziert hat, Sie # 8242-t Grund zur Sorge über ihn in eine andere Person don verwandelt. Anwendungen, die mit einem Remote-Server kommunizieren kann, # 8242-t diese Annahme zu machen - ein Hacker, der auf der Linie hört kann warten, bis sich der Benutzer authentifiziert und dann die Sitzung kapern.

Was kann das sicherheitsbewusste Programmierer tun, um diese Situation zu vermeiden? Sie don # 8242-t möchten für sein Passwort der Benutzer immer wieder zu fragen, nur um sicher zu stellen, dass die Verbindung hasn # 8242-t entführt worden. Die alternative Lösung ist ein einzurichten und zu verwalten Session. Sie tun dies der Server dem Remote-Anwendung ein Session-Cookie senden, indem er, sobald der Benutzer sich erfolgreich authentifiziert hat.

Obfuscate Code

Code-Verschleierung ist die Handlung, die ausführbare Datei als schwierig für einen Hacker wie möglich zu verstehen zu machen.

Die Logik ist einfach. Je einfacher es für einen Hacker zu verstehen, wie Ihr Code funktioniert, desto leichter wird es für den Hacker Schwachstellen herauszufinden.

Die Single einfachste Schritt, den Sie machen können, ist sicher zu stellen, dass Sie immer nur eine Release-Version des Programms verteilen, die nicht Debug-Symbolinformationen enthält. Wenn Sie zuerst die Projektdatei zu erstellen, sollten Sie wählen, dass sowohl ein Debug und eine veröffentlichte Version erstellt werden soll.

Nie, nie, verteilen Versionen Ihrer Anwendung mit Symbolinformationen enthalten.

Melden Sie Ihren Code mit einem digitalen Zertifikat

Code Signing-Werke durch einen sicheren Hash des ausführbaren Code zu erzeugen und sie mit einem Zertifikat, ausgestellt von einer gültigen Zertifizierungsstelle kombiniert. Das Verfahren funktioniert wie folgt: Das Unternehmen, das Programm erstellen, müssen zunächst selbst Behörden mit einem der Zertifikat registrieren.

Sobald die Zertifizierungsstelle ist davon überzeugt, dass meine Firma eine gültige Software-Einheit ist, gibt es ein Zertifikat. Dies ist eine lange Zahl, die jeder benutzen kann, um zu überprüfen, dass der Inhaber dieses Zertifikates ist die berühmte My Company von San Antonio.

Benutzen Sie eine sichere Verschlüsselung, wo immer notwendig

Wie jeder gute Warnung, hat diese Mahnung mehrere Teile. Zuerst, # 147-Verschlüsselung verwenden, wo immer nötig. # 148- Dieser neigt dazu zu bringen, Gedanken zu kümmern Bankkontoinformationen über das Internet kommunizieren, aber man sollte denken weiter als der.

Daten, die # 8242-s übermittelt werden, ob über das Internet oder über ein kleiner Bereich, ist allgemein bekannt als Daten in Motion. Daten in Motion sollten verschlüsselt werden, wenn es nicht von Nutzen zu einem Hacker wäre.

Daten auf der Platte gespeichert ist bekannt als Daten im Ruhezustand. Diese Daten sollten verschlüsselt werden, wenn es eine Chance der Scheibe verloren gehen, gestohlen oder kopiert. Unternehmen routinemäßig die Festplatten auf ihre Firmenlaptops im Falle verschlüsseln ein Laptop auf dem Sicherheitsscanner auf dem Flughafen oder nach links in ein Taxi irgendwo gestohlen wird.

Kleine tragbare Speichermedien wie USB-Sticks sind besonders anfällig für verloren - Daten auf diesen Geräten verschlüsselt werden soll.

Menü