악성코드는 윈도우 도움말 파일로도 위장한다
최근 국내 사용자를 대상으로 윈도우 도움말 파일(CHM) 형식의 악성코드가 꾸준히 유포되고 있다. 사용자가 메일에 첨부된 악성 파일을 실행하면 도움말 파일 내부에 포함된 악성 스크립트가 실행되는 방식이다.
2022년 2분기 ASEC 리포트는 악성 윈도우 도움말 파일로 유포되는 악성코드를 세 가지 유형으로 나눠서 심층 분석했다. 이번 글에서는 보고서의 주요 내용을 간략히 살펴본다.
올해 초 압축 파일로 첨부되어 메일을 통해 유포된 윈도우 도움말 파일(CHM) 형식의 악성코드가 발견되었고 현재도 동일한 파일 형식의 악성코드가 지속적으로 확인되고 있다. 사용자가 악성 도움말 파일을 실행하면 도움말 파일 내부에 포함된 HTML 파일 내 악성 스크립트가 실행되는 방식으로 동작한다. 이 과정에서 정상적인 내용을 담은 도움말 창이 실행되기 때문에 사용자가 악성 파일을 인지하기 어렵다.
악성 CHM 파일의 동작 방식
CHM(Microsoft Compiled HTML Help)은 마이크로소프트에서 개발한 도움말 파일로, 컴파일되어 압축된 HTML 형식이다. 도움말 파일은 소프트웨어 응용 프로그램에 대한 온라인 도움말, 교육 가이드, 대화형 책 등에 이용된다. CHM 파일은 hh.exe(microsoft® html help executable 프로그램)를 통해 실행된다.
hh.exe에 의해 실행된 CHM 파일은 내부에 존재하는 HTML 파일을 통해 도움말 창을 생성한다. 도움말 창을 생성하는 HMTL 및 이미지 파일들은 CHM 파일 압축 해제 시 확인할 수 있다. HTML 파일에는 텍스트 외에도 HTML 태그 및 요소, 스크립트 언어(JS, VBS), ActiveX 컨트롤 등이 포함될 수 있다. 이를 통해 사용자는 도움말 창에 이미지, 사운드, 목차 등의 기능을 사용할 수 있고, 시작 화면, 팝업 창, 바로가기 버튼 등 기타 명령들을 추가할 수 있다. 또한, HTML 태그 중 <SCRIPT> 태그를 활용해 JavaScript 등 스크립트 코드를 실행할 수 있다.
악성 CHM에서는 이와 같은 기능을 이용해 악성 명령어를 통해 악성 파일을 실행한다. 이에 대한 자세한 설명은 마이크로소프트 도움말에서 확인할 수 있다.
세 가지 유형의 악성 CHM 파일 심층분석
유형 1: 정상 파일과 함께 압축 파일 형태로 메일 첨부
첫 번째 유형은 정상 파일과 함께 압축 파일 형태로 메일에 첨부되어 유포되는 형태이다. 첨부 파일은 Zip 파일 또는 RAR 파일로 구성되어 있으며, 내부에는 악성 CHM 파일뿐만 아니라 정상 워드 문서도 포함된 경우가 있다. [그림 1]은 첫 번째 유형의 CHM 파일을 포함한 이메일 샘플 중 하나다.
[그림 1] 유포되는 이메일 샘플
첫 번째 유형의 CHM 파일 동작 과정은 [그림 2]와 같다.
[그림 2] 첫 번째 유형의 CHM 동작 과정
[그림 3] RAR 파일 내부에 존재하는 CHM 파일
CHM 파일은 도움말 창 생성과 함께 cmd 명령어를 실행해 다음과 같은 방식으로 악성 행위를 수행한다. cmd 명령어가 실행되면 %USERPROFILE%\Links\ 폴더에 Document.dat 파일을 생성하고 Base64로 인코딩된 명령어를 저장한다. 이후 certutil –decode 명령을 통해 Document.dat에 존재하는 데이터를 디코딩해 동일한 폴더에 Document.jse로 저장한다. 또한, 아래 RUN 키에 %USERPROFILE%\Links\Document.jse 파일을 등록해 파일이 지속적으로 실행한다.
▶HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
파워쉘(PowerShell)을 통해 특정 URL에 접속해 실행 파일을 다운로드하고 %tmp% 폴더에 csrss.exe이라는 파일명으로 저장 및 실행한다. 앞서 설명한 CHM 파일은 악성 파일을 추가로 다운로드하지 않는다. 다만 동일한 방식으로 유포되고 있는 악성 파일의 경우 키로깅, C2(hxxps://medusabluetail.com/imageview.php) 접속 시도 등의 악성 행위를 수행하고 있어 유사한 기능을 가진 실행 파일을 다운로드한다고 추정할 수 있다.
유형 2: DLL 하이재킹 기법을 이용해 악성 행위 수행
두 번째 유형의 악성 CHM 파일은 DLL 하이재킹(Hijacking) 기법을 이용해 국가 기관 관리자 및 대학교수 등을 대상으로 유포되는 것이 가장 큰 특징이다. DLL 하이재킹 기법은 정상 프로그램 실행 시 DLL을 로드하는 과정에서 발생하는 취약점으로 정상 DLL이 아닌 공격자가 제작한 악성 DLL이 로드해 악성 행위를 수행하는 것을 말한다. 해당 기법을 이용한 CHM의 동작 과정은 [그림 4]와 같다.
[그림 4] 두 번째 유형의 CHM 동작 방식
악성 CHM 파일에 포함된 HTML 파일의 코드는 특정 id의 속성 영역에 악성 명령어를 포함한 후 Click() 함수를 통해 해당 명령어를 실행한다. 이때 총 두 개의 명령어가 실행되는데, 첫 번째 명령어는 현재 실행된 악성 CHM 파일을 hh.exe 프로세스를 통해 디컴파일(decompile)한다. 이후 두 번째 명령어는 디컴파일(decompile)되어 생성된 파일 중 정상 프로그램을 실행하는 기능을 수행한다. 이때 함께 생성된 악성 DLL이 DLL 하이재킹 기법을 통해 로드되어 악성 행위를 수행한다.
로드된 악성 DLL은 먼저 해당 PC의 TEMP 폴더 내에 존재하는 파일의 개수를 검사한다. 파일 개수가 18개 미만인 경우 프로세스가 종료되고, 이상인 경우 악성 행위를 수행한다. 해당 과정은 실제 사용자가 사용 중인 PC 인지, 가상 환경인지 확인하는 것으로 추정된다. 파일 개수를 검사한 후 현재 실행 프로세스명을 추가로 검사한다. 또한 동작 과정에서 악성 DLL이 공격자가 의도한 방식으로 실행되었는지 확인하기 위해 DLL은 “ImagingDevices.exe” 문자열과 비교한다.
PC 환경 검사가 모두 끝나면 실제 악성 행위가 수행된다. 먼저 아래 RUN 키에 현재 실행 중인 프로그램을 등록해 악성 행위가 지속적으로 유지될 수 있도록 한다.
▶SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run
이후 %TEMP% 폴더에 악성 VBE 파일을 생성 후 실행한다. 디코딩된 VBE는 ReVBShell로, 공격자의 명령에 따라 추가 악성 행위를 수행할 수 있다. C2에 접속해 공격자의 명령어를 받으며, WMI 쿼리를 통해 해당 PC에 설치된 백신 제품 정보를 가져와 “ESET Security” 문자열이 존재하는 경우에는 악성 행위를 수행하지 않는다.
추가로, 안랩의 ASD 인프라를 통해 감염된 PC에서 추가로 생성된 악성 파일이 존재하는 것을 확인했다. 추가 생성된 파일들은 모두 정상 프로그램으로 위장했다. 여기에 국내 다수 이용자가 이용 중인 문서 편집 및 메신저 프로그램이 포함되었다. 해당 파일들은 동일한 과정을 거쳐 내부 데이터를 디코딩해 실행하며, 디코딩된 데이터는 모두 각기 기능을 수행한다.
두 번째 유형의 악성 CHM 파일에 감염되는 경우 다양한 유형의 악성코드를 추가로 생성할 수 있다. 추가로 생성된 악성 파일로 인해 사용자 정보가 유출될 수 있으며, 탈취된 정보를 이용한 2차 피해가 발생할 수 있다.
유형 3: CHM 파일 내부 악성 실행 파일 생성 및 실행
세 번째 유형의 CHM 파일은 실행 시 내부에 포함된 악성 실행 파일을 생성 후 실행하는 형태이다. 코로나 확진자가 다수 발생한 시기를 노려 코로나 확진자 안내문을 사칭한 악성 CHM 파일을 유포했다.
유포된 파일명은 다음과 같다.
▶유포 파일명: 확진자 및 동거인 안내문 (50).chm
[그림 5] 코로나 확진자 안내문 사칭
악성 CHM 파일을 실행하게 되면 사용자 PC 화면에는 [그림 5]와 같이 코로나 확진자 안내문 창이 생성되어 악성 파일이 실행된 것을 인지하기 어렵다.
[그림 6] 리다이렉트되는 정상 사이트
또한, 동거인 안내문에 포함된 단축 URL은 [그림 6]과 같이 정상 사이트로 리다이렉트(redirect)되어 사용자는 악성 행위를 더욱 알아채기 힘들다. 이와 같은 과정을 통해 공격자의 치밀한 유포 방식을 확인할 수 있다.
악성 CHM 파일에 포함된 HTML 파일의 코드를 확인해 보면, 악성 스크립트가 존재하는 것을 확인할 수 있다. 해당 스크립트의 기능은 getElementById() 함수를 통해 “tt” id 속성을 가진 요소를 찾은 후 innerHTML() 함수를 이용해 특정 데이터를 해당 요소에 삽입하게 된다.
삽입되는 데이터는 “xx” 명의 id를 가진 객체이며, 해당 객체에 악성 명령어가 포함되어 있다. 악성 명령어는 hh.exe 프로세스를 통해 chm 파일을 디컴파일해 “c:\\programdata\\chmtemp” 폴더에 생성하는 기능을 수행한다. 해당 데이터가 삽입되면 Click() 함수를 통해 악성 명령어가 실행되는 형태이다. 이후 동일한 과정으로 두 번째 명령어가 실행된다. 두 번째 명령어는 디컴파일되어 생성된 파일 중 “chmext.exe” 파일을 실행하는 기능을 수행한다. 총 두 개의 명령어를 Click() 함수를 통해 실행하는 점과 CHM 파일을 디컴파일 후 악성 파일을 실행하는 점에서 “유형 2” 와 유사하다.
[그림 7] 세 번째 유형의 CHM 동작 과정
chmext.exe 파일이 실행되면 현재 실행 중인 프로세스를 확인해 v3l4sp.exe의 존재 유무를 확인한다. v3l4sp.exe(V3 Lite)인 프로세스가 존재할 경우 추가 악성 행위는 수행하지 않고 종료된다. 이를 통해 V3 Lite를 사용하는 개인 고객의 경우 추가 악성 행위는 수행하지 않고 종료되며, 기업 사용자의 경우 악성 행위가 그대로 발현될 수 있다.
프로세스 확인 후 %ProgramData%\Intel 폴더에 IntelRST.exe를 생성하고 RUN 키에 생성한 파일을 동록해 악성 파일이 지속적으로 실행될 수 있도록 한다. chmext.exe로부터 생성된 IntelRST.exe는 실행 시 Windows Defender 예약 및 실시간 검사의 제외 파일로 등록하기 위해 파워쉘(PowerShell) 명령어를 수행한다.
이후 dl.dropboxusercontent[.]com/s/k288s9tu2o53v41/zs_url.txt?dl=0에 접속해 추가 URL 데이터를 받아온다. 접속한 주소로부터 추가 URL 데이터를 받은 경우, [받아온 URL]/post.php (naveicoipc[.]tech/post.php)를 수집한 사용자 PC 정보를 전송한다. 수집한 데이터 전송 후 naveicoipc[.]tech/7qsRn3sZ/7qsRn3sZ_[사용자명]_/fecommand.acm에 접속해, 해당 주소로부터 추가 데이터를 받아 다양한 악성 행위를 수행한다.
맺음말
윈도우 도움말 파일(CHM)을 이용한 악성코드는 과거부터 존재해 왔지만, 최근 국내에 더욱 다양한 형태로 유포되고 있는 것으로 확인됐다. 최근 국내 사용자를 대상으로 유포되고 있는 악성 도움말(CHM) 파일은 유포 대상자에 따라 다양한 주제를 사용해 더욱 고도화된 공격을 시도한다. 또한 악성 도움말(CHM) 파일이 실행되면 사용자 PC 화면에는 정상 이미지 및 글을 이용한 도움말 창이 생성돼 사용자는 악성 행위를 인지하기 어렵다.
악성 도움말(CHM) 파일에 의해 감염된 PC는 이후 정보 탈취 및 백도어 유형 등의 악성코드가 추가로 생성 및 실행된다. 백도어를 통한 악성 명령어 실행, 탈취된 정보를 이용한 2차 피해 등 추가로 생성된 악성코드에 의해 다양한 악성 행위가 수행될 수 있다.
사용자는 출처가 불분명한 메일은 열람을 자제해야 하고, 첨부된 파일은 실행하지 않도록 각별히 주의해야 한다. 또한 주기적으로 PC 검사를 진행해야 하며, V3와 같은 백신 프로그램은 최신 버전으로 유지해야 한다.
출처 : AhnLab