tusksm
Joined 3 years ago
Joined 3 years ago
I did find at least one campaign that went further: it tried to fetch `http://41.216.189.157/run.sh` with wget or curl, execute it, and remove the script afterward. The downloader referenced payloads for aarch64, i386, loongarch64, and m68k, so it appears to be targeting a fairly broad set of Linux systems.
I haven't fully analyzed the artifacts yet, so I can't say exactly what service or payload it ultimately installs. But it was definitely doing more than adding a key.
This also exposed a weakness in the current UI: repetitive persistence attempts are prominent, while rarer download and execution chains are easy to miss.
I'm already working on truncating long values and grouping events by source. The next step will probably be rate limiting noisy sources and separating likely human test traffic from recurring automated behavior.
The recurring bot patterns are the part I ultimately want the interface to surface, rather than forcing visitors to inspect every raw event.
I maintain several web servers and kept seeing a constant stream of SSH login attempts. At some point I became curious: what do these bots actually try to do after they get in?
I set up a Cowrie SSH honeypot and built a small live dashboard around its JSON logs. Cowrie listens on port 22, a Python service follows the log and streams events over WebSockets, and Nginx serves the frontend. The whole thing currently runs on a 1 vCPU / 1 GB Debian VPS.
The dashboard groups activity by source IP, with individual SSH sessions nested underneath. It shows authentication attempts, commands, SSH client fingerprints, file writes and downloads, and tunneling requests in real time.
Initially I thought the interesting part would be simply watching commands appear. After looking at the collected data, I realized that recurring behavior is much more interesting than individual events.
In one roughly 8-hour sample, the honeypot recorded about 1,950 sessions from 213 source IPs. 327 sessions reached command execution.
Some recurring patterns included:
- the same SSH public key being installed 152 times from 11 source IPs - a system fingerprinting script that appears designed to distinguish a real shell from a honeypot - a downloader requesting payloads for several CPU architectures - attempts to use SSH forwarding as a proxy - distributed credential probes that connect, test one value, and immediately disconnect
This also showed me that grouping activity only by IP isn't enough. Several apparently different sources can use the same SSH client fingerprint, command sequence, public key, or downloaded artifact and probably belong to the same automated campaign.
At the moment this is primarily a live log viewer. Some directions I am considering are:
- automatic classification of sessions as scanning, credential probing, reconnaissance, persistence, downloading, or tunneling - clustering activity into campaigns using HASSH fingerprints, command sequences, SSH keys, and artifact hashes - historical statistics and searchable sessions - support for multiple distributed honeypot sensors - publishing the collector and dashboard code
The public stream currently includes source IPs, attempted credentials, and commands. I added a notice explaining that an IP may belong to a compromised machine, proxy, VPN, or scanner, but I am still thinking through the privacy and responsible-disclosure tradeoffs.
Cowrie's "login.success" events only mean that the honeypot accepted the credentials; they don't mean those credentials would work on a real server.
I'm trying to decide whether this should remain a simple live visualization or grow into a small analysis tool.
Which direction would make this project most useful or interesting to you? Are there other patterns or types of analysis that would be worth adding?