Mementoとは?ランサムウェアの暗号を乱数の記録から解く研究ツールの仕組み

Mementoとは?乱数の記録からランサムウェアの暗号を解く

※本記事にはプロモーションが含まれます。

ランサムウェアにファイルを暗号化されてしまったら、バックアップから戻すしかない――そう考える人は多いと思います。2026年10月16日、株式会社KDDI総合研究所が、別の角度からこの問題に取り組む研究ツール「Memento(メメント)」をオープンソースで公開しました。この記事では、Mementoが何をするツールなのか、どんな仕組みなのか、使う前に知っておくべき注意点は何かを、初心者向けにやさしく解説します。

Mementoの流れ:乱数を記録し、鍵を作り直して、ファイルを復元する
目次

Mementoとは?

Mementoは、Linux向けのランサムウェア鍵復元の研究プロトタイプです。Go言語で書かれていて、GitHubの KDDIR-SEC/memento で公開されています。ライセンスはGPL-2.0-onlyです(同梱の暗号実装Sosemanukは元のライセンスに従います)。

KDDI総合研究所の公式発表によると、関連する研究成果は2026年10月19日から開かれる「コンピュータセキュリティシンポジウム2026(CSS2026)」で発表される予定です。

ツール名Memento
公開元株式会社KDDI総合研究所(GitHubアカウント:KDDIR-SEC)
言語Go
ライセンスGPL-2.0-only
バージョン0.1.0-dev(研究プロトタイプ)
リポジトリhttps://github.com/KDDIR-SEC/memento

仕組みをやさしく説明すると

ランサムウェアはファイルを暗号化するとき、「鍵」を作ります。この鍵は、コンピュータが用意する疑似乱数(でたらめに見える数値)をもとに作られます。乱数が予測できないからこそ、鍵も推測できない、というのが暗号の基本です。

Mementoの発想はシンプルです。「乱数を推測できないなら、使われた乱数を前もって全部メモしておけばいい」。平時からシステム内で使われた乱数を記録しておき、攻撃を受けたあとにその記録から同じ鍵を作り直して、ファイルを元に戻そうというわけです。

Mementoの記録フェーズ(平時)と復号フェーズ(被害後)の2段階

記録フェーズ:乱数を2か所で記録する

  • OSの入口(システムコール):プログラムがgetrandomや/dev/urandomの読み取りで乱数を受け取る瞬間を、eBPFというLinuxの仕組みで観測して記録します。
  • CPUの命令:CPUが直接乱数を出す命令(RDRAND/RDSEED)は、OSからは見えません。そこで仮想マシン(KVM)のホスト側を改変したモジュールで、ゲストがこの命令を使った瞬間をとらえます。

記録は1行1件のJSON形式のログ(memento.prn/v1)として保存されます。

復号フェーズ:記録から鍵を作り直す

攻撃を受けたあと、記録した乱数から鍵の候補を作り、暗号化されたファイルの復号を試します。元のファイルは書き換えず、復号結果は新しいファイルとして出力されます(非破壊復号)。公式発表では、ファイル形式やデータの乱雑さ(エントロピー)から復元できたかを自動判定するとされています。

対応しているランサムウェア

READMEで復号対象として挙げられているのはBabukとQilinの2つです。

  • Babuk:乱数だけでなく、ランサムウェアが使う公開鍵も必要です。Mementoは動作中のプロセスのメモリダンプから公開鍵の候補を探します。公式発表では、模擬検証で99.9%以上の精度で公開鍵を特定でき、特定できた場合は全ファイルを復元できたとしています(100ファイルで11時間、500ファイルで54時間)。
  • Qilin:暗号化時に/dev/urandomから読まれた値が復号の材料になります。公式発表では、模擬検証で全ファイルの復元に成功し、100ファイルで0.36時間、500ファイルで45時間かかったとされています。

なお、これらの検証は本物のランサムウェアではなく、Qilin・Babukを模した安全な検証用プログラムで行われたものです。公式発表ではDragonForceやPrinceなどの解析結果も乱数取得経路の特定に使われたとありますが、READMEに復号機能として載っているのはBabukとQilinだけです。

必要な環境

  • Intel x86-64(VMX)搭載マシンのUbuntu 24.04 LTS
  • Go 1.23以降
  • BTFを公開しているLinuxカーネル
  • clang/LLVM、bpftool、libelf開発ヘッダー、GCC、GNU Make
  • CPU命令の記録には改変KVMモジュールが必要(検証済みはUbuntuのカーネル6.17.0-35-genericのみ)
  • 検証用ラボの実行にはrootless Docker

AMDのCPU(SVM)やほかのカーネルは未対応またはベストエフォートとされています。環境の条件はかなり絞られている点に注意しましょう。

Mementoの対応環境まとめ(Ubuntu 24.04・Intel VMX・Go 1.23以降など)

安全への配慮

Mementoには、ランサムウェアの動きを試すための「ラボ用シミュレーター」が入っています。悪用や事故を防ぐため、READMEでは次のような制限が説明されています。

  • 任意のフォルダは暗号化できず、ツール自身が作った専用のコピーだけを対象にする
  • root実行、シンボリックリンク、隠しパス、許可されていない拡張子などは拒否する
  • 実行前に対象を全部表示し、「YES」と入力しない限り進まない
  • 推奨の実行方法はネットワークなし・読み取り専用のコンテナ内
  • KVMモジュールの差し替えは自動化せず、管理者が手動で行う前提

使う前に知っておきたい注意点

  • 研究プロトタイプである:バージョンは0.1.0-devで、製品ではありません。READMEでも「現状有姿(AS IS)」での提供とされています。
  • 復元は保証されない:Babuk・Qilinの古い形式には暗号文を認証する仕組みがなく、鍵候補の絞り込みは推定(ヒューリスティック)です。最終的には元データとの比較など、別の手段で確かめる必要があります。
  • 事前の記録が必須:攻撃を受けたあとに入れても意味がありません。平時から記録しておくことが前提です。CPU命令の記録でバッファがあふれると、あふれた分は取り戻せません。
  • 記録できない経路もある:__vdso_getrandom経由の乱数はシステムコールの観測をすり抜ける可能性があり、READMEでは事前に診断コマンドで確認するよう求めています。
  • ログはとても機密性が高い:記録には、正規のプログラムが使った秘密の乱数も含まれます。ログやメモリダンプは厳重に管理し、公開してはいけません。
  • まずは隔離環境で:本番導入前に、隔離した検証環境で十分にテストすることが推奨されています。

どんな人に向いている?

  • Linuxサーバーやクラウド基盤のセキュリティを担当する、権限を持ったシステム管理者
  • ランサムウェア対策や暗号の研究者・学生
  • 「バックアップ以外の復旧手段」に関心のあるセキュリティ担当者

逆に、すでに被害を受けていて今すぐ復旧したい人や、Linuxやカーネルの扱いに慣れていない人向けのツールではありません。被害を受けた場合は、専門の窓口やベンダーへの相談を優先しましょう。

まとめ

Mementoは、「鍵の材料になる乱数を平時から記録しておき、被害後に同じ鍵を作り直す」という発想で、ランサムウェアに暗号化されたファイルの復元を目指す研究ツールです。対応はBabukとQilin、環境も限られた研究段階のものですが、バックアップ以外の新しい選択肢として注目に値します。

ランサムウェア対策の基本は、まずバックアップや侵入対策などの備えです。基本的な対策についてはランサムウェア対策の記事もあわせてご覧ください。

日ごろの備えとして、セキュリティソフトを入れておくのも基本の対策のひとつです。

詳しい情報はGitHubリポジトリとKDDI総合研究所の発表で確認できます。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

社内エンジニアとして、SREとセキュリティの仕事をしています。サーバーの構築や運用、クラウド環境の設計にも関わってきました。趣味はゲームと漫画・アニメ。

コメント

コメントする

目次