Detecting Ladder Logic Bombs in IEC 61131-3 PLC Programs using ESBMC-PLC+: A Formal Verification Approach with Trigger Synthesis
이 논문은 기존 방식들이 실패하는 공개 데이터셋에서 적응형 트리거에 대한 강건성과 완벽에 가까운 탐지율을 달성하며, 숨겨진 기능 블록 로직을 노출하고 트리거를 합성함으로써 IEC 61131-3 PLC 프로그램 내의 래더 로직 밤(Ladder Logic Bombs)을 탐지하도록 ESBMC-PLC+를 확장한 정형 검증 프레임워크인 ESBMC-LLB를 제시한다.
원본 논문은 CC BY 4.0 (http://creativecommons.org/licenses/by/4.0/) 라이선스로 제공됩니다. 이것은 아래 논문에 대한 AI 생성 설명입니다. 저자가 작성하거나 승인한 것이 아닙니다. 기술적 정확성을 위해서는 원본 논문을 참조하세요. 전체 면책 조항 읽기
PLC(프로그래밍 가능 로직 컨트롤러)를 공장의 두뇌라고 상상해 보십시오. 이 두뇌는 센서를 관찰하고, 결정을 내리고, 기계를 움직인 다음, 다시 아주 짧은 순간 안에 이 과정을 반복하는 루프를 끊임없이 실행합니다. 이제, 이 두뇌 안에 몰래 숨어든 '로직 폭탄(logic bomb)'을 가진 교활한 해커를 상상해 보십시오. 이 폭탄은 마치 잠자는 용과 같습니다. 공장이 정상적으로 작동하는 동안에는 아무 일도 하지 않지만, 특정하고 숨겨진 조건(예: 카운터가 특정 숫자에 도인 경우)이 충족되는 순간 깨어나서 혼란을 야기합니다. 기계를 멈추게 하거나, 센서 수치를 속이거나, 닫혀 있어야 할 밸브를 열게 만드는 식입니다.
오랫동안 이 공장 두뇌를 점검하는 도구들은 사각지대를 가지고 있었습니다. 이 도구들은 메인 코드는 확인했지만, '함수 블록(function blocks)'—즉, 메인 코드 내부의 작은 서브루틴이나 미니 프로그램들—은 무시했습니다. 이 논문은 그 '잠자는 용(폭탄)'들이 바로 무시되었던 이 함수 블록 안에 숨어 있었다고 설명합니다. 기존 도구들이 이 블록들을 시야에서 놓쳤기 때문에, 악성 코드와 안전한 코드가 검사기에게는 완전히 동일하게 보였던 것입니다. 이는 마치 군중 속에서 스파이를 찾으려 할 때, 사람들의 얼굴만 보고, 정작 스파이가 숨어 있는 코트는 쳐다보지도 않는 것과 같았습니다.
거대한 해결책: 코트를 열다
저자들인 피에르 단타스(Pierre Dantas), 루카스 코르데이로(Lucas Cordeiro), 발디르 주니어(Waldir Junior)는 ESBMC-LLB라는 새로운 방법을 구축했습니다. 그들의 핵심 전략은 간단하지만 강력했습니다. 바로 검사기가 함수 블록 내부를 들여다보게 만든 것입니다. 그들은 숨겨진 코드 내부를 펼쳐서 검사기가 볼 수 있도록 만드는 '번역 레이어(translation layer)'를 추가했습니다.
코드가 눈에 보이게 되면, 그들은 두 가지 영리한 트릭으로 폭탄을 잡아냅니다:
- 스톱워치 (Scan-Watchdog): 만약 폭탄이 프로그램이 무한 루프에 빠지게 만들어 기계를 멈추려 한다면, 검사기는 스톱워치를 든 엄격한 심판 역할을 합니다. 검사기는 "이 작업을 완료하는 데 100단계의 여유를 주겠다. 만약 이를 초과하면 탈락이다!"라고 말합니다. 만약 폭탄이 영원히 루프를 돌려고 하면, 검사기는 즉시 이를 잡아냅니다.
- 배선 테스터 (Output Wiring): 만약 폭탄이 센서에 대해 거짓말을 하거나 기계를 강제로 움직이려 한다면, 검사기는 숨겨진 코드와 메인 시스템 사이의 전선을 연결합니다. 만약 숨겨진 코드가 '거짓'(예: 밸브가 열리면 안 되는데 열라고 명령하는 것)을 보내려 하면, 검사기는 이것이 안전 규칙을 위반하는 것을 포착합니다.
마법 같은 결과: "비밀 코드"를 찾아내다
여기 가장 멋진 부분이 있습니다. 검사기가 폭탄을 발견했을 때, 단순히 "에러!"라고만 말하는 것이 아닙니다. 검사기는 실제로 정확한 **트리거(trigger)**를 출력합니다. 이는 마치 검사기가 "용을 찾았습니다. 그리고 여기 그 용을 깨우는 비밀번호가 있습니다: '카운터가 12에 도달하면'"이라고 말하는 것과 같습니다. 이것을 "트리거 합성(trigger synthesis)"이라고 부릅니다.
얼마나 잘 작동했는가?
연구팀은 이 방법을 여러 데이터 세트에 테스트했으며, 결과는 인상적이었지만 몇 가지 중요한 한계도 있었습니다:
- 공개 테스트: 60개의 프로그램(안전한 프로그램 30개, 폭탄이 포함된 프로그램 30개)으로 구성된 유명한 데이터셋에서, 그들의 방법은 30개의 폭탄을 모두 찾아냈습니다. 모든 폭탄을 잡아냈고 각각의 비밀 트리거를 찾아냈습니다. 또한 29개의 안전한 프로그램이 정말로 안전하다는 것을 증명했습니다. 한 개의 안전한 프로그램은 너무 복잡하여 검사기가 100% 확신할 수 없었지만(안전하다고 하는 대신 "모름"이라고 답함), 해당 프로그램을 잘못 몰아세우지는 않았습니다.
- "스마트한" 해커 테스트: 그들은 수학 퍼즐(단순한 숫자 대신 복잡한 계산을 사용하는 방식) 속에 트리거를 숨겨 시스템을 속이려 시도했습니다. 패턴만을 찾는 기존 도구들은 이러한 속임수를 놓쳤습니다. 그러나 ESBMC-LLB는 수학의 의미를 이해하여 이러한 까다로운 버전의 폭탄 5개를 모두 잡아냈습니다.
- 대규모 테스트: 속도를 테스트하기 위해 310개의 프로그램(안전 155개, 폭탄 155개)을 생성했습니다. 시스템은 평균 70밀리초(눈 깜빡임보다 빠른 속도!) 안에 폭탄의 **100%**를 잡아냈습니다.
- 실제 정수 처리장 테스트: 이들은 실제 정수 처리장 시뮬레이션(SWaT 코퍼스)에 이 방법을 테스트했습니다.
- 단순한 수학 트리거가 포함된 이전 버전의 데이터에서는, 오보(false alarm) 없이 150개 중 149개의 폭탄(99%)을 찾아냈습니다.
- 한계점: 매우 복잡한 비선형 수학(예: 숫자를 반복해서 제곱하는 방식)이 포함된 최신 버전을 테스트했을 때, 시스템은 막혔습니다. 수학이 너무 어려워 검사기가 제시간에 풀 수 없었고, 탐지율은 **49%**로 떨어졌습니다. 논문은 이 부분을 매우 명확하게 밝히고 있습니다. 그들의 방법은 표준적인 로직과 단순한 수학에는 훌륭하지만, 복잡한 비선형 수학의 벽에 부딪힙니다. 그런 특정 경우에는 다른 종류의 도구(CFG-triage 탐지기)가 여전히 더 낫습니다.
그들이 주장하지 않는 것
저자들은 자신들의 도구가 할 수 없는 것에 대해 매우 솔직합니다. 만약 폭탄이 (무한 루프를 돌지 않고) 빠르게 임무를 완수하도록 설계되었고, 검사기가 찾아보라고 지시한 특정 안전 규칙을 위반하지 않는다면, 도구가 이를 놓칠 수도 있다고 명시적으로 밝히고 있습니다. 이것은 가능한 모든 나쁜 것을 찾아내는 마법 지팡이가 아닙니다. 시스템을 멈추거나 정의된 안전 규칙을 깨뜨리는 것을 찾아내는 도구입니다.
결론
이 논문은 함수 블록 내부를 들여다보기 위해 "코트를 열고", 코드의 의미를 이해하는 스마트한 검사기를 사용함으로써, 예전에는 눈앞에 두고도 놓쳤던 교활한 산업용 폭탄을 잡을 수 있음을 보여줍니다. 이 도구는 폭탄을 찾아내고, 그것을 어떻게 트리거하는지 정확히 알려주며(따라서 이를 차단할 수 있음), 수학이 너무 복잡해지지 않는 한 나머지 시스템이 안전하다는 것을 증명합니다. 저자들은 이 도구를 기존의 모든 것을 대체하는 것이 아니라, 기존 방식과 함께 작동하는 강력한 새로운 도구로서 제시하고 있습니다.
연구 분야의 논문에 파묻히고 계신가요?
연구 키워드에 맞는 최신 논문의 일일 다이제스트를 받아보세요 — 기술 요약 포함, 당신의 언어로.