ALLSmartSecurity
Mitschnitt

SSH-Angriff aus Andorra: BusyBox-Ausbruch und Hardware ausspähen

30.09.2026, 00:12 UTC · 385 Befehle · über ssh · Andorra

Überblick

Dienst
ssh (Port 22)
Herkunft
Andorra · TECHOFF SRV LIMITED
Probierte Zugangsdaten
root / 123

Der Angriff, nachgespielt

echter Mitschnitt unserer Fake-Shell; die Antworten sind erfunden, ausgefuehrt wurde nie etwas
root@srv01: ~

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 5.10.103-v7l+ #1 SMP Wed Jun 24 14:21:04 BST 2020 octopi armv7l
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)
221.45 1890.23
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 )
ARMv7 Processor rev 3 (v7l)
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 octopi 5.10.103-v7l+ #1373 SMP Mon Jan 23 13:53:32 GMT 2023 armv7l
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)
armv7l
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
19142400.00 19142400.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) { …
4
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…
ARMv7 Processor rev 3 (v7l)
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=…
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 octopi 5.10.103-v7l+ #1373 SMP Mon Jan 23 13:53:32 GMT 2023 armv7l
root@srv01:~$ printf 'ARCH:%s\n' "$arch"
ARCH:armv7l
root@srv01:~$ printf 'UPTIME:%s\n' "$uptime"
UPTIME:19142400.00 19142400.00
root@srv01:~$ printf 'CPUS:%s\n' "$cpus"
CPUS:4
root@srv01:~$ printf 'CPU_MODEL:%s\n' "$cpu_model"
CPU_MODEL:ARMv7 Processor rev 3 (v7l)
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 '123' | 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 '123' | 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/null …
123
123
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 5.10.103-v7l+ #1 SMP Wed Jun 24 14:21:04 BST 2020 octopi armv7l
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)
221.45 1890.23

Was hier passiert ist

automatisch erstellte Einschätzung, keine Gewähr

Was versucht wurde

Ein Angreifer meldete sich über SSH mit schwachen Zugangsdaten (root/123) an. Er führte eine umfangreiche Sequenz von 385 Befehlen aus, um das System zu identifizieren. Dabei wurden Hardware-Informationen wie CPU, GPU und Architektur sowie die Shell-Umgebung detailliert abgefragt.

Was die Befehle bewirken

Die Befehle setzen die PATH-Variable neu, um Standard-Binaries zu finden. Sie ermitteln Systemdetails wie Kernel-Version, Architektur und CPU-Kerne durch diverse Fallback-Methoden, um auch auf minimalen Systemen (Busybox, Toybox) zu funktionieren. Die GPU-Abfrage prüft auf NVIDIA-Karten, was für Mining relevant ist. Der Filter-Test prüft das Verhalten der Shell bei unbekannten Befehlen, um die Umgebung zu fingerprinten.

Worauf es hinauslief

Das Ziel ist vermutlich die Rekrutierung des Systems für ein Botnetz oder Kryptomining. Die intensive Abfrage von CPU-Modell, GPU und Architektur deutet darauf hin, dass der Angreifer die Rechenleistung für Mining-Aufgaben oder die Kompatibilität für Schadsoftware prüfen will. Es handelt sich um eine Reconnaissance-Phase vor der eigentlichen Infektion.

Einordnung

Dieses Muster ist sehr verbreitet bei automatisierten Scannern, die nach verwundbaren IoT-Geräten oder schwach gesicherten Servern suchen. Die Kombination aus schwachen Passwörtern und detaillierter Hardware-Abfrage ist typisch für Botnetze wie Mirai-Varianten oder Mining-Bots.