- 25. April 2014

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:

  1. ABAP Command Injection
  2. OS Command Injection
  3. Native SQL Injection
  4. Improper Authorization
  5. Directory Traversal
  6. Direct Database Modifications
  7. Cross-Client Database Access
  8. Open SQL Injection
  9. Generic Module Execution
  10. Cross-Site Scripting
  11. 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.

Wir sind Ihr Dienstleister für die Entwicklung, die Ihr SAP noch besser macht.
Schon in der Ideenphase unterstützen wir Sie bei der Definition der Anforderungen. Die Konzeption und Umsetzung erfolgt durch unsere SAP Experten.

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.

ABAP Coding: Passende Berechtigungsprüfung erstellen

ABAP Coding: Passende Berechtigungsprüfung erstellen

Ähnlich verhält es sich mir der Auswertung von Rückgabewerten. Es ist das kleine Einmaleins und wird doch oft vernachlässigt.

ABAP Coding: Rückgabewerte auswerten

ABAP Coding: Rückgabewerte auswerten

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:

Beispiel SQL-Injection

Beispiel SQL-Injection

SQl injection

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.

Beispiel Ausgabe nach einem Angriff auf die Datenbank

Beispiel Ausgabe nach einem Angriff auf die Datenbank

Beispiel Codeänderung bei SQL injection

Beispiel Codeänderung bei SQL injection

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!


SHARE



Schreiben Sie einen Kommentar

Bitte füllen Sie alle mit * gekennzeichneten Felder aus. Ihre E-Mail Adresse wird nicht veröffentlicht.