Pular para o conteúdo
Skillpedia
Agentes35 mil · #5687

detecting-modbus-command-injection-attacks

Faz seu agente detectar injeções de comando em ambientes Modbus TCP/RTU. Monitora escritas não autorizadas e códigos de função anômalos em redes industriais (ICS/SCADA).

O que ela faz

Este sistema monitora o tráfego de rede Modbus para identificar tentativas de ataque que tentam controlar dispositivos industriais de forma indevida. Ele procura por comandos suspeitos e desvios do comportamento normal.

Quando usar

  • ✓Ao instalar sistemas de segurança para redes industriais (SCADA/ICS).
  • ✓Ao investigar mudanças não autorizadas em equipamentos industriais (PLCs).
  • ✓Ao responder a ataques conhecidos que visam sistemas de controle industrial.

Exemplo do que pedir para a IA

“Verifique se há atividades suspeitas na rede Modbus.”

Quer saber mais? Abra as seções abaixo.

Como usar

O jeito mais fácil: copie a mensagem abaixo e cole no Claude, ChatGPT, Cursor ou outra IA. Ela lê a skill e segue as instruções.

Link da skill

https://github.com/mukul975/Anthropic-Cybersecurity-Skills/blob/main/skills/detecting-modbus-command-injection-attacks/SKILL.md

Mensagem pronta para colar

Use esta skill para me ajudar: https://github.com/mukul975/Anthropic-Cybersecurity-Skills/blob/main/skills/detecting-modbus-command-injection-attacks/SKILL.md Leia o arquivo SKILL.md desse link e siga as instruções dele na minha tarefa.
Como funciona

Ele compara o tráfego de rede Modbus com um registro de comunicação normal. Se encontrar comandos incomuns, escritas não permitidas ou padrões de comunicação estranhos, ele gera um alerta.

Instalação

Jeito mais fácil: copie o link da skill e cole no Claude, ChatGPT ou Cursor pedindo para seguir as instruções.

No terminal (Claude Code, Codex, Cursor), na pasta do projeto:

npx skills add mukul975/Anthropic-Cybersecurity-Skills --skill detecting-modbus-command-injection-attacks

Ou baixe só o arquivo:

curl -L https://raw.githubusercontent.com/mukul975/Anthropic-Cybersecurity-Skills/main/skills/detecting-modbus-command-injection-attacks/SKILL.md -o SKILL.md
Conteúdo técnico (SKILL.md)

Tradução do texto original do autor no GitHub. Os comandos e códigos estão como no original.

Detecção de Ataques de Injeção de Comandos Modbus

Quando Usar

  • Ao implantar detecção de intrusão para ambientes que usam Modbus TCP (porta 502) ou Modbus RTU
  • Ao investigar modificações não autorizadas suspeitas em registradores ou coils de CLPs
  • Ao construir análises de detecção para monitoramento de SOC de OT em ambientes com uso intensivo de Modbus
  • Ao responder a ataques do tipo FrostyGoop que utilizam Modbus TCP para impacto operacional
  • Ao realizar validação de linha de base após uma suspeita de comprometimento de um mestre Modbus

Não use para detectar ataques em protocolos não Modbus (veja detecting-dnp3-protocol-anomalies para DNP3), para detecção geral de intrusão em rede de TI, ou para configuração de dispositivos Modbus (veja performing-ot-vulnerability-scanning-safely).

Pré-requisitos

  • SPAN/TAP de rede no segmento que carrega o tráfego Modbus TCP (tipicamente porta 502)
  • Linha de base de padrões normais de comunicação Modbus (mestres, escravos, códigos de função, faixas de registradores, intervalos de polling)
  • Suricata, Zeek ou IDS de OT comercial implantado com parsers de protocolo Modbus ativados
  • Compreensão dos códigos de função Modbus usados no ambiente (operações de leitura vs. escrita)
  • Acesso à documentação de programação do CLP para validar as faixas de registradores esperadas

Fluxo de Trabalho

Etapa 1: Construir a Linha de Base da Comunicação Modbus

Capture e analise o tráfego Modbus normal para estabelecer o que constitui padrões de comunicação legítimos.

#!/usr/bin/env python3
"""Detector de Injeção Modbus.

Monitora o tráfego Modbus TCP em busca de operações de escrita não autorizadas,
códigos de função anômalos e desvios de linhas de base de comunicação estabelecidas.
Detecta ataques como FrostyGoop que usam Modbus TCP para impacto operacional.
"""

import json
import struct
import sys
import time
from collections import defaultdict
from datetime import datetime
from typing import Dict, List, Optional, Set, Tuple

try:
    from scapy.all import sniff, IP, TCP
except ImportError:
    print("Instale scapy: pip install scapy")
    sys.exit(1)


# Definições de códigos de função Modbus
MODBUS_READ_FUNCTIONS = {1, 2, 3, 4}
MODBUS_WRITE_FUNCTIONS = {5, 6, 15, 16}
MODBUS_DIAGNOSTIC_FUNCTIONS = {8, 17, 43}

MODBUS_FUNC_NAMES = {
    1: "Read Coils", 2: "Read Discrete Inputs",
    3: "Read Holding Registers", 4: "Read Input Registers",
    5: "Write Single Coil", 6: "Write Single Register",
    8: "Diagnostics", 15: "Write Multiple Coils",
    16: "Write Multiple Registers", 17: "Report Slave ID",
    22: "Mask Write Register", 23: "Read/Write Multiple Registers",
    43: "Encapsulated Interface Transport",
}


class ModbusAlert:
    """Representa uma anomalia Modbus detectada."""

    def __init__(self, severity: str, alert_type: str, src_ip: str,
                 dst_ip: str, unit_id: int, func_code: int,
                 description: str, mitre_technique: str = ""):
        self.timestamp = datetime.now().isoformat()
        self.severity = severity
        self.alert_type = alert_type
        self.src_ip = src_ip
        self.dst_ip = dst_ip
        self.unit_id = unit_id
        self.func_code = func_code
        self.func_name = MODBUS_FUNC_NAMES.get(func_code, f"FC Desconhecido {func_code}")
        self.description = description
        self.mitre_technique = mitre_technique

    def __str__(self):
        return (
            f"[{self.severity}] {self.alert_type} | {self.src_ip} -> {self.dst_ip} "
            f"| Unidade {self.unit_id} | {self.func_name} | {self.description}"
        )


class ModbusInjectionDetector:
    """Detecta ataques de injeção de comandos Modbus."""

    def __init__(self, baseline_file: Optional[str] = None):
        self.alerts: List[ModbusAlert] = []
        self.packet_count = 0
        self.modbus_count = 0

        # Dados da linha de base
        self.authorized_masters: Set[str] = set()
        self.authorized_pairs: Set[Tuple[str, str]] = set()
        self.allowed_write_sources: Set[str] = set()
        self.allowed_function_codes: Dict[str, Set[int]] = defaultdict(set)
        self.allowed_register_ranges: Dict[str, List[Tuple[int, int]]] = defaultdict(list)
        self.polling_intervals: Dict[str, float] = {}
        self.last_seen: Dict[str, float] = {}

        # Contadores para detecção de taxa
        self.write_counts: Dict[str, List[float]] = defaultdict(list)

        if baseline_file:
            self.load_baseline(baseline_file)

    def load_baseline(self, filepath: str):
        """Carrega a linha de base de comunicação Modbus estabelecida."""
        with open(filepath, "r") as f:

…
Perguntas frequentes

O que é Modbus?

Modbus é um protocolo de comunicação usado em sistemas industriais para que dispositivos (como sensores e controladores) possam conversar entre si.

O que é 'command injection'?

É um tipo de ataque onde o invasor tenta fazer o sistema executar comandos que não deveria, muitas vezes para assumir controle ou causar danos.

O que são PLCs?

PLCs (Controladores Lógicos Programáveis) são computadores usados para automatizar processos em ambientes industriais, como fábricas.

Detalhes

Descrição original do autor

Detect command injection against Modbus TCP/RTU in ICS/SCADA environments by monitoring unauthorized writes, anomalous function codes, malformed frames, and deviations from communication baselines using ICS-aware IDS and deep packet inspection. Use when deploying IDS for Modbus OT networks, investigating unauthorized PLC register/coil changes, or responding to FrostyGoop-style Modbus attacks.

repo: mukul975/Anthropic-Cybersecurity-Skills

Popularidade

Estrelas no GitHub
35 mil
Posição no ranking
#5687
Licença
Apache-2.0
Atualizada em
31/08/2026

Essa skill é útil?

0

Entre para votar.

Comentários

  • …

Mais skills deste repositório

Skills parecidas