要約
- Acronis 脅威リサーチユニット (TRU) が、AkiraとLynx ランサムウェアファミリーの最近のサンプルを解析した結果、攻撃者による最新の改変内容が明らかになりました。
- Akira、Lynx、SafePay は、いずれも RaaS モデルと二重脅迫戦術を採用しています。
- Lynxは流出した LockBit のソースコードの要素を取り入れていると考えられており、Akira は LockBit にも影響を与えた Conti と類似点があることから、いずれも同一のコードベースに由来すると推測されます。
- 攻撃者は、盗まれた資格情報、VPN の脆弱性、偵察、特権昇格、防御回避、データ窃取/暗号化などを駆使してシステムを侵害し、過去の高度な攻撃手法を使い回すことで中小企業を標的にしています。
- 攻撃者は、セキュリティソフトウェアを無効化し、シャドウコピーを削除し、イベントログを消去することで、検知を回避し、リカバリを妨げます。
- 興味深い事実として、観察された Lynx ランサムウェアのサンプルには、身代金要求文をプリンターで印刷する機能が確認されました。
はじめに
TRU がランサムウェア攻撃者とその活動を追跡する継続的な取り組みの中で、2025 年第 1 四半期に特に目立った動きを見せながら、これまでレポートで取り上げてこなかった AkiraとLynxの 2 つの集団に焦点を当てて解析します。
- Akira による被害件数は 220 件を超えており、なかでも法律事務所、会計事務所、建設会社などの多くの中小企業が標的となっています。また、日立ヴァンタラ([1] )や TOPPAN Next Tech など、有望なマネージドサービスプロバイダー(MSP)も標的にされています。[2]
- Lynx による被害は、これまでに約 145 件にのぼります。その攻撃件数の多さから、中小企業を主な標的としていると見られますが、具体的な被害事例はあまり公表されていません。報告されている事例として、テネシー州チャタヌーガに拠点を置く CBS 系列のテレビ局への攻撃があります。[3]
[1]https://www.bleepingcomputer.com/news/security/hitachi-vantara-takes-servers-offline-after-akira-ransomware-attack/
[2]https://www.holdings.toppan.com/en/info/toppan_info20250408.pdf
[3]https://www.scworld.com/brief/cbs-affiliate-purportedly-compromised-by-lynx-ransomware-gang
MSP だけが狙われているわけではなく、これらの攻撃者は標的を選ばずに攻撃を仕掛けています。かなりの額の身代金が見込める組織であれば、どこでも容赦なく標的にする準備ができています。とはいえ、MSP の場合、その先の顧客ネットワークへのアクセスも可能になるため、得られる報酬額が何倍にもなる可能性があり、サイバー犯罪者にとって格好の標的となっています。
それでは、各ランサムウェアについて詳しく見ていきましょう。
1. Akira ランサムウェア: 厄介な攻撃者の再登場
2. Lynx ランサムウェア: 民間企業を主な標的に
Akira ランサムウェア: 厄介な攻撃者の再登場
Akira ランサムウェアは 2022 年に登場しましたが、当初、活動件数は少数でした。2023 年になると、ランサムウェア攻撃者集団のトップ 10 に入り、同年中に 174 件の攻撃がありました。この集団の活動のサンプルをスパイク分析した結果、Conti ランサムウェアと多くの類似点があることが判明しました。Conti は、Wizard Spider と呼ばれるロシアの脅威集団と関連付けられており、2022 年にソースコードやメンバー間のメッセージを含むデータの漏洩事故が起きました。この事故の後、Wizard Spider は解散しました。Akira が Wizard Spider をリブランドしただけなのか、あるいは漏洩したコードを流用している新たな集団なのかは、まだ分かっていません。2024 年、Akira はランサムウェア攻撃者集団の攻撃回数で、再びトップ 10 にランクインしました(確認された被害は 315 件)。
技術的な詳細情報
デリバリー
Akira ランサムウェアは活動初期に、フィッシング攻撃や Cisco CVE-2023-20269 を含む脆弱性を悪用して、被害者に侵入していました。2024 年、Akira は主にユーザーのVPNを標的にしてさまざまな脆弱性を悪用しました。その中には、攻撃者がファイアウォールを無効にしてインフラに接続できる SonicWall Firewall CVE-2024-40766 も含まれていました。
2025 年に TRU は、Akira の攻撃者が窃取または購入した管理者資格情報を使用して、マシンやサーバーへのアクセスを試みていることを確認しました。侵入に成功すると、セキュリティソフトウェアを無効化します。侵入に失敗した場合は、正規のツールを悪用してリモートからデータを抽出し、その後に暗号化します。これらのツールは、多くの場合ホワイトリストに登録されており、スキャンも監視もされません。
アクセス権を得た後、攻撃者はさらに情報を収集し、ラテラルムーブメントを展開したうえで、暗号化機能を起動させました。また、ファイルを暗号化する前に、Akira の攻撃者は、被害者のファイルをアーカイブし、自らのサーバーへと流出させていました。これは二重脅迫の手口の一部です。

概要
解析したサンプルは、C/C++ で記述された PE64 ファイルで、Visual Studio Build Tool でコンパイルされています。このファイルは、2024 年末に初めて実際の環境で確認されました。
ファイルの実行は、大規模で大量のコードを含む WinMain 関数から始まります。この関数は、実行開始時にその時点の日付と時刻を取得し、プログラムが実行されたフォルダ内にログファイルを作成します。

その後、このサンプルはコマンドライン引数を取得し、保存されているリストと比較します。サポートしているコマンドと、それぞれの説明を以下に示します。
引数から値を保存した後、サンプルはシステム上のすべての利用可能な論理ドライブを取得します。各ドライブのタイプが確認されます。ネットワークドライブ値と一致し、かつ「-localonly」引数が指定されている場合、そのドライブは除外されます。

次のステップでは、システム内で実行中の全プロセスのリストを取得します。そのために、サンプルは「WTSEnumerateProcess」関数を使用しています。この関数は主にリモートサーバー上のプロセスを列挙するために使用されますが、Akira はハンドルの引数として「NULL」値を使用しているため、この関数はローカルシステム上のプロセスを列挙します。
次に、いくつかのシンボルを 1 つのバッファに読み込み、その後のループでそれらを復号します。その結果、PowerShell コマンドが生成されます。このコマンドは、WMI オブジェクトを使用してすべてのシャドウコピーを削除します。

その後、ローカルマシン上での呼び出しに使用される認証情報を設定します。ここでは、「CoSetProxyBlanket」が次の引数で使用されています。
● dwCapabilities = 0 - 機能フラグなし。
● pAuthInfo = NULL - DCOM は現在のプロキシ識別情報(プロセストークンまたはなりすましトークン)を使用する。
● dwImpLevel = 3 - サーバープロセスは、クライアントの代理として処理している間、クライアントのセキュリティコンテキストを継承することができる。
● dwAuthLevel = 3 - サーバーがリクエストを受信したとき、各リモートプロシージャコールの開始時のみ認証を行う 。
● pServerPrincName = NULL - 相互認証なし。
● dwAuthzSvc = NULL - 承認なし。
● dwAuthSvc = NULL- 認証なし。
続いてサンプルは、WMI カスタムマーシャラーである「fastprox.dll」ライブラリからのインポートに使用される文字列を読み込みます。また、COM ライブラリ「wbemprox.dll」からのインポートにも使用されます。ここでは、COM と WMI の両方を使って、権限の制御とデコードされた Powershell コマンドが実行されます。

コマンド実行後、サンプルは「GetSystemInfo」関数を呼び出し、スレッドの生成を開始します。スレッド番号の異なる 3 種類のスレッドを作成します。
暗号化スレッドの数は、「GetSystemInfo」を使用して取得されるコンピューターの CPU 数に依存しています。たとえば、論理プロセッサを 6 つ搭載したコンピューターでは、2 つのスレッドがフォルダパーサー用に割り当てられ、残りの 4 つが暗号化に使用されます。これらのスレッド数はログファイルに記録されます。
ファイルの暗号化
Akira のファイル暗号化処理では、Windows API コールと CRT(C ランタイム)の関数を併用しています。システム内のフォルダをイテレーション処理するために、ディレクトリイテレーターを作成します。

ファイルが見つかると、そのファイル名に含まれる「\」と「. 」の 2 つの記号を検索します。この操作は、ファイルがフォルダであるかどうかを判別するために使用されます。ファイルがフォルダの場合、その名前を保存されているリストと比較します。名前が一致した場合、そのフォルダは暗号化から除外されます。ファイルがフォルダでない場合は、ファイル名の最後の「.」記号を検索して拡張子を見つけ、保存されている拡張子と比較します。

以下のフォルダおよびファイル拡張子は、システムの動作に支障をきたすおそれがあるため、暗号化対象から除外されます。$Recycle.Bin、System Volume Information、Boot、ProgramData、Windows、temp、.dll、.exe、.akira
上記以外のファイルは、「GENERIC_ALL」アクセス権で開かれます。この操作の結果を「GetLastError」関数を使って取得します。最後のエラーコードは、「ERROR_SHARING_VIOLATION」エラーを示す値「20h」(10 進数で 32)と比較されます。もし一致すれば、サンプルはこのファイルをブロックしているプロセスを強制終了する関数を呼び出します。
プロセスを終了させるために、サンプルは Restart Manager API を使用しています。セッションを作成した後、ブロック対象のファイル名をリソースとして登録します。次に、このファイルを扱うプロセスのリストを見つけます。このリストに挙がったプロセスを終了する前に、サンプルは自身の PID を取得し、自らを終了させないよう除外します。

Akira は、ファイルの暗号化に ChaCha20 を使用しています。ファイルの割合が引数として与えられた場合、Akira は読み取る必要があるデータ量を計算します。このサンプルでは、保存されたマジック定数を使用します。これはキーサイズに依存しますが、このケースでは常に 256 となっています。
暗号化されたデータが書き込まれた後、512 バイト(16 進数で 200)のバッファを使用して、もう 1 回書き込み操作を実行します。RSA で暗号化された ChaCha20 暗号化キーが含まれています。

暗号化の進化
Akira の初期バージョンでは、ChaCha20 と RSA を組み合わせた、改変版 Conti ランサムウェア暗号化アルゴリズムが使用されていました。最新のサンプルは、同じ暗号方式を使用していますが、初期バージョンでは、アルゴリズムを実装する際に、実行中にキーを 1 回しか生成しないミスを犯していました。その結果、暗号化されたすべてのファイルが同じキーストリームを共有することになってしまい、サイバーセキュリティ企業は復号化ツールを開発することができました。その後、Akira は暗号化方式を改良し、今ではファイルごとに個別にキーを生成しています。Linux 版も ChaCha20 を使ってファイルを暗号化していますが、CryptoPP ライブラリを利用しています。一方、Windows 版では外部ライブラリを使用せず、サンプル内に暗号化機能が実装されています。
結論
2024 年に猛威を振るった Akira は、2025 年も引き続き活動を継続しています。解析されたサンプルは、流出した Conti のソースコードといくつかの類似点が見られるものの、進化を続けており、今年最も危険な脅威の 1 つとなっています。最後に、Akira が被害者に身代金の支払い猶予期限をどれほど与えているのかは不明です。身代金要求書には、盗まれたデータ(銀行データを含む可能性あり)に応じて、被害者ごとに金額が算定される旨のみが記載されています。TRU では、Akira に侵入されてから 5 日も経たないうちにデータが流出したケースを確認しています。
アクロニスによる検出

IoC
ファイル
SHA256
88da2b1cee373d5f11949c1ade22af0badf16591a871978a9e02f70480e547b2
ネットワークインジケータ
URL
https://akiral2iz6a7qgd3ayp3l6yub7xx2uep76idk3u2kollpj5z3z636bad.onion
https://akiralkzxzq2dsrzsrvbr2xgbbu2wgsmxryd4csgfameg52n7efvr2id.onion
Lynx ランサムウェアは民間企業を主な標的に
2024 年半ばに初めて確認された Lynx には、TRU が 2023 年に解析した INC ランサムウェアと多くの類似点が見られます。Lynx の脅威アクターは、Ransomware-as-a-Service 集団として活動しており、ロシアのアンダーグラウンドフォーラムに投稿するなどして、常に新たなアフィリエートを探しています。投稿内容によれば、Lynx は民間企業のみを標的とし、独自のビルダーを保有しており、Windows 版と Linux 版をサポートし、盗まれたファイルを保管するサービスを提供しています。また、アフィリエイトには、データリークサイトの管理パネルへのアクセス権が与えられます。
2024 年 4 月、ある地下フォーラムのユーザーが、INC ランサムウェアビルダーのコピー 3 本を、それぞれ 30 万(おそらくルーブル)で販売すると投稿しました。この投稿で説明されている機能は、TRU が分析した INC ランサムウェアのサンプルに類似していますが、本物の INC のソースコードかどうかは不明です。
その直後、Lynx ランサムウェアが出現しました。INC 集団が 2025 年も活動を続けていることから、INC が単にリブランドした可能性は低いと見られています。おそらく、Lynx は地下フォーラムで INC ビルダーを購入し、コードを改変したものと考えられます。

ロシア語からの翻訳
「INC ランサムウェアのソースコードを 3 名様限定で販売
aes-ctr-128 + curve25519-donna
IOCPは、Linux 版も同じものですが、すべてのシステムに対応した ESXi ビルドが用意されています。
管理パネルは React を使用し、バックエンドは Node.js と TypeScript で構築されており、すべて Docker コンテナにまとめられています。コマンド 1 つで簡単に起動できます」
技術的な詳細情報
デリバリー
通常、Lynx はフィッシングメールを使って、被害者にマルウェアを送りつけます。攻撃者は、被害者のコンピューターにアクセスできるようになると、まずシステムやインフラ情報を収集し、ユーザーの資格情報の取得を試み、ネットワーク内で侵入拡大して、より多くのコンピューターに感染させます。被害者のコンピューターにアクセスすることで、攻撃者はインストールされているソフトウェアを調べ、後でランサムウェアの実行に悪用する脆弱性を探すこともできるようになります。
2025 年の攻撃では、セキュリティソフトウェアが見つかると、Lynx がそれをアンインストールしようと試みるケースが確認されています。
この段階に入ると、攻撃者はまずファイルをサーバーに流出させ、次に暗号化処理を実行します。

概要
解析されたサンプルは、C\C++ で書かれた PE32 ファイルです。このファイルは、パッキングも難読化も施されていません。
サンプルは複数のコマンドをサポートしています。各コマンドとその説明はコード内に保存されています。
この Lynx サンプルは、コマンドラインから引数を受け取った後、それをあらかじめ保存されている引数と比較します。一致した場合は、該当する値を「1」に設定します。一致しなければ、「0」に設定します。その結果は、グローバル変数に保存されます。

引数が「--dir」のディレクトリパスなどの追加情報を必要とする場合、コマンドライン文字列からの追加オフセットを使用して該当データを取得し、それも保存します。

コンソール出力
「--verbose」引数が渡されると、設定情報や一部の動作状況、暗号化の進行状況など、さまざまな情報を出力します。

隠しドライブのマウント
この引数は、Lynx サンプルに対してシステム内のすべての隠しドライブを検索し、マウントする動作を強制します。ここで保存されたドライブ文字のリストを読み込み、それぞれのドライブを 1 つずつ確認します。ドライブが検出されると、そのタイプが DRIVE_NO_ROOT_DIR であるかどうかを確認します。タイプが一致すれば、「SetVolumeMountPointW」関数を使ってマウントします。
プロセスの終了
Lynx は、プロセス終了に 2 つの方法を使用しており、どちらもコマンドライン引数を使って有効にします。「--kill」引数が渡されると、システム内で実行中のすべてのプロセスのスナップショットが作成され、それらのイテレーションが開始されます。各プロセス名は、保存されたリストと比較され、一致したプロセスは終了されます。
「kill」引数は、サービス終了の役割も果たします。ここでは、SC Manager と「EnumServicesStatusExW」関数を使用して、システムで稼働中のすべてのサービスのリストを取得します。Lynx サンプルは、このリストと保存された名前を比較します。一致するものが見つかると、「ControlService」関数が「SERVICE_CONTROL_STOP」フラグ付きで呼び出されます。

暗号化中のファイル共有違反エラーを避けるため、以下のプロセスが終了されます。
sql, veeam, backup, exchange, java, notepad
終了されたサービス
sql, veeam, backup, exchange
「--stop-process」引数が指定されている場合、サンプルは暗号化処理中に Restart Manager API を使用してプロセスを終了させます。この関数は、Lynx が暗号化を試みたファイルが他のプロセスによって使用中の場合にのみ呼び出されます。このファイルをリソースとして登録し、それを扱うプロセスを特定します。また、自分自身を終了対象から除外するために、自らの PID を取得します。

シャドウコピー
暗号化処理を開始する前に、Lynx サンプルはシステム上のすべてのドライブを検索します。各ドライブのタイプが確認されます。暗号化対象となるのは「DRIVE_REMOVABLE」、「DRIVE_FIXED」、「DRIVE_REMOTE」のフラグ付きのドライブのみです。対象ドライブが見つかると、そのハンドルを開き、「53C028h」パラメータを制御コード(「IOCTL_VOLSNAP_SET_MAX_DIFF_AREA_SIZE」)とする「DeviceIoControl」関数を実行します。

これは、シャドウコピーの最大サイズを変更する、文書化されていないコントロールコードです。「lpInBuffer」には値「1」が設定されているため、このように小さいサイズを設定すると、シャドウコピーは強制的に削除されます。これらの操作が完了すると、検出されたすべてのドライブが暗号化処理に渡されます。
ファイル検索プロセス
Lynx サンプルは「sub_275600」関数を開始アドレスとするスレッドを生成します。スレッド数は、「GetSystemInfo」呼び出しによって取得したプロセッサ数を 4 倍した値です。

この開始アドレスを含むスレッドは、ファイルの検索に使われます。Lynx サンプルがフォルダに侵入すると、そのフォルダに身代金要求書を作成し、「FindFirstFile」と「FindNextFile」関数を使用してファイルの検索を開始します。見つかったファイルがフォルダの場合、サンプルはその名前を保存されたリストと比較します。フォルダ名が一致した場合、そのフォルダは処理対象から除外されます。
検出されたファイルがフォルダでない場合でも、そのファイルを暗号化から除外することもできます。拡張子とファイル名を比較します。ファイルサイズが 0 の場合も除外されます。

対象となるファイルが見つかると、まずそのファイルが他のプロセスによって使用中かどうかを確認します。「--stop-process」引数が渡された場合は、ファイルを保持しているプロセスを強制終了し、渡されなかった場合は、そのファイルはスキップされます。次に、このファイルへの書き込み権限があるかどうかを判定します。これは、ファイルの末尾に一定量のデータを書き込むことによって確認されます。書き込む前に 36 バイトの「2」をバッファに設定します。バッファにセットしなければならない文字数と、ファイルに書き込まなければならないバッファサイズは、「LYNX」という文字列の文字数に 32 を加えた値になります。

Lynxがそのファイルの書き込みに失敗した場合は、そのファイルの所有権を取得しようとします。ここでは、「SeTakeOwnership」権限を取得し、新しい ACL 構造を構築・設定することで、ファイルの所有者を変更し、書き込み権限を付与しようと試みています。
ファイルの暗号化
スレッド処理の開始時に、Lynx は Base64 形式で保存された文字列をデコードします。
8SPEMzUSI5vf/cJjobbBepBaX7XT6QT1J8MnZ+IEG3g=
この値は ECC 公開キーで、AES キーを生成するために使用されます。各スレッドは、「CRYPT_VERIFYCONTEXT」および「PROV_RSA_AES」フラグで暗号化プロバイダーを初期化します。次に、「CryptGenRandom」関数を使って、32 バイトの乱数を生成します。

そして、生成したキーのハッシュ値を計算します。SHA512 定数は、このバイナリの中に保存されます。
スレッドが対象ファイルを読み込んだ後、サンプルは暗号化スレッドを生成し、完了シグナルを渡して終了します。暗号化スレッドは、前のスレッドからデータを取得します。このデータには、読み込んだファイルデータと暗号化キーが含まれています。「GetQuedCompletionStatus」の結果に応じて、サンプルは 5 つのケースのいずれかにジャンプします。
デバッグの処理中に、最初にトリガーされたのは、2つでした。ここでサンプルは、まずいくつかの値を確認し、その後、現在のファイルに対して書き込み処理を実行します。暗号化キーを含む「116」バイトのデータが書き込まれます。

次に、サンプルは「ケース 0」に進み、現在の暗号化ブロックオフセットがファイルサイズを超えていないか確認します。このケースに初めて入るとき、ブロックオフセットは常に「0」となり、スレッドはファイルデータの読み取りを開始します。しかし、条件が満たされると、サンプルはファイルに暗号化すべきデータが残っていないことを示し、スレッドに暗号化されたブロックのファイルへの書き込みを強制します。また、ケースステートメントには値「3」が設定されます。

次にサンプルは「ケース 1」に進みます。ここでは、ファイルサイズから「116」が差し引かれます。これは、すでに書き込まれたデータのチャンクを暗号化対象から除外するための処理です。
すべての準備が完了すると、サンプルはファイルデータを暗号化するループに入ります。ここでは、「sub_AE1110」関数を呼び出し、AES を使ってキーを暗号化します。その結果、値 v32 がキーストリーム(v16)として使用され、ファイルデータに対して XOR 演算が行われます。暗号化ループが 16 回繰り返されるたびに、キーストリームが再生成されます。

最後に、サンプルは暗号化されたデータをファイルに書き込み、「ケース 3」に進み、「.LYNX」拡張子をファイルに付加します。その後、スレッドはメモリをクリアし、次のファイル受信まで待機します。
身代金要求書
Lynx は身代金要求メッセージを Base64 形式で保存しています。Lynx はそれを読み込み、「CryptStringToBinaryA」関数に渡します。この関数は「CRYPT_STRING_BASE64」フラグ付きで呼び出されます。
デコードされたメッセージには被害者 ID が含まれていませんが、デコード後に付加されます。この ID はハードコーディングされており、サンプルごとに異なります。

暗号化処理が完了すると、サンプルは「Winspool」ヘッダーからのインポートを使用して、接続されているすべてのプリンターを検出します。プリンター名を確認し、保存されている名前と照合して対象外を除外した上で、残ったすべてのプリンターに身代金要求書を送信します。
身代金要求書は、テキストファイルだけでなく、暗号化処理の最後にデスクトップの壁紙にも書き込まれます。
結論
Lynx が単なる INC ランサムウェアのリブランドかどうかは不明ですが、コードに類似性があることは明らかです。解析されたサンプルは、処理の終了、隠しドライブのマウント、シャドウコピーの削除、ネットワーク共有上のファイルの暗号化などを実行できます。ファイルの暗号化は強力ですが、攻撃者は二重脅迫スキームの一環としてファイルを自身のサーバーにアップロードし、被害者に復号化だけでなく、個人データの非開示も条件にして身代金の支払いを迫っています。
アクロニスによる検出

IoC
ファイル
SHA256
571f5de9dd0d509ed7e5242b9b7473c2b2cbb36ba64d38b32122a0a337d6cf8b
ネットワークインジケータ
URL