[CPS] OPC UA 프로토콜 정리
과거에 공장 로봇 관련 취약점 분석 과제를 진행하면서, OPC UA 프로토콜을 구현한 적이 있었다.
최근 OPC UA python구현을 과제로 받아서 해당 내용을 다시한번 정리하려고 한다.
OPC란?
PLC마다 다양한 프로토콜을 사용하여 각각의 드라이버가 필요했고, 이로 인해 PLC 제어의 불편함이 있었음
따라서 이를 OPC 서버라는 개념으로 제어하게 되었고, 여기서 서버와 클라이언트 사이에 OPC 프로토콜을 사용하게 되면서 OPC 프로토콜이 4차산업혁명과 관련된 스마트공장 인프라에 자리잡음
기존 serial port, ethernet 을 사용한 통신에는 동시에 연결될 수 있는 장치 수에 제한이 있다는 문제점이 존재하였다.
해당 문제점 또한 OPC 의 등장으로 크게 해소되었다.
기존 OPC
최초에 OPC Classic 버전은 OPC-DA이다. windows 환경에서만 구동되며, 이로 인해 DCOM으로만 통신한다.
이후, Classic OPC 표준을 통해 DA(Data Access), AE(Alarm & Events), HDA(Historical Data Access)의 세가지의 서비스를 정의하였다.
DA(Data Access) : PLC의 현재값을 확인하고 받아올 수 있다. ( 일반적으로 현장에서 가장 많이 쓰임 )
HDA:DA와 유사하지만, 과거의 데이터를 가져올 수 있다.
AE:알람&이벤트로 알람 TAG를 등록하면 해당 알람이 True로 바뀌었을때 이벤트로 클라이언트에 알려주는 기능이다.
Classic OPC 한계
Classic OPC는 Windows의 기술인 COM과 DCOM을 사용하였다. 따라서 windows 컴퓨터를 거치지 않으면 안되는 구조였다.
OPC DA를 이어, OPC UA 개념이 등장하면서 PLC 제조사들이 PLC에서 직접 서버를 구축하는 형태로 제품을 출시하기 시작했다.
OPC UA에서는 기존 OPC Classic의 DA/AE/HDA 에 Security를 보완해서 크로스 플랫폼으로 제공한다. 이를 통해 더이상 윈도우의 의존성이 제거되었다.
일반적인 OPC server 구성은 위 그림과 같다.
OPC 서버와 클라이언트 사이에 전달되는 데이터의 형태는 아래와 같다.
NodeID 구조
[ns=<namespaceindex>;<type>=<value>]
<type>
- Numeric (value is a UInteger)
- String (value is a String)
- Guid (value is a Guid/UUID)
- Opaque (value is ByteString)
value 항목
- SourceTimestamp : OPC서버에서 PLC의 값을 읽어온 시간
- ServerTimeStamp : OPC서버에서 클라이언트로 값을 준 시간
- Value : 서버에서 PLC로 부터 가져온 값
이 외의 통신 규약은 OPC 재단의 reference를 따른다.
서버와 클라이언트 사이에 role을 이용한 권한 체계 또한 존재하지만, 일반적인 접근제어와 크게 다르지 않다. 다만 특이하게 sub/pub 개념이 존재한다.
sub/pub 이란?
Publish / Subscription라는 의미로, 발행과 구독이라는 의미이다.
OPC 클라이언트가 OPC 서버에 1초마다 센서값을 전달해달라고 요청하는 행위를 Subscription 이라고 부른다.
OPC 서버가 OPC 클라이언트에게 1초마다 센서값을 전해주는 행위를 Publish라고 한다.
이 개념을 통해서, OPC 서버가 매초 요청을 보내고 그에대한 요청을 받는 행위를 하지 않을 수 있다. ( sub에 대해서 지속적으로 pub이 오기 때문으로 이해함 )
인증방식
OPC UA 프로토콜 또한 통신 프로토콜이기에, sniffing을 방지하기 위한 대책이 존재한다.
조사 결과 공식적으로 OpenSSL 을 사용한 암호화 방식을 지원하고 있다.
크게 4가지 인증 방식이 있다고 한다.
1) Tier 1 : No Authentication : 클라이언트, 서버 모두 서로에 대한 권한 확인 없이 통신 진행
2) Tier 2 : Server Authentication : 서버는 모든 클라이언트의 접근을 허용하고 클라이언트가 서버의 유효성 유무를 판단한다.
3) Tier 3 - Client Authentication : 클라이언트는 검증없이 서버에 접속하고 서버에서 클라이언트를 인증한다.
4) Tier 4 - Mutual Authentication : 서버, 클라이언트 상호간에 인증한다.
용도에 따라서 인증 정책을 선택한다.
다음 포스트에서 OPC UA 통신 실습을 진행하겠다.