Mit ABAP Makros die Code Security im SAP-System erhöhen

Seit Jahrzehnten ist der Tenor der SAP-Entwicklervorgaben, der DSAG-Entwicklungsrichtlinien, der ABAP-Clean-Code-Bewegung, sowie anderer mit ABAP-Code befasster Stakeholder klar:  

ABAP Makros sollen nicht benutzt werden! 

Die Gründe dafür sind vielfältig. Am häufigsten werden jedoch die schlechte Wartbarkeit, die Intransparenz und die fehlende Möglichkeit den Code zu debuggen genannt. 

ABAP Makros unter der Lupe 

Wie fast immer, wenn etwas mit dogmatischer Richtigkeit vorgetragen wird, ist es sinnvoll, genauer hinzuschauen. Auf den ersten Blick stimmen die zuvor aufgezählten Punkte: Durch ABAP-Makros wird der Code auseinandergenommen und der Lesefluss gestört. Außerdem ist es meistens sehr schwierig, die in Makros enthaltene Programmlogik zu überprüfen – von automatisierten Tests ganz zu schweigen. 

Allerdings gibt es Situationen, in denen bestimmte Eigenschaften der ABAP Makros wichtiger werden als andere. Nehmen wir das Beispiel, dass eine Benutzerin an Berechtigungen zur Änderung im Debuggingmodus gekommen ist. Damit ist es mit den obigen Vorgaben möglich, alle Berechtigungsabfragen zu umgehen, indem nach erfolgter Prüfung per Debugger der Ergebniswert in sy-subrc einfach wieder auf 0 gesetzt wird. 

Genau an dieser Stelle bieten Makros wegen ihrer Eigenschaften einen immensen Vorteil. Dadurch, dass es in ABAP Makros nicht möglich ist zu debuggen, kann der entsprechende Code samt Interpretation der Abfrage verschoben werden. Verbindet man dieses Codingtemplate mit Ausnahmeklassen, so schafft man ein System, das es wesentlich schwerer macht, diese Berechtigungsänderungen auszunutzen. 

Dazu das folgende Codebeispiel einer programmlokalen Klasse: 

Codepattern
Codepattern

In diesem Fall ist es nicht möglich der Berechtigungsprüfung auszuweichen, oder deren Ergebnis zu ändern. Nun müssen entweder weitere privilege escalations vollzogen, oder der Code muss näher analysiert werden, um andere Schwachstellen dort zu finden. In beiden Fällen muss von der Angreiferin viel Zeit aufgewandt werden. Diese Zeitspanne macht das Ziel uninteressanter, oder verschafft Verteidigern die Möglichkeit zur Reaktion. 

Fazit  

Makros sind also sicherlich für Businesslogiken nicht geeignet, aber um Berechtigungsprüfungen abzusichern leisten sie gute Dienste. Auch in globalen Klassen können Makros implementiert werden. Leider werden sie nicht vererbt. Im Sinne der Code Security lohnt es sich aber, über Makros noch einmal neu nachzudenken.