1. ホーム
  2. スクリプト・コラム
  3. ルビートピックス

Rubyを使ったFTPパスワードクラッキング

2022-01-03 11:49:38

今回は、Rubyを使って独自のFTPパスワードクラッカーを構築する手順を紹介します。この例を通じて、ブルートフォースアタックの概念とその重要性を理解していただければと思います。では、さっそく始めてみましょう。

暴力的な攻撃とは何ですか?

ブルートフォース攻撃という言葉は、実は多くのセキュリティ・コミュニティのパートナーにとって目新しいものではなく、単純で残忍なものと考えることができます。しかし、多くの攻撃者にとって、ブルートフォース攻撃は必要不可欠な攻撃手段です。実際には、ブルートフォース攻撃は、時間とリソースを大量に消費するため、攻撃者にとって好ましい選択肢ではないことが多いですが、攻撃者の最後の選択肢になり得るものです。

例えば、次のようなシナリオを設定します。

あなたは今、会社のFTP(File Transfer Protocol)サーバーにアクセスしたいと思っています。パスワードを入手するためにあらゆる方法を試しましたが、対象のFTPサーバーはセキュリティが非常に強固で脆弱性がなく、また、会社の従業員のセキュリティ意識も高いため、ソーシャルエンジニアリング攻撃を行うことができません。このような極限状態に直面した場合、ブルートフォースアタックに頼らざるを得なくなるのです。

まず、ブルートフォースクラッキング用の攻撃辞書をあらかじめ用意しておく必要があります。そして、その辞書をパスワードクラッキングツールの指定された場所にドラッグ&ドロップすると、パスワードクラッキングツールは辞書にある単語のリストを一つずつ試し、FTPサービスの正しいパスワードと一致するまでFTPサーバへのログインを試みます。

簡単でしょう?ブルートフォースアタックは非常にシンプルで総当り的な攻撃ですが、その威力を過小評価するべきではありません。時には、私たちの侵入テストを左右することもあるのです! ここでは、独自の FTP パスワードクラッカーを構築してみましょう!

FTPパスワードクラッカーを自作する

ここでは、Rubyスクリプトを使用してFTPパスワードクラッカーを構築します。もしあなたがRubyスクリプトについてあまり知らなくても、心配しないでください。 Rubyの基本チュートリアル このチュートリアルでは、この記事で使うRubyの基礎の一部を紹介していますので、この記事を読む前にRubyの基礎知識を身につけておくと、この記事を読みこなすことができますので、おすすめです。では、さっそくコード編に参りましょう。

Pythonスクリプトと同じように、コードの冒頭でRubyスクリプトであることを宣言し、必要な関数のライブラリを導入して、ユーザーの入力を得る必要があります。

ここでは、2つのライブラリファイルだけが必要です。私たちは ソケット ライブラリは、ブルートフォースログイン接続操作のためにFTPサーバーと通信するために使用されます。一方 タイムアウト ライブラリは、ターゲットサーバとの最初のタイムアウトを設定するために使用され、サーバがアクセスできない場合、タイムアウトプロンプトを私たちに返します。

次に、ARGVリストの長さを確認する必要があります。このリストはスクリプトの起動時に生成され、ユーザーがコマンドラインから順番に入力したすべてのパラメータが含まれています。ここでは、if not文に相当するものを使用しているため、ここのARGVが3に等しい引数を受け取らない場合、スクリプトは使用規則を表示して終了します。

以下のコードでは、ターゲットサーバーへの接続を試み始め、ターゲットサーバーが正常に通信できるかどうかをチェックします。

上記のコードは、単にソケットライブラリを使用して、IPアドレスを落とし、ターゲットサーバーとの通信接続を確立しています。また、timeoutライブラリを使って、10秒間のタイムアウトループを作っています。10秒以内に接続が完了しない場合、スクリプトはクライアント・インターフェースでユーザーにプロンプトを表示し、スクリプトを終了します。これらの基本的な機能を整えた上で、以下の関数を用いてユーザーの辞書リストファイルを読み込んでいる。

この関数の実装は、実にシンプルである。ファイルのパスを関数の引数として受け取り、読み取った単語のリストを表示します。次に、file.open()関数を使ってファイルを開き、その中身を読みます。ファイルを読み込むときは、最初に '\n' を改行し、必要なパスワードのリストを取得できるようにリストの内容を分割しています。そして、そのリストをグローバル変数に格納し、次のステップのためにファイルを閉じます。ファイルの読み込みに失敗した場合、スクリプトはクライアント・インターフェイスでユーザーにプロンプトを表示し、スクリプトを終了します。以上、FTPパスワードクラッカーの基本的な2つの機能ができたので、実際にサーバーへのログインを試みる機能を構築してみましょう。

この関数は実際のハッキングを行うので、非常に重要です。ここでは、まず新しいTCPソケットを作成してFTPサーバーに接続し、FTPサーバーからのバナーレスポンスを待ちます。バナーレスポンスを正常に受信したら、ユーザー名の入力を開始し、パスワード入力のプロンプトを待ち、パスワードの試行をサーバーに送信します。この時点で、サーバーからデータを受け取り、変数に格納する。このデータには、ログインを試みた結果が格納されます。

対象のFTPサーバーへのログインに成功したかどうかは、文字列 "230" で判断します("230" はFTPログイン成功の応答コードです)。この時点で、私たちのFTPパスワードクラッカーはほぼ完成しているので、あとは上記の関数を呼び出して統合し、ブルートフォースアタックの実行を開始するだけです。

上記のコードでは、先に作成した関数を呼び出して、ターゲットのFTPサーバーをチェックするとともに、提供した辞書リストファイルを読み込んでいます。そして、ターゲットFTPサーバーへの攻撃を開始します。ここでは、ユーザーによって提供された単語のリストを1つずつ試すループが使用されます。最終的にパスワードが一致した場合、スクリプトはクラック結果をユーザーに返し、スクリプトを終了します。それでは、結果をテストしてみましょう

ブルートフォースアタックテスト

まず、辞書ファイルを作成します。これは単なる例なので、私の辞書ファイルは非常に短いものです。しかし、実際の環境では、一般的に非常に大きな辞書ファイルを使用する必要があります。以下は、私が作成した単語のリストです。

<イグ

スクリプトを実行すると、簡単な使い方のヒントが表示されます。

ここで、このスクリプトの使用ルールに従って適切なパラメータ値を与え、スクリプトを実行する。しばらく待つと、FTPサーバーのパスワードが正常に吹き込まれたことが確認できます:。

概要

冒頭で述べたように、ブルートフォース攻撃は単純で残忍なものですが、攻撃者にとっては、時に我々の侵入を左右するものです。ですから、セキュリティテスト担当者として、ブルートフォース攻撃のプロセスと原理を理解することは重要です。