콘텐츠로 이동하기
위협 인텔리전스

러시아의 비상 대응 훈련과 관련 있어 보이는 새로운 OT 맬웨어 'COSMICENERGY'

2023년 5월 25일
Mandiant

보안 상담

보안에 대한 문의사항을 해당 전문가가 상담해 드립니다.

문의하기

*본 아티클의 원문은 2023년  5월 25일 Google Cloud 블로그(영문)에 게재되었습니다.


맨디언트는 새로운 OT(Operational Technology)와 ICS(Industrial Control System)을 노리는 맬웨어를 식별하고 'COSMICENERGY'라고 이름 붙여 추적 중입니다. 맨디언트는 2012년 12월에 러시아의 제출자가 바이러스 토탈(Virus Total) 공개 맬웨어 스캔 유틸리티에 이를 업로드한 것을 확인하였습니다. 이 맬웨어는 유럽, 중동, 아시아 지역에서 전력 송배전 운영에 사용되는 원격 터미널 유닛(RTU) 같은 IEC 60870-5-104(IEC-104) 장치와 상호작용해 전력 중단 사태를 일으키도록 설계되었습니다.

COSMICENERGY는 정전 사태 같은 물리적인 영향을 끼칠 수 있는 특수한 OT 맬웨어의 최신 사례로 발견되었다는 보고가 거의 없습니다. 분석에 따르면 이 맬웨어는 예전에 IEC-104를 통해 전력 송배전에 영향을 미치기 위해 배포된 변종인 INDUSTROYERINDUSTROYER.V2와 기능이 유사합니다.

COSMICENERGY의 발견은 OT 공격을 위한 진입 장벽이 낮아지고 있음을 잘 보여줍니다. COSMICENERGY에서 알 수 있듯이 공격자들은 이전 위협에서 얻은 지식을 활용해 새로운 맬웨어를 만듭니다. 위협 행위자들이 표적을 공격하기 위해 레드팀이 사용하는 도구와 공개된 익스플로잇 프레임워크를 사용한다는 것을 고려할 때 COSMICENERGY는 전력망에 위협이 될 수 있다고 볼 수 있습니다. IEC-104를 준수하는 장치를 사용하는 OT 환경은 COSMICENERGY의 배포를 사전에 차단하기 위한 조치를 취해야 합니다.

COSMICENERGY 개요

기능과 공격 전략을 기준으로 볼 때 COSMICENERGY는 2016년에 발생한 ' INDUSTROYER' 사건을 떠올리게 합니다. 이 사건에 공격자는 IEC-104 장치의 ON/OFF 명령을 통해 RTU와 상호작용을 하였습니다. 분석에 따르면 마이크로소프트 SQL 서버를 통해 OT 환경에 있는 시스템에 접근했을 가능성이 높습니다. 이런 식의 접근에 성공하면 공격자는 원격 명령을 보내 전력선 스위치와 회로 차단기 작동에 영향을 끼쳐 전력 중단 사태를 일으킬 수 있습니다. 간단히 살펴본 공격 과정을 수행하기 위해 COSMICENERGY는 맨디언트가 PIEHOP와 LIGHTWORK라는 이름으로 추적 중인 두 가지 구성 요소를 사용합니다.

  • PIEHOP: 파이썬으로 작성한 교란 도구로 사용자가 제공한 원격 마이크로소프트 SQL 서버에 연결해 파일을 업로드하고 RTU에 원격 명령을 실행하는 기능을 갖고 있습니다. 또한, PIEHOP은 LIGHTWORK를 이용해 원격 시스템에 IEC-104 "ON" 또는 'OFF" 명령을 실행합니다. 실행 파일은 명령 실행 후 즉시 삭제됩니다. 맨디언트가 확인한 PIEHOP 샘플 중 일부에는 IEC-104 제어 기능이 제대로 동작하지 않도록 하는 프로그래밍 로직 오류가 포함되어 있었습니다. 이런 오류는 비교적 쉽게 수정할 수 있다고 판단됩니다.
  • LIGHTWORK: C++로 개발한 교란 도구로 IEC-104 프로토콜을 구현하여 TCP로 RTU의 상태를 변경할 수 있습니다. 이 도구는 구성 가능한 IEC-104 ASDU(Application Service Data Unit) 메시지를 생성해 RTU IOA(Information Object Address) 상태를 ON 또는 OFF로 변경합니다. LIGHTWORK는 명령줄 인자를 통해 대상 장치, 포트, IEC-104 명령에 대한 정보를 활용합니다.
https://storage.googleapis.com/gweb-cloudblog-publish/images/cosmicenergy-fig1_nxyr.max-1900x1900.png

그림 1. COSMICENERGY 실행 체인

COSMICENERGY는 검색 기능이 없습니다. 따라서 이 맬웨어를 성공적으로 실행하려면 맬웨어 운영자가 내부 정찰을 수행해 마이크로소프트 SQL 서버의 IP 주소, 자격 증명, 대상 IEC-104 장치 IP 주소 같은 환경 정보를 파악해야 합니다. 맨디언트가 분석한 LIGHTWORK 샘플에는 8개의 하드코딩된 IEC-104 IOA가 포함되어 있습니다. 이들 주소는 일반적으로 RTU나 릴레이 설정에서 전력선 스위치나 회로 차단기에 해당하는 장치의 입력 또는 출력 데이터 요소와 연결되어 있습니다. 그러나 IOA 매핑은 제조사, 장치 그리고 환경에 따라 크게 달라질 수 있습니다. 추가적인 대상 자산에 대한 정보가 없으면 공격자가 의도한 특정 행동을 정확히 알아내기 어렵습니다.

러시아 정부가 자금을 지원하는 프로젝트와 관련성이 있어 보이는 COSMICENERGY

COSMICENERGY 분석 과정에서 맨디언트는 코드에서 "Solar Polygon"이라는 프로젝트와 연관된 모듈을 참조하는 주석을 발견했습니다. 이 특이한 문자열을 ���색해 본 결과 이것은 2019년 정부 보조금을 받아 사이버 보안 전문가를 양성하고 전력 중단 및 비상 대응 훈련을 실시한 러시아의 사이버 보안 회사인 Rostelecom-Solar가 개발한 Cyber Range(또는 Polygon으로 알려진)와 일치했습니다. 이를 근거로 COSMICENERGY가 러시아 정부가 자금을 지원하는 전력 중단 및 비상 대응 훈련과 관련이 있을 가능성이 제기되었습니다.

https://storage.googleapis.com/gweb-cloudblog-publish/images/cosmicenergy-fig2_DFUyQBb.max-800x800.png

그림 2. “Solar Polygon”을 언급하는 PIEHOP 주석

COSMICENERGY의 정확한 출처와 목적에 대한 명확한 증거는 아직 발견되지 않았습니다. 그러나 이 맬웨어는 에너지 그리드 자산에 대한 실질적인 공격 시나리오를 재현할 목적으로 Rostelecom-Solar 및 관련 당사자가 개발했을 가능성이 있습니다. 이것은 2021년에 러시아 에너지부와 협력하여 Rostelecom-Solar가 주최한 훈련 또는 2022년 상트페테르부르크 국제 경제 포럼 같은 행사에서 사용되었을 수 있습니다.

이 맬웨어가 다른 공격자에 의해 Cyber Range 코드를 재사용해 개발했을 가능성도 배제할 수 없습니다. 위협 행위자들은 실질적인 공격을 용이하게 하기 위해 레드팀 도구나 상용 익스플로잇 프레임워크를 정기적으로 사용하고 수정하는 경향이 있습니다. 가령 TRITON 공격에서 METERPRETER를 사용한 것을 떠올려 볼 수 있습니다. 또한, 특정 국가 정부가 지원하는 공격 그룹은 위협 역량을 높이기 위해 특정 업체와 계약을 맺기도 합니다. 예를 들어 러시아 국방부와 NTC 벌칸 사이의 최근 계약도 같은 맥락에서 이해할 수 있습니다. 관찰 결과 COSMICENERGY는 악의적은 목적으로 개발된 것으로 보입니다. 누가 어떤 목적으로 만들었는지는 아직 확실하지 않지만 이 맬웨어는 실제 공격 시나리오에서 사용될 수도 있고, 단순히 훈련이나 시뮬레이션 용도로 쓰일 수도 있습니다.

OT 맬웨어

COSMICENERGY는 이전에 발견된 맬웨어와 직접적인 관련성이 없습니다. 그러나 이전 사건 및 맬웨어에서 본 기능과 유사성은 있습니다. 예를 들자면 COSMICENERGY는 INDUSTROYER와 INDUSTROYER.V2 같이 전력 전송 및 배전에 영향을 미치도록 설계된 이전에 발견한 맬웨어와 비슷합니다. 또한, COSMICENERGY는 파이썬을 사용한 개발 및 패키징 그리고 IRONGATE, TRITON, INCONTROLLER 등과 같은 OT 프로토콜 구현을 위한 오픈 소스 라이브러리 사용 등에서 다른 OT 맬웨어와 기술적으로 주목할 만한 유사성을 찾을 수 있습니다. 더 자세한 분석 내용은 맨디언트 어드밴티지(Mandiant Advantage)에서 확인�� 수 있습니다.

분석을 통해 식별한 유사성을 기반으로 앞으로 OT 맬웨어에서 나타날 수 있는 주요 트렌드를 정리하면 다음과 같습니다.

  • 설계상 안전하지 않은 프로토콜 남용: OT를 목표로 삼는 맬웨어는 특정 대상 환경을 위해 특별히 제작될 수 있습니다. 그러나 COSMICENERGY의 IEC-104 프로토콜을 악용하는 LIGHTWORK 구성 요소에서 볼 수 있듯이 설계상 안전하지 않은 OT 프로토콜을 악용하는 맬웨어는 다양한 피해자에게 재사용될 수 있습니다.
  • 프로토콜 구현을 위한 오픈 소스 라이브러리 사용: OT 프로토콜을 구현하는 오픈 소스 프로젝트가 증가함에 따라 OT 환경을 침해하기 위한 진입 장벽이 낮아지고 있습니다. 단, 특정 OT 프로토콜은 여전히 맞춤형 구현을 요구할 수도 있습니다.
  • 파이썬을 사용한 맬웨어 개발 및 패키징: 파이썬을 사용해 개발하거나 패키징된 OT 맬웨어가 증가하고 있습니다. 따라서 공격자들이 PyInstaller(IRONGATE 경우) 또는 Py2Exe(TRITON 경우) 같은 도구를 사용하여 OT 맬웨어를 컴파일하거나 패키징하는 경향을 계속 관찰할 수 있을 것으로 보입니다.

전망

COSMICENERGY의 기능은 이전 OT 맬웨어 제품군과 크게 다르지 않습니다. 다만 COSMICENERGY를 통해 OT를 목표로 삼는 맬웨어 제품군이 실질적인 피해를 끼칠 수 있을 정도로 발전하고 있음을 주목해야 합니다. OT 맬웨어가 발견되면 영향을 받는 조직에 즉각적인 위협이 될 수 있습니다. OT 환경은 보안상 미흡한 부분이 존재합니다. 그러나 이런 문제는 빠른 시일 내에 해결될 가능성이 낮습니다. 폐쇄적인 환경이다 보니 아무래도 IT 환경 보다 보안 허점을 찾아 해결하는 속도가 더딥니다. OT 맬웨어는 이런 취약성을 악용합니다. 따라서 실제로 발견되는 일이 드물더라도 경계를 늦추면 안 됩니다. COSMICENERGY는 자원이 풍부한 조직, 국가가 후원하는 공격자 수준의 맬웨어입니다. 이런 맬웨어가 발견되었다는 것은 OT 해킹의 진입 장벽이 낮아지고 있다는 것을 시사합니다. 첨언하자면 맨디언트가 확보한 COSMICENERGY 샘플은 레드팀과 관련되어 있을 수도 있습니다. 관련해 주목할 것은 위협 행위자가 외부 조직과 계약을 맺고 레드팀 도구를 활용한다는 것입니다.

OT 보안 관련 대응이 필요하면 맨디언트 컨설팅에 문의 바랍니다. COSMICENERGY에 대한 상세 분석은 맨디언트 어드밴티지 위협 인텔리전스를 통해 제공됩니다.

탐지 방법

COSMICENERGY 관련 위협에 노출될 수 있는 조직은 다음과 같은 탐색 방법을 참조해 위협 헌팅을 수행할 수 있습니다.

  • HMI(Human-Machine Interface), EWS(Engineering Workstation), OPC 클라이언트 서버 같은 중요 시스템의 로그를 수집하고, 내용을 검토해 중요 시스템에서 파이썬 스크립트나 무단 코드 실행의 증거를 찾습니다.
  • OT 시스템 또는 OT 자원에 접근할 수 있는 시스템에서 PyInstaller나 Py2Exe 같은 승인되지 않은 파이썬 패키지 실행 파일의 생성, 전송, 실행을 식별하고 조사합니다.
  • OT 자원에 접근할 수 있는 시스템을 대상으로 합법적인 임시 폴더, 파일, 아티팩트 및 외부 라이브러리가 생성되는지 모니터링을 수행합니다. 이를 통해 패키징된 파이썬 스크립트 실행의 증거를 수집합니다. 예를 들어 PyInstaller 폴더인 "_MEIPASS" 같은 임시 폴더가 생성되는지 확인합니다.
  • OT 시스템 및 네트워크에 접근할 수 있는 권한이 있는 마이크로소프트 SQL 서버를 모니터링하여 증거를 확보합니다. 증거는 다음과 같은 것들을 예로 들 수 있습니다.
    • 마이크로소프트 SQL 서버 및 자격 증명의 정찰 및 열거 활동
    • 마이크로소프트 SQL 서버에 대한 무단 네트워크 연결(TCP/1433) 및 불규칙하거나 승인되지 않은 인증
    • 윈도우 쉘 명령 실행을 위한 SQL 확장 저장 프로시저 활성화 및 사용

https://storage.googleapis.com/gweb-cloudblog-publish/images/fig3a-cosmicenergy_J2g8c2b.max-800x800.png

그림 3. PIEHOP SQL 명령

  • Certutil 명령 사용(“certutil -hashfile”, “certutil -decode”)
  • Base64 인코딩된 실행 파일의 전송, 생성, 스테이징 및 디코딩

부록 A: COSMICENERGY 개요


파일명 설명 해시
r3_iec104_control.exe PIEHOP PyInstaller executable

MD5: cd8f394652db3d0376ba24a990403d20

SHA1: bc07686b422aa0dd01c87ccf557863ee62f6a435

SHA256: 358f0f8c23acea82c5f75d6a2de37b6bea7785ed0e32c41109c217c48bf16010

r3_iec104_control PIEHOP Python compiled bytecode entry point

MD5: f716b30fc3d71d5e8678cc6b81811db4

SHA1: e91e4df49afa628fba1691b7c668af64ed6b0e1d

SHA256: 7dc25602983f7c5c3c4e81eeb1f2426587b6c1dc6627f20d51007beac840ea2b

r3_iec104_control.py Decompiled PIEHOP entry point Python script

MD5: c018c54eff8fd0b9be50b5d419d80f21

SHA1: 4d7c4bc20e8c392ede2cb0cef787fe007265973b

SHA256: 8933477e82202de97fb41f4cbbe6af32596cec70b5b47da022046981c01506a7

iec104_mssql_lib.pyc PIEHOP Python compiled bytecode

MD5: adfa40d44a58e1bc909abca444f7f616

SHA1: a9b5b16769f604947b9d8262841aa3082f7d71a2

SHA256: 182d6f5821a04028fe4b603984b4d33574b7824105142b722e318717a688969e

iec104_mssql_lib.py Decompiled PIEHOP Python script

MD5: 2b86adb6afdfa9216ef8ec2ff4fd2558

SHA1: 20c9c04a6f8b95d2f0ce596dac226d56be519571

SHA256: 90d96bb2aa2414a0262d38cc805122776a9405efece70beeebf3f0bcfc364c2d

OT_T855_IEC104_GR.exe LIGHTWORK executable

MD5: 7b6678a1c0000344f4faf975c0cfc43d

SHA1: 6eceb78acd1066294d72fe86ed57bf43bc6de6eb

SHA256: 740e0d2fba550308344b2fb0e5ecfebdd09329bdcfaa909d3357ad4fe5552532

부록 B: PIEHOP 분석

PIEHOP(파일명: r3_ice104_control.exe, MD5: cd8f394652db3d0376ba24a990403d20)는 파이썬으로 작성되고 버전 2.1 이상의 PyInstaller 와 함께 패키징 된 도구로 사용자가 제공한 원격 마이크로소프트 SQL 서버에 연결하여 파일을 업로드하고 RTU에 원격 명령을 실행할 수 있는 기능을 갖추고 있습니다.

PIEHOP는 다른 파이썬 파일을 통해 control-True 또는 upload=True 인수를 제공하여 주 함수를 호출하는 것으로 보입니다. oik, user, pwd 그리고 control=True로 호출되는 경우 i104도 함께 제공해야 합니다.

https://storage.googleapis.com/gweb-cloudblog-publish/images/cosmicenergy-fig3_0PLijMM.max-800x800.png

그림 4. PIEHOP 커맨드라인 예제

분석한 샘플에서 PIEHOP의 진입점인 c018c54eff8fd0b9be50b5d419d80f21(r3_iec104_control.py)은 PIEHOP의 메인 함수를 호출하여 control=True 인수를 제공합니다. c018c54eff8fd0b9be50b5d419d80f21(r3_iec104_control.py) 파일은 추출된 내용 내에 adfa40d44a58e1bc909abca444f7f616(iec104_mssql_lib.pyc)로 포함되어 있는 "ice104_mssql_lib" 모듈을 임포트합니다.

https://storage.googleapis.com/gweb-cloudblog-publish/images/cosmicenergy-fig4_LbWrrXB.max-800x800.png

그림 5. PIEHOP 디컴파일된 진입점

2b86adb6afdfa9216ef8ec2ff4fd2558(iec104_mssql_lib.py)은 PIEHOP의 주요 기능을 구현하며 포함된 코드에 대해 개발자가 제공하는 많은 주석이 포함되어 있습니다. 특히 메인 함수에는 로직 결함이 포함되어 있어 마이크로소프트 SQL 서버에 연결해 OT_T855_IEC104_GR.exe(LIGHTWORK)를 업로드한 후 즉시 자체 정리를 시도합니다.

  • upload=True로만 메인 함수를 호출하면 정리 루틴만 수행하고 즉시 종료됩니다.
  • control=True로만 메인 함수가 호출되는 경우 upload=True에 의도된 경로로 이동하여 마이크로소프트 SQL 서버에 연결한 후 OT_T855_IEC104_GR.exe를 업로드합니다.
  • upload=True와 control=True가 모두 메인 함수에 제공되면 아직 구문 분석이 되지 않은 명령줄 인수를 활용하려고 시도하기 때문에 즉시 실패합니다.

올바르게 구현이 된 경우 PIEHOP은 사용자가 제공한 원격 마이크로소프트 SQL 서버에 연결하여 LIGHTWORK를 업로드하고 RTU를 대상으로 하는 원격 명령을 실행한 다음 스스로 삭제할 수 있습니다. PIEHOP은 원격 시스템에서 IEC-104 명령 "ON" 또는 "OFF"를 실행하기 위해 LIGHTWORK를 활용하며 명령 실행 후 실행 파일을 즉시 삭제합니다.

https://storage.googleapis.com/gweb-cloudblog-publish/images/cosmicenergy-fig5_zeev.max-800x800.png

그림 6. PIEHOP 메인 함수

부록 C: LIGHTWORK 분석

LIGHTWORK(파일명: OT_T855_IEC104_GR.exe, MD5: 7b6678a1c0000344f4faf975c0cfc43d)는 IEC-104 프로토콜을 구현하여 TCP를 통해 RTU 상태를 수정하는 C++로 작성된 도구입니다. 이 도구는 구성 가능한 IEC-104 ASDU 메시지를 생성하여 RTU IOA의 상태를 ON 또는 OFF로 변경합니다. 이 샘플은 실행을 설정하는 PIEHOP과 함께 작동합니다. LIGHTWORK는 다음과 같은 위치 명령줄 인수를 받습니다.

  • <ip_address> <port> <command> [either ON (1) or OFF (0)]
https://storage.googleapis.com/gweb-cloudblog-publish/images/cosmicenergy-fig6.max-800x800.png

그림 7. LIGHTWORK 커맨드라인 예제

실행 시 LIGHTWORK는 지정된 타겟 스테이션에 “C_IC_NA_1 – station interrogation command”을 전송하여 상태를 검색하는 것으로 활동을 시작합니다. 그다음 하드코딩된 각 IOA에 “C_SC_NA_1 – single command”을 전송하여 대상 스테이션에 IOA 상태(OFF 또는 ON)을 수정합니다. 마지막으로 “C_CS_NA_1 – clock synchronization command”를 전송하여 원격 스테이션의 시간을 명령을 실행하는 장치의 시계와 동기화합니다.

https://storage.googleapis.com/gweb-cloudblog-publish/images/cosmicenergy-fig7_nffq.max-700x700.png

NetworkMiner - LIGHTWORK IEC-104 트래픽

성공적으로 실행되면 LIGHTWORK는 운영자에게 다음과 같은 명령줄 출력을 제공합니다.

https://storage.googleapis.com/gweb-cloudblog-publish/images/cosmicenergy-fig8_iefz.max-1800x1800.png

그림 9. LIGHTWORK 출력

부록 D: YARA 시그니처

 

rule M_Hunting_PyInstaller_PIEHOP_Module_Strings 
{
     meta:
          author = "Mandiant"
          date = "2023-04-11"
          description = "Searching for PyInstaller files with a custom Python script/module associated with PIEHOP."

     strings:
          $lib = "iec104_mssql_lib" ascii

     condition:
          uint16(0) == 0x5A4D and uint32(uint32(0x3C)) == 0x00004550 and 
          $lib
}
 
rule M_Hunting_Disrupt_LIGHTWORK_Strings 
{
     meta:
          author = "Mandiant"
          description = "Searching for strings associated with IEC-104 used in LIGHTWORK."
          date = "2023-04-19"
 
     strings:
          $s1 = "Connecting to: %s:%i\n" ascii wide nocase
          $s2 = "Connected!" ascii wide nocase
          $s3 = "Send control command C_SC_NA_1" ascii wide nocase
          $s4 = "Connect failed!" ascii wide nocase
          $s5 = "Send time sync command" ascii wide nocase
          $s6 = "Wait ..." ascii wide nocase
          $s7 = "exit 0" ascii wide nocase
 
     condition:
          filesize < 5MB and
          uint16(0) == 0x5A4D and uint32(uint32(0x3C)) == 0x00004550 and
          all of them
}

부록 E: MITRE ATT&CK

 

T1140 Deobfuscate/Decode Files or Information
T0807 Command-Line Interface
T0809 Data Destruction
T0831 Manipulation of Control
T0855 Unauthorized Command Message

-Mandiant, 작성자: Ken Proska, Daniel Kapellmann Zafra, Keith Lunden, Corey Hildebrandt, Rushikesh Nandedkar, Nathan Brubaker

게시 위치