해커가 슈퍼마켓 냉동고를 녹였을 때: OT 보안 교훈
해커들이 유럽 슈퍼마켓의 냉동고를 해동시켰습니다. 운영기술(OT) 장비가 계속 뚫리는 이유와 산업 제어 시스템을 보호하는 방법을 정리합니다.

리옹의 한 슈퍼마켓에서 야간 근무 매니저를 맡고 있다고 상상해 보세요. 새벽 3시, 야간조가 냉동식품 진열장 위의 서리가 녹아내리는 것을 발견합니다. 그러다 압축기 경보가 울리기 시작하는데, 한 통로만이 아니라 매장 전체에서 울립니다. 누군가 상황을 파악했을 때는 이미 워크인 냉동고가 원격 명령으로 해동 모드에 들어가 있었고, 수천 유로어치 냉동 재고가 법적 폐기 기준을 향해 조용히 녹아가고 있었습니다. 올해 프랑스 슈퍼마켓 체인의 냉장 컨트롤러가 공격받았을 때 실제로 이런 일이 벌어졌습니다. 운영기술(OT) 보안은 남의 일이라고 생각하는 개발자라면 한 번쯤 새겨들어야 할 경고입니다.
이번 공격은 할리우드 영화에 나올 법한 정교한 익스플로잇 체인이 아니었습니다. 보도에 따르면 공격자들은 인터넷에 노출된 냉장 컨트롤러의 자동 해동 주기를 작동시켰고, 해당 장비는 대형 산업 장비 업체의 상업용 모델이었습니다. 피해는 여러 나라의 매장으로 퍼졌습니다. 비슷한 시기에 별도의 사고로 벨기에-네덜란드계 식료품 그룹이 IT 시스템 일부를 오프라인으로 전환해야 했고, 물류와 배송에도 차질이 생겼습니다. 우연이었는지 조율된 공격이었는지는 몰라도 결과는 같았습니다. 디지털 세계를 통해 물리 세계가 해킹당한 것입니다.
그런데 냉동고가 굳이 인터넷에 연결되어 있을 이유가 있나?
이 소식에 가장 많이 나온 반응은 "도대체 냉장고를 왜 인터넷에 연결하는 거야?"라는 댓글이었고, 어디서나 비슷한 말이 넘쳐났습니다. 수사적인 질문처럼 들리지만 실제로 이유가 있고, 그 이유를 외면하기 때문에 몇 년마다 같은 논쟁이 반복되는 것입니다.
상업용 냉장 설비는 단순한 냉장고가 아닙니다. 중형 슈퍼마켓은 수십 개의 진열 케이스, 워크인 냉장고와 냉동고, 압축기 랙, 응축기로 구성된 분산 열 시스템을 운영하며, 이를 온도와 에너지 비용의 균형을 맞추는 컨트롤러들이 통합 제어합니다. 원격 연결의 사업적 이유는 분명합니다.
- 원격 진단. 수백 개 매장을 담당하는 냉장 설비 업체는 고장이 나기 며칠 전에 압축기의 이상 신호를 미리 볼 수 있습니다. 정기 해동 한 번을 위해 기술자를 보내 버튼을 누르게 하면 비용이 들지만, 원격 명령은 비용이 거의 들지 않습니다.
- 에너지 최적화. 슈퍼마켓은 면적당 에너지를 가장 많이 쓰는 건물 중 하나입니다. 체인들은 전 매장의 케이스 온도와 해동 일정을 조정하고, 일부는 전력망이 불안정할 때 부하를 줄이면 전력 회사로부터 보상을 받는 수요 반응 프로그램에도 참여합니다.
- 규정 준수 로깅. 식품 안전 규정은 온도 기록을 지속적으로 남기도록 요구합니다. 네트워크에 연결된 컨트롤러는 자동으로 감사 기록을 남기므로, 클립보드도 필요 없고 종이 기록을 조작할 일도 없습니다.
- 설비 간 비교. 매장이 2,000곳이라면, 한 매장의 압축기가 동급 매장보다 전력을 15% 더 쓰고 있다는 사실을 발견하는 것이 수천만 원짜리 수리비로 번지기 전에 냉매 누출을 찾아내는 방법입니다.
그러니 연결 자체가 멍청한 발상은 아닙니다. 문제는 구현 방식입니다. 초기 보도에 따르면 이 컨트롤러 중 다수는 인터넷에서 직접 접근할 수 있었습니다. 일부는 자체 셀룰러 모뎀과 SIM 카드를 달고 공인 IP에 노출되어 있었고, VPN도 게이트웨이도 허용 목록도 없었습니다. 널리 공유된 한 사례에 따르면 인증은 사용자명 admin에 오늘 날짜로 만든 비밀번호였습니다. 이건 공격 표면이 아니라 환영 매트가 깔린 열린 문입니다.
실제 OT 공격은 이런 모습입니다
소프트웨어 엔지니어들은 사이버 공격을 보통 데이터 탈취로 떠올립니다. 데이터베이스 유출, 자격 증명 노출, 랜섬웨어 메시지 같은 것들이죠. 그런데 OT 공격은 정도의 차이가 아니라 종류가 다릅니다. 표적은 정보가 아니라 물리적 공정입니다. 페이로드도 암호화가 아니라, 누구든 나타나면 신뢰해 버리는 장비에 보내지는 정상처럼 보이는 명령입니다.
해동 공격이 얼마나 깔끔한지 보세요. 공격자는 악성코드를 만들 필요도, 권한을 상승시킬 필요도, 프로토콜을 완전히 이해할 필요도 없었습니다. 해동 주기는 컨트롤러의 정상적이고 승인된 기능입니다. 증발기 코일에 서리가 쌓이면 주기적으로 녹여야 하기 때문에 존재하는 기능입니다. 공격자는 그것을 일정에서 벗어나 대규모로 호출했을 뿐입니다. 컨트롤러 입장에서는 비정상적인 요청이 없었으니 안전 인터록도 작동하지 않았습니다. 이것은 OT 버전의 confused deputy 문제입니다. 장비는 받아서는 안 되는 명령을 충실히 실행합니다.
이런 패턴은 씁쓸할 정도로 여러 곳에 적용됩니다. 누군가 화학 약품 투입 슬라이더를 움직여서 정수장이 "공격"당한 사례가 있었고, 건물 관리 시스템은 HVAC 업체의 원격 접속을 통해 장악당한 적이 있습니다. 거의 모든 경우에 위험한 기능은 버그가 아니라 기능입니다. 원래 접근하면 안 되는 사람들이 닿을 수 있는 기능이죠. 그래서 해결책은 더 나은 코드 리뷰가 아니라 아키텍처입니다.
가장 위험한 OT 취약점은 메모리 손상 버그가 아닙니다. 정당한 기능이 부당한 호출자에게 노출된 것입니다.
아무도 적용하지 않았던 패치
보안 엔지니어라면 움찔할 만한 세부 사항이 있습니다. 이 컨트롤러들의 근본 취약점은 몇 달 전에 제조사와 조율된 절차를 거쳐 이미 공개되어 있었습니다. 보안 연구자들이 상세한 분석 글을 올렸고, 최소한 일부 모델에는 패치도 있었습니다. 그런데도 공격은 일어났습니다.
이것이 산업 장비 패치의 어두운 현실입니다. 기업 IT는 호사를 누리고 있습니다. 치명적인 CVE가 발표되면 며칠 안에 플릿 관리 도구가 알림을 보내고, 패치를 준비해 배포합니다. OT는 그렇게 돌아가지 않습니다. 슈퍼마켓 냉동 케이스의 컨트롤러는 15년 동안 돌아갈 수도 있습니다. 매장이 소유하고, 제3자 냉장 업체가 유지보수하고, 제조사가 만들었으며, 6년 전에 회사를 떠난 설치 담당자가 설정했을 수도 있습니다. 9개국 2,400개 현장에 펌웨어 업데이트를 적용할 책임은 정확히 누구에게 있을까요? 실제로는 아무도 없습니다.
더 나쁜 건, 제조사가 이 수정 사항을 보안상 중요하다고 명확히 표시하지 않고 배포한 것 같다는 점입니다. 실제 고장 장비가 쌓여 있는 유지보수 업체 입장에서는 "펌웨어 업데이트 가능"이라는 문구가 선택 사항 잡무처럼 보입니다. 이건 기술 문제만큼이나 커뮤니케이션 실패입니다. 누구나 나라 전체의 식료품을 해동시킬 수 있게 만드는 취약점의 패치라면, 시설 관리자가 놓칠 수 없는 말로 릴리스 노트에 분명히 적어야 합니다. 명세와 구현 사이의 간극은 버그만 만드는 게 아니라, 운영자가 취약한 줄도 모르는 패치되지 않은 장비 무리를 통째로 만들어 냅니다.

안전 기본값 설계: 최악의 날을 대비하기
좋은 설계가 어떤 모습인지 이야기해 봅시다. 여기 적용되는 원칙은 특별할 게 없습니다. 안전이 중요한 소프트웨어에서 이미 쓰는 방어적 설계 원칙들이지만, OT 세계에서는 거의 적용되지 않을 뿐입니다. 저는 전에 재앙을 막아내는 방어적 엔지니어링에 대해 쓴 적이 있는데, 냉장 컨트롤러는 그 전형적인 사례입니다.
위험한 상태 변경에 속도 제한 걸기
해동 주기는 가끔 돌리는 것은 물리적으로 안전하지만, 계속 돌리면 파괴적입니다. 그러니 펌웨어에서 물리 법칙을 강제하세요. 해동이 끝나면 원격 명령이 무엇이든 최소 간격이 지나기 전까지는 다시 실행하지 않도록 합니다. 해동 요청을 한 번 보낼 수 있는 공격자는 천 번도 보낼 수 있습니다. 장비는 물리적으로 허용되는 한도 이상으로 명령을 따르면 안 됩니다. 몇 줄의 코드와 타이머 하나로 충분하며, 어떤 제어 평면 침해든 피해 반경을 제한할 수 있습니다.
원격 권한보다 로컬 인터록이 우선
케이스 온도가 이미 임계값을 넘었거나 제품 센서가 따뜻하다고 보고하면, 원격 해동 명령은 거부되고 크게 기록되어야 합니다. 컨트롤러는 명령이 말이 안 된다는 걸 알 수 있는 센서 데이터를 이미 갖고 있습니다. 그 데이터를 쓰게 하세요. 시스템을 이미 알려진 위험 상태로 밀어 넣는 명령은 명령이 아니라 오류입니다.
비밀번호 대신 서명된 명령
임베디드 장비의 비밀번호는 이미 졌다고 봐야 합니다. 기본값으로 남고, 여러 장비가 공유하고, 포스트잇에 적히고, 날짜로 만들어집니다. 더 나은 모델은 비대칭 방식입니다. 컨트롤러는 프로비저닝 시점에 심어 둔 벤더나 운영자의 공개 키로 모든 원격 명령의 서명을 검증합니다. 이제 비밀번호를 훔쳐도 소용없습니다. 서명 키가 필요한데, 그 키는 2,400대의 냉동 케이스가 아니라 운영 센터의 HSM에 들어 있습니다. 네, 키 관리와 교체, 폐기 인프라가 필요합니다. 그래도 충분히 가치가 있습니다. 소프트웨어 업데이트 문제는 10년 전에 이미 해결했습니다. 명령 채널도 같은 대접을 받아야 합니다.
네트워크는 적대적이라고 가정하기
장비가 셀룰러 모뎀과 기본 자격 증명을 달고 출하되면, 배포된 지 몇 주 안에 노출된 장비를 찾아주는 검색엔진에 올라갈 것입니다. 지속 가능한 유일한 해결책은 그게 확실하다고 보고 설계하는 것입니다. 인바운드 연결은 기본적으로 거부하고, 텔레메트리는 브로커로 아웃바운드만 보내며, 관리 평면은 상호 인증된 터널을 통해서만 접근하게 합니다. "인터넷에 노출하지 마라"는 조언이고, "노출되어도 버틸 수 있게 만들라"는 엔지니어링입니다.
격리는 선택이 아닙니다: 제대로 된 네트워크 분리
IEC 62443, NIST 가이드라인, 고전적인 퍼듀 모델 등 모든 OT 보안 프레임워크는 같은 이야기를 합니다. 제어 시스템을 평평한 네트워크에 두지 말라는 것입니다. 그런데 냉동 케이스의 셀룰러 모뎀은 그 반대의 안티패턴 그 자체입니다. 회사 방화벽을 완전히 우회해서, 보안팀이 존재조차 모를 수 있는 감시되지 않는 개별 주소의 진입점을 수천 개 만들어 냅니다.
실제로 작동하는 아키텍처는 이런 모습입니다:
- 컨트롤러는 전용 OT VLAN에 둡니다. 인터넷으로 가는 경로도, 기업 IT로 가는 경로도 없어야 합니다. 단 하나의 게이트웨이만 이들과 통신할 수 있습니다.
- 게이트웨이가 프로토콜 허용 목록을 강제합니다. 컨트롤러는 게이트웨이와 Modbus나 벤더 전용 프로토콜로만 대화합니다. 정상 트래픽은 지루하고 예측 가능하므로, 여기서 나오는 이상 징후는 신호가 아주 강한 경고입니다.
- 원격 접속은 점프 호스트를 거칩니다. 다중 인증, 세션 녹화, 시간 제한이 있는 자격 증명을 씁니다. 냉장 업체는 전체 설비에 상시 VPN을 받는 대신, 특정 매장에 4시간 동안만 접근할 수 있습니다.
- 아웃바운드 전용 텔레메트리. 벤더의 클라우드가 온도 데이터를 필요로 하면 게이트웨이가 밀어 보냅니다. 내부에서 외부로 끌어가는 것은 없습니다.
- 모든 것을 목록화하세요. 존재를 모르는 것은 분리할 수도 없습니다. 냉동 케이스의 셀룰러 모뎀이 바로 인벤토리에서 빠지기 쉬운 숨은 연결입니다. Shodan이 찾아주기 전까지는요.
이 모든 것은 그 대안에 비하면 가설이나 값비싼 이야기가 아닙니다. 어려운 부분은 기술이 아니라 조직입니다. 시설팀, IT 보안팀, 벤더가 누가 무엇을 책임질지 합의해야 합니다. 대부분의 유통 기업에서 OT는 그 틈새에 빠집니다. IT가 다루기엔 너무 물리적이고, 시설팀이 다루기엔 너무 네트워크적입니다. 이 모호함이 진짜 취약점이며, 클라우드 인증의 빈틈을 보이지 않는 침해로 바꿔 버리는 것과 같은 문제입니다. 클라우드 인증 로깅의 사각지대에서 본 것처럼, 텔레메트리를 소유한 사람이 없다면 공격을 보는 사람도 없습니다.

소프트웨어 엔지니어가 얻어 갈 것
냉장 컨트롤러를 직접 만질 일은 없을지도 모르지만, 여기서 드러난 실패 양상은 연결된 모든 시스템의 실패 양상이고, 점점 여러분의 문제가 되고 있습니다. IT와 OT의 경계는 계속 무너지고 있습니다. 창고 로봇, 사무실 HVAC, 연구실 장비, 스마트 빌딩 모두 임베디드 리눅스를 돌리고 클라우드와 통신합니다. 일부 병원 검사 장비는 구독 계정에 잔액이 없으면 검사를 아예 실행하지 않습니다. 즉, 인터넷에 연결된 결제 시스템의 장애나 침해가 의료 진단을 멈춰 세울 수 있다는 뜻입니다. 우리가 편의 기능을 하나씩 쌓아 올려 그런 세계를 만들었습니다.
그래서 교훈은 그대로 옮겨집니다. 노출 범위를 목록화하세요. 무엇이 리스닝 중인지 모르면 누군가 먼저 찾아낼 것입니다. 위험한 작업은 "일반 기능"이라 해도 특권 작업으로 취급하세요. 제어 평면에 도달한 공격자는 여러분의 기능을 그대로 여러분에게 쓸 것입니다. 중요한 것은 서명하고, 나머지는 만료시키세요. 장치의 실패 상태를 안전한 상태로 설계하세요. 연결이 끊긴 컨트롤러는 냉각을 계속해야 하며, 대기 중인 명령을 모두 신뢰해서는 안 됩니다. 그리고 보안 패치를 배포할 때는 크게 알리세요. 아무도 적용하지 않는 패치는 패치가 없는 것과 다를 바 없습니다.
슈퍼마켓 해동 공격은 주로 그 황당함으로 기억될 것입니다. 해커 대 냉동 완두콩이라니요. 하지만 다음 공격은 아이스크림을 노리지 않을 것입니다. 콜드체인 의약품 창고, 데이터센터 냉각 설비, 지자체 상수도처럼 노출되고 패치되지 않았으며 인증이 허술한 같은 종류의 컨트롤러를 노릴 것입니다. 하드웨어는 똑같고, 자격 증명도 똑같이 엉망입니다. 달라지는 것은 누군가 그날의 비밀번호를 입력했을 때 무엇이 따뜻해지고, 범람하고, 멈추느냐 하나뿐입니다.


