
EternalBlue·DarkPulsar 번들 패키지, 유출 2년 뒤에도 의료 인프라 겨냥 운영
2017년 ShadowBrokers가 공개한 NSA Equation Group 공격 도구 19개 파일 세트가 단순 익스플로잇이 아닌 완전한 침투·거점 확보 패키지였음이 드러났다. EternalBlue 런처, DarkPulsar 커널 백도어 4개 DLL, Tor 기반 C2 모듈이 단일 디렉터리에 묶여 있으며, 2019년 재포장 배포 증거까지 확인됐다.
EternalBlue와 DarkPulsar, 하나의 패키지로 — 유출된 국가급 공격 도구의 해부
2017년 4월 14일, ShadowBrokers가 NSA 산하 Equation Group의 공격 도구 일체를 공개했을 때, 보안 커뮤니티가 가장 주목한 것은 EternalBlue라는 이름의 SMB 익스플로잇이었다. 그러나 CTX Team이 이번에 분석한 19개 파일 세트는 그보다 더 불편한 사실을 드러낸다. EternalBlue는 단독으로 유포된 것이 아니었다. 익스플로잇 런처(eternalblue-2.2.0.exe, SHA256: 85b936960fbe5100c170b777e1647ce9f0f01e3ab9742dfc23f37cb0825b30b5)와 DarkPulsar 커널 백도어 구성 요소들, Python 기반 FUZZBUNCH 프레임워크 컨트롤러, 그리고 Tor 라우팅 기능을 갖춘 C2 모듈이 하나의 디렉터리 트리 안에 묶여 있었다. 침투와 장기 거점 확보가 단일 패키지로 번들된 구조 — 이것이 이 툴킷이 시사하는 운영적 의미의 핵심이다.
이 파일 세트는 업스트림 위협 피드에서 APT40(Mudcarp, Bronze Mohawk, TEMP.Periscope, Leviathan, Gadolinium, Gingham Typhoon, Kryptonite Panda 등의 별칭으로도 추적됨)에 귀속되어 있으며, 의료 분야를 표적으로 한 스파이 활동이 동기로 명시돼 있다. 다만 개별 파일에 대한 VirusTotal 분석은 일관되게 Equation Group / ShadowBrokers 기원을 가리키고 있어, 피드 수준의 APT40 귀속이 독립적으로 검증된 것인지는 별도 확인이 필요하다 — 이 점은 본문 전반에 걸쳐 명시적으로 구분한다.
네 개의 DLL에 분산된 커널 백도어 — DarkPulsar의 모듈 설계
이 툴킷에서 가장 주목해야 할 아키텍처적 특징은 DarkPulsar 커널 임플란트가 단일 바이너리로 존재하지 않는다는 점이다. Malpedia 출처의 YARA 룰 win_darkpulsar_auto는 FUZZBUNCH 라이브러리 트리 안에 공존하는 네 개의 DLL — cnli-1.dll(db0831e19a4e3a736ea7498dadc2d6702342f75fd8f7fbae1894ee2e9738c2b4), ucl.dll(f0df80978b3a563077def7ba919e2f49e5883d24176e6b3371a8eef1efe2b06a), posh-0.dll(cde45f7ff05f52b7215e4b0ea1f2f42ad9b42031e16a3be9772aa09e014bacdb), exma-1.dll(15292172a83f2e7f07114693ab92753ed32311dfba7d54fe36cc7229136874d9) — 에서 동시에 발화한다. 코호트 크기 4, 동일 YARA 룰 바인딩이라는 사실은 이 분산이 우연이 아니라 의도적 설계임을 보여준다.
각 DLL의 PE 컴파일 타임스탬프는 2012-02-28로 통일돼 있으며, 빌드 출처 분석에서 cnli-1.dll의 imphash는 a482b407319dc74133dc3d7a0212f626, ucl.dll은 33ac1cb1711de5488c50eafd916d2ad2, posh-0.dll은 3238dd5467a491407079286b75fed933, exma-1.dll은 38335bfed05954b26590a75c4458da60으로 각기 다르다. 같은 컴파일 환경에서 생성됐지만 서로 다른 import 구성을 갖는 이 구조는, 단일 탐지 시그니처로 전체 임플란트를 잡아내는 것을 구조적으로 어렵게 만든다. cnli-1.dll과 exma-1.dll에는 추가로 Snort IDS 룰 TAG_LOG_PKT가 공동 발화하는데, 이 두 컴포넌트가 임플란트 작동 중 네트워크 레이어에서 식별 가능한 패킷 패턴을 생성한다는 의미로 해석할 수 있다 — 알려진 C2 IP 없이도 네트워크 경계에서 탐지 가능성이 열려 있다는 점에서 방어적으로 유의미한 신호다.
탐지율 측면에서 이 네 DLL은 55/77에서 63/77 사이를 기록하며, SentinelOne과 같은 일부 차세대 EDR 엔진은 여전히 미탐지 목록에 이름을 올리고 있다. 커널 수준 임플란트가 네 개의 별도 바이너리로 분산돼 있다는 점은 단순한 탐지 회피를 넘어, 사고 대응 과정에서 하나의 컴포넌트만 제거하고 나머지를 놓칠 경우 커널 접근 권한이 그대로 유지된다는 제거 복잡성 문제를 만들어낸다.
두 개의 빌드 파이프라인 — 10년을 가로지르는 개발 타임라인
이 툴킷을 구성하는 파일들의 PE 타임스탬프를 분석하면 두 개의 뚜렷한 빌드 환경이 드러난다. DarkPulsar 코호트(cnli-1.dll, ucl.dll, posh-0.dll, exma-1.dll)가 2012-02-28이라는 단일 타임스탬프로 묶이는 반면, PEiD 패커 시그니처를 공유하는 다섯 개의 DLL — adfw.dll(c51bce247bee4a6f4cd2d7d45483b5b1d9b53f8cc0e04fb4f4221283e356959d), posh.dll(47e16f7db53d9adf24d193ff4d523b1bc7ae59ff8520cfa012365bdb947c96f9), riar.dll(55039ab48c0916a38f1ceee08ba9f9cf5f292064cf3ee6631f22becde5e74b2d), exma.dll(c977ac10aa3d2250a1af39630f532184a5185f505bcd5f03ea7083a3a701a969), trch.dll(06c031f0d905cdeb0d9c172c27ae0c2d25bbf0d08db27a4aa98ec540a15306e7) — 은 2008-09-18에서 2008-09-19 사이의 타임스탬프를 갖는다.
이 PEiD 패커 코호트(cohort_size=5)는 약 4년 앞선 빌드 환경의 산물이다. adfw.dll의 경우 .data 섹션 엔트로피가 0.08에 불과한 반면 .reloc 섹션은 4.64를 기록하는 등, 패킹 이후 섹션별 엔트로피 분포가 비패킹 DLL들과 뚜렷이 다른 프로파일을 보인다. posh.dll과 riar.dll의 .data 섹션 엔트로피 역시 각각 0.14와 6.02로 극단적인 편차를 보이는데, 이는 패킹 과정에서 원본 데이터 섹션이 압축 또는 암호화됐음을 시사한다.
FUZZBUNCH 툴킷이 2008년대 빌드 컴포넌트와 2012년대 DarkPulsar 컴포넌트를 하나의 운영 패키지로 통합하고 있다는 사실은, 이 툴킷이 단일 개발 사이클의 산물이 아니라 최소 두 개의 독립적인 개발 라인을 통합한 조립물임을 보여준다. 공격 도구 개발 조직이 레거시 컴포넌트를 폐기하지 않고 새로운 프레임워크에 통합해 재활용한다는 패턴은, 운영 효율성을 중시하는 성숙한 개발팀의 특성으로 해석할 수 있다.
EternalBlue에서 DarkPulsar까지 — 공격 사슬의 전개
공격 사슬은 EternalBlue 런처에서 시작된다. eternalblue-2.2.0.exe(SHA256: 85b936960fbe5100c170b777e1647ce9f0f01e3ab9742dfc23f37cb0825b30b5)는 MS17-010 취약점을 통해 패치되지 않은 Windows 호스트의 SMB 서비스를 공략한다(T1190). YARA 룰 INDICATOR_TOOL_EXP_EternalBlue가 이 바이너리에서 두 차례 발화하며, 샌드박스 Zenbox는 ETERNALBLUE 패밀리로 신뢰도 56으로 분류했다. 실행 중 Snort IDS 룰 MALWARE-CNC DNS Fast Flux attempt가 발화한다는 점은 익스플로잇 단계에서 이미 네트워크 정찰이 병행됨을 시사한다. 탐지율은 67/76으로 이 파일 세트 전체에서 가장 높지만, APEX, Acronis, Avast-Mobile 등 9개 엔진은 여전히 미탐지 상태다.
초기 침투 이후 실행 단계는 Python 기반 FUZZBUNCH 컨트롤러가 담당한다. pytrch.py(SHA256: 45b3b5442fd6e7fa9c2d8591710b231a260d8fae75e7d3748b83c7d5aa507355)는 FUZZBUNCH-1-master/lib/x64-Windows/와 x86-Windows/ 양쪽 경로에 걸쳐 존재하며, x86과 x64 Windows 표적 모두를 지원하는 YANGBEN 모듈로 기능한다(T1059.006). 이 Python 스크립트의 탐지율은 35/76으로 이 세트에서 가장 낮으며, 단 한 번의 샌드박스 실행에서 clean 판정을 받았다. 스크립트 기반 도구가 동적 분석 환경을 회피하는 경향이 있다는 점을 감안하면, 이 낮은 탐지율은 FUZZBUNCH 컨트롤러가 탐지 회피 측면에서 가장 취약한 지점이 아니라 오히려 가장 견고한 지점임을 의미한다.
지속성 확보는 앞서 분석한 DarkPulsar 커널 임플란트 네 개의 DLL이 담당한다(T1547). 방어 회피는 툴킷 전반에 걸쳐 체계적으로 구현돼 있다. 19개 샘플 중 11개에 detect-debug-environment 태그가 붙어 있으며, EternalBlue EXE에서는 IDS 룰 ET INFO EXE IsDebuggerPresent (Used in Malware Anti-Debugging)이 발화한다(T1027). PEiD 패킹 코호트의 다섯 DLL은 패커를 통한 추가적인 분석 방해 레이어를 갖추고 있다. 이처럼 anti-debugging 조치가 단일 파일이 아닌 툴킷 전체 수준에서 일관되게 적용됐다는 사실은, 이것이 개별 개발자의 선택이 아니라 운영팀 차원의 설계 원칙임을 보여준다.
Tor 라우팅과 OpenSSL — C2 채널의 레이어드 설계
명령제어 채널의 설계는 이 툴킷의 운영 성숙도를 가장 잘 드러내는 부분이다. riar.dll(55039ab48c0916a38f1ceee08ba9f9cf5f292064cf3ee6631f22becde5e74b2d)은 via-tor 태그를 보유하고 있어 Tor 네트워크를 통한 트래픽 라우팅 기능이 내장돼 있음을 확인할 수 있다(T1090.003). 이 DLL은 PEiD 패커 코호트에도 속하며 PE 타임스탬프는 2008-09-19로, 2008년대 빌드 파이프라인의 산물이다.
암호화 레이어는 libeay32.dll(5f30aa2fe338191b972705412b8043b0a134cdb287d754771fc225f2309e82ee)이 제공한다. 이 DLL의 서명 정보에는 제품명 "The OpenSSL Toolkit", 파일 버전 0.9.8r이 명시돼 있으며, 저작권 표기는 1998~2007년 The OpenSSL Project를 가리킨다. 882KB로 이 세트에서 가장 큰 파일이기도 하다. 여기에 트랜스포트 컴포넌트인 trfo-0.dll(a4c460b27d03daf7828f6b6db87e0ff3ee851fdb1b8654b0a778b4c34953a3dc)이 더해진다. 이 두 DLL은 YARA 룰 susp_b64_enc(작성자: RussianPanda)가 동시에 발화하는 코호트(cohort_size=2)를 형성한다 — 암호화·트랜스포트 레이어 모두에서 base64 인코딩된 페이로드 또는 설정 데이터가 사용된다는 의미다.
이 세 컴포넌트가 구성하는 C2 아키텍처는 계층적이다. Tor가 출구 노드를 익명화하고, OpenSSL이 트래픽을 암호화하며, base64가 설정 데이터를 난독화한다. 이 데이터 세트에는 네트워크 IOC — IP 주소, 도메인, URL — 가 전혀 포함돼 있지 않아 실제 C2 엔드포인트를 이 증거만으로 확인하는 것은 불가능하다. 그러나 Tor 라우팅 기능이 내장된 임플란트에 대해 전통적인 IP 기반 차단이 충분하지 않다는 운영적 함의는 이 구조에서 직접 도출된다.
2019년의 재포장 — 유출 이후에도 계속된 운영 배포
이 파일 세트에서 시간적으로 가장 이질적인 아티팩트는 Diagnostics.zip(8e03f05ecd08cb78f37ccd92c48cd9d357c438112b85bd154e8261c19e38a56e)이다. 나머지 개별 컴포넌트들이 모두 2017-04-14에 처음 관측된 반면, 이 ZIP 번들은 2019-07-07에 처음 제출됐다 — ShadowBrokers 유출로부터 2년 이상이 지난 시점이다.
이 아티팩트의 의미는 파일명에서 더 선명해진다. VirusTotal에 제출된 대체 이름 중 하나는 C:\Windows\NetworkDistribution\Diagnostics.txt다. 3,341KB의 ZIP 파일을 .txt 확장자로 위장해 Windows 시스템의 NetworkDistribution 디렉터리에 스테이징한 것이다. 번들 내부에는 56개의 자식 파일이 포함돼 있으며 — 47개 DLL, 2개 EXE, 1개 Python 스크립트, 1개 PYC, 1개 PYD, 2개 XML, 2개 FB 파일 — 타임스탬프 범위는 2017-04-14에서 2019-03-14까지 걸쳐 있다. 샌드박스 Zenbox는 이 ZIP을 신뢰도 60으로 ETERNALBLUE 패밀리로 분류했으며, 탐지율은 57/76이다. 주목할 점은 CrowdStrike, Cylance, Microsoft, Paloalto 등이 미탐지 목록에 포함돼 있다는 것이다.
2019년 재포장 아티팩트의 존재는 ShadowBrokers 유출이 단순한 일회성 공개가 아니라, 이후 수년에 걸쳐 실제 운영에 재활용됐음을 보여주는 직접적 증거다. 유출된 국가급 공격 도구가 공개 이후에도 활성 운영 도구로 기능한다는 이 패턴은, 패치 주기가 느린 환경 — 특히 레거시 Windows 시스템에 의존하는 의료 인프라 — 에서 특히 위협적이다.
이상 신호 — pcre-0.dll과 RedOctober 룰의 교차 발화
이 툴킷에서 하나의 파일이 분석적으로 미해결 상태로 남아 있다. pcre-0.dll(17d6dde8a6715b9311734cb557b76160a22e340785b3950eae23aae67b0af6a8)은 나머지 Equation Group 컴포넌트들과 동일한 FUZZBUNCH 디렉터리 경로를 공유하고 2017-04-14에 처음 관측됐지만, Intezer Analyze의 RussianAPT 룰셋에서 가져온 YARA 룰 RedOctoberPluginFileInfo가 이 파일에서만 단독으로 발화한다.
RedOctober는 Equation Group과 계통이 다른 별도의 APT 캠페인으로 알려져 있다. 이 교차 YARA 발화가 의미하는 것은 현 단계에서 단정적으로 결론 내리기 어렵다. 두 툴셋 간의 코드 재사용, 공유 라이브러리 사용, 또는 YARA 룰의 오탐(false positive) 가능성 모두가 열려 있다. pcre-0.dll은 PCRE(Perl Compatible Regular Expressions) 라이브러리를 구현한 컴포넌트로, 범용 라이브러리 코드가 여러 툴셋에 공유될 경우 YARA 룰이 의도치 않게 교차 발화할 수 있다. 이 신호는 추가 샘플이 확보되거나 코드 레벨 분석이 수행될 때까지 미결 상태로 유지하는 것이 분석적으로 정직한 태도다.
피드 귀속의 간극 — APT40과 Equation Group 기원 도구
이 분석에서 가장 신중하게 다뤄야 할 부분은 귀속 문제다. 업스트림 위협 피드는 이 파일 세트를 APT40에 귀속하고 의료 분야를 표적으로 한 스파이 활동을 동기로 명시하고 있다. APT40은 중국 국가 연계 행위자로, Mudcarp, Bronze Mohawk, TEMP.Periscope, Leviathan, Gadolinium, Gingham Typhoon, Kryptonite Panda 등의 별칭으로 추적된다.
그러나 개별 파일에 대한 VirusTotal 분석은 일관되게 trojan.shadowbrokers/equation 또는 trojan.equation/shadowbrokers 레이블을 부여하고 있으며, 이는 NSA 산하 Equation Group 기원의 도구임을 가리킨다. 피드 수준의 패밀리 레이블로 명시된 "lucifer"는 개별 파일의 VT 분석과 정렬되지 않으며, 피드 수준의 태깅 아티팩트일 가능성이 높다 — 이 레이블을 이 샘플들의 확정된 패밀리 이름으로 취급해서는 안 된다.
APT40이 Equation Group 기원의 유출 도구를 실제로 운영에 활용했다면, 이는 중국 국가 행위자가 유출된 미국 NSA 공격 역량을 민간 의료 인프라를 겨냥한 스파이 활동에 전용한 사례가 된다. 이 귀속이 사실로 확인될 경우 정책적 함의는 상당하다. 그러나 현재 이 데이터 세트만으로는 APT40의 직접적 관여를 독립적으로 확인할 수 없으며, 피드 귀속이 별도의 인텔리전스 소스에 근거한 것인지 파일 분석에서 도출된 것인지도 명확하지 않다. 이 귀속은 추가 검증이 필요한 가설로 취급해야 한다.
유출된 국가급 도구의 장기 생존 — 이 툴킷이 시사하는 것
이 19개 파일 세트가 드러내는 가장 중요한 함의는 유출된 국가급 공격 도구의 운영 수명에 관한 것이다. 2017년 ShadowBrokers 유출 이후 EternalBlue는 WannaCry와 NotPetya 등 대규모 사이버 공격에 활용되며 이미 역사적 사례가 됐다. 그러나 이 분석이 보여주는 것은 그보다 덜 주목받은 측면이다 — EternalBlue 런처와 함께 번들된 DarkPulsar 커널 임플란트 컴포넌트들이 2026년 5월까지도 VirusTotal에 지속적으로 제출되고 있으며, 2019년 재포장 ZIP 번들은 유출 2년 이후에도 실제 운영 배포가 이루어졌음을 보여준다.
DarkPulsar의 네 DLL 분산 아키텍처는 이 도구가 탐지 환경의 진화에 대응하도록 설계됐음을 시사한다. 단일 바이너리 임플란트는 하나의 시그니처로 탐지되고 하나의 제거 작업으로 정리된다. 그러나 네 개의 독립적인 DLL로 분산된 커널 백도어는 각 컴포넌트가 별도의 탐지 로직을 요구하며, 사고 대응 과정에서 부분적 제거가 불완전한 결과를 낳을 가능성을 높인다. win_darkpulsar_auto YARA 코호트 전체를 헌팅 범위에 포함하지 않으면, EternalBlue 런처만 제거하고 커널 접근 권한은 그대로 남겨두는 결과가 된다.
패치 주기가 느린 의료 환경 — 의료기기 네트워크, 병원 IT 인프라, 임상 데이터 시스템 — 은 MS17-010 취약점을 여전히 보유한 Windows 호스트를 포함할 가능성이 있으며, 이 툴킷의 운영 범위 안에 있다. Tor 라우팅 C2 컴포넌트의 존재는 전통적인 IP 기반 차단이 이 위협에 대해 구조적으로 불충분함을 의미한다. 그리고 pcre-0.dll의 RedOctoberPluginFileInfo 교차 발화는 이 툴킷과 다른 APT 캠페인 사이의 코드 레벨 연결 가능성이라는 미해결 실마리를 남겨두고 있다 — 추가 샘플이 확보된다면 이 실마리를 당기는 것이 다음 분석의 출발점이 될 수 있다.