www.morihi-soc.net

誰もが安心して使える、安全なインターネットを目指して

Wall of Sheep for WOWHoneypot を作ってみたよ

どうも。ハニーポッターの森久です。

この記事は Honeypot Advent Calendar 2018 の8日目の記事です。

先日、同じアドベントカレンダーの2日目の記事で「ハニーポット脳」というポエムを公開しました。

さすがにポエムだけ公開して終わりだとアドベントカレンダーがもったいないかなと思い、少し技術的な話の記事を公開しようと思いました。(空きもあったので)

とある診断員の備忘録さんのブログで「ハニーポットについての小ネタ」という名前の記事が公開されました。

記事の冒頭に、DEFCON 会場で公開されている Free WiFi に平文で流れるクレデンシャル情報(アカウント名やパスワード等)を晒し上げする Wall of Sheep が取り上げられていました。

私も BLACKHAT USA 2016 と同時期に開催された DEFCON 24 に参加したときに、ネタっぽい情報から本物かもしれない情報が表示されているのを見てきました。

Wall of Sheep のリアル感を思い出したのをきっかけに、コレをハニーポットのログでやってみたら、どんな見え方がするのか興味が出てきたので(完全にハニーポット脳)、ちゃちゃっとプログラムを作ってみました。

プログラムは GitHub で公開しています。
Wall of Sheep for WOWHoneypot
https://github.com/morihisa/wsw

Wall of Sheep for WOWHoneypot サンプル

※上記の画像では、IP アドレスの一部を伏せていますが、プログラムを実行した結果では、そのまま表示されます。


コンセプト

Wall of Sheep for WOWHoneypot(wswと略します)は、WOWHoneypot のログをベースにした、Wall of Sheep の HTML を作成する Python スクリプトです。

アクセスログに含まれる BASIC 認証の情報などを抽出して、味気ないログを、カッコよく見せることができます。黒背景に緑色の文字は映画マトリックスっぽさを出したかっただけ。

ハニーポットを運用するハニーポッターの悩みの1つに、ログの見せ方があります。

ハニーポッター自身はログ分析をして自分の目標を達成すれば良いのですが、だれかにハニーポットを紹介するときや説明するときに、ハニーポットがどういうものなのか伝わりにくいです。

生ログを見せて面白いと思う人は非常に少なく、また技術的な解説をするにしても、受け手側のスキルによっては本筋とは異なる話をたくさんする自体になってしまいます。

そこで誰が見ても、ハニーポットで得られるサイバーセキュリティの現状・・・リアル感を伝える何かが欲しいという悩みがありました。

本家 Wall of Sheep は、平文でクレデンシャル情報を入力する危険さを体験することができます。ここで登場人物は一般人と通信経路上の第三者ですね。

一方、ハニーポットに出てくる登場人物は、攻撃者とハニーポッターです。

攻撃者がどのような行動をしていたのかをつまびらかにすることは、ハニーポットを運用することの醍醐味の1つです。

wsw では、攻撃者が入力しようとしたアカウント名とパスワードを収集して、表示します。

表示される情報

wsw では、アクセスログを読み込んで、最後から「MAX_DISPLAY_NUM」個数分の下記の情報を表示します。MAX_DISPLAY_NUM は、プログラムの中で設定できる、表示個数の設定値です。

  • Attacker IP: 攻撃者の IP アドレスです。
  • Target Port: アクセス対象のホストのポート番号です。
  • Path: アクセス対象のパスです。
  • Account Name: 入力されたアカウント名です。
  • Account Password: 入力されたパスワードです。

ハニーポットでパスワードといえば、よくタグクラウドで紹介されていることがあります。個人的にですが、見た目はそれっぽいけど、パスワードだけ見せられても話がし辛いです。もっと、誰が、何を狙って、どのようなアカウント名とパスワードの組み合わせを試行したのか、有機的な結びつきが把握しやすいようなモノが欲しいと思っていました。

WOWHoneypot は Web に特化したハニーポットですが、ファイアウォールのポート転送機能を使って、複数のポートに対するアクセスを受けさせることができます。

たとえば、81や5984などで待受していると、思いもよらず攻撃を収集するときがあります。

これらのポート番号は、特定のソフトウェアがデフォルトで使っていることがあり、攻撃者もその特定のソフトウェアを狙って攻撃していることが想定されます。

こういった情報を含めて目で見える形にまとめることによって、リアル感が伝わるかなと考えています。

抽出対象のクレデンシャル情報

ハニーポットにはさまざまな攻撃が届きます。世の中には多種多様な Web アプリがあるので、そのすべてを模倣しているわけではありません。私のハニーポットにおいて、不正ログインでよくみるものを挙げると WordPress のログイン、phpMyAdmin のログイン、Apache Tomcat のログインなどです。

ソフトウェアごとにクレデンシャル情報の入り方は異なります。POST のパラメータに含まれる場合、パラメータ名が異なります。そのためクレデンシャル情報を抽出するには、各ソフトウェアの規格や仕様を詳しく知る必要があります。

今回は、とにかく動くものをサッと作りたかったので、BASIC 認証の情報に絞ることにしました。

BASIC 認証おさらい

ブラウジングしているときに、一度ぐらいは下記のような画像を見たことがあるのではないでしょうか。

BASIC 認証の要求例

ここでユーザ名とパスワードを入力すると、BASE64でエンコードされてサーバに送信されます。実際に入力したときの通信をキャプチャして、Wireshark で見ると下記の画像のような情報が得られます。

BASIC 認証の通信内容例

一番重要なところは、最下段の Authorization ヘッダです。このヘッダの右側に入力したユーザー名とパスワードが含まれています。BASE64でデコードしてみましょう。

% echo dGVzdHVzZXI6aGltaXRzdQ== | base64 -D
testuser:himitsu

はい。見えましたね。testuser がユーザ名で、himitsu がパスワードです。

攻撃者は、BASIC 認証で保護されているページに不正にアクセスするために、ユーザ名とパスワードをいろいろと組み合わせて、入力してきます。

当然、さきほどのように攻撃者が入力してきたユーザ名とパスワードもBASE64でデコードすることで内容を見ることができます。

攻撃者が使うようなパスワードは、容易に推測できるものなので、一般公開する Web サーバでは使用してはいけません。

セキュリティ対策に活かすために、攻撃者の手の内を知ることは非常に重要です。

まとめ

今回は WOWHoneypot のアクセスログを元にした Wall of Sheep の HTML を作成することができる wsw というプログラムを紹介しました。
アイデアを思いついて、この記事を書き終わるまで約半日。今後はBASIC 認証以外の情報も追加してみたいですね。

wsw のプログラムは GitHub で公開しているので、ご自由にお使いください。
https://github.com/morihisa/wsw

追伸

python3 で、いわゆる PHP の htmlspecialchars() に相当するものがあれば教えてください。

Written by 森久

12月 8th, 2018 at 9:29 pm