03/12/2019

Wenn der Quellcode sensible Daten preis gibt …

Im Zuge von Penetration Tests [# Blogbeitrag zum Thema] analysiert Limes Security sehr häufig auch Client-Applikationen. Dabei ist es irrelevant, ob diese auf einem Computersystem, einem Smartphone oder einem Embedded System installiert und ausgeführt werden. Immer wieder gelingt es den Fachleuten von Limes sensible Daten, wie Passwörter, kryptographische Schlüssel, interne IP-Adressen oder ähnliches aus dem Code zu extrahieren. Das dafür eingesetzte Tool, um C#-Applikationen wie ein offenes Buch zu lesen, ist: ILSpy (https://github.com/icsharpcode/ILSpy).

ILSpy

ILSpy ist frei verfügbar und ermöglicht es sehr einfach, C#-Applikationen zu dekompilieren, zu modifizieren und wieder zu kompilieren. Dadurch wird es einem Angreifer möglich, den Code einer Applikation beinahe so zu lesen, wie es der Entwickler getan hat. Auf diese Weise können natürlich auch geheime Daten gefunden und ausgelesen werden.

Mit PowerShell geht aber noch viel mehr: Diese erlaubt beispielsweise C#-Assemblies direkt zu laden und auszuführen. Die Limes Spezialisten haben diese Funktion in ILSpy inkludiert, wodurch es möglich geworden ist, gezielt Methoden zu laden und auszuführen. Damit können zum Beispiel Entschlüsselungsroutinen, Verbindungsaufbauten, Signatur-Schemata oder ähnliches direkt aus der Client-Applikation missbraucht werden.

Reverse Engineering

Leider ist es Entwicklern nicht immer klar, dass ihr Code so einfach „reverse engineered“ werden kann. Wie aufwendig es ist, den Quellcode aus einem Kompilat zu erhalten, ist stark abhängig von der Entwicklungssprache. Sprachen wie C# und Java – und somit auch Android – machen es jedem halbwegs versierten Programmierer sehr einfach, den Code wiederzugewinnen. Dies liegt daran, dass C# und Java nicht direkt in Maschinencode, sondern in sogenannten Intermediate Language Code kompilieren. Zwar wird es dadurch leichter, den Code auf unterschiedlichen Systemen auszuführen, allerdings erleichtert er auch den oben beschriebenen Vorgang des Reverse-Engineerings. Sprachen wie C und C++ werde direkt zu Maschinencode kompiliert, wodurch sie nur mit einem sehr viel höheren Aufwand von unerwünschten Personen eingesehen werden können.

Limes empfiehlt

Schon am Beginn muss sichergestellt werden, dass sich im Code keine sensiblen Daten wie Passwörter, kryptographische Schlüsseln oder ähnliches befinden. Dafür können Tools genutzt werden, welche nach bestimmten Schlüsselwörtern, wie Passwort, Schlüssel oder dergleichen suchen und diese bei Code Reviews aufzeigen (z. B. SonarQube, Lint, Parasoft, Klocwork).

Sinnvoll ist auch, einen Code unter der Annahme zu entwickeln, dass dieser frei verfügbar wäre und jeder ihn lesen kann. Wer sich dahingehend sensibilisiert, wird von vornherein aufmerksam darauf achten, dass keine sicherheitsrelevanten Informationen – verborgen im Code – mit ausgeliefert werden.

Limes Security bietet speziell zum Thema „Softwaresicherheit im Umfeld von C#“ Trainings an. Kontaktieren Sie uns noch heute!