Cybercriminals have been running cryptocurrency attacks on hijacked machines for some time, finding it more profitable than ransomware. Now however, malware authors have found a new way to take their nefarious actions into the cloud and bypass the need for hijacking individual computers.
Reports have surfaced of attempts to run mining activities on Docker and Kubernetes systems. At the start of 2018, Sysdig researchers found that the Kubernetes instances on their honeypot servers were being attacked, with the aim of creating Docker containers that would mine Bitcoin.
Sysdig saw that the attacker created a container that mounted /etc/ from the host filesystem to /mnt/etc/ inside the container.
Then, by writing to files below /mnt/etc/ inside the container, they can write to files below /etc on the host. They were writing to /etc/crontab, which then downloaded a file every minute and then ran as a bash script. That script would kill any competing mining programs and install its own Bitcoin miner which used all of the host machine's available cores.
A similar attack scheme was noted by Aqua Security and explained on its blog. The effective difference between the two events was Aqua noted Monero mining occurring on net-exposed Docker containers that were not bounded by Kubernetes.
The unanswered question in all of this was how a Kubernetes instance -- such as Sysdig had running -- could be breached to allow the mining to happen.
It took Alexander Urcioli, senior security engineer at Handy HQ, to connect the dots.
Urcioli discovered that on a co-worker's machine an attacker ran commands on a Kubernetes instance without authentication, something that should not have happened. He wrote on Medium that he discovered a misconfiguration in how Kubernetes was deployed that had startling effects.
Specifically, Urcioli knew the Kubernetes api-server was publicly exposed to the Internet but was protected with certificate authentication. He realized that:
Unless you specify some flags on Kubelet, it's default mode of operation is to accept unauthenticated API requests. Keep in mind that in order for master -> node communication to work, the Kubernetes API server must be able to talk to kubelet on your nodes.
The co-worker's server had mistakenly been configured to allow the public exposing of the kubelet ports (tcp 10250, tcp 10255) to the net. That meant the attacker could access them as use the kubelet API as a backdoor into the cluster.
And now the reason the attack worked at all seems far less mysterious. The kubelet has to be locked down, or it will let almost anything get in. This has to be done explicitly, because it doesn't happen by default.
Configuration issues are being realized as a major security issue of late. Recent configuration problems in Amazon S3 containers have left private information publicly accessible, for example. Security professionals will need to pay attention to the details of configuration or pay the price in Monero.
— Larry Loeb has written for many of the last century's major "dead tree" computer magazines, having been, among other things, a consulting editor for BYTE magazine and senior editor for the launch of WebWeek.