secure coding guidelines
In diesem Lernprogramm wird die sichere Codierung erläutert, wie sicherheitsrelevante Sicherheitslücken vermieden werden, und es werden Codierungsrichtlinien und eine Checkliste für sichere Codierungspraktiken bereitgestellt:
Um die Sicherheit in die Software zu integrieren und Richtlinien und Best Practices für die sichere Codierung zu implementieren, muss die gesamte Organisation zusammen mit dem Team, das für die beabsichtigte Anwendungsentwicklung identifiziert wurde, bestimmte Aspekte berücksichtigen.
Hier werden wir die Aspekte diskutieren, die zur Entwicklung einer gesicherten Software beitragen.
So einfach ist das, wenn ein Entwickler nicht weiß, was damit gemeint ist 'Sicherheit für die Software' und wie ein Hacker seine Software hacken, die Kontrolle darüber übernehmen und versuchen kann, sie auszunutzen, ist es einfach unmöglich, eine sichere Software zu codieren. Der Entwickler muss also zuerst die Bedeutung von Secure Coding verstehen.
Was du lernen wirst:
- Was ist sichere Codierung?
- Richtlinien für die sichere Codierung
- Checkliste für sichere Code-Praktiken
- Fazit
Was ist sichere Codierung?
Sichere Codierung ist das Entwerfen und Entwickeln von Software durch die Schwächen vermeiden Dies führt zu sicherheitsrelevanten Sicherheitslücken, indem die angegebenen Sicherheitsstandards und branchenüblichen Best Practices eingehalten werden.
Die allererste Frage, die sich in aller Munde stellt, ist 'Wie viel Sicherheit ist für unsere Software erforderlich?' oder Wann können wir sagen, dass unsere Software gesichert ist? und Was sind diese Sicherheitsstandards? ?
Betrug und Sicherheitsbedrohungen nehmen von Tag zu Tag zu und wir sehen neue Arten und Wege des Hackens, selbst in der sogenannten sichersten Software.
Kürzlich haben wir gehört, dass das Aaadhar-Programm von UIDAI für personenbezogene Daten manipuliert wurde. Daher ist es wirklich schwierig zu wissen, wie viel Sicherheit für die Software erforderlich ist und welche Sicherheitsstandards gelten, wenn wir die mit der Software verbundenen Bedrohungen nicht verstehen und sie anhand der Risiken für das Unternehmen priorisieren.
Es kann möglicherweise schwierig sein, der Software einen 100% igen Sicherheitsschutz zu bieten, aber wenn das Programmteam das analysiert Risiken und Wertpapiere die an ihrer Software beteiligt sind, d. h. potenzielle Bedrohungen, und wenn das Team sich um die Minderung dieser Risiken kümmern kann, wäre dies vom Sicherheitspunkt der Anwendung aus gut.
Daher besteht die allererste Aufgabe des Teams darin, die mit ihrer Anwendung verbundenen Risiken und Wertpapiere zu identifizieren und zu analysieren, die möglichen Minderungsoptionen zu verstehen und die beste Option entsprechend zu wählen.
Sobald die zehn häufigsten Sicherheitslücken identifiziert sind, klassifizieren sie fast alle Angriffe, denen ein Programm wahrscheinlich ausgesetzt ist. Dies wird dazu beitragen, die Bedrohungen zu verstehen und die Sicherheits- und Entwicklungsbemühungen eher auf Prävention als auf Minderung auszurichten.
World of Warcraft privater Server Vanille
Z.B. Während wir planen, eine App für das Gesundheitswesen zu entwickeln, die die Gesundheitsdaten der Person und ihre persönlichen Daten verarbeitet und speichert, besteht das größte Sicherheitsrisiko für die Anwendung darin, die persönlichen Gesundheitsdaten zu stehlen.
Risikominderung
Um das Risiko zu mindern,
- Die Implementierung der Sicherheit für den Zugriff auf Daten durch einen nicht autorisierten Benutzer muss mit der richtigen Authentifizierung und Autorisierung erfolgen (Implementierung starker Kennwortrichtlinien, 2-Faktor-Authentifizierung).
- Es muss darauf geachtet werden, dass während der Übertragung von Daten von einer Quelle zu einer anderen Quelle kein Datenleck auftritt, indem gesicherte Kanäle (HTTPS) für die Datenübertragung und die Datenverschlüsselung während der Übertragung implementiert werden.
- Eine weitere Möglichkeit ist das Manipulieren oder Stehlen von Daten in Ruhe. Daher ist die Speicherung persönlicher Gesundheitsdaten (mithilfe von Verschlüsselung) sehr wichtig.
Bevor Sie zum „Secure Coding Standard“ wechseln, ist es für das gesamte Programmteam immer besser, einen zu haben 'Security Awareness Session' und diskutieren und Brainstorming über,
- Das Sicherheitserfordernis für ihr spezifisches Produkt.
- Mögliche Vorteile, die ein Hacker durch das Hacken seines Systems hätte.
- Mögliche Mittel und Wege für Sicherheitskompromisse bei ihrer Anwendung.
- In einer ähnlichen Branche und Domäne wurden gängige Sicherheitspraktiken angewendet.
- Verständnis der typischen Sicherheitsprobleme ihrer jeweiligen Programme.
Es hilft dem Team auch, besser damit umzugehen, wenn es das versteht Quellen der Sicherheitslücken dass ihre Software konfrontiert werden kann und die Gründe, aus denen die Software erstellt wird Schlecht / unzureichend Sicherheit .
Gründe für eine unzureichende Sicherheitsimplementierung
Im Allgemeinen sind die folgenden Gründe für eine unzureichende Sicherheitsimplementierung in der Anwendung aufgeführt.
- Für Functional Release wird Vorrang vor Sicherheitsaspekten eingeräumt.
- Ignoranz oder kein Bewusstsein für Software-Sicherheit und Hacker.
- Nicht genügend Klarheit über das Programm oder das Software-Design selbst.
- Die Komplexität des Programms.
- Nicht genügend Daten, Informationen zum Live-System, auf dem sie bereitgestellt werden.
- Keine Berücksichtigung der Sicherheit in den SDLC-Phasen.
- Unzureichende Kenntnisse und Verständnis der Besonderheiten der in der Software verwendeten Sprache.
- Das Team und die Entwickler wissen nicht genug über die Richtlinien für die Sicherheitskodierung.
Wir wissen, dass nicht alle Entwickler und Tester die Sicherheit einer Anwendung kennen und möglicherweise nicht genau über Sicherheitslücken und Exploits informiert sind, insbesondere über die Anwendung, an der sie arbeiten würden. Im Allgemeinen sind sie vertraut mit: ‘Funktionsweise codieren’ Aber nicht alle wissen, wie man sicher codiert.
Daher ist es für die Organisation sehr wichtig, zunächst sichere Codierungspraktiken in ihre Software aufzunehmen 'Leute trainieren' . Daher ist es sehr wichtig, das Team in Aspekten der sicheren Codierung, der besten Sicherheitscodierungsmethoden und der korrekten Verwendung des Tools zu schulen.
Das wichtigste Konstruktionsprinzip der Software-Sicherheit ist ‘Implementieren Sie Security by Design and Default’ .
Richtlinien für die sichere Codierung
Um Sicherheit zu erreichen, ist es sehr wichtig, eine 'Secure Coding Standard' Dies wurde dem Team zu Beginn der Anwendungsentwicklung für ein Programm identifiziert. Dies hilft dem Team, sich um die sicheren Standardeinstellungen für die Software zu kümmern und sie vor Angriffen zu schützen.
Es ist wichtig sicherzustellen, dass das gesamte Team ist Erzwungen, diesen Standard einzuhalten , unabhängig von der Codierungssprache und den Tools, die sie im Programm verwenden.
Im Folgenden sind einige Beispiele aufgeführt, die standardmäßig im Design für sicheren Code implementiert werden müssen:
- Der Zugriff sollte nur auf authentifizierte Benutzer beschränkt sein, und die Authentifizierung muss auf jeder Ebene implementiert werden.
- Die Kommunikationskanäle müssen verschlüsselt werden, um Authentifizierungstoken zu schützen.
- Alle Schlüssel, Passwörter und Zertifikate müssen ordnungsgemäß gespeichert und geschützt werden.
- Dateiverschlüsselung, Datenbankverschlüsselung und Datenelementverschlüsselung müssen implementiert werden.
Sprachauswahl für sichere Codierung
Die Sprachauswahl für die Codierung hängt möglicherweise nicht von der sicheren Codierung ab. Es gibt nichts Spezielles als gesicherte oder ungesicherte Sprache für die Codierung zum Erstellen einer gesicherten Software.
Es ist nur so, wie wir eine Programmiersprache verwenden, um die Software zu erstellen, und wie viel fundiertes Wissen der Entwickler über die Codierungssprache bei der Implementierung von Sicherheitsaspekten hat.
Es wird jedoch klargestellt, dass Secure Coding-Standards sind unabhängig von der Auswahl der Sprache. Die Best Practices für Secure Code sind sprachabhängig, plattformabhängig und implementierungsabhängig .
Um einen sicheren Code zu haben, muss der Entwickler über fundierte Kenntnisse der Sprache verfügen, die im Programm verwendet wird, damit die Best Practices für die Sicherheit problemlos implementiert werden können.
Der einfachste Weg, die Werte in einem Array hinzuzufügen, ist die Verwendung
Beispiel:
- Die Wahrscheinlichkeit einer Sicherheitsanfälligkeit durch Pufferüberlauf ist von Sprache zu Sprache unterschiedlich. C, C ++ und Assembly gelten jedoch aufgrund ihrer veralteten Speicherverwaltungsfunktionen als am anfälligsten. Einige Standardfunktionen von C lib, wie strcpy () und memcpy (), sind anfällig für Pufferüberlaufangriffe. Die falsche Verwendung dieser Funktionen durch Kopieren eines Quellpuffers, der zu groß ist, um in den Zielpuffer zu passen, führt zu einem Pufferüberlauf.
- Das häufigste Problem bei Java-basierten Webanwendungen sind mögliche Ressourcenlecks, die aufgrund offener Systemressourcen wie Datei-, Socket- und Datenbankverbindungen auftreten können.
Der nächste Aspekt der Sicherheit betrifft die zu verwendende Werkzeuge im Anwendungsprogramm zur Optimierung der Sicherheit mit Tools wie Integrierte Entwicklungsumgebungen wird am vorteilhaftesten sein, da sie viel bieten Warnungen an die Benutzer und machen Sie auf diese Warnungen aufmerksam, um die Qualität der Software zu verbessern.
- Die Integration von kommerziellen oder Open-Source-Bibliotheken / Plugins wie Eclipse, Spring Tool Suite und RAD in IDE hilft den Entwicklern beim Schreiben von sicherem Code, indem potenziell anfälliger Code erkannt und identifiziert wird, und bietet Warnungen zu Ergebnissen im Zusammenhang mit der Ausführung böswilliger Dateien, Informationslecks und unsachgemäße Fehlerbehandlung.
Es ist auch wichtig, die zu verwenden Statische und dynamische Analysatoren um die Sicherheitsaspekte der Software zu verbessern. Im Allgemeinen sind statische Analysegeräte für bestimmte Fehlertypen optimiert, sodass sie eine große Anzahl von Fehlalarmen finden und bestimmte Fehler identifizieren. Manchmal gibt es Möglichkeiten, dass sie auch die tatsächlichen Fehler übersehen.
Daher wird empfohlen, zu verwenden mehrere statische Analysatoren um eine bessere Abdeckung verschiedener Arten von Fehlern zu erhalten und viele Fehlalarme zu vermeiden. Manchmal wird auch empfohlen, durchzuführen manuelle Prüfung zu Beseitigen Sie Fehlalarme .
Sichere Codierungsregeln und Empfehlungen
Es ist gut für das Programm, eine Reihe von zu definieren ‘Regeln und Empfehlungen für die sichere Codierung’ zu dem der Quellcode auf Konformität ausgewertet werden kann, damit die Tester das durchführen können ‘Konformitätstests’ für jeden dieser sicheren Codierungsstandards.
Daher kann der Sicherheitscode unter Verwendung dieser Regeln anhand des festgelegten Benchmarks als konform oder nicht konform zertifiziert werden.
Nur wenige der unten genannten Regeln können zur Überprüfung auf Sicherheitsverletzungen verwendet werden:
- Dateien müssen geschlossen werden, wenn sie nicht mehr benötigt werden.
- Immer wenn eine Struktur über eine Grenze geführt wird, muss ein Informationsverlust vermieden werden.
- Objekte sollten mit angemessener Lagerdauer deklariert werden.
Daher müssen Testfälle zur Überprüfung dieser Regeln entworfen und durchgeführt werden, um die Konformitätskonformität zu überprüfen. Es wird auch festgestellt, dass die meisten Sicherheitslücken durch typische häufige Programmierfehler verursacht werden.
Daher muss der Entwickler verstehen ‘Unsichere Codierungsmethode’ Außerdem lernen sie die Best Practices der sicheren Codierung. Es ist ideal, die häufigsten Programmierfehler zu erfassen, die zu den Sicherheitslücken ihrer Anwendung beitragen, damit sie beim Codieren behoben werden können.
Solche typischen Programmierfehler sind hauptsächlich auf Pufferüberläufe, Cross-Site-Scripting und Injektionsfehler zurückzuführen.
Einige der typischen Programmierschwachstellen sind:
- SQL Injection (Unsachgemäße Neutralisierung spezieller Elemente, die in einem SQL-Befehl verwendet werden).
- Ganzzahliger Überlauf.
- Pufferüberlauf (Pufferkopie ohne Überprüfung der Eingangsgröße).
- Unkontrollierte Formatzeichenfolge.
- Fehlende Authentifizierung und Autorisierung (falsche Autorisierung).
- Sensible Datenexposition.
- Unsachgemäße Fehlerbehandlung.
Einige dieser Fehler können zu einem Systemabsturz, einem unerwarteten Zugriff auf das System und dem Verlust der Kontrolle über die Software für die Hacker führen.
Häufige Programmierfehler, die vermieden werden müssen
Nachfolgend sind einige häufige Programmierfehler aufgeführt, die vermieden werden müssen:
- Unsachgemäße Neutralisierung spezieller Elemente, die in einem SQL-Befehl verwendet werden („SQL Injection“).
- Pufferkopie ohne Überprüfung der Eingangsgröße („Klassischer Pufferüberlauf“).
- Fehlende Authentifizierung für kritische Funktion.
- Fehlende oder falsche Autorisierung.
- Verwendung von fest codierten Anmeldeinformationen.
- Fehlende Verschlüsselung sensibler Daten.
- Uneingeschränktes Hochladen von Dateien mit gefährlichem Typ.
- Vertrauen auf nicht vertrauenswürdige Eingaben in einer Sicherheitsentscheidung.
- Ausführung mit unnötigen Berechtigungen.
- Cross-Site Request Forgery (CSRF).
- Herunterladen von Code ohne Integritätsprüfung.
- Falsche Berechnung der Puffergröße.
- Unsachgemäße Einschränkung übermäßiger Authentifizierungsversuche.
- URL-Umleitung zu nicht vertrauenswürdiger Site ('Open Redirect').
- Unkontrollierte Formatzeichenfolge.
- Verwendung eines Einweg-Hash ohne Salz.
Checkliste für sichere Code-Praktiken
Last but not least müssen die Entwickler nach Berücksichtigung aller oben genannten Punkte der Aspekte der sicheren Softwareentwicklung die folgenden Punkte befolgen Checkliste für die Secure Code Practices erstellt um sicherzustellen, dass die Dinge nicht verpasst werden. Nachstehend sind einige aufgeführt, jedoch keine vollständige Liste.
Eingabevalidierung:
- Vertrauen Sie keinen Eingaben, sondern berücksichtigen Sie eine zentralisierte Eingabevalidierung.
- Verlassen Sie sich nicht auf die clientseitige Validierung.
- Seien Sie vorsichtig bei Kanonisierungsproblemen.
- Eingaben einschränken, ablehnen und bereinigen. Überprüfen Sie Typ, Länge, Format und Bereich.
Authentifizierung:
- Partitionssite nach anonymem, identifiziertem und authentifiziertem Bereich.
- Verwenden Sie sichere Passwörter.
- Unterstützt Ablaufzeiten für Kennwörter und die Deaktivierung des Kontos.
- Speichern Sie keine Anmeldeinformationen (verwenden Sie Einweg-Hashes mit Salz).
- Verschlüsseln Sie Kommunikationskanäle, um Authentifizierungstoken zu schützen.
- Übergeben Sie Formularauthentifizierungscookies nur über HTTPS-Verbindungen.
Genehmigung:
- Verwenden Sie Konten mit den geringsten Berechtigungen.
- Berücksichtigen Sie die Berechtigungsgranularität.
- Erzwingen Sie die Trennung von Berechtigungen.
- Beschränken Sie den Benutzerzugriff auf Ressourcen auf Systemebene.
- Verwenden Sie das OAuth 2.0-Protokoll für die Authentifizierung und Autorisierung.
- Carryout-API-Validierung.
- Zulässige Whitelist-Methoden.
- Schützen Sie privilegierte Aktionen und vertrauliche Ressourcensammlungen.
- Schutz vor Cross-Site Resource Forgery (CSRF).
Sitzungsverwaltung:
- Erstellen Sie eine Sitzungskennung auf dem Server.
- Beenden Sie die Sitzung mit der Abmeldung.
- Generieren Sie bei der erneuten Authentifizierung eine neue Sitzung.
- Legen Sie das Attribut 'sicher' für Cookies fest, die über TLS übertragen werden.
Kryptographie:
- Verwenden Sie die Kryptografie unter 'Daten während der Übertragung, Daten im Speicher, Daten in Bewegung, Nachrichtenintegrität'.
- Entwickle keine eigenen. Verwenden Sie bewährte Plattformfunktionen.
- Halten Sie unverschlüsselte Daten in der Nähe des Algorithmus.
- Verwenden Sie den richtigen Algorithmus und die richtige Schlüsselgröße.
- Vermeiden Sie die Schlüsselverwaltung (verwenden Sie DPAPI).
- Wechseln Sie Ihre Schlüssel regelmäßig.
- Bewahren Sie Schlüssel an einem eingeschränkten Ort auf.
Protokollierung und Überwachung:
- Identifizieren Sie böswilliges Verhalten.
- Wissen, wie guter Verkehr aussieht.
- Überwachen und protokollieren Sie Aktivitäten über alle Anwendungsebenen hinweg.
- Sicherer Zugriff auf Protokolldateien.
- Sichern und analysieren Sie regelmäßig die Protokolldateien.
Ausgabecodierung:
- Führen Sie die Eingabevalidierung durch (XML, JSON….).
- Verwenden Sie die parametrisierte Abfrage.
- Führen Sie die Schemaüberprüfung durch.
- Codierung durchführen (XML, JSON ..).
- Sicherheitskopfzeilen senden.
Referenz: ' OWASP-Checkliste für sichere Codierungspraktiken (Kurz gesagt, SCP-Checkliste) '
So zeigen Sie SWF-Dateien an
Tabellarische Zusammenfassung der Checkliste für die sichere Codierung
Die folgende Tabelle fasst die ‘Dinge, die Sie für sicheren Code beachten sollten’ einer Anwendung.
# | Was? |
---|---|
7 | Um sicherzustellen, dass das gesamte Team den Secure Coding Standard einhalten muss. |
1 | Um klar zu verstehen, was ist sicherer Code? |
zwei | Die gemeinsamen „Quellen der Sicherheitslücken“ verstehen. |
3 | Durchführung einer „Sicherheitsbewusstseins-Sitzung“ für das Team. |
4 | Identifizierung und Analyse von „Risiken und Wertpapieren“, die mit der Anwendung und den Methoden zur „Minderung“ verbunden sind. |
5 | Schulung des Teams in Bezug auf sichere Codierungsstandards, Best Practices und Richtlinien. |
6 | Definieren des 'Secure Coding Standard' |
8 | Verwendung der einfach zu implementierenden Sprache und vertiefte Kenntnisse. |
9 | Verwendung von IDE-Tools (Integrated Development Environment) |
10 | Verwendung von 'statischen und dynamischen Analysatoren' und 'mehreren statischen Analysatoren', um 'False Positives' zu eliminieren |
elf | Um „manuelle Tests“ durchzuführen, wo immer dies zur Identifizierung des Fehlers erforderlich ist, verpassen Sie diese. |
12 | Definieren einer Reihe von Regeln und Empfehlungen für die sichere Codierung |
13 | Durchführung von Konformitätstests für die festgelegten Regeln. |
14 | Um die 'unsichere Codierungsmethode' zu verstehen und 'häufige Programmierfehler' zu sammeln. |
fünfzehn | Um die „SCP-Checkliste“ genau zu befolgen |
Fazit
Wir hoffen, dass dieses Tutorial Ihr bester Leitfaden für die Gewährleistung der Software-Sicherheit ist.
Die Codierungsrichtlinien für die sichere Softwareentwicklung wurden hier in einfachen Worten mit Beispielen für Ihr einfaches Verständnis des Konzepts aufgeführt.
Fröhliches Lesen!!
Literatur-Empfehlungen
- Sicherheitstests (eine vollständige Anleitung)
- Top 30 der besten Cyber-Sicherheitsunternehmen im Jahr 2021 (kleine bis Unternehmen)
- Grundlagen der Computerprogrammierung für Anfänger Codierungs-Tutorial
- Top 15 der besten kostenlosen Code-Editoren für ein perfektes Codierungserlebnis
- Tutorial zum Testen von SQL-Injektionen (Beispiel und Verhinderung von SQL-Injektionsangriffen)
- Entwickler sind keine guten Tester. Was du sagst?
- ISTQB Foundation Prüfungsformat und Richtlinien zum Lösen von Papieren
- Richtlinien für Sicherheitstests für mobile Apps