【Docker】SSHのハニーポットを運営してみた。
最終更新 2023/10/05 22:37
ハニーポットとは「意図的に脆弱なシステムを運営して、実際に攻撃を受けながらログを収集する」ことです。
本記事では、sshのハニーポットをdockerとopensshを用いて実装してみましたから、その構築手順やアクセスログをご紹介させて頂きます。
なお、実行環境はCentOS 7を想定しています。
ハニーポットの設置方法
SSHのハニーポットをサーバーに直接設置することもできますが、それではリスクが高いので、dockerを用いて専用の仮想環境を構築します。
まず適当なディレクトリを作成して、以下のデータを「Dockerfile」という名前で保存して下さい。
# SSH Honeypot by ActiveTK.
FROM ubuntu:18.04
RUN apt-get update && apt-get install -y openssh-server
RUN ln -sf /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
RUN apt install -y sudo apache2 tor php nano sl curl
RUN mkdir /home/activetk
RUN useradd -m activetk && echo 'activetk:yamada5929' | chpasswd
RUN chsh activetk -s /bin/bash
RUN chown -R activetk /home/activetk
RUN echo 'PasswordAuthentication yes' >> /etc/ssh/sshd_config
RUN echo 'PermitRootLogin no' >> /etc/ssh/sshd_config
RUN echo 'AllowUsers activetk' >> /etc/ssh/sshd_config
RUN echo 'LogLevel VERBOSE' >> /etc/ssh/sshd_config
RUN echo 'SyslogFacility AUTHPRIV' >> /etc/ssh/sshd_config
RUN echo 'Match User activetk' >> /etc/ssh/sshd_config
RUN echo ' X11Forwarding no' >> /etc/ssh/sshd_config
RUN echo ' AllowTcpForwarding no' >> /etc/ssh/sshd_config
RUN mkdir /home/root
RUN chmod 733 -R /home/root
COPY profile /etc/profile
RUN mkdir /var/run/sshd
CMD ["/usr/sbin/sshd", "-D"]
また、Dockerfileと同じディレクトリに、以下の内容を「profile」という名前で保存して下さい。
if [ "${PS1-}" ]; then
if [ "${BASH-}" ] && [ "$BASH" != "/bin/sh" ]; then
# The file bash.bashrc already sets the default PS1.
# PS1='\h:\w\$ '
if [ -f /etc/bash.bashrc ]; then
. /etc/bash.bashrc
fi
else
if [ "`id -u`" -eq 0 ]; then
PS1='# '
else
PS1='$ '
fi
fi
fi
if [ -d /etc/profile.d ]; then
for i in /etc/profile.d/*.sh; do
if [ -r $i ]; then
. $i
fi
done
unset i
fi
nowProcess=`ps aux | grep $PPID | grep sshd | awk '{ print $11 }'`
if [ "$nowProcess" = sshd: ]; then
todayDate=`date '+%Y%m%d%H%M'`
loginUser=`whoami`
script -afq /home/root/${loginUser}_${todayDate}.log
fi
上記のコードでは、ハニーポットのユーザー名を「activetk」、パスワードを「yamada5929」として設定しています。
また、アクセスしてきたユーザーのログが「/home/root」以下に保存されます。
二つのファイルが設置できたら、以下のコマンドでビルド/実行して下さい。
docker build -t honeypot ./
docker run -d -p 22:22 --hostname="mainserver" --privileged --name honeypot honeypot
なお、パラメータ「-p」を変更するとハニーポットのポート番号を変更することができます。既に22番を使用している場合には、2222番などを試してみて下さい。
また、「docker ps -a」からコンテナIDを取得して以下のコマンドを実行すると、仮想環境にrootとしてアクセスできます。
docker exec -it コンテナID bash
ハニーポットを運営した結果
今回は、意図的にX(=Twitter)上にsshのユーザー名とパスワードを公開して、アクセスを監視してみました。
その結果、3日間で以下のように大量のログが生成されました。
root@mainserver:/home/root# ls -hl
total 29M
-rw-rw-r-- 1 activetk activetk 7.8K Sep 30 22:21 activetk_202309302220.log
-rw-rw-r-- 1 activetk activetk 172 Sep 30 22:54 activetk_202309302254.log
-rw-rw-r-- 1 activetk activetk 1.6K Sep 30 22:59 activetk_202309302256.log
-rw-rw-r-- 1 activetk activetk 349 Sep 30 22:59 activetk_202309302259.log
-rw-rw-r-- 1 activetk activetk 712 Sep 30 23:00 activetk_202309302300.log
-rw-rw-r-- 1 activetk activetk 12M Oct 1 00:07 activetk_202309302303.log
-rw-rw-r-- 1 activetk activetk 2.5M Sep 30 23:46 activetk_202309302333.log
-rw-rw-r-- 1 activetk activetk 201 Sep 30 23:52 activetk_202309302352.log
-rw-rw-r-- 1 activetk activetk 66 Oct 1 00:22 activetk_202310010022.log
-rw-rw-r-- 1 activetk activetk 9.3K Oct 1 00:47 activetk_202310010034.log
-rw-rw-r-- 1 activetk activetk 308K Oct 1 12:03 activetk_202310011136.log
-rw-rw-r-- 1 activetk activetk 140 Oct 1 12:12 activetk_202310011212.log
-rw-rw-r-- 1 activetk activetk 3.1K Oct 1 12:13 activetk_202310011213.log
-rw-rw-r-- 1 activetk activetk 73K Oct 1 14:55 activetk_202310011417.log
-rw-rw-r-- 1 activetk activetk 4.5K Oct 1 17:47 activetk_202310011703.log
-rw-rw-r-- 1 activetk activetk 146 Oct 1 21:41 activetk_202310012141.log
-rw-rw-r-- 1 activetk activetk 5.6K Oct 2 19:40 activetk_202310021939.log
catコマンドで一部の履歴を閲覧してみると、以下のように表示されます。
なお、全てのアクセスログはこちらからダウンロードできます(IPアドレスを省く)。