termineter

Framework de test de sécurité pour smart grid / smart meter. Teste les dispositifs AMI (Advanced Metering Infrastructure) via des interfaces optiques/série en utilisant les protocoles ANSI C12.18 et C12.19. Smart grid / smart meter security testing framework. Tests AMI (Advanced Metering Infrastructure) devices over optical/serial interfaces using the ANSI C12.18 and C12.19 protocols.

↗ https://github.com/rsmusllp/termineter

Overview

Termineter is a framework for testing smart meters and AMI infrastructure. It communicates over optical (IR) and serial interfaces using the ANSI C12.18/C12.19/C12.22 protocols to enumerate, read, and write meter tables — allowing security researchers to assess smart meter vulnerabilities.

Installation

git clone https://github.com/rsmusllp/termineter
cd termineter
pip3 install -r requirements.txt
python3 termineter

Basic Usage

Launch interactive framework

python3 termineter
# Connect to meter (optical probe on /dev/ttyUSB0)
termineter > set CONNECTION /dev/ttyUSB0
termineter > connect

List modules

termineter > modules
# Get module info
termineter > use modules/read_table
termineter > info

Core Modules

# Read basic meter info
termineter > use modules/get_info
termineter > run

# Read meter tables
termineter > use modules/read_table
termineter > set TABLE_ID 1      # ANSI table ID
termineter > run

Write to tables (destructive — use with caution)

termineter > use modules/write_table
# Enumerate all readable tables
termineter > use modules/enum_tables
termineter > run

# Get configuration data
termineter > use modules/get_configuration
termineter > run

# Test login bypass
termineter > use modules/bruteforce_login
termineter > run

Connection Configuration

# Set connection parameters
termineter > set CONNECTION /dev/ttyUSB0
termineter > set BAUD 9600
termineter > set BYTE_SIZE 8
termineter > set STOP_BITS 1
termineter > set PARITY none

Connect

termineter > connect

Show connection status

termineter > show options

Hardware Requirements

# ANSI C12.18 optical probe (IR interface)
# → Clamps onto meter display window
# → Connects via USB serial adapter

# Or direct serial connection (RS-232/RS-485)
# → Some meters have exposed serial ports

# Common probe: "Optical Probe" / "USB-Optical Probe ANSI C12.18"

What You Can Extract

# Table 0-127: Standard ANSI tables
# Table 0: General configuration
# Table 1: General manufacturer identification  
# Table 3: End device mode/status
# Table 12: Units of measurement
# Table 13: Demand control
# Table 15: Constants
# Table 20-27: Actual register data (consumption)
# Table 62-64: Log entries (tamper history)

Tips

  • Physical access to the meter is required — IR/optical interface is on the front
  • Some meters respond on multiple communication methods — try optical, then serial
  • ANSI C12.18 is the local optical protocol; C12.22 is the network protocol (RF/cellular)
  • Reading tables is generally safe; WRITING tables can affect billing or disable the meter
  • Document all findings and get explicit permission before testing grid-connected meters
Help / Man page
Termineter shell commands:

connect          Connect to device
disconnect       Disconnect
use MODULE       Select module
set KEY VALUE    Set option
show options     Show current options
run              Run selected module
modules          List available modules
info             Show module info
help             Show help
exit             Exit Termineter

Vue d’ensemble

Termineter est un framework pour tester les smart meters et l’infrastructure AMI. Il communique via des interfaces optiques (IR) et série en utilisant les protocoles ANSI C12.18/C12.19/C12.22 pour énumérer, lire et écrire les tables des compteurs, ce qui permet aux chercheurs en sécurité d’évaluer les vulnérabilités des smart meters.

Installation

git clone https://github.com/rsmusllp/termineter
cd termineter
pip3 install -r requirements.txt
python3 termineter

Utilisation de base

python3 termineter
# Se connecter au compteur (sonde optique sur /dev/ttyUSB0)
termineter > set CONNECTION /dev/ttyUSB0
termineter > connect
termineter > modules
# Obtenir les infos du module
termineter > use modules/read_table
termineter > info

Modules principaux

# Lire les infos de base du compteur
termineter > use modules/get_info
termineter > run

# Lire les tables du compteur
termineter > use modules/read_table
termineter > set TABLE_ID 1      # ID de table ANSI
termineter > run

Écrire dans des tables (destructif : à utiliser avec prudence)

termineter > use modules/write_table
# Énumérer toutes les tables lisibles
termineter > use modules/enum_tables
termineter > run

# Obtenir les données de configuration
termineter > use modules/get_configuration
termineter > run

# Tester le contournement de login
termineter > use modules/bruteforce_login
termineter > run

Configuration de la connexion

# Définir les paramètres de connexion
termineter > set CONNECTION /dev/ttyUSB0
termineter > set BAUD 9600
termineter > set BYTE_SIZE 8
termineter > set STOP_BITS 1
termineter > set PARITY none
termineter > connect

Afficher le statut de la connexion

termineter > show options

Prérequis matériel

# Sonde optique ANSI C12.18 (interface IR)
# → Se fixe sur la fenêtre d'affichage du compteur
# → Se connecte via un adaptateur série USB

# Ou connexion série directe (RS-232/RS-485)
# → Certains compteurs ont des ports série exposés

# Sonde courante : "Optical Probe" / "USB-Optical Probe ANSI C12.18"

Ce qui peut être extrait

# Table 0-127 : tables ANSI standard
# Table 0 : configuration générale
# Table 1 : identification générale du fabricant
# Table 3 : mode/statut du terminal
# Table 12 : unités de mesure
# Table 13 : contrôle de la demande
# Table 15 : constantes
# Table 20-27 : données de registre réelles (consommation)
# Table 62-64 : entrées de journal (historique de sabotage)

Conseils

  • Un accès physique au compteur est requis : l’interface IR/optique se trouve sur la face avant
  • Certains compteurs répondent sur plusieurs méthodes de communication : essayer d’abord l’optique, puis le série
  • ANSI C12.18 est le protocole optique local ; C12.22 est le protocole réseau (RF/cellulaire)
  • Lire les tables est généralement sûr ; ÉCRIRE dans les tables peut affecter la facturation ou désactiver le compteur
  • Documenter toutes les découvertes et obtenir une autorisation explicite avant de tester des compteurs connectés au réseau électrique
Aide / Page de manuel
Termineter shell commands:

connect          Connect to device
disconnect       Disconnect
use MODULE       Select module
set KEY VALUE    Set option
show options     Show current options
run              Run selected module
modules          List available modules
info             Show module info
help             Show help
exit             Exit Termineter