Listen to this Post

Introduction:
Operational Technology (OT) security often feels abstract until you realize that a simple internet scan can pinpoint the physical location of a fuel station’s tank controller. This article explores the discovery of exposed Automatic Tank Gauges (ATGs) in Germany—systems responsible for monitoring fuel levels and leak detection—that were inadvertently connected to the public internet, allowing anyone to access technician consoles via TELNET. We will dissect how security researchers use Shodan and OSINT to identify these critical infrastructure vulnerabilities, providing a hands-on guide to replicating the discovery process for educational purposes and implementing mitigations to prevent such exposures.
Learning Objectives:
- Understand how to utilize Shodan to identify exposed OT devices, specifically Automatic Tank Gauges (ATGs).
- Apply OSINT techniques to geolocate exposed industrial controllers and verify their physical context.
- Learn the technical steps to assess and harden network interfaces on industrial equipment to prevent unauthorized TELNET access.
You Should Know:
1. Discovering Exposed Industrial Controllers with Shodan
The first step in identifying vulnerable OT assets is leveraging search engines for the Internet of Things (IoT). Shodan is the primary tool for this task, as it indexes banners from internet-facing devices. In the context of the fuel station controllers discussed in the OT Security Sunday session, the process begins with crafting specific search queries to filter for Automatic Tank Gauges.
To replicate this discovery ethically and legally (only on your own assets or in controlled lab environments), you can use the following methodology:
Linux Command (Shodan CLI):
If you have the Shodan command-line interface installed, you can search for ATG devices using specific keywords or port signatures.
Install Shodan CLI pip install shodan Initialize with your API key shodan init YOUR_API_KEY Search for devices commonly associated with ATG systems shodan search --limit 10 --fields ip_str,port,org,hostnames "ATG" "Veeder-Root" "TLS-300" port:23 Alternative search for TELNET-enabled industrial controllers shodan search --limit 10 "port:23 fuel tank"
Windows Alternative (Using PowerShell and Web Request):
While the CLI is preferred, you can interact with the Shodan API directly using PowerShell to parse results.
Set your API Key $apiKey = "YOUR_API_KEY" $query = "ATG port:23" Make API request $response = Invoke-RestMethod -Uri "https://api.shodan.io/shodan/host/search?key=$apiKey&query=$query" $response.matches | Select-Object -First 5 | Format-Table ip_str, port, org -AutoSize
Step-by-Step Guide:
- Identify Target Keywords: Start with known brands like “Veeder-Root,” “TLS-300,” or “Tank Gauging.” These are common in fuel stations.
- Refine by Port: Most technician consoles were exposed over TELNET (port 23) or HTTP (port 80/8080). Use `port:23` to narrow results.
- Geolocation Filtering: Add `country:DE` to focus on a specific region (e.g., Germany) to match the original research.
- Analyze Banners: Shodan often captures banners that reveal the device model, firmware version, or even a login prompt. Look for strings like “User Access Verification” or “Tank Gauge.”
2. Confirming Physical Location via OSINT
Once an IP address is identified, the next step is confirming that the device is indeed a physical fuel station controller rather than a honeypot or misclassified server. OSINT techniques bridge the gap between a digital footprint and a physical asset.
Tools Required:
- IP Geolocation Databases: Use `curl` or online services to get approximate coordinates.
- Google Maps/Street View: To visually confirm the location.
- Certificates/DNS: Sometimes SSL certificates or reverse DNS records reveal the organization’s name.
Linux Commands for OSINT Validation:
Perform a whois lookup on the IP to find the ISP or organization whois 192.0.2.1 | grep -i "orgname|descr" Trace the route to get network context traceroute -n 192.0.2.1 If port 80/443 is open, grab the certificate for organization details echo | openssl s_client -connect 192.0.2.1:443 -servername 192.0.2.1 2>/dev/null | openssl x509 -noout -issuer -subject
Step-by-Step Guide:
- Extract Coordinates: Use `curl` to query a free API like ip-api.com.
curl http://ip-api.com/json/192.0.2.1
This returns latitude and longitude.
- Cross-Reference: Open a browser and navigate to Google Maps. Enter the coordinates.
- Visual Analysis: Switch to Street View if available. Look for visual indicators: fuel station branding (Aral, Shell, Esso), fuel pumps, or the typical canopy structure.
- Cross-Validate with Shodan Images: If the device runs a web server, Shodan might have taken a screenshot. Compare the screenshot’s UI with known technician console interfaces to ensure it’s an ATG and not a honeypot.
3. Network Verification and Banner Grabbing
Before concluding a vulnerability exists, it is crucial to verify that the device is reachable and that the service is indeed active. This step involves using Nmap (Network Mapper) to perform banner grabbing without exploiting the system.
Linux Command (Nmap Scripting Engine):
Perform a stealthy scan on the specific IP and port nmap -sV -p 23 --script telnet-brute --script-args userdb=/tmp/users.txt,passdb=/tmp/pass.txt 192.0.2.1 To simply grab the banner without brute-forcing nmap -sV -p 23 --script=banner 192.0.2.1
Windows Command (Using Telnet Client):
To manually verify the TELNET service if it is exposed:
Enable Telnet client in Windows Features if not already Open Command Prompt telnet 192.0.2.1 23
If a login prompt appears (e.g., “Username:”), the device is exposed. The OT Security Sunday session highlighted that many of these systems require no exploit; they simply accept default credentials or have no authentication set on the technician console.
Mitigation Strategy:
If you manage such systems, verifying exposure is the first step to hardening. The following commands (simulated for network administrators) show how to block access:
Linux iptables: Block all external TELNET access sudo iptables -A INPUT -p tcp --dport 23 -j DROP Cisco IOS (if the device is a managed switch/router) access-list 100 deny tcp any any eq telnet access-list 100 permit ip any any
For industrial controllers, the correct mitigation involves isolating the management VLAN, implementing firewall rules to allow only specific management workstations, or disabling TELNET entirely in favor of SSH or physical serial connections.
4. Deploying Honeypots and Monitoring
The original post and comments noted a prevalence of honeypots in Shodan results. Setting up a honeypot is an advanced technique to detect attackers scanning for these vulnerabilities. A tool like Cowrie (a medium-interaction SSH/TELNET honeypot) can be deployed to simulate an ATG and log malicious activity.
Linux Command (Setting up Cowrie):
Update system and install dependencies sudo apt update && sudo apt install git python3-virtualenv -y Clone Cowrie git clone http://github.com/cowrie/cowrie cd cowrie Setup virtual environment and install virtualenv --python=python3 cowrie-env source cowrie-env/bin/activate pip install -r requirements.txt Copy configuration and start cp cowrie.cfg.dist cowrie.cfg Edit cowrie.cfg to change hostname to mimic "Veeder-Root" or "Tank Gauge" ./bin/cowrie start
Once running, Cowrie listens on port 22/23. Any interaction will be logged, providing threat intelligence on what commands attackers attempt to run (e.g., ps, ls, or attempting to dump inventory data).
5. AI-Driven Automation in Reconnaissance
The comment by Mohammed Seifu Kemal highlights a critical trend: AI is lowering the barrier for reconnaissance. Automating the Shodan search and OSINT cross-referencing can be done using simple Python scripts that leverage AI libraries for image recognition (to confirm fuel stations from satellite images) or for parsing natural language from device banners.
Python Automation Script:
import shodan
import requests
Shodan API key
SHODAN_API_KEY = "YOUR_API_KEY"
api = shodan.Shodan(SHODAN_API_KEY)
Search query
query = "ATG port:23 country:DE"
try:
results = api.search(query)
for result in results['matches']:
ip = result['ip_str']
print(f"Found: {ip}")
OSINT enrichment
try:
geo = requests.get(f"http://ip-api.com/json/{ip}").json()
if geo['status'] == 'success':
print(f"Location: {geo['lat']}, {geo['lon']} - {geo['city']}")
Here you could integrate AI to check if coordinates align with gas stations
except:
pass
except Exception as e:
print(f"Error: {e}")
What Undercode Say:
- Visibility is the First Defense: The discovery of these ATGs underscores that organizations often have no asset inventory of their internet-facing OT. Regular Shodan monitoring should be a standard cybersecurity hygiene practice.
- Fundamentals Still Matter: High-tech attacks are rare; misconfigurations and default credentials are the norm. The exposure of technician consoles over TELNET without authentication is a failure of basic network isolation and access control, emphasizing that the “fundamentals” mentioned in the comments are still the most critical vulnerabilities.
Prediction:
As AI-powered reconnaissance tools become more sophisticated, the time between a new OT device being connected to the internet and its exploitation will shrink dramatically. We will likely see a shift toward “Shodan-as-a-Service” for defensive teams, where AI agents continuously scan for exposed assets and automatically trigger network segmentation policies. Regulatory bodies may soon mandate that all ATGs and similar critical infrastructure components be invisible to public internet scans, moving toward a Zero Trust architecture for OT environments where no device is trusted by default.
▶️ Related Video (72% Match):
🎯Let’s Practice For Free:
IT/Security Reporter URL:
Reported By: Marcelrickcen Otsecurity – Hackers Feeds
Extra Hub: Undercode MoN
Basic Verification: Pass ✅


