Programmiersprache Go - Entwickeln von Penetration Testing Tools

Programmiersprache Go

Entwickeln von Penetration Testing Tools

Ralph Meier
von Ralph Meier
am 10. Juni 2021
Lesezeit: 8 Minuten

Keypoints

Diese Features bietet Go für Penetration Testing Tools

  • Es gibt keine am besten geeignete Programmiersprache für Pentesting Tools
  • Go bringt einfache Nebenläufigkeit und plattformübergreifende Kompilierung
  • Bald kommt Fuzzing in die Standardbibliothek
  • Es existieren interessante Open-Source-Tools in Go

Jede Programmiersprache bringt ihre eigenen Features und Vorteile mit sich, daher gibt es nicht die beste Programmiersprache für das Entwickeln von Penetration Testing Tools. In diesem Bereich werden häufig Python, Perl, Ruby aber auch PowerShell sowie andere Programmiersprachen eingesetzt.

Go wird oft auch als Golang bezeichnet, dies ist auf die Domain der Programmiersprache zurückzuführen: golang.org. Das Projekt Go wurde im Jahr 2007 von Robert Griesemer, Ken Thompson und Rob Pike gestartet. Im Jahr 2009 präsentierten sie die Programmiersprache Go, das Konzept und ihre Ideen dahinter. Die erste stabile Version Go 1 wurde drei Jahre später im März 2012 veröffentlicht. Ursprünglich wurde Go aus Unzufriedenheit gegenüber anderen Programmiersprachen wie C++ oder Java hinsichtlich Themen wie Cluster- und Cloud Computing aber auch skalierbare Netzwerkdienste erschaffen.

Go orientiert sich stark an der C-Syntax, besitzt aber wie Java einen Garbage Collector. Die Hauptziele bei der Entwicklung von Go waren die Unterstützung von Nebenläufigkeit mit nativen Sprachelementen, eine einfache Handhabung von grossen Codebasen und das Erreichen einer hohen Übersetzungsgeschwindigkeit.

Objektorientierung ist in Go möglich, jedoch nicht durch Klassen und deren Vererbung, sondern durch den Einsatz von Interfaces und Mixins.

package main
import "fmt"

func main() {
   fmt.Println("Hello World")
}

Binärdatei als Endprodukt und Cross-Kompilierung

Kompiliert wird ein Go Projekt mit dem Befehl go build. Hierbei werden alle Pakete und Abhängigkeiten in eine Binärdatei kompiliert. go build unterstützt eine grosse Reihe an Zielsystemen. Nach dem Ausführen eines einzigen Befehls steht ein Binary für die gewünschte Plattform bereit. Somit ist es einfach unter macOS ein Binary für Windows 10 64-bit zu erstellen. Dafür müssen dem build Befehl die Informationen GOOS (Zielbetriebssystem) und GOARCH (Zielarchitektur) mitgeteilt werden. Hierbei gibt es drei verschiedene Arten, wobei nur die erste Variante mit Go 1.16 funktioniert:

1. Über die Kommandozeile:

GOOS="windows" GOARCH="amd64" go build hello.go

2. Mittels Kommentar im Code:

// +build windows,amd64

3. Über den Dateinamen:

hello_windows_amd64.go

Cross-Kompilierung ist an sich nichts neues, aber sehr angenehm und einfach umzusetzen in Go.

Einfache Nebenläufigkeit dank Goroutinen

Go besitzt neben der einfachen Art, Binaries für andere Plattformen zu erstellen, auch ein Weg für schnelle und einfache Implementierung von Nebenläufigkeit, sogenannte Goroutinen. Im Vergleich zu normalen Threads benötigen Goroutinen bei der Erstellung viel weniger Ressourcen.

Um eine Goroutine zu erstellen, ruft man die gewünschte Funktion mit einem go davor auf. Im Fall vom zuvor gezeigten Hello World würde das Verlagern der Ausgabe in eine eigene Funktion so aussehen:

func hello() {
   fmt.Println("Hello World")
}

Aufruf der Funktion hello() mittels go hello(). Durch sogenannte Channels können Goroutinen kommunizieren und synchronisiert werden.

Standardbibliothek bekommt demnächst ein Fuzzing-Modul

Das Fuzzing-Modul wurde anfangs Juni dieses Jahres für Betatester freigegeben. Fuzzing ist eine Methode, um Fehler, Abstürze und andere Eigenheiten von Applikationen durch automatische Anpassung von Eingaben zu finden. Durch den Einsatz von Fuzzing kann die Testabdeckung erhöht und vorhandene Security Schwachstellen können entdeckt werden.

Open Source Penetration Testing Tools in Go

Fazit

Go bietet viele Vorteile, besonders das einfache Hinzufügen von Nebenläufigkeit und die Geschwindigkeit an sich, was ausschlaggebend sein kann beim Penetration Testing. Wenn nun Neugier und Interesse geweckt wurden, ist das Buch Black Hat Go zu empfehlen. Go sieht sehr viel versprechend aus, ich werde also dran bleiben.

Über den Autor

Ralph Meier

Ralph Meier hat eine Lehre als Applikationsentwickler, Fokus Webentwicklung mit Java, bei einer Schweizer Grossbank absolviert und danach einen Bachelor of Science ZFH in Informatik an der ZHAW School of Engineering abgeschlossen. Er fokussiert sich auf die sicherheitstechnische Untersuchung von Webapplikationen.

Links

Haben Sie Interesse an einem Penetration Test?

Unsere Spezialisten kontaktieren Sie gern!

×
Der sichere Einsatz von IoT-Protokollen

Der sichere Einsatz von IoT-Protokollen

Ralph Meier

Online-Tracking

Online-Tracking

Ralph Meier

Web-Shells

Web-Shells - Ein Überblick

Ralph Meier

Sie wollen mehr?

Weitere Artikel im Archiv

Sie brauchen Unterstützung bei einem solchen Projekt?

Unsere Spezialisten kontaktieren Sie gern!

Sie wollen mehr?

Weitere Artikel im Archiv