
PLC 로직 변조 완화: 구성 악용으로부터 핵심 인프라 강화하기
요약
산업 제어 시스템(ICS)의 핵심인 PLC 로직 변조 위협과 레거시 산업용 프로토콜의 보안 취약점을 분석합니다. Modbus TCP 등 기존 프로토콜의 구조적 결함을 파악하고 이를 방어하기 위한 엔지니어링 가이드를 제공합니다.
핵심 포인트
- PLC는 디지털 명령을 물리적 동작으로 변환하는 핵심 장치임
- Modbus TCP 등 레거시 프로토콜은 암호화 및 인증 기능이 결여됨
- 공격자는 인증 없이 레지스터 읽기/쓰기를 통해 물리적 재앙 유도 가능
- 네트워크 세분화 및 프로토콜 강화 등 아키텍처 수준의 방어 필요
PLC 악용의 현실
운영 기술 (OT) 및 산업 제어 시스템 (ICS) 영역에서 프로그래밍 가능 로직 컨트롤러 (PLC)는 물리적 현실의 궁극적인 중재자입니다. PLC는 디지털 명령을 밸브 개방, 터빈 회전, 화학 물질 공급 조절, 열 평형 유지와 같은 물리적 동작으로 변환합니다. 사이버 적대 세력이 이러한 장치를 성공적으로 침해하면, 가상적 악용과 물리적 재앙 사이의 경계가 허물어집니다.
이것은 이론적인 위협이 아닙니다. 이는 인증되지 않은 산업 프로토콜 (Industrial Protocols), 취약한 접근 제어, 그리고 인터넷에 노출된 인터페이스를 겨냥한 능동적이고 체계적인 캠페인을 나타냅니다. 엔지니어링 리더 및 OT 보안 실무자로서, 여러분은 자극적인 헤드라인 너머를 바라보고 이러한 공격의 정확한 기술적 메커니즘을 해부해야 합니다.
이 글에서 저는 PLC 로직 변조의 메커니즘을 분석하고, 레거시 OT 프로토콜의 구조적 약점을 평가하며, 구체적인 아키텍처 수준의 방어 전략을 개설할 것입니다. 저의 목표는 일반적인 보안 조언을 넘어, 조용하고 악의적인 구성 변경으로부터 물리적 프로세스를 강화할 수 있는 실행 가능한 엔지니어링 가이드를 제공하는 것입니다.
산업 제어 시스템에서의 PLC 로직 변조 및 구성 악용에 대한 심층적인 기술 분석. 네트워크 세분화 (Network Segmentation), 프로토콜 강화 (Protocol Hardening), 물리적 쓰기 방지 구현 방법을 알아보세요.
🔐 프로토콜 취약점: 핵심 약점
산업용 컨트롤러가 왜 그토록 취약한지 이해하려면, 먼저 레거시 산업용 프로토콜 (Legacy Industrial Protocols)의 설계를 분석해야 합니다. Modbus TCP, Siemens S7comm, EtherNet/IP (Common Industrial Protocol 또는 CIP)와 같이 오늘날 사용되는 대부분의 프로토콜은 사이버 보안이 고려되기 훨씬 전인 수십 년 전에 설계되었습니다. 이들은 보안보다 결정론적 성능 (Deterministic Performance), 낮은 지연 시간 (Low Latency), 그리고 신뢰성을 우선시합니다. 결과적으로, 이들은 기본적인 암호화 제어 (Cryptographic Controls)가 결여되어 있습니다.
Modbus TCP
Modbus TCP는 TCP 포트 502에서 작동합니다. 이는 인증 (Authentication), 권한 부여 (Authorization), 또는 무결성 검증 (Integrity Verification)이 전혀 없는 단순한 요청-응답 (Request-Response) 프로토콜입니다. 네트워크상의 어떤 장치라도 레지스터 (Register)를 읽거나 쓰기 위한 Modbus 명령을 보낼 수 있습니다. 예를 들어, 공격자는 기능 코드 6 (Function Code 6, 단일 레지스터 쓰기) 또는 기능 코드 16 (Function Code 16, 다중 레지스터 쓰기)을 포함하는 단일 패킷을 전송하여 중요한 공정 설정값 (Setpoints)을 변경하거나 물리적 출력 (Physical Outputs)을 강제할 수 있습니다. 이 프로토콜은 페이로드 (Payload)를 암호화하지 않으므로, 네트워크 트래픽을 스니핑 (Sniffing)할 수 있는 행위자라면 누구나 레지스터 값을 캡처하고 전체 제어 시스템을 매핑할 수 있습니다.
Siemens S7comm
S7comm은 TCP 포트 102에서 작동하는 독점 프로토콜 (Proprietary Protocol)로, Siemens S7-300/400 PLC와 엔지니어링 워크스테이션 또는 HMI 간의 통신에 사용됩니다. Modbus보다 복잡하지만, 레거시 S7comm 역시 암호화 인증이 결여되어 있습니다. 공격자는 S7comm 세션을 수립하고, "Setup Communication" 요청을 보낸 다음, 데이터 블록 (Data Blocks, DBs), 입력 (Inputs, I), 출력 (Outputs, Q), 또는 비트 메모리 (Bit Memory, M)에 읽기/쓰기 명령을 내릴 수 있습니다. 최신 Siemens 컨트롤러 (S7-1200 및 S7-1500)는 암호화 서명 (Cryptographic Signing)과 암호화 (Encryption)를 도입한 "S7comm-plus"를 지원하지만, 많은 레거시 설치 환경은 여전히 하위 호환성 (Backward-compatibility) 모드로 S7comm을 실행하고 있어 노출된 상태로 남아 있습니다.
EtherNet/IP 및 CIP
EtherNet/IP는 TCP 포트 44818 및 UDP 포트 2222를 통해 Common Industrial Protocol (CIP)를 활용합니다. CIP는 산업 자동화를 위한 표준 객체(objects)와 서비스(services)를 정의합니다. 다른 프로토콜들과 마찬가지로, 표준 CIP는 Set_Attribute_Single 또는 Multiple_Service_Packet과 같은 서비스를 실행하는 데 인증을 요구하지 않습니다. 공격자는 이러한 서비스를 악용하여 PLC 구성 파라미터(configuration parameters)를 수정하거나, I/O 포인트를 강제(force)하거나, 새로운 제어 프로그램을 업로드할 수 있습니다. 통신 보안을 위해 TLS 및 DTLS를 구현하는 확장 기능인 CIP Security가 존재하지만, 레거시 하드웨어의 제약과 수천 개의 산업용 엔드포인트에 걸친 인증서 관리의 복잡성으로 인해 도입이 제한적입니다.
로직 변조 공격의 구조 (Anatomy of a Logic Tampering Attack)
공격자가 권한을 상승시키고 데이터를 유출하기 위해 복잡한 멀웨어(malware)를 배포하는 경우가 많은 기업 IT 환경과 달리, OT 환경은 내장된 정당한 엔지니어링 기능들을 악용하는 "Living off the land" 스타일의 공격으로 인해 빈번하게 피해를 입습니다.
업데이트된 CISA 권고안에서 강조된 주요 공격 벡터는 공용 인터넷에 직접 노출된 장치를 악용하는 것입니다. 이러한 노출은 일반적으로 부실한 네트워크 설계, 잘못 설정된 셀룰러 게이트웨이(cellular gateways), 또는 다요소 인증 (MFA) 없이 원격 데스크톱 프로토콜 (RDP)이나 가상 전화선을 통해 엔지니어링 워크스테이션을 노출시키는 레거시 관행으로 인해 발생합니다.
공격자가 Shodan이나 Censys와 같은 오픈 소스 인텔리전스 (OSINT) 도구를 사용하여 인터넷에 연결된 PLC 또는 인접 게이트웨이를 발견하면, 공격 경로는 놀라울 정도로 단순합니다. 공격 생명주기(attack lifecycle)는 일반적으로 다음과 같은 단계를 따릅니다:
- 정찰 및 포트 스캐닝 (Reconnaissance and Port Scanning): 공격자는 TCP 포트 502 (Modbus TCP), TCP 포트 102 (Siemens S7comm), TCP 포트 44818 (EtherNet/IP), 또는 UDP 포트 47808 (BACnet)과 같은 일반적인 산업용 포트를 스캔합니다.
- 프로토콜 핸드셰이크 및 장치 식별 (Protocol Handshake and Device Identification): 공격자는 장치의 제조사, 모델, 펌웨어 버전 및 메모리 맵을 조회하기 위해 표준 읽기 요청을 보냅니다. 예를 들어, Modbus Report Slave ID 명령 (Function Code 17)을 사용하면 하드웨어 플랫폼을 즉시 식별할 수 있습니다.
- 인증 우회 또는 크리덴셜 스터핑 (Authentication Bypass or Credential Stuffing): PLC에 웹 기반 관리 포털이 있는 경우, 공격자는 제조사의 기본 자격 증명(예: admin/admin 또는 guest/1234)을 사용하여 로그인을 시도합니다. 만약 프로그래밍 인터페이스 자체에 자격 증명이 필요하지 않다면, 이 단계는 완전히 생략됩니다.
- 로직 업로드 및 분석 (Logic Upload and Analysis): 공격자는 PLC로부터 기존 제어 로직(래더 로직 (ladder logic), 구조화된 텍스트 (structured text), 또는 기능 블록 다이어그램 (function block diagrams))을 로컬 엔지니어링 워크스테이션으로 업로드합니다. 그들은 코드 내에서 안전 인터록 (safety interlocks), 알람 임계값 (alarm thresholds), 또는 물리적 설정값 (physical setpoints)과 같은 핵심 변수를 식별하기 위해 코드를 분석합니다.
- 로직 변조 및 다운로드 (Logic Tampering and Download): 공격자는 안전 제한을 비활성화하거나, 센서 판독값을 무시하거나, 물리적 출력을 불안전한 상태로 강제하도록 로직을 수정합니다. 그런 다음 변경된 프로그램을 PLC에 다시 다운로드하여 정당한 제어 로직을 덮어씁니다.
- 서비스 거부 (DoS) 및 브릭킹 (Bricking): 어떤 경우에는 공격자가 손상된 펌웨어를 업로드하거나, 장치의 IP 주소를 변경하거나, 정당한 엔지니어의 접속을 차단하는 실행 시간 비밀번호를 설정하여 컨트롤러를 사실상 벽돌(bricking)로 만들고 제어실의 운영자들을 무력화할 수 있습니다.
로직 변조 및 구성 악용의 메커니즘
이러한 공격이 왜 그토록 파괴적인지 이해하려면, PLC가 코드를 실행하는 방식을 살펴보아야 합니다. PLC는 연속적이고 결정론적인(deterministic) 사이클에 따라 작동합니다. 즉, 물리적 입력(physical inputs)을 읽고, 프로그래밍된 로직을 실행하며, 물리적 출력(physical outputs)을 쓰고, 시스템 오버헤드 작업(네트워크 통신 등)을 수행합니다. 이를 스캔 사이클 (scan cycle)이라고 합니다.
공격자가 PLC 로직을 변조할 때, 그들은 이 사이클의 실행 단계(execution phase)를 변경합니다. 이러한 변조는 다음과 같은 여러 방식으로 나타날 수 있습니다:
- 레지스터 덮어쓰기 (Register Overwriting): 공격자가 특정 메모리 주소로 직접 쓰기 명령을 보냅니다. Modbus TCP의 경우, 이는 홀딩 레지스터 (Holding Registers, 기능 코드 16) 또는 코일 (Coils, 기능 코드 15)에 쓰는 것을 포함합니다. 코일을 강제로 1 (ON) 상태로 만듦으로써, 공격자는 안전 로직(safety logic)의 지시와 상관없이 수동으로 밸브를 열 수 있습니다.
- 인터락 우회 (Interlock Bypassing): 산업 공정은 위험한 작동을 방지하는 논리적 조건인 안전 인터락 (safety interlocks)에 의존합니다. 예를 들어, 흡입 밸브가 닫혀 있으면 펌프가 작동해서는 안 됩니다. 공격자는 래더 로직 (ladder logic)을 수정하여 이러한 인터락을 우회함으로써, 펌프가 공회전(run dry)하게 만들어 스스로 파괴되도록 강제할 수 있습니다.
- 센서 스푸핑 (Sensor Spoofing, 중간자 공격/Man-in-the-Middle): 만약 PLC가 아날로그 입력(예: 정수 값으로 변환된 4-20mA 루프)에 의존한다면, 공격자는 실제 센서 판독값을 안전해 보이는 상수 값으로 덮어쓰는 코드를 삽입할 수 있습니다. 운영자가 인간-기계 인터페이스 (HMI)에서 정상적인 온도나 압력을 보고 있는 동안, 물리적 시스템은 실제로는 폭주 상태(runaway state)로 진입하게 됩니다.
- 타이머 및 카운터 조작 (Timer and Counter Manipulation): 많은 공정이 정밀한 타이밍(예: 화학 혼합 또는 냉각 사이클)에 의존합니다. 타이머 사전 설정값(timer presets)을 변경하면 제품 배치를 망치거나 조기 상태 전환으로 인해 물리적 손상을 일으킬 수 있습니다.
여기서 근본적인 취약점은 무결성 검증(integrity verification)의 부재입니다. 레거시 산업용 프로토콜(Legacy industrial protocols)은 암호화 서명(cryptographic signatures) 없이 페이로드(payload) 데이터를 평문(cleartext)으로 전송합니다. PLC는 권한이 있는 엔지니어링 워크스테이션(Engineering Workstation)에서 보낸 정당한 명령과 네트워크상의 공격자가 주입한 악의적인 명령을 구분할 수 없습니다.
이러한 무단 수정을 탐지하고 방지하려면, 이러한 산업용 프로토콜을 이해하는 네트워크 수준의 모니터링을 구현해야 합니다. 아래는 중요한 PLC 서브넷(subnet)의 홀딩 레지스터(holding registers)를 대상으로 하는 무단 Modbus TCP 쓰기 명령을 탐지하도록 설계된 Suricata 시그니처(signature)의 예시입니다. 이 규칙은 지정된 엔지니어링 워크스테이션(EWS) IP 주소 이외의 호스트가 PLC 메모리에 쓰기를 시도할 때 보안 팀에 경고를 보냅니다.
alert tcp !$ENGINEERING_WORKSTATION any -> $PLC_SUBNET 502 (
msg:"OT-IDS: Unauthorized Modbus TCP Write Multiple Registers Attempt";
flow:established,to_server;
...
이러한 규칙을 구현하려면 네트워크의 베이스라인(baseline)에 대한 깊은 이해가 필요합니다. 만약 HMI가 설정값(setpoints)을 업데이트하기 위해 정기적으로 홀딩 레지스터에 쓰기를 수행한다면, 정상적인 HMI 설정값 조정과 비정상적인 엔지니어링 명령(프로그램 다운로드 또는 펌웨어 업데이트 등)을 구분할 수 있도록 탐지 규칙을 튜닝(tune)해야 합니다.
🏗️ 아키텍처 수준의 방어: 네트워크 세분화 및 프로토콜 강화
엔드포인트 보안(endpoint security)에만 의존해서는 OT 환경을 보호할 수 없습니다. 많은 PLC는 로컬 보안 에이전트를 실행하거나 복잡한 암호화 핸드셰이크(cryptographic handshakes)를 수행할 수 있는 컴퓨팅 자원이 부족합니다. 따라서 일차적인 방어선은 견고하고 세분화된 네트워크 아키텍처(network architecture)여야 합니다.
저는 제어 계층 구조를 위한 퍼듀 모델(Purdue Model)에 따라 네트워크를 구성할 것을 권장합니다. 이 모델은 기업 네트워크(Level 4 및 Level 5)를 산업 운영 구역(Level 3) 및 기본 제어 구역(Level 1 및 Level 2)으로부터 분리합니다.
| 네트워크 구역 (Network Zone) | Purdue 레벨 (Purdue Level) | 핵심 구성 요소 (Core Components) | 주요 보안 통제 (Primary Security Controls) |
|---|---|---|---|
| 엔터프라이즈 구역 (Enterprise Zone) | 레벨 4 및 레벨 5 (Levels 4 & 5) | 기업용 ERP, 이메일, Active Directory | 다요소 인증 (MFA), EDR, 인터넷 게이트웨이, 엄격한 패치 관리. |
| ... |
이러한 방어 체계를 효과적으로 구현하려면 세 가지 아키텍처 명령(architectural mandates)을 반드시 준수해야 합니다.
1. 직접적인 인터넷 노출 제거 (Eliminate Direct Internet Exposure)
PLC를 공용 인터넷에 직접 노출해야 할 운영상의 정당성은 전혀 없습니다. 외부 벤더나 원격 엔지니어를 위해 원격 접속이 필요한 경우, 반드시 산업용 DMZ (IDMZ) 내의 보안 게이트웨이에서 종료되어야 합니다.
사용자는 피싱 방지 다요소 인증 (MFA)을 사용하여 IDMZ에 인증해야 합니다. IDMZ로부터 사용자는 보안이 확보되고 모니터링되는 점프 호스트 (jump host)를 사용하여 레벨 3의 엔지니어링 워크스테이션 (engineering workstation)에 접속해야 합니다. 점프 호스트 세션은 최소 권한 원칙 (principle of least privilege)에 따라 로그가 남고, 기록되며, 제한되어야 합니다.
2. 단방향 데이터 흐름 강제 (Enforce Unidirectional Data Flows)
운영 데이터(프로세스 메트릭 및 알람 등)를 OT 네트워크에서 엔터프라이즈 네트워크 또는 클라우드 분석 플랫폼으로 전송할 때, 양방향 방화벽 (bidirectional firewalls)을 사용하지 마십시오. 대신 단방향 보안 게이트웨이 (unidirectional security gateways, 데이터 다이오드)를 배치하십시오.
이 물리적 장치들은 물리적인 광섬유 송신기와 수신기를 사용하여 데이터가 오직 한 방향, 즉 보안된 OT 네트워크에서 보안되지 않은 엔터프라이즈 네트워크로만 흐르도록 허용합니다. 이는 외부 사이버 공격자가 PLC로 명령을 다시 보낼 수 없도록 물리적으로 차단하여, 원격 실행 벡터 (remote execution vectors)를 완전히 무력화합니다.
3. 물리적 쓰기 방지 스위치 활용 (Leverage Physical Write-Protect Switches)
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기