ネットワークセキュリティの分野では、設定ファイルに含まれるパスワードの保護が非常に重要です。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 cisco2john
や find / -name cisco2john*
などのコマンドでスクリプトの場所を確認できます。
cisco2john
や John the Ripper の使用は、必ず許可されたシステムに対してのみ行ってください。不正アクセスや許可のないシステムへのパスワードクラッキングは法律で禁止されています。
Cisco パスワードタイプと cisco2john の対応
Cisco デバイスは、歴史的にいくつかの異なる方法でパスワードを保存してきました。これらの「タイプ」は、セキュリティレベルや使用されるアルゴリズムが異なります。cisco2john
はこれらのうち、ハッシュ化された形式を JtR で扱えるように変換します。以下に主なタイプを示します。
タイプ | 説明 | アルゴリズム | セキュリティ | cisco2john の役割 |
---|---|---|---|---|
Type 0 | 平文パスワード | なし | 非常に低い (使用非推奨) | 特になし (そのまま読める) |
Type 7 | Vigenère 暗号による難読化 | Vigenère Cipher | 非常に低い (容易に復号可能) | 復号して平文パスワードを抽出可能 (JtR でクラックする対象ではない) |
Type 5 | ソルト付き MD5 ハッシュ | MD5 (Salted) | 中程度 (現代の計算能力では弱い可能性あり) | MD5 ハッシュを JtR 形式に変換 |
Type 4 | 初期の SHA256 実装 (問題あり) | SHA-256 (独自実装、非ソルト) | 低い (Type 5 より弱いとされた) | SHA-256 ハッシュを JtR 形式に変換 (現在非推奨) |
Type 8 | PBKDF2 を用いた SHA-256 ハッシュ | PBKDF2-SHA256 (Salted, 20K iterations) | 高い | PBKDF2 ハッシュを JtR 形式に変換 |
Type 9 | scrypt を用いたハッシュ | scrypt (Salted, 16384 iterations) | 非常に高い (メモリハード) | scrypt ハッシュを JtR 形式に変換 |
Type 6 | AES 暗号化 (マスターキーが必要) | 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-config
や startup-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 形式に変換して標準出力に書き出します。
実践的な例: ハッシュの抽出とフォーマット
実際に 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
考慮事項とベストプラクティス
- 設定ファイルの取得: 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 など)を適用して、ネットワークインフラストラクチャ全体を保護することです。🛡️
参考情報
-
John the Ripper 公式サイト:
https://www.openwall.com/john/
John the Ripper のソースコード、バイナリ、ドキュメントなどが提供されています。
-
NSA – Cisco Password Types: Best Practices (Feb 2022):
https://media.defense.gov/2022/Feb/17/2002940929/-1/-1/0/CTR_CISCO_PASSWORD_TYPES_BEST_PRACTICES.PDF
NSA による Cisco パスワードタイプのベストプラクティスに関するガイダンスです。
コメント