FILE공개
FILE

구형 NanoCore RAT, 안티디버그 3종 무장하고 DuckDNS로 은신

서명 없는 PE 실행 파일 하나가 상용 RAT NanoCore를 감싼 채 디버거·샌드박스 탐지 회피 루틴을 갖추고 발견됐다. 이 파일이 접속을 시도한 duckdns.org 서브도메인은 현재 루프백으로만 resolve돼, 살아있는 C2인지 이미 폐기된 흔적인지 판단이 엇갈린다.

2026년 7월 1일 17:17 (UTC+9)최근 관측2026년 7월 2일심각도55CTX Team행위자CodosoSunshop GroupIOC3MITRE17

언사인드 NanoCore 스프레더, 안티디버그 3종 세트로 무장하고 나타나다

새로 카탈로그에 오른 Win32 실행 파일 한 점이 눈에 띄는 이유는 페이로드 자체가 아니라 그 위에 얹힌 방어 회피 스택 때문이다. 해시 6427336ade955128d895921dbb9bbcc379ad910690ff63f6deff3794a2086c8c(이하 6427336a)는 서명 없는 PE32 GUI 실행 파일로, VirusTotal 기준 59/77 엔진이 악성으로 탐지했고 VMRay·C2AE·Zenbox 세 개 샌드박스가 모두 malicious 판정을 내렸다. 위협 라벨은 trojan.midie/nanobot, 벤더 공통 명칭에는 midie·nanobot·msil이 뒤섞여 있지만 샌드박스 세 곳이 공통으로 지목한 실제 실행 계열은 NanoCore RAT다. 흥미로운 대목은 이 파일이 완전히 새로운 변종이 아니라, 오래전부터 유통되던 상용 RAT를 감쪽같이 감싼 anti-analysis 계층이라는 점이다.

파일 태그를 보면 detect-debug-environment, checks-user-input, long-sleeps가 나란히 붙어 있다. 이는 단순한 우연이 아니라 위협 메타데이터의 MITRE 목록에 실제로 T1497(Virtualization/Sandbox Evasion), T1497.002, T1497.003, T1622(Debugger Evasion)가 명시돼 있는 것과 정확히 대응한다. 즉 이 바이너리는 실행 즉시 자신이 디버거나 가상화 환경, 혹은 자동 분석 샌드박스 위에서 돌고 있는지를 점검하고, 사용자 입력 여부를 확인하며, 긴 sleep 루틴으로 동적 분석 시간을 소진시키는 세 가지 방어 회피 루틴을 명시적으로 갖추고 있다는 뜻이다. 상용 RAT치고는 꽤 신경 쓴 패키징이다.

빌드 프로비넌스를 뜯어보면 이 판단이 더 분명해진다. .text 섹션 엔트로피가 7.68에 달하는데, 이 섹션 크기가 266,240바이트로 파일 전체의 대부분을 차지한다. 동시에 정적 임포트 테이블은 import_count=0으로 기록돼 있다. 정상적인 PE 실행 파일이 이 정도 크기의 코드 섹션을 갖고 있으면서 임포트가 전혀 없다는 것은 상식적으로 이례적이다. 실제 API 호출 계층이 정적 임포트 테이블에 노출되지 않고 별도 로더나 언패킹 루틴을 통해 런타임에 동적으로 resolve된다고 보는 편이 합리적이다 — 다만 이는 이 데이터 조각만으로 언패킹 과정을 직접 관측한 결과는 아니며, 엔트로피·임포트 부재라는 정적 지표에서 끌어낸 추론에 가깝다는 점은 분명히 해둘 필요가 있다. imphash feae4b4d85d0b5d3b68f83f4fee0492d와 vhash 0250467d05555bz3yz5e3z, ssdeep 문자열 6144:4mRcsQAKqVYM8AFtE3GK9U5lB88PFdvOGa7…는 모두 확보돼 있지만, 이 값들이 동일한 빌더에서 나온 다른 샘플과 겹치는 흔적은 이번 카탈로그 안에서 확인되지 않는다. 사실 이 파일은 이번 레코드에서 imphash·서명자·위협 라벨 어느 축으로도 인접 지표와 묶이지 않는 고립된 노드로 표시돼 있다 — 향후 추가 관측이 쌓이기 전까지는 단일 샘플의 특성으로만 다뤄야 한다.

PE 메타데이터가 말해주는 유통 방식 — "En2m7acq.exe"의 다중 이름

이 샘플의 meaningful_name은 En2m7acq.exe이며, product 필드에는 Unemawermaq라는 의미 없는 문자열이 들어 있다. alt_names 목록에는 En2m7acq, En2m7acq.exe, 해시 자체를 파일명으로 쓴 6427336ade955128d895921dbb9bbcc379ad910690ff63f6deff3794a2086c8c.exe, 그리고 NA_6427336ade955128d895921db.exe 같은 제네릭 이름이 함께 나열된다. 이런 패턴은 사용자가 직접 실행하거나 별도 드로퍼를 거쳐 배포되는 페이로드에서 흔히 보이는 특징으로, MITRE T1204(User Execution)에 해당하는 초기 실행 방식과 부합한다. 서명 필드는 signed=false로 명확히 표시돼 있어, 이 바이너리가 정식 코드 서명 인증서 없이 그대로 유포됐다는 점도 확인된다. 코드 서명을 통한 화이트리스트 우회 전략을 취하는 최근 다수 캠페인과 달리, 이 샘플은 서명이라는 신뢰 채널을 아예 우회하지 않고 순수하게 anti-analysis와 dynamic-DNS 은닉에 의존하는 저비용 접근을 택한 셈이다.

첫 관측 시점은 2023-07-24로 기록돼 있고, PE 타임스탬프 역시 같은 날짜를 가리킨다. 마지막 관측은 2023-08-31, 제출 횟수는 8회, 고유 제출원은 6곳으로 나타난다. 짧은 기간 동안 여러 경로에서 반복적으로 제출된 흔적은 이 샘플이 특정 표적 하나만을 노린 일회성 페이로드가 아니라 어느 정도 반복 유포된 도구였을 가능성을 시사하지만, 표적 산업이나 지역 필드가 이번 레코드에서 비어 있어 어느 섹터·지역이 실제로 노출됐는지는 이 데이터만으로는 특정할 수 없다.

secur3.duckdns.org — 살아있는 C2인가, 죽은 흔적인가

이 샘플의 C2 설계를 드러내는 유일한 네트워크 지표는 도메인 secur3.duckdns.org다. 이 파일은 실행 중 두 개의 IDS 시그니처를 발화시켰는데, 하나는 ET INFO DYNAMIC_DNS Query to *.duckdns. Domain, 다른 하나는 ET INFO DYNAMIC_DNS Query to a *.duckdns .org Domain으로 모두 Proofpoint Emerging Threats Open 룰셋에서 나온 low severity 알림이다. 두 룰 모두 심각도는 낮게 매겨져 있지만, 이는 룰 자체가 duckdns.org라는 무료 dynamic-DNS 서비스에 대한 질의 자체를 광범위하게 캐치하도록 설계됐기 때문이며 탐지 신뢰도가 낮다는 의미는 아니다.

문제는 이 도메인의 현재 DNS 상태다. 마지막으로 확보된 레코드를 보면 A-레코드가 127.0.0.1로 찍혀 있고, MX 레코드 역시 secur3.duckdns.org 자기 자신을 가리키는 자가참조 구조다. 루프백 주소로 resolve되는 A-레코드와 자기 자신을 향하는 MX 레코드의 조합은 정상적으로 운영 중인 C2 서버의 특징이 아니라, 싱크홀 처리됐거나 운영자가 서비스를 내린 뒤 방치된 dynamic-DNS 항목, 혹은 설정 오류가 난 호스트에서 흔히 관찰되는 패턴이다. VirusTotal 탐지 비율은 6/91에 불과하고 평판 점수는 -19로 낮게 매겨져 있는데, 이는 이 도메인이 활성 악성 인프라로서 광범위하게 플래그된 상태라기보다는 저평판·저활동 상태의 잔존 항목에 가깝다는 해석과도 맞아떨어진다.

이 도메인에는 TLS 인증서 데이터도, 등록 생성일(created) 정보도 확보돼 있지 않다. 인증서 시리얼이나 SAN을 통한 교차 연결, 혹은 도메인 나이를 근거로 한 신선도 판단은 이번 레코드에서는 불가능하다. dynamic-DNS 기반 C2가 구조적으로 갖는 약점이 바로 여기에 있다 — 등록기관 계약이나 인증서 발급 절차 없이 무료 서브도메인 하나로 인프라를 굴리기 때문에, 도메인이 폐기되거나 재활용되는 순간 추적에 필요한 발판 자체가 함께 사라진다. secur3.duckdns.org가 지금 시점에 죽은 채널로 보이는 것도, 그 인프라 형태가 원래부터 이런 휘발성을 내재하고 있었다는 사실과 무관하지 않다. duckdns.org라는 공급자 패턴 자체는 지역이나 AS 소유자로 특정되지 않는, NanoCore류 저비용 RAT 운영에서 반복적으로 쓰이는 흔한 발판이라는 점도 함께 짚어둘 만하다.

실행부터 회피, C2, 그리고 RAT 본기능까지 — 사슬을 따라가보면

이 침투 흐름을 단계별로 재구성하면 상용 RAT 하나가 어떻게 최소한의 인프라로 탐지를 피해 가는지가 드러난다. 첫 단계는 실행이다. 서명 없는 GUI PE32 바이너리가 En2m7acq.exe라는 이름, 혹은 해시값 그대로의 파일명으로 사용자 시스템에 놓이고 실행되는 구조는 정상 배포 채널을 통한 도구 설치가 아니라 사용자 실행 또는 스크립트 기반 트리거에 의존하는 T1204 패턴에 해당한다.

실행이 시작되면 곧바로 방어 회피 단계가 이어진다. detect-debug-environment·checks-user-input·long-sleeps 태그로 확인되는 이 루틴은 T1497(Virtualization/Sandbox Evasion)과 T1622(Debugger Evasion)로 매핑되며, 7.68이라는 높은 .text 엔트로피가 이 회피 로직이 단순 문자열 체크 수준을 넘어 코드 자체를 난독화·패킹한 형태로 감춰져 있음을 뒷받침한다. 자동화된 분석 환경이 판정을 내리기 전에 실행을 지연시키거나 스스로 종료하는 방식은, 초기 대량 스캔 단계에서 탐지를 피하기 위한 전형적인 저비용 전술이다.

C2 단계에서는 앞서 다룬 duckdns.org 서브도메인 질의가 등장한다. MITRE는 이런 무료 웹 서비스 기반 채널을 T1102(Web Service)로 분류하는데, 합법 서비스의 정상 트래픽 사이에 C2 통신을 숨기는 효과와 함께 인프라 구축 비용을 거의 0에 가깝게 낮추는 이점을 노린 설계다. 마지막 단계에서 VMRay·C2AE·Zenbox 세 샌드박스는 모두 NanoCore 계열의 malicious 판정으로 수렴했고, 그중 Zenbox는 96%라는 높은 신뢰도로 MALWARE·TROJAN·EVADER·RAT 네 가지 분류를 동시에 부여했으며 C2AE는 70% 신뢰도로 RAT 분류를 내렸다. 위협 메타데이터의 MITRE 목록에는 T1055(Process Injection)와 그 하위 기법인 T1055.003(Thread Execution Hijacking), T1055.011(Extra Window Memory Injection), T1055.012, 그리고 T1112(Modify Registry), T1486(Data Encrypted for Impact)까지 명시돼 있다. 다만 이 항목들은 NanoCore 계열이 일반적으로 갖춘 기능 세트를 반영한 것으로, 이번 샘플의 실행 로그나 룰 매치에서 프로세스 인젝션이나 암호화 동작이 직접 관측된 흔적은 이 데이터 조각 안에는 없다 — 계열 차원의 역량과 개별 샘플의 실측 행위는 구분해서 읽어야 한다.

NanoCore라는 오래된 상용 RAT, 그리고 붙은 이름표

세 샌드박스가 공통으로 지목한 실행 계열은 NanoCore다. NanoCore는 플러그인 기반 원격 데스크톱 제어, 키로깅, 파일 관리 기능을 갖춘 오래된 상용 RAT로, 범죄형 사이버 공격에서 광범위하게 쓰여 온 도구로 알려져 있다. 이번 샘플의 패키징 — 서명 없음, 고엔트로피 패킹, 안티디버그 계측, 무료 dynamic-DNS 채널 — 은 이 계열에서 새삼 놀라운 변종이라기보다는 표준적인 저비용 배포 방식에 가깝다.

이 레코드에서 눈에 띄는 대목은 오히려 귀속 쪽이다. 위협 메타데이터는 이 활동을 Codoso — Sunshop Group, APT19, C0d0so 등의 별칭으로도 추적되는 행위자 — 에 연결하며 동기를 espionage로 명시하고 있다. 그런데 첩보 목적의 named APT 클러스터가 범용 상용 RAT를 그대로 활용하는 조합은 통상적인 기대와는 다소 어긋난다. 정교한 맞춤형 임플란트를 구축·유지하는 대신 이미 시장에 널린 도구를 재사용하는 선택은, 해당 클러스터 내부의 하위 조직이 기회주의적으로 도구를 재활용했거나, 혹은 이 활동이 클러스터의 주력 작전군보다 낮은 우선순위의 작업일 가능성을 암시한다 — 다만 이는 단일 샘플에서 끌어낸 추론일 뿐이며, 이 attribution과 도구 선택의 조합이 반복적으로 관측되는지는 추가 사례가 쌓여야 판단할 수 있다. 현재로서는 단정적 결론을 내리기 어려운 낮은 신뢰도의 관찰로 남겨둘 필요가 있다.

파편적 스냅샷이 말해주는 것과 말하지 않는 것

이번 레코드를 구성하는 지표는 사실상 두 개뿐이다. 상세 데이터를 온전히 갖춘 6427336a와, 유형·크기·탐지율·라벨 어느 것도 채워지지 않은 채 해시값만 남아 있는 두 번째 파일 c93d8e331a542c6f64a6dbc58a7a1038840e9b5b31a8c4edf1d87043bf5d8827이다. 후자는 이번 분석에서 어떤 결론도 뒷받침하지 못하는 빈 껍데기에 가까우며, 앞으로 추가 관측이 붙어야 의미를 가질 수 있는 잠재적 코호트 후보로만 남겨두는 것이 적절하다.

인프라 쪽 그림도 의도적으로 좁다. IP나 URL 지표는 이번 카탈로그에 전혀 존재하지 않고, 도메인은 secur3.duckdns.org 단 하나다. 이 하나의 도메인이 인증서 시리얼이나 NS 레코드, 등록기관 정보로 다른 지표와 묶이는 흔적도 확인되지 않는다 — 오직 IDS 룰 매치라는 행위 기반 연결고리를 통해서만 이 파일과 이어진다. 이런 구성은 이 레코드가 NanoCore 운영자들이 통상적으로 굴리는 C2 로테이션 전체가 아니라, 그 로테이션의 한 조각을 붙잡은 스냅샷에 가깝다는 점을 보여준다. 실제로 이 캠페인의 전체 인프라 풋프린트가 어느 규모인지, 다른 duckdns.org 서브도메인이나 별도 C2 서버가 병행 운영되고 있는지는 이번 지표만으로는 판단할 수 없다.

품질 관점에서 보면 이 레코드는 medium 수준의 신뢰도로 평가할 만하다 — 확보된 두 지표 가운데 하나만 실질적으로 활용 가능한 데이터를 갖췄고, 그마저도 도메인 인증서·등록일 정보의 부재로 인프라 나이를 근거로 한 판단이 제한된다. 그렇다고 이 파편이 무가치한 것은 아니다. 안티디버그 계측, 고엔트로피 패킹, dynamic-DNS 베이코닝이라는 세 가지 특징이 하나의 파일 안에서 동시에 확인된 것 자체는 상용 RAT가 여전히 어떤 수준의 방어 회피 스택을 갖추고 유통되는지를 보여주는 구체적 사례다.

이 조각이 위협 지형에 대해 말해주는 것

이번 샘플이 시사하는 바는 크게 두 가지로 정리할 수 있다. 첫째, NanoCore처럼 오래되고 널리 알려진 RAT조차 정적 분석과 자동화 샌드박스를 동시에 겨냥한 회피 계층 — 안티디버그, 사용자 입력 체크, 장시간 sleep, 고엔트로피 코드 섹션 — 을 갖춘 형태로 여전히 유통되고 있다는 점이다. 탐지 엔진 다수가 이미 이 계열을 인지하고 있음에도(59/77이라는 높은 탐지율이 이를 보여준다) 방어 회피 로직을 덧씌우는 투자가 계속되는 것은, 초기 자동 트리아지 단계를 통과시키는 것 자체가 여전히 공격자에게 실질적 가치를 갖는다는 뜻으로 읽을 수 있다.

둘째, dynamic-DNS 기반 C2가 갖는 근본적 휘발성이다. secur3.duckdns.org가 지금 루프백으로 resolve되는 상태는 이 채널이 이미 죽었거나 싱크홀 처리됐을 가능성을 강하게 시사하지만, 동시에 이런 무료 서브도메인 인프라가 등록기관 계약이나 인증서 발급 절차 없이 손쉽게 교체될 수 있다는 사실도 함께 보여준다. 이런 인프라는 추적하는 쪽에서 보면 실시간 DNS 상태 하나만 근거로 "살아있다/죽었다"를 단정하기 어렵게 만드는 함정이기도 하다 — 시점이 다른 스냅샷을 교차 확인하지 않으면, 이미 폐기된 발판을 여전히 활성 인프라로 잘못 취급하거나 반대로 재활성화된 채널을 놓칠 위험이 함께 존재한다.

espionage 동기의 named 클러스터와 범용 상용 RAT의 조합이라는 이례적 지점은, 이번 한 건의 관측만으로 행위자 차원의 결론을 내리기보다는 앞으로 유사한 조합이 반복되는지를 지켜볼 관찰 대상으로 남겨두는 편이 합리적이다. 지금 단계에서 확실히 말할 수 있는 것은, 이 샘플이 보여주는 방어 회피 스택과 인프라 설계 방식 자체가 — 그 뒤에 어떤 이름의 행위자가 있든 — 저비용으로도 충분히 실전에서 통하는 조합이라는 사실이다.

IOC3

파일

(2)

도메인

(1)
Source: CTX Threat Intelligence