Docker

ハニーポットcowrieをDockerから起動する

投稿日:2018年2月18日 更新日:

設定等でハマったのでメモとして残します。

[2018/5/2 追記]

下記に取り上げたcowrie公式dockerイメージの公開が停止しています。

代わりに、docker上でKippoを用いて低対話型ハニーポットを構築する手順を作成中です。

背景

セキュリティ勉強の一環として、低対話型SSHハニーポットであるcowrieをDocker上で起動しました。
ハニーポットについては、以下の書籍に詳しく記述されています。

今回使用するcowrieは、SSHサーバを利用したハニーポットソフトウェアになります。
種類としては、特定のサービスをエミュレートする「低対話型」に属します。
SSHブルートフォースなどの攻撃を記録して、攻撃者の動きを観測することができます。

cowrieはgithubから取得できます。

今回は、cowrieをDocker上で起動することを試みます。

設計・実装

cowrieの作者様が用意してくださっているDockerfileを元に、改良を加えたものを使用します。
元のDockerfileは以下です。

micheloosterhof/docker-cowrie
https://github.com/micheloosterhof/docker-cowrie
docker-cowrie - Docker Cowrie Honeypot image
 GitHub 

まず上記のリポジトリをgit cloneで取得します。

user@hostname:~/$ git clone https://github.com/micheloosterhof/docker-cowrie.git && cd docker-cowrie

次に、取得したDockerfileの4行目付近を以下のように編集します。

# Fix uid/gid to 1000 for shared volumes
RUN groupadd -r -g 1000 cowrie && \
    # コンテナを起動したuserのuidをcowrieに設定
    # useradd -r -g 1000 -d /cowrie -m -g cowrie cowrie
    useradd -r -g 1000 -d /cowrie -m -g cowrie -u 1010 cowrie
  • 4行目〜:ユーザcowrieを作成しています。
    今回は、ホストのディレクトリをコンテナのディレクトリにボリュームとしてマウントするため、ホストのuid:gidとコンテナのuid:gidが一致していなければ、Permission deniedエラーでホストのディレクトリにアクセスできません。
    したがって、useraddの部分で-uオプションを使用することで、uidを指定してホストのuidと一致させます。

次に、docker-composeファイルの7行目以降を以下のように編集します。

build: .
# image: micheloosterhof/cowrie:dev
ports:
  - "22:2222"
  - "23:2223"
volumes:
  # Map a local cowrie config dir into the container.
  # - "./etc:/cowrie/cowrie-git/etc"
  # Make cowrie logs persistent through container recreates.
  - "./var:/cowrie/cowrie-git/var"
  - "./log:/cowrie/cowrie-git/log"
  - "./etc:/cowrie/cowrie-git/etc"
  • 7行目〜:Dockerfileからビルドするようにします(imagesコマンドは実行できません。Dockerのリポジトリにcowrieのイメージが登録されていないようです)。
  • 9行目〜:portsを編集します。今回は、wellknownであるsshポート22番を外に見せることでハニーポットを実現します(telnetは使用しません)。
  • 12行目〜:volumesを設定します。var,log,etcをマウントします。主に使用するのはlogディレクトリで、ここに攻撃のログが記載されます。

また、事前にssh用のポート22番は、iptablesなりufwなりで開けておいてください。

テスト

実際にコンテナを起動してみましょう。

user@hostname:~/$ docker-compose up -d
Creating network "cowrie_default" with the default driver
Creating cowrie_cowrie_1 ... 
Creating cowrie_cowrie_1 ... done

さきほどマウントするよう設定したlogディレクトリ配下のcowrie.jsonを見ると…なにかしらもりもりログが吐かれているはずです。

user@hostname:~/$ tail log/cowrie.json

 

-Docker
-,

執筆者:


comment

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

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

関連記事

Dockerを使用した簡単なC++実行環境の構築

今回は、C++の機能を調査するための簡単なテスト環境を、Dockerを用いて構築する手順を解説します。 目次1 要件2 仕様3 実装3.1 元になるイメージ3.2 Dockerfileの作成3.3 実 …

Docker上でWordPressとnginx-proxyを連携(SSL対応)

今回は、Docker上でWordpressサーバを構築し、SSLに対応したnginx-proxyとの連携を行います。 追記(2017/10/08):作成したdocker-compose.ymlをGit …

Docker上でnginx-proxy他を使ってSSL対応マルチドメインサーバ環境の構築

今回は、nginx-proxyを使用し、SSLに対応したマルチドメイン環境を構築します。 追記(2017/10/08):作成したdocker-compose.ymlをGithubに公開しました。目次の …

systemdからdockerコンテナを起動+timerで定期実行

今回はdockerコンテナをsystemdから起動し、かつtimerを使用して定期実行する方法を紹介します。 目次1 背景2 要求と仕様3 systemdについて4 設計・実装4.1 テストアプリとs …

Ubuntu 16.04 LTS でのDocker実行環境(docker-engine + docker-compose)の構築

今回は、Ubuntu 16.04 LTS でのDocker実行環境の構築を行います。 目次1 背景2 注意3 docker-engineのインストール4 docker-composeのインストール5 …