FILE공개
FILE

가짜 KMSPico 설치파일, 실체는 애드웨어 번들러 유통망

윈도우 크랙 도구 KMSPico를 사칭한 실행파일들이 서로 다른 이름표를 달고도 동일한 빌드·서명 흔적을 공유하는 것으로 확인됐다. 위협 인텔 피드는 이 지표군에 APT10(Red Apollo) 라벨을 붙였지만, 실제 거동은 outbrowse·amonetize·browsefox 계열 애드웨어 번들러에 가깝다.

2026년 9월 8일 14:33 (UTC+9)최근 관측2026년 9월 8일심각도22CTX Team행위자Red ApolloPotassiumIOC9MITRE21지역JP

가짜 KMSPico 활성화 도구 뒤에서 발견된 하나의 빌드 파이프라인

윈도우·오피스 정품 인증을 우회해 주는 크랙 도구 'KMSPico'를 사칭한 설치파일 묶음에서, 서로 다른 파일 크기와 애드웨어 패밀리 라벨을 달고 있으면서도 동일한 컴파일 결과물임이 확인되는 두 개의 실행파일이 발견됐다. 339KB짜리 kmspico.exe(081ab0d9…fd187, 이하 '339KB 버전')와 694KB짜리 revenyou\kmspico.exe(48c68607…f19d, 이하 '694KB 버전')는 임포트 테이블 해시(imphash) 7fa974366048f9c551ef45714595665e가 완전히 일치하고, PE 리치 헤더 해시(81c790eab65ff0be64a9029444dd0f7f)와 컴파일 타임스탬프(2009-12-05)까지 정확히 같다. 이는 두 파일이 서로 다른 시점에 독립적으로 만들어진 것이 아니라, 하나의 빌드 환경에서 크기가 다른 두 개의 배포판을 뽑아낸 결과로 보는 것이 자연스럽다. VirusTotal 탐지율은 각각 60/75, 56/73으로 나쁘지 않은 수준이지만, 이 지표만으로는 두 파일이 얼마나 같은 뿌리에서 나왔는지 알 수 없고, 그 답은 imphash와 리치 헤더라는 빌드 계보 지표에서 나온다.

이 발견이 흥미로운 지점은 캠페인의 성격이다. 이 지표들이 가리키는 것은 정교한 임플란트가 아니라, NSIS(Nullsoft Scriptable Install System) 기반 자가 압축 설치파일이라는 매우 평범한 포장 기술이다. 339KB 버전의 탐지 태그에는 실행 시 드롭한 파일을 실행한다는 드로퍼 거동과 다른 호스트로 확산된다는 특성이 함께 표시돼 있고, 두 파일 모두 F-PROT·Cyren이 지목한 패커 흔적을 공유한다. 샌드박스 판정은 Tencent HABO와 Dr.Web vxCube 두 곳 모두에서 malicious로 일치했다(2/2). 즉 이 지점까지 확인되는 것은 '동일 빌더가 찍어낸 두 개의 가짜 활성화 도구가 실행 시 추가 페이로드를 드롭한다'는 사실이며, 이는 표적화된 침투 도구라기보다 대량 배포용 번들러의 전형적 행동 패턴에 가깝다.

만료된 인증서 하나가 두 개의 다른 애드웨어 패밀리에 걸쳐 있다

빌드 계보보다 더 흥미로운 신호는 서명 계층에서 나온다. 339KB 버전과 별개의 파일인 %TEMP%\beeiifgbea.exe(4741708405…318d2)는 전혀 다른 애드웨어 패밀리 라벨—전자는 adware.outbrowse/bundler, 후자는 adware.outbrowse/mikey(popular name으로는 browsefox까지 걸쳐 있다)—을 달고 있음에도, 서명자 체인이 정확히 동일하다. 두 파일 모두 "Great ApPs TlD" 명의로, thawte SHA256 Code Signing CA를 거쳐 thawte 루트로 이어지는 체인을 갖고 있으며, 시리얼 번호(34 C5 B2 3C D2 01 3A F3 CA 72 DE 68 56 63 EB DB)까지 한 글자도 다르지 않다. 이 인증서의 유효 기간은 2015년 11월 16일부터 2016년 1월 27일까지, 약 두 달 남짓의 단명 서명 신원이었고, 두 파일의 최초 관측 시점 역시 나란히 2015-11-30로 찍혀 있다.

이 사실을 곱씹으면 하나의 해석이 성립한다. 인증서의 유효 기간과 두 파일의 첫 관측일이 거의 겹친다는 것은, 공격자(혹은 이 인증서를 유통한 서명 대행 업체)가 해당 신원을 확보한 직후 최대한 짧은 시간 안에 여러 애드웨어 페이로드에 밀어 넣어 소비했다는 그림을 뒷받침한다. 실제로 두 파일의 서명 검증 결과는 다소 역설적이다 — dossier에 기록된 검증 문구를 그대로 인용하면 "필수 인증서가 현재 시스템 시계 또는 서명된 파일의 타임스탬프를 기준으로 유효 기간 내에 있지 않다"는 것이며, 이는 정상적인 코드 서명 신뢰 체계가 애초에 통과되지 않는 상태로 배포됐다는 뜻이다(T1553.002, 신뢰 제어 우회). 그럼에도 두 파일 모두 코드 서명 자체는 "carries a code signature" 태그로 남아 있어, 서명이 실질적 신뢰 확보보다는 서명 없는 실행파일 대비 육안·자동 스캔의 의심 지수를 낮추는 장식적 목적에 머물렀을 가능성이 있다.

이 인증서 재사용 패턴을 코호트라는 틀로 보면 더 명확해진다. 이 데이터셋 안에서 "Great ApPs TlD" 서명자 조합을 공유하는 파일은 정확히 이 두 개뿐이며, 다른 다섯 개 지표(도메인, IP, 나머지 파일들) 어디에도 같은 서명 신원이 등장하지 않는다. 이는 이 서명 신원이 이 캠페인 전용으로 확보된 좁은 범위의 자산이었을 가능성을 시사하며, 광범위하게 재활용되는 대형 서명 인프라라기보다는 소규모 번들러 유통 조직이 일회성으로 구매·탈취한 인증서에 가깝다고 보는 편이 자연스럽다. 탐지율은 각각 60/75, 61/77로 30개 안팎의 엔진이 나란히 탐지하고 있어, 이 서명 위장이 업계 탐지망을 실질적으로 뚫는 데는 실패했다는 점도 함께 짚어둘 만하다.

서로 다른 이름의 애드웨어가 같은 NSIS 룰에 걸린다

세 번째 축은 인증서나 임포트 해시가 아니라 패키징 기법 자체다. 339KB 버전과, 전혀 다른 계열인 KMSPico 10.0.9.exe(05784a67ce846bb…783d86, 이하 '10.0.9 버전', popular name은 amonetize/outbrowse/msil)는 crowdsourced YARA 룰 NSIS(작성자 kevoreilly, CAPEv2 저장소 배포, "NSIS Integrity Check function"으로 설명됨)에 동시에 걸린다. 이 두 파일은 서명자도, imphash도, 심지어 패커 지문도 겹치지 않는다 — 10.0.9 버전은 PEiD로 패킹돼 있고 .gentee 섹션의 엔트로피가 7.98에 달하는 고압축 구간을 갖고 있는 반면, 339KB 버전은 F-PROT/Cyren 계열 패커 흔적을 갖고 있다. 즉 이 둘을 잇는 유일한 접점은 '같은 NSIS 설치파일 포맷을 사용했다'는 패키징 계층의 유사성뿐이다.

이 관측을 앞서의 서명·빌드 코호트와 겹쳐 보면 하나의 판단이 가능해진다. 만약 이 캠페인이 단일 행위자의 자체 코드베이스였다면 서명자·임포트 해시·패커가 파일군 전체에서 일관되게 나타나야 하는데, 실제로는 '빌드 계보가 같은 두 파일', '서명 신원이 같은 두 파일', '패키징 룰만 같은 두 파일'이 서로 다른 조합으로 겹치며 산발적으로 흩어져 있다. 이는 이 KMSPico 위장 묶음이 하나의 폐쇄적 개발팀이 아니라, 여러 애드웨어·PUP 유통 조직이 공용 NSIS 빌더-서비스를 가져다 쓰면서 각자 다른 서명 신원과 각자 다른 몸통 코드를 붙여낸 결과물일 가능성을 시사한다. 10.0.9 버전의 탐지율은 47/78로 다른 두 개(56~61/77) 대비 소폭 낮은데, 커뮤니티 투표는 malicious 1건·harmless 1건으로 팽팽히 갈려 있어 — 엔진 판정과 커뮤니티 판단이 완전히 일치하지 않는, 전형적인 애드웨어 판정 경계선 사례로 보인다.

조악한 두 번째 서명 — 별도 손이 닿은 흔적

같은 시기에 유통된 또 다른 설치파일 inst.exe(50b48a1f…0ddca1a)는 앞의 세 파일과는 확연히 다른 서명 방식을 취한다. 이 파일의 서명자는 "www.nosite.site"이며, issuer와 subject가 동일한 자가 서명(self-signed) 인증서로, 검증 결과는 "인증서 또는 인증서 체인이 신뢰되지 않는 루트를 기반으로 한다"는 판정을 받는다. thawte라는 실제 공인 CA 체인을 흉내라도 낸 "Great ApPs TlD" 코호트와 비교하면, 이 자가 서명은 최소한의 신뢰 위장조차 시도하지 않은 훨씬 조악한 방식이다. 시리얼 번호(F0 3F 9B F1 12 39 DD 97 42 BC 71 76 A5 95 DB DF)와 유효 기간(2015-12-31~2039-12-31)도 이 데이터셋의 다른 어떤 파일과도 접점이 없다.

이 파일은 배포 과정에서 'KMSPico10.0.9__8173_il47372.exe', 'WindowsLoader2.4__8172_il47800.exe', 'eyetoy usb camera namtai drive downloader__3687…' 같은 완전히 이질적인 세 개의 파일명으로도 관측됐다는 점도 주목할 만하다. 이는 이 설치파일이 KMSPico 하나만이 아니라 윈도우 로더 크랙, 심지어 웹캠 드라이버 다운로더까지 아우르는 범용 번들러 템플릿에 실려 유통됐다는 뜻으로 읽힌다. 여기에 .rsrc 섹션의 엔트로피가 7.86까지 치솟아 있는 것도 확인되는데, 이는 리소스 영역에 압축·암호화된 2차 페이로드가 담겨 있음을 뒷받침하는 흔적이다. 결국 'Great ApPs TlD' 코호트와 이 자가 서명 파일은 같은 KMSPico 브랜드를 빌려 쓰면서도 서로 다른 손, 다른 서명 관행, 다른 번들링 전략을 가진 별개의 유통 축이었을 가능성이 높다 — 하나의 위장 브랜드 아래 최소 두 개의 서로 다른 공급망이 겹쳐 있었다고 보는 편이 데이터에 부합한다.

사용자가 스스로 실행 버튼을 누르는 순간부터 시작되는 체인

이 캠페인의 침투 경로를 시간순으로 재구성하면, 익스플로잇이 아니라 사용자의 자발적 행동에서 출발한다는 점이 가장 먼저 눈에 띈다. 파일명에 새겨진 "kmspico 10.0.6\kmspico.exe", "KMSPico Registry Patch.exe", "KMSPico 10.0.9.exe" 같은 경로 문자열과, 이들과 나란히 관측된 배치 스크립트 installkms.bat(143f4511…7581f2bb6, 2016-01-04 최초 관측, 탐지율 0/54)은 정품 인증 우회를 원하는 사용자가 직접 검색해 내려받고 실행하는 흐름을 그대로 반영한다(T1204.002, 사용자 실행). 이 배치 스크립트는 그 자체로는 어떤 백신 엔진에도 걸리지 않는 평범한 텍스트 파일이지만, 같은 날 관측된 inst.exe와 함께 묶여 있다는 시점상의 근접성은, 이것이 정식 KMS 활성화 절차를 흉내 낸 실행 스위치 역할을 했을 가능성을 시사한다 — 다만 이 배치 파일 자체의 내부 명령이 확인되지 않는 만큼 이 해석은 추론 수준에 머문다.

사용자가 실행 버튼을 누른 순간, 통제권은 NSIS 자가 압축 설치파일로 넘어간다. 339KB 버전과 10.0.9 버전 두 파일이 공유하는 YARA NSIS 룰과, 두 파일 모두에 붙은 '실행 시 드롭한 파일을 실행한다'는 태그는 이 단계에서 벌어지는 일을 정확히 설명한다 — 표면적으로는 KMS 활성화 도구를 실행한 것처럼 보이지만, 실제로는 압축 해제 루틴이 별도의 실행 파일을 디스크에 풀어놓고 그것을 곧바로 실행하는 2단계 구조다. 방어자 시점에서 이 순간을 보면, 엔드포인트 로그에는 사용자가 자발적으로 실행한 GUI 프로그램 하나가 잠깐 화면에 나타났다가, 그 뒤로 자식 프로세스가 새로 생성되는 흐름만 남는다 — 서명 검증 실패나 이례적인 네트워크 목적지 같은 명백한 경고 신호가 동반되지 않는 한, 이는 정상적인 소프트웨어 설치 과정과 구분하기 쉽지 않다.

방어 회피 단계에서 공격자(혹은 이 번들러를 채택한 유통자)가 내린 선택은 앞서 확인한 "Great ApPs TlD" 인증서 재사용이다. 여기서 주목할 인과관계가 있다 — 이미 유효기간이 지난 인증서를 그대로 서명에 사용한다는 것은, 정상적인 서명 검증을 통과할 목적이 아니라 서명이 전혀 없는 실행파일보다는 조금이라도 신뢰도가 높아 보이도록 하는, 매우 낮은 비용의 위장 전술을 선택했다는 뜻이다(T1553.002). 이 선택이 얻는 것은 미미하다 — 실제로 이 인증서가 붙은 두 파일 모두 30개 안팎의 엔진에 걸리며 탐지를 회피하지 못했다. 반면 이 선택이 포기하는 것도 크지 않다 — 유효한 인증서를 새로 발급받거나 탈취하는 데 드는 비용과 리스크를 감수하지 않아도 됐다는 점에서, 이는 정교함보다 저비용 반복 배포를 우선시한 운영 판단으로 읽힌다.

명령제어 단계는 이 데이터셋 전체에서 가장 근거가 얇은 구간이다. 유일한 도메인인 download-way.com은 "명령제어 트래픽의 흔적을 보인다"는 태그가 명시적으로 붙어 있지만, 탐지율은 0/89로 어떤 백신·URL 필터링 엔진에도 걸리지 않은 상태다. 이 도메인은 2015-08-26 GANDI SAS를 통해 등록됐고, 네임서버는 Amazon Route 53 계열(NS-1328.AWSDNS-38.ORG 등)을 사용했으며 현재는 클라이언트 홀드·상환 기간 상태로 넘어가 더 이상 해석되지 않는다. 등록일이 이 파일 군집의 최초 관측 구간(2015년 11월~2016년 1월)보다 두세 달 앞서 있다는 점은, 배포 인프라가 페이로드 살포 전에 미리 마련돼 있었을 가능성을 시사하지만, 실제 C2 트래픽의 프로토콜이나 통신 내용이 확인되지 않는 만큼 이 도메인을 이 캠페인의 확정된 명령제어 노드로 단정하기는 어렵다(T1071, 애플리케이션 계층 프로토콜 — 다만 관측 강도는 약함).

최종 도달 지점은 정보 탈취나 파괴적 공격이 아니라 애드웨어·브라우저 하이재킹이다. 4741708405…318d2 파일의 popular name에 붙은 browsefox 라벨과 "다른 호스트로 확산된다"는 태그는, 이 캠페인의 종착점이 광고 주입·브라우저 설정 변경을 통한 수익화라는 점을 뒷받침한다. 이 지점에서 전체 체인을 되짚어 보면, 초기 접근부터 최종 impact까지 일관되게 관측되는 것은 첩보 활동에 필요한 정찰·측면 이동·자격증명 수집이 아니라, 사용자를 속여 실행시키고 광고 수익을 뽑아내는 상업적 PUP 생태계의 전형적 패턴이다.

인프라 계층은 왜 이렇게 얇은가

파일 계층에서 관측된 서명·빌드 코호트의 밀도와 비교하면, 이 지표군의 인프라 계층은 확연히 빈약하다. 이 데이터셋에는 도메인 하나, IP 하나만 존재하며, 이 둘 사이에도, 이 둘과 파일 군집 사이에도 공유되는 A 레코드나 네임서버, 인증서 시리얼 같은 교차 축이 전혀 발견되지 않는다. 유일한 IP인 104.156.230.210은 AS 20473(The Constant Company, LLC — Vultr 계열)에 속해 있고 탐지율은 0/89이며, 이 IP에 결부된 TLS 인증서는 Let's Encrypt("YR1" 발급)로 발급돼 subject가 "bluebloom.org"로 기재돼 있다. 문제는 이 인증서의 유효 기간이 2026-07-31부터 2026-10-29라는 점이다 — 파일 군집의 관측 구간인 2015~2016년과 무려 10년의 시차가 난다.

이 시차를 그대로 받아들이면 이 IP를 이 캠페인의 동시대 C2 노드로 볼 근거는 사실상 사라진다. 오히려 이 인증서 기록은 같은 IP 대역이 시간이 지나면서 완전히 다른 용도(전혀 무관한 "bluebloom.org")로 재할당됐거나, 이 지표 자체가 무관한 플레이스홀더 성격의 기록일 가능성을 시사한다고 보는 것이 합리적이다. 반면 download-way.com은 최소한 시점상으로는 파일 군집과 겹친다 — 등록일 2015-08-26은 첫 KMSPico 파일의 관측일(2015-11-30)보다 앞서 있어, 이 도메인이 실제 유통·명령제어 경로였다면 시간적으로는 말이 되는 배치다. 다만 앞서 언급했듯 실제 통신 증거가 얇아, "시점이 맞는다"는 사실과 "실제로 사용됐다"는 사실 사이에는 여전히 간극이 있다.

결국 이 캠페인에서 IOC 간의 응집력은 인프라가 아니라 파일 계층—공유 imphash, 재사용된 인증서, 공통 NSIS 패키징 룰—에서 나온다. 이는 이례적인 결과가 아니다. 대규모 표적 침투 작전과 달리 애드웨어·PUP 유통 생태계는 통상 도메인·서버를 자주 교체하며 등록 기록을 거의 남기지 않는 경우가 많고, 오히려 빌더가 남기는 컴파일 지문과 서명 신원 재사용이 더 안정적인 추적 축이 되는 경향이 있다. 이 지표군이 보여주는 인프라의 공백은 그래서 "정보가 누락됐다"는 결함이 아니라, 이 유통 방식 자체의 운영 특성으로 해석하는 편이 자연스럽다.

위협 라벨과 실제 거동 사이의 간극

이 지표군 전체에는 "Red Apollo"라는 행위자 라벨이 부착돼 있으며, 그 별칭 목록에는 APT10, menuPass, Stone Panda, Cicada, Bronze Riverside, Purple Typhoon 등 첩보 활동으로 널리 알려진 이름들이 나열돼 있고, 지역 태그는 일본(JP), 동기는 espionage로 기재돼 있다. 그러나 일곱 개 파일 dossier 어디에도 이 행위자 계열이 실제로 사용하는 것으로 공개 보고에 알려진 첩보용 임플란트나 특유의 C2 프로토콜, 표적화된 침투 정황은 등장하지 않는다. 대신 관측되는 것은 outbrowse, amonetize, browsefox 같은 순수 애드웨어·PUP 패밀리 라벨과, KMSPico라는 매우 대중적인 크랙 도구 사칭 브랜드뿐이다.

이 간극을 어떻게 해석할지는 조심스럽게 접근해야 한다. 확인되는 사실은 라벨과 거동이 어긋난다는 것이고, 그 이유가 이 피드 항목의 오분류이거나 오래된 지표가 다른 캠페인 맥락에서 잘못 재활용됐을 가능성은 있지만, 현재 확보된 증거만으로 그 원인을 단정하기는 어렵다. 오히려 분석적으로 더 안전한 접근은, 이 지표군을 다룰 때 첨부된 행위자 라벨보다 실제로 관측된 빌드 계보·서명 재사용·패키징 증거를 우선하는 것이다. 이 별칭 코호트들 사이의 중첩 여부를 따지는 것은 이 사례에서는 무의미하다 — 애초에 이 파일들이 그 행위자 계열의 산출물이라는 직접적 증거 자체가 이 지표군 안에 존재하지 않기 때문이다.

오래된 지표가 남기는 잔여 노이즈, 그리고 이 사례가 시사하는 것

이 캠페인의 파일 군집은 2015년 4월부터 2018년 5월에 걸쳐 관측 기록이 이어지고 있고, 일부 파일은 2022년까지도 재제출 기록이 남아 있다. 오래된 지표일수록 이런 식으로 시간이 지나며 서로 무관한 인프라 기록이 덧붙는 경향이 있는데, 이번 IP의 2026년 인증서 기록이 정확히 그 사례다. 이는 단일 캠페인의 진화라기보다, 지표 수집 과정에서 시간차를 두고 누적된 잡음으로 보는 것이 합리적이며, 분석가는 이런 지표군을 다룰 때 최신 관측 시점의 부가 정보를 캠페인 활동 시점과 동일시하지 않도록 유의할 필요가 있다.

이 사례가 남기는 더 일반적인 함의는, 위협 피드의 라벨 신뢰도와 기술적 증거 강도가 항상 같은 축에서 움직이지 않는다는 점이다. 이번 지표군은 imphash·인증서 재사용·YARA 룰 공유라는 세 갈래의 빌드·서명 코호트가 비교적 견고하게 짜여 있어 "같은 유통 생태계의 산물"이라는 판단에는 상당한 확신을 가질 수 있지만, 그 위에 붙은 행위자 귀속 라벨은 그 확신을 전혀 뒷받침하지 못한다. CTX Team이 이런 지표군을 분류할 때 겪는 실무적 딜레마도 여기에 있다 — 라벨만 보고 심각도를 높게 평가하면 실제로는 대량 유통되는 애드웨어 번들러에 과도한 우선순위를 부여하게 되고, 반대로 라벨을 무시하면 혹시 있을 수 있는 실제 연관성을 놓칠 위험이 있다. 결국 이런 사례에서 판단의 기준점은 라벨이 아니라, 이번에 확인한 것처럼 빌드 계보와 서명 재사용이라는 파일 자체의 물증이어야 한다는 점을, 이 지표군은 비교적 명확하게 보여준다.

애드웨어·PUP 생태계가 여전히 정품 소프트웨어 크랙·활성화 도구라는 검색 수요를 미끼로 대량 유통망을 유지하고 있다는 사실도 이번 지표군에서 다시 확인된다. 이런 유통망은 표적화된 침투 작전과 달리 방어팀의 최우선 대응 대상이 아닐 수 있지만, 동일한 서명 신원과 동일한 빌드 파이프라인이 여러 애드웨어 패밀리에 걸쳐 재사용되는 패턴은, 이 생태계를 운영하는 조직이 최소한의 빌더·서명 인프라를 구축해 여러 하위 브랜드에 재판매하고 있다는 구조를 시사한다. 그 구조를 들여다보는 일은, 결국 행위자 이름표보다 파일 하나하나가 남긴 컴파일 지문과 인증서 흔적을 끝까지 추적하는 작업에서 시작된다는 것이, 이번 KMSPico 위장 사례가 남기는 가장 실질적인 교훈이다.

IOC9

파일

(7)

IP

(1)

도메인

(1)
Source: CTX Threat Intelligence