Gehen Sie einen schnelleren, intelligenteren Weg zur KI-gestützten C/C++-Testautomatisierung. Erfahren Sie mehr >>
Sichere Codierungsstandards: Durchsetzung sicherer Codierungspraktiken mit SAST
Sichere Codierungsstandards sind Regeln und Richtlinien, die dabei helfen, effiziente Codierungsstandards aufrechtzuerhalten, um Sicherheitslücken zu vermeiden. Hier behandeln wir, wie die Implementierung von SAST Ihnen helfen kann, sichere Codierungsstandards durchzusetzen und aufrechtzuerhalten.
Sichere Codierungsstandards sind Regeln und Richtlinien, die dabei helfen, effiziente Codierungsstandards aufrechtzuerhalten, um Sicherheitslücken zu vermeiden. Hier behandeln wir, wie die Implementierung von SAST Ihnen helfen kann, sichere Codierungsstandards durchzusetzen und aufrechtzuerhalten.
Wenn Entwicklungsteams bei der Entwicklung von Software sichere Codierungsstandards verwenden, führt dies zu weniger Sicherheitslücken und letztendlich zu einer besseren Qualität, was zu einem robusteren Erlebnis für Entwickler und Benutzer gleichermaßen führt. In diesem Blog gehen wir auf die Grundlagen sicherer Codierungsstandards, Best Practices und deren Verwendung ein.
Sichere Codierung bedeutet, dass Entwickler eine Reihe von Codierungsstandards oder sicheren Codierungsrichtlinien anwenden, die sie im Quellcode implementieren, um häufige Schwachstellen zu verhindern und zu mindern, die häufig zu Cyberangriffen führen. Die Implementierung sicherer Codierungspraktiken im Code ist die erste Verteidigungslinie, die vor böswilligen Akteuren schützt, die Software ausnutzen, und Angriffsflächen beseitigt, auf die Angreifer häufig mit Malware abzielen. Wenn Unternehmen sich strikt an Best Practices für sichere Codierung halten, können sie die Kosten für die Wartung von Software senken und Entwickler können mehr Zeit für Innovationen aufwenden, anstatt Zeit für Fehlerbehebungen aufzuwenden.
Sichere Codierungspraktiken stellen sicher, dass Sicherheitskontrollen in den Code implementiert werden, um Sicherheitsprobleme zu reduzieren, die durch schlecht entwickelten Code entstehen können. Es ist zwingend erforderlich, dass Organisationen sichere Codierungspraktiken formalisieren, um einen Mindestsatz an Softwaresicherheitsstandards dafür festzulegen, wie Entwickler Code schreiben sollten, die die Organisation mit automatisierter statischer Analyse durchsetzen und validieren kann Statische Anwendungssicherheitstests (SAST) Werkzeuge. Diese Tools verwenden Regeln und Checker, die Quellcode auf Syntaxverletzungen, undefinierte Variablen, Codequalität, Codierungs- und Sicherheitsverletzungen sowie Programmierfehler (um nur einige zu nennen) analysieren.
Die statischen Analysetools von Parasoft verwenden sichere Codierungsstandards wie CERT Codierungsstandards, OWASP Top 10 (Teil der OWASP Secure Coding Guidelines), MITRE Common Weakness Enumeration (CWE), Und DISA Anwendungssicherheit und Entwicklung STIGS in Regeln und Checkern wie in Tabelle 1 gezeigt.
| Codierungsstandardname | Instandgehalten von | Zweckzusammenfassung |
|---|---|---|
| CERT (Computer Emergency Response Team) | CERT-Koordinierungszentrum | Richtlinien, die Entwicklern helfen, Fehler während der Codierung und Implementierung zu vermeiden und auch Fehler auf niedriger Ebene im Design zu erkennen. |
| OWASP Top Ten | OWASP-Stiftung (Open Web Application Security Project). | Webanwendungs- und Softwareentwickler verwenden diese Standards, um Hochsicherheitsrisiken in Webanwendungen zu erkennen und zu beheben. |
| CWE (Common Weakness Enumeration) | Gemeinschaft entwickelt und gepflegt. | Dies ist ein Kategoriensystem, das Entwicklern hilft, Schwachstellen und Schwächen in Software zu identifizieren und ihnen hilft, Softwarefehler zu verstehen. Entwickler verwenden das System auch, um Tools zu entwickeln, um Fehler zu beheben und zu verhindern. |
| DISA Anwendungssicherheit und Entwicklung STIGS | Defense Information Systems Agency (DISA) und Abteilung des US-Verteidigungsministeriums. | Hilft Managern, Designern, Entwicklern und Systemadministratoren bei der Entwicklung und Pflege von Sicherheitskontrollen in Anwendungen und Anwendungsentwicklung. |
Entwickler müssen sich der Konsequenzen ihrer Codierungs- und Refactoring-Aktivitäten beim Erstellen und Aufdecken von Schwachstellen in Software bewusst sein. Im Folgenden sind einige häufige Fehler aufgeführt, die schief gehen können, wenn Entwickler sichere Codierungspraktiken nicht befolgen und verwenden. Wir verfolgen Best Practices zur Minderung und Behebung dieser Sicherheitsprobleme.
Dies geschieht, wenn ein Angreifer auf unsichere Weise Eingaben in eine SQL-Abfrage einfügt, oft über eine einfache String-Kette. SQL-Injection ist ein hochgefährliches Sicherheitsrisiko für Anwendungen, da es relativ leicht zu missbrauchen ist und dazu führen kann, dass der Angreifer die gesamte Datenbank ändert, bereinigt oder stiehlt. Die Angreifer können die Anwendung auch verwenden, um gefährliche Befehle auf dem Betriebssystem auszuführen, das die Datenbank hostet, wodurch sie Zugang zu Ihrem Netzwerk erhalten.
Entwickler implementieren häufig Anwendungsaufgaben im Zusammenhang mit der Sitzungsverwaltung und -authentifizierung falsch. Auf diese Weise können Angreifer Schlüssel, Passwörter und Sitzungstoken kompromittieren und den Angreifern ermöglichen, Benutzeridentitäten zu ihrem Vorteil zu nutzen.
Systeme setzen häufig nicht korrekt durch, was authentifizierte Benutzer tun dürfen. Böse Akteure können solche Fehler nutzen, um Zugriff auf Funktionen und Daten zu erhalten, beispielsweise auf Benutzerkonten und Dateien, um Daten zu ändern oder Zugriffsberechtigungen zu ändern.
Dies tritt immer dann auf, wenn die Anwendung verdächtige Daten ohne ordnungsgemäße Authentifizierung auf einer neuen Webseite zulässt. XSS ermöglicht es Hackern, Skripte im Browser des Ziels zu implementieren. Die Skripte können Websites zerstören oder Benutzer an böswillige senden und Benutzersitzungen befehligen.
Die Zunahme von Cyberangriffen, die auf schlecht entwickelte Software zurückzuführen sind, macht es unerlässlich, dass Entwickler sichere Codierungspraktiken einhalten. Wenn dies der Fall ist, wird die Produktivität verbessert und die Softwarebereitstellung beschleunigt, da weniger Sicherheitsprobleme zu lösen sind. Dies erhöht die Wahrscheinlichkeit, dass der Build bestanden wird. Wenn ein Build bestanden wird, bedeutet dies, dass alle kritischen und hohen Schweregrade behoben wurden und kein signifikantes Risiko für das Unternehmen besteht. Zum Beispiel könnte eine Organisation Schwellenwerte (in Bezug auf den Schweregrad) definieren und/oder spezifische Probleme identifizieren, die nicht verhandelbar sind, und wenn sie identifiziert werden, wird der Build unterbrochen, bis die Probleme behoben sind.
Eine Möglichkeit, um sicherzustellen, dass ein Build erfolgreich ist, besteht darin, sichere Codierungspraktiken und eine Compliance-Validierung mit statischer Analyse im Rahmen automatisierter Tests durchzusetzen. Im Folgenden sind bewährte Sicherheitspraktiken aufgeführt, die Entwickler als Teil der sicheren Codierung befolgen können.
Häufig enthalten Datenbankverwaltungssysteme keine standardmäßig sichere Komponente. Entwickler müssen sicherstellen, dass die Sicherheitskontrollen in der Hosting-Plattform und im Database Management System (DBMS) funktionieren und richtig konfiguriert sind. Für die gängigsten DBMS existieren Leitfäden, Standards und Benchmarks. Der Datenbank-Spickzettel bietet eine schnelle Anleitung zum Entwickeln einer sicheren Konfiguration.
Alle Zugriffe auf eine Datenbank ordnungsgemäß authentifizieren. Verwenden Sie eine sichere Methode, um das DBMS zu authentifizieren. Authentifizieren Sie sich nur über einen sicheren Kanal und sichern Sie die Anmeldeinformationen ordnungsgemäß, bevor Sie sie zur Verfügung stellen. Weitere Informationen finden Sie im Datenbank-Spickzettel.
Fast alle DBMS unterstützen eine Reihe von Methoden zur Kommunikation, wie APIs, Dienste usw., sowohl unsicher (unverschlüsselt oder nicht authentifiziert) als auch sicher (verschlüsselt oder authentifiziert). Für Entwickler ist es ratsam, nur die sicheren Kommunikationsoptionen zu verwenden, die mit Protect Data Everywhere verfügbar sind (siehe unten). Der Datenbank-Spickzettel bietet schnelle Hilfe bei der Bereitstellung einer sicheren Kommunikation.
NIST 800-63b definiert drei Ebenen für die Authentifizierungssicherheit, auch bekannt als AAL oder Authentifizierungssicherheitsebenen.
Stufe 1 ist für Apps mit geringem Risiko, die keine PII (persönliche identifizierbare Informationen) enthalten. Es erfordert nur eine Single-Faktor-ID, normalerweise ein Passwort.
Zu den Best Practices gehören:
Diese Stufe ist für Apps mit höherem Risiko, die PII enthalten, die Benutzer online bereitgestellt haben. AAL Level 2 erfordert MFA, einschließlich QTP-Implementierung (Quick Test Professional). MFA bescheinigt, dass ein Benutzer der ist, für den er sich ausgibt, und verlangt, dass sich die Person mit zwei oder mehr dieser Kombinationen identifiziert:
Wenn ein betroffenes System zu erheblichen finanziellen Verlusten, persönlichen Schäden, strafrechtlichen oder zivilrechtlichen Verstößen oder erheblichem Schaden für das öffentliche Interesse führen kann, ist eine Authentifizierung der Stufe 3 erforderlich. Entwickler verwenden normalerweise kryptografische Module, um dieses hohe Maß an Sicherheit zu erreichen.
Eine Anwendung kann die Authentifizierung für einen begrenzten Zeitraum verfolgen. Dadurch kann der Benutzer die Anwendung weiterhin verwenden, ohne sich bei jeder Anfrage erneut authentifizieren zu müssen. Dies zu verfolgen wird als Sitzungsverwaltung bezeichnet.
Das System verfolgt den Benutzerstatus während einer Sitzung. Der Server speichert die Sitzung und fügt dem Benutzer eine Sitzungskennung hinzu, damit die Benutzerinformationen die Sitzung identifizieren können, die die richtigen Daten für den Benutzer enthält. Der Client verwaltet lediglich die Kennung, die auch vertrauliche serverseitige Sitzungsinformationen vom Client abschirmt.
Zu den Sicherheitskontrollen, die beim Implementieren oder Erstellen von Sitzungsverwaltungssystemen zu berücksichtigen sind, gehören:
Anwendungen verwenden häufig Browser-Cookies, um Sitzungskennungen von Webanwendungen zu speichern, wenn Systeme Sitzungsverwaltungsmethoden implementieren. Einige Abwehrmaßnahmen sind:
Bei einigen Authentifizierungsarten können serverseitige Sitzungen einschränkend sein. „Stateless Services“ ermöglichen dem System die Verwaltung von Sitzungsdaten zur Leistungssteigerung. Dadurch wird der Aufwand für die Überprüfung und Speicherung von Benutzersitzungen auf dem Server reduziert. Eine „stateless“ Anwendung erstellt ein temporäres Zugriffstoken, mit dem das System nach der ersten Authentifizierung die Client-Anfrage ohne die Benutzeranmeldeinformationen authentifiziert.
Dies ist ein offener Standard. Es ist eine eigenständige, kompakte Methode zur sicheren Übertragung von Informationen zwischen Entitäten als JSON-Element (JavaScript Object Notation). Das System kann die Informationen verifizieren, da sie digital signiert sind. Während der Authentifizierung erstellt das System ein JWT-Token und der Server überprüft es, bevor eine Verarbeitung stattfindet.
Der Server speichert das JWT nicht immer. Das System behält die Integrität des Tokens mit einer digitalen Signatur bei, sodass ein späterer Server bestätigen kann, dass das JWT gültig bleibt und dass es seit der Erstellung des Tokens durch das System nicht beschädigt wurde.
Diese Methode ist portabel und zustandslos, was bedeutet, dass die Server- und Client-Technologien unterschiedlich sein können, aber dennoch interagieren können.
Gehen Sie wie folgt vor, um ungeschützte Daten zu vermeiden:
Entwickler können während der Entwurfsphase die folgenden Zugangskontrollmaßnahmen berücksichtigen:
Escaping und Encoding sind Abwehrmaßnahmen gegen Injection-Hacks. Escaping bedeutet, dass der Programmierer ein bestimmtes Zeichen vor der Zeichenfolge einfügt, um Fehlinterpretationen zu verhindern. Beispielsweise kann man vor einem doppelten Anführungszeichen ( " ) einen Backslash ( ) einfügen, damit das System es als Text interpretiert und nicht als Signal zum Schließen der Zeichenfolge. Encoding, auch Ausgabe-Encoding genannt, bedeutet, dass der Entwickler Sonderzeichen in eine andere, aber gleichwertige Form umwandelt, sodass sie im Interpreter unschädlich werden. Beispielsweise kann man beim Schreiben in HTML < in < ändern.
Andere Methoden des Injektionsschutzes umfassen kontextbezogene Ausgabecodierung, die Codierungsentwickler implementieren, wenn sie eine Benutzeroberfläche erstellen; Neutralisieren bestimmter Metazeichen, wenn Sie einem Befehl eines Betriebssystems Eingaben hinzufügen; Unicode-Kodierung, eine Methode zum Speichern von Zeichen mit mehreren Bytes; und Kanonisierung, bei der Systeme Daten in eine Standard- oder einfache Form umwandeln.
Software Entwickler verwenden SAST (statisches Testen der Anwendungssicherheit) führt automatisierte Tests zur Analyse des Quellcodes durch, ohne diesen auszuführen. Ziel ist es, Codefehler und Schwachstellen zu identifizieren, die Softwareschwachstellen aufdecken können. SAST gilt als White-Box-Testverfahren, da es Zugriff auf den Quellcode bietet, der das Design, das Framework und die Implementierung des Systems bzw. der Anwendung dokumentiert.
SAST verwendet die im Quellcode dokumentierten Details zusammen mit seiner Codestruktur, um die Einhaltung sicherer Codierungsstandards und -richtlinien sicherzustellen. SAST verwendet Regeln und Prüfer, um die Einhaltung von Richtlinien durchzusetzen und zu validieren sowie um Codierungsverstöße in den Codierungspraktiken von Entwicklern zu lokalisieren. Entwicklungsteams können zu Beginn des Entwicklungsprozesses verschiedene sichere Codierungsstandards und Richtlinien wie CERT Secure Coding Standards und CWE verwenden, um sicherzustellen, dass die Software bestimmte Qualitäts- und Sicherheitsanforderungen erfüllt.
Es sollte beachtet werden, dass leistungsstarke und ausgereifte Softwareentwicklungsorganisationen diese Standards und Praktiken verwenden, um Sicherheitsrichtlinien und Governance für Entwicklungsteams anzupassen. Viele Organisationen fügen zusätzliche Anleitungen hinzu, die sie für die Schulung und Sensibilisierung der Entwickler verwenden können. OWASP Top 10 und die sieben verderblichen Königreiche spielen eine Schlüsselrolle bei der Sensibilisierung für Dinge, die bei der Codierung schief gehen könnten.
Da SAST keine Ausführung der Software erfordert, um eine Analyse durchzuführen, können Entwickler sie nahtlos in ihre bestehenden Entwicklungsworkflows implementieren, um Code in Echtzeit zu analysieren und sofort alle Codierungsverletzungen zu melden, die von Codierungsregeln und -prüfungen ausgelöst werden. Das Ergebnis ist das Auffinden kritischer Qualitäts- und Sicherheitsprobleme im Workflow des Entwicklers, wo die Kosten für die Behebung und Behebung von Sicherheitsproblemen am günstigsten sind. Dies führt zu qualitativ hochwertigerer Software mit weniger Sicherheitsproblemen oder Schwachstellen, sodass Unternehmen Vertrauen in die Beschleunigung der Softwarebereitstellung und -bereitstellung gewinnen können.
Während die Integration von SAST in Entwicklerworkflows Entwicklern hilft, ihre Codierungsverletzungen zu erkennen, kann SAST auch nahtlos in eine automatisierte Pipeline integriert werden, um Code-Commits zu analysieren, bevor die Software in die Produktion geht. Jeder Commit kann automatisch einen Scan von einem SAST-Tool auslösen.
Parasoft SAST-Tools nutzen KI/ML für inkrementelles Scannen, das nur Code analysiert, der sich im Rahmen dieses Commits geändert hat. Dies ermöglicht eine effizientere Nutzung von SAST und bietet Entwicklungsorganisationen eine historische Ansicht der Scans. Die SAST-Integration in den CI/CD-Prozess ist ein wesentlicher Bestandteil von Erstellen von qualitativ hochwertigem, zuverlässigem und sicherem Code während der Integration und vor der endgültigen Lieferung. Es erfüllt das Konzept der kontinuierlichen Softwaresicherung, bei der Softwaresicherungspraktiken in Entwicklungsaktivitäten automatisiert werden, um eine schnelle Softwarebereitstellung und -bereitstellung sicherzustellen.