IT/OT DMZ


Purdue Model은 공장 , 플랜트 시스템을 Level 0(현장 장비) ~ Level 5(본사 업무망)로 나눈 참조 모델 이다.

그중에서 IT(Level 4 , 5)와 OT(Level 0 ~ 3) 사이에 두는 완충 구간이 IT/OT DMZ(Level 3.5)다

 

1. IT/OT DMZ 란?

원래 PERA(Purdue 원본 모델)에는 없던 구간인데 보안 때문에 나중에 추가된 Level 이다.

핵심 원칙은 IT 와 OT 사이 통신은 무조건 DMZ에서 끝나야 된다는것이다. [IT ↔ OT 직접연결 금지]

[DMZ 양쪽에 Firewall을 하나씩 두거나 , Firewall 한대에 3개 구간(IT / DMZ / OT)을 나눠서 구성 한다.]

 

2. DMZ를 거쳐서 하는 일

A. 데이터 조회 : 사무실에서 생산 데이터를 보고싶으면 OT Historian이 DMZ의 Historian 복제본으로 데이터를 보내고(Push) 사무실PC는 DMZ 복제본만 조회한다.

B. 원격 유지보수 : 외부 업체는 DMZ의 Jump Server를 거쳐서만 접속하고 MFA , 접속기록을 남긴다

C. Patch , 백신 : 인터넷에서 OT로 바로 받지않고 DMZ 중계 서버에서 받아서 내려준다.

 

3. Level간 통신 정책 예시

 

- Level 4 (업무PC) : 목적지 - Level 3.5 (Historian 복제본) , 정책 - 허용 , 예시 - HTTPS 조회

- Level 3 (Historian) : 목적지 - Level 3.5 (Historian 복제본) , 정책 - 허용 , 예시 - 데이터 복제 (OT → DMZ 방향)

- Level 4 : 목적지 - Level 3 이하 , 정책 - 차단 , 예시 - RDP , SMB 직접 접속

- Level 3.5 (Jump Server) : 목적지 - Level 3 , 2 , 정책 - 제한 허용 , 예시 - 승인된 사용자 , 시간에만 RDP

- Level 2 (HMI) : 목적지 - Level 1 (PLC) , 정책 - 허용 , 예시 - Modbus TCP 502 등 제어 프로토콜

- Level 0 ~ 2 : 목적지 - Internet , 정책 - 차단 , 예시 - 모든 통신

 

[허용은 필요한 IP , Port만 열고 나머지는 전부 막는 Default Deny가 기본이다]

[Level 2 ↔ Level 1에서 쓰는 Modbus는 인증이 없어서 이 구간도 HMI , EWS IP만 허용하는게 좋다.]

 

4. 왜 필요한가

A. 피해 확산 방지 : 사무망이 랜섬웨어에 걸려도 DMZ에서 막히면 생산설비까지 안넘어간다.

   [2021년 Colonial Pipeline 사건도 감염된건 IT망 이었는데 OT로 번질까봐 파이프라인 운영을 아예 멈췄다]

B. 접근 통제 : 외부 업체 , 사무실 사용자가 OT 장비에 바로 붙는 경로가 없어지고 모든 접속이 Jump Server 기록으로 남는다.

C. 운영 편의 : OT 데이터가 필요한 사람은 DMZ만 보면 되니까 OT망 Firewall 규칙이 단순해진다.

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 인증서로 서로 인증한다 [아직 지원하는 장비가 많지는 않다]

Spanning Tree Protocol


Switch끼리 연결할때 Link가 하나 밖에 없으면 그 Link가 끊어졌을때 통신이 안된다.
그래서 이중화를 하는데 이렇게 하면 Loop가 생겨 버린다
이 Loop를 막아주는게 STP 이다.

1. Switching Loop 문제
                    SW1
              |              |
           SW2---------SW3
              |
           PC-A
[SW1 , SW2 , SW3가 삼각형으로 연결된 상태에서 PC-A가 ARP Broadcast를 보내면 SW1 → SW3 → SW2 → SW1 ... 이렇게 양쪽 방향으로 계속 돈다]
A. Broadcast Storm : L2 Frame에는 TTL이 없어서 Broadcast Frame이 Loop를 계속 돌게된다. 결국 대역폭 , CPU를 다써버려서 네트워크가 마비 된다.
B. MAC Table 불안정 : 같은 Source MAC이 여러 Port로 들어와서 MAC Table이 계속 바뀐다 [MAC Flapping]
C. 중복 Frame : 목적지가 같은 Frame을 여러번 받게 된다.

2. STP 란?
IEEE 802.1D 표준 이다. Loop가 생기는 Port중에 하나를 Blocking 시켜서 논리적으로 Loop가 없는 Tree구조를 만든다.
사용중인 Link가 끊어지면 Blocking Port를 다시 열어주기 때문에 이중화도 할수 있다.

3. BPDU
Bridge Protocol Data Unit , Switch끼리 STP정보를 주고 받는 Frame 이다.
A. Root Bridge가 2초 마다(Hello Time) 만들어서 보내고 나머지 Switch는 이걸 받아서 Designated Port로 전달 한다
B. 목적지 MAC : 0180.C200.0000 [Cisco PVST+는 0100.0CCC.CCCD]
C. 종류 : Configuration BPDU , TCN BPDU(Topology Change Notification)

4. Bridge ID (BID)

Switch를 구분하는 8 Byte값 이다.
A. Bridge Priority (2 Byte) + MAC Address (6 Byte)
B. Priority 기본값은 32768 이고 4096단위로만 바꿀수 있다. (0 ~ 61440)
C. Extended System ID : Priority 16bit 중에 하위 12bit를 VLAN 번호로 쓴다. 그래서 VLAN 1은 32768 + 1 = 32769가 된다.
[PVST+는 VLAN마다 STP가 따로 돌아서 VLAN 별로 Root Bridge가 다를수 있다.]

5. Root Bridge 선출
A. BID가 제일 낮은 Switch 하나가 Root Bridge가 된다.
B. Priority가 같으면 MAC이 낮은 쪽이 된다
C. 처음에는 모든 Switch가 자기가 Root라고 BPDU를 보내다가 더 낮은 BID를 받으면 그 Switch를 Root로 인정한다.
[Root Bridge를 직접 정할려면 아래 명령어 중 하나를 쓴다.]

spanning-tree vlan 1 priority 4096
!
spanning-tree vlan 1 root primary

6. RSTP (Rapid Spanning Tree Protocol)
IEEE 802.1w 이고 802.1D 보다 수렴이 훨씬 빠르다. (보통 몇초 이내)
A. Port 상태 : Discarding , Learning , Forwarding 3개로 줄었다. [802.1D는 Blocking , Listening , Learning , Forwarding , Disabled 5개]
B. Port 역할 : 기존 Root Port , Designated Port 에 Alternate , Backup이 추가 됐다.
[Cisco 장비 에서는 spanning-tree mode rapid-pvst 명령어로 Rapid PVST+로 바꿀수 있다.]

'네트워크 > 스위칭' 카테고리의 다른 글

트렁크(Trunk) 와 VLAN 간 라우팅(Inter-VLAN Routing)  (0) 2026.10.28
브이랜(VLAN) 란?  (0) 2026.10.24

+ Recent posts