Modbus TCP Packet
Modbus TCP는 산업용 프로토콜인 Modbus를 Ethernet(TCP 502 Port)으로 보내는 방식 이다.
구조가 단순해서 Wireshark로 보면 바로 읽히는데 그만큼 보안에는 약하다.
1. 프레임 구조

Function Code + Data 부분을 PDU(Protocol Data Unit)라고 하고 Serial(RTU)이든 TCP든 PDU는 똑같다.
여기에 앞뒤로 뭘 붙이냐 에 따라서 RTU , TCP가 나뉜다.
A. PDU : 최대 253 Byte
B. RTU ADU = Slave Address(1) + PDU + CRC(2) → 최대 256 Byte
C. TCP ADU = MBAP Header(7) + PDU → 최대 260 Byte
* MBAP Header (Modbus Application Protocol Header)
A. Transaction ID (2 Byte) : 요청 , 응답 짝을 맞추는 번호. 응답은 요청이랑 같은 값으로 돌아온다.
B. Protocol ID (2 Byte) : Modbus는 항상 0x0000
C. Length (2 Byte) : 뒤에 따라오는 Byte수 [Unit ID + PDU]
D. Unit ID (1 Byte) : Gateway 뒤에 있는 Serial Slave를 구분할때 쓴다. [PLC에 직접 붙을때는 보통 1 이나 0xFF]
2. 프레임 예제
EX1) Unit ID 1 장비의 Holding Register 40001 ~ 40002 (2개)를 FC 03(Read Holding Registers)으로 읽는다.
[40001은 실제 Packet에서 주소 0x0000 이다. 40001 = 온도 x 10 , 40002 = 습도(%) 라고 가정]
[Request] Client -> Server
00 01 00 00 00 06 01 03 00 00 00 02
----- ----- ----- -- -- ----- -----
TID PID Len UID FC Addr Qty
Len 0x0006 : Unit ID(1) + FC(1) + 시작주소(2) + 개수(2) = 6
[Response] Server -> Client
00 01 00 00 00 07 01 03 04 00 E6 00 19
----- ----- ----- -- -- -- ----- -----
TID PID Len UID FC Bytes Val1 Val2
A. Len 0x0007 : Unit ID(1) + FC(1) + Byte Count(1) + 데이터(4) = 7
B. 0x00E6 = 230 → 온도 23.0℃ , 0x0019 = 25 → 습도 25%
3. 보안 취약점
Modbus는 원래 폐쇄된 Serial망 에서 쓰려고 만든거라 보안을 거의 고려하지않았다.
A. 인증이 없다 : 502 Port에 접속만 되면 누구나 읽고 쓸수 있다
B. 암호화가 없다 : 평문이라 위 예제 값도 Wireshark로 그대로 다보인다.
C. Replay 공격 : 캡처한 쓰기 Packet을 그대로 다시 보내도 장비는 정상 명령 으로 처리한다.
[Shodan 같은 검색엔진 에서 port:502로 검색해보면 인터넷에 그대로 노출된 Modbus 장비가 생각보다 많이 나온다.]
4. 대응 방법
A. 망 분리 : Modbus 장비는 OT망 안에만 두고 인터넷 , 사무망에서 직접 접근이 안되게 한다.
B. DPI(산업용 Firewall) : Function Code 단위로 필터링 해서 읽기(01 ~ 04)만 허용하고 쓰기(05 , 06 , 15 , 16)는 Engineering Workstation에서만 허용한다.
C. Modbus/TCP Security : Modbus Organization이 발표한 TLS 적용 버전 이다. TCP 802 Port를 쓰고 X.509 인증서로 서로 인증한다 [아직 지원하는 장비가 많지는 않다]
'OT·산업보안 > 프로토콜·보안' 카테고리의 다른 글
| 모드버스(Modbus) 데이터 모델 과 펑션 코드(Function Code) (0) | 2026.10.26 |
|---|---|
| 모드버스(Modbus) 프로토콜 정의 및 통신 방식 (0) | 2026.10.23 |


