스마트시티 취약점 연구와 모사환경 제작 - 1

R&D

•

2024.06.18

2023년 10월, 과학기술정보통신부와 IITP 정보통신기획평가원이 주관한 사이버 보안 챌린지는 스마트 시티의 취약점을 분석하고 해결하는 데 초점을 맞추었습니다. 이 대회에 참가한 지엔은 스마트 시티에서 발생할 수 있는 다양한 보안 문제를 탐구하고, 탁월한 해결 능력을 발휘하여 종합 4위의 성과를 이뤘습니다.


대회 참가 과정에서 접했던 스마트 시티 모사환경은 현실적인 시나리오와 취약점을 반영하여 구성되어 있었습니다. 특히, 실제 취약점을 테스트하고 공격에 대응하는 과정에서 신호등이나 가로등과 같은 장치가 공격에 따라 동작이 변경되는 모습은 보안에 대한 직관적인 이해를 제공했습니다. 이러한 경험은 참가자들에게 더 나은 보안 감각을 부여하고, 실제 상황에서의 대처 능력을 키워주었습니다.


이 글에서는 대회에서 사용되었던 스마트 시티 모사환경을 직접 만들면서 연구한 스마트 시티의 프로토콜과 구성 방식에 대해 알아보고자 합니다.



☑️ 스마트 시티를 만들기 전에 알아야 할 정보는?

스마트 시티를 제작하기에 앞서 주로 사용되는 프로토콜이 무엇이 있고, 해당 프로토콜을 어떻게 이용할 수 있으며, 어떤 장비를 사용할지를 먼저 알아야 합니다.


스마트 시티에서는 OT 산업 분야에서 사용되는 장비들을 많이 사용하게 되는데, 이 장비들이 많이 사용하는 프로토콜로 OPC UA와 MQTT가 있고, 스마트 빌딩에서 많이 사용되는 프로토콜로는 BACnet이 있습니다. OT 산업에서 주로 사용되는 장비는 전기 신호를 통제해 주는 PLC와 메모리 상태를 통해 사용자에게 시각 정보를 제공하면서 간단한 조작이 가능하게 해주는 HMI 등이 있습니다.



스마트시티 프로토콜


OPC UA



OPC UA는 산업 자동화 및 제어 시스템에서 데이터 통신과 정보 교환을 위한 표준 프로토콜입니다.

산업 장비의 역사는 오래되었으며, 전 세계적으로 다수의 업체에서 장비를 제작하고 있습니다. 이로 인해 각각의 업체는 서로 다른 프로토콜을 사용하여 자사의 장비를 기반으로 산업 시스템을 구축해 왔습니다.


다양한 프로토콜을 사용하는 산업 시스템을 통합하는 것은 쉬운 일이 아닙니다. 이에 따라 장비를 제작하는 업체들은 기존 산업 시스템에 사용되는 장비를 기반으로 OPC UA 프로토콜을 지원하는 제품을 개발하여 타 장비들과의 호환성을 높였습니다.


OPC UA는 Client가 TCP/IP나 특정 통신 프로토콜을 통해 Server에 연결하여 Session을 생성하고, Server의 태그에 데이터를 읽고 쓰면서 다른 연결된 장비들과의 통신을 진행하는 형태로 동작합니다.


이 프로토콜을 통해 산업 장비에서 프로토콜을 표준화하고, 이를 통해 다양한 플랫폼과 운영체제를 지원하는 것이 편리해졌습니다. 또한, OPC UA는 인증된 사용자만 접근할 수 있도록 개발되어 산업 데이터를 안전하게 통신할 수 있는 장점을 가지고 있습니다.


그러나 OPC UA는 Server와의 지속적인 실시간 통신을 필요로 하기 때문에 자원 소비가 매우 많아 소형화된 임베디드 시스템에서는 사용하기 어려운 한계가 있습니다. 또한, OPC UA는 다양한 기능을 가지고 있으며, 이에 대한 상세한 설명이 부족하여 처음 접하는 사용자가 학습하는 데 시간이 오래 걸릴 수 있는 문제가 있습니다.



MQTT

(Message Queuing Telemetry Transport)

MQTT는 경량형 발행-구독(Publish-Subscribe) 메시징 프로토콜로, 다양한 장치 및 응용 프로그램 간에 데이터를 효율적으로 교환하는 데 사용됩니다.

다양한 산업 분야에서 사용되는 다양한 장치 및 시스템은 서로 다른 통신 프로토콜을 사용하여 데이터를 전송하고 있습니다. 이로 인해 시스템 통합이 복잡해지고, 상호 운용성이 낮아질 수 있습니다.


MQTT는 이러한 문제를 해결하기 위해 설계되었습니다. 발행-구독 모델을 사용하여 클라이언트 간에 메시지를 교환합니다. 클라이언트는 특정 주제(topic)를 구독하고 해당 주제에 대한 메시지를 발행할 수 있습니다.

클라이언트는 MQTT 브로커에 연결하여 메시지를 발행하거나 구독합니다. 브로커는 클라이언트 간의 효율적인 메시지 라우팅을 관리하고, 발행된 메시지를 해당 주제를 구독하는 모든 클라이언트에게 전달합니다.


MQTT는 경량이며 간단한 프로토콜이기 때문에 임베디드 시스템 및 네트워크 환경에서 효율적으로 동작합니다. 또한, 연결 상태를 유지하지 않고도 메시지를 교환할 수 있기 때문에 네트워크 대역폭을 절약할 수 있습니다.


그러나 MQTT는 메시지의 신뢰성을 보장하기 위한 메커니즘이 내장되어 있지 않기 때문에, 일부 응용 프로그램에서는 메시지 전달을 위한 추가적인 보안 및 오류 처리 기능이 필요할 수 있습니다.



BACnet

(Building Automation and Control Networks)



BACnet은 건물 자동화 및 제어 네트워크를 위한 표준 프로토콜입니다. 주로 건물 내의 다양한 시설과 장치 간의 효율적인 통신을 위해 설계되었습니다. 건물 자동화 시스템은 난방, 냉방, 조명, 출입 통제 시스템, CCTV 등 다양한 시설을 통합하여 효율적으로 관리하는 데 사용됩니다.


BACnet은 다양한 장치와 시설 간의 통신을 지원하기 위해 설계되었습니다. 표준 데이터 모델을 사용하여 건물 내의 다양한 시설과 장치를 표현하고, 이들 간의 데이터를 쉽게 교환할 수 있도록 합니다. 이 프로토콜은 다양한 네트워크 및 물리적 통신 매체를 지원하여 건물 내의 장치 간 통신을 용이하게 합니다. Ethernet, RS-485, BACnet/IP 등과 같은 다양한 통신 프로토콜과 매체를 통해 통신이 가능합니다.


또한, BACnet은 다양한 서비스 및 객체를 정의하여 건물 자동화 시스템의 다양한 요구 사항을 지원합니다. 데이터 읽기, 쓰기, 알림 등 다양한 기능을 수행할 수 있는 서비스 및 객체가 제공됩니다.


그러나 BACnet을 잘못 설계할 경우, 수정 및 확인이 어려워질 수 있으며 다양한 프로토콜의 데이터가 하나의 프로토콜로 통합되어 사용될 경우 보안 문제가 발생할 가능성이 있습니다. 따라서 적절한 설계와 관리가 필요합니다.



OT 장비


Gateway


WEINTEK CMT-G01


게이트웨이는 두 개 이상의 서로 다른 네트워크 또는 프로토콜 간의 통신을 중개하고 변환하는 장치입니다. 일반적으로 게이트웨이는 두 네트워크 간의 프로토콜 및 데이터 형식 변환을 처리하여 호환성을 확보합니다. 이 장치는 서로 다른 통신 프로토콜을 사용하는 장치들 간의 상호 연결성을 제공하며, 다양한 시스템 간의 통합을 용이하게 합니다.


이번 모사환경 제작에서는 HMI와 PLC를 연결할 수 있으며, WEINTEK 사의 CMT-G01을 사용하여 OPC UA 서버를 지원하고 MQTT 통신이 가능한 장비를 채택하였습니다.



PLC


LS산전 XBC-DR30E


PLC(Programmable Logic Controller)는 산업 자동화 및 제어 시스템에서 사용되는 디지털 컴퓨터 기반의 제어 장치입니다. 주로 제조업 공정이나 기계의 자동화에 적용됩니다. 이 장치는 프로그램 가능한 로직과 제어를 위한 입력 및 출력 장치를 통합하여 다양한 제어 및 자동화 작업을 수행합니다.

PLC는 사용자가 정의한 프로그램을 실행하여 입력 신호를 감지하고 이를 기반으로 출력을 제어하는 데 사용됩니다.


모사환경에 사용할 PLC로는 RS232 및 RS485 통신을 지원하는 LS산전의 XBC-DR30E 모델을 선택했습니다. 이를 위해 LS산전에서 제공하는 XG5000 프로그램을 활용하여 레더로직을 개발할 것입니다.



HMI


WEINTEK MT8072iE


HMI(Human Machine Interface)는 사용자와 장비 간의 상호 작용을 위한 인터페이스를 제공하는 장치를 의미합니다. 사용자가 제어 시스템을 모니터링하고 조작할 수 있도록 도와줍니다. 일반적으로 HMI는 터치스크린을 포함한 디스플레이 장치로, 시각적으로 사용자에게 정보를 제공하고 사용자의 입력을 받아들입니다.


제조업 환경에서 HMI는 공정 상태 모니터링, 제어 시스템 설정 및 조작, 생산 데이터 시각화 등 다양한 기능을 제공합니다. HMI는 PLC와 함께 작동하여 PLC에서 수집한 데이터를 사용자에게 표시하고, 사용자의 입력을 PLC로 전달하여 제어 및 조작을 수행합니다.

게이트웨이와의 원활한 호환을 위해 같은 업체에서 제작된 제품 중 MQTT를 지원하는 MT8072iE를 선택했습니다.



☑️ 모사환경 제작

모사환경 제작을 위한 프로토콜과 장비에 대해 알아봤으니 대회의 시스템 구성을 참고하여 스마트 시티의 구성도를 작성했습니다.



스마트시티 구성도




스마트시티 구성 항목 제작


  • 가로등

    가로등의 제어는 간단히 설명하면, 게이트웨이가 제공하는 OPC UA 프로토콜을 통해 PLC의 출력을 조작하여 가로등의 전원을 제어하는 방식으로 이루어집니다.


    이를 위해 OPC UA에서 P200 태그를 사용하여 BOOL[100]의 변수를 설정하고, 그 중 BOOL[33]를 가로등을 조작하는 데이터로 설정했습니다.


    BOOL 형태의 데이터는 PLC로 전달되면 BIT 단위로 연산되므로, D3000을 기준으로 34번째 값은 D302.2가 되어 가로등을 조작할 수 있습니다. 이렇게 함으로써 가로등의 전원을 제어할 수 있게 됩니다.


제작 방법


1. Gateway에 PLC 추가


2. PLC에서 rs232 포트 활성화 (Baudrate와 국번을 맞춰줌)


3. Gateway의 OPC UA에 가로등 전원을 설정할 수 있는 BOOL 태그 설정


4. PLC의 주소는 알파벳에 따라 할당 주소 영역이 달라지는데 보통 데이터는 D 영역을 사용
(P 영역은 입,출력, BIT는 마지막에 .0이 추가)


5. PLC 로직 상에서 수신 받은 데이터(D0302.2)를 통해 가로등 전원 조작



  • 신호등

    신호등의 시간은 가로등과 유사한 방식으로 구현되어 OPC UA 프로토콜을 통해 조작할 수 있도록 설계되었습니다. 그러나 HMI에 데이터를 실시간으로 표시하는 동작은 OPC UA 프로토콜만으로는 부족할 수 있습니다.


    이를 해결하기 위해, 신호등의 시간은 OPC UA를 통해 조작할 수 있도록 구현되었으며, HMI에 표시할 데이터는 MQTT Broker를 활용하여 실시간으로 신호 상태를 전송합니다. 이렇게 함으로써 HMI는 MQTT 프로토콜을 통해 받은 데이터를 기반으로 신호등의 남은 시간과 현재 신호 상태를 실시간으로 표현할 수 있습니다.



제작 방법

1. Mosquitto를 설치한 MQTT 서버(Brokerr) 주소, MQTT 버전 설정 후 연결


2. TOPIC을 설정 후 MQTT 서버와 같은 QoS로 데이터 타입을 지정


3. 해당 TOPIC에서 사용할 데이터의 유형, 주소 설정 (JSON 형태로 넘어가기 때문에 여러 개도 사용 가능)


# 넘어가는 데이터 형태
{
	"d": {
		"이름": [주소의 값]
	}
}

4. HMI 중 MQTT를 지원하는 ie 계열을 선택하면 MQTT가 활성화 되어 있음


5. Gateway에서 설정할 때와 같이 신호등의 HMI는 MQTT에서 데이터를 읽어오기만 하면 되기 때문에 MQTT 주제를 구독하여 읽은 데이터를 저장할 주소를 설정



PLC 레더 로직




드론 주차 관리 시스템


이미지 기반 주차 공간 점유 분류에 관한 인공지능 모델 구축 오픈 소스를 활용했습니다.

🔗소스 코드 출처 : https://github.com/martin-marek/parking-space-occupancy

🔗인공지능 모델 출처 : https://paperswithcode.com/task/parking-space-occupancy/codeless


  1. 아래 순서로 좌표를 찍어 주차 공간을 지정한다.


  2. 오픈 소스와 모델을 활용하여 주차 공간을 인식하고 점유 여부를 파악한다.


오픈 소스와 공개된 인공지능 모델을 사용하여 스마트 시티에 맞는 드론 주차 자동 관리 시스템을 제작하였습니다.



빌딩 관리 시스템


BACnet을 지원하는 장비는 건설사에서 주로 사용하고 있고 일반 사용자가 해당 장비를 직접 구할 방법이 없어 라즈베리파이를 활용해서 BACnet 서버를 구축했습니다.


파이썬에서 제공 되고 있는 BACnet 서버인 BAC0을 사용하였고, 전체적인 동작을 실행하는 API 서버를 Flask를 통해 제작하였습니다.


LED On 1, Off 0


LED On / LED Off



스마트시티 관제 카메라


실제 카메라를 사용하여 관제 시스템을 구축하려고 했으나, 카메라의 취약점을 공개해야 했기 때문에 업체를 선정하는 데 어려움이 있었습니다. 이에 따라 라즈베리파이를 활용하여 카메라를 제작하고 웹 취약점을 직접 설계하였습니다.



라즈베리파이의 카메라 영상을 웹을 통해 실시간으로 스트리밍하기 위해서는 ffserver를 사용하여 실시간으로 출력되고 있는 영상 데이터를 캡처하여 ffmpeg로 영상 데이터를 변환한 후 웹 서버로 전송해야 합니다.

초기에는 ffserver 설정 과정에서 여러 문제가 발생하여 영상 출력이 원활하지 않았습니다. 그러나 mpjpeg 형식으로 영상을 변환하여 출력함으로써 라즈베리파이 영상의 웹 출력에 성공하였습니다.


웹 서버는 lighttpd를 설치하여 사용했고 config를 위한 cgi는 c언어로 직접 작성하여 ntp server, dhcp, static ip address, cameara on/off 등의 설정 기능을 구현했습니다. 이후 ffserver와 ffmpeg는 서비스로 제작하여 라즈베리파이 동작 시 영상 데이터를 송출 할 수 있도록 만들어 카메라 기능의 구현을 완료했습니다.






☑️ 완성된 모사환경



Solutions

Services

Tech Blog

R&D

ZIEN

Contact Us

대표자명

조영민

Address

서울특별시 금천구 서부샛길 606 대성디폴리스 A동 1606, 1607호

Telephone

070-4571-9854

E-mail

support@zi-en.io

Ⓒ ZIEN Inc. All rights reserved.