ALLSmartSecurity
Mitschnitt

SSH-Angriff aus Andorra: BusyBox-Ausbruch und Ausbruch in eine Shell

18.10.2026, 16:32 UTC · 610 Befehle · über ssh · Andorra

Überblick

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

Der Angriff, nachgespielt

echter Mitschnitt unserer Fake-Shell; die Antworten sind erfunden, ausgeführt 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 "")
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 "")
root@srv01:~$ uptime=$(cat /proc/uptime 2>/dev/null || busybox cat /proc/uptime 2>/dev/null)
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)
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 )
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 )
root@srv01:~$ last_output=$(last 2>/dev/null)
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: xxxxxx: command not found
bash: xxxxxx: command not found
root@srv01:~$ case "$out" in *xxxxxx*); *) out=$(/usr/bin/bash -c 'printf "#!/bin/bash\necho \"xxxxxx\"\n" > filter && chmod +x filter && ./filter && rm -rf filter' 2>&1); case "$out" in *xxxxxx*); *) out=$(busybox sh -c 'printf "#!/bin/sh\necho \"xxxxxx\"\n" > filter && chmod +x filter && ./filter && rm -rf filter' 2>&1 || sh -c 'printf "#!/bin/sh\necho \"xxxxxx\"\n" > filter && chmod +x filter && ./filter && …
bash: xxxxxx: command not found
root@srv01:~$ esac
bash: xxxxxx: command not found
root@srv01:~$ esac
bash: xxxxxx: command not found
root@srv01:~$ printf '%s' "$out" | ( 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 )
bash: xxxxxx: command not found
root@srv01:~$ printf '\n'
bash: xxxxxx: command not found
root@srv01:~$ echo '===DONE===' ) 2>&1 )
bash: syntax error near unexpected token `)'
root@srv01:~$ echo "UNAME:$uname"
root@srv01:~$ echo "ARCH:$arch"
root@srv01:~$ echo "UPTIME:$uptime"
root@srv01:~$ echo "CPUS:$cpus"
root@srv01:~$ echo "CPU_MODEL:$cpu_model"
root@srv01:~$ echo "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 app-prod 4.15.0-213-generic #213-Ubuntu SMP Fri Mar 18 05:53:42 UTC 2022 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)
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
27240000.00 31500000.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
bash: syntax error near unexpected token `fi'
root@srv01:~$ esac
bash: xxxxxx: command not found
root@srv01:~$ [ "$v" -gt 0 ] 2>/dev/null && { printf '%s\n' "$v"; exit; }
bash: syntax error near unexpected token `fi'
root@srv01:~$ done
bash: -c: line 6: syntax error near unexpected token `done'
root@srv01:~$ for a in awk 'busybox awk' 'toybox awk'; do $a 'BEGIN { exit 0 }' </dev/null 2>/dev/null && break; done
bash: syntax error near unexpected token `done'
root@srv01:~$ v=$($a 'function count(s, a,b,n,i,t,m) { gsub(/[[:space:]]/,"",s); n=split(s,a,","); for(i=1;i<=n;i++) { if(a[i]!~/^[0-9]+(-[0-9]+)?$/) return 0; m=split(a[i],b,"-"); if(m==2 && b[2]+0<b[1]+0) return 0; t+=(m==2?b[2]-b[1]+1:1) } return t } BEGIN { while((getline s < "/proc/self/status")>0) if(s~/^Cpus_allowed_list:/) { sub(/^[^:]*:/,"",s); n=count(s); if(n>0) { print n; exit } } }' 2>/dev/null)
root@srv01:~$ [ -n "$v" ] && { printf '%s\n' "$v"; exit; }
bash: syntax error near unexpected token `printf'
root@srv01:~$ for c in getconf 'busybox getconf' 'toybox getconf'; do v=$($c _NPROCESSORS_ONLN 2>/dev/null) || continue; case $v in ''|*[!0-9]*) continue; esac; [ "$v" -gt 0 ] 2>/dev/null && { printf '%s\n' "$v"; exit; }; done
bash: syntax error near unexpected token `fi'
root@srv01:~$ v=$($a 'BEGIN { if((getline s < "/sys/devices/system/cpu/online")>0 && s~/^[0-9]+(-[0-9]+)?(,[0-9]+(-[0-9]+)?)*$/) { k=split(s,a,","); for(i=1;i<=k;i++) { m=split(a[i],b,"-"); if(m==2 && b[2]+0<b[1]+0) { n=0; break } n+=(m==2?b[2]-b[1]+1:1) } if(n>0) { print n; exit } } while((getline s < "/proc/cpuinfo")>0) { if(s~/^[[:space:]]*processor[[:space:]]*:[[:space:]]*[0-9]+[[:space:]]*$/ || s~/^[[:spac…
root@srv01:~$ printf '%s\n' "${v:-unknown}")
bash: syntax error near unexpected token `printf'
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…
bash: syntax error near unexpected token `('
root@srv01:~$ processor) case "$x" in *[!0-9]*)

Was hier passiert ist

automatisch erstellte Einschätzung, keine Gewähr

Was versucht wurde

Ein Angreifer meldete sich über SSH mit dem Benutzer root und dem schwachen Passwort 000000 an. Anschließend führte er eine umfangreiche Skriptsequenz aus, um systemweite Informationen wie Kernel-Version, Architektur, CPU-Details und GPU-Informationen zu sammeln. Das Skript testete zudem die Shell-Umgebung auf Filtermechanismen und sammelte Daten zur Systemlast und letzten Anmeldungen.

Was die Befehle bewirken

Der Befehl export PATH setzt die Suchpfade für ausführbare Dateien, um sicherzustellen, dass Standard-Tools gefunden werden. Die Variablen uname, arch und cpus werden durch komplexe Ketten von Befehlen gefüllt, die verschiedene Tools wie uname, nproc oder busybox abwechselnd aufrufen, um die Systemarchitektur und die Anzahl der Prozessoren zu ermitteln. Die Variable gpu_info nutzt lspci, um PCI-Geräte zu listen und nach VGA- oder NVIDIA-Grafikkarten zu filtern, was auf die Suche nach Rechenleistung für Mining hindeutet. Der Abschnitt filter_output testet die Shell auf Eingabefilter, indem er versucht, eine nicht existierende Datei xxxxxx auszuführen und die Fehlermeldung zu analysieren. Die Ausgabe wird am Ende strukturiert mit echo-Befehlen ausgegeben, um die gesammelten Metadaten an den Angreifer zurückzusenden.

Worauf es hinauslief

Das primäre Ziel ist die Reconnaissance, also die Aufklärung des Systems vor einem potenziellen Folgeangriff. Die detaillierte Abfrage von Hardware-Ressourcen wie CPU-Kernen und GPUs deutet stark auf die Vorbereitung von Kryptomining hin, da diese Ressourcen für Mining-Arbeitsschritte benötigt werden. Es ist auch möglich, dass die Daten zur Identifikation verwundbarer Systeme für Botnetz-Rekrutierung dienen, wobei der Fokus auf der Hardware-Erkennung liegt.

Einordnung

Dieses Verhalten ist typisch für automatisierte Scanner, die nach kompromittierten Systemen mit spezifischen Hardware-Profilen suchen. Die Kombination aus Brute-Force-Anmeldungen und detaillierter Hardware-Abfrage ist ein häufiges Muster im Bereich der Kryptomining-Botnetze.