다양한 변형으로 국내 기업을 노리는 CHM 악성코드

CHM(Microsoft Compiled HTML Help) 파일은 마이크로소프트에서 개발한 도움말 파일로, 컴파일링 및 압축된 HTML 형식이다. 이는 응용 프로그램에 대한 사용 방법, 교육 가이드 등 사용자에게 도움말을 제공하는 데 주로 사용되지만, 내부의 HTML에 악성 스크립트를 삽입하는 방식으로 악성 행위를 수행하기도 한다. 실제로 많은 공격 그룹이 이런 CHM 파일의 특징을 악용해 악성코드를 유포하고 있다.

 

 

최근에는 국내 금융 기업의 정상 안내문으로 위장한 CHM 악성코드가 다수 확인됐다. 이 악성코드는 CHM 내부에 존재하는 악성 스크립트가 실행되면 추가 악성 파일을 생성 및 실행한다. 실행 과정에서 안랩 제품이 설치된 폴더 정보를 탈취하고, 안랩 제품의 존재 여부를 검사한다. 공격자는 공격 성공률을 높이기 위한 기능들을 추가하고, 짧은 기간 동안 변형을 유포하는 것으로 알려졌다. 해당 CHM 악성코드의 동작 및 변화 과정에 대해 살펴보자.

 

 


 

CHM 파일은 이메일의 첨부 파일을 통해 압축된 형태로 유포 중인 것으로 추정된다. 안랩 인프라를 통해 확인된 CHM 악성코드의 대표적인 파일명은 [표 1] 과 같다.

 

[표 1] 유포 파일명

 

이들은 모두 국내 금융 기업을 사칭했으며, 국내 사용자를 주요 표적으로 삼았다. CHM 파일을 실행하면 사용자 PC 화면에 다음 4가지 유형의 도움말 창이 나타난다.

 

[그림 1] 국내 카드사 사칭 안내문

 

[그림 1] 은 국내 카드사를 사칭한 안내문이다. 이 안내문은 카드 이용한도 조정 안내, 약정 기간 만료 안내 문구를 포함한다.

 

[그림 2] 국내 보험사 사칭 안내문

 

[그림 2]는 국내 보험사를 사칭한 안내문으로, 여기에는 계약번호, 보험료 등 실제 계약 내용이 표시돼 있다.

 

[그림 3] 국내 증권사 사칭 안내문

 

[그림 3] 은 국내 증권사를 사칭한 안내문이다. 이 안내문에 포함된 내용으로는 계좌 번호, 배당 안내와 같은 거래 내역이 있다.

 

[그림 4] 국내 은행사 사칭 안내문

 

[그림 4]는 국내 은행사를 사칭한 안내문이다. 이 안내문에는 금융거래정보 제공 내역, 상품 계약서 등에 관한 것들이 명시돼 있다. 해당 안내문에 포함된 내용은 모두 실제 거래 내역으로 추정되며, 탈취한 개인정보를 이용했을 것으로 보인다.

 

악성코드 분석​​​​​​​ 

1. 유형 (1)

 

 

[그림 5] 동작 과정 - 유형 (1) 
 

안랩은 최근 발견된 CHM 악성코드가 다양한 유형으로 유포되는 정황을 확인했다. 우선 최초로 유포된 유형 (1)부터 살펴보면, CHM 파일에 존재하는 악성 스크립트가 CHM 파일을 디컴파일링한 후, 생성된 JSE 파일을 실행한다. 이 JSE 파일은 추가 악성 파일을 다운로드해 실행한다. 다운로드된 파일은 인포스틸러(InfoStealer) 유형의 악성코드로, 사용자 정보와 안랩 제품이 설치된 경로의 폴더 정보를 함께 탈취하는 것으로 확인됐다.

 

1.1. CHM 

 

[그림 6] CHM 내부의 HTML – 유형 (1)  

CHM을 실행하면 내부의 HTML이 동작하는데, 이 HTML은 악성 스크립트를 포함한다. 악성 스크립트는 [그림 6]과 같이 getElementById() 함수를 통해 “par” ID 속성을 가진 요소를 찾은 다음, innerHTML() 함수를 이용해 해당 요소에 데이터를 삽입한다. 삽입되는 데이터는 총 2개로 각각 “A”, “B” 명의 ID를 가진 객체이다. 해당 객체는 악성 행위를 수행하기 위한 명령어를 포함하며, Click() 함수를 통해 실행된다. 해당 명령어는 먼저 “C:\Users\Public\Libraries” 경로에 CHM 파일을 디컴파일링하고, 디컴파일링으로 생성된 “Docs.jse” 파일을 wscript를 통해 실행한다.

 

1.2. JSE 

 

[그림 7] 디코딩된 JSE  

“Docs.jse” 파일은 인코딩된 자바스크립트(JavaScript)로, 디코딩된 코드는 [그림 7] 과 같다. 악성 행위에 사용되는 문자열들은 인코딩되어 있으며, 공격자는 파일 진단을 우회하기 위해 특정 문자열들을 숨긴 것으로 보인다. 공격자는 지속성을 위해 “Docs.jse” 파일을 Run키에 등록한다. 이후 파워셸(PowerShell) 명령어를 통해 추가 악성 파일 다운로드를 시도한다. 추가 악성 파일은 “%tmp%\alg.exe” 경로에 다운로드 및 실행된다.

 

- 다운로드 URL: hxxps://atusay[.]lat/kxydo

 

1.3. Infostealer 

 

[그림 8] alg.exe 주요 기능  

다운로드 및 실행되는 “alg.exe” 파일은 닷넷(.NET)으로 작성된 인포스틸러 유형의 악성코드이며, 드라이브 및 폴더, 브라우저 정보 등의 사용자 정보를 탈취한다. JSE 파일과 동일하게 악성 행위에 사용되는 일부 문자열들이 인코딩되어 있다. 인코딩에는 ASE 및 Base64 알고리즘이 사용됐다. 

 

[그림 9] 탈취한 정보를 저장할 텍스트 파일 생성  

이 인포스틸러 악성코드는 사용자 정보를 탈취하기 전, 먼저 공용 사진 폴더(Public\Pictures) 경로에 “랜덤명.txt” 파일을 생성한다. 해당 파일은 탈취한 정보가 저장된 텍스트 파일이다. 

 

[그림 10] 드라이브 정보  

텍스트 파일을 생성한 후에는 드라이브 정보를 탈취한다. 드라이브 타입 및 포맷, 전체 크기, 총 여유 공간 등의 정보를 텍스트 파일에 저장한다. 

 

[그림 11] 폴더 및 파일 정보  

그런 다음, 특정 폴더에 대한 정보를 탈취한다. 해당 폴더에 존재하는 파일명과 파일 사이즈, 폴더 명, 수정 시간을 앞서 생성한 텍스트 파일에 저장한다.  

 

[그림 12] 안랩 제품의 설치 폴더 정보 탈취  

[표 2] 탈취 대상 목록 (폴더 정보)

 

[표 2]는 탈취 대상 폴더 목록으로, 안랩 제품의 설치 경로를 포함한다. 이들 정보는 공격자가 해당 PC에 설치된 안랩 제품의 정보를 파악하기 위해 수집하는 것으로 추정된다. 이후 소개할 ‘유형 (2)’에서 자사 제품 정보에 따라 악성코드의 흐름을 달리하는 것이 확인되었다. 

 

[그림 13] 브라우저 정보  

[표 3] 탈취 대상 목록 (브라우저 정보)

 

위 과정이 끝나면, 브라우저 정보를 탈취한다. 브라우저 중에서도 주요 공격 대상은 크롬(Chrome)과 에지(Edge)이다. 브라우저의 프로필 및 확장 프로그램 정보가 저장된 폴더 정보를 텍스트 파일에 추가로 작성한다. Local Extension Settings 폴더 및 웹 데이터, 히스토리, 북마크, 로그인 데이터 파일은 ZIP 형태로 압축해 압축 파일에 추가한다. 

 

[그림 14] 최근 파일 정보  

[표 4] 탈취 대상 목록 (최근 사용 파일 정보)

 

또한, 최근 사용한 파일 목록에 관한 정보를 탈취하는데, 대상 목록은 [표 4]와 같다. 관련 폴더 전체를 압축 파일에 추가하고, 관련 레지스트리 키 값을 텍스트 파일에 추가한다.

 

 

[그림 15] 탈취 정보 업로드  

최종적으로 공격자가 탈취한 정보가 작성된 텍스트 파일을 압축 파일에 추가한 후, 압축 파일을 공격자 서버에 업로드한다.

 

- C&C: hxxps://plifty[.]lat/uEH5J.html 

 

[그림 16] 명령어 실행  

이후 텍스트 파일 및 압축 파일을 삭제하며, 공격자 서버로부터 응답을 받는 데이터를 통해 추가 명령어를 실행할 수 있다. 이때 cmd를 이용한 명령어가 실행되며, 공격자는 탈취한 정보를 이용해 추가 악성 행위를 수행한다.

 

2. 유형 (2) 

 

[그림 17] 동작 과정 - 유형 (2)  

유형 (2)는 JSE 파일을 실행하는 과정까지 유형 (1)과 동일하다. 다만, JSE 파일에 안랩 제품의 존재 여부를 확인하는 기능이 추가됐으며, 다운로드되는 파일의 기능도 약간 변형됐다. 또한, 안랩 제품이 존재하는 경우와 그렇지 않은 경우에 다운로드된 파일을 실행하는 방식이 달라진다.

 

2.1. CHM 

 

[그림 18] CHM 내부의 HTML – 유형 (2)  

CHM의 기능은 유형 (1) 과 동일하다. CHM 내 존재하는 악성 스크립트가 명령어 2개를 실행하며, “C:\Users\Public\Libraries” 경로에 CHM 파일을 디컴파일링한다. 디컴파일링을 통해 생성된 “Docs.jse” 파일은 윈도우 스크립트 호스트(Wscript)를 통해 실행된다.

 

- Command 1: hh,-decompile C:\Users\Public\Libraries [CHM실행경로]

- Command 2: wscript,C:\Users\Public\Libraries\Docs.jse P

 

2.2. JSE

공격자는 유형 (1) 과 동일하게 디코딩된 “Docs.jse” 파일에 악성 행위를 수행하는 데 사용되는 문자열들을 인코딩된 형태로 숨겨두고, “%tmp%\alg.exe” 경로에 추가 악성 파일 다운로드를 시도한다.

 

- 다운로드 URL: hxxps://oebil[.]lat/dcgdi 

 

[그림 19] 안랩 제품의 존재 여부 검사  

특이 사항이 있다면, 유형 (2)에는 안랩 제품의 존재 여부 확인 기능이 추가됐다. 가장 먼저 “C:\Program Files\AhnLab” 경로의 폴더가 존재하는지 확인하고, 해당 폴더가 존재할 경우 폴더 내의 서브 폴더 목록을 가져와 “V3” 문자열을 포함하는 폴더의 존재 여부를 한 번 더 확인한다. 해당 조건을 모두 만족하면 안랩 제품이 존재하는 것으로 판단한다. 

 

[그림 20] 안랩 제품의 존재 여부에 따라 달라지는 행위  

안랩 제품이 존재하지 않는 경우 다운로드된 파일을 Exec을 통해 바로 실행하지만, 안랩 제품이 존재할 경우에는 다운로드된 파일을 아래 레지스트리 키에 등록해 시스템이 시작될 때 자동으로 실행되도록 한다.

 

레지스트리 키 

[표 5] Run 키 등록

 

2.3. Infostealer

다운로드 및 실행되는 “alg.exe” 파일은 유형 (1)과 마찬가지로 인포스틸러 유형이지만, 탈취 정보와 저장, 전송 방식이 조금 달라졌다. 

 

[그림 21] 드라이브 정보 탈취 – 유형 (2)  

먼저 유형 (1) 과 동일하게 드라이브 정보를 탈취한다. 이때 탈취한 정보를 텍스트 파일에 저장하지 않고 StringBuilder 객체를 생성한 후, 해당 객체에 저장하는 방식을 이용해 파일을 생성한 기록이 발생하지 않도록 한다.

 

​[표 6] 탈취 대상 목록 (폴더 정보)

 

이후 특정 폴더에 대한 정보를 탈취한다. 탈취 정보는 해당 폴더 내에 존재하는 파일명과 파일 사이즈, 폴더 명, 수정 시간으로 유형 (1) 과 동일하다. 하지만 탈취 대상 폴더가 [표 6] 과 같이 변경됐다. 안랩 제품의 설치 폴더가 포함돼 있던 기존과 다르게, 이번에는 제외된 것을 확인할 수 있다. 

 

[그림 22] 웨일 브라우저 정보 탈취  

[표 7] 탈취 파일 목록 (브라우저 정보)

 

그 다음으로 브라우저 정보를 탈취한다. 유형 (2)는 크롬, 에지뿐만 아니라 웨일 브라우저도 표적으로 삼는다. 또한, 유형 (1) 에서는 탈취한 정보를 평문으로 저장한 반면, 유형 (2)는 Base64로 인코딩한 후 Reverse된 값으로 저장한다. 

 

[그림 23] 탈취 정보 업로드  

인코딩된 탈취 정보는 최종적으로 JSON 형태로 공격자 서버에 업로드된다. 서버로부터 추가 응답을 전달받는 코드는 제거된 것으로 보아, 유형 (2)은 정보 유출 만이 목적인 것으로 추정된다.

 

- C&C: hxxps://firenprakaze[.]store/noxilamus/asadabura

 

3. 유형 (3) 

 

[그림 24] 동작 과정 - 유형 (3)  

유형 (3) 은 2번 변형된 유형으로, CHM 내부에 악성 실행 파일이 포함돼 있어 CHM 파일을 디컴파일링한 후 바로 실행한다. 기존에는 최종 실행 파일이 인포스틸러 악성코드를 설치했다면, 유형 (3)은 백도어를 설치한다.

 

3.1. CHM 

 

[그림 25] CHM 내부의 HTML – 유형 (3)  

CHM 내부의 악성 스크립트는 [그림 25] 와 같다. 이 악성 스크립트 역시 유형 (2)와 동일한 방식으로 2개의 명령어를 실행한다. 해당 명령어는 “C:\\Users\\Public\\Music” 경로에 CHM 파일을 디컴파일링하고, 이를 통해 생성된 “audiodg.exe” 파일을 실행한다. 유형 (3)은 디컴파일링 경로가 변경됐으며, JSE 파일을 실행하는 과정이 삭제됐다.

 

- Command 1: hh, -decompile C:\\Users\\Public\\Music [CHM실행경로]

- Command 2: C:\\Users\\Public\\Music\\audiodg.exe

 

3.2. Backdoor 

 

[그림 26] 안랩 제품 설치 폴더  

“audiodg.exe”는 드라이브 정보 및 특정 폴더에 대한 정보만 탈취한다. 대상 폴더는 Program Files 폴더와 안랩 제품 설치 폴더이다. 탈취된 정보는 유형 (2) 와 동일한 방식으로 인코딩되어 JSON 형태로 공격자 서버에 업로드된다. 

 

[그림 27] 탈취 정보 업로드  

이후 서버로부터 응답 값을 전달받는다. 해당 값은 Base64를 통해 인코딩된 데이터인 것으로 확인된다.

 

- C&C: hxxps://urbiusla[.]homes/acalacara/greatone 

 

[그림 28] 데이터 로드  

현재는 서버 접속이 불가능해 실제로 전달받는 데이터는 확인할 수 없다. 다만, 코드를 분석한 결과, 공격자는 전달받은 데이터를 디코딩해 메모리에 로드하고, 원하는 악성 데이터를 전달해 추가 악성 행위를 수행하는 것으로 확인됐다.

 

유형 (3)이 탈취하는 정보는 드라이브 및 간단한 폴더 정보로, 유형 (1), 유형 (2)보다 더 줄었다. 이 점으로 미루어 보아, 유형 (3)는 정보 탈취보다 추가 공격 시도에 더 초점을 맞춘 것으로 보인다.

 

결론 

이처럼 최근 많은 APT 등 공격 그룹이 CHM 악성코드의 변형을 만들어 유포하고 있다. 악성 CHM 파일이 실행되면 사용자 PC 화면에는 정상 안내문으로 위장한 도움말 창만 생성돼 사용자가 악성 행위를 알아차리기 어렵다.

 

이번 글에서 소개한 CHM 파일은 인포스틸러 악성코드를 유포해 사용자 PC 정보를 수집하고, 이후 해당 PC에 맞게 악성코드 기능을 추가해 최종적으로 백도어 악성코드를 유포하는 것을 확인할 수 있었다. 이 밖에, 공격자는 여러 가지 사전 공격을 통해 더 치밀하게 공격을 시도하고 있다.

 

따라서 사용자는 출처가 불분명한 메일의 열람을 자제하고, 첨부 파일을 함부로 실행하면 안 된다. 또한, 주기적으로 PC를 검사하고, 보안 제품의 엔진을 최신 버전으로 업데이트할 것을 권장한다. 

 

안랩 제품군의 진단명과 IoC 정보는 자사 위협 인텔리전스 플랫폼 ‘AhnLab TIP’ 구독 서비스를 통해 확인할 수 있다.

 

 

출처 : AhnLab

02-553-2331
견적 요청
카카오톡 문의