• Embedded Development

    Wir verfügen über Experten mit jahrelangen Erfahrungen im Bereich des Embedded Software Development für Kunden im Automobilbereich und Maschinenbau.


    Der Schwerpunkt liegt dabei auf der Software-Entwicklung von Steuergeräten für den Automobilbereich, in welchen eine Vielzahl an Kommunikationsprotokollen zum Einsatz kommen, sowie der Entwicklung von Embedded Produkten im sicherheitskritischen Umfeld (Geldwerte).

  • Security Testing

    Das Gebiet des Security Testing dient der Identifikation von potentiellen Schwachstellen und unerwünschten Funktionalitäten, welche entweder durch gezielte Angriffe oder aber durch Fuzzy Testing entdeckt werden können.


    Pen-Testing

    Wir scannen externe Kommunikationsschnittstellen von Embedded Systemen auf vorhandene und bekannte Schwachstellen, überprüfen Firewalleinstellungen und versuchen in die Systeme einzudringen.


    Fuzzy Testing

    Diese Form des Testing basiert auf einer toolgestützten Erstellung von korrumpierten Eingabedaten, welche vom zu untersuchenden Embedded System über eines der verfügbaren Interfaces (Bluetooth, 802.11 Wifi, USB, TCP/IP, HTML, Javascript etc.) verarbeitet wird. Hierdurch können die Robustheit des Systems gegenüber manipulierten Eingabedaten verifiziert, Programmabstürze, System Resets, System Freezes, Memory Leaks etc. und schließlich sich hieraus ergebende Schwachstellen aufgedeckt werden.

    Das Ziel beim Fuzzy Testing ist es also immer, ein zu untersuchendes System durch eine möglichst hohe Testabdeckung in einen instabilen Zustand zu bringen und die gefundene Problematik anschließend ggf. auf ihre Security Relevanz hin zu untersuchen und zu bewerten.


    Fuzzy Programmierung

    Steht für die Erstellung von spezifischen Testfällen, welche aus der Spezifikation des zu testenden Features abgeleitet werden. In der Regel wird dabei das zu untersuchende Protokoll oder (Medien-, Datei-)Format analysiert und gezielte oder auch zufällige Manipulationen vorgenommen. Die Testdaten werden anschließend im Rahmen des Fuzzy Testings dem zu verifizierenden System zugeführt und die Auswirkung auf die Verarbeitung der Daten untersucht.


    Proof-of-Concept Exploits

    Bei Bedarf entwickeln wir Proof-of-Concept Exploits für gefundene Bugs um so die Tragweite des Problems zu verdeutlichen.

  • Security Consulting

    Security Source-Code Reviews

    Wir überprüfen Source-Code auf potentielle Security Schwachstellen, Backdoors und die Implementierung von kryptographischen Algorithmen und Authentifizierungsmechanismen.


    Security Requirement Reviews

    Wir analysieren und bewerten Requirements, geben Empfehlungen und Verbesserungsvorschläge bei dem Einsatz und der Spezifikation sicherheitsrelevanter Features wie dem Einsatz kryptographischer Verfahren und Zufallsgeneratoren.

  • Reverse Engineering

    Auf dem Gebiet des Reverse Engineering beschäftigen wir uns mit der Analyse von binären Softwaremodulen aus Sicht eines Hackers ohne Zugriff auf Sourcecode und Softwaredokumentation. Das Ziel ist dabei das Aufdecken von ausnutzbaren Schwachstellen sowie der Extraktion von schützenwerten Geheimnissen und Informationen. Im Fokus eines Angreifers steht beispielsweise die Informationsgewinnung über die Implementierung von proprietären Algorithmen (z.B. von kryptographischen Verfahren), der Aufdeckung von nicht dokumentierten bzw. proprietären Kommunikationsprotokollen (z.B. für Debugging, Remote-Steuerung oder weitreichende Testinterfaces) sowie der Identifikation von sicherheitsrelevanten Schwachstellen oder potentiellen Backdoors. Unser Ziel ist dabei grundsätzlich nur die Aufdeckung von Sicherheitsproblemen und eine Aufklärung des Kunden über deren potentielle Folgen und Risiken. Selbstverständlich erfolgt eine solche Zusammenarbeit absolut diskret.


    Einige Beispiele unserer Leistungen:

    Extraktion von Container-Formaten

    Wir analysieren im Kundenauftrag (proprietäre) (Flash-)Container Formate mit dem Ziel, die einzelnen Bestandteile z.B. eines Dateisystems (Executables, Config Files, Libraries) verfügbar zu machen. Dieser Vorgang dient in der Regel als Vorbereitung für die weitere Security-Analyse von Software-Modulen aus Binärcontainern.


    Auffinden von Backdoors und Schwachstellen

    Im Anschluss an die Extraktion von Dateien aus einem Containerformat, können diese Dateien auf interessante Informationen hin untersucht werden. Security relevant können unter anderem die Verwendung von TCP-/UDP-Sockets sein, welche z.B. durch Events aktiviert werden können und im Normalbetrieb per Portscan nicht erkennbar sind. Auch die Ausführung von Skripten und anderen Executables z.B. von externen Medien oder die Analyse von verwendeten Zufallsgeneratoren für kryptographische Systeme (z.B. SSL, VPN, Wifi, Bluetooth, u.a.) sind erfahrungsgemäß lohnende Ziele.


    Rekonstruktion von proprietären Protokollen und Algorithmen

    Auf Anforderung des Kunden untersuchen wir Binärdateien auf proprietäre Kommunikationsprotokolle, für welche es keine Dokumentation (mehr) gibt. Eine solche Analyse dient auch dazu, ein zugeliefertes Produkt auf Übereinstimmung mit den Requirements und Dokumentationen zu überprüfen um beispielsweise nicht erwünschte Funktionalitäten, welche zur Steuerung eines Embedded Gerätes dienen (z.B. Freischaltung von Funktionalitäten, Schreiben von Datensätzen), zu identifizieren.

    Ein weiteres Feld ist die Analyse und Bewertung von proprietären Verschlüsselungsverfahren. Diese Arbeiten basieren in der Regel auf der (falschen) Annahme, dass ein nicht öffentlich bekanntes Verschlüsselungsverfahren oder Signaturverfahren ausreichend oder sogar sicherer ist als die Verwendung gängiger Krypto-Verfahren, auch als Security-by-Obscurity bekannt.


    Extraktion von Geheimnissen

    Auch im Embedded Bereich ist der Einsatz von kryptographischen Verfahren wie asymmetrischen und symmetrischen Verschlüsselungsverfahren Standard. Interessant ist hierbei, wie und wo hierfür benötigte Geheimnisse und Schlüssel hinterlegt sind und wie einfach es gelingen kann, an derartige Informationen zu kommen bzw. diese Informationen auszutauschen (z.B. einen Public Key zur Verifikation von Signaturen).