Blog

Penetrationstest Teil 1

mkind

Penetrationstests gehören zu den beliebtesten Dienstleistungen im Bereich IT-Security. Auch bei uns sind sie das am meisten nachgefragte Produkt. Eine solche Form der IT-Sicherheitsüberprüfung ist für den ein oder anderen Kunden das erste Mal, dass er sich diesem Thema widmet. Daher hören viele Kunden sehr interessiert zu, wenn wir Details erzählen. Als Folge dachten wir uns, dass es eine gute Idee wäre, die wichtigsten Schritte eines Penetrationstests einmal in Blogeinträgen zusammen zu fassen. In einer neuen Reihe möchten wir also einen Einblick in das geben, was bei einem Penetrationstest passiert. Solche Tests lassen sich übrigens auf alles Mögliche anwenden wie auf Webseiten, auf Programme oder sogar auf Hardware. In unserem Beispiel konzentrieren wir uns auf das Überprüfen von Webseiten.

Die Phasen eines Pentests

Ein Penetrationstest dient dazu, Schwachstellen ausfindig zu machen. Das Besondere bei dieser Art von Überprüfung ist, dass ein Tester die Rolle eines Angreifers einnimmt. Er geht also genau so vor, wie ein Angreifer üblicherweise vorgehen würde.

Bei einem Pentest, wie ein Penetrationstest auch genannt wird, unterscheiden wir in der Regel vier grobe Phasen:

  1. Vorbereitung
  2. Informationsbeschaffung
  3. Analyse
  4. Dokumentation

Bei einem richtigen Angriff unterscheidet man leicht andere Phasen (Informationsbeschaffung, Exploitation, Post-Exploitation). Das liegt unter anderem daran, dass ein Angreifer in der Regel nicht aufhört, wenn er in ein Netzwerk eindringen konnte und er häufig auch nicht an einer verständlichen Dokumentation für Kunden interessiert ist. Da jede Phase für sich sehr spannend ist, möchten wir jeder dieser Phasen einen eigenen Blogartikel widmen. Dieser Eintrag beschäftigt sich im Wesentlichen mit den ersten beiden Punkten.

Die Vorbereitung eines Penetrationstests

Bevor wir einen Angriff auf eine Anwendung wirklich simulieren können, ist es notwendig, dass wir uns mit dem interessierten Kunden auf wichtige Details verständigen. Ein richtiger Angreifer würde das natürlich nicht tun und direkt mit der Informationsbeschaffung loslegen. Da wir aber helfen wollen, ist es wichtig, dass wir uns mit unseren Kunden genau abstimmen. Folgende Punkte sind hier besonders spannend:

  • Ziel des Penetrationstests: Je nachdem wie umfangreich beispielsweise eine Anwendung ist, bietet es sich an, die Überprüfung auf bestimmte Komponenten zu fokussieren.
  • Art des Pentests: Werden einem Penetrationstester Informationen … more

SNMP und Simatic S7-1500

jabo

Das SNMP (Simple Network Management Protocol) wird häufig für das Managen von Netzwerken verwendet. Es lässt sich aber auch verwenden, um industrielle Steueranlagen zu klassifizieren. Im folgen möchte ich darauf eingehen, wie wir vorgegangen sind, um bei einer Siemens Simatic S7-1500 Informationen rauszukitzeln.

Zunächst nutzten wir gängige Linux-tools, um unter anderem zu ermitteln, welche Felder sich auslesen lassen. Danach schauten wir uns eine solche Abfrage genauer an, um sie implementieren zu können.

Mit dem Protokoll verfügbare Felder ermitteln

SNMP ist ein auf UDP basierendes Protokoll, das in ASN.1 codiert ist und das für Abfragen von Informationen über Netzwerkgeräte und zum Konfigurieren derer verwendet wird. Diese Informationen umfassen im Allgemeinen Gerätenamen, -orte, -besitzer und Ähnliches. Gespeichert werden sie in sogenannten Management Information Bases (MIBs), die sich in einer Plattform unabhängigen Sprache auf dem per SNMP angesprochenem Gerät befinden. In einem MIB können sich mehrere MIB-Variablen befinden. Angesprochen werden diese über einen Object Identifier (OID). Beispielhafte OIDs werden wir im Folgenden noch kennenlernen.

In der Standardeinstellung spricht die S7-1500 Version 1 des SNMP, weshalb sich die weiteren Ausführungen auf diese beschränken. Diese Version hat keine Sicherheitsmechanismen, um die Kommunikation zu schützen oder den Zugriff auf eine kleine Gruppe von Nutzern zu beschränken. Die einzige Möglichkeit, die zum Sichern der Kommunikation existiert, ist der sog. Community String. Ein Passwort, das im Klartext übertragen wird. Es gibt einen Community String, um Variablen zu lesen und einen zum Lesen und Schreiben. Hierbei ist aber anzumerken, dass nicht alle Variablen, die lesbar sind, auch beschreibbar sind. Die Standardeinstellung von Siemens ist public für den Community String, der das Lesen ermöglicht, und privat für den Community String, der das Lesen und Schreiben ermöglicht.

Zum Auslesen von Werten gibt es im Protokoll für uns zwei grundlegend entscheidende Befehle:

  • getRequest
  • getNextRequest

Beide haben eine ähnliche Funktionalität mit dem Unterschied, dass getRequest die MIB-Variable oder eine Liste von mehreren abfragt, getNextRequest hingegen eine iterative Abfrage stellt, d.h. es wird neben dem abgefragten Wert auch die OID des lexikographisch nächsten MIBs in der Antwort erwartet. getNextRequest wird also eher verwendet, um nach einzelnen MIB-Variablen zu suchen, während … more