


概要
本レポートは、Phrack Magazineで公開された APT Down–The North Korea Files のデータを基に追加分析した内容を扱っている。攻撃者が実際に使用したVMware VM、VPSのダンプファイルも公開されており、攻撃者の活動履歴を詳細に分析することができ、これによって攻撃の背後関係も推測することができた。
特に公開されたファイルの中にルートキットのソースコードが存在するが、これは当社が2022年の金融機関におけるインシデント調査の過程で確認したルートキットのソースコードであることが判明した。コードのロジックはもちろん、使用された暗号化キーまで一致していた。また、2022年のインシデント調査時に確認されたルートキットの、2025年最新バージョンであるソースコードが追加で確認された。
このほかにも、Ivantiの1-Dayエクスプロイト、流出したと推定される外交部(外務省に相当)ホームページのソースコード、GPKISecureWebXのソースコード、そして検察、防諜司令部などを対象としたフィッシング攻撃も確認された。これらの状況は、攻撃者が過去から現在にかけて韓国を主要な標的とし、持続的かつ活発な攻撃活動を行ってきたこと、一般的には外部からの奪取が困難な資料が流出している点、ルートキットや1-Dayエクスプロイトを活用しているという点から、攻撃者が高いレベルの攻撃能力を保有しており、内部ネットワークにまで侵入して機密情報を奪取したことを示唆している。
分析ファイルの概要
本章では、分析内容を説明する前に、APT Down – The North Korea Files レポートと共に公開されたファイルの構成を簡略に説明する。

caption - .onion サイトに掲載された公開ファイルの一覧
主要なファイルは work.zip、vps.zip、file-lists_and_misc.zip で、説明は以下の通りである。
work.zip
攻撃者のVMware VM(Deepin 20.9)ダンプファイルで、実際に使用されたワークステーション環境が含まれており、マルウェアのソースコード、攻撃ツール、奪取された情報、各種ログなどが存在する。
ホストの C:\ が hgfs でマウントされた状態で、攻撃者のホスト上に存在するファイルも確認できる。
vps.zip
攻撃者が所有するVPSのダンプファイルで、スピアフィッシング攻撃に使用された履歴や各種ログが存在する。
国軍防諜司令部、検察など複数の機関をターゲットとしたスピアフィッシング攻撃が確認できる。
file-lists_and_misc.zip
攻撃者のワークステーションにおけるGoogleタイムライン、コマンド履歴、ファイル一覧全体などが存在する。
ファイル一覧全体から、ダンプファイルには存在しないパスやファイルを確認できる。
1. マルウェアおよび攻撃の分析
本章では、攻撃者のVMware VMダンプファイルから確認されたマルウェアと、VPSダンプファイルから確認されたスピアフィッシング攻撃およびインフラ運用の状況について解説する。特にtomcat20220420_rootkit、tomcat20250414_rootkit_linux234ディレクトリで確認されたルートキットとバックドアは、過去に当社が調査した国内の金融機関を標的とした侵害事故と関連している。
1.1. tomcat20220420_rootkit
1.1.1. Backdoor
work/home/user/Desktop/tomcat20220420_rootkit/tomcat20220420_rootkit/workディレクトリ内にバックドアのソースコードが存在する。バックドアの主な動作は、コマンドコードに応じて悪意のあるアクティビティを実行するか、プロキシとして通信を中継することである。バックドアは単独では実行されず、常にルートキットによって実行される。バックドアの起動引数の情報は以下の表の通りである。
caption - 引数オプション
プロキシフラグが有効な場合、コマンドコード関連のロジックは実行されず、AES-CBC-256で暗号化されたデータ(__step2__)を受信するまで待機する。

caption - master.c データ検証ロジック
AESキーとivは以下の通りである。
AESキー:
603deb15153a715e2b73aef3857d758b1f552c573e6158d72d9811a33914defeiv:
603deb15153a715e2b73aef3857d758b1f552c573e6158d72d9811a33914defe
バックドアは、通常の通信を装うためにクライアントとのソケット通信を以下のプロトコルのいずれかに設定する。
HTTP
HTTPS
SSL
TCP
SMTP
実際に使用されるプロトコルは install_common.h 内で定義されている。

caption - install_common.h
コマンドコードを含むすべての送受信データはxorで暗号化・復号される。このとき使用されるキーは「1101link」であるが、暗号化・復号ロジックを見ると、単一バイトと1回xorするのと同等である。したがって、「1101link」によるxor結果は、1によるxor結果と等しい。

caption - encrypt.c EncodeDecode関数
コマンドコードごとの動作は以下の表の通りである。
caption - バックドアコマンドコードの動作
1.1.2. syslogk rootkit
work/home/user/Desktop/tomcat20220420_rootkit/tomcat20220420_rootkit/main.cファイルは、syslogkと命名されたルートキットのソースコードである。ルートキットは、バックドアおよび関連するマルウェアが存在するディレクトリを隠蔽し、一般的な検出を回避する。また、マジックパケット受信時のみバックドアを実行するため、攻撃者が望むタイミングでのみバックドアが動作する。
ルートキットは3つの関数をフックして、プロセス、ポート、ディレクトリを隠蔽する。フックに関する情報は以下の表の通りである。
caption - フック情報
フック関数内部では、事前定義されたプロセス名、パス、ポートの文字列と対象のエントリを strstr 関数で比較し、一致した場合はそのエントリを返す前に削除する方式で隠蔽を実装している。
その後、Netfilter関連の nf_register_hook 関数を使用してフックポイントにコールバック関数を登録する。nf_register_hook によってコールバック関数が登録される2つのフックポイントの説明は以下の通りである。
NF_INET_LOCAL_IN : ローカルホストにパケットを送信する前
NF_INET_LOCAL_OUT : ローカルホストから外部にパケットを送信する前

caption - hkcap.c フック関数登録ロジック
上記の方法により、ルートキットはローカルホストで送受信されるすべてのパケットを監視し、攻撃者が送信したマジックパケットを確認すると悪意のあるアクティビティを実行する。
NF_INET_LOCAL_IN 地点のコールバック関数は、受信したパケットのプロトコルがTCPであることを確認し、ペイロードを復号して特定の条件と一致するか検証する。復号に使用されるデータは以下の表の通りである。
caption - 復号キー情報
復号後に検証される条件リストと処理動作は以下の表の通りである。
caption - 条件および動作
NF_INET_LOCAL_OUT 地点におけるコールバック関数は、バックドアが送信するパケットの source(送信元)を、バックドアが通信に使用しないポートに変更する。
Netfilterコールバック関数の登録が完了すると、ルートキットはカーネルモジュールリストから自身を削除して検出を困難にする。これにより、lsmod コマンドを実行してもルートキットは見つからなくなる。

caption - hide_module関数
モジュールリストから削除されたルートキットに対し、install.h の MAGIC_DRBIN の値を書き込むと、lsmod コマンドで再び確認できるようになる。

caption - proc_write関数のロジック
1.1.3. Backdoor Client
work/home/user/Desktop/tomcat20220420_rootkit/tomcat20220420_rootkit/work/tcat.cファイルは、バックドアクライアントのソースコードである。このファイルは攻撃者がC&Cサーバーから実行したものと思われる。
実行時に複数のオプションを指定可能である。すべてのオプションについては以下の表を参照されたい。
caption - 引수オプション
オプションに応じて、バックドアにコマンドを伝達する方式は以下のように4つに分類される。
single cmd : 入力されたコマンドをバックドアで実行させるために送信する。
single daemon cmd : 入力されたコマンドをバックドアで新しいプロセスを生成して実行させるために送信する。
input loop : exit が入力されるまで無限にコマンドの入力を受け付け、コマンドに応じた動作を実行する。
kernel cmd : 入力されたコマンドをカーネルモジュール側で出力を伴わずに実行させるために送信する。
input loop を除き、すべてのコマンド伝達方式は、送信後にクライアントが終了する。input loop においてコマンドに応じて実行される動作は以下の表の通りである。
caption - バックドアクライアントコマンドの動作
すべての通信は xor キー(1101link)で暗号化して行われ、common.h ファイルで定義された GENERAL_MODULE, GENERAL_PROTOCOL の値をパスワードとともに sha512 でハッシュ化し、常にメッセージの先頭に付与して送信する。バックドアとの通信は、オプションに応じて以下のプロトコルのいずれかに設定される。
TCP
HTTP
OLD HTTP - OLD HTTPは通常のHTTPとは異なり、クッキー値を設定しない。
1.2. tomcat20250414_rootkit_linux234
1.2.1. Backdoor
work/mnt/hgfs/Desktop/tomcat20250414_rootkit_linux234/tomcat20250414_rootkit_linux2345/workディレクトリ内に、2022年バージョンと同一体系の2025年バージョンのバックドアソースコードが存在する。2022年バージョンよりアップグレードされており、callback遅延通信時にパスワードを確認し時間を指定する機能や、ファイルのダウンロード・アップロード速度を制限する機能などが追加されている。すべてのオプションは以下の表の通りである。
caption - 引数オプション
パスワードのほかに、マスターパスワードが追加されている。指定のポートでソケットサーバーを生成し、クライアント接続時にマスターパスワードと通信設定情報を sha512 でハッシュ化する。マスターパスワードには、common.h に定義された !@nf4@#fndskgadnsewngaldfkl を使用する。ハッシュ値はグローバル変数に保存され、ssl通信時に通信設定情報が正しいか検証するが、実際には使用されない。
その後、パスワードをマスターパスワード検証ロジックと同様に通信設定情報とともに sha512 ハッシュ化し、一致するか確認する。

caption - encrypt.c passcheck_check関数
パスワードは Miu2jACgXeDsxd であり、パスワードを含む設定情報は config.sh ファイルで任意の値に変更すると、ビルド時に適用される。

caption - config.sh 基本設定情報
通信に使用されるプロトコルの一覧は2022年版バックドアと同一である。
HTTP
HTTPS
SSL
TCP
SMTP
データの暗号化・復号に使用される xor キーも同様だが、5つの新しい xor キーと暗号化・復号関数が追加された。

caption - encrypt.c から確認されたすべての xor キー
2022年バックドアと比較して複数の動作が追加され、パケット条件が変更されたことに伴い TRANSFER が付随するコマンドコードの動作が変更された。新しく追加されたコマンドコードは以下の通りである。
CMD_NEW_UPLOAD
CMD_NEW_DOWNLOAD
CMD_LISTEN_PROXY_TRANS
CMD_TRANSFER
CMD_PROXY_TRANSFER
CMD_SOCKS_PROXY_TRANSFER
CMD_SOCKS_PROXY
CMD_NEW_SINGLE_CMD
コマンドコードごとの動作は以下の表の通りである。
caption - バックドアコマンドコードの動作
1.2.2. syslogk rootkit
work/mnt/hgfs/Desktop/tomcat20250414_rootkit_linux234/tomcat20250414_rootkit_linux2345/main.cファイルは、2022年バージョンと同様に、Netfilterのフックポイントにコールバック関数を登録する。変更点は関数のフック方法、モジュールの隠蔽手法、そして新たに追加されたNetfilterフックポイントである。
2022年版のルートキットでは関数のフックに udis86 ライブラリを使用していたのに対し、2025年版では khook ライブラリを使用している。

caption - 左) 2022ルートキット udis86ライブラリ、右) 2025ルートキット khookライブラリ
フック対象の関数が3つだった2022年ルートキットとは異なり、計5つの関数をフックする。フックに関する情報は以下の表の通りである。
caption - フック情報
Netfilterフックは、従来の NF_INET_LOCAL_IN、NF_INET_LOCAL_OUT の2つのフックポイントからさらに2つ追加された。
NF_INET_LOCAL_IN : ローカルホストにパケットを送信する前
NF_INET_LOCAL_OUT : ローカルホストから外部にパケットを送信する前
NF_INET_PRE_ROUTING : パケットがネットワークスタックに入った直後
NF_INET_POST_ROUTING : ルーティング発生後、ネットワークに送り出される直前

caption - hkcap.c フック関数登録ロジック
NF_INET_PRE_ROUTING 地点のコールバック関数は、大きく分けて2つの動作を行う。
1つ目は、2022年ルートキットの NF_INET_LOCAL_IN 地点と同様に、パケットの条件を検査してバックドアを実行することである。パケット条件が複雑だった2022年ルートキットとは異なり、NF_INET_PRE_ROUTING 地点のコールバック関数は TCP + SYN パケットを対象とし、id および seq 値が id_list、seq_list 内に存在するか確認する。
条件を満たしたパケットの window 値をマジックパケットの値と比較し、その値に応じた偽装プロトコルを設定してバックドアを実行する。マジックパケットの値に対応する偽装プロトコルは以下の表の通りである。
caption - 偽装プロトコル一覧
バックドアを実行する方法にも大きな違いがある。/bin/sh -c を使用していた2022年ルートキットとは異なり、call_usermodehelper 関数を用いてバックドアを実行する。このとき、ポート番号は 3000 〜 8000 の範囲からランダムに決定される。

caption - hkcap.c kernel_run関数
2つ目は、バックドアと通信中のIPから送信されたパケットの dest(宛先)を、上記で生成されたランダムポートに変更することである。これにより、攻撃者はランダムに生成されたバックドアのポートを知らなくても通信が可能となる。

caption - パケットの dest の値を変更する hkcap.c コード
NF_INET_LOCAL_IN 地点のコールバック関数は、NF_IP_PRE_ROUTING で変更されたパケットの dest を、実際のバックドアが使用するポートに変更する。これは2段階に分けてポートを変更することにより、実際にバックドアが稼働しているポートの特定を妨害するための設計と見られる。

caption - パケットの dest の値をバックドアが使用するポートに変更する hkcap.c コード
NF_INET_LOCAL_OUT 地点のコールバック関数は、バックドアが送信したパケットの source 値がバックドアの listen ポートの場合、これを任意のポートに変更し、そうではない場合は実際に外部に送信するポートに書き換える。
NF_INET_POST_ROUTING 地点のコールバック関数は、source 値が任意のポートに変更されたパケットの source 値を、実際に外部へ送出するポートに書き換える。

caption - パケットの dest の値を攻撃者のポートに変更する hkcap.c コード
ルートキット自体の隠蔽に関しては、モジュールリストから自身を削除する処理に加え、sysfsからも削除する関数が追加されている。

caption - モジュール隠蔽を行う hkmod.c コード
sysfs関連の関数は、KoviD ルートキットの kv_hide_mod 関数をそのまま流用している。

caption - KoviD ルートキットの kv_hide_mod 関数
隠蔽されたルートキットに特定の文字列を書き込むと再びモジュールが確認できるようになる点は同様だが、入力された文字列に応じて、Netfilterフック側で差し替えるポートの値を指定する機能が追加されている。

caption - ポートの値を指定する hkcap.c コード
ルートキットにデータを書き込む際、モジュールを表示させるための特定の文字列を除くすべての文字列は、AES-CBC-256で復号した上でチェックを行う。AESキーおよびivは以下の通りである。
AESキー:
d03deb92153a71458973aef3857d75b27e552cc63e6158a8339811873994de47iv:
efa3c987532cc0bdac533845ad8df5ea
ルートキットに書き込まれる文字列に応じた動作は以下の通りである。
caption - 文字列および動作
1.2.3. Backdoor Client
work/mnt/hgfs/Desktop/tomcat20250414_rootkit_linux234/tomcat20250414_rootkit_linux2345/work/tcat.cファイルは、バックドアクライアントのソースコードである。2022年版バックドアクライアントと比較すると、kernel cmd 機能が廃止された以外に大きな変化はなく、オプションも kc オプションが廃止され LLL オプションが追加された。すべてのオプションについては以下の表を参照されたい。
caption - 引数オプション
前述の通り kernel cmd 機能が削除されたため、バックドアにコマンドを伝達する方式は以下の3つが存在する。
single cmd : 入力されたコマンドをバックドアで実行させるために送信する。
single daemon cmd : 入力されたコマンドをバックドアで新しいプロセスを生成して実行させるために送信する。
input loop : exit が入力されるまで無限にコマンドの入力を受け付け、コマンドに応じた異なる動作を実行する。
2022年のバックドアクライアントは単にコマンドのみを入力されて通信していたが、2025年のバックドアクライアントは各コマンドごとに個別のオプションを指定できるようになり、コマンド自体の数は減少したものの、実行可能な処理はより高度化・精緻化している。input loop においてコマンドに応じて実行される動作は以下の表の通りである。
caption - バックドアクライアントコマンドの動作
現時点で tcat_new_send_file、tcat_new_recv_file のように、追加的に実装された主要なコマンド関数が定義されていないため、追加された機能の詳細な分析は行えなかった。
通信の都度パスワードの sha512 ハッシュ値を送信していた2022年のバックドアクライアントとは異なり、2025年のバックドアクライアントは最初の接続時のみパスワードの sha512 ハッシュ値を送信する。
バックドアとのすべての通信は、2022年版クライアントと同様に xor キー(1101link)で暗号化されて行われる。ただし、3つのプロトコルを指定可能であった2022年版とは異なり、2025年版クライアントでは以下の4つのプロトコルのうちいずれかに設定される。特に OLD HTTP が廃止され、HTTPS、SMTPが新しく追加された。
TCP
HTTP
HTTPS
SMTP
1.3. Cobalt Strike
1.3.1. Cobalt Strike Loader
Rustで作成されたローダーマルウェアであり、内蔵されたシェルコードを復号してメモリ上で実行する。Cobalt Strike Loaderのファイルパスは以下の通りである。
work/mnt/hgfs/Desktop/New folder (2)/DboRrmSS.exework/mnt/hgfs/Desktop/New folder (2)/m01QzOfI.exework/mnt/hgfs/Desktop/New folder (2)/voS9AyMZ.tar.gzwork/home/user/.cache/vmware/drag_and_drop/0pkbW4/3Powwovv.exework/home/user/.cache/vmware/drag_and_drop/gWMDML/GnAN3FhY.exework/home/user/.cache/vmware/drag_and_drop/QqiN9h/DboRrmSS.exework/home/user/.cache/vmware/drag_and_drop/rM0FG0/m01QzOfI.exe
Windows APIを呼び出す際、djb2 ハッシュ値を算出することで動的なローディングを行い、シェルコードは AES-CBC-256 で復号する。その後、復号されたシェルコードをメモリ上で実行する。

caption - Window API ローディング関数
すべての Cobalt Strike Loader で使用されている AESキーおよびivの一覧は以下の表の通りである。
caption - Cobalt Strike Loader AESキー、iv一覧
1.3.2. Shellcode
Cobalt Strike Loader によって実行されるシェルコードであり、Cobalt Strike Beaconを復号してメモリ上で実行する。ファイル形式で存在するシェルコードの実態パスは以下の通りである。
work/home/user/.cache/vmware/drag_and_drop/5wdgDr/payload.binwork/home/user/.cache/vmware/drag_and_drop/6bX9mm/Black.x64.exework/home/user/.cache/vmware/drag_and_drop/NDBu65/payload.binwork/home/user/.cache/vmware/drag_and_drop/yf91yD/payload.binwork/home/user/.cache/vmware/drag_and_drop/zlLWeR/payload.bin
work/home/user/.cache/vmware/drag_and_drop/6bX9mm/Black.x64.exe は、他のシェルコードファイルと同様の動作を行うが、シェルコード単体ではなくコンパイル済みの実行形式ファイル(EXE)である。

caption - Black.x64.exe DIE 解析結果
Cobalt Strike Loaderと同様に、djb2 ハッシュ値を算出して Windows APIを動的にロードした上で呼び出し、その後 Cobalt Strike Beaconを RC4 で復号してメモリ上で実行する。

caption - RC4 ksa 関数
すべてのシェルコードで使用される RC4 キーは以下の表の通りである。ファイル形式として直接存在はしないが、Cobalt Strike Loader によってインメモリ展開・起動されるシェルコードもこれに含む。
caption - シェルコード RC4キー一覧
シェルコードによって起動される Cobalt Strike Beacon には、ETW関連の関数や AMSI.dllの APIをバイパス・パッチすることで、Windowsのセキュリティ機能を回避するロジックが存在する。しかし、暗号化された設定(Config)情報が不完全であったため、具体的な設定内容の特定には至らなかった。
1.3.3. Cobalt Strike Beacon
work/mnt/hgfs/Desktop/111/beaconディレクトリ内から Cobalt Strike Beaconのソースコードが確認された。Beaconの起動時、内包された設定(Config)情報は1バイトの xor キー(46)で復号される。復号された構成情報は複数のブロックで構成されており、各ブロックは以下のようなデータ構造を持つ。
復号された設定情報はパースされてグローバル変数に格納され、必要な値が存在する際にインデックスを介してアクセス・利用される。CobaltStrikeParser を用いてパースした一部の設定情報は以下の通りである。

caption - CobaltStrikeParser パース結果
復号された構成情報には C&Cサーバーのアドレスとエンドポイントが含まれているが、実行フェーズにおいてこの値は直接使用されず、ソースコード上に直接記述されたハードコード値(IPやドメイン)が優先して使用される。

caption - comm.cpp send_Metadata 関数
設定情報の復号が完了すると、C&Cサーバーに転送するためのメタデータを構築する。主要なメタデータの情報は以下の表の通りである。
caption - メタデータ情報
メタデータの作成が完了すると C&Cサーバーへ送信し、その後5秒間隔でHTTPベースのポーリング通信を実施する。この際、命令コードの受信には GET、実行結果等の送信には POST メソッドが用いられる。受信したコマンドIDに応じて処理を実行し、その結果をC&Cサーバーへ返信する。全動作の一覧は以下の表の通りである。
caption - Cobalt Strike Beacon の動作
全体の半分以上の機能が未実装または無効化されており、当該 Cobalt Strike Beacon は開発途中の作成中段階のものであったと推測される。
1.3.4. C# Loader
work/home/user/Desktop/0128ディレクトリ内には、他プロセスに対して Cobalt Strike Beaconをインジェクション(注入)する C#製ローダー(ok.dll)と、そのソースコード(ok.cs)、さらには同ローダーを読み込み実行するスクリップト(ok.sct)などが確認された。
関数名や引数に「test」という文字列が多用されていることから、テスト目的で検証用として使用されていたファイルと推測される。
ok.hta
hxxp://192.168[.]123.200/ok.sctにアクセスしてスクリプトをダウンロードし、Fuk関数を実行する。

caption - ok.hta ファイル内容
ダウンロード対象のスクリプトは、同一パス上に存在する ok.sct と想定される。
ok.sct
シリアル化(シリアライズ)されたC#オブジェクトをデシリアライズした上で、Work関数をコールする。このとき実行されるDLLは、ok.csをビルド・コンパイルした ok.dllである。ok.csファイル内でWork関数を確認することが可能である。

caption - C# Loader デシリアライズコード
C#製ローダーは、conhost.exe プロセスに対して Cobalt Strike Beaconをインジェクションして起動する。Cobalt Strike Beaconは、zlib圧縮された上でBase64エンコードされており、静的文字列として保持されている。

caption - Cobalt Strike Beacon デコード関数
CobaltStrikeParser を使用して調査した、C#ローダー内蔵の Cobalt Strike Beaconの構成定義パラメータの一部は以下の通りである。

caption - C# Loaderに保存された Cobalt Strike Beacon 設定(Config)情報
1.4. Ivanti Connect Secure
1.4.1. BRUSHFIRE
work/mnt/hgfs/Desktop/ivanti-new-exp-20241220.zipファイルを展開すると、Ivanti Connect SecureのRCE(遠隔コード実行)脆弱性を悪用してバックドアを展開・感染させる exp*.pyスクリプトファイルを確認できる。
Pythonスクリプト側で clientCapabilitiesパラメータの長さを256バイトを超えるようにセットする。これは、同箇所で発生するバッファオーバーフローを突いてリモートコード実行を引き起こす脆弱性「CVE-2025-0282(256バイトのバッファオーバーフロー)」を標的にしたものと判断される。

caption - ex*.py ロジック
「CVE-2025-0282」は、過去に中国主導のサイバー攻撃活動グループとして知られるUNC5221が初期侵入経路(ベクター)として悪用したことで知られる脆弱性である。
一連の悪用を想定した exp*.pyファイル群は、基本挙動に関する動きはすべて同様であり、ハッキング(エクスプロイト)時に指定する関数のオフセットアドレスや、アクセス先のサービスエンドポイントの文字列にのみ差分がある。コマンドライン実行時の引数に準じた exp*.pyの動きは以下の表の通りとなる。
caption - 引数オプション
実装されたバックドアは plugins/ssl_readファイルであり、RCEによって稼働された plugins/installスクリプトが、バックドア自体を「ssl_read」関数に割り込み(フック)させる。フックされた ssl_read関数は、SSL通信受信時に特定のマジックバイト(事前設定値)が挿入されたパケットを発見すると、exp*.py側からランダムに自動生成された4バイトのキーとxor(排他的論理和)を行い、ペイロードから直接シェルコードを取り出して稼働させる。

caption - ssl_read シェルコード実行ロジック
exp*.pyスクリプトは、設定したプロセス引数に応じて動的にシェルコードを構成し、標的サーバーへとアップロードする。この際、あらかじめシェルコード側に仕込まれた固定パターン(ダミーコード)をプログラム上で置換処理(replace等)を施し、ターゲットにとって正常に稼働するコードへと修正・加工する。pluginsディレクトリ下に組み込まれた、シェルコードアップロード用 exp*.pyのコマンド指定パターンと実行ステップは以下の通りである。
caption - 実行引数およびシェルコードの挙動
plugins/ssl_readに仕込まれたバッグドアの役割・実装方式は、過去のUNC5221によるキャンペーンレポートで公表されているマルウェア「BRUSHFIRE」と同一のものであり、当該攻撃で観測された「BRUSHFIRE」の感染配置パスおよび「ssl_read」にフックを設定する配置の構成パスが完全に合致している。
1.4.2. SPAWN Family Client
work/mnt/hgfs/Desktop/New folder/203.234.192.200_client.zipファイル内には、トンネリング接続スクリプト、SSHクライアントツール、暗号認証用などの証明書ファイルがアーカイブされている。同内包ファイルの readme.txtには、client.py および controller.pyを使用し、特定IPアドレス 203.234[.]192.200にSSH通信にて接続へ至る手順・詳細が記載されている。この接続先IPは、韓国のハンギョレ新聞社のIPアドレスであることが特定されている。

caption - readme.txt ファイル内容
client.pyは、ネットワークのプロキシ制御・迂回トンネル接続経路として機能する「SOCKS5プロキシー」を起動する役割があり、指定オプションごとの用途は以下の通りである。
caption - オプション別機能
client.pyには、TLSにおけるクライアントハッシュに相当する client_helloメッセージ、および暗号キー合意を行う client_key_exchangeメッセージの構文・構造テンプレートがあらかじめソース内に直接用意されている。通信時の挙動は以下の仕組みで動く。
client_hello
テンプレートの並び順で[11–15バイト目]の範囲に、[15–43バイト目](ランダム生成の28バイト)をハッシュしたCRC32算出の値を動的に埋め込んでC&Cへパケット送信を行う。
sessionid変数部分にランダム構成された32バイトデータを確保し、それを含んだメッセージを構築してパケット投下する。
client_key_exchange
暗号強度の高い premaster部分に256バイトのランダムバッファデータ、ハンドシェイク検証のための enc_handshake_msgに32バイトのランダムデータを設定し、これをパケットペイロードに挿入して転送を実行する。
client.pyに定義されている、初期(デフォルト)設定時の client_helloパケットの構造パターンは、UNC5221グループの侵害で確認されている「SPAWNMOLE」特有のマジックパケット(署名)パターンと完全に同一である。また、パケット構成時に client_hello側の15〜43バイト目にランダムで28バイトを発生させ、その値を元にしたCRC32計算値を11〜15バイト目に埋めてシリアライズする動作ロジックは、JPCertによる技術解析トピックで紹介・情報共有されている「SPAWNCHIMERA」の接続シーケンスパターンの特色とも一致する。
「SPAWNCHIMERA」や「SPAWNMOLE」は、同じくUNC5221が実行するIvanti製品へのハッキングにおいて利用された特徴的なインメモリアクティビティーツールであり、先述した「CVE-2025-0282」脆弱性を経て感染プロセスを起動していた背景を持っている。
controller.pyは、client.pyが確立したSOCKS5トンネル回線(プロキシ)を経由して、相手側SSHサーバー(ホスト)に相互接続し一連のC&C操作・制御を実施するための中継補助スクリプトである。

caption - sshサーバーと通信する controller.py
SPAWNMOLEはSSHの通信先待ち受けとなる「SPAWNSNAIL」とペアで稼働が確認されており、SPAWNCHIMERA自体もそれ単体でSSHのデーモンを立ち上げるポートオープン機構を有している。これらの点から、controller.pyは「SPAWNSNAIL」または「SPAWNCHIMERA」によって提供されるSSH待ち受けへのアクセス専用クライアントとして利用されていたものと見なされる。
1.4.3. ROOTROT Client
work/mnt/hgfs/Desktop/ivanti_control/main.pyは、引数でパラメータとして渡されたOSコマンドをベースに、Perlコードのスクリプト断片(スニペット)を毎回動的に作成し、結果をBase64変換で記述変換、そのデータを特定のクッキーフィールドに埋めてHTTP GETリクエストを送り出す司令ツールである。引数設定を介して作成されるPerlスクリプトパターンは以下の手順:
download {file_path}
{command}
上記の各Perlスクリプト断片は、ターゲット上でのコマンド実行結果をBase64で包み、それをHTMLのコメントアウト(コメントブロック <!-- -->)に隠蔽して出力・表示するステップが構成されている。レスポンスを受けた main.pyは、サーバーからの返信コンテンツの終端部分にある上記HTMLコメント情報を検索抽出し、Base64をデコードして実行結果の出力を戻す仕組みとなっている。

caption - リクエストを送信し、コメントタグの内容をデコードする関数
仕組みがPerlで書かれたWebシェルである点、クッキー内のBase64を読み解き evalで動的プログラムを実行している点、実行ログをBase64で丸めてコメントブロックとして吐き出している点などから、この main.py は過去に UNC5221によるAPT活動で検知されたWebシェル「ROOTROT」を遠隔操作するための攻撃者側クライアントツールであると推定される。
また、「ROOTROT」についても、前述のUNC5221によって実行されるIvanti Connect Secureの侵害プロセスと同様に悪用が観測されている。
1.5. フィッシング攻撃
1.5.1. Naver中間者(MitM)攻撃
work/mnt/hgfs/Desktop/New folder/vps2/Cipherishingディレクトリ配下に確認されたモジュールは、主に韓国ユーザーのNaver(ネイバー)ポータルサイトのアカウント窃取を狙った中間者攻撃(Man-in-the-Middle)を企図する構造ファイルである。特にこの、work/mnt/hgfs/Desktop/New folder/readme.txt内には、中国簡体字で書かれたシステムセットアップの案内・手法がメモされている。

caption - readme.txt ファイル内容
readme.txt ファイル記載のテキストの翻訳内容は以下の通りである。
work/mnt/hgfs/Desktop/New folder/vps2/Cipherishing/cipherginx.pyプログラムは、攻撃用のC&Cサーバー等でデーモンプロセスとして常駐稼働し、Naver純正サービスとアクセス標的ユーザーの間で暗号通信を中継・解読する「HTTPSリバースプロキシ」のように機能する。ターゲットユーザーが、サーバーのアドレスを中継してNaverポータルなどへログイン・サービス利用を行うと、認証ヘッダー、ログインセッションCookie、およびユーザーのアカウント・パスワード情報がテキストで抽出・記録され cookiesディレクトリに保存(ドロップ)される。生成される各ファイルルールは以下の仕様通り:
[nid_id].headers[nid_id].cookieaccounts.txt

caption - cipherginx.py による accounts.txt 生成ロジック
work/mnt/hgfs/Desktop/New folder/vps2/Cipherishing/naverconfig.py内には、Naverサービスで入力されるログイン資格情報を窃取・インターセプトするための悪意あるJavaScriptプログラムが埋め込まれており、対象が偽のログインページなどに遷移した際、正規サイトのスクリプトツリー構成をインジェクションして偽情報を割り込ませる仕組みとなっている。

caption - naverconfig.py アカウント情報窃取JavaScriptコード
このようにして窃取したログイン情報を利用して自動的にアクセスを行い、ターゲット側のNaver Webメール受送信箱、アドレス帳(連絡先)、プロフィールなどの個人情報をバックグラウンドでクローリング・抽出する各機能スクリプトが同一配下に保存されている。ファイル名と用途概要は以下のリストの通り:
caption - 各ファイル説明
1.5.2. Kakao(カカオ)ログイン認証フィッシング攻撃
vps/var/www/html/templates/kakao.htmlファイルは、韓国ポータルのカカオ(Kakao)サービスの認証ログインを模倣したフィッシング詐欺用HTMLテンプレートであり、vps/var/www/html/kakao-login.phpプログラムはカカオログイン後のポスト処理などを担当するサーバーサイト用ファイルである。この kakao-login.phpは、GETアクセスを検知した際に「ft」という名称のCookieの有無を評価し、これが検知されたケースにおいては「https://mail.daum.net」の正規ログインページ側へと即座にリダイレクト処理(遷移)させる。

caption - GETアクセス処理ロジック
Cookieに「ft」が含まれない場合のみ、フィッシング用のカカオログイン画面の表示を送り出し、ターゲットが情報をタイプしてログインボタンを押下すると、そのデータがフィッシングサイトへのPOSTリクエストとなって送信される。
POSTを受信すると、被害者が送信したアカウント認証データを log/password_log.txtにクリアテキストで追加保存し、以降のリダイレクト自動移行のためにCookieの「ft」値を「no」に書き換える。

caption - POSTアクセス処理ロジック
password_log.txt内にはすでに14件のアカウント・パスワード蓄積データが格納されていたが、そのうち実際の活動と見られる有意な情報1件を除いた他のログ値は、攻撃者自身が動作デバッグの際にタイプしたものと見られるテストデータ(例: 123123, ttttt222, qwqwqw111 等)であった。
1.5.3. フィッシングメール攻撃
vps/var/www/htmlディレクトリ配下には、ターゲットへの標的型メール(ルアーメール)の構成・生成から、侵害ユーザーの管理を行うためのアタックインフラ用Webサーバー関連プログラムが保存されている。
これらアタックパネル機能を持つプログラム群は、システムへのアクセス状況をログ保存する仕組みを持ち、後述する generator.phpファイルを除いては、すべて以下の定型フォーマットで各ログを蓄積する:
ログファイルは、作成タイミングの日付・テキストに基づき、自動的に拡張子(.txt)の後ろに日時フォーマットが付与される規則で生成される。
generator.php
vps/var/www/html/generator.phpは、フィッシングに用いる電子メールを容易に量産するためのメールジェネレータープログラムである。ユーザーの「HnoplYTfPX」Cookieおよび接続要求方式(メソッド)に準じて動作を切り替える構成。詳細は以下の仕様を参照:
caption - 実行ロジック
メールジェネレーター構成時の入力フォーム指定要素は以下のリストの通り:
caption - フィッシングメール作成フォームの入力項目
フィッシングメールの構築が完了した画面で攻撃者パネルに出力・表示されるステータスは以下の通りである。
caption - 出力情報
HTML文を含めた内容が contentにロードされると見られ、メールが自動出力されると log/generator_log.txtに対して以下の構造ルールで履歴が生成される:
また、送り付けられたターゲット側がこの偽装メールを自分のメールソフト・メーラー等で開封した際、リモート画像の自動読み込み設定等がオンになっている環境(HTMLメールの展開時など)であれば、それを足がかりに request.phpがロードをトリガーする(トラッキングウェブバグの仕組み)。
request.php
vps/var/www/html/request.phpは、標的側のユーザーがフィッシングメールを「開封・閲覧したか否か」を攻撃管理パネル側にレポート蓄積するためのプログラムである。読み込みをトリガーした接続ログは、自動的に log/request_log.txtに格納される。
URI末尾に「.png」が格納されている場合、検証を欺くかのようにサイズのない透過色画像をロードし、そのほかの接続時には対象端末の詳細(環境・ブラウザの種類など)を収集抽出するように設計されたトラッキング用JavaScriptコードを自動で差し込んで実行する。この時に読み込まれるプログラムと収集される機微情報は以下の通りとなる:
caption - JavaScriptファイルおよび収集情報
キャプチャ・抽出された環境変数は results変数として構築され、最終的にバックグラウンドリクエストの形式で response.php?i={b64encode(email)}&{results}に自動的にコールバック(送信)される。
response.php
vps/var/www/html/response.phpは、トラッキング通信を受けた際にターゲット端末の接続元IP、端末ブラウザ識別文字列(User-Agent)、言語システムロケールなどを検証・識別し、あらかじめ作成されたフィルタリングルールを満たす場合のみ、該当のパラメーター「i」のBase64エンコードデータをデコードした上で log/response_log.txtに開封確認として最終出力する役割を持つ。評価に使われる接続チェックは以下のルールに基づいて行われる:
端末ロケール(locale)が、ホワイトリストに合致している場合
IPアドレス、およびブラウザ識別文字列(User-Agent)がブラックリスト(Bot、除外対象リスト等)に合致しない場合
検証ロケール(locale)の許可ホワイトリストは以下の通り:
us
jp
ja
kr
ko
排除対象となるブラウザ識別文字列(User-Agent)ブラックリスト(主にセキュリティスキャンやBot等の巡回検知による偽陽性を省くため):
bot
spider
crawl
trend
symantec
virus
spam
secure
除外対象となるIPアドレスのブラックリスト範囲(セキュリティ検査事業者などの既知IPレンジなど):
caption - ipブラックリスト
フィッシングで運用されたファイル構成、残されたログ、および実際に記録されている侵害検知ログと被害ログを統合・分析してまとめた結果は以下の表に図示する通り:
caption - 全ログおよび実際の被害ログ
1.6. Yonsei(延世)大学を標的とした電子メール資格情報窃取・転送スクリプト
vps/var/www/html/js/chks.jsファイルは、韓国の延世(ヨンセ)大学の公式Webメールの認証APIサービス・エンドポイント「https://mail.yonsei.ac.kr/common/json/agent.do」に対して裏でフッキング通信を試み、接続する教職員や学生のアカウント構成情報を抜き出した上で、ターゲットのメール設定内の「自動転送通知メールアドレス一覧」に、攻撃者自身が確保していると考えられるメール受取用メールボックス cimoon185@daum.net をユーザーに無断で埋め込んで自動転送されるよう追加変更する。

caption - chks.js 内の Forward(転送設定)関数
このようにしてアカウントを掌握した後、メールボックス内の「ent_{user}」および「TOTAL」カテゴリ階層を探索し、送受信日付が「2017-10-01」以降となる比較的新しいメールデータをバックグラウンドで一括窃取し、その中身を攻撃者側の収集サーバーである https://service.navers.org/emuy.php?i={user}にアップロード送信(転出)する処理を行う。
2. 奪取されたデータの分析
本章では、攻撃者のVMware VMダンプファイルから確認された資料のうち、一般的には入手不可能または困難なデータを「奪取資料」と定義し、これを整理した内容を扱う。
2.1. 外交部 AyersRock Mail
work/mnt/hgfs/Desktop/mofa.go.kr.7z ファイル内には、外交部内部で使用されたと推定される AyersRock Mail ソースコードが存在する。AyersRock Mailは、(株)ナラビジョン(Nara Vision)が2016年にKebi Mailをベースに開発したウェブメールソリューションである。
解凍した後に確認されたディレクトリ構造が kebi-batch、kebi-cor、kebi-web-mail などのKebi系列モジュールで構成されており、各ディレクトリ配下にある app-*.xml ファイルの mail 要素の host 値から mofa.go.kr を確認できる。

caption - app-*.xml mail 要素の host 値
mofa.go.kr/kebi-web-parent/mail/document/info.txt ファイルには、内部開発サーバー、DB、テストサーバーなどの複数のアカウント情報やメモが書き込まれている。

caption - info.txt ファイルの内容
mofa.go.kr/kebi-web-parent/mail/document/worklist.txt ファイルには、作業日程と作業リストに関するメモが書き込まれている。

caption - worklist.txt ファイルの内容
Gitリポジトリに関連する .gitignore、.gitmodules ファイルが存在し、開発元が作成したと推定される info.txt、worklist.txt ファイルが存在することから、mofa.go.kr.7z は開発元のGitリポジトリから奪取したファイルを圧縮したものと見られる。ただし .git フォルダーは存在しないため、リポジトリのタイプは不明である。
2.2. シキュアキー(SecureKey) APPM & iRASS
2.2.1. APPM & iRASS サーバー管理プログラム
work/mnt/hgfs/Desktop/111/home/home パスに appm、irass ディレクトリが存在し、それぞれ APPM、iRASS サーバー管理が目的と推定されるプログラムが存在する。
APPM
work/mnt/hgfs/Desktop/111/home/home/appm ディレクトリ内には、appm_master バイナリと暗号化関連モジュールがある crypto ディレクトリが存在する。appm_masterは実行プロセスにおいて複数のバイナリと設定ファイルの存在を確認するが、公開された資料では多数のファイルが存在しない。主要な設定ファイルとしてはクラウド設定ファイル、復号された appmkey ファイルがあるが、存在しない。

caption - 公開されたファイルの一覧
iRASS
work/mnt/hgfs/Desktop/111/home/home/irass/bin ディレクトリ内には、irass_master バイナリを含め irass_db、irass_admin、irass_rdp などの複数のバイナリが存在する。すべて iRASS 関連のバイナリである。特に history.txt に「KB国民銀行」のキーワードが存在し、開発元が作成した問題およびパッチのメモファイルと推定される。

caption - history.txt ファイルの内容
2.3. 行政安全部 GPKISecureWebX
2.3.1. GPKISecureWebX ソースコード
work/mnt/hgfs/Desktop/111/GPKISecureWebX ディレクトリ内には、ドリームセキュリティ(Dream Security)が開発した公認認証書関連セキュリティプログラムである GPKISecureWebX のソースコードが存在する。
Visual Studio Build Log ファイルである work/mnt/hgfs/Desktop/111/GPKISecureWebX/GPKISecureWebX.plg から「01_행자부 웹보안API (01_行自部ウェブセキュリティAPI)」が確認でき、「行自部」は現在「行政安全部」と呼ばれていることから、これが行政安全部 GPKISecureWebX に関連していることがわかる。

caption - GPKISecureWebX.plg ファイルの内容
さらに、work/mnt/hgfs/Desktop/111/GPKISecureWebX ディレクトリを圧縮した work/mnt/hgfs/Desktop/111/1.rar ファイルが存在する。
2.3.2. GPKISecureWeb パッケージ
work/mnt/hgfs/Desktop/111/gpki.7z ファイル内に GPKI API、GPKISecureWebX、setup ディレクトリが存在する。GPKI標準APIに関するマニュアルと、複数のキー、認証書ファイルが存在する。
特に gpki/gpkisecureweb/log ディレクトリに、2017年12月から2020年4月までの認証書検証ログファイルが存在する。

caption - ログファイルの一部のデータ
2.3.3. GPKISecureWeb 文書およびモジュールソースコード
work/mnt/hgfs/Desktop/111/2/01_행자부 웹보안API(ORG) - 권유미 인수 ディレクトリ内には、引き継ぎのための GPKISecureWeb 関連文書ファイルと、GPKIInstaller、GPKICertManager などの全体モジュールに関するソースコードが存在する。
確認された文書ファイルは以下の通りである。
work/mnt/hgfs/Desktop/111/2/01_행자부 웹보안API(ORG) - 권유미 인수/웹용 표준보안API_매뉴얼(유선).chmwork/mnt/hgfs/Desktop/111/2/01_행자부 웹보안API(ORG) - 권유미 인수/설계문서/SSA_AO_AD_WT_002_웹보안 프로토콜설계서_Ver1.0_.docwork/mnt/hgfs/Desktop/111/2/01_행자부 웹보안API(ORG) - 권유미 인수/행자부 웹보안API 인수인계.doc
文書ファイルのプロパティを確認すると、かなり前に作成されたものであることがわかる。

caption - docファイルの文書プロパティ
work/mnt/hgfs/Desktop/111/2/01_행자부 웹보안API(ORG) - 권유미 인수/02_src/ReadMe.txt に全体モジュールに関する説明が存在する。

caption - ReadMe.txt ファイルの内容
2.4. GPKI 認証書および秘密鍵ファイル
work/home/user/Downloads/cert/extracted-key-20200512 ディレクトリ内には、認証書と秘密鍵ファイルが2475個存在する。Subject から法制処、政府傘下機関および委員会などの様々な情報を確認できたが、攻撃者がこれをどのように収集したかは不明である。

caption - work/home/user/Downloads/cert/extracted-key-20200512 ディレクトリのファイル一覧
2.5. オンナラ(On-Nara)ログイン自動化スクリプト
work/mnt/hgfs/Desktop/111/onnara_auto ディレクトリ内には、大韓民国政府で使用されている公務員用サービス「オンナラ」のログイン自動化スクリプトが存在する。client_main.py にオンナラサービスのアカウントID、組織ID、サブドメインがハードコーディングされている。

caption - client_main.py main 関数
ログイン方式は、入力された情報を基に work/mnt/hgfs/Desktop/111/onnara_auto/script に存在する onnaraSSO.jar ファイルを実行し、SSOトークン値を生成する。

caption - onnara_sso.py generate_L1 関数
onnaraSSO.jar は入力オプションに応じて、ARIA または DES アルゴリズムで文字列を暗号化・復号する。実行形式は以下の通りである。
onnaraSSO.jar <文字列> <0:DES | 1:ARIA> <0:暗号化 | 1:復号>
また、ARIA と DES に使用されるキーはすべてハードコーディングされている。
HostとVMware間でファイルを移動した形跡から、攻撃者が onnara_sso_test.py ファイルに出力結果をコメントとして残していることが確認できる。

caption - work/home/user/.cache/vmware/drag_and_drop/Z3INst/onnara/onnara_auto/onnara_sso_test.py ファイルデータ
work/home/user/.cache/vmware/drag_and_drop/Z3INst/onnara ディレクトリ内には onnara9-onnara4-SSO-login.saz ファイルが存在し、これを解凍すると実際のHTTPリクエストとレスポンスを確認することができる。

caption - onnara9-onnara4-SSO-login.saz/raw/001_c.txt ファイルデータ
3. 攻撃者およびシステム情報
本章では、公開された資料のうち、攻撃者とシステム環境について分析した内容を扱う。
3.1. システム情報
3.1.1. deepin
VMware workstationにはdeepinがインストールされていた。deepinは中国国外で人気のあるディストリビューションではなく、中国企業主導で開発され、中国市場を中心に配布・支援されているディストリビューションである。
独自に検証可能なユーザー数や分布に関するデータは知られていないが、deepinは2022-12にユーザー数が3M以上であると報告し、2024-09には「5.4M以上のユーザーのうち、ほぼ3Mが中国国外のユーザーである」と報告した。しかし、外部の検証がないため、数値の現実性には疑問がある。
Linuxユーザーの特性上、テレメトリやアンケートなどのデータ収集に対する拒否感が強く、デスクトップでは商用ソフトウェアへの需要や市場が小さいため、市場調査も活発ではない。したがって、Linuxディストリビューションのユーザー数に関する統計資料を得ることは難しい。しかし、公開された資料によって、各ディストリビューションの大まかな人気を知ることができる。このうち、各ディストリビューションの検索数、Stack Overflow Developer Survey、および各ディストリビューションの統計資料をまとめた。
caption - ディストリビューションの統計資料
上記の指標を総合すると、deepinの中国国外のユーザー数は約300万人に達していないとみられる。独自の検証がないことを考慮すると、数千人規模にとどまる可能性が相対的に高い。また、中国国外でのこの評判は概して否定的である。さらに、以下のような内容も知られている。
ポリシー・規制:EULAおよび個人情報保護方針に、情報収集の権限と中華人民共和国法律への準拠が明記されている。
データ収集を巡る議論の履歴:過去にApp StoreでCNZZ Analyticsを使用して議論を呼び、DeepinはGoogle Analyticsと同様であると弁明した上で収集の中止を告知したが、その後Umeng+ Analyticsを再び追加した。
セキュリティ:deepin desktop environmentは、繰り返されるセキュリティ上の問題やセキュリティ検証を回避しようとする手法が指摘され、2025-05にOpenSUSEから削除された。
総合すると、中国国外でdeepinを選択または使用する確率は極めて低いと判断される。
3.1.2. IME
VMware workstationには、複数の中国語用IMEがインストール、設定された痕跡が確認された。deepinの特性上、中国市場に合わせた基本構成が含まれており、デフォルトパッケージとしてfcitx-pinyin、fcitx-sunpinyin、fcitx-table-wubiがインストールされている。インストール言語が英語の場合はデフォルトIMEが非活性化され、中国語の場合はwubi、shuangpin、pinyin、sunpinyinが活性化されることが確認された。

caption - デフォルトでインストールされているfcitxパッケージ一覧
追加インストールの内訳は以下の通りである。
fcitxプラグイン:huayupy、wbpy、rime、iflyimeの追加インストールの痕跡が確認され、活性化されている入力方式はwbpy、pinyinである。ibusプラグイン:rimeの追加インストールおよび使用の痕跡が確認された。SogouPYの追加設定の痕跡が存在する。

caption - work/home/user/.config/fcitx/profileEnabledIMList diff結果
3.1.3. etc
インストールおよびロケール情報
work/home/user/.config配下の設定のロケールが英語で表記されているため、英語版の環境からインストールされたとみられる。work/home/user/.config/locale.confファイルの内容は以下の通りである。
caption - work/home/user/.config/locale.conf ファイルの内容
しかし、work/var/log/{access.log*,vmware-network.*.log}ファイルのデータは韓国語で記録されている。

caption - work/var/log/vmware-network.1.log ファイルの内容
deepinの設定変更および痕跡
work/home/user/.config/deepin/dde-desktop/dde-desktop.confファイルにProtonVPN OpenVPNのプロファイルとみられるファイルが存在するが、ダンプには含まれていない。

caption - work/home/user/.config/deepin/dde-desktop/dde-desktop.conf ファイルの内容
work/home/user/.config/deepin/dde-file-manager/dde-file-manager.obtusely.jsonファイルに、個人情報を含むファイル名や、リモート・共有パスへのアクセス履歴が存在する。例は以下の通りである。
standard://downloads/cert/gpki_cert/*
file:///mnt/hgfs/share_data/GitHack/www.caa.org.tw/*
ftp:host=192.168.50.1:21212
work/home/user/.config/deepin/dcc-weather-plugin.confファイルでLocationがWaterlooに設定されている。

caption - work/home/user/.config/deepin/dcc-weather-plugin.conf ファイルの内容
この他に、その他のアプリケーションで確認された痕跡は以下の通りである。
work/home/user/.config/filezilla/recentservers.xml: ftp.fu-berlin.deFileZillaを使用して公開FTPミラーに接続
work/home/user/.config/Foxit Software/Foxit Reader.conf: tmp/kclee/hiaei84@gmail.com.pst_pst_*.msgファイルパスから確認されたメールアドレス
3.2. ブラウザ情報
work/home/user配下の複数のブラウザプロファイルをすべて分析した結果、主に使用されていたプロファイルはwork/home/user/.config/google-chrome/Defaultであることが確認された。全体のブラウザプロファイルと、確認されたタイムスタンプの最小値・最大値は、以下の表の通りである。
caption - 活動範囲
work/home/user/.config/google-chrome/Defaultプロファイルの最初の記録は2020-12-02 01:56:37.844であり、その後2025-03-18 04:04:20.873から2025-05-28 07:11:01.791までの訪問記録が存在する。その他のプロファイルは、作成されたのみか、短期間の使用痕跡にとどまった。
3.2.1. language
work/home/user/.config/google-chrome/Default/Preferencesの記録が、work/home/user/.config/google-chrome/Default/.com.google.Chrome.*に残っていた。以下の表を参照されたい。
caption - last_engagement_time 情報
変更のタイムラインは以下の通りである。
2020-04-23T10:28:01.605486 以前:intl.*_languagesに英語+中国語を設定、中国語の翻訳をブロック(translate_blocked_languages)。
2021-04-08T03:15:41.989060 以前:韓国語を追加、韓国語の翻訳をブロック。
2025-04-10T16:13:27.859136 以前:英語の翻訳ブロックを追加。
翻訳の承諾は主に英語と韓国語で発生しており、中国語の承諾履歴はない。翻訳結果の言語は中国語として記録された。
主に閲覧されたページは英語、中国語のページであり、2021-04-08までは韓国語のサイトにも訪問していた。2025-04-10以降は、韓国語のサイトへの訪問はほとんど存在しない。
3.2.2. history
work/home/user/.config/google-chrome/Defaultプロファイルは、業務および業務外の用途で使用されていた。脆弱性やマルウェアなど、業務に関連する記録の他、フォーラムなどを利用した記録が存在する。
Cobalt Strikeに関連する訪問記録は以下の表の通りである。
caption - Cobalt Strike関連の訪問記録
rootkitに関連する訪問記録は以下の表の通りである。
caption - rootkit関連の訪問記録
translate.google.*の訪問記録から、主に英語、韓国語のドキュメント、docs、LLMの応答などを中国語に翻訳していた。翻訳内容の一部は以下の通りである。

caption - Historyから確認されたGoogle翻訳
caption - 翻訳対象データ
訪問記録の中で、特に中国のフォーラムである「acfun.cn/v/list63/index.htm」を頻繁に訪れていた。acfun.cnの最初の記録は2021-05-19 03:08:57.000であり、訪問記録が存在する2025-03-18 08:00:42.949〜2025-05-28 07:11:01.791の間に232回、全体のacfun.cn訪問記録は1,440回である。
検索エンジンの使用頻度は以下の表の通りである。google、duckduckgoに次いでbaiduを最も多く使用していたことがわかる。
caption - 検索エンジンの使用頻度
3.2.3. geolocation
work/home/user/.config/google-chrome/Local Stateの記録が、work/home/user/.config/google-chrome/.com.google.Chrome.*に残っていた。これらの記録によると、ChromeのVariationsServiceが位置をtw、hk、jk、sgの順に変更していった。詳細情報は以下の表を参照されたい。なお、variations_permanent_consistency_country、variations_countryはソースコードを分析して機能を確認した。
variations_permanent_consistency_country: https://source.chromium.org/chromium/chromium/src/+/main:components/variations/pref_names.cc;l=59variations_country: https://source.chromium.org/chromium/chromium/src/+/main:components/variations/pref_names.cc;l=22
caption - geolocation 情報
work/home/user/.mozilla/firefox/06yb5px0.default-release/saved-telemetry-pings/配下のevent pingの検索エンジン地域設定は、すべてHKである。
caption - 検索エンジンの地域設定情報
work/home/user/.thunderbird/*/.default-default/saved-telemetry-pingsディレクトリ内のファイルから、payload.info.timezoneOffsetを確認できる。
caption - payload.info.timezoneOffset 情報
work/home/user/.thunderbird/*/.default-default/saved-telemetry-pingsディレクトリ内のtimes.json、prefs.jsファイルから、それぞれfirstUseとcalendar.timezone.localを確認した。
caption - calendar.timezone.local 情報
ブラウザの閲覧履歴におけるGoogleの地域検出結果が、上記のデータを裏付けている。
2020-12-21T16:07:17.035527において、google.comのtitleが「Google 搜尋」である。
work/home/user/.mozilla/firefox/06yb5px0.default-release
2021-05-18 07:15:25.120において、google.comのtitleが「Google 検索」である。
work/home/user/.config/BraveSoftware/Brave-Browser/Default
2021-05-18 07:15:30.999において、google.comで「translate」を検索した後、検索結果を介してtranslate.google.co.jpに接続した。
work/home/user/.config/BraveSoftware/Brave-Browser/Default
2025-03-19 01:15:18.988において、google.comのtitleが「Google 搜索」である。
work/home/user/.config/google-chrome/Default
2025-03-27 04:52:26.132において、google.comで「translate」を検索した後、検索結果を介してtranslate.google.com.sgに接続した。
work/home/user/.config/google-chrome/Default
2025-05-13 05:08:47.578において、google.comで「google search」を検索した後、検索結果を介してgoogle.com.sgに接続した。
work/home/user/.config/google-chrome/Default
また、github.comのtitleも中国語にローカライズされているケースが多かった。
3.2.4. etc
work/home/user/.config/baidunetdiskパスに、BaiduNetdiskクライアントの設定ファイルが存在する。BaiduNetdiskは、百度網盤(中国系クラウド)ストレージ・同期クライアントである。

caption - baidunetdiskディレクトリ
work/home/user/.thunderbird/8inzqqf5.default-release/encrypted-openpgp-passphrase.txtファイルが存在することから、攻撃者は該当のプロファイルでopenpgpを使用していた。
work/home/user/.config/google-chrome/Default/Local Storageに、amiunique.orgの情報が保存されていることがわかる。amiunique.orgは、ブラウザフィンガープリントの統計的頻度を確認できるサイトである。この情報を確認した際に、確認された情報が保存される。
work/home/user/.thunderbird/8inzqqf5.default-release/session.jsonに、開いているウィンドウやタブの情報が記録されている。ファイルパスを解釈した結果は以下の通りである。
tos安装文件:tos installation fileメールのファイル名形式はmaildirのmailbox形式とみられ、
S=はファイルのサイズを表している。
すべての情報を総合すると、以下の通りである。
攻撃者は、一般的に中国国外では使用されないdeepinを使用している。
IMEのインストール痕跡から、複数の中国語用IMEのみがインストールされていることを確認した。
ブラウザの閲覧履歴から、中国のフォーラムに頻繁にアクセスしていることを確認した。
翻訳履歴から、韓国語→中国語、英語→中国語へ翻訳していることを確認した。中国語から他国の言語に翻訳した履歴は存在しない。
システム情報から一部の韓国語が確認されたが、韓国人であるとは考えにくく、攻撃者は中国語に堪能であり、中国のエコシステム(サービスおよびソフトウェア)に精通しているとみられる。
4. 過去の国内侵害事故との関連性
4.1. インシデントの概要
当社は2022年に国内金融機関のインシデント調査を実施した。事案は、ローン申請プロセスで顧客情報を入力した後、数日以内に他社から営業の連絡があり、これを異常の兆候と認識した顧客企業が当社にインシデント調査を依頼したものである。
初期のサーバーフォレンジックプロセスでは、マルウェアの実行ファイルは確認されなかったが、ネットワークパケットダンプにおいてSMTP(25/tcp)セッションのペイロードから、HTTPヘッダー・ボディデータと暗号化されたデータが共に含まれているパケットが確認された。パターンベースのキー推測を通じて暗号化キーを特定し、復号に成功した結果、マルウェアの実行コマンドを確認することができた。実際に復号されたデータは以下の通りである。
/etc/[マルウェアパス]/[インフォスティーラーローダー] -jar /etc/[マルウェアパス]/[インフォスティーラー] -url [DB情報] -u [アカウントID] -p [アカウントパスワード] -q[日付および時刻データ] -qSTA MBDE -d "0:0, 1:1, 2:1, 5:0" -de "0"
exit
マルウェアパスからインフォスティーラーとバックドアを確認し、その後、ディスクイメージの分析によってルートキットの存在を確認した。
4.2. マルウェアの関連性
攻撃に使用されたインフォスティーラーは、攻撃者が望む情報の窃取に合わせてカスタマイズされて作成されており、バックドアとルートキットは、その構成および動作方式が攻撃者のVMwareダンプファイル内の tomcat20220420_rootkit ディレクトリで確認されたバックドア、ルートキットと一致している。

caption - 左) master.c(バックドア) main関数のソースコード、右) インシデント当時に確保したバックドア main関数の擬似コード

caption - 左) main.c(ルートキット) init関数のソースコード、右) インシデント当時に確保したルートキット init_module関数の擬似コード
ビルド時に config.sh ファイルに従って決定されるマジックパケット、ルートキット名、バックドア名などは異なるが、通信データのxorキー、AESキー、ivなど、多様な変数値が同一である。
4.3. 属性分析の根拠
当時は、バックドアとルートキットに関する公開された情報がなく、ルートキットがadore-ngを参考にして作成されたという点以外には特定されなかった。また、コードの類似性や攻撃手法だけでは、特定の攻撃グループに帰属させるには限界があった。しかし、「戦術・技術・手順(TTP)」に基づき、北朝鮮のAPTグループではないという結論に至った。主な根拠は以下の通りである。
北朝鮮のAPTグループは主に情報収集や資産窃取の傾向が強いのに対し、本事案は外部サーバーから内部サーバーまで侵入してDBサーバーの顧客情報を窃取し、ボイスフィッシング(電話詐欺)に活用された形跡が中心であった。
初期侵入もスピアフィッシングやソーシャルエンジニアリング攻撃の手法ではなく、Webサービスの脆弱性が利用された。これは、北朝鮮のAPTグループが主に使用する初期侵入手法とは異なる。また、Webサービスの脆弱性を利用して乗っ取ったとしても、C&Cサーバーとして活用しながら内部侵入まで行うケースは稀である。
公開された情報の中で、Linuxシステムを対象に北朝鮮のAPTグループがルートキットとバックドアを攻撃に活用した履歴は存在しない。
その後、2022年6月にavastがこのルートキットをsyslogkと命名してレポートを公開したが、実環境(In the Wild)で確認されたという事実が明らかにされたのみで、依然として攻撃の背後に関する根拠は不足していた。
しかし、今回公開された攻撃者のVMwareダンプから バックドアとルートキットのオリジナルソースコード が確認され、これは攻撃の背後を推定できる有力な根拠であると判断される。また、ディレクトリ名もインシデント発生時期と類似している。
したがって、APT Down - The North Korea Files レポートで言及された攻撃者が、2022年の国内金融機関インシデントの背後にある有力な攻撃主体であると判断される。
最後に、バックドアとルートキットは2025年版が存在することから、該当のマルウェア群は2022年から攻撃者によって継続的に使用されており、2022年の国内金融機関への攻撃事例以外にも、攻撃者が追加の攻撃を実行してきた可能性が高いと考えられる。これに伴い、感染の有無の確認方法を "7. syslogk rootkit 感染の有無の確認方法" で説明する。
5. 攻撃の背後関係の推定および根拠
APT Down - The North Korea Files レポートの攻撃背後は、中国の UNC5221 グループに関連していると推定される。判断の根拠については、以下で詳しく説明する。
5.1. Kimsuky
5.1.1. Operation Covert Stalker
攻撃者の VMware VM ダンプファイルのうち、Naver フィッシングに関連するファイル(work/mnt/hgfs/Desktop/New folder/default-ssl.conf)から、nid-security[.]com ドメインを確認した。該当ドメインは2024年11月5日に、AhnLab Operation Covert Stalker レポートで言及された IP(27.255[.]80.170)と接続された履歴があり、この IP は work/mnt/hgfs/Desktop/New folder/readme.txt で確認できる。
readme.txt を見ると、IP(27.255[.]80.170)を「フィッシング VPS アドレス」に変更するように指示されていることがわかる。フィッシング VPS サーバーの IP を設定するファイル(work/mnt/hgfs/Desktop/New folder/forward.conf)では、IP が 45.133[.]194.88 に設定されている。
現在、nid-security[.]com ドメインの IP は 45.133[.]194.126 であり、work/mnt/hgfs/Desktop/New folder/forward.con で確認した IP(45.133[.]194.88)と同じ帯域である。このようにインフラ上の接点は存在するが、これ以外に攻撃者が Kimsuky と関連していると判断するには根拠が不十分であると考えられる。
5.1.2. GPKI Stolen Certificates
攻撃者の VMware VM ダンプファイルから、多数の GPKI 証明書が確認された。Kimsuky の Troll Stealer に GPKI 証明書の窃取機能が存在することは知られているが、攻撃者がどのように GPKI 証明書を窃取したのかは確認されておらず、Troll Stealer に関連するファイルも発見されなかった。したがって、Kimsuky との関連性を判断するには根拠が不十分であると考えられる。
5.1.3. Similar Targets
攻撃者の VMware VM ダンプファイルのうち、Naver フィッシングに関連するファイル(/work/mnt/hgfs/Desktop/New folder/htdocs/generator.php)から、nid[.]navermails[.]com ドメインが確認された。該当ドメインはAhnLab が作成したレポートで Naver フィッシングドメインとして言及されているが、Kimsuky に関する内容は確認できない。したがって、根拠が不十分であると判断した。
5.2. APT41 & UNC3886
5.2.1. reptile rootkit 関連性
reptile rootkit は、APT41 および UNC3886 グループが攻撃に使用した履歴が報告されている。
攻撃者の VMware ダンプファイルから確認された syslogk(tomcat*_rootkit)と reptile rootkit の共通点は以下の通りである。
関数フッキングのために使用するライブラリが同一である。
一部の関数が類似したコードを持つ。
port knocking 方式でバックドアを実行する。
syslogk と reptile rootkit の間に関連性は存在するものの、reptile rootkit はオープンソースであり、該当指標のみで特定の APT との関連性を判断するには無理があると判断した。実際に syslogk は、reptile rootkit のほかに KoviD rootkit のソースコードがそのまま使用されるなど、多様なオープンソースを参考にした痕跡が存在する。したがって、APT41 や UNC3886 に帰属させるには根拠が不十分であると考えられる。
5.2.3. TinyShell 関連性
UNC3886 グループが攻撃によく使用することで知られる TinyShell のソースコードが、work/mnt/hgfs/share_data/backdoor/20220812/SSS ディレクトリに存在する。しかし、Google から報告された UNC3886 の TinyShell ベースのバックドアは AES、HMAC、または RC4 で暗号化された通信を行うのに対し、確認された TinyShell ソースコードは AES と SHA1 で暗号化された通信を行う。通信方法に差異があるため、関連性の根拠としては不十分であると判断した。
5.3. UNC5221
5.3.1. CVE-2025-0282, BRUSHFIRE
CVE-2025-0282 は Ivanti Connect Secure の RCE 脆弱性であり、UNC5221 がこれを悪用してマルウェアを配布した状況が報告されている。攻撃者のファイルのうち、該当脆弱性を悪用してマルウェアを配布する Python スクリプトが6件確認されており、スクリップトから流布されるマルウェアは、UNC5221 の攻撃で確認された BrushFire であると識別された。
同一の脆弱性の悪用と同一マルウェアの流布状況を根拠に、UNC5221 との関連性が高いと判断した。
5.3.2. SPAWN Family
SPAWN Family は UNC5221 が頻繁に使用するマルウェアであり、work/mnt/hgfs/Desktop/New folder/203.234.192.200_client.zip ファイル内で SPAWN Family との関連指標が確認された。関連性が確認された SPAWN Family は、SPAWNMOLE、SPAWNSNAIL、SPAWNCHIMERA である。
client.py に定義された client_hello の値は、その後のコードで自動的に変更されるが、初期値はUNC5221 の攻撃で使用された SPAWNMOLE のマジックパケットと一致する。変更された client_hello の値は、JPCERT のブログで報告された SpawnChimera のマジックパケットの説明と類似していることが確認された。SPAWNCHIMERA マルウェアは、SPAWNMOLE と同様に UNC5221 の攻撃に使用されたマルウェアであり、前述した CVE-2025-0282 脆弱性を介して流布されたマルウェアである。
controller.py は、client.py が駆動した SOCKS5 プロキシを介して SSH サーバーに接続するクライアントスクリプトであり、SPAWNSNAIL または SPAWNCHIMERA のクライアントプログラムであると推定される。
したがって、SPAWN Family 系列のマルウェアが多数確認され、client_hello の初期値および変更値がそれぞれ SPAWNMOLE、SPAWNCHIMERA のマジックパケットの特性と一致・類似している点、また SPAWN Family 系列のマルウェアが UNC5221 の代表的なマルウェアであるという点を根拠に、UNC5221 との関連性が高いと判断した。
5.3.3. ROOTROT
ROOTROT は、UNC5221 の攻撃で確認されたウェブシェルである。Perl で記述されており、クッキーの特定の値を base64 でデコードして eval で実行する。実行結果は HTML コメントの形式で HTTP レスポンスの最後に挿入され、ユーザーに送信される。攻撃者のファイルのうち、ROOTROT のクライアントと推定されるスクリプト /work/mnt/hgfs/Desktop/ivanti_control/main.py が確認された。該当スクリプトは、与えられたコマンドを実行するように作成された Perl スクリプトを base64 でエンコードした後、DSPSALPREF クッキー値として設定して HTTP GET リクエストを送信する。これは、クッキー値をデコードして Perl で実行する ROOTROT のクライアントの動作と正確に一致する。
また、main.py は GET レスポンスの最後のコメントを base64 でデコードしてユーザーに表示するが、これはウェブシェルの実行結果をユーザーに伝達するための ROOTROT クライアントの標準的な動作と一致する。これらの情報を根拠に、UNC5221 との関連性が高いと判断した。
しかし、UNC5221 関連のマルウェアを、攻撃者が共有されて使用した可能性もある。
マルウェアおよび攻撃ガイド
Naver の中間者攻撃に関連するディレクトリから、中国語で攻撃環境の構築について記述された readme.txt ファイルが確認された。
work/mnt/hgfs/share_data/backdoorディレクトリ配下にも、中国語で作成された readme.txt ファイルと、1.ko 图文编译 .doc (1.ko 画像とテキストの編集 .doc)、技术说明书 - 22.docx (技術説明書 - 22.docx) ファイルが存在する。しかし、未完成である Cobalt Strike Beacon や、攻撃者が過去から使用していたと見られる syslogk root は、機能テストとデバッグのためのロジックは存在するものの、使用方法がどこにも記述されていない。
"contact" キーワードが言及されたマルウェア
CVE-2025-0282 exploit 関連マルウェアの detect_version で
This version may exist vul, Please contact us to check.という文字列を出力していることがわかり、exp1_admin.py でもこれを確認できる。これは、攻撃者が CVE-2025-0282 exploit 関連のファイルを、他の攻撃者や組織内の誰かから共有された可能性を示唆している。
最終的に、公開された資料を分析した結果、攻撃者は中国語に慣れており、中国のソフトウェア、コミュニティ、サービスなどを利用している。攻撃者が使用している OS もまた、中国で開発され、中国人以外にはあまり使用されていないことで知られる deepin OS であることを根拠に、攻撃者は中国人であると推定される。また、UNC5221 の攻撃に関連するマルウェアが多数確認された点から、UNC5221 グループと関連があるものと見られる。
6. おわりに
本レポートは、APT Down - The North Korea Files レポートと公開された資料に基づいて、詳細に分析した内容をまとめたものである。
特に公開された資料は、一般的には入手が困難な攻撃者の実際の環境(VMware VM、VPS)のダンプファイルであり、攻撃者の活動を具体的に調査できるため、大きな助けとなった。
公開された資料には、韓国国内を標的にした攻撃の痕跡と、奪取されたと見られる韓国の企業および機関に関連する資料が多数存在する。特に攻撃者のVMおよびホストで確認された tomcat*_rootkit ディレクトリのルートキット、バックドアのソースコードは、2022年の韓国国内の金融機関におけるインシデントで採取されたマルウェアのソースコードであることを確認した。
ルートキットとバックドアは、2022年バージョンの他に2025年バージョンも存在しており、これは攻撃者が継続的にアップグレードしながら長期にわたって使用してきたことを示唆している。2022年にルートキットとバックドアを使用した実際の攻撃事例が確認されているが、該当するマルウェアは検知が困難であり、感染の兆候を容易に知ることができないため、少なくとも2022年から2025年までに識別されていない追加の攻撃事例が存在するものと見られる。これに伴い、感染のチェック手順を「7. syslogk rootkit 感染有無のチェック方法」にまとめた。
攻撃者は北朝鮮の攻撃グループ Kimsuy ではなく、UNC5221 グループと関連がある中国人であると判断した。攻撃の背後を確信できる根拠は確認されていないが、多数のマルウェア関連ファイルから中国語が確認され、中国のソフトウェア、コミュニティ、サービスを利用した形跡があり、韓国語や英語を中国語に翻訳して確認した痕跡が存在する。そして、Ivanti Connect Secure 関連のマルウェアは、UNC5221 グループが攻撃に使用したマルウェアと一致する部分が多数確認された。
総合的に見て、攻撃者は過去から現在まで韓国国内を継続的に標的にして攻撃を仕掛けてきており、公開資料からはルートキット、1-Day エクスプロイトの悪用、そして韓国国内の企業・機関の資料も多数確認された。これらの状況を総合すると、攻撃者は高度な攻撃能力とマルウェア開発能力を保有しており、実際に攻撃に成功して資料の奪取にまで至った状況が確認された。
7. syslogk rootkit 感染有無のチェック方法
2022年のインシデント調査当時、syslogkルートキットは/etc/init.dに存在するスクリプトによって、ブート時に自動的にロードされていた。公開された資料を通じて、syslogkルートキットをビルドする際に、インストールスクリプト(install.sh)と削除スクリプト(del.sh)、そしてローダースクリプト(shservice)が生成されることが確認できた。このとき生成されるファイルのうち、ローダースクリプト(shservice)は、2022年のインシデント調査当時に確認したスクリプトと同一である。

caption - shserviceファイルの内容
したがって、config.shで生成されたスクリプトとマルウェアをベースに、感染の有無を調査する。
すべてのスクリプトは管理者アカウントまたは権限で実行する必要があり、2022、2025ルートキットバックドアの両方を検知できる。
7.1. /etc/init.dの隠しファイル調査
/etc/init.dにルートキットをブートするたびにロードするスクリプトが存在するか確認する。スクリプトのファイル名はルートキットによって隠蔽される文字列であるため、一般的には検知できない。
したがって、/etc/init.dディレクトリが占めるディスク容量と、ディレクトリ内で確認可能なすべてのファイルが占めるディスク容量の総和を比較し、隠しファイルが存在するかどうかを確認するスクリプトを作成した。スクリプトは付録 A. check-initd.shとして添付した。
7.2. syslogk rootkitの調査
ローダースクリプトに記述された文字列をベースに、syslogkルートキットのパスを抽出する。dumpを使用して/etc/init.dディレクトリのダンプファイルを生成するため、dumpがインストールされている必要がある。
sudo apt install dump
ダンプファイルから一致する文字列が見つかると、ルートキットのパスを抽出し、モジュールをアンロードするために隠蔽を解除するデータを探索する。データが見つかると、ルートキットに書き込んで隠蔽を解除し、アンロードする。
スクリプトは付録 B. find-syslogk.py、付録 C. find-syslogk.shとして添付した。
付録 B. find-syslogk.pyはPythonバージョン3.7以上を使用する。
dumpは一部のシステムで動作しないことがあるため、付録 A. check-initd.shで隠しファイルの存在を確認した場合は、ディスクイメージをダンプするか、分析ツールにマウントして調査することをお勧めする。
7.3. Backdoor実行有無の調査
バックドアプロセスは、/proc/*/cmdlineパスに対するグロブ列挙の結果をベースに、直接アクセスした際の結果を比較することで検知する。実行中のプロセスの最大pidを基準にスキャンするため、実行中のプロセスが多いシステムでは負荷が増加する可能性がある。
スクリプトは付録 D. check-backdoor.py、付録 E. check-backdoor.shとして添付した。
付録 D. check-backdoor.pyはPythonバージョン3.0以上を使用する。
8. 付録
付録 A. check-initd.sh
付録 B. find-syslogk.py
付録 C. find-syslogk.sh
付録 D. check-backdoor.py
付録 E. check-backdoor.sh

人気の記事






