Port Scanner entwickeln für Java – TCP, UDP, ICMP [Tutorial]

Du möchtest einen Port Scanner entwickeln?

Dieses Tutorial zeigt Dir, wie ein Portscanner funktioniert, Du diesen programmieren kannst und warum ein Portscan gegen Dein Gerät gefährlich sein kann.

Beginnen wir!

Was ist ein Port Scanner?

Firewall Ports
Firewall Ports

Ein Port Scanner ist eine Software, die systematisch alle Internet-Ports eines Computers scannt. Der „Scan“ eines Netzwerkports bedeutet, dass die Anwendung eine Anfrage an den Port sendet. Antwortet der Port, dann ist der Port offen, wenn dieser nicht in 25s antwortet, dann ist der Port geschlossen.

Computer Netzwerk Ports erklärt

Ein Internet-Port ist vergleichbar mit einer „nummerierten“ USB Büchse an Deinem PC.

Der PC kann mit der Büchse Daten empfangen und senden, wenn ein Kabel angeschlossen ist.

Für eine gelungene Netzwerkkommunikation brauchen wir nicht nur eine IP-Adresse z.B. 196.168.178.2, sondern auch einen Port. Den Port kannst Du als eine Zahl zwischen 1 und 66503 wählen. Somit können verschiedene Anwendung auf dem Computer laufen. Diese sind aus dem Netzwerk mit dem Port einzeln erreichbar.

Geschlossener Port / offenere Port

Ein geschlossener Port bedeutet nur, dass der Computer nicht antwortet. Der Service hinter dem „geschlossenen“ Port, kann die Nachricht mitbekommen und z. B. die Anfrage abspeichern.

Portanalyse mit Wireshark
Portanalyse mit Wireshark

Ein offener Port muss nicht zwangsläufig ungeschützt sein. Weil der Portscanner nie zu 100 % weiß, welches Programm den Port nutzt, erhält der Portscanner eine Fehlermeldung oder eine Form von Statusmeldung zurück. Ein Computer kann verschiedene Anwendungen ausführen, die einen Port an der Netzwerkkarte öffnet. Der Computer wartet auf Anfragen, die an die offenen Ports gerichtet sind.

Port Scanner Arten

Vollständiges Scanning über TCP

Wenn ein Port offen steht, dann kann der Port Scanner zu dem fremden Server eine Verbindung herstellen. Der Scanner versucht mit einem „3-fachen TCP-Handshake“ jeden Port abzutasten.

Konnte die Anwendung eine Verbindung erfolgreich herstellen, dann hat der Port Scanner einen offenen Port / Software gefunden.

Halboffenes Scanning über TCP

Beim halboffenen Scanning sendet der Portscanner nur ein SYN-Flag. Beim normalem TCP-Scanning erzeugt der Scanner eine richtige Verbindung.

Ein SYN-Port Scanner sendet „nur“ ein SYN-Paket an den Server und erhält, falls dieser offen ist, ein SYNACK-Paket als Antwort zurück (Bestätigung).

UDP Scanning

Das UDP (User Datagram Packet) basiert im Gegensatz zu TCP auf einer verbindungslosen Kommunikation. Falls der angefragte Port nicht offen ist, antwortet der Server mit dem ICMP-Paket (Internet Control Message Protocol). Das Paket teilt dem Port Scanner mit, dass der Port nicht offen ist.

TCP vs. UDP

Dokumente, Bilder, Binary – Transmission Control Protocol

Das Transmission Control Protocol (TCP) ist ein Austauschprotokoll, welches einen 100 % korrekten Empfang ermöglicht. Im Netzwerk können Pakete verloren oder verzögert ankommen. TCP nutzt Du z. B. zum Aufrufen dieses Tutorials, zum E-Mail Empfang oder einem Download eines Programms.

TCP arbeitet verbindungsorientiert. Das Protokoll gehört zu der Transportschicht des OSI-ISO Modells.

Vorteile der TCP Nutzung sind …

Der große TCP-Header für jedes Paket stellt die Funktionen zu Verfügung, verlangsamt aber „durch die Extra-Bits“ die Übertragungsgeschwindigkeit.

Video- und Audio-Streams – UDP

Das UDP ist viel minimalistischer und schlanker als TCP:

Der Header beinhaltet den Empfänger- und Versender-Port und –adresse. Das UDP-Protokoll nutzt Du für ein Livestreaming von Videos und Audio über das Internet.

Die UDP-Verbindungen erlauben den Verlust von Paketen und eine falsche Sortierung der Pakete. Die Zuschauer empfinden das Stoppen eines Livestreams mit Nachladen unangenehmer (zu geringe Bandbreite – TCP), als wenn eine paar Pixel verloren gehen (Paketverlust – UDP)

Vorab: Scanne nur Dein eigene System und Systeme einer dritten Person, vor der Du eine schriftliche Erlaubnis hast. Scannst Du z. B. einen Google Server, dann sperrt Dich ein Google-Script aus, weil er vermutet, dass Du ein Krimineller bist.

Scanner programmieren

Der Port Scanner testet alle Ports eines Servers aus.

Das kann je nach Programmierung wenige Sekunden bis Minuten dauern. Ein Port ist offen, wenn der Port Scanner sich verbinden kann. Die Verbindung löst der Port Scanner sofort wieder auf, da dieser keine Daten an den Server senden möchte

for port mit 0 bis 65535:
  scannePort(ip, port)

scannePort(ip, port):
   response = network.sendSYN(ip,port)
   if (response != "") return true else false

Für mehr Speed – Threading

Die schrittweise Überprüfung aller Ports kann sehr lange dauern, deshalb benutze ich in diesem Beispiel Multi-Threading (Parallelisierung auf mehreren Prozessoren). Der Scanner kann mit Threads mehrere Ports gleichzeitig scannen:

for 0 bis 10:
    neuerThread(startePortScan(ip,portbereiche))

Verbesserung mit etwas Zufall

Im nächsten Schritt sollten wir noch eine Zufallskomponente einbauen. Die Port Scans erkennen Virenschutz-Programme sofort, wenn der Scanner so arbeitet:

1,2,3,4,  ….

Besser und natürlicher wäre:

234, 3245, 334, 5676, …

Math.random() generiert eine Zufallszahl zwischen 0 und 1 und die Software multiplizieren diese mal die höchste Port-Nummer 65535. Das Ergebnis schreibt unser Scanner in eine Tested-Liste mit dem Ergebnis.

Der Scanner testet den Port nur, wenn dieser nicht in der Liste steht. Außerdem ist es empfehlenswert, eine „Schlafzeit“ für die Threads einzuführen. Der Scan soll nicht dem typischen Muster folgen (1,2,3,4, …). Der Scanner soll so aussehen, als ob Hunderte von verschiedenen Hosts (mit normalen Nutzern) auf den Server zugreifen wollen

Warum ein Port Scan gegen Dein Gerät gefährlich?

Als Open-Source-Software stellt der Markt einige Lösungen bereit, die fertig konfiguriert sind.

Der erste Schritt eines potenziellen Hacks ist ein Port Scan!

Warum? – Der Port Scan gibt den Hackern darüber Aufschluss, welche Ports auf einem Server offen sind. Typische Port-Nummern verraten, welche Software Du auf Deinen Computer / Server nutzt:

  • 80: HTTP – Ungesichertes Web surfen
  • 443: HTTPS – Sicheres Web surfen
  • 21: FTP – Dateiübertragung
  • 22: SSH – Sichere Kommandozeile

Schutz gegen Port Scanner auf eigene Systeme

Ein fremder Scan auf Dein System schadet Dir im ersten Atemzug nicht.

Wenn Du aber einen solchen Scan erkennst, kannst Du Maßnahmen ergreifen, um einen Angriff abzuwehren.

  1. Schließe alle ungenutzten Ports (Daran solltest Du selbst immer denken)
  2. Ändere die Standard-Ports von z. B. SSH auf einen anderen zufälligen Port und installiere auf den Standard-Port einen Honeypot, sodass die Hacker verzweifeln.
  3. Halte Deine Software aktuelle (Dienste nach außen, z. B. Apache).
  4. Erstelle ein Backup von Deinen Systemen
  5. Nutze eine Verschlüsslung (TSL, RSA) für die Kommunikation zwischen dem Server und den Clients
  6. Notfalls schalte Systeme komplett ab, wenn Du die Sicherheitslücken nicht schnell schließen kannst:
    Einen Verlust (Dataleak) von Kundendaten ist schlimmer als eine Downtime von mehreren Stunden.
  7. Untersuche selbst programmierte Software auf Sicherheitslücken

Credits

Icons made by Gregor Cresnar from www.flaticon.com is licensed by CC 3.0 BY  – Icons made by dDara from www.flaticon.com is licensed by CC 3.0 BY – Icons made by Icomoon from www.flaticon.com is licensed by CC 3.0 BY -Icons made by Those Icons from www.flaticon.com is licensed by CC 3.0 BY Icons made by Roundicons from www.flaticon.com is licensed by CC 3.0 BY Icons made by Roundicons from www.flaticon.com is licensed by CC 3.0 BY

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert


Jeden Monat teile ich mit Mitgliedern
4 neue praxisnahe Tutorials (je 1000+ Wörter).


Trage Deine Mail, damit Du
Deine Coding + Hacking Skills erweitern kannst!

Die Webseite nutzt nur technisch notwendige Cookies.