Wireshark로 Modbus 패킷 분석

JENJULYJOY·2025년 12월 16일

산업보안

목록 보기
6/6

지난번 Modbus 통신을 확인한 것에 이어서 이번엔 Wireshark로 Modbus 패킷을 분석하는 실습을 해보려고 한다.
기존에 구축한 Modbus 통신 환경에서 Wire Shark만 추가하면 된다.
단계별로 실습을 진행해보았다.

1. Modbus 통신 캡처하기

Wireshark를 실행해 "Adapter for loopback traffic capture"를 선택하고 캡처를 시작한다.

127.0.0.1 → 127.0.0.1  TCP  61390 → 502  [SYN]
127.0.0.1 → 127.0.0.1  TCP  502 → 61390  [SYN, ACK]
127.0.0.1 → 127.0.0.1  TCP  61390 → 502  [ACK]

TCP 3-Way Handshake 후 클라이언트와 서버가 연결되는 것이 확인됐다.

Modbus… Query: Trans: 4; Unit: 0, Func: 3: Read Holding Registers

내가 세팅한 Function3(Holding Registers)이 그대로 적용되었다.

Modbus… Response: Trans: 4; Unit: 0, Func: 3: Read Holding Registers

서버의 응답부분이다.

2. Register의 Value값 변경하기

FC5(Write a Single Coil)

Register의 Value값을 Request 패킷에서 확인할 수 있다.
아래 사진은 각각 Register 0을 0과 123으로 설정하고 Send 했을 때이다.

3. Function CODE 변경하기

실습한 Function Code
- FC5(Write a Single Coil)
- FC6(Write Multiple Registers)

📍FC5(Write Single Coil)

FC5는 특정 코일을 ON/OFF 하는 기능이다.
참고로 코일은 1 bit이고, 0 또는 1의 값을 갖는다.
Simply Modbus에서 Function Code를 5(Write Single Coil)으로 변경하고 패킷을 확인해보자.


그런데 Function Code만 5으로 변경하고 Send를 하려하면 위와 같은 창이 뜬다.


OK를 누르고 좌측 하단에 있는 [WRITE] 버튼을 누른다.

  1. 설정하기

mode: TCP
IP Address: 127.0.0.1
Port: 502
Slave ID: 0
function code: 5
register size: 1 bit coils

위와 같이 설정한다.

중요한 것은 F5는 이전에 실습한 F3이랑 다르게 읽기가 아닌 쓰기(변경)가 가능하다.
서버(Ananas)에게 Coil 0번을 ON(=FF00) 상태로 바꾸라고 하는것이다
.

인증X 암호화X 무결성X → 취약

따라서 방화벽과 IDS가 필수적이다.

[참고]
Coil ON → 0xFF00
Coil OFF → 0x0000
😶왜 1바이트0x01을 안 쓰고 2바이트 FF00을 쓸까?진짜 궁금해서. . .
Modbus는 대부분 16비트 단위(2 bytes)로 값을 다룬다. 따라서 1비트짜리 ON/OFF도 결국 2바이트로 표현해야한다.
ON FF00에서 FF는 참, TRUE, ON의 의미이고, 하위 바이트는 무조건 00인 예약영역이다.
OFF는 0000 = 00000000 00000000로서 두 바이트 모두 0, 거짓이 되는것이다.

📍FC6(Write Multiple Registers)

FC6은 숫자 여러 개를 한 번에 WRITE하는 기능이다.

위와같이 설정하고 SEND 버튼을 누른다.

첫번째 사진의 Request 패킷을 보면 다음과 같은 내용을 알 수 있다.
클라이언트(Simply Modbus TCP Client)가
이 값들을 이 레지스터들에 Write 해주라고 서버(ANANAS)에 보내는 패킷이다.
실제 쓰려는 값(123, 456 같은 값이 여기 있음)

두번째 사진의 Response 패킷을 보면 다음과 같은 내용을 알 수 있다.
이건 서버(ANANAS)가 니가 요청한 대로 잘 썼다고 답장을 보내는 패킷이다.
Response에는 실제 값(123, 456)이 안들어 있다.

공격 방어 방법

  1. 네트워크단에서 차단
    Modebus가 사용하는 502 포트를 못 쓰게 할 수는 없으므로 방화벽에서 허용 IP만 접근 가능하게 설정한다.
  2. IDS/IPS로 이상행위 탐지
    Read는 허용, Write는 경보 또는 차단
  3. 정책 기반 차단
    -시간 기반(운영 시간 외 Write 금지)
    -IP 기반 (특정 Engineering PC만 Write 허용, HMI는 Read만 가능)
    -빈도 기반(e.g.Write 요청이 갑자기 많아지면 이상징후로 판단)
  4. OT 전용 보안장비

OT Firewall

ALLOW 192.168.10.10 → PLC :502 FC=3
DENY ANY → PLC :502 FC=5,6,15,16

ICS IDS

DPI 기반 Modbus 파서

profile
Information Security🔐 & Industrial Security⚙️

0개의 댓글