cisco2john の使い方:Cisco デバイスのパスワードハッシュを解析する

ネットワークセキュリティの分野では、設定ファイルに含まれるパスワードの保護が非常に重要です。Cisco デバイスは広く使用されており、その設定ファイルには様々な形式でパスワードが保存されています。これらのパスワードの強度をテストしたり、忘れられたパスワードを回復したりする必要がある場合、John the Ripper (JtR) という強力なパスワードクラッキングツールが役立ちます。しかし、JtR が Cisco 固有のハッシュ形式を直接理解できるわけではありません。ここで cisco2john の出番です。

cisco2john は、Cisco の設定ファイルからパスワードハッシュを抽出し、John the Ripper が解析できる形式に変換するためのユーティリティスクリプトです。通常、John the Ripper の “Jumbo” バージョン (コミュニティ強化版) に同梱されています。このブログ記事では、cisco2john の基本的な使い方と、Cisco デバイスで一般的に使用される様々なパスワードタイプについて詳しく解説します。

cisco2john の入手方法

cisco2john は、独立したツールとして提供されることは少なく、通常は John the Ripper (Jumbo) の一部として配布されています。John the Ripper は、多くの Linux ディストリビューション (Kali Linux など) のリポジトリに含まれているか、公式ウェブサイトからソースコードやバイナリをダウンロードできます。

John the Ripper (Jumbo) をインストールすると、通常 /usr/sbin//usr/bin/、または John the Ripper のインストールディレクトリ内の run ディレクトリなどに cisco2john (多くの場合、Perl スクリプト cisco2john.pl または Python スクリプト) が配置されます。

例えば、Debian/Ubuntu ベースのシステムでは、以下のコマンドでインストールできる場合があります。

sudo apt update
sudo apt install john

インストール後、which cisco2johnfind / -name cisco2john* などのコマンドでスクリプトの場所を確認できます。

注意: cisco2john や John the Ripper の使用は、必ず許可されたシステムに対してのみ行ってください。不正アクセスや許可のないシステムへのパスワードクラッキングは法律で禁止されています。

Cisco パスワードタイプと cisco2john の対応

Cisco デバイスは、歴史的にいくつかの異なる方法でパスワードを保存してきました。これらの「タイプ」は、セキュリティレベルや使用されるアルゴリズムが異なります。cisco2john はこれらのうち、ハッシュ化された形式を JtR で扱えるように変換します。以下に主なタイプを示します。

タイプ説明アルゴリズムセキュリティcisco2john の役割
Type 0平文パスワードなし非常に低い (使用非推奨)特になし (そのまま読める)
Type 7Vigenère 暗号による難読化Vigenère Cipher非常に低い (容易に復号可能)復号して平文パスワードを抽出可能 (JtR でクラックする対象ではない)
Type 5ソルト付き MD5 ハッシュMD5 (Salted)中程度 (現代の計算能力では弱い可能性あり)MD5 ハッシュを JtR 形式に変換
Type 4初期の SHA256 実装 (問題あり)SHA-256 (独自実装、非ソルト)低い (Type 5 より弱いとされた)SHA-256 ハッシュを JtR 形式に変換 (現在非推奨)
Type 8PBKDF2 を用いた SHA-256 ハッシュPBKDF2-SHA256 (Salted, 20K iterations)高いPBKDF2 ハッシュを JtR 形式に変換
Type 9scrypt を用いたハッシュscrypt (Salted, 16384 iterations)非常に高い (メモリハード)scrypt ハッシュを JtR 形式に変換
Type 6AES 暗号化 (マスターキーが必要)AES特殊 (マスターキー依存)直接の対象外 (マスターキーの解析が必要)

cisco2john は主に、Type 5, 4, 8, 9 のようなハッシュ化されたパスワードを抽出し、JtR が認識できるフォーマット (例: $cisco4$..., $cisco5$..., $8$...$, $9$...$) に変換する役割を担います。また、実行時に Type 7 パスワードを見つけた場合、それを復号して標準エラー出力などに出力する機能も持つことがあります。

セキュリティの観点からは、Type 0 や Type 7 は絶対に使用せず、可能であれば Type 8 または Type 9 を使用することが強く推奨されます。Type 5 も、現代のハードウェアでは比較的短時間でクラックされるリスクが高まっています。

cisco2john の基本的な使い方

cisco2john の基本的な使い方は非常にシンプルです。Cisco の設定ファイル(通常は running-configstartup-config の内容を保存したもの)を引数として渡します。

# Perl スクリプトの場合
perl cisco2john.pl <cisco_config_file> > hashes.txt
# Python スクリプトや実行可能ファイルの場合
cisco2john <cisco_config_file> > hashes.txt

ここで、

  • <cisco_config_file>: 解析したい Cisco の設定ファイルへのパス。
  • > hashes.txt: JtR が読み込める形式に変換されたハッシュを保存する出力ファイル。

cisco2john は設定ファイル全体をスキャンし、パスワードに関連する行(例: enable secret 5 ..., username admin secret 9 ... など)を見つけ出し、それらを JtR 形式に変換して標準出力に書き出します。

ヒント: Type 7 パスワードの処理

cisco2john の一部の実装では、Type 7 パスワードを発見した場合、復号した平文パスワードを標準エラー出力(stderr)に出力することがあります。これは、Type 7 がクラック対象ではなく、容易に復元できる情報だからです。必要に応じて、標準エラー出力を別のファイルにリダイレクトして保存することもできます。
cisco2john <cisco_config_file> > hashes.txt 2> decrypted_type7.txt

実践的な例: ハッシュの抽出とフォーマット

実際に Cisco の設定ファイルの一部を cisco2john に処理させてみましょう。以下のような設定が含まれる my_cisco_config.txt ファイルがあるとします。

!
hostname RouterA
!
enable secret 5 $1$mERr$lGUw6lf9.XyQxAMCj7pZt/
!
username alice secret 9 $9$5NlFp7Z4q.wO1K$/9aBcDeFgHiJkLmNoPqRsTuVwXyZaB0cDeFgHiJkL1
username bob password 7 0832584F0A0A0A
username carol secret 8 $8$5NlFp7Z4q.wO1K$AbCdEfGhIjKlMnOpQrStUvWxYzAbCdEfGhIjKlMnOpQ1
!
line con 0 password 7 121A0A1D1C1F login
!
end

このファイルに対して cisco2john を実行します。

cisco2john my_cisco_config.txt > cisco_hashes.txt

出力ファイル cisco_hashes.txt には、以下のような JtR 形式のハッシュが含まれているはずです(実際のハッシュ値は異なります)。

enable_secret_5:RouterA:$1$mERr$lGUw6lf9.XyQxAMCj7pZt/
alice:$9$5NlFp7Z4q.wO1K$/9aBcDeFgHiJkLmNoPqRsTuVwXyZaB0cDeFgHiJkL1:RouterA
carol:$8$5NlFp7Z4q.wO1K$AbCdEfGhIjKlMnOpQrStUvWxYzAbCdEfGhIjKlMnOpQ1:RouterA

注目すべき点:

  • 各行は ユーザー名/識別子:ハッシュ[:ホスト名など] の形式になっています。
  • Type 5 ハッシュは $1$... という形式で出力されることがあります (これは標準的な MD5 crypt 形式です)。JtR はこれを `cisco-type5` または `md5crypt` フォーマットとして認識します。
  • Type 9 ハッシュは $9$... で始まります。JtR はこれを `cisco-type9` (または `scrypt`) フォーマットとして認識します。
  • Type 8 ハッシュは $8$... で始まります。JtR はこれを `cisco-type8` (または `pbkdf2-hmac-sha256`) フォーマットとして認識します。
  • ホスト名 (`RouterA`) がハッシュの一部として含まれることがあります。これは、特に Type 8 や Type 9 で、ホスト名がソルトの一部として使われる場合があるためです。
  • Type 7 パスワード (`bob` と `line con 0` のもの) は、この出力ファイルには含まれません。もし cisco2john が Type 7 を復号する機能を持っていれば、標準エラー出力などに平文が表示された可能性があります。

John the Ripper でのクラック実行

cisco2john で生成したハッシュファイル (cisco_hashes.txt) を使って、John the Ripper でパスワードクラックを試みることができます。最も一般的な方法は、辞書ファイルを使用する攻撃です。

john --wordlist=<path_to_wordlist> cisco_hashes.txt

ここで、

  • --wordlist=<path_to_wordlist>: パスワード候補のリストが含まれる辞書ファイルへのパスを指定します (例: rockyou.txt など)。
  • cisco_hashes.txt: cisco2john で生成したハッシュファイル。

JtR は自動的にハッシュのタイプを検出し、適切なアルゴリズムで辞書内の単語を試していきます。クラックに成功すると、以下のように表示されます。

Loaded 3 password hashes with 3 different salts (cisco-type9 [scrypt $9$ Cisco IOS])
Cost 1 (N) = 16384
Cost 2 (r) = 1
Cost 3 (p) = 1
Will run 8 OpenMP threads
Press 'q' or Ctrl-C to abort, almost any other key for status
password123 (alice)
... (他のハッシュに対する試行が続く) ...

クラックされたパスワードは、デフォルトでは ~/.john/john.pot (または JtR の実行ディレクトリにある john.pot) というファイルに保存されます。後でクラック済みのパスワードを確認するには、以下のコマンドを使用します。

john --show cisco_hashes.txt

これにより、cisco_hashes.txt 内の各ハッシュに対応するクラック済みのパスワードが表示されます。

alice:password123:RouterA
enable_secret_5:secretword:RouterA
carol:DifficultPass!::RouterA
3 password hashes cracked, 0 left
パフォーマンスに関する注意: Type 8 (PBKDF2) や Type 9 (scrypt) は、意図的に計算コストが高く設計されています。特に Type 9 は多くのメモリを必要とするため、これらのタイプのハッシュをクラックするには、強力な CPU や GPU、そして多くの時間が必要になる場合があります。Type 5 (MD5) は比較的速くクラックできますが、それでも十分に長い複雑なパスワードであれば安全です。

考慮事項とベストプラクティス

  • 設定ファイルの取得: Cisco デバイスから設定ファイル (running-config または startup-config) を安全に取得し、ローカルマシンに保存する必要があります。TFTP や SCP などのセキュアな方法を使用してください。
  • 法的・倫理的側面: パスワードクラッキングツールは、自身が管理権限を持つシステム、または明示的な許可を得たシステムに対してのみ使用してください。他者のシステムへの不正なアクセスや解析は違法です。
  • 強力なパスワードの使用: cisco2john と JtR を使用してパスワードの強度をテストすることは、セキュリティ監査の一環として有効です。しかし、最も重要なのは、最初から推測困難で十分に長い、複雑なパスワードを設定することです。特に Type 8 や Type 9 を使用している場合でも、弱いパスワードは危険です。
  • 最新のハッシュアルゴリズムへ移行: 可能であれば、古い Type 5 や Type 7 から、より強力な Type 8 または Type 9 へ移行することを強く推奨します。2013年以降に開発された Cisco IOS/IOS XE ソフトウェアでは、Type 8 や Type 9 が利用可能です。
  • 多要素認証 (MFA): パスワードだけに頼らず、可能であれば RADIUS や TACACS+ と連携した多要素認証を導入することが、デバイスのセキュリティを大幅に向上させます。

まとめ

cisco2john は、Cisco デバイスの設定ファイルに含まれるパスワードハッシュを、強力なパスワードクラッキングツールである John the Ripper で解析可能な形式に変換するための不可欠なユーティリティです。Type 5, 8, 9 などのハッシュ形式に対応しており、セキュリティ監査やパスワードリカバリのプロセスにおいて重要な役割を果たします。

このツールを使うことで、ネットワークデバイスに設定されているパスワードの強度を評価し、脆弱なパスワードを発見することができます。しかし、ツールの使用は常に倫理的かつ法的な範囲内で行う必要があり、最終的な目標は、強力なパスワードポリシーと最新のセキュリティ機能(Type 8/9 ハッシュ、MFA など)を適用して、ネットワークインフラストラクチャ全体を保護することです。

参考情報

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です