Cowrie でハニーポットをデプロイする

Beginner
今すぐ練習

💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください

はじめに

この実験では、攻撃者の行動を捕捉し分析する中程度のインタラクション型 SSH ハニーポットである Cowrie をデプロイする方法を学びます。Python 仮想環境に Cowrie をセットアップし、実際の SSH サービスを模倣するように設定し、包括的なログ記録を有効にします。

この実践的な演習を通じて、攻撃をシミュレートしてハニーポットをテストし、生成されたログを分析します。この実践的な経験は、ハニーポットが脅威検出と分析のためのサイバーセキュリティツールとしてどのように機能するかを理解するのに役立ちます。


Skills Graph

Cowrie のインストール

このステップでは、攻撃者によるブルートフォース攻撃とシェルインタラクションを記録するように設計された中程度のインタラクション型 SSH ハニーポットである Cowrie をインストールします。Cowrie は Python で実装されており、pip を使用して簡単にインストールできます。ハニーポットは、実際のシステムを模倣して悪意のある活動を引き付け、研究するセキュリティメカニズムであり、セキュリティ専門家が攻撃パターンを理解するのに役立ちます。

  1. まず、デフォルトの作業ディレクトリにいることを確認します。ここにすべてのプロジェクトファイルを整理して保存します。

    cd ~/project
  2. Cowrie に必要なシステム依存パッケージをインストールします。これらのパッケージは、Cowrie が適切に動作するために必要な重要なコンポーネントを提供します。これには Python 開発ツールや暗号化ライブラリが含まれます。

    sudo apt-get update && sudo apt-get install -y python3-venv python3-dev libssl-dev libffi-dev build-essential
  3. Cowrie 用の Python 仮想環境を作成します。仮想環境は、プロジェクトの依存関係をシステムの Python インストールから分離し、潜在的な競合を防ぎます。

    python3 -m venv cowrie-env
  4. 仮想環境をアクティブ化します。アクティブ化すると、インストールするすべての Python パッケージはこの分離された環境に入り、システム全体の Python には入りません。

    source cowrie-env/bin/activate
  5. pip を使用して Cowrie をインストールします。pip は Python のパッケージマネージャで、Cowrie とその依存関係をダウンロードしてインストールします。

    pip install cowrie
  6. Cowrie のバージョンを確認することで、インストールを検証します。これにより、パッケージが正しくインストールされたことが確認され、実行しているバージョンが表示されます。

    cowrie --version

    次のような出力が表示されるはずです。

    cowrie 2.1.0
  7. 作業が終了したら、仮想環境を非アクティブ化します。これにより、システムのデフォルトの Python 環境に戻ります。

    deactivate

ハニーポットの設定を構成する

このステップでは、Cowrie ハニーポットの設定を構成し、その動作とログ記録機能をカスタマイズします。設定ファイルはハニーポットの中枢として機能し、潜在的な攻撃者とのやり取り方法や分析用に記録されるデータを決定します。

  1. まず、前のステップで作成した Python 仮想環境をアクティブ化します。これにより、Cowrie の依存関係がシステムの Python から分離されます。

    cd ~/project
    source cowrie-env/bin/activate
  2. デフォルトの設定ファイルを生成します。これらのテンプレートには、すべての利用可能な設定とそのデフォルト値が含まれています。

    cowrie-gen-config

    これにより、~/project/cowrie-env/etc/cowrie/ に設定ファイルが作成されます。

  3. 初心者にも使いやすいテキストエディタである nano を使用して、メインの設定ファイルを編集します。

    nano cowrie-env/etc/cowrie/cowrie.cfg
  4. 以下の重要な設定を変更します(矢印キーで移動し、Ctrl+O で保存、Ctrl+X で終了します)。

    • listen_port = 2222listen_port = 22 に変更します。これにより、ハニーポットが標準の SSH サーバーとして見えるようになります。
    • [output_json] セクションで enabled = true に設定します。これにより、分析が容易な構造化ログが有効になります。
    • [output_textlog] セクションで enabled = true に設定します。これにより、人間が読みやすいログが提供されます。
  5. ログファイル用の専用ディレクトリを作成します。ログを分けて管理することで、整理と分析が容易になります。

    mkdir -p ~/project/cowrie-logs
  6. 設定ファイル内のログ記録パスを新しいディレクトリに更新します。

    nano cowrie-env/etc/cowrie/cowrie.cfg

    log_path 設定を見つけて、以下のように変更します。

    log_path = /home/labex/project/cowrie-logs
  7. 変更した設定を確認することで、設定の変更を検証します。

    grep -E 'listen_port|enabled|log_path' cowrie-env/etc/cowrie/cowrie.cfg

    変更内容を反映した出力が表示され、設定が正しく保存されたことが確認できます。

SSH サービスを起動する

このステップでは、着信接続を待ち受ける Cowrie ハニーポットの SSH サービスを起動します。systemd を使用せずに Docker コンテナ内で実行しているため、直接プロセスを実行します。このアプローチは、従来のサービス管理よりも簡単で、コンテナ化された環境に適しています。

  1. まず、正しいディレクトリにいることを確認し、仮想環境をアクティブ化します。仮想環境には、システムから分離されたすべての必要な Python 依存関係が含まれています。

    cd ~/project
    source cowrie-env/bin/activate
  2. Cowrie サービスをバックグラウンドで起動します。-n フラグを使用すると、非デーモンモードで実行され(出力がターミナルに直接表示されます)、& を使用するとプロセスがバックグラウンドで実行されるため、ターミナルを引き続き使用できます。

    cowrie start -n &
  3. プロセスリストを確認して、サービスが実行中であることを検証します。このコマンドは、実行中のすべてのプロセスをフィルタリングして、「cowrie」を含むもののみを表示します。

    ps aux | grep cowrie

    次のような出力が表示されるはずです。

    labex   12345  0.0  0.5  12345  6789 ?        S    12:34   0:00 python cowrie start -n
  4. サービスがポート 22 で待ち受けているかどうかを確認します。これは、SSH 接続がこのポートに来るため、重要です。このコマンドは、すべてのネットワークサービスとその待ち受けポートを表示します。

    sudo netstat -tulnp | grep 22

    Python がポート 22 で待ち受けていることを示す出力が表示されるはずです。

  5. ターミナルセッションをまたいでサービスを持続させるために、簡単なキープアライブスクリプトを作成します。これにより、ターミナルを閉じてもハニーポットが実行され続けます。

    nano cowrie-keepalive.sh

    以下の内容を追加します。

    #!/bin/bash
    source ~/project/cowrie-env/bin/activate
    cowrie start -n
  6. スクリプトを実行可能にして、直接実行できるようにします。

    chmod +x cowrie-keepalive.sh
  7. これで、このスクリプトを実行することでハニーポットを起動できます。これにより、環境をアクティブ化し、Cowrie を一度に起動します。

    ./cowrie-keepalive.sh

攻撃をシミュレートする

このステップでは、Cowrie ハニーポットに対して SSH ブルートフォース攻撃をシミュレートし、そのログ記録機能を検証します。このシミュレーションは、実際の攻撃者が不正アクセスを試みる方法と、ハニーポットがこれらの試行を分析のために記録する方法を示すのに役立ちます。

  1. まず、Cowrie ハニーポットが実行中であることを確認します(前のステップで起動したもの)。

    ps aux | grep cowrie

    このコマンドは、Cowrie プロセスがアクティブかどうかを確認します。出力リストに 'cowrie' が表示されるはずです。

  2. SSH クライアントがインストールされていない場合は、インストールします。

    sudo apt-get install -y openssh-client

    openssh-client パッケージは、ハニーポットに接続するために使用する ssh コマンドを提供します。'-y' フラグは、すべてのプロンプトを自動的に承認します。

  3. 一般的なユーザー名とパスワードの組み合わせを使用して、複数の SSH 接続を試行することで、ブルートフォース攻撃をシミュレートします。

    for i in {1..5}; do
      sshpass -p 'password' ssh -o StrictHostKeyChecking=no -p 22 labex@localhost
      sshpass -p 'admin' ssh -o StrictHostKeyChecking=no -p 22 admin@localhost
      sshpass -p 'root' ssh -o StrictHostKeyChecking=no -p 22 root@localhost
    done

    このスクリプトは、一般的なユーザー名とパスワードのペア(root/password など)をそれぞれ 5 回試行します。'-o StrictHostKeyChecking=no' は、SSH が未知のホストに関する確認を求めないようにし、自動化を容易にします。

  4. hydra を使用して、より高度な攻撃をシミュレートします(LabEx VM には事前にインストールされています)。

    hydra -L /usr/share/wordlists/metasploit/unix_users.txt -P /usr/share/wordlists/metasploit/unix_passwords.txt -t 4 -vV localhost ssh

    Hydra は強力なブルートフォースツールです。ここでは、指定されたワードリスト(-L はユーザー名用、-P はパスワード用)からの組み合わせを試行します。'-t 4' は並列試行を 4 つに制限し、'-vV' は詳細な出力を表示します。

  5. Cowrie のログを確認して、攻撃が記録されたことを検証します。

    ls -l ~/project/cowrie-logs/

    攻撃を実行した後、このコマンドはすべての接続試行の詳細を含む新しいログファイルを表示します。これらのログは、実際のデプロイメントでセキュリティアナリストが調査するものです。

攻撃ログを確認する

このステップでは、Cowrie が生成した攻撃ログを分析し、前のステップでシミュレートした攻撃を理解します。ログには、攻撃試行に関する重要なセキュリティ情報が含まれています。Cowrie は、すべてのインタラクション試行を 2 つの形式で自動的に記録します。すなわち、素早く読めるシンプルなテキストログと、詳細な分析に適した構造化された JSON ログです。

  1. まず、Cowrie がすべてのログファイルを保存しているログディレクトリに移動します。

    cd ~/project/cowrie-logs
  2. テキストベースのログファイルを表示します(最新のものから順に)。ls -lt コマンドは、変更時刻でソートされたファイルを表示し、tail は最新のログの最後の 20 行を表示します。

    ls -lt cowrie.log*
    tail -n 20 cowrie.log

    タイムスタンプ、ユーザー名、IP アドレスを含むログイン試行の失敗を示すエントリが表示されるはずです。

  3. 構造化データの JSON ログファイルを調べます。jq ツールは JSON を解析するのに役立ち、less は長い出力をスクロールできるようにします。

    jq '.' cowrie.json | less

    "eventid": "cowrie.login.failed" のエントリを探します。これは認証試行の失敗を示します。

  4. 一般的な管理者アカウントをターゲットとする特定の攻撃パターンを検索します。grep コマンドは、ファイル内のテキストパターンを検索します。

    grep -a "root" cowrie.log
    grep -a "admin" cowrie.log
  5. 攻撃試行の概要を生成します。これらのコマンドは、JSON ログから最も頻繁に試行されたユーザー名とパスワードを抽出してカウントします。

    echo "Top usernames attempted:"
    jq -r 'select(.eventid=="cowrie.login.failed") | .username' cowrie.json | sort | uniq -c | sort -nr
    
    echo -e "\nTop passwords attempted:"
    jq -r 'select(.eventid=="cowrie.login.failed") | .password' cowrie.json | sort | uniq -c | sort -nr
  6. ソース IP 情報を表示します(このシミュレーションでは localhost が表示されます)。これは、接続するクライアントの IP アドレスを抽出します。

    jq -r 'select(.eventid=="cowrie.session.connect") | .src_ip' cowrie.json

まとめ

この実験では、サイバー攻撃を監視および分析するために Cowrie SSH ハニーポットをデプロイする方法を学びました。そのプロセスには、Python 仮想環境のセットアップ、SSH ポートの設定、詳細な攻撃データ収集のための JSON ロギングの有効化が含まれていました。

また、ハニーポットサービスの起動、攻撃のシミュレート、およびログデータの分析に関する実践的な経験を積みました。この実践的な演習は、セキュリティツールが実際のシステムを模倣して悪意のある活動を効果的に検出および研究する方法を示しました。