Binärcode-Analyse: Software-Qualität in fremden Händen

Seite: 2/2

Anbieter zum Thema

Verschleierung: Binärcode gegen Obfuscation

Eine manuelle Prüfung mag bei Quellcode zumindest theoretisch noch möglich sein, bei binären Dateien kommt man so nicht weiter. Zudem sollte nicht vergessen werden, dass der Quellcode nicht zwingend das fertige Produkt vollumfänglich repräsentiert. Jeder Compiler hat seine Eigenarten unter bestimmten Bedingungen, etwa beim Lesen von Union-Datentypen, mit dem unterschiedliche Datentypen im selbem Speicherbereich abgelegt werden können. Der Compiler entscheidet hier, wie er damit umgeht. Erst im Binärcode zeigt sich das Ergebnis.

Bildergalerie

Ein ähnlicher Effekt tritt auf, wenn Schadcode böswillig in den Quellen versteckt wird. Durch diese so genannte „Obfuscation“ ist es kaum möglich, einen Schadcode in den Quellen nachzuvollziehen. Ein Paradebeispiel dafür ist der Exploit im Project Unreal IRCD von 2010 (CVE-2010-2075), bei dem externe Daten über eine Socket-Verbindung ungeprüft Systembefehle ausführen konnten. Im Quellcode erscheint die betreffende Stelle als ein harmloses Makro zum Debug-Loggin (siehe Bild 1). Hinter der Verschleierung steht ein System Call, alles weist auf eine Insider-Sache hin. Im Binärcode hingegen zeigt sich das ganze Ausmaß der Bedrohung. Denn alle Obfuscation-Anstrengungen wurden vom Compiler aufgelöst, der Call fällt sofort ins Auge (siehe Bild 2).

Es ist also auf jeden Fall sinnvoll, Code aus externen Quellen ebenso zu überprüfen wie die eigene Entwicklungsarbeit. Dazu empfehlen fast alle Standards wie DIN EN 51508 ab einer gewissen Kritikalität der Anwendung den Einsatz statischer Analyse. Hierbei wird die Software nicht ausgeführt, sondern ein Modell erzeugt, das geprüft werden kann. Und damit auch mögliche Error Conditions, die in Test-Szenarien meist nicht auftreten, aber später für Probleme sorgen können.

Die meisten Tools sind jedoch nicht in der Lage, binären Code hinreichend zu untersuchen. CodeSonar von GrammaTech hingegen kann sowohl Binärcode als auch Quellcode auf Schwachstellen untersuchen. Dazu gehören Buffer Overrun/Underrun, Command Injection, Integer Overflow of Allocation Size, SQL Injection und Non-constant Format String

Das Tool erzeugt dazu ein Modell des gesamten Programms mit allen Source- und Binary-Bestandteilen: Was als Quellcode vorliegt, wird geparst und Binär-Code wird disassembliert. CodeSonar erzeugt daraus eine einheitliche Präsentation, die die Semantik beider Teile konsistent abbildet. Um mögliche Fehler zu erkennen, durchläuft das Werkzeug das Modell interprozedural und sucht nach Anomalien. Das Analyse-Tool ermittelt alle möglichen Zustände, die das Programm einnehmen kann. So können auch Fehler gefunden werden, die in definierten Test-Szenarien nicht auftreten.

Durch die Möglichkeit, die Analyse zu automatisieren, skaliert das bei CodeSonar implementierte Verfahren auch für große und komplexe Software-Projekte. Für die Entwickler und für das Unternehmen bedeutet das: Sichere Software bei einer kürzeren Time to Market. - und externen Herstellern muss nicht weiter blind vertraut werden.

* Mark Hermeling ist Senior Director Product Marketing bei GrammaTech, Inc.

Artikelfiles und Artikellinks

(ID:44829376)