lastpass2john: LastPassオフラインキャッシュからハッシュを抽出しJohn the Ripperで解析する方法

はじめに

パスワードマネージャーは現代のデジタルライフにおいて不可欠なツールとなっています。多くのサービスで異なる複雑なパスワードを管理する必要があり、これらを安全に保管・利用するためにパスワードマネージャーが役立ちます。LastPassはその中でも広く利用されているサービスの一つです。しかし、どのようなツールも完璧ではなく、セキュリティインシデントのリスクはゼロではありません。

実際にLastPassは、2022年後半に重大なセキュリティ侵害を経験しました。この事件では、攻撃者が顧客のパスワード保管庫(Vault)のバックアップコピーにアクセスしたことが報告されました。これには、URL、ユーザー名、暗号化されたパスワードなどが含まれていた可能性があります。この保管庫はユーザーのマスターパスワードで暗号化されていますが、もしマスターパスワードが弱いものであった場合、オフラインでのブルートフォース攻撃によって解読される危険性が高まります。

このような状況下で、自身のパスワードセキュリティ強度を評価したり、セキュリティ監査を行ったりする必要性が生じることがあります。lastpass2john は、そのような目的で使用されることがあるツールの一つです。これは、著名なパスワードクラッキングツールである John the Ripper (JtR) スイートに含まれるユーティリティで、LastPassのオフラインキャッシュデータからパスワードハッシュ情報を抽出し、JtRで解析可能な形式に変換します。

⚠️ 重要: この記事で説明するツールや技術は、自身が所有または管理するアカウントやデータに対してのみ、正当な目的(セキュリティ評価やパスワードリカバリーなど)で使用してください。 他者のアカウントやデータに対してこれらのツールを使用することは、重大な法的・倫理的問題を引き起こす可能性があります。不正アクセスは法律で固く禁じられています。

この記事では、lastpass2john の機能、使い方、そして関連するセキュリティ上の考慮事項について、技術的な詳細を含めて解説します。

John the Ripper とは?

lastpass2john を理解するためには、まず John the Ripper (JtR) について知る必要があります。JtR は、非常に有名で強力なオープンソースのパスワードクラッキングツールです。元々はUnix系のパスワードハッシュ(/etc/shadow に保存されているようなもの)をクラックするために開発されましたが、現在では非常に多くの種類のハッシュ形式や暗号化されたファイルをサポートしています。

JtR は主に以下のような目的で使用されます:

  • パスワード強度監査: システム管理者が、ユーザーが設定しているパスワードの強度をテストし、弱いパスワードを特定する。
  • パスワードリカバリー: 忘れてしまったパスワードを回復する(ただし、所有者自身のパスワードに限る)。
  • ペネトレーションテスト: 侵入テストの一環として、取得したハッシュから元のパスワードを特定しようと試みる。
  • セキュリティ研究: パスワードハッシュ化アルゴリズムやクラッキング技術の研究。

JtR は、辞書攻撃、ブルートフォース攻撃、それらを組み合わせたハイブリッド攻撃など、様々な攻撃手法をサポートしています。また、CPUだけでなくGPUを利用してクラッキングプロセスを高速化することも可能です。

JtR には、さまざまな形式のデータからパスワードハッシュを抽出するための補助ツール(ヘルパースクリプト)が多数含まれています。lastpass2john もその一つであり、特定のアプリケーション(この場合はLastPass)のデータ形式に対応するために作られました。これらのツール群は、John the Ripper をより汎用的に使えるように拡張しています。

より詳しい情報やダウンロードについては、John the Ripper の公式サイトを参照してください: https://www.openwall.com/john/

lastpass2john の役割

lastpass2john は、John the Ripper スイートに含まれるPythonスクリプトです。その主な役割は、LastPassがローカルコンピュータ上に保存しているオフラインキャッシュファイル(通常は暗号化されたデータブロブ)を読み込み、そこからマスターパスワードの検証に必要な情報(ハッシュ化されたデータ)を抽出することです。

具体的には、以下の処理を行います:

  1. 指定されたLastPassのオフラインキャッシュファイルを探し、開きます。
  2. キャッシュファイルの中から、マスターパスワードのハッシュに関連する部分(通常、ソルトや反復回数などの情報も含まれる)を特定します。
  3. これらの情報を、John the Ripper が理解できる特定のフォーマット($lastpass$*... のような形式)に整形して出力します。

この出力されたハッシュ文字列は、それ自体がマスターパスワードではありません。これは、マスターパスワードが正しいかどうかを検証するために必要なデータであり、John the Ripper はこのハッシュ文字列を使って、様々なパスワード候補を試行し、正しいマスターパスワードを見つけ出そうとします。

なぜオフラインキャッシュなのか? LastPassは、インターネット接続がない状況でもユーザーがパスワード保管庫にアクセスできるように、ローカルマシン上にデータのコピー(キャッシュ)を保存する機能を持っています。lastpass2john は、このローカルに保存されたデータをターゲットにします。オンラインのLastPassサーバーに直接アクセスするわけではありません。

このツールが存在する背景には、前述のLastPassのセキュリティインシデント(2022年)のような状況が関係しています。もし攻撃者が暗号化された保管庫のコピーを入手した場合、次に必要となるのはマスターパスワードです。ローカルキャッシュからハッシュを抽出できれば、オフライン環境で時間をかけてマスターパスワードのクラッキングを試みることが可能になります。したがって、lastpass2john は、そのような攻撃が技術的にどのように行われるかを理解したり、自身のマスターパスワードの強度を評価したりするために使われることがあります。

John the Ripper と lastpass2john のインストール

lastpass2john は単体で配布されているわけではなく、John the Ripper (JtR) の一部として提供されています。したがって、lastpass2john を使用するには、まずJtRをインストールする必要があります。

JtRには、安定版 (stable) と開発版 (bleeding-jumbo) があります。lastpass2john のような比較的新しいフォーマットや補助ツールは、開発版である “bleeding-jumbo” に含まれていることが多いです。そのため、bleeding-jumbo バージョンをインストールすることを推奨します。

インストール方法 (一般的なLinux環境)

多くのLinuxディストリビューションでは、パッケージマネージャを通じてJtRをインストールできますが、最新の bleeding-jumbo を利用するには、ソースコードからコンパイルするのが確実です。

  1. 依存パッケージのインストール: コンパイルに必要な開発ツールやライブラリをインストールします。必要なパッケージはディストリビューションによって異なりますが、一般的には build-essential, libssl-dev, git, python3 などが必要です。
    # Debian/Ubuntu系の場合
    sudo apt update
    sudo apt install build-essential libssl-dev git python3 zlib1g-dev
    
    # Fedora/CentOS/RHEL系の場合
    sudo dnf update
    sudo dnf groupinstall "Development Tools"
    sudo dnf install openssl-devel git python3 zlib-devel
  2. ソースコードの取得: GitHubから bleeding-jumbo のリポジトリをクローンします。
    git clone https://github.com/openwall/john -b bleeding-jumbo john-bleeding
  3. コンパイル: クローンしたディレクトリに移動し、src ディレクトリ内でコンパイルを実行します。
    cd john-bleeding/src
    ./configure
    make -s clean && make -sj4  # -sj4 はCPUコア数に応じて調整
    エラーが発生した場合は、依存パッケージが不足している可能性が高いです。エラーメッセージを確認し、必要なパッケージを追加インストールしてください。
  4. 確認: コンパイルが成功すると、../run/ ディレクトリ内に実行ファイルが生成されます。john 本体と、lastpass2john.py (または単に lastpass2john) スクリプトが存在することを確認します。
    cd ../run
    ls john lastpass2john.py
    これで、./john コマンドと ./lastpass2john.py スクリプトが利用可能になります。

その他のOS

  • macOS: Homebrew を使用してインストールできます (brew install john-jumbo)。あるいは、Linuxと同様にソースからコンパイルすることも可能です(Xcode Command Line Tools が必要)。
  • Windows: JtR の公式サイトからコンパイル済みのWindowsバイナリ(通常 “jumbo” バージョン)をダウンロードできます。Cygwin 環境などがあればソースからのコンパイルも可能です。

インストールが完了したら、run ディレクトリに移動して作業を行います。以降のコマンド例では、run ディレクトリにいることを前提とします。

LastPass オフラインキャッシュファイルの場所

lastpass2john を使用するには、まずターゲットとなる LastPass のオフラインキャッシュファイルを見つける必要があります。このファイルの場所は、使用しているオペレーティングシステムやLastPassのクライアント(ブラウザ拡張機能、デスクトップアプリなど)によって異なります。

以下は一般的なキャッシュファイルの場所の例ですが、バージョンや環境によって変わる可能性があるため、注意が必要です。多くの場合、これらのファイルは隠しファイル/フォルダ内に存在します。

ファイル名やパスは、LastPassのバージョンアップデート等により変更される可能性があります。見つからない場合は、ファイル検索機能などを活用してください。

Windows

  • ブラウザ拡張機能 (Chrome/Firefoxなど):
    • %LocalAppData%\Google\Chrome\User Data\Default\Local Extension Settings\[拡張機能ID] (Chrome)
    • %AppData%\Mozilla\Firefox\Profiles\[プロファイル名]\storage\default\moz-extension+++[拡張機能UUID]^userContextId=[コンテナID] (Firefox – 正確なパスは調査が必要)
    • 一般的に、ユーザープロファイル内のブラウザデータディレクトリ配下にあることが多いです。LastPassの拡張機能IDやUUIDを特定する必要があります。
  • LastPass デスクトップアプリ (旧バージョン):
    • %UserProfile%\AppData\Local\LastPass\ 配下に *.lp ファイルや *.dat ファイルとして保存されていた可能性があります。
    • 最近のバージョンではキャッシュの仕組みが変わっている可能性があります。
  • ファイル名パターン: しばしば lastpass.dat, lpall.slps, com.lastpass.lpandroid (古いモバイルキャッシュ由来?), または email アドレスを含むファイル名 (例: youremail@example.com.db) などが見られます。

macOS

  • ブラウザ拡張機能 (Chrome/Safariなど):
    • ~/Library/Application Support/Google/Chrome/Default/Local Extension Settings/[拡張機能ID] (Chrome)
    • ~/Library/Safari/Databases/[...]/[拡張機能関連] (Safari – 特定が難しい場合あり)
    • ~/Library/Application Support/Firefox/Profiles/[プロファイル名]/storage/default/moz-extension+++[...]/ (Firefox)
  • LastPass デスクトップアプリ:
    • ~/Library/Application Support/LastPass/~/Library/Containers/com.lastpass.LastPass/Data/Library/Application Support/LastPass/ 配下。
    • ファイル名はWindowsと同様のパターンが多いです。

Linux

  • ブラウザ拡張機能 (Chrome/Firefoxなど):
    • ~/.config/google-chrome/Default/Local Extension Settings/[拡張機能ID]/ (Chrome/Chromium)
    • ~/.mozilla/firefox/[プロファイル名]/storage/default/moz-extension+++[...]/ (Firefox)
  • LastPass CLI (コマンドラインインターフェース):
    • ~/.config/lpass/~/.lpass/ 配下に設定ファイルやキャッシュが保存されることがあります。
  • ファイル名パターン: WindowsやmacOSと同様のパターンに加え、設定ディレクトリ内の *.xml*.bin ファイルなども関連する可能性があります。

キャッシュファイルは、単なるテキストファイルではなく、バイナリデータやSQLiteデータベース形式の場合もあります。lastpass2john は、これらの様々な形式のキャッシュファイルからハッシュ情報を抽出できるように設計されています。適切なファイルを見つけることが、最初の重要なステップです。見つからない場合は、システム全体で “lastpass” などのキーワードを含むファイルを検索してみるのも一つの方法です(ただし、大量のファイルがヒットする可能性もあります)。

lastpass2john の使い方 🛠️

LastPassのオフラインキャッシュファイルを見つけたら、いよいよ lastpass2john を使ってハッシュを抽出します。基本的な使い方は非常にシンプルです。

John the Ripper の run ディレクトリにいることを確認してください。

# 基本的な構文
./lastpass2john.py [LastPassキャッシュファイルのパス]

例えば、Windows環境で見つけたキャッシュファイルが C:\Users\YourUser\AppData\Local\LastPass\cache.db で、それを run ディレクトリにコピーしてきた場合(ファイル名を cache.db とします)、以下のように実行します。

./lastpass2john.py cache.db

macOSやLinuxの場合も同様です。

# 例: macOSのキャッシュファイルを指定
./lastpass2john.py ~/Library/Application\ Support/LastPass/youremail@example.com.db

# 例: Linuxのキャッシュファイルを指定
./lastpass2john.py ~/.config/google-chrome/Default/Local\ Extension\ Settings/hdokiejnpimakedhajhdlcegeplioahd/000003.log

ヒント: パスにスペースが含まれる場合は、パス全体を引用符(" ")で囲むか、スペースの前にバックスラッシュ(\)を挿入してエスケープしてください。

スクリプトがキャッシュファイルを正しく認識し、ハッシュ情報を抽出できれば、以下のような形式の文字列が標準出力に表示されます。

# 出力例 (実際の値は異なります)
user@example.com:$lastpass$user@example.com*100100*ecf8...[長い16進文字列]...a5b2*7a3...[短い16進文字列]...f9c1

この出力文字列が、John the Ripper でクラックを試みるためのハッシュデータです。この文字列には、ユーザー名(メールアドレス)、ハッシュタイプを示す識別子($lastpass$)、パスワード導出関数 (PBKDF2) の反復回数、ソルト、そして実際のハッシュ値などがエンコードされています。

出力結果をファイルに保存する: 通常、このハッシュ文字列を直接ターミナルで見るだけでなく、ファイルに保存して後でJohn the Ripperに渡します。リダイレクト(>)を使うと簡単です。

./lastpass2john.py [キャッシュファイルのパス] > lastpass_hash.txt

これで、lastpass_hash.txt というファイルに抽出されたハッシュ文字列が保存されます。

エラーと対処法

  • ファイルが見つからない: パスが間違っているか、ファイルが存在しない可能性があります。パスを再確認してください。
  • ファイル形式が非対応: lastpass2john が解析できない形式のキャッシュファイルである可能性があります。John the Ripper (bleeding-jumbo) を最新版にアップデートすると対応される場合があります。また、指定したファイルが本当にLastPassのキャッシュファイルか確認してください。
  • Pythonのエラー: Pythonのバージョンが古い、または必要なライブラリ (例: pycryptodome) が不足している場合に発生することがあります。JtR のコンパイル時に依存関係が解決されているか確認し、必要であれば pip install pycryptodome などでライブラリを追加してみてください。
  • ハッシュが出力されない: キャッシュファイルが破損している、空である、またはパスワード情報が含まれていない可能性があります。

John the Ripper でハッシュをクラックする

lastpass2john でハッシュを抽出しファイル(例: lastpass_hash.txt)に保存したら、次はいよいよ John the Ripper 本体を使ってマスターパスワードのクラッキングを試みます。

John the Ripper には様々なクラッキングモードがありますが、ここでは代表的なものをいくつか紹介します。

1. シンプルモード (Single Crack Mode)

John the Ripper が最初に試みるデフォルトのモードの一つです。ハッシュファイルに含まれるユーザー名や、一般的な変形(例: user -> user1, User, user123 など)をパスワード候補として試します。意外と単純なパスワードはこのモードで発見されることがあります。

./john lastpass_hash.txt

2. 辞書モード (Wordlist Mode)

最も一般的に使われるモードの一つです。パスワード候補がリストアップされたファイル(辞書ファイル)を指定し、そのリストにある単語を順番に試します。強力な辞書ファイル(例えば rockyou.txt など)を使うことで、よく使われるパスワードやフレーズを効率的に試すことができます。

# rockyou.txt を辞書として使用する例
./john --wordlist=/path/to/rockyou.txt lastpass_hash.txt

/path/to/rockyou.txt は、rockyou.txt ファイルが実際に保存されているパスに置き換えてください。rockyou.txt は非常に有名な辞書ファイルで、多くのLinuxディストリビューションに含まれていたり、インターネット上で見つけることができます(ただし、ダウンロード元の信頼性には注意してください)。

辞書モードでは、単語をそのまま試すだけでなく、ルール(--rules オプション)を適用して単語を変化させる(例: 大文字小文字変換、数字や記号の追加など)ことで、より複雑なパスワードも発見できる可能性が高まります。

# デフォルトのルールを適用
./john --wordlist=/path/to/rockyou.txt --rules lastpass_hash.txt

3. インクリメンタルモード (Incremental Mode)

ブルートフォース(総当たり)攻撃に近いモードです。指定された文字セット(例: すべての小文字アルファベット、数字、記号など)を使って、可能なすべての組み合わせを生成し、試します。非常に時間がかかる可能性がありますが、辞書に載っていないようなランダムなパスワードも見つけられる可能性があります。

# デフォルトの文字セット (All) で試行
./john --incremental lastpass_hash.txt

# 数字のみで試行する場合 (例)
./john --incremental=Digits lastpass_hash.txt

クラッキングの進行状況と結果

John the Ripper はクラッキングの実行中に進行状況を表示します。Ctrl+C で中断しても、進捗は自動的に john.rec ファイルに保存され、次回同じコマンドを実行すると中断したところから再開できます。

パスワードが見つかった場合、John the Ripper はそれを表示します。後でクラックされたパスワードを確認するには、--show オプションを使用します。

./john --show lastpass_hash.txt

出力形式は以下のようになります。

user@example.com:FoundPassword123: ... (その他の情報) ...

最初のコロン (:) までがユーザー名、次のコロンまでが発見されたパスワードです。

注意: LastPass のマスターパスワードは、PBKDF2 という鍵導出関数を用いて強力にハッシュ化されており、特に反復回数(iterations)が多く設定されている場合(最近の推奨値は100,000回以上)、クラッキングには非常に長い時間がかかることがあります。強力なGPUを使用しても、複雑なマスターパスワードを破ることは現実的な時間内では困難な場合が多いです。これは、LastPassのセキュリティ設計の重要な部分です。

セキュリティ上の考慮事項と倫理

lastpass2john や John the Ripper のようなツールは、非常に強力であり、その使用には重大な責任が伴います。これらのツールについて学ぶことは、セキュリティ防御の観点からも重要ですが、悪用は絶対に避けなければなりません。

法的・倫理的な側面

  • 許可なきアクセスは違法: 自分自身のアカウントや、明示的に許可を得たシステム以外に対してこれらのツールを使用することは、多くの国で不正アクセス禁止法などの法律に違反し、犯罪となります。
  • 目的の正当性: 使用目的は、自身のパスワード強度の評価、忘れたパスワードの回復(自身のアカウントに限る)、または許可されたセキュリティ監査やペネトレーションテストに限定されるべきです。
  • データの取り扱い: 他者のキャッシュファイルやハッシュデータを不正に入手し、解析することはプライバシーの侵害であり、法的に罰せられる可能性があります。

セキュリティ強化への活用

これらのツールから得られる知識は、自身のセキュリティを強化するために役立てることができます。

  • マスターパスワードの重要性: LastPassのようなサービスでは、マスターパスワードが最終的な防御線となります。lastpass2john と JtR の存在は、マスターパスワードがいかに強固であるべきかを強調しています。長く、複雑で、ユニークなマスターパスワードを設定することが極めて重要です。可能であれば、パスフレーズ(複数の単語を組み合わせたもの)の使用も検討しましょう。
  • 反復回数の確認: LastPass のアカウント設定では、PBKDF2 の反復回数を調整できます。この回数が多いほど、ブルートフォース攻撃に対する耐性が向上します。推奨されている値(例: 100,100回以上)に設定されているか確認しましょう。
  • 多要素認証 (MFA) の利用: マスターパスワードが万が一漏洩した場合でも、MFAを設定していれば、不正ログインを防ぐための追加の防御層となります。LastPassアカウントでは必ずMFAを有効にすることを強く推奨します。
  • 定期的なパスワード監査: 自身のパスワード(特にマスターパスワード)が、既知の侵害リストに含まれていないか、また、推測されやすいものでないかを定期的に確認することも有効です。

2022年のLastPassのインシデントは、パスワードマネージャーを利用していても、マスターパスワードの管理とアカウント設定(反復回数、MFA)がいかに重要であるかを改めて示しました。暗号化された保管庫データが漏洩した場合、攻撃者はオフラインで時間をかけてマスターパスワードのクラッキングを試みる可能性があるため、これらの対策は不可欠です。

まとめ

lastpass2john は、John the Ripper スイートの一部として、LastPass のオフラインキャッシュからマスターパスワードのハッシュ情報を抽出し、JtR で解析可能な形式に変換するツールです。このツールを使うことで、LastPass のマスターパスワードに対するブルートフォース攻撃や辞書攻撃が技術的にどのように機能するかを理解できます。

この記事では、John the Ripper と lastpass2john の概要、インストール方法、LastPass キャッシュファイルの場所の特定、lastpass2john の使い方、そして抽出したハッシュを JtR でクラックする基本的な手順について解説しました。

重要なのは、これらのツールは強力であるため、倫理的かつ合法的な範囲内で、正当な目的(自己評価、パスワード回復、許可された監査)にのみ使用することです。不正な目的での使用は絶対に避けなければなりません。

lastpass2john のようなツールの存在を知ることは、LastPass や他のパスワードマネージャーを利用する上で、マスターパスワードの強度、PBKDF2 の反復回数設定、多要素認証の有効化といったセキュリティ対策の重要性を再認識する良い機会となります。特に、過去のセキュリティインシデントを踏まえ、自身のデジタル資産を守るための対策を怠らないようにしましょう。 💪🔒

参考情報

コメント

タイトルとURLをコピーしました