클래로티, 지멘스와 긴밀히 협업해 PLC에 하드 코딩된 암호화 키 탈취 가능 취약점 완전한 대응 성공

  • 기사등록일 : 2022-10-21



산업, 헬스케어 및 상업 환경 전반의 가상 물리시스템(CPS·Cyber-Physical System) 보안 기업인 클래로티(Claroty)의 연구조직인 Team82는 RCE (remote code execution)를 이용해 지멘스 SIMATIC S7-1200/1500 시리즈에 하드 코딩된 글로벌 개인 암호화 키(개인키) (Global Private Cryptographic Key) 추출에 성공했다고 밝혔다.

공격자가 이 키를 추출하면, 영향을 받는 지멘스 제품라인의 모든 PLC를 완전히 제어할 수 있다.

약 10년 전 지멘스는 TIA 포털 v12 및 SIMATIC S7-1200/1500 PLC CPU 펌웨어 제품군의 통합 보안 아키텍처에 비대칭 암호화 방식을 도입했다. 이는 장치 및 사용자 프로그램의 무결성과 기밀성을 보장하는 것은 물론, 산업 환경 내에서 장치의 통신을 보호하는 역할을 수행했다.

당시에는 시스템 통합 사업자(System Intergrator) 및 사용자에게 암호 키 관리 시스템이 운영상 부담이 됐기 때문에 산업용 제어 시스템에 동적 키(Dynamic Key) 관리 및 배포 기능이 존재하지 않았다. 이로 인해 지멘스는 PLC와 TIA 포털 간의 프로그래밍 및 통신을 보호하기 위해 고정된 암호화 키를 사용하기로 했다.

그러나 이후 기술과 보안 연구가 발전하고, 위협 환경이 빠르게 변화하면서 이러한 하드 코딩 방식의 암호화 키로 위험을 완벽하게 보호할 수 없게 됐다. 하드 코딩된 글로벌 암호 키를 추출할 수 있는 악의적인 행위자들은 복구할 수 없는 형태로 장치의 전체 제품라인의 보안을 손상시킬 수 있게 됐다.

클래로티의 연구팀인 Team82는 하드 코딩된 키와 같은 관행에서 벗어나 사용자의 시스템에 미치는 위험을 입증하고, 산업 자동화 에코시스템의 전반적인 보안을 개선하기 위해 주요 공급업체들과 긴밀히 협력해 PLC 보안에 관한 광범위한 연구를 지속해서 수행해 왔다.

이전의 지멘스 SIMATIC S7-1200 및 S7-1500 PLC에 대한 연구와 로크웰 오토메이션(Rockwell Automation)의 로직스(Logix) 컨트롤러 및 스튜디오 5000 로직스 디자이너(Studio 5000 Logix Designer)에 대한 연구를 확장해 최근까지 지속해서 연구 활동을 수행해 왔다.

클래로티 연구원들은 영향을 받는 각 지멘스 제품라인에 사용된 하드 코딩된 글로벌 암호화 키(CVE-2022-38465)를 복구할 수 있는 SIMATIC S7-1200 및 S7-1500 PLC CPU 대상의 새롭고 혁신적인 기법을 발견하고, 지멘스에 공개했다.

지멘스 PLC에 대한 이전 연구(CVE-2020-15782)에서 발견된 취약점을 사용해 PLC의 기본 메모리 보호 기능을 우회하고, 원격으로 코드를 실행하기 위해 읽기 및 쓰기 권한을 얻을 수 있었으며, 지멘스 제품 라인 전반에 사용되는 강력한 보안 기능을 갖춘 내부 개인 키(Private Key)를 추출할 수 있었다. 이러한 새로운 기법을 통해 전체 프로토콜 스택을 재구현하고, 보안이 적용된 통신 및 설정을 암호화하고 복호화했다.

내부적으로 밝혀진 이러한 사실에 대응해 지멘스는 자사의 주력 PLC 라인과 TIA 포털 엔지니어링 워크스테이션 애플리케이션을 보호하는 암호화 체계에 대한 정밀 점검을 했다. 지멘스는 기존의 하드 코딩된 키를 이용한 보호 기능이 더 이상 충분하지 않다는 보안 권고를 인정하고, 하드 코딩된 키의 사용을 제거하는 동적 PKI(Public-Key Infrastructure)를 도입하는데 필요한 리소스와 시간을 투자했다.

지멘스는 사용자가 즉시 SIMATIC S7-1200 및 S7-1500 PLC와 해당 버전의 TIA 포털 프로젝트를 최신 버전으로 업데이트할 것으로 권장하고 있다. 지멘스는 보안 권고를 통해 TIA 포털 V17 및 관련 CPU 펌웨어 버전에 장치별 개별 암호를 기반으로 기밀 구성 데이터를 보호하는 새로운 PKI 시스템과 TLS로 보호되는 PG/PC (Programming Device) 및 HMI 통신이 포함돼 있다고 밝혔다.

◇ 기술적 세부사항

· 지멘스의 액세스 제한 메커니즘

지멘스 PLC의 중요한 보안 기능은 암호로 보호되는 액세스 레벨 제한 메커니즘이다. PLC에 다운로드 되는 프로젝트 내에 원하는 보호 레벨로 암호가 구성된다. 이러한 레벨은 아래와 같다.

- 레벨 1: 모든 구성 및 로직 블록에 대한 전체 읽기 및 쓰기 액세스
- 레벨 2: 쓰기 보호:
- 모두 읽기 가능
- PLC 모드 변경 가능
- 레벨 3: 읽기 액세스 제한:
- HMI 데이터(값 등) 읽기 가능
- 진단 데이터 읽기 가능
- 레벨 4: 전체 보호
- 암호 없이 PLC와 통신 불가

4가지 레벨 모두 동일한 보안 메커니즘을 사용해 사용자에게 권한을 부여한다. 유일한 차이점은 인증 여부와 상관없이 부여된 권한의 범위이다. 암호는 PLC와 연결할 때 요청된다.

· S7-1200 및 S7-1500 암호화 이해

지멘스의 주력 PLC에 대한 비대칭 암호화 절차는 두 가지 주요 목적이 있다.

- 인증: PLC와 통신할 때 사용자를 인증하는 공유 및 파생 세션 키
- 기밀성: 로직 다운로드 등 해당 통신의 일정 기간 데이터를 암호화

클래로티는 타원곡선암호(ECC·Elliptic Curve Cryptography) 비대칭 암호화에 기반한 이 암호화 알고리즘을 파악할 수 있었다. 타원형 곱셈 프로세스(Elliptical Multiplication Process)를 더욱 복잡하고, 해독하기 어렵게 만들기 위해 ‘구성 키(Configuration Key)’를 사용해 Curve 파라미터와 복잡성을 추가한 것을 확인할 수 있었다.

결국 암호화 프로세스와 관련된 모든 관련 키를 파악할 수 있었다.

- 연결 키: 패킷 무결성 검증 및 인증에 사용
- CPU 키: 구성 및 코드를 암호화하고 코드 무결성을 유지하는 데 사용되는 ‘모델/펌웨어 단위’의 키(예: S7-1518, S7-1517)
- 제품군 키: CPU 키를 모를 때 CPU 키와 동일한 용도로 사용되는 ‘제품군 단위’의 키(예: S7-1200, S7-1500)

· PLC에서 코드 실행하기

암호화되지 않은 지멘스의 SIMATIC .upd 펌웨어 S7-1200 중 하나를 리버스 엔지니어링한 후, 개인 키가 펌웨어 파일 내에 상주하지 않기 때문에 PLC에서 직접 추출해야 한다는 것을 알게 됐다.

PLC에서 개인 키를 검색하려면, 이를 검색할 수 있는 DMA(Direct Memory Access)가 필요했다. DMA 작업을 수행할 수 있도록, 1200/1500 PLC 시리즈에서 모두 원격 코드 실행 취약점을 발견했다. 이 취약점(CVE-2020-15782)은 자체적으로 만든 쉘코드 바이트 코드(Shellcode Bytecode)가 포함된 특정 MC7+ 함수 코드로써 활용됐다.

CVE-2020-15782의 취약점 로직은 아래와 같이 동작한다.
- 보안 메모리영역 검사가 없는 [REDACTED] 연산코드(OP code)를 사용해 유효 메모리 영역에 대한 네이티브 포인터를 포함하고 있는 내부 구조체(Struct)를 쓰기 가능한 메모리 영역에 복사한다.
- 이 구조체 내부의 포인터를 원하는 어드레스로 변경한다.
- 이 구조체를 검증하는 데 사용된 CRC를 다시 계산한다(CRC32 연산코드 사용).
- 이 구조체를 원래 위치로 다시 복사하면 [REDACTED] 연산코드를 사용해 원하는 어드레스를 포인팅할 수 있다.
- 이때 자체적으로 만든 구조체의 새로운 어드레스로 간접 액세스를 수행할 수 있다.

이제 PLC의 모든 메모리 주소에서 읽거나 쓰기가 가능하게 됐다. 이러한 기능을 사용해 네이티브 코드를 무효화하고, 원하는 로직을 실행할 수 있다.

클래로티는 S4x22 콘퍼런스에서 PLC에서 네이티브 코드 실행 경쟁이라는 주제로 이러한 취약성에 대한 자세한 기술 발표를 진행했다.

· RCE를 이용해 숨겨진 개인 키 추출

DMA 읽기 권한을 사용해 암호화된 PLC 펌웨어(SIMATIC S7-1500) 전체를 추출하고, 그 기능을 매핑할 수 있었다. 매핑 과정에서 PLC의 개인 키를 판독할 수 있는 기능을 발견했다.

함수 주소를 얻은 후, 우리의 쉘 코드로 특정 MC7+ 연산코드의 기능을 재작성해 개인 키를 판독하는 네이티브 함수를 호출하도록 했다. 그런 다음 이 키를 알려진 메모리 주소로 복사하고, 여기에서 키를 판독했다. 덮어쓰기 기능을 실행하면, 전체 PLC의 개인 키를 얻을 수 있다.

이후 이러한 키가 각 지멘스 SIMATIC S7 제품 라인에서 공유된다는 사실을 확인했고, 즉시 지멘스와 공동으로 공개 절차를 시작했다. 이를 통해 새로운 보안 권고 및 CVE-2022-38465를 수립할 수 있었다.

동일한 방법을 사용해 CPU에서도 구성 키를 추출할 수 있었다.

개인 키 및 구성 키와 이 알고리즘에 대한 지식을 바탕으로 전체 프로토콜 스택을 구현하고, 보안 통신 및 구성의 암호화/복호화를 수행할 수 있었다.

◇ 공격 플로우: PLC 및 프로세스에 대한 제어권 확보

우리가 추출할 수 있었던 개인 키를 공격자가 사용하게 되면, PLC를 완전히 제어할 수 있다.

· 암호 공격

PLC의 개인 키와 암호화 알고리즘에 대한 지식을 가진 공격자는 PLC에 구성된 암호를 검색해 장치에 구성된 보호 레벨과 상관없이 완전한 제어권을 확보하게 됨으로써 아래와 같은 공격할 수 있다.

- 구성 획득 및 해시 암호 복호화(PLC에서 구성 판독): PLC가 레벨 3보다 낮은 보호 레벨에 있다면, 공격자는 특별한 권한 없이 PLC (업로드 절차)에서 구성을 검색할 수 있다. 업로드되면, 공격자는 PLC 구성을 확보하게 되며, 개인 키를 사용해 업로드된 구성에서 해시 암호를 복호화할 수 있다. 공격자는 복호화된 해시 암호를 사용해 PLC 인증과 더 높은 권한을 얻을 수 있다.

중간자 공격(MITM·Man-in-the-Middle): 개인 키에 대한 액세스는 물론, 트래픽의 암호화 메커니즘에 대한 지식이 있는 공격자는 클라이언트와 PLC 연결과정의 중간에서 PLC로 위장할 수 있다. 중간자 공격은 다음과 같은 단계로 수행된다.

- 클라이언트(피해자)는 정상 PLC 통신 사이의 침입한 공격자의 PLC에 접속해 암호화된 연결 키를 보낸다.

- 공격자는 연결 키를 복호화하고, 복호화된 키를 사용해 실제 PLC에 연결한다. 연결되면, 공격자는 실제 PLC로부터 생성된 챌린지(Challenge)를 받는다.

- 공격자는 실제 PLC의 챌린지를 클라이언트에 전달하고, 유효한 응답(Response) 메시지를 받는다.

- 공격자는 실제 PLC의 응답 메시지를 전달하고, 인증된 연결을 설정한다. 이 세션은 완전한 권한이 부여된 세션이 된다. 이 시점에서 공격자는 PLC의 모든 구성 또는 블록을 변경하거나 구성을 판독할 수 있다. 이러한 액세스를 통해 PLC에서 암호화된 해시암호를 판독하고, 이를 복호화할 수 있게 된다.

- 수동 트래픽 가로채기: 네트워크의 특정 PLC에 대한 트래픽을 캡처할 수 있는 수동 액세스 권한을 가진 공격자는 PLC에서 구성에 대한 읽기/쓰기를 가로챌 수 있다. 공격자는 개인 키를 사용해 구성을 복호화하고, 해시 암호를 추출할 수 있다. 이 해시암호를 사용해 공격자는 컨트롤러에 대한 인증을 획득하고, 새로운 구성을 작성할 수 있다.

◇ 요약

클래로티는 이전 연구 CVE-2020-15782로 달성한 S7 PLC에서 네이티브 코드를 실행할 수 있는 능력을 통해 이러한 공격(CVE-2022-38465)을 수행할 수 있었다. 네이티브 코드 실행을 이용해 개인 키를 보호하는 원시 메모리 영역을 판독할 수 있었으며, 결국 완전히 키를 복구할 수 있었다.

또한 PLC의 하드 코딩된 개인 키를 추출해 전체 PLC에 대한 액세스와 중간자 공격 수행 등에 사용할 수 있는 PLC에 구성된 해시 암호 복호화와 S7 PLC 및 EWS 간의 모든 통신에 대한 복호화를 비롯해 여러 공격 시나리오를 시연할 수 있었다.

사용자는 지멘스의 권고에 따라 S7-1200 및 S7-1500 PLC 제품군과 TIA 포털 v17을 최신 버전으로 업데이트해야 한다. TIA 포털 v17은 통신을 암호화하기 위해 TLS 관리 시스템을 도입했다. 또한 지멘스는 PLC 구성과 관련된 모든 기밀 데이터를 기본으로 보호하기 위해, 사전에 활성화된 PLC 구성 암호 요구사항과 다른 파트너와 안전하지 않은 통신을 방지하기 위해 사전에 정의된 보안 PG/HMI 통신 그리고 명시적으로 설정돼 있지 않은 컨트롤러에 대한 모든 유형의 연결을 방지하기 위해 사전 활성화된 PLC 액세스 보호 기능을 도입했다.

◇ 주요 내용

- Team82는 지멘스(Siemens) SIMATIC S7-1200/1500 PLC 및 TIA 포털 제품 라인에 내장된 하드 코딩 방식의 강력한 보안 기능을 갖춘 글로벌 암호화된 개인 키를 추출하는 새롭고 혁신적인 방법을 개발했다.

- 공격자는 이 키를 사용해 지멘스 SIMATIC 장치 및 관련 TIA 포털에 대한 여러 위협적인 공격을 수행할 수 있으며, 네 가지 액세스 레벨 보호 기능을 모두 우회할 수 있다.

- 악의적인 행위자는 이 비밀 정보를 사용해 전체 SIMATIC S7-1200/1500 제품 라인을 복구할 수 없는 상태로 손상시킬 수 있다.

- 모든 기술 정보는 지멘스 측에 공개됐고, 지멘스는 이 취약점을 해결하는 새로운 버전이 적용된 PLC 및 엔지니어링 워크스테이션을 출시했다.

- CVE-2022-38465가 할당됐고, CVSS v3 스코어는 9.3으로 평가됐다.

- 또한 공격자는 독립적인 지멘스 SIMATIC 클라이언트(TIA 포털이 필요하지 않음)를 개발해 전체 업로드/다운로드 절차 및 중간자 공격(MITM·Man-in-the-Middle)을 수행할 수 있으며, 수동 OMS+ 네트워크 트래픽을 가로채거나 복호화할 수 있다.

- 이번 작업은 이전의 지멘스 SIMATIC PLC 연구에 대한 확장판이다.

- 지멘스는 S7-1200 및 S7-1500 PLC와 TIA 포털을 모두 업데이트했으며, 사용자에게 최신 버전으로 전환할 것을 권고하고 있다.

- 이번 공개로 TIA 포털 v17에 새로운 TLS 관리 시스템이 도입돼 지멘스 PLC 및 엔지니어링 워크스테이션 간의 구성 데이터와 통신에 대한 암호화 및 기밀성을 보장하고 있다.

- 지멘스의 권고사항은 링크에서 확인할 수 있다. 또한 지멘스는 업데이트된 주요 보호기능에 관한 내용을 포함한 공지를 했으며, 해당 내용은 링크에서 확인할 수 있다.

◇ 취약점

· CVE-2022-38465
· CWE-522 자격증명 보호기능 부족

CVSS v3 스코어: 9.3
- 설명: SIMATIC S7-1200 및 S7-1500 CPU와 관련 제품에 내장된 글로벌 개인 키 보호기능은 더 이상 충분하지 않은 방식으로 판명됐다. 이 키는 기밀 구성 데이터의 레거시 보호와 레거시 PG/PC 및 HMI 통신에 사용되고 있다. 이를 통해 공격자는 CPU 제품군 중 단일 CPU에 대한 오프라인 공격으로 전체 CPU 제품군에 대한 개인 키를 찾아낼 수 있다. 그런 다음, 공격자는 이러한 지식을 이용해 해당 키로 보호되는 프로젝트에서 구성된 기밀 데이터를 추출하거나 레거시 PG/PC 및 HMI 통신에 대한 공격을 수행할 수 있다.

- 감사의 말
Team82는 이번 공개 작업에 대한 협력을 비롯해 이번에 발견된 사항들을 확인하고, 취약점에 대한 패치를 제공하는데 신속한 대응을 보여준 지멘스에게 감사를 표했다.

클래로티(Claroty) 개요

클래로티(Claroty)는 산업(OT), 헬스케어(IoMT) 및 상업(IoT) 환경을 비롯한 XIoT (Extended Internet of Things) 전반에 걸쳐 기업들이 가상 물리시스템(CPS·Cyber-Physical System)을 안전하게 보호할 수 있도록 지원한다. 클래로티의 통합 플랫폼은 기존의 고객 인프라와 원활하게 통합할 수 있으며, 가시성과 위험성 및 취약점 관리, 위협 탐지 및 안전한 원격 액세스를 위한 광범위한 제어 기능을 제공한다. 세계 최대 투자사들과 산업 자동화 공급업체들의 지원을 받는 클래로티의 솔루션은 전 세계 수백여 기업의 수천 개 현장에 구축돼 있다. 이 회사는 뉴욕에 본사를 두고 있으며, 유럽과 아태지역 및 남미 등에 지사를 두고 있다. 자세한 내용은 홈페이지에서 확인할 수 있다. 웹사이트: www.claroty.com