CCleaner 로 위장한 GhostDesk 플러그인 분석
CCleaner 는 불필요한 파일을 제거하고 레지스트리를 정리해 PC를 최적화하는 프로그램으로 유명하다. 최근 CCleaner 공식 사이트로 위장해 멀웨어를 유포하는 캠페인이 발견되어 분석해보았다.
이 멀웨어는 CCleaner 프로그램으로 위장해 Chrome 확장 프로그램으로 작성된 GhostDesk라는 스파이웨어를 설치해 사용자 정보를 탈취한다.

1. 파일 정보
CCleaner.exe
- MD5 : E5F6591158DD294575EC7C1320034600
- SHA256 : C0B4A4AF8A3A8C4B113D7F203FCF480CFAC79160102490DAF287748634B9CE23
- FileSize : 1,112,929 바이트
- FileType : EXE64
version.dll
- MD5 : F92D900049C67B3C28D7013D125CFE01
- SHA256 : 1BC58356C26851CA931FD3DBBCD050E4D8AE7795EC69702951830D883E8D6198
- FileSize : 117,760 바이트
- FileType : DLL64
- 비고 :
CCleaner.exe실행 시 DLL SideLoading 에 의해 실행됨.
SynTPHelper.exe
- MD5 : 8289B6A5E1A6AE92A4C1F4CE978F4663
- SHA256 : E9E4CF14714D2A3C573CD8C3AB9FB07239C20E5E373536DC4671E6796595A5FD
- FileSize : 782,336 바이트
- FileType : DLL64
- 비고 :
version.dll이AppxState.dat데이터를 복호화해 생성. 메모리에만 존재하는 Fileless 데이터. 원본 파일 이름은SynTPHelper.exe이지만 실제로는 DLL 파일.
2. 악성 행위 분석
2.1 CCleaner.exe & version.dll
CCleaner 공식 홈페이지로 위장한 가짜 도메인(ccleanerwind.top)에서 Download 혹은 Get CCleaner Pro 버튼을 클릭하면 멀웨어 CCleaner.exe 를 다운로드할 수 있다.

가짜 CCleaner.exe 를 실행하면 %APPDATA%\Microsoft\Vault 경로에 cscript.exe, version.dll 파일을 드랍한다. cscript.exe 파일은 Windows OS에서 제공하는 정상 파일과 해시 값이 동일한 정상 파일이지만 version.dll 을 로딩하는 DLL 의존성을 가진다. 공격자는 이러한 사실을 이용해 악성 기능을 가진 version.dll 을 cscript.exe 와 동일한 경로에 드랍하고 실행하는 DLL Side Loading 공격을 시도한다.

version.dll 을 로딩하는 cscript.exe 의 DLL 의존성version.dll 의 Export 함수가 호출되면 System 경로의 정상 version.dll 파일을 로딩해 정상 Export 함수를 실행한다.

version.dll 함수를 호출하는 악성 DLLGetFileVersionInfoA를 포함한 일부 Export 함수는 현재 모듈(version.dll) 경로에서 .dat 확장자 파일을 찾아 무결성을 검증한다. 이는 cscript.exe, version.dll 와 함께 드랍된 AppxState.dat 파일을 찾기 위함이다.

.dat 확장자 파일을 찾는 코드AppxState.dat 파일을 찾으면 최초 0x100 바이트를 읽고 Key 로 사용해 이후 데이터를 반복적으로 XOR 연산한다. 연산된 결과는 64비트 DLL 파일 데이터로, 이 데이터는 Fileless 하게 메모리에만 존재하며 파일로는 생성되지 않으나 덤프한 데이터를 조사한 결과 원본 파일 이름이 SynTPHelper.exe 이다. 실제로는 드랍되지도 않는 DLL 파일이라 원본 파일 이름이 크게 중요하진 않지만 이 글에서는 SynTPHelper.exe 이라 부르겠다.
2.2 SynTPHelper.exe
앞선 과정에서 version.dll 은 동일한 경로에서 AppxState.dat 파일을 찾아 추가 악성 DLL 인 SynTPHelper.exe 을 로딩한다. SynTPHelper.exe 의 Export 함수 중 하나인 Ordinal_1 에는 다음과 같은 핵심 악성 동작이 구현됐다.
- 샌드박스/VM·분석 환경 탐지 및 지연
- Volume Serial 기반 뮤텍스로 단일 인스턴스 보장
- AMSI/NtTraceControl 우회용 VEH·디버그 레지스터 설정
- 설정/통신 구성 초기화
- 로컬 WebSocket 서버 스레드 시작 (127.0.0.1:7345)
- 브라우저 확장 파일(GhostDesk) 생성·브라우저 실행/감시
- C2/원격 제어 워커 실행
- 화면 캡처·키로깅·클립보드 등 하위 기능 처리
위 동작 중 브라우저 확장 파일 생성 기능은 %LOCALAPPDATA%\cse 경로에 GhostDesk 로 알려진 악성 Chrome 확장자 파일을 드랍한다.

이후 크롬 브라우저에 --load-extension 옵션과 앞서 드랍한 경로를 전달해 브라우저 실행과 동시에 악성 플러그인이 실행되도록 한다.

--load-extension 옵션을 전달해 크롬 브라우저를 실행하는 코드2.3 GhostDesk 플러그인
%LOCALAPPDATA%\cse 에 드랍되는 파일은 GhostDesk 기능을 수행하는 플러그인을 구성하는 manifest.json, background.js, content.js 파일이다.
핵심 악성 기능을 요약하면 다음과 같다.
- 계정 및 금융 정보 탈취 (Form Grabbing & XHR Hooking)
- 암호화폐 주소 바꿔치기 (Crypto Clipper)
- 쿠키 및 세션 탈취 (Cookie Grabber)
- 키로거 (Contextual Keylogger)
- 웹 인젝트 (Web Inject)
- 화면 캡처 및 C2 통신
manifest.json 파일 데이터를 보면 이 악성 플러그인이 Chrome Security Module이라는 그럴듯한 이름으로 위장하고 있음을 확인할 수 있다. 이후 background 에서 암호화폐 지갑 주소를 가로채기 위해 clipboardRead, clipboardWrite 권한을 명시하고 있다는 점이 주목할만 하다.

manifest.json 파일크롬 브라우저가 실행되면 멀웨어에 의해 cse 플러그인이 실행됨과 동시에 background.js 스크립트가 실행된다. 주석에 친절하게도 GhostDesk 멀웨어라는 사실과 어떤 기능을 수행하는지도 자세히 적혀 있다. 앞서 보았던 SynTPHelper.exe 에서 열었던 127.0.0.1:7345 주소와 통신하기 위한 중개 URL를 명시하고, 암호화폐 지갑 주소를 바꿔치기하기 위한 각 코인별 정규 표현식이 보인다.

background.js 파일content.js 파일에는 사용자가 Form 에 입력한 정보를 탈취하는 Form Grabbing 기능, 지정된 룰의 URL에 접속하면 가짜 HTML, JS, CSS 정보를 보여주는 Web Inject 기능, 사용자가 암호 화폐 지갑 주소를 클립보드로 복사하면 이를 공격자의 것으로 바꿔치기 하는 Crypto Clipper 기능, 키로깅 기능이 구현되어 있다.

content.js 파일3. 대처
가장 근본적인 해결책은 역시 악성 파일을 다운로드하지 않는 것이다. 문제가 되는 가짜 CClean 도메인은 ccleanerwind.top 으로, 누가 봐도 이상하다. 이 글에서 소개한 사례 외에도 인터넷에서 프로그램을 다운로드할 때는 공식 사이트인지 확인하고 다운로드하자.
만약 감염됐을 시, 차선책은 해당 보고서에서 언급된 CCleaner.exe와 드랍되는 파일들을 찾아 모두 제거하는 것이다. 하지만 해당 악성 파일은 C2 통신 기능을 보유하고 있어 정보 탈취 이외에도 추가 악성 파일을 다운로드하거나 명령을 수행할 수 있어 이것만으로는 감염된 시스템을 완전히 복구하기 어려울 수 있다.