OSPF LSA Type


LSA(Link State Advertisement)는 OSPF Router끼리 주고 받는 Link정보 이다.
Area를 여러개로 나누면 LSA도 종류마다 만드는 Router랑 전달 범위가 달라진다
아래 그림은 R1(Area 1) - R2(ABR) - R3(Area 0 , ASBR) 구성에서 LSA가 퍼지는 범위다.
[ABR은 Area 0과 다른 Area를 연결하는 Router , ASBR은 외부 경로를 OSPF로 넣어주는 Router]


1. LSA Type

- Type 1 : 이름 - Router LSA , 만드는 Router - 모든 Router , 전달 범위 - 해당 Area 안 , 내용 - 자기 Link 정보
- Type 2 : 이름 - Network LSA , 만드는 Router - DR , 전달 범위 - 해당 Area 안 , 내용 - Multi-access 구간에 붙어있는 Router 목록
- Type 3 : 이름 - Summary LSA , 만드는 Router - ABR , 전달 범위 - 다른 Area로 , 내용 - 다른 Area의 네트워크 정보
- Type 4 : 이름 - ASBR Summary LSA , 만드는 Router - ABR , 전달 범위 - 다른 Area로 , 내용 - ASBR 위치
- Type 5 : 이름 - AS External LSA , 만드는 Router - ASBR , 전달 범위 - OSPF 전체 (Stub 계열 제외) , 내용 - 외부 경로
- Type 7 : 이름 - NSSA External LSA , 만드는 Router - NSSA 안의 ASBR , 전달 범위 - NSSA 안 , 내용 - 외부 경로 (ABR에서 Type 5로 변환)

[Type 4가 필요한 이유 : Type 5에는 외부 경로랑 ASBR 정보만 있고 다른 Area에 있는 Router는 ASBR이 어디있는지 모른다. 그래서 ABR이 ASBR까지 가는 경로를 Type 4로 알려주는거다.]

2. Area 종류

- Normal (기본) : 막는 LSA - 없음 , 특징 - 모든 LSA 허용
- Stub : 막는 LSA - Type 4 , 5 , 특징 - 외부 경로 대신 ABR이 Default Route(Type 3)를 내려준다
- Totally Stubby : 막는 LSA - Type 3 , 4 , 5 , 특징 - Default Route 하나만 받는다 [Cisco 전용]
- NSSA : 막는 LSA - Type 4 , 5 , 특징 - Area 안에 ASBR이 있을 때 Type 7 사용

[Area 0은 Stub로 만들수 없고 , Stub Area 안에는 ASBR이 있으면 안된다. 그래서 ASBR이 필요하면 NSSA를 쓴다]

3. LSDB 확인
R3가 200.200.200.0/24를 Redistribute 하고 있는 상태에서 Area 1에 있는 R1의 LSDB를 보면 아래처럼 나온다.

R1#show ip ospf database

            OSPF Router with ID (1.1.1.1) (Process ID 1)

                Router Link States (Area 1)

Link ID         ADV Router      Age         Seq#       Checksum Link count
1.1.1.1         1.1.1.1         412         0x80000003 0x00A4C1 2
2.2.2.2         2.2.2.2         405         0x80000002 0x003B7E 1

                Net Link States (Area 1)

Link ID         ADV Router      Age         Seq#       Checksum
13.13.12.2      2.2.2.2         405         0x80000001 0x00D25A

                Summary Net Link States (Area 1)

Link ID         ADV Router      Age         Seq#       Checksum
13.13.2.0       2.2.2.2         450         0x80000001 0x00F1E8
13.13.3.0       2.2.2.2         381         0x80000001 0x00E2F2
13.13.23.0      2.2.2.2         450         0x80000001 0x0063A1

                Summary ASB Link States (Area 1)

Link ID         ADV Router      Age         Seq#       Checksum
3.3.3.3         2.2.2.2         126         0x80000001 0x00B4D3

                Type-5 AS External Link States

Link ID         ADV Router      Age         Seq#       Checksum Tag
200.200.200.0   3.3.3.3         131         0x80000001 0x00C69B 0

[Router Link States(Type 1)에서 R1 Link count가 2인 이유는 Fa0/0(Stub 네트워크) , Fa0/1(Transit 네트워크) 2개 라서다.]
[Summary Net Link States가 Type 3 , Summary ASB Link States에 3.3.3.3이 있는게 Type 4 이다. R2(ABR)가 R3(ASBR) 위치를 Area 1에 알려준 것]

4. Totally Stubby 적용
EX1) Area 1을 Totally Stubby로 바꾼다.

# R1
router ospf 1
 area 1 stub
!
# R2
router ospf 1
 area 1 stub no-summary
!

R1#show ip route ospf
O*IA 0.0.0.0/0 [110/2] via 13.13.12.2, 00:00:12, FastEthernet0/1

Type 3 , 4 , 5가 전부 막혀서 Default Route 하나만 남는다.
Cost 2는 ABR가 내려주는 Default Route Cost 1 + R1→R2 Cost 1 이다.
[no-summary는 ABR에만 넣으면 되고 R1에는 area 1 stub만 넣어도 된다.]

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

+ Recent posts