30.09.2026, 03:22 UTC · 161 Befehle · über ssh · Niederlande
user='root' pass='111111' root@srv01:~$ export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:$PATH root@srv01:~$ uname=$(uname -s -v -n -m 2>/dev/null || /bin/uname -s -v -n -m 2>/dev/null || /usr/bin/uname -s -v -n -m 2>/dev/null || busybox uname -s -v -n -m 2>/dev/null || ( [ -f /proc/version ] && head -1 /proc/version | cut -d' ' -f1 ) || ( [ -f /etc/os-release ] && grep '^ID=' /etc/os-release | cut -d= -f2 | tr -d '"' ) || echo "") Linux 4.15.0-213-generic #213-Ubuntu SMP Fri Jan 15 10:52:19 UTC 2021 x86_64 root@srv01:~$ arch=$(uname -m 2>/dev/null || /bin/uname -m 2>/dev/null || /usr/bin/uname -m 2>/dev/null || busybox uname -m 2>/dev/null || ( [ -f /proc/cpuinfo ] && grep -q "lm" /proc/cpuinfo && echo x86_64 ) || ( [ -f /proc/cpuinfo ] && grep -q "CPU architecture: 8" /proc/cpuinfo && echo aarch64 ) || ( [ -f /proc/cpuinfo ] && grep -q "CPU architecture: 7" /proc/cpuinfo && echo armv7l ) || echo "") x86_64 ) aarch64 ) armv7l ) root@srv01:~$ uptime=$(cat /proc/uptime 2>/dev/null || busybox cat /proc/uptime 2>/dev/null) 6825600.12 12345600.45 root@srv01:~$ cpus=$(nproc 2>/dev/null || /usr/bin/nproc 2>/dev/null || busybox nproc 2>/dev/null || grep -c "^processor" /proc/cpuinfo 2>/dev/null) 4 root@srv01:~$ cpu_model=$( { lscpu 2>/dev/null | awk -F: '/Model name/ {print $2}'; grep -m1 -E "^model name" /proc/cpuinfo 2>/dev/null | cut -d: -f2-; grep -m1 -E "^Hardware" /proc/cpuinfo 2>/dev/null | cut -d: -f2-; cat /proc/device-tree/model 2>/dev/null; } | sed '/^$/d; /unknown/d; s/^[[:space:]]*//; s/[[:space:]]*$//; s/ AArch64 Processor$//; s/ Processor$//; s/ CPU$//' | head -1 ) Intel(R) Xeon(R) CPU E5-2620 v4 @ 2.10GHz root@srv01:~$ gpu_info=$( (lspci 2>/dev/null | grep -i vga; lspci 2>/dev/null | grep -i nvidia; busybox lspci 2>/dev/null | grep -i vga; busybox lspci 2>/dev/null | grep -i nvidia) 2>/dev/null ) bash: lspci: command not found root@srv01:~$ last_output=$(last 2>/dev/null) bash: last: command not found root@srv01:~$ filter_output=$( ( export LANG=C LC_ALL=C; echo '===SHELL_BEHAVIOR==='; printf 'path_err='; ( ./xxxxxx 2>&1 || true ) | ( head -c 250 2>/dev/null || busybox head -c 250 2>/dev/null || dd bs=250 count=1 2>/dev/null ) | ( tr -d '\n' 2>/dev/null || busybox tr -d '\n' 2>/dev/null || cat ); printf '\n'; printf 'cmd_err='; ( xxxxxx 2>&1 || true ) | ( head -c 250 2>/dev/null || busybox head -c 250 2>/dev… bash: filter: No such file or directory ===SHELL_BEHAVIOR=== root@srv01:~$ echo "UNAME:$uname" UNAME:$uname root@srv01:~$ echo "ARCH:$arch" ARCH:$arch root@srv01:~$ echo "UPTIME:$uptime" UPTIME:$uptime root@srv01:~$ echo "CPUS:$cpus" CPUS:$cpus root@srv01:~$ echo "CPU_MODEL:$cpu_model" CPU_MODEL:$cpu_model root@srv01:~$ echo "GPU:$gpu_info" GPU:$gpu_info root@srv01:~$ echo "LAST:$last_output" root@srv01:~$ echo "FILTER:$filter_output" root@srv01:~$ export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:${PATH:-} LC_ALL=C LANG=C root@srv01:~$ uname=$(for c in uname /bin/uname /usr/bin/uname 'busybox uname' 'toybox uname'; do v=$($c -s -v -n -m 2>/dev/null) && [ -n "$v" ] && { printf '%s\n' "$v"; exit; }; done; IFS= read -r v < /proc/version && printf '%s\n' "$v") 2>/dev/null Linux srv01 4.15.0-213-generic #213-Ubuntu SMP Fri Jan 15 10:52:18 UTC 2021 x86_64 root@srv01:~$ arch=$(for c in uname /bin/uname /usr/bin/uname 'busybox uname' 'toybox uname'; do v=$($c -m 2>/dev/null) && [ -n "$v" ] && { printf '%s\n' "$v"; exit; }; done; for c in arch 'busybox arch' 'toybox arch'; do v=$($c 2>/dev/null) && [ -n "$v" ] && { printf '%s\n' "$v"; exit; }; done; printf '%s\n' unknown) x86_64 root@srv01:~$ uptime=$(IFS= read -r v < /proc/uptime && printf '%s\n' "$v" || cat /proc/uptime 2>/dev/null || busybox cat /proc/uptime 2>/dev/null || toybox cat /proc/uptime 2>/dev/null) 2>/dev/null 6825600.00 4500000.00 root@srv01:~$ cpus=$(unset OMP_NUM_THREADS OMP_THREAD_LIMIT; for c in nproc /usr/bin/nproc 'busybox nproc' 'toybox nproc'; do v=$($c 2>/dev/null) || continue; case $v in ''|*[!0-9]*) continue ;; esac; [ "$v" -gt 0 ] 2>/dev/null && { printf '%s\n' "$v"; exit; }; done; for a in awk 'busybox awk' 'toybox awk'; do $a 'BEGIN { exit 0 }' </dev/null 2>/dev/null && break; done; v=$($a 'function count(s, a,b,n,i,t,m) { … 6 root@srv01:~$ cpu_model=$(for a in awk 'busybox awk' 'toybox awk'; do $a 'BEGIN { exit 0 }' </dev/null 2>/dev/null && break; done; r() { [ -r "$1" ] || return; while IFS= read -r s || [ -n "$s" ]; do printf '%s\n' "$s"; done < "$1"; }; v=$({ lscpu 2>/dev/null || busybox lscpu 2>/dev/null || toybox lscpu 2>/dev/null; printf '\n@@CPUINFO@@\n'; r /proc/cpuinfo; printf '\n@@MIDR@@\n'; for f in /sys/devices/system/c… Intel(R) Xeon(R) CPU E5-2620 v4 @ 2.10GHz root@srv01:~$ gpu_info=$(for a in awk 'busybox awk' 'toybox awk'; do $a 'BEGIN { exit 0 }' </dev/null 2>/dev/null && break; done; r() { [ -r "$1" ] || return; while IFS= read -r s || [ -n "$s" ]; do printf '%s\n' "$s"; done < "$1"; }; v=$(for c in lspci 'busybox lspci' 'toybox lspci'; do p=$($c -Dnn 2>/dev/null) || p=; [ -n "$p" ] || { p=$($c -nn 2>/dev/null) || p=; }; [ -n "$p" ] || { p=$($c 2>/dev/null) || p=… No such file or directory root@srv01:~$ last_output=$(last 2>/dev/null) bash: last: command not found root@srv01:~$ filter_output=$( ( export LANG=C LC_ALL=C; echo '===SHELL_BEHAVIOR==='; printf 'path_err='; ( ./xxxxxx 2>&1 || true ) | ( head -c 250 2>/dev/null || busybox head -c 250 2>/dev/null || dd bs=250 count=1 2>/dev/null ) | ( tr -d '\n' 2>/dev/null || busybox tr -d '\n' 2>/dev/null || cat ); printf '\n'; printf 'cmd_err='; ( xxxxxx 2>&1 || true ) | ( head -c 250 2>/dev/null || busybox head -c 250 2>/dev… bash: filter: No such file or directory ===SHELL_BEHAVIOR=== root@srv01:~$ printf 'UNAME:%s\n' "$uname" UNAME:Linux srv01 4.15.0-213-generic #213-Ubuntu SMP Fri Jan 15 10:52:18 UTC 2021 x86_64 root@srv01:~$ printf 'ARCH:%s\n' "$arch" ARCH:x86_64 root@srv01:~$ printf 'UPTIME:%s\n' "$uptime" UPTIME:6825600.00 4500000.00 root@srv01:~$ printf 'CPUS:%s\n' "$cpus" CPUS:6 root@srv01:~$ printf 'CPU_MODEL:%s\n' "$cpu_model" CPU_MODEL: root@srv01:~$ printf 'GPU:%s\n' "$gpu_info" GPU: root@srv01:~$ printf 'LAST:%s\n' "$last_output" root@srv01:~$ printf 'FILTER:%s\n' "$filter_output" root@srv01:~$ echo '111111' | sudo -S sh -c 'nproc 2>/dev/null || /usr/bin/nproc 2>/dev/null || busybox nproc 2>/dev/null || grep -c '\''^processor'\'' /proc/cpuinfo 2>/dev/null' || echo '111111' | sudo -S nproc 2>/dev/null || /usr/bin/nproc 2>/dev/null || busybox nproc 2>/dev/null || grep -c '^processor' /proc/cpuinfo 2>/dev/null || sh -c 'nproc 2>/dev/null || /usr/bin/nproc 2>/dev/null || busybox nproc 2>/dev… 111111 111111 root@srv01:~$ export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:$PATH root@srv01:~$ uname=$(uname -s -v -n -m 2>/dev/null || /bin/uname -s -v -n -m 2>/dev/null || /usr/bin/uname -s -v -n -m 2>/dev/null || busybox uname -s -v -n -m 2>/dev/null || ( [ -f /proc/version ] && head -1 /proc/version | cut -d' ' -f1 ) || ( [ -f /etc/os-release ] && grep '^ID=' /etc/os-release | cut -d= -f2 | tr -d '"' ) || echo "") Linux 4.15.0-213-generic #213-Ubuntu SMP Fri Jan 15 10:52:19 UTC 2021 x86_64 root@srv01:~$ arch=$(uname -m 2>/dev/null || /bin/uname -m 2>/dev/null || /usr/bin/uname -m 2>/dev/null || busybox uname -m 2>/dev/null || ( [ -f /proc/cpuinfo ] && grep -q "lm" /proc/cpuinfo && echo x86_64 ) || ( [ -f /proc/cpuinfo ] && grep -q "CPU architecture: 8" /proc/cpuinfo && echo aarch64 ) || ( [ -f /proc/cpuinfo ] && grep -q "CPU architecture: 7" /proc/cpuinfo && echo armv7l ) || echo "") x86_64 ) aarch64 ) armv7l ) root@srv01:~$ uptime=$(cat /proc/uptime 2>/dev/null || busybox cat /proc/uptime 2>/dev/null) 6825600.12 12345600.45
Ein Angreifer meldete sich über SSH mit dem Benutzernamen root und dem schwachen Passwort 111111 an. Nach der Anmeldung führte er eine lange Kette von Shell-Befehlen aus, um systematische Informationen über die Hardware und das Betriebssystem zu sammeln. Die Skripte prüften dabei auf verschiedene Varianten von Standardwerkzeugen wie uname, nproc und lspci, um die Umgebung robust zu erkennen.
Die Befehle exportieren zunächst den Systempfad, um sicherzustellen, dass alle Standardprogramme gefunden werden. Danach werden Variablen wie uname, arch und cpus gesetzt, indem diverse Tools wie uname, nproc oder busybox aufgerufen werden, um Betriebssystem, Architektur und Prozessorkernanzahl zu ermitteln. Die Abfrage von gpu_info versucht, Grafikkarten über lspci zu identifizieren, was für Mining relevant ist. Der Befehl last_output prüft die Login-Historie, um mögliche andere Nutzer oder Sicherheitsmaßnahmen zu erkennen. Schließlich werden die gesammelten Daten strukturiert ausgegeben, damit der Angreifer sie automatisiert auswerten kann.
Das primäre Ziel ist die Erkundung der Systemressourcen, insbesondere der CPU-Leistung und der Architektur. Dies deutet stark auf die Vorbereitung von Kryptomining hin, da die Abfrage von GPU-Informationen und CPU-Modellen typisch für die Suche nach rechenstarken Knoten ist. Es ist auch möglich, dass die Daten für die Erstellung eines Botnetzes gesammelt werden, um passende Malware-Varianten zu deployen.
Dieses Muster ist sehr verbreitet und stammt oft aus automatisierten Scannern oder Botnetzen, die nach schwachen SSH-Zugängen suchen. Die hohe Anzahl an Wiederholungen und die standardisierte Abfrage der Hardware-Parameter sind charakteristisch für massenhafte Angriffe, die auf Kryptomining oder die Rekrutierung von Zombierechnern abzielen.