Dynamische Analyse von Android Apps
Ralph Meier
Diese Features bietet Go für Penetration Testing Tools
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") }
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.
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.
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.
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.
Unsere Spezialisten kontaktieren Sie gern!
Ralph Meier
Ralph Meier
Ralph Meier
Ralph Meier
Unsere Spezialisten kontaktieren Sie gern!