Portscan mit nmap: Hosts/Rechner und offene Ports im Netzwerk finden

Saturday, December 9, 2017

Um sich einen Überblick über das Netzwerk (LAN/WLAN) zu verschaffen, zu dem man sich verbunden hat, kann man einen Portscan auf das Netzwerk durchführen, um verbundene Hosts und angebotene Services/Dienste zu finden.

Unter Linux/GNOME kann der NetworkManager bzw. nmcli(1) verwenden werden, um sich die Netze anzuzeigen, zu denen man verbunden ist:

$ export LC_ALL=C # Damit der reguläre Ausdruck s.u. korrekt ist
$ lsip () {
>	nmcli -f uuid,device connection show --active \
>	| awk 'NR>1 && $2!="lo" {print $1}' \
>	| xargs nmcli -t connection show \
>	| sed -n -E "/^IP4.ADDRESS\[[0-9]+\]:/{s///;p}"
> }
$ lsip
192.168.1.91/24
10.230.42.59/28
192.168.10.200/24

Und dann mit z.B. nmap(1) einen Standard Nmap scan ausführen, um sich alle Hosts/Rechner anzuzeigen, die erreichbar sind (Ping), sowie deren offene Ports:

$ lsip | xargs nmap

Starting Nmap 7.40 ( https://nmap.org ) at 2017-12-14 18:20 CET
Nmap scan report for o2.box (192.168.1.1)
Host is up (0.00091s latency).
Not shown: 992 filtered ports
PORT     STATE SERVICE
21/tcp   open  ftp
80/tcp   open  http
139/tcp  open  netbios-ssn
445/tcp  open  microsoft-ds
515/tcp  open  printer
631/tcp  open  ipp
5431/tcp open  park-agent
9100/tcp open  jetdirect

Nmap scan report for 192.168.1.10
Host is up (0.00041s latency).
Not shown: 996 closed ports
PORT    STATE SERVICE
22/tcp  open  ssh
53/tcp  open  domain
80/tcp  open  http
443/tcp open  https

Nmap scan report for mydebian (192.168.1.91)
Host is up (0.00012s latency).
All 1000 scanned ports on 192.168.1.91 are closed

Nmap scan report for frei.funk (10.230.42.49)
Host is up (0.0032s latency).
Not shown: 996 closed ports
PORT    STATE SERVICE
22/tcp  open  ssh
53/tcp  open  domain
80/tcp  open  http
443/tcp open  https

Nmap scan report for android-a65183dd756bed42.lan (10.230.42.55)
Host is up (0.027s latency).
All 1000 scanned ports on android-a65183dd756bed42.lan (10.230.42.55) are closed

Nmap scan report for android-42250764e309f587.lan (10.230.42.56)
Host is up (0.022s latency).
All 1000 scanned ports on android-42250764e309f587.lan (10.230.42.56) are closed

Nmap scan report for 10.230.42.59
Host is up (0.000051s latency).
All 1000 scanned ports on 10.230.42.59 are closed

Nmap scan report for 192.168.10.200
Host is up (0.00030s latency).
All 1000 scanned ports on 192.168.10.200 are closed

Nmap done: 528 IP addresses (8 hosts up) scanned in 92.28 seconds

Vor einem Ping scan (oder auch Ping sweep) verstecken

Nmap sendet vor dem Portscan einen Ping, um die Erreichbarkeit einer IP-Adresse festzustellen und überspringt Adressen, die darauf keine Antwort senden (Pong).

Damit keine Antwort gesendet wird, müssen folgende Kernel-Parameter gesetzt werden:

# cat <<! >>/etc/sysctl.d/00-local.conf
> net.ipv4.icmp_echo_ignore_all=1
> net.ipv4.icmp_echo_ignore_broadcasts=1
> !
# sysctl -p

Alles scannen

Um den Ping scan zu deaktivieren und alle IP-Adressen zu scannen (-PN) und so auch verstecke Ports zu finden (-p), sowie die Betriebssystemerkennung (-O), die Versionserkennung (-sV), das Scannen mit Scripts (-sC) und traceroute (--traceroute) zu aktivieren und so mehr Details angezeigt zu bekommen, nutzt man folgende Parameter (Viele der genannten Parameter sind unter dem Parameter -A zusammengefasst, denn dieser soll einen umfassenden Satz von Scan-Optionen aktivieren, ohne dass man sich viele Parameter merken muss):

$ lsip | xargs nmap -A -PN -p "T:0-65535,U:0-65535"

Ein solcher Scan benötigt allerdings auch entsprechend mehr Zeit und wird als aufdringlich betrachtet.

Sie sollten dies nicht ohne Genehmigung anwenden.

Alternative lsip-Funktionen

In den Kommentaren, wurden noch Alternativen für die Funktion lsip aufgezeigt.

Von mir adaptiert (Für Leute die NetworkManager nicht einsetzen):

$ ip -f inet -br a | awk '$1!="lo" && $2!="DOWN" {print $NF}'

Beide obigen Methoden haben Nachteile: Das ip(8) z.B. bei Point-to-Point-Verbindungen und dem Filtern des Output mit awk/sed/usw. und das nmcli(1) bei nicht mit dem NetworkManager verwalteten Interfaces. Wer das als Gefrickel ansieht, kann sich auch ein Perl-Skript schreiben, das sauber alle Netzwerke auflistet. Die dafür nötigen Module sind über die Paketverwaltung in den Paketen libio-interface-perl und libnet-netmask-perl vorhanden:

#!/usr/bin/env perl

use IO::Interface::Simple;
use Net::Netmask;

for ( IO::Interface::Simple->interfaces ) {

    next if ( !$_->is_running );
    next if ( $_->is_loopback );

    $block = Net::Netmask->new( $_->address, $_->netmask );

    print "$block\n";
}

Um die IP-Adresse statt des Netzes auszugeben, schreib man folgendes Kommando: printf "%s/%s", $_->address, $block->bits;

Labskaus

Sunday, October 15, 2017

Labskaus ist mein Leibgericht. Dass weiss ich, aber der Labskaus nicht.

Perl: Zufälligen Schlüssel/Key eines Hash

Friday, August 4, 2017

Auf einen zufälligen Schlüssel eines Hash, kann man mit der Funktion keys zugreifen. Die Funktion keys, gibt alle Schlüssel eines Hash, als Liste zurück, von der dann ein Wert zufällig abgefragt werden kann:

#!/usr/bin/perl

my %alphabet = (
    A => 1,
    B => 2,
    C => 3,
    D => 4,
    E => 5,
    F => 6,
    G => 7,
    H => 8,
    I => 9,
    J => 10,
    K => 11,
    L => 12,
    M => 13,
    N => 14,
    O => 15,
    P => 16,
    Q => 17,
    R => 18,
    S => 19,
    T => 20,
    U => 21,
    V => 22,
    W => 23,
    X => 24,
    Y => 25,
    Z => 26,
);

my @keys = keys %alphabet;

# zufälliger Key

my $buchstabe = $keys[ rand @keys ];
my $position  = $alphabet{$buchstabe};

printf "Der Buchstabe %s, ist der %i. im Alphabet.\n", $buchstabe, $position;

Es ist auch möglich, direkt auf einen zufälligen Wert eines Hash zuzugreifen. Das funktioniert, analog mit der Funktion values:

my @values = values %alphabet;
print $values[ rand @values ] . "\n";

PS: In den Kommentaren, hat Christian eine etwas schnellere Möglichkeit aufgezeigt:

my @list = %alphabet;
my $random_key = $list[(1|rand@list) -1];
my $random_val = $list[1|rand@list];

Das bitweise ODER mit 1 sorgt dafür, dass das letzte Bit des Ergebnisses von rand auf 1 gesetzt wird. Dadurch entsteht immer eine ungerade Zahl (1|0 => 1, 1|1 => 1, 1|2 => 3, 1|3 => 3, …). Es wird also nur auf ungerade Indizes des Arrays zugegriffen, wo in diesem Fall die Values abgelegt sind. Da dabei immer eine Zahl größer 0 generiert wird, kann mit einem einfachen -1 immer auf die geraden Indizes mit den Keys zugegriffen werden.

Debian 9 (Stretch): Predictable Network Interface Names – Umstellung auf das neue Verfahren zur Namensvergabe von Netzwerkschnittstellen

Sunday, July 23, 2017

Spätestens ab Debian 10 (Buster) wird das alte Verfahren zur Namensvergabe von Netzwerkschnittstellen nicht mehr unterstützt, und das System muss auf das neue Verfahren umgestellt sein (Predictable Network Interface Names).

Bei einer Neuinstallation von Debian 9 (Stretch) passiert diese Umstellung automatisch. Bei einem Upgrade von Debian 8 (Jessie) muss hingegen manuell umgestellt werden.

Auf das neue Verfahren zur Namensvergabe von Netzwerkschnittstellen umstellen

Um auf das Verfahren Predictable Network Interface Names umzustellen, muss die Datei /etc/udev/rules.d/70-persistent-net.rules gelöscht werden:

mv /etc/udev/rules.d/70-persistent-net.rules{,.old}

Danach muss das System neu gestartet werden.

Dieser Schritt stellt eine entsprechend weitreichende Änderung am System da. Eventuelle Konfigurationsdateien müssen angepasst und getestet werden. Wer statt des Network-Manager die Datei interfaces(5) nutzt, muss zumindest diese anpassen.

Siehe auch: https://www.debian.org/releases/stable/amd64/release-notes/ch-whats-new.de.html#new-interface-names, https://github.com/systemd/systemd/blob/master/src/udev/udev-builtin-net_id.c#L20 (Beschreibt nach welchen Regeln, die neuen voraussagbaren/vorhersagbaren Namen aufgebaut sind), https://www.freedesktop.org/wiki/Software/systemd/PredictableNetworkInterfaceNames/, file:///usr/share/doc/udev/README.Debian.gz

Benutzerdefinierte Namen für Netzwerkschnittstellen

In manchen Fällen ist es praktisch, eigene Namen für Netzwerkschnittstellen zu definieren.

Dies kann mittels zwei verschiedener Methoden erreicht werden. Einmal mittels Network Device Configuration: systemd.link(5) und einmal mittels Dynamic Device Management: udev(7), welche wesentlich mehr Möglichkeiten bietet.

In folgenden Beispielen, wird der Netzwerkschnittstelle mit der MAC-Adresse 00:a0:de:63:7a:e6, der feste Namen dmz zugewiesen:

  • Dynamic Device Management – udev(7):
    Beispielsweise kann /etc/udev/rules.d/76-netnames.rules erstellt und dort Netzwerkgeräte anhand beliebiger Attribute und Eigenschaften identifiziert und benannt werden.
    Hier ein Beispiel, um ein Gerät über die MAC-Adresse zu identifizieren und zu benennen:

    cat /etc/udev/rules.d/76-netnames.rules
    # identify device by MAC address
    SUBSYSTEM=="net", ACTION=="add", ATTR{address}=="00:a0:de:63:7a:e6", NAME="dmz"
    

    Gegenüber systemd.link(5), bietet diese Methode auch die Möglichkeit Geräte anhand anderer Übereinstimmungsschlüssel, wie der Vendor/Model-ID oder des Gerätepfads zu Identifizieren. Siehe dazu auch die Handbuchseite udev(7), für die Dokumentation, wie man udev-Regeln schreibt.

  • Network Device Configuration – systemd.link(5):
    Alternativ geht auch eine Konfiguration ohne udev(7), mittels systemd.link(5) und des Name-Schlüssels:

    cat /etc/systemd/network/10-dmz.link
    [Match]
    MACAddress=00:a0:de:63:7a:e6
    [Link]
    Name=dmz
    

Damit diese Änderungen übernommen werden, ist ggf. eine Aktualisierung der initrd-Datei mittels update-initramfs -u und ein Neustart des Systems erforderlich.

Lyrics/Songtext: The Measels - They’re coming for us (Death Valley theme song)

Saturday, July 1, 2017

The Measels - They’re coming for us (Death Valley theme song)

cover-measels-theyre-coming-for-us.png

Songtext

The night is coming we have been forgotten
The dark are creeps along without a sound
All this messy busy gets so rotten
I think it’s time to put this body in the ground

Something coming out in the distance
The sun is gone the world is turning black
I no need no bother this resistance
I left my fear behind than there’s no turning back

Oh~
What’s that standing in the doorway
Oh~
We’re losing all control

The buildings rotted to dust
And the metal covered with rust
Left for dead no one to trust
And I feel it getting closer cuz (because) they’re coming for us

Oh~
We got nowhere to go
Oh~
The shadows domino

The buildings rotted to dust
And the metal covered with rust
Left for dead with no one to trust
And I think it’s getting closer cuz (because) they’re coming for us

Interpretation

Falls jemand eine Interpretation hierzu schreiben möchte, mit Schwerpunk auf Überbevölkerung, einer begrenzten Welt, knapp werdende Ressourcen und den Untergang unserer Zivilisation.
Ich würde diese gerne hier Veröffentlichen. Genauso Übersetzungen des Songtextes.

Death Valley

Death Valley ist eine US-amerikanische Mockumentary. Die Serie begleitet Mitglieder der LAPD-Elite-Einheit Undead Task Force (UTF) bei ihrem täglichen Kampf gegen Zombies, Vampire und Werwölfe im San Fernando Valley.

Die Serie wurde nach der ersten Staffel eingestellt.