COMMENTS (0)
댓글은 익명으로 작성되며, 삭제 비밀번호를 설정하면 본인만 삭제할 수 있습니다. 비밀번호를 설정하지 않은 댓글은 누구나 삭제할 수 있습니다.
제로데이 4개와 최초의 PLC 루트킷으로 에어갭을 넘은 Stuxnet의 기술 구조를 분석한다. 21초 센서 재생 공격부터 Operation Olympic Games의 실체까지.
댓글은 익명으로 작성되며, 삭제 비밀번호를 설정하면 본인만 삭제할 수 있습니다. 비밀번호를 설정하지 않은 댓글은 누구나 삭제할 수 있습니다.
2010년 6월 17일, 벨라루스 민스크. 바이러스블록아다(VirusBlokAda)의 보안 연구원 세르게이 울라센은 이란 고객사에서 접수된 이상한 장애 보고를 분석하고 있었다. Windows 시스템이 설명할 수 없는 블루스크린과 재부팅을 반복했다.
원인을 추적하자 .LNK 바로가기 파일을 악용하는 루트킷이 나왔다. 폴더를 여는 것만으로 코드가 실행됐다. 울라센은 이것이 단순한 악성코드가 아니라는 것을 직감했다.
그의 직감은 맞았다. 이 악성코드는 USB 하나로 에어갭을 넘어 이란 나탄즈 핵시설의 원심분리기 1,000대를 파괴한 최초의 사이버 무기였다. 이름은 Stuxnet이다.
일반적인 악성코드는 제로데이 1개만 있어도 고급으로 분류된다. Stuxnet은 4개를 동시에 사용했다.
| CVE | 용도 |
|---|---|
| USB 전파. .LNK 파일 아이콘 표시만으로 코드 실행 | |
| 네트워크 전파. 프린터 공유 서비스로 원격 코드 실행 | |
| 권한 상승. 커널 키보드 레이아웃 취약점 | |
| 권한 상승. 작업 스케줄러 보안 컨텍스트 우회 |
여기에 Siemens WinCC 데이터베이스의 하드코딩된 비밀번호(WinCCConnect/2WSXcder)까지 악용했다. 전파 경로는 5가지다. USB, 네트워크 공유, 프린터 스풀러, WinCC 데이터베이스, Step 7 프로젝트 파일. 하나가 막혀도 나머지 4개가 작동한다.
Stuxnet의 드라이버 파일에는 대만 Realtek Semiconductor와 JMicron Technology에서 탈취한 정식 코드 서명 인증서가 적용돼 있었다. Windows는 이 드라이버를 신뢰할 수 있는 소프트웨어로 판단했다. 두 회사 모두 대만 신주과학공원에 입주해 있었다.
Stuxnet의 진짜 표적은 Windows가 아니었다. 나탄즈 핵시설의 Siemens S7-315 PLC였다.
이란의 IR-1 원심분리기는 정상 상태에서 1,064Hz로 회전한다. Stuxnet은 이 주파수를 1,410Hz까지 올렸다. 약 15분간 유지한 뒤, 2Hz로 급락시켰다. 거의 정지 상태를 50분간 유지한 다음 다시 1,064Hz로 복귀했다. 이 사이클을 27일마다 반복했다. 알루미늄 로터는 이 급격한 속도 변화를 견디지 못하고 파손됐다.
핵심은 운영자가 이 공격을 눈치채지 못했다는 것이다. Stuxnet은 공격 직전 21초간의 정상 센서 데이터를 녹화한 뒤, 공격이 진행되는 동안 이 데이터를 반복 재생했다. 운영자의 HMI 화면에는 모든 수치가 정상으로 표시됐다. 원심분리기가 파괴되는 동안 제어실의 화면은 평온했다.
| 공격 단계 | 주파수 | 지속 시간 |
|---|---|---|
| 정상 운전 | 1,064Hz | 27일 |
| 과속 | 1,410Hz | ~15분 |
| 급정지 | 2Hz | ~50분 |
| 복귀 | 1,064Hz | 27일 (반복) |
이것이 가능했던 이유는 Stuxnet이 PLC 수준의 루트킷을 포함했기 때문이다. 역사상 최초로 문서화된 PLC 루트킷이다. Stuxnet은 Siemens Step 7 소프트웨어의 통신 라이브러리(s7otbxdx.dll)를 자체 악성 버전으로 교체했다. 엔지니어가 Step 7으로 PLC 코드를 읽으면, 루트킷이 요청을 가로채서 감염 전의 정상 코드를 반환했다.
나탄즈 핵시설은 인터넷에 연결되지 않은 에어갭 네트워크다. Stuxnet은 어떻게 도달했을까.
Kaspersky Lab과 Symantec이 추적한 결과, 최초 감염 대상은 이란의 산업 자동화 기업 5곳이었다.
| 기업 | 역할 |
|---|---|
| Foolad Technic Engineering | 산업 자동화 |
| Behpajooh | 전기·컴퓨터 엔지니어링 |
| Neda Industrial Group | 미국 제재 대상 기업 |
| Control-Gostar Jahed | 산업 제어 |
| (미공개) | 원심분리기 부품 제조 |
이 기업들의 엔지니어가 감염된 노트북이나 USB를 나탄즈에 반입하면, Stuxnet은 에어갭을 넘는다. USB가 꽂히는 순간 .LNK 취약점이 작동하고, 이후 네트워크 공유와 Step 7 프로젝트 파일을 통해 내부 확산한다. 감염된 USB 하나가 수천 대의 시스템을 거쳐 최종 표적인 S7-315 PLC에 도달하는 구조다.
Stuxnet은 감염 시 실행 조건을 엄격하게 검사했다. S7-315 또는 S7-417 CPU가 아니면 페이로드를 실행하지 않았다. Vacon(핀란드) 또는 Fararo Paya(이란)의 주파수 변환기가 연결된 환경, 807Hz에서 1,210Hz 사이에서 동작하는 시스템만 표적으로 인식했다. 이 조건을 모두 충족하는 시설은 세계에서 나탄즈뿐이었다.
Stuxnet의 배후는 미국 NSA와 이스라엘 Unit 8200의 합동 작전이다. 코드명은 "Olympic Games." 2006년 부시 행정부에서 시작돼 오바마 행정부에서 가속됐다. 2012년 6월, 뉴욕타임스의 데이비드 생어 기자가 저서 "Confront and Conceal"에서 이 작전을 상세히 보도했다. 미국과 이스라엘 모두 공식적으로 인정하지 않았다.
흥미로운 사실이 있다. NSA는 이란과 동시에 북한 핵시설도 Stuxnet으로 공격하려 했다. 한국어 설정을 감지하면 활성화되는 변종을 개발했다. 하지만 실패했다. 북한의 네트워크 고립이 너무 극단적이어서, 악성코드가 핵시설 컴퓨터에 도달할 경로 자체가 없었다.
Stuxnet은 의도치 않게 전 세계로 확산됐다. 이란 엔지니어의 노트북이 인터넷에 연결되면서 통제를 벗어났다. 감염 3개당 추가 전파 3건으로 제한하는 카운터가 있었지만 불충분했다. 최종적으로 155개국 20만 대 이상의 컴퓨터가 감염됐다. 이란이 58.9%, 인도네시아 18.2%, 인도 8.3%를 차지했다.
코드 500KB짜리 악성코드가 국가의 핵 프로그램을 물리적으로 지연시켰다.
ISIS(Institute for Science and International Security)의 분석에 따르면, 2009년 말부터 2010년 초까지 나탄즈에서 약 1,000대의 IR-1 원심분리기가 교체됐다. 6개 캐스케이드(984대) 규모로, 당시 설치된 8,692대의 약 11%에 해당한다. IAEA 사찰관들은 카메라로 원심분리기가 대량 해체되는 장면을 포착했지만, 이란은 원인을 공개하지 않았다.
Symantec은 이 500KB(압축 기준, 비압축 1.2MB)의 코드를 5~10명의 핵심 개발자가 약 6개월간 작업한 것으로 추정했다. MITRE ATT&CK에서 Stuxnet(S0603)은 Enterprise 25개, ICS 25개 기법에 매핑된다. 알려진 ICS 악성코드 중 가장 넓은 공격 표면을 가진 사례다.
Stuxnet은 선례가 됐다. 이후 산업제어시스템을 표적으로 한 사이버 무기가 연이어 등장했다.
| 악성코드 | 연도 | 표적 |
|---|---|---|
| Stuxnet | 2010 | 이란 나탄즈 원심분리기. PLC 주파수 조작으로 물리적 파괴 |
| Industroyer | 2016 | 우크라이나 전력망. IEC-104 프로토콜로 변전소 차단기 원격 조작 |
| TRITON | 2017 | 사우디 석유화학 안전시스템(SIS). 안전 장치를 무력화해 물리적 사고 유발 시도 |
| PIPEDREAM | 2022 | Schneider·Omron PLC 대상 모듈형 프레임워크. 배포 전 차단 |
| FrostyGoop | 2024 | 우크라이나 난방 시스템. Modbus TCP로 600개 건물 48시간 난방 차단 |
TRITON은 Stuxnet과 다른 차원의 위험을 보여줬다. Stuxnet이 장비를 파괴했다면, TRITON은 안전 장치를 끄려 했다. 석유화학 시설의 안전시스템이 무력화되면 폭발이나 유독가스 누출로 이어질 수 있다.
한국도 예외가 아니다. 2014년 Kimsuky는 한국수력원자력(KHNP)을 공격해 고리 1호기 냉각계통 밸브 도면과 직원 10,799명의 개인정보를 유출했다. OT 제어 시스템은 망분리 덕분에 침해되지 않았다. 같은 해 한국 국방부는 북한 핵시설을 겨냥한 "Stuxnet형 사이버무기" 개발 계획을 보고했다.
Stuxnet을 사전에 탐지할 수 있었던 지점은 존재한다.
USB 장치 통제. Stuxnet의 최초 진입 경로는 USB였다. 허용된 장치만 연결 가능한 화이트리스트 정책이 있었다면 에어갭 침투 자체가 불가능했다.
PLC 프로그램 무결성 검증. Stuxnet의 PLC 루트킷은 Step 7 소프트웨어 스택을 통한 읽기를 가로챘다. PLC 펌웨어에서 직접 코드 블록을 읽어 비교하는 대역 외 검증이 있었다면 변조를 발견할 수 있었다.
코드 서명 인증서 이상 탐지. 하드웨어 회사(Realtek, JMicron)의 인증서로 서명된 커널 드라이버가 산업 제어 환경에 설치되는 것은 비정상이다. 인증서 화이트리스트 기반 검증이 필요했다.
Level 0 센서 데이터 교차 검증. HMI에 표시되는 값과 물리 센서의 원시 데이터를 비교했다면, 21초 재생 공격을 탐지할 수 있었다. 현재 Dragos, Claroty, Nozomi 같은 OT NDR 플랫폼이 이 교차 검증을 제공한다.
Stuxnet은 2010년의 악성코드지만, 제기한 질문은 2026년에도 유효하다. 에어갭은 정말 안전한가. PLC 코드의 무결성을 누가 검증하는가. 센서가 보여주는 숫자를 그대로 믿어도 되는가. 15년이 지났지만, 이 질문들에 대한 답은 여전히 "충분하지 않다"이다.