HTML Smuggling (HTML 스머글링)
최근 HTML Smuggling을 이용한 멀웨어 유포 캠페인이 적발되었다고 마이크로소프트와 멘로 시큐리티라는 회사에서 발표했습니다.
그래서 왜 이 기법을 멀웨어를 유포하는데 쓰는지, 어떤 기법인지 알아보고자 합니다.
HTML Smuggling은 무엇일까??
HTML5와 Javascript를 이용하여 페이지에 방문하거나 HTML을 열람할 경우 HTML포함된 파일을 바로 다운로드할 수 있게하는 기법입니다.
이때 Javascript Blob을 사용합니다. Blob(Binary Large Object)이란 은 이미지, 비디오와 같은 멀티미디어 데이터를 다룰 때 사용할 수 있는 객체입니다.
이를 이용하여 HTML내에 파일을 쪼개어 포함 시킨 후 사용자가 방문 시 파일 조각을 조립하여 파일을 자동으로 다운로드 시킬 수 있습니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
const file = "sBAhQAFAAJAAgAxoN0U7pvq7lqAAAAZAAAABQAJAAAAAAAAAAgAAAAAAAAAFBheVBhbF9SZXBvcnQuZG9jLmpzCgAgAAAAAAABABgAaGO";
let data = base64ToArrayBuffer(file);
const blob = new Blob(data, { type: "octet/stream" });
const fileName = "foo.zip";
if (window.navigator.msSaveOrOpenBlob) {
window.navigator.msSaveBlob(blob, fileName);
} else {
let a = document.createElement("a");
document.body.appendChild(a);
a.style = "display:: none";
let url = window.URL.createObjectURL(blob);
a.href = url;
a.download = fileName;
a.click();
window.URL.revokeObjectURL(url);
}
위의 javascript와 같이 사용이 가능하며 해당 소스코드가 포함되어 있는 HTML페이지를 로컬에서 열거나 방문 시 자동으로 다운로드 됩니다.
HTML Smuggling의 사용 목적
보통 멀웨어와 같은 특정파일을 유포할 경우, 파일이나 문서를 첨부하여 사용자에게 실행을 유도하지만 파일을 다운로드할 때 트래픽이나 특정 솔루션에 의해 탐지될 가능성이 있습니다. HTML Smuggling은 파일내용을 HTML안에 담고 있으며 Javascript를 이용하여 조립하여 바로 다운로드하기 때문에 트래픽에서 파일을 탐지하기 힘듭니다. 그래서 악성코드 유표자들의 HTML Smuggling 사용목적 중 제일 큰 이유는 탐지를 어렵게하여 유포 확률을 높이는데 있을 것으로 보입니다. 솔루션에서 탐지가 어렵다는 특징과 사회공학기법을 이용할 경우 다운로드된 파일을 실제 사용자가 실행하게 하기까지 성공할 확률이 높을 것입니다.
실제 최근 MicroSoft에서 발표한 내용에 따르면 HTML Smuggling 기법을 통해 에이싱크랫(AsyncRAT), 엔제이랫(NJRAT), 트릭봇(TrickBot), 메코티오(Mekotio) 등이 유포되고 있다고 합니다.
테스트
실제 HTML Smuggling을 이용하여 간단하게 테스트해보려 합니다. 최근에는 사용자 이메일에 HTML Smuggling이 적용된 피싱사이트를 링크를 포함하거나 HTML파일을 첨부하여 공격에 활용되고 있습니다. 그래서 저는 HTML페이지를 만들어 놓고 피싱사이트로 유도하여 HTML Smuggling 기법을 사용하도록 해보겠습니다.
실제 테스트 사용될 js파일을 작성 후 압축하여 패스워드를 적용합니다. 아래와 같이 작성했으며 간단히 메모장을 실행 시키는 코드로 테스트했습니다.
임의로 피싱 페이지를 테스트용으로 비슷하게 만들어 보았습니다. 그리고 사용자가 신뢰할 수 있도록 압축파일의 패스워드도 안내해 줍니다. 페이지로 이동 시 자동으로 report.zip파일이 다운로드되었습니다.
사용자는 아래의 압축파일을 패스워드를 통해 압축해제 후 js파일을 실행한다면 notepad가 실행되는 것을 확인할 수 있습니다.
이러한 형태로 악성코드를 유포하는데 js파일에 PowerShell코드나 C2서버에서 파일을 다운로드한다거나 이러한 방법으로 악성행위가 가능할 것으로 보입니다. 2020년에는 js파일 대신 msi파일을 통해 악성코드를 유포한 사례가 있는데 이는 다른 파일로 대체하여 충분히 활용할 수 있을 것으로 보입니다.
위험성
실제 wireshark를 통해 트래픽을 본 결과, 네트워크 단에서는 zip파일을 확인하기 어려워보입니다. HTTP 응답내용에는 파일로 보이는 시그니처를 찾을 수 없기 때문입니다. 그리고 HTML에서 압축파일을 드롭하는 과정 또한 트래픽이 발생하지 않습니다.
결론
HTML Smuggling 기법은 기존에 존재하는 기법으로 최근에 다시 악성코드 유포로 사용되고 있습니다. 보안 솔루션에서 탐지가 어려운만큼 사용자들의 스피어피싱이나 사회공학기법에 대한 교육이 필요해보입니다. PowerShell을 활용할 경우 일종에 Fileless 공격으로 활용될 수 있으므로 더욱 더 조심해야될 것 같습니다.