ハニポ系論文を紹介するよ!~Bitter Harvest: Systematically Fingerprinting Low- and Medium-interaction Honeypots at Internet Scale~
この記事はHoneypot Advent Calendar 2018の1日目の記事です。
今回はいつもと一風違って、ハニポ系論文を紹介することにします。
私は最近Fingerprint関係の研究をしていて、偶然この論文を見つけたので読んだのですが、非常に面白かったです。特に、運用者へ警鐘を鳴らしているところが!
以前TwitterとかSlackとかで簡単に紹介したような気がするけど、英文だとあまり読んでくれないよね。。。
というわけで、簡単に日本語で紹介してみようと思います。間違いや解釈違いがあるかもしれませんが、見つけたらご指摘ください。あとこういう論文紹介をブログに書くのも初めてだから作法わからないし…。(こちらも何か問題あったら連絡ください)
また、わかりやすさのために脚色も入っています。論文に示されている技術面もあまり語りません。ですので、興味があればできれば原著を読んでくださいね。
USENIX Woot'18で発表された論文、「Bitter Harvest: Systematically Fingerprinting Low- and Medium-interaction Honeypots at Internet Scale」です。
著者はケンブリッジ大学のA. VetterlさんとR. Claytonさん。
論文はこちらで読めます。
https://www.usenix.org/system/files/conference/woot18/woot18-paper-vetterl.pdf
どんな内容?
中・低対話型ハニーポットに利用されているライブラリの通信のフィンガープリントをとることができて、ハニーポットソフトウェアの検知ができました。そこでインターネット全体をスキャンすると、多くのハニーポットが見つかりました。中には古いハニーポットが使われていたり、更新が長い間なされていなかったり、コピペで建てられたと思われるものが見つかり、警鐘を鳴らしています。
中・程対話型ハニーポットの検知
攻撃者は、攻撃方法や脆弱性、使っているツールのことを簡単に知られてしまうわけにはいかないので、ハニーポット検出するとそのハニーポットには攻撃しません。
SSHなどの場合、ログインしてコマンドを入力し、応答から検知しようとするのは有名でしょう。そうならないように、ハニーポット開発者たちはなるべくコマンドの応答を本物に似せようとします。いたちごっこの現状です。
しかし、この論文ではトランスポート層でネゴシエーションを行う前に検知することが可能である、と言われています。そうなればコマンドの応答偽装など無意味になることでしょう。
大抵の中・低対話型ハニーポットはトランスポート層の通信を担う既製のライブラリ群に依存しています。そのため、本物のサーバ群とパケットレベルで違う挙動をしていることがわかりました。それをフィンガープリントとしてスキャンをかけると中・低対話型のハニーポットの検知が可能になる、ということです。
この論文では、主要プロトコルのSSH、Telnet、HTTPのどれかを扱う9種類のハニーポットを検知しました。
検知するハニーポット詳細
SSHハニーポット
- Cowrie
- Kippo
どちらもOpenSSHを模したハニーポットです。
SSHハニーポットの多くはpython2系、3系のTwistedConchのライブラリが利用されています。
ちなみに、SSHハニーポットの主流はKojoney→Kippo→Cowrieに変遷していて、Kojoney、Kippoは一般的にはすでに推奨されないものになっています。(KippoはKojoneyが元になっていて、CowrieはKippoが元になった進化系なので当然でしょう)
これらのSSHハニーポットは攻撃者がハニーポット上で実行するコマンドの応答をエミュレートでき、Cowrieではこの論文が書かれた当時は34コマンドをエミュレートしていました。(現在も活発に開発が行われているため、さらに増えているかもしれません)
さらに、CowrieではTelnetをサポートするようにもなりました。
Telnetハニーポット
Miraiの台頭により、Telnetハニーポットの動きが活発化しました。この論文では上記の4つを対象としています。
MTPotはPython2系で書かれており、telnetsrvのライブラリを利用しています。TIoTもPython2系ですが、Telnetプロトコルについては独自実装です。
TPwdはC言語で実装されており、こちらもTelnetプロトコロルを独自実装されています。
HTTP/Webハニーポット
- Dionaea
- Glastopf
- Conpot
現在、多くのWebアプリケーションハニーポットが存在しています。WordPressやログインインターフェースを実装したニッチなものがありますが、この論文ではもっと広い範囲の実装のものが選ばれました。
これらは全てPythonで実装されています。ちなみに、Grastopfはもっとも推奨されているHTTPハニーポットと言われています。
検知技術
こちらについては省略します。原著を見てもらうと良いです。(逃げ)
しかし一つだけ。この論文ではSSHの話が多く出てきていましたので、それだけ簡単に書いておきます。
SSHハニーポットの検知
SSHのネゴシエーション(鍵交換)時に双方がSSH2_MSG_KEXINITパケットを送信します(SSH v2)。その際、パケットにパディングが行われるのですが、RFCには具体的にどのようにパケットがパディングされるか指定されていませんでした。TwistedConchでは、ランダムなバイトでパディングします。しかし、OpenSSHではNULLバイトでパディングしているのです。その点を見れば、明らかにTwistedConch を使ったSSHサーバであることがわかってしまうのです。
インターネット全体をスキャンして検知した結果
スキャンは2度行われています。2回目は1回目の約3ヶ月後に行われました。
ソフトウェア | 1度目 | 2度目 | |
---|---|---|---|
SSH | Cowrie | 1938 | 2021 |
Kippo | 906 | 758 | |
Telnet | Cowrie | 1019 | 938 |
MTPot | 388 | 216 | |
ToIT | 22 | 11 | |
TPwd | 1 | 1 | HTTP | Dionaea | 139 | 202 |
Glastopf | 2390 | 3371 | |
Conpot | 87 | 87 |
また、ハニーポットがよく植えられているホスティングサービスtop10も集計されていました。
(AWSがよく使われているのでしょうか…)
SSHハニーポットのバージョン
1度目のスキャンでは検知されたKippoのうち695個(24%)が40ヶ月以上更新されていなかったそうです。2回目のスキャンでは、そのうち546個はそのまま更新されていないままだったそうです。
また、Kippoの後継のCowrieでもバージョン更新する運営者は多くはないそうです。3ヶ月後に2回目のスキャンをしたとき、1071個(53%)のみ更新されていて、他は更新されていなかったそうです。
さらに、同じホストで複数のハニーポットを持っていることも少なくありません。714個のホストがCowrieをport22で開けて、同時にGlastopfをport80で開けて一緒に使っていたそうです。また、550個のホストはSSHとTelnetをCowrieを使って同時に開けていたそうです。このことについて、一つハニーポットが設置されていることがわかると、そのホストには別のハニーポットを設置されている可能性がある、ということが攻撃者に察知されてしまうというリスクを挙げられていました。
また、SSH host keyが同じものが複数のホストに設置されていることもわかったそうです(SSH host keyはユニークであるべきです)。1回目スキャン時の2844個のハニーポットのうち、1838個だけがユニークなSSH host keyが使われていましたが、残りの1006は71種類のSSH host keyが使われており、ひとつのHost keyが5つのハニーポットに使い回されていました。
おそらく運用者はスクリプトとDocker containerを利用してコピーして貼り付けているだけだ、と著者らは指摘しています。
まとめ
以上のことから、ハニーポットを検知できるという成果だけでなく、著者らはハニーポット運用者に対し警鐘を鳴らしています。
CowrieはすでにSSH2 MSG KEXINITのパディング問題は解決していますが、それを運用者らが更新を適用しないと意味がありません。
中・低対話型ハニーポットによって集められる情報は貴重で有用なものだと思いますが、継続的にしっかりと保守していかなければならないのです。
そんなわけで、この論文について紹介をしました。
ハニーポッターとして、適当に立てて放っておいていい気になっていては落第してしまうかもしれません。
特に更新が活発なソフトウェアを使っている場合は定期的にチェックすべきですね。ハニーポットは簡単に立てられる時代ですが、しっかり保守しないと枯れてしまうのでしょう。