Die einfachen Dinge: Sicherheit und Robustheit im ABAP Coding
Die Business Application Security Initiative (BIZEC) nennt als häufigste Schwachstellen in ABAP Coding in Bezug auf Sicherheit die folgenden Punkte:
- ABAP Command Injection
- OS Command Injection
- Native SQL Injection
- Improper Authorization
- Directory Traversal
- Direct Database Modifications
- Cross-Client Database Access
- Open SQL Injection
- Generic Module Execution
- Cross-Site Scripting
- Obscure ABAP Code
Schaut man sich die Liste genauer an, dann erkennt man zwei Hauptgruppen:
- fehlende oder fehlerhafte Berechtigungsprüfungen
- Injection Probleme
Berechtigungsprüfung liegt in der Hand des Entwicklers
ABAP-Entwicklungen können auf das hervorragende Sicherheitsframework des SAP NetWeaver Application Servers zurückgreifen. Damit ist es möglich wasserdichte Berechtigungsprüfungen zu implementieren, das bestehende Rollenkonzept und entsprechende Tools zu nutzen und zur Laufzeit auf Unterstützung wie zum Beispiel die Protokollierung im Security Audit Log zurückzugreifen. Es handelt sich um wirklich mächtige Werkzeuge – man muss sie nur einsetzen.
Sie erhalten die Komplettlösung – Ihr Projekt machen wir zu unserem Projekt. Mit professionellem Projektmanagement sicheren wir den Projekterfolg.
Gerne spreche ich mit Ihnen über Ihre Ausgangslage und zeige Lösungsmöglichkeiten auf. Auf Wunsch unterbreite ich Ihnen im Anschluss ein unverbindliches Angebot.
Kontaktieren Sie mich: Telefon 0211.9462 8572-16 oder per E-Mail info@erlebe-software.de
Ingo Biermann, Fachbereichsleiter
Die einfachen Dinge richtig machen
Ein Beispiel: Der Befehl CALL TRANSACTION führt eine Transaktion aus. In der gezeigten Form wird die Transaktion gestartet – ungeachtet der Frage, ob der User sie direkt im Dialog starten darf oder nicht. Um die passende Berechtigungsprüfung muss sich der Entwickler aber selbst kümmern. Das ist natürlich kein großes Problem, wenn es auch gemacht wird.
Ähnlich verhält es sich mir der Auswertung von Rückgabewerten. Es ist das kleine Einmaleins und wird doch oft vernachlässigt.
Wenn der sy-subrc einer Berechtigungsprüfung nicht korrekt ausgewertet wird oder die Eingabefelder nicht richtig befüllt werden, dann hilft das schönste SAP Berechtigungskonzept nicht weiter.
Ein einfach konstruiertes Beispiel zum zweiten Thema SQL-Injection:
Und so schreibt ein Angreifer etwas auf die Datenbank, das sicher nicht im Sinne des Erfinders bzw. Programmierers war. Dazu braucht er nur mittelmäßig intelligente Vermutungen über den Aufbau von Programm und Datenbank.
Robuste Softwareentwicklung
Die Beispiele zeigen, wie wichtig ein Prinzip ist, das man aus dem Lehrbuch für gute Programmierung kennt: Robustheit. Eine Software soll auch dann weiterlaufen und korrekte Ergebnisse liefern, wenn das Umfeld nicht den ursprünglichen Erwartungen entspricht.
Speziell auf die oben gezeigte Beispiele bezogen bedeutet das: Durch das Vermeiden einfacher Fehler lassen sich grundlegende Sicherheitsprobleme bereits ausschließen:
- Fehler richtig behandeln und Rückgaben prüfen
- Eingabedaten validieren, bevor sie verwendet werden
Only good Code ist good Code
Dies sind nur Beispiele dafür, wie Code-Qualität zur Verbesserung der Sicherheit beiträgt. Darüber hinaus verbessert sie auch Wartbarkeit und Stabilität der Software und auch die Datenqualität. Auf lange Sicht gesehen zahlen sich Investitionen in Code Qualität also in jedem Fall aus.
Die Werkzeuge dafür sind
- Entwicklungsrichtlinien und Checklisten
- Verwendung automatischer Codeprüfung vom einfachen Syntax Checker bis zum Tool für Codeanalyse
- Etablierung von Change Management Prozessen, Testmanagement, Code Reviews, etc.
Deren Einführung kann allerdings nur schrittweise erfolgen. Es bedarf zunächst einer sinnvollen Zieldefinition und einer Roadmap. Die Entwickler müssen ins Boot geholt werden und die Initiative mittragen. Phasenweise kann dann neues und bestehendes Coding Schritt für Schritt in die Prüfung mit einbezogen werden. Solange, bis sich am Ende nichts mehr transportieren lässt, was noch Fehler in der Prüfung verursacht.
“Get Clean” und “Stay Clean”
Wenn man dann mit einiger Anstrengung eine saubere Codebasis geschaffen hat, ist das folgende “Sauber bleiben” leichter. Vorausgesetzt natürlich, man bleibt konsequent bei den eingeführten Prozessen und Automatismen.
Möchten Sie mehr über robuste Softwareentwicklung und Code-Qualitäts-Initiativen erfahren? Dann kontaktieren Sie mich!