背景
Cowrie が拾ったコマンドであまり見覚えのないコマンドがあったのでログを確認していたところ、 対応していないコマンドのようだった。 成功すれば寄ってくれるのではないか、ということでコマンドを追加してみた。
見覚えのないコマンドについて
今回の発端となった見慣れないコマンドは dmidecode というもの。 機器のハードウェア情報を取得するものらしく dmidecode | grep Vendor | head -n 1 という形で打ち込まれていた。 この結果で目的の環境かどうかを調査していた様子。
dmidecode を Cowrie に実装する
Cowrie のコマンドはすべて python によって擬似的に再現されている。 それらの python ファイルは cowrie 内の /home/cowrie/cowrie/cowrie/commands/ に格納されている。 デフォルトでは以下のようなファイルが格納されている。
adduser.py apt.py base.py busybox.py curl.py dd.py env.py ethtool.py free.py fs.py ftpget.py gcc.py ifconfig.py __init__.py iptables.py last.py ls.py nc.py netstat.py nohup.py perl.py ping.py python.py scp.py service.py sleep.py ssh.py sudo.py tar.py tftp.py ulimit.py uname.py uptime.py wget.py which.py
今回は base.py というファイルに追記する形で dmidecode を実装する。 base.py には whoami や ps など複数のコマンドが実装されている。 これを眺めてみるだけでもちょっと楽しい。
Cowrie の設定を変更するのに参考にしたサイト
Cowrie の設定変更手順は以下のサイトを参考にした。 とても分かりやすく、Cowrie 以外にも適用できる汎用的な手順が解説されている。
- http://teppay.hatenablog.com/entry/2018/01/13/023554 (2023/01/10:非公開となっていました)
実装手順
base.py の取り出し
# docker exec -it cowrie sh $ cp /home/cowrie/cowrie/cowrie/commands/base.py /home/cowrie/cowrie/log/ $ exit
commands ディレクトリを作成し移動
log に直接入れておくのは避けたいので。
# mkdir /data/cowrie/commands # mv /data/cowrie/log/base.py /data/cowrie/commands/
base.py に dmidecode コマンドの処理を追記
単純に表示するだけであれば、以下のひな形で作成できる。
class command_コマンド名(HoneyPotCommand): """ """ def call(self): """ """ self.write(b"""# 表示したい内容を 改行そのまま ここに記載する だけでよい\n""") commands['コマンド名'] = command_コマンド名
下記のような内容をファイル末尾の方に追記した。 出力部分は pastebin 方面から拾ったものを参考にした。
class command_dmidecode(HoneyPotCommand): """ """ def call(self): """ """ self.write(b"""# dmidecode 3.1 Getting SMBIOS data from sysfs. SMBIOS 3.0.0 present. Table at 0xDDBA4000. (snip) Handle 0x0055, DMI type 13, 22 bytes BIOS Language Information Language Description Format: Long Installable Languages: 1 en|US|iso8859-1 Currently Installed Language: en|US|iso8859-1 Handle 0x0056, DMI type 127, 4 bytes End Of Table\n""") commands['dmidecode'] = command_dmidecode
T-Pot を停止
# systemctl stop tpot
tpot.ymlを変更
取り出したファイルが docker に配置されるように設定を追加する。
# vi /opt/tpot/etc/tpot.yml (snip) # Cowrie service (snip) volumes: - /data/cowrie/downloads:/home/cowrie/cowrie/dl - /data/cowrie/keys:/home/cowrie/cowrie/etc - /data/cowrie/log:/home/cowrie/cowrie/log - /data/cowrie/log/tty:/home/cowrie/cowrie/log/tty - /data/cowrie/commands/base.py:/home/cowrie/cowrie/cowrie/commands/base.py #add
T-Pot を起動
# systemctl start tpot
動作確認
実際にハニーポットに port:22 などから ssh してログインし、 コマンドが動作するのか確認しておく。
$ dmidecode | grep Vendor | head -n 1 Vendor: **********************
感想
Cowrie のコマンドは python で実装されている。 今回のような単純に出力表示させるだけであればほとんどコピペで済む。 引数などがある場合についてもソースを読めばある程度の実装ができそう。 なにか気になるコマンドがあれば色々追加していくと楽しいかも。
なお、バナー表示やホスト名、uname や /proc/cpuinfo の内容なども割と簡単に変更ができるので、 デフォルトのままだとハニーポットっぽくて嫌だという場合は修正してみるのも楽しい。
更新履歴
- 2018/09/06 新規作成
- 2023/01/10 一部記載を修正