標準入出力にログインプロンプトを表示して相手の入力を記録するだけの honeypot
/var/tmp/honeypot/honeypot.sh
#!/bin/sh
logfile=/var/tmp/honeypot/honeypot.txt
exec 2>>$logfile
date >>$logfile
echo "from $REMOTE_ADDR $REMOTE_PORT" >>$logfile
echo -n 'login: '
read content
echo "login: $content" >>$logfile
echo -n 'Password: '
read content
echo "Password: $content" >>$logfile
echo -n '$ '
while read content; do
echo "$content" >>$logfile
if echo "$content" | grep -q '^ *exit'; then exit 0; fi
echo -n '$ '
done
exit 0
上記 honeypot を指定したポートで起動する systemd socket ファイルと対応サービスファイル
/etc/systemd/system/honeypot.socket
[Unit]
Description=Honeypot
[Socket]
# Port number to be listened
ListenStream=65535
FreeBind=yes
Accept=yes
ReusePort=yes
[Install]
WantedBy=multi-user.target
以下はサービスファイルだが、同じ名前で@を付けたサービス名にするのがポイント
/etc/systemd/system/honeypot@.service
[Service]
ExecStart=/bin/sh /var/tmp/honeypot/honeypot.sh
StandardInput=socket
StandardOutput=socket
StandardError=journal
Type=oneshot
これだけやって touch /var/tmp/honeypot/honeypot.txt && chmod a=rw /var/tmp/honeypot/honeypot.txt && systemctl daemon-reload && systemctl enable --now honeypot.socket
すれば指定したポートで honeypot が起動し始め、わけのわからん接続を /var/tmp/honeypot/honeypot.txt
に記録し始める
telnet ホスト 自分で決めたポート
で動き始めたhoneypotにアクセスできるから、/var/tmp/honeypot/honeypot.txt
に何が記録されるか確認する
よりセキュアにする
上記の設定だとroot権限で動作する shell script がインターネットからの接続を処理していてあまり良くないので、以下のような行を honeypot@.service
に追加するとより安全になる
User=adduserで作った一般ユーザー
Group=adduserで作った一般グループ
RestrictAddressFamilies=none
MemoryDenyWriteExecute=yes
ProtectProc=noaccess
PrivateTmp=no
PrivateDevices=yes
PrivateNetwork=yes
ProtectSystem=full
ProtectHome=yes
LockPersonality=yes
TasksMax=5