ネットワーク認証クラッキングツールNcrackの使い方徹底解説

現代のネットワーク環境において、セキュリティは非常に重要な要素です。不正アクセスや情報漏洩を防ぐためには、自社のシステムがどのような攻撃に晒される可能性があるのかを理解し、対策を講じることが不可欠です。その一環として、パスワード強度をテストするツールが存在します。Ncrack(エヌクラック)は、そのような目的で使用される強力なツールの一つです。

この記事では、Ncrackの基本的な概念から、インストール方法、使い方、そして注意点までを詳しく解説していきます。セキュリティ担当者やネットワーク管理者はもちろん、セキュリティ技術に興味のある方にも役立つ情報を提供します。😊

⚠️ 注意: Ncrackは強力なツールですが、その使用は必ず法的に許可された範囲、つまり自身が管理するシステムや、明示的な許可を得たシステムに対してのみ行ってください。許可なく他者のシステムに対して使用することは、不正アクセス行為として法的に罰せられる可能性があります。

Ncrackとは? 🤔

Ncrackは、高速なネットワーク認証クラッキングツールです。Nmapプロジェクトの一部として開発されており、ネットワーク上の様々なサービス(SSH, RDP, FTP, Telnet, HTTP(S), SMB, POP3, IMAPなど多数)に対して、ユーザー名とパスワードの組み合わせを試行し、脆弱な認証情報を見つけ出すことを目的としています。

主な目的は、企業や組織が自社のネットワークセキュリティを評価するため、つまりホストやネットワーク機器に設定されているパスワードが推測されやすいものでないか(弱いパスワードでないか)を積極的にテストすることにあります。セキュリティ専門家も、クライアントのシステム監査を行う際にNcrackを利用することがあります。

Ncrackは以下のような特徴を持っています。

  • 高速性: 複数のホストやサービスに対して並列で認証試行を行うことで、高速なスキャンを実現します。
  • モジュール性: 新しいプロトコルやサービスに対応するためのモジュールを簡単に追加できる構造になっています。
  • 柔軟性: Nmapライクなコマンドラインインターフェースを持ち、ネットワーク状況に応じて動作を調整する動的なエンジンを備えています。タイミングテンプレートや詳細なオプションにより、攻撃を細かく制御できます。
  • Nmapとの連携: Nmapのスキャン結果(XML形式やNormal形式)を入力として利用でき、検出されたサービスに対して効率的に認証クラックを試みることができます。

💡 補足: Ncrackは2009年のGoogle Summer of Codeプロジェクトとして開発が始まりましたが、2019年のバージョン0.7リリース以降、活発な開発は行われておらず、Nmap開発チームの注力はNmap Scripting Engine (NSE) に含まれるブルートフォーススクリプトに移っています。しかし、Ncrackは依然として特定の目的には有用なツールです。

Ncrackのインストール 💻

Ncrackは、Linux、*BSD、Windows、Mac OS Xなど、多くのプラットフォームで利用可能です。

Linux (Debian/Ubuntu系)

DebianやUbuntu、およびそれらをベースにしたディストリビューション(Kali Linuxなど)では、aptパッケージマネージャを使用して簡単にインストールできます。


sudo apt update
sudo apt install ncrack
      

Linux (Red Hat/Fedora系)

FedoraやCentOS Stream、RHELなどでは、dnfまたはyumを使用します。


sudo dnf install ncrack
# または
sudo yum install ncrack
      

Mac OS X

Homebrewを使用している場合、以下のコマンドでインストールできます(利用可能な場合)。


brew install ncrack
      

もしHomebrewで利用できない場合は、公式サイトからソースコードをダウンロードしてコンパイルするか、Mac OS X用のインストーラを使用する必要があります。

Windows

Windows用のインストーラがNmapの公式サイト(Ncrackセクション)から提供されています。Nmapをインストールする際に、Ncrackも同時にインストールするオプションが含まれている場合があります。 Ncrack公式サイトを確認してください。 また、Windows Subsystem for Linux (WSL) を使用してLinux環境を構築し、その上でLinux版のNcrackをインストールすることも可能です。

ソースコードからのコンパイル

上記の方法でインストールできない場合や、最新の開発版を使用したい場合は、ソースコードからコンパイルします。公式サイトやGitHubリポジトリからソースコードを入手し、通常は以下の手順でコンパイル・インストールします(依存関係ライブラリが必要になる場合があります)。


# GitHubから最新版を取得する場合
git clone https://github.com/nmap/ncrack.git
cd ncrack
./configure
make
sudo make install
      

コンパイルには、開発ツール(gcc, makeなど)や、依存ライブラリ(OpenSSLのヘッダファイルなど)が必要になる場合があります。エラーメッセージに従って必要なパッケージをインストールしてください。

インストール確認

インストール後、以下のコマンドを実行してバージョン情報が表示されれば成功です。


ncrack -V
      

Ncrackの基本的な使い方 🚀

Ncrackの基本的な構文は以下の通りです。


ncrack [オプション] {ターゲットとサービスの指定}
      

ターゲットとサービスの指定方法はいくつかありますが、最も基本的なのは `[サービス名://]ターゲット[:ポート番号]` という形式です。サービス名を省略すると、ポート番号から推測されます(例: 22番ならssh)。

ターゲットの指定方法

  • 単一ホスト: IPアドレス (例: `192.168.1.1`) またはホスト名 (例: `scanme.nmap.org`)
  • 複数ホスト: スペース区切りで複数指定 (例: `192.168.1.1 192.168.1.2`)
  • CIDR表記: ネットワークアドレス/ビット数 (例: `192.168.1.0/24`)
  • 範囲指定: IPアドレスのオクテットに範囲を指定 (例: `192.168.1.1-100` や `192.168.1,3,5.1`)
  • リストファイルからの読み込み (`-iL`): ホスト名やIPアドレスが記述されたファイルを指定。
  • ncrack -iL target_list.txt ssh://192.168.1.1
  • Nmap XML出力からの読み込み (`-iX`): Nmapの `-oX` オプションで保存したXMLファイルを指定。ファイル内のホストと開いているポート(Ncrackが対応するサービス)を自動的にターゲットにします。
  • ncrack -iX nmap_scan.xml
  • Nmap Normal出力からの読み込み (`-iN`): Nmapの `-oN` オプションで保存したファイルを指定。
  • ncrack -iN nmap_scan.txt
  • 除外指定 (`–exclude`, `–excludefile`): 特定のホストやネットワークをスキャン対象から除外します。
  • ncrack 192.168.1.0/24 --exclude 192.168.1.1,192.168.1.100

サービスの指定方法

  • ターゲットの後に追加: `ターゲット:ポート番号` または `サービス名://ターゲット:ポート番号` (例: `192.168.1.1:22`, `ssh://192.168.1.1`)
  • `-p` オプション: サービス名またはポート番号のリストを指定します。ターゲット指定でポートが指定されていない場合に、このオプションで指定されたサービス/ポートに対して試行します。
  • ncrack 192.168.1.1 192.168.1.2 -p ssh,ftp,2121

認証情報の指定方法

  • 単一ユーザー名/パスワード (`–user`, `–pass`): カンマ区切りで直接指定します。
  • ncrack --user admin,root --pass password,123456 192.168.1.1:22
  • ファイルからの読み込み (`-U`, `-P`): ユーザー名リスト、パスワードリストが記述されたファイルをそれぞれ指定します。これが最も一般的な使い方です。ファイル内では1行に1つのユーザー名/パスワードを記述します。
  • ncrack -U users.txt -P passwords.txt 192.168.1.1:22
  • 組み合わせ (`-C`): `ユーザー名:パスワード` の形式で記述されたコンボファイルを指定します。
  • パスワードなし/ユーザー名と同じ (`-e`): `-e n` でパスワードなし、`-e s` でパスワード=ユーザー名を試行します。
  • 試行順序 (`–passwords-first`, `–pairwise`):
    • デフォルトでは、1つのユーザー名に対してパスワードリスト全体を試します。
    • `–passwords-first`: 1つのパスワードに対してユーザー名リスト全体を試します。
    • `–pairwise`: ユーザー名リストとパスワードリストの同じ行にある組み合わせのみを試します(リストの行数が一致している必要があります)。

基本的な出力オプション

  • `-v` (Verbose): 実行中の詳細情報を表示します。複数回指定するとさらに詳細になります (`-vv`, `-vvv`)。
  • `-d[level]` (Debug): デバッグ情報を表示します。レベルを上げるほど詳細になります (例: `-d`, `-d2`)。
  • `-oN ` (Output Normal): 結果を人間が読みやすい形式でファイルに保存します。
  • `-oX ` (Output XML): 結果をXML形式でファイルに保存します。他のツールとの連携に適しています。
  • `-oA ` (Output All): Normal形式 (`.ncrack`) とXML形式 (`.xml`) の両方で保存します。
  • `–append-output` : 出力ファイルが存在する場合、上書きせずに追記します。
  • `–log-errors` : エラーや警告をNormal形式の出力ファイルにも記録します。

簡単な実行例

ローカルホストのSSHサービス(ポート22)に対して、ユーザー名`root`、パスワード`password`を試す:


ncrack -v --user root --pass password localhost:22
      

IPアドレス `192.168.1.10` のFTPサービス(ポート21)に対して、`users.txt` と `passwords.txt` を使ってブルートフォース攻撃を行う:


ncrack -v -U users.txt -P passwords.txt 192.168.1.10:21
      

Nmapのスキャン結果 `scan.xml` を読み込み、検出されたSSHとRDPサービスに対してパスワードリスト `common_pass.txt` を試す:


ncrack -v -iX scan.xml -P common_pass.txt -p ssh,rdp
      

Ncrackの高度な使い方とオプション 🛠️

Ncrackは、より詳細な制御や効率的なスキャンを行うための高度なオプションを提供しています。

タイミングとパフォーマンス (`-T`, Connection Options)

Ncrackは、ネットワークの応答性やターゲットシステムへの負荷を考慮して、スキャンの速度や攻撃性を調整する機能を持っています。

  • `-T<0-5>` または `-T `: 事前に定義されたタイミングテンプレートを指定します。攻撃性の低い順に以下の名前が対応します:
    • `0` or `paranoid`: 非常に低速。IDS回避を試みる。
    • `1` or `sneaky`: 低速。IDS回避を試みる。
    • `2` or `polite`: 低速だが、通常の利用より少し速い。帯域幅をあまり消費しない。
    • `3` or `normal`: デフォルト。ネットワークの状況に応じて動的に調整。
    • `4` or `aggressive`: 高速。良好なネットワーク環境を想定。
    • `5` or `insane`: 超高速。非常に高速なネットワーク環境またはローカルでのテスト向け。失敗率が上がる可能性あり。
  • `–connection-limit ` (または `CL=`): 同時に確立する接続の最大数を指定します。デフォルトはテンプレート(`-T`)によって決まります。
  • `cl=` (Minimum Connection Limit): 同時に確立する接続の最小数を指定します。
  • `at=` (Authentication Tries): 1つの接続あたりに試行する認証の回数を指定します。
  • `cd= 各接続試行の間に入れる遅延時間を指定します(例: `1s`, `500ms`)。
  • `cr=` (Connection Retries): 接続失敗時に再試行する最大回数を指定します。
  • `to= サービスへのクラッキング試行全体のタイムアウト値を指定します。
  • `–stealthy-linear`: 各ホストに対して1接続ずつ順番に試行するモード。他のタイミングオプションを上書きします。

これらのタイミングオプションは、グローバル (`-g` オプション)、モジュールごと (`-m` オプション)、またはターゲットホストごとに指定でき、より具体的な指定が優先されます。

例: Aggressiveテンプレートを使用し、最大同時接続数を50に設定


ncrack -T4 --connection-limit 50 -U users.txt -P passwords.txt 192.168.1.0/24 -p ssh
      

サービス固有オプション (`-m`, `-g`)

特定のサービスモジュールや、スキャン全体に対して、より詳細なオプションを指定できます。タイミングオプション (`cl`, `CL`, `at`, `cd`, `cr`, `to`) に加え、以下のようなオプションがあります。

  • `ssl` : SSL/TLS暗号化を有効にします (例: `pop3s` の代わりに `pop3` を指定し `ssl` オプションを使う)。
  • `path=` : HTTP(S)やFTPなどで、認証が必要なパスを指定します。
  • `db=` : RDBMS (MySQL, PostgreSQLなど) で接続するデータベース名を指定します。
  • `domain=` : SMBやRDPなどで、認証に使用するドメイン名を指定します。

これらのオプションは、`-m :

例: SMBサービスに対してドメイン`CORP`を指定し、最大同時接続数を10に制限


ncrack -U users.txt -P passwords.txt 192.168.10.0/24 -p smb -m smb:domain=CORP,CL=10
      

例: ホスト `10.0.0.1` のSSHに対して最小接続数5、ホスト `10.0.0.2` のFTPに対して最大接続数2、全体としてタイムアウトを30秒に設定


ncrack ssh://10.0.0.1:22,cl=5 ftp://10.0.0.2:21,CL=2 -U users.txt -P passwords.txt -g to=30s
      

その他の便利なオプション

  • `-f` : 1つのサービスに対して認証情報が1つ見つかった時点で、そのサービスのクラッキングを終了します。
  • `-6` : IPv6でのクラッキングを有効にします。
  • `-sL` または `–list`: 実際にクラッキングを行わず、ターゲットとなるホストとサービスのリストを表示します。
  • `–resume ` : 以前に `–save` オプションで保存したセッションを再開します。大規模なスキャンが中断された場合に便利です。
  • `–save ` : スキャンセッションを定期的にファイルに保存し、`–resume` で再開できるようにします。デフォルトでは `ncrack.restore` というファイル名で保存されます。
  • `–datadir ` : Ncrackのデータファイル(サービス定義など)が格納されているディレクトリを指定します。
  • `–proxy ` : 指定されたプロキシ(例: `http://proxy.example.com:8080`, `socks4://127.0.0.1:9050`)を経由して接続します。
  • `-h` : ヘルプメッセージを表示します。

対応モジュール一覧

Ncrackは多くのプロトコルに対応しています。以下はその一部です(バージョンによって異なる場合があります)。

モジュール名 デフォルトポート 説明
SSH22Secure Shell
RDP3389Remote Desktop Protocol
FTP21File Transfer Protocol
Telnet23Telnet Protocol
HTTP(S)80, 443HyperText Transfer Protocol (Basic/Digest/NTLM Auth)
WordPress80, 443WordPress XML-RPC authentication
POP3(S)110, 995Post Office Protocol version 3
IMAP(S)143, 993Internet Message Access Protocol
CVS2401Concurrent Versions System
SMB445Server Message Block (Windows Shares)
VNC5900+Virtual Network Computing
SIP5060, 5061Session Initiation Protocol
Redis6379Redis key-value store
PostgreSQL5432PostgreSQL Database
MQTT1883, 8883MQ Telemetry Transport
MySQL3306MySQL Database
MSSQL1433Microsoft SQL Server
MongoDB27017MongoDB Database
Cassandra9042Apache Cassandra Database
WinRM5985, 5986Windows Remote Management
OWA80, 443Outlook Web App
DICOM104, 11112Digital Imaging and Communications in Medicine

実践的な使用例 🧪

ここでは、特定のサービスに対するNcrackの使用例をいくつか示します。これらのコマンドは、適切な許可を得た環境でのみ実行してください。

SSH ブルートフォース

IPアドレス `192.168.1.55` のSSHサービスに対し、ユーザーリスト `ssh_users.txt` とパスワードリスト `rockyou.txt` を使用して攻撃。詳細表示 (`-v`) と Aggressive テンプレート (`-T4`) を使用。


ncrack -v -T4 -U ssh_users.txt -P /usr/share/wordlists/rockyou.txt.gz 192.168.1.55:22
# rockyou.txt が gzip 圧縮されている場合、多くの Linux システムでは自動的に展開して読み込みます。
# 展開が必要な場合は zcat /usr/share/wordlists/rockyou.txt.gz > rockyou.txt のように事前に展開してください。
      

RDP ブルートフォース

Windowsホスト `10.10.0.20` のRDPサービスに対し、ユーザー名 `Administrator` と `Guest`、パスワードリスト `common_pass.txt` を使用して攻撃。ドメイン `TESTDOMAIN` を指定し、接続試行の間隔を500ミリ秒 (`cd=500ms`) に設定。


ncrack -v --user Administrator,Guest -P common_pass.txt rdp://10.10.0.20 -m rdp:domain=TESTDOMAIN,cd=500ms
      

リストファイル `rdp_hosts.txt` に含まれるホスト群に対してRDP攻撃を行う例:


ncrack -v -iL rdp_hosts.txt -U common_users.txt -P top1000_pass.txt -p rdp CL=1
# CL=1 は RDP の場合、ロックアウトを避けるために同時接続数を1に制限する例
      

FTP ブルートフォース

FTPサーバー `ftp.example.com` に対し、ユーザー名 `anonymous` でパスワードなし (`-e n`) と、ユーザーリスト `ftp_users.txt` とパスワードリスト `ftp_pass.txt` の組み合わせを試行。


# Anonymousログイン試行
ncrack -v -u anonymous -e n ftp.example.com:21

# 辞書攻撃
ncrack -v -U ftp_users.txt -P ftp_pass.txt ftp.example.com:21
      

SMB ブルートフォース

ネットワーク `192.168.100.0/24` 内のホストのSMBサービス(ポート445)に対し、ユーザー名リスト `smb_users.txt` とパスワード `Password123` を試行。Polite テンプレート (`-T2`) を使用。


ncrack -v -T2 -U smb_users.txt --pass Password123 192.168.100.0/24 -p smb
      

Web 認証 (HTTP Basic/Digest)

Webサーバー `10.0.5.10` の `/admin` ディレクトリに対する Basic 認証を突破するために、ユーザーリスト `web_users.txt` と パスワードリスト `web_pass.txt` を使用。


ncrack -v -U web_users.txt -P web_pass.txt http://10.0.5.10 -m http:path=/admin
      

HTTPS の場合:


ncrack -v -U web_users.txt -P web_pass.txt https://secure.example.com
# または
ncrack -v -U web_users.txt -P web_pass.txt http://secure.example.com:443,ssl
      

複数のサービスとホスト

ホスト `server1` の SSH と、ネットワーク `10.1.1.0/24` の FTP に対し、共通のユーザーリストとパスワードリストを使用。結果を `results.ncrack` に保存。


ncrack -v -U common_users.txt -P common_pass.txt server1:22 10.1.1.0/24 -p ftp -oN results.ncrack
      

重要な考慮事項と倫理的利用 📜

Ncrackは強力なツールであるため、その使用には大きな責任が伴います。以下の点を十分に理解し、遵守することが極めて重要です。

法的・倫理的側面

  • 許可の取得: Ncrackを使用する前に、必ず対象システムの所有者または管理者から書面による明確な許可を得てください。許可なく他者のシステムにブルートフォース攻撃を仕掛けることは、不正アクセス禁止法などの法律に抵触し、刑事罰の対象となる可能性があります。これは、たとえテスト目的であっても同様です。
  • 目的の明確化: Ncrackは、あくまでセキュリティ評価や脆弱性診断の一環として、弱いパスワードを発見し、セキュリティを強化するために使用されるべきです。悪意のある目的(不正アクセス、情報窃取など)での使用は絶対に許されません。
  • 影響の考慮: ブルートフォース攻撃は、対象システムやネットワークに大きな負荷をかける可能性があります。サービス停止(DoS)を引き起こしたり、アカウントロックアウトを多発させたりするリスクがあります。テストを実施する際は、業務時間外に行う、低速なタイミングテンプレート (`-T0` や `-T1`) を使用する、対象範囲を限定するなど、影響を最小限に抑える配慮が必要です。

パスワードクラック対策

Ncrackのようなツールによる攻撃からシステムを守るためには、以下のような対策が有効です。

  • 強力なパスワードポリシー: 十分な長さ(例: 12文字以上)、大文字、小文字、数字、記号を組み合わせた複雑なパスワードの使用を強制し、辞書にある単語や単純なパターンを避けるように指導します。
  • アカウントロックアウトポリシー: 一定回数ログインに失敗したアカウントを一時的または恒久的にロックする機能を有効にします。これにより、ブルートフォース攻撃の効率を大幅に低下させることができます。
  • 多要素認証 (MFA): パスワードだけでなく、SMSコード、認証アプリ、物理キーなど、複数の認証要素を要求することで、パスワードが漏洩した場合でも不正アクセスを防ぎます。
  • アクセス制御と監視: 不要なサービスやポートはファイアウォールで閉鎖し、外部からのアクセスを必要最小限に制限します。また、ログイン試行のログを監視し、異常なパターン(短時間に大量のログイン失敗など)を検知する仕組み(IDS/IPS、SIEMなど)を導入します。
  • CAPTCHA: Webベースのログインフォームなどでは、人間とボットを区別するためのCAPTCHAを導入し、自動化された攻撃を防ぎます。
  • IPアドレス制限/地理的制限: 特定のIPアドレスや国からのアクセスのみを許可することで、攻撃元を制限します。
  • パスワードマネージャーの使用推奨: ユーザーには、複雑でユニークなパスワードを生成・管理できるパスワードマネージャーの使用を推奨します。

Ncrackの限界

  • 対策されたシステムへの効果減: 上記のような適切な対策が施されているシステムに対しては、Ncrackによるパスワードクラックが成功する可能性は著しく低くなります。特にアカウントロックアウトやMFAは非常に有効です。
  • ネットワーク遅延や不安定性: ネットワークの状態によっては、タイムアウトや接続エラーが多発し、スキャンの信頼性が低下することがあります。
  • 最新プロトコルへの追随: Ncrackの開発は停滞気味であるため、比較的新しい認証方式やプロトコルには対応していない可能性があります。

🚫 絶対禁止: Ncrackや類似のツールを使用して得た認証情報を悪用することは、重大な犯罪行為です。テストで見つかった脆弱な認証情報は、速やかに管理者へ報告し、パスワード変更などの対策を依頼してください。

まとめ ✨

Ncrackは、ネットワーク上の様々なサービスに対してブルートフォース攻撃を行い、弱いパスワードを発見するための強力なツールです。Nmapとの連携機能や豊富なオプションにより、効率的かつ柔軟なセキュリティ監査を支援します。

しかし、その強力さゆえに、使用には細心の注意と高い倫理観が求められます。必ず正当な権限のもと、システムのセキュリティ強化という建設的な目的のために利用してください。不適切な使用は法的な問題を引き起こすだけでなく、他者に損害を与える可能性があります。

Ncrackの使い方を理解すると同時に、それに対する防御策(強力なパスワード、アカウントロックアウト、MFAなど)の重要性を再認識し、自組織のセキュリティ体制を見直すきっかけとしていただければ幸いです。🔐