Custom Scripts

Sie können die von uns eingepflegten Checks durch eigene Skripte erweitern, um den Funktionsumfang des Penetrationstests nochmals zu erweitern. Die Skripte hinterlegen Sie direkt auf dem Linux-Server, auf dem der Hacktor installiert ist.

Um Custom Scripts hinzuzufügen brauchen Sie Administrationsrechte auf dem Server/der VM, auf dem die Softwarekomponente Hacktor installiert ist.

Custom Script hinzufügen

Gehen Sie folgendermaßen vor, um ein eigenes Skript hinzuzufügen:

1. Navigieren Sie in den Ordner scripts.

cd /opt/enginsight/hacktor/scripts

2. Legen Sie eine Datei für das Custom Script an. Der Dateiname muss dem folgendem Schema entsprechen: <runtime>_<severity>_name.extension, z.B. python2_critical_CVE1234.py oder ruby_ok_my custom script.rb.

Unterstützte Runtimes:

  • bash

  • python2

  • python3

  • ruby

Unterstützte Severities (Dringlichkeit):

  • ok

  • low

  • medium

  • high

  • critical

nano <runtime>_<severity>_name.extension

3. Fügen Sie Ihr Skript, das Sie gemäß der Richtlinien erstellt haben, ein.

4. Speichern und schließen Sie die Datei.

5. Machen Sie Ihre angelegte Datei für Hacktor ausführbar.

chmod 755 <filename>

6. Starten Sie Hacktor neu.

systemctl restart ngs-hacktor

Richtlinien für Custom Scripts

Damit Hacktor das Ergebnis des Custom Scripts auslesen kann, muss die folgende Konvention für den Exit Code eingehalten werden.

StatusExit CodeBeschreibung

passed

exit code 0

Der Check ist bestanden.

error

exit code 1

Der Check hat nicht funktioniert.

skipped

exit code 5

Der Check ist für das Zielsystem irrelevant.

failed

exit code 9

Das Zielsystem ist verwundbar.

Jeder andere exit code wird wie error behandelt.

Unabhängig vom Check Status werden stdout und stderr im Audit ausgegeben. Ab 1024 Zeichen wird der Output abgeschnitten.

Das erste Argument ist immer der hostname, das zweite bis n (2-n) sind immer die offenen Ports.

Muster

python2, python3

import sys

print("Host:",sys.argv[1])
print("Ports:",sys.argv[2:])

print("Use 'sys.exit(1)' with error codes (1=error, 5=skipped, 9=failed) to determine check status")

sys.exit(9)
import socket
import sys

# This is an example script
# It checks if a host uses an OpenSSH implementation

host = sys.argv[1]
ports = sys.argv[2:]

sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

if '22' in ports:

    addr = (host, 22)

    try:
        sock.connect(addr)
    except:
       print >>sys.stderr, 'failed to connect'
       sys.exit(1) # check has 'error' status

    try:
        message = 'SSH-2.0-Hacktor'
        sock.sendall(message)
   
        data = sock.recv(256)
        print >>sys.stdout, "Banner: %s" % data

        if 'OpenSSH' in data:
            print >>sys.stdout, "Host uses OpenSSH implementation"
            sock.close()
            sys.exit(0)

        else:
            print >>sys.stdout, "Host does not use OpenSSH implementation."
            sock.close()
            sys.exit(9) # check is 'failed'

    finally:
        sock.close()

else:
    print >>sys.stdout, 'host %s does not use port 22' % host
    sys.exit(5) # check is 'skipped'

ruby

puts "Host: "+ARGV[0]
puts "Ports: "+ARGV.inspect[0..-1]

puts "Use 'exit(1)' with error codes (1=error, 5=skipped, 9=failed) to determine check status"

bash

#!/bin/bash

echo "Host: $1"

shift # remove the first argument
echo "Shift. Then Ports:" "$@"

exit 5 # Use 'exit 1' with error codes (1=error, 5=skipped, 9=failed) to determine check status

Eigenen Titel und Empfehlungstext hinzufügen

Optional können Sie einen eigenen Titel hinterlegen, der im Audit Ihren im Dateinamen hinterlegten Titel ersetzt. Außerdem können Sie eine Empfehlung hinterlegen, wie mit der Schwachstelle umzugehen ist.

1. Öffnen Sie die Datei descriptions.json.

nano /opt/enginsight/hacktor/scripts/descriptions.json

Fügen Sie die Informationen nach folgendem Schema ein:

{
    <filenameA>":{
        "title":"<check title>",
        "recommendation":"<recommendation on how to fix>"
    },
    "<filenameB>":{
        "title":"<check title>",
        "recommendation":"<recommendation on how to fix>"
    }
}

2. Speichern und schließen Sie die Datei.

3. Starten Sie Hacktor neu.

systemctl restart ngs-hacktor

Custom Script ausführen

Um ein Custom Script für einen Penetrationstest zu nutzen, fügen Sie das Skript einfach gemäß der Anleitung zum entsprechenden Hacktor hinzu. Achten Sie außerdem darauf, in den erweiterten Einstellungen der Vorlage die Ausführung von Custom Scripts zu erlauben.

Last updated