Trawling

Coldframe, 가짜 냉장 관리기로 로그인·제어 시도 기록

Coldframe은 Danfoss와 Dixell 냉장 설비 관리기를 흉내 내는 허니팟입니다. 가짜 로그인과 대시보드로 접속자의 익스플로잇·제상 조작 시도를 유도해 JSON 로그에 남기며, 실제 명령을 실행하거나 설비를 제어하지 않습니다. 로그에는 입력된 비밀번호와 요청 본문도 포함될 수 있습니다.

GitHub 계정 hedgerow-dev가 공개한 Coldframe은 슈퍼마켓 냉장 설비 관리기를 흉내 내는 허니팟입니다. 인터넷에 노출된 장비를 찾는 스캐너나 공격자가 접속하면 실제 제품과 비슷한 로그인 화면과 일부 API 응답을 보여주고, 어떤 경로에 접근하고 로그인 뒤 무엇을 시도하는지 기록합니다. 저장소는 Python 표준 라이브러리만 사용하는 단일 파일 구현과 배포·로그 처리 방법을 공개합니다.

Danfoss AK-SM 800A는 매장 냉장 시스템을 관리하는 장비입니다. Danfoss 안내서는 장비에 StoreView Web 인터페이스가 내장돼 있고 냉장 제어 기능을 제공한다고 설명합니다. 따라서 실제 장비에서 관리 화면의 제상 명령은 냉장 설비 운용과 연결됩니다. Coldframe은 이런 관리 화면의 외형과 요청 경로를 모사해 접속자의 로그인 뒤 행동까지 기록합니다.

Coldframe에는 Danfoss AK-SM 800A와 Copeland/Dixell XWEB EVO를 흉내 내는 두 페르소나가 있습니다. Danfoss 모사는 실제 장비에서 관측된 서버 헤더와 헤더 순서, StoreView 페이지 제목, TLS 설정 등을 따라갑니다. 실제 펌웨어 패키지의 시작 페이지를 제공하는 선택 설정도 있습니다. 다만 Coldframe은 장비의 지문을 맞추는 한편 실제 웹 애플리케이션 전체를 구현하지는 않습니다.

Danfoss 모사 화면에서는 Supervisor와 12345 같은 약한 로그인 정보가 통과합니다. CVE-2025-41450과 관련된 당일 코드(code of the day) 로그인 우회도 정답 코드를 입력하면 성공하도록 구현했습니다. 로그인 뒤 접속자는 가짜 냉장 진열장 목록과 제상 버튼을 봅니다. 버튼을 누르면 Coldframe은 control 이벤트를 기록하지만 냉장고나 제어기에 명령을 보내지 않습니다. XML API 요청도 일부 받아들이며, 공개 익스플로잇 경로와 일치하는 요청에는 취약점 식별 정보를 로그에 붙입니다.

Dixell 모사는 XWEB EVO의 로그인 경로와 페이지 특성을 따릅니다. 허니팟에서는 기본 계정 Admin과 Admin이 성공 처리되고, 5분 안에 로그인에 5회 실패하면 계정이 잠깁니다. XWEB Pro의 auth_mode 우회와 일치하는 요청은 별도로 표시합니다. 이는 해당 취약점이 실제 제품에서 악용됐다는 뜻이 아니라, Coldframe이 그 요청 패턴을 알아보고 기록한다는 뜻입니다.

기록은 한 줄에 한 이벤트를 담는 JSONL 형식입니다. 요청 이벤트에는 메서드와 경로, 호스트, 사용자 에이전트, 인증 정보와 본문이 들어갑니다. 로그인 이벤트는 입력된 사용자 이름과 비밀번호, 허용 여부를 남기고, 제어·XML·Modbus 활동은 각각 별도 이벤트로 기록합니다. summary.py는 로그를 지정한 기간, 예를 들어 최근 24시간 기준으로 요약합니다. 입력된 비밀번호와 요청 본문이 기록될 수 있어 로그에 민감한 값이 포함될 수 있으며, 로그 필드도 접속자가 보낸 입력입니다.

Modbus TCP 모사는 별도로 켤 수 있습니다. 가짜 온도와 설정값, 제상 레지스터를 제공해 웹 화면을 찾는 접속자뿐 아니라 일반 산업용 스캐너의 요청도 살펴보는 방식입니다. README에 따르면 실제 AK-SM 800A는 Modbus를 자체 진열장 제어기와 통신하는 데 사용하므로, 허니팟의 Modbus 서비스는 기본값에서 꺼져 있습니다. 일반 산업용 스캐너도 관찰하려는 배치에서는 이 서비스를 켤 수 있습니다.

운영자는 Ubuntu 서버 배포 예제나 컨테이너 실행 방법으로 허니팟을 공개할 수 있습니다. 저장소는 페르소나에 필요한 포트만 열고 SSH 접속은 관리자의 주소로 제한하며, DNS와 패키지 업데이트를 제외한 외부 통신을 막도록 안내합니다. 컨테이너 프로세스는 비루트 사용자와 읽기 전용 파일시스템 등으로 제한합니다. 실제 접속 IP를 보존하려면 rootless 포트 전달 대신 rootful Podman이나 Docker를 사용하라고 README는 설명합니다. rootless 전달이 출발지 주소를 바꿔 모든 접속이 같은 내부 IP처럼 보일 수 있기 때문입니다.

Coldframe은 로그인 뒤 화면과 명령을 일부만 구현하므로 상호작용 범위가 제한됩니다. 저장소가 공개돼 있어 응답을 대조하면 허니팟임을 알아챌 수 있고, 클라우드 서버 주소도 산업용 장비와 어울리지 않는 단서가 될 수 있습니다. 저장소의 중심은 허니팟 코드와 배포·로그 처리 방법입니다. Coldframe의 기록은 설치한 배치에 도착한 요청을 보여주며, 관측 범위는 실제 매장 장비 전체가 아니라 해당 배치에 한정됩니다.

참고 자료

오류 제보