よもぎのメモ帳

備忘録的な感じで技術的なことをストックしていきます。

はじめてのHoneypot🍯

はじめに

f:id:y0m0g1:20181203185513p:plain
社畜ちゃん台詞メーカーより

この記事は EEICアドベントカレンダー2018 11日目の記事です。

  • 12/10の投稿はこちら
  • 12/12の投稿はこちら

qiita.com


簡単な自己紹介と記事の内容

はじめましての方ははじめまして、EEIC2018のよもぎといいます。工学部電子情報工学科のB3です。

セキュリティとかCTFとかに興味がありつつ、 いろいろなところに足を突っ込んでいて 大変な 楽しい生活を送っています。

Twitterやっていたりするので良かったらどぞ。 (学科垢何かの垢)

この記事は、初心者によるHoneypot体験記 となっています。

初心者の私が実際にHoneypotを運用してみたよ 、みたいなことを書くので、 あまり技術的な面には期待しないでください。


TL;DR

  • ハニーポットAWS+T-potで運用してみました
  • この記事の殆どが導入手順です
  • ちょっとだけログを解析してみます
  • 初めてだけどもHoneypotはいいぞぉ👍*1
  • 間違っていたり補足があったりしたら教えてください!

そもそもHoneypotってなに?

Honeypot とは、 わざと攻撃されやすい環境を用意する*2ことで、 つられてやってきた実際の攻撃者の行動ログだったりマルウェアを収集したりするもの で、 コンピュータ上での”おとり捜査におけるおとりの役割”みたいなものです。

(Honeypotあるいはハニーポット、って一々書くのが面倒になってしまったのでこれからは ハニポ って言っていきます)

設計図共有サイト*3だったり、謎の半導体メーカー*4だったり、聞いたこともないような怪しい拡張子*5だったり、 メディアで用いられる"翻訳"と違和感は切っても切り離せない関係ですが、このハニポも

ハニーポット」と呼ばれる特殊な機器

と訳されています。*6*7

けれども、 ハニポそれ自体はふつうの機器でも設置できる ものなので、 なんだかなぁ って思うのです。

ハニポには大きく分けて2種類あります。つまり、 高対話型ハニポ低対話型ハニポ です。*8 高対話型は、脆弱性があるOSやソフトウェアなどの「ほんもの」を使用したハニポである一方で、 低対話型は、エミュレートをしたものを使用するハニポです。 今回は比較的初心者向けの低対話型を用いました。

ハニポを運用するに当たって注意なのですが、基本的に脆弱な環境を用意するので、 設定を誤ることで攻撃の踏み台に転用されたり、 運用しているハニポを悪用されないようにしなければなりません。

めっちゃ気軽にできる! というわけではないので、試してみたい方は十分に気をつけてください。

それでは前書きはこのあたりにして、実際に設定して動かしてログを見てみたことを書いていきたいと思います。


ハニポやっていき

前から気になっていたハニポの運用で、ある日こんなサイトがついったで回ってきました

www.nowhere.co.jp

あ、なんかよさそ〜 という軽い気持ちでチェックしておいて、2ヶ月ぐらい寝かせておいて*9 それでアドベントカレンダーにあわせて始めてみた感じです。

その際にとても参考になったのが、graneedさんの次のブログとスライドです。

graneed.hatenablog.com

AWS + T-Pot + ELK + WOWHoneypot でWeb攻撃を観察してみよう - Speaker Deck

本当にこれに沿って進めただけなのですが、 はじめのポイントとして特に 環境にはAWS+T-potを用いたこと は抑えておきたいと思います。


T-potについて、かんたんに、おおざっぱに

T-potはマルチハニーポットプラットフォームです、ハイ。

T-Pot 17.10 - Multi-Honeypot Platform rEvolution

世の中にはハニポのアプリケーションがたくさんあるのですが、 それらを それぞれDockerコンテナで動かして、 そのハニポ達への攻撃のログをELK *10 でいい感じに可視化してくれます。

バージョン17.10のアーキテクチャはこんな感じ(すごい)

f:id:y0m0g1:20181210180108p:plain


学生だとAWSがいいっぽい
GitHub Educateすごい

AWSを趣味の範囲で使うのは初めてのことだったのですが、 その際にmasao君に GitHub Educate を教えてもらいました。

education.github.com

GitHub Studentならば 150ドルのAWSクレジットが無料でもらえる という、 すんごいものなので是非みてみてください! 他にもいろいろな特典があるみたい

ただ、ここから Uniqueリンクをクリックしても無限に読み込み中になって使えない…… ということで、

  • URLのクエリに渡されるpromoCodeプロパティをコピーして、
  • それをAWSの新規アカウント作成のときにペースト
  • そうしたら、AWS Educate Application Approvedみたいなメールが来る
  • そのメールに書いてあるcredit codeをAWS内で入力して150$ゲット!

みたいな めんどくさい 手順を踏んで無事にAWSのアカウントを作成できました。 リンククリックして全部おっけーぐらいにしてほしかったよ……

AWSのアカウントを作ったら、次のQiitaの記事を参考に初期設定しました。

qiita.com

CloudTailに限っては、動かしてすぐに無料枠使っちゃって大変なことになりそうだったので、 途中でやめてしまいました。

二段階認証はGoogle Authenticatorを使いました。 シンプルイズベストの精神です。


AWSのEC2と、Ubuntuの16.04と、
それからT-potの17.10

ほーんとに、graneedさんのブログを参考に進めただけなので、 やってみたい、みたいな人がいらっしゃいましたら、そちらを見ていただければ大丈夫だと思います。

AWSを使う理由は上の方に貼ったスライドの19ページ目のとおりで、 24h 365dで動かすの厳しい (そもそもサーバー持っていない)し、 自前のものが攻撃されたらやばい といったことがあります。*11

AWSのEC2インスタンスを立てる

AMIは Ubuntu Server 16.04 LTS (HVM), SSD Volume Type を選びました。

f:id:y0m0g1:20181210170923p:plain

インスタンスタイプは tc2.medium を選んで、ボリュームサイズを30GB に設定しました。 tc2.medium は有料インスタンスなんですが、CPUの使用率が20%を切っていれば課金されない*12という裏技も。 T-potのシステム要件が4GB RAM & 64GB ROMな感じなのですが、AWSの無料枠で納めるために30GBにしました。

f:id:y0m0g1:20181210172439p:plain

セキュリティーグループはこんな感じにして

f:id:y0m0g1:20181210173201p:plain

SSHキーペアを設定・ダウンロードしてインスタンスは無事に立ちました!

Ubuntuのセットアップ

Windowsでも、Windows 10 version 1803 (April 2018 Update)でsshクライアントが標準実装されました。 なので何かしらソフトを追加しなくても、さっき立てたインスタンスsshで通信できます。

PS C:\> ssh -V
OpenSSH_for_Windows_7.6p1, LibreSSL 2.6.4

ログインユーザー名がubuntuIPアドレス255.aaa.bbb.ccc、ポート番号が22番の時には、 次のようにしてsshをつなぎます

PS C:\> ssh -l ubuntu -p 22 -i <秘密鍵へのパス> 255.aaa.bbb.ccc

あとは、このブログの通りのことをしました。 滞りなく、できました。わいわい

graneed.hatenablog.com

  • OSのユーザ変更(ubuntuのままだと危険)
  • タイムゾーンを日本に変更
  • パッケージをアップデート
  • NTPサーバーと自動時刻同期

こんな感じのことをやりました

T-potをセットアップ

git cloneしてsudo suで./install.shするだけ

めっちゃ楽です。

~$ git clone https://github.com/dtag-dev-sec/t-pot-autoinstall.git
Cloning into 't-pot-autoinstall'...
remote: Enumerating objects: 170, done.
remote: Total 170 (delta 0), reused 0 (delta 0), pack-reused 170
Receiving objects: 100% (170/170), 59.08 KiB | 0 bytes/s, done.
Resolving deltas: 100% (88/88), done.
Checking connectivity... done.
~$ cd t-pot-autoinstall/
~/t-pot-autoinstall$ sudo su

/home/[-----]/t-pot-autoinstall# ./install.sh

##########################################################
# T-Pot 17.10 install script                             #
# for Ubuntu server 16.04.0x, x64                        #
##########################################################
Make sure the key-based SSH login for your normal user is working!

Which user do you usually work with?
This script is invoked by root, but what is your normal username?
Enter username: [-----]

Checking prerequisites...
Generating locales (this might take a while)...
  en_US.UTF-8... done
Generation complete.
Everything looks OK...
##########################################################
#                                                        #
#     How do you want to proceed? Enter your choice.     #
#                                                        #
#     Required: 4GB RAM, 64GB disk                       #
#     Recommended: 8GB RAM, 128GB SSD                    #
#                                                        #
# 1 - T-Pot's STANDARD INSTALLATION                      #
#     Standard Honeypots, Suricata & ELK                 #
#                                                        #
# 2 - T-Pot's HONEYPOTS ONLY                             #
#     Honeypots only, w/o Suricata & ELK                 #
#                                                        #
# 3 - T-Pot's INDUSTRIAL EDITION                         #
#     Conpot, eMobility, Suricata & ELK                  #
#                                                        #
# 4 - T-Pot's FULL INSTALLATION                          #
#     Everything                                         #
#                                                        #
##########################################################

Your choice: 1
You chose T-Pot's STANDARD INSTALLATION. The best default ever!

(一部伏せています)

あとはほとんど勝手にやってくれます。 参考にしたブログではうまくいかない!ってなっていたけれども、 私がやってみたときには 特に何もエラーが起きず、それはそれでびっくりしました

インストールが終わったら、T-potで待ち受けるためにAWS上でインスタンスのポートを 開けに開けまくります。

f:id:y0m0g1:20181210181443p:plain

sshでログインして、こんな感じにポートが開いているのを確認しました

[------@moderncelery:~]$ /opt/tpot/bin/dps.sh
========| System |========
    Date:  Tue Nov  6 23:27:38 JST 2018
  Uptime:  23:27:38 up 6 min,  1 user,  load average: 0.92, 0.80, 0.39
No sensors found!
Make sure you loaded all the kernel drivers you need.
Try sensors-detect to find out which these are.
CPU temp:

NAME                STATUS                               PORTS
cowrie              Up 5 minutes                         0.0.0.0:22->2222/tcp,
                                                         0.0.0.0:23->2223/tcp
dionaea             Up 5 minutes                         0.0.0.0:20-21->20-21/tcp,
                                                         0.0.0.0:42->42/tcp,
                                                         0.0.0.0:135->135/tcp,
                                                         0.0.0.0:443->443/tcp,
                                                         0.0.0.0:445->445/tcp,
                                                         0.0.0.0:1433->1433/tcp,
                                                         0.0.0.0:1723->1723/tcp,
                                                         0.0.0.0:1883->1883/tcp,
                                                         0.0.0.0:3306->3306/tcp,
                                                         0.0.0.0:69->69/udp,
                                                         0.0.0.0:5060-5061->5060-5061/tcp,
                                                         0.0.0.0:27017->27017/tcp,
                                                         0.0.0.0:5060->5060/udp,
                                                         0.0.0.0:8081->80/tcp
elasticpot          Up 5 minutes                         0.0.0.0:9200->9200/tcp
elasticsearch       Up 5 minutes (healthy)               127.0.0.1:64298->9200/tcp
kibana              Up 5 minutes (healthy)               127.0.0.1:64296->5601/tcp
logstash            Up 5 minutes (healthy)
head                Up 5 minutes (healthy)               127.0.0.1:64302->9100/tcp
ewsposter           Up 5 minutes
glastopf            Up 5 minutes                         0.0.0.0:80->80/tcp
honeytrap           Up 5 minutes
mailoney            Up 5 minutes                         0.0.0.0:25->2525/tcp
netdata             Up 5 minutes (healthy)
rdpy                Up 5 minutes                         0.0.0.0:3389->3389/tcp
spiderfoot          Up 5 minutes (healthy)               127.0.0.1:64303->8080/tcp
ui-for-docker       Up 5 minutes                         127.0.0.1:64299->9000/tcp
suricata            Up 5 minutes
p0f                 Up 5 minutes
vnclowpot           Up 5 minutes                         0.0.0.0:5900->5900/tcp

どのポートが、一般的にはどんなアプリケーションに対応しているかは TCPやUDPにおけるポート番号の一覧 - Wikipedia を参考にしてもらえるといいと思いますが、主なものを上げると

ポート アプリケーション
20,21 FTP
22 SSH
23 Telnet
25 SMTP
80 HTTP
443 HTTPS

あたりでしょうか


Kibanaにアクセスしてみる

これでだいたいできたので、実際に動いて、ログが収集されていることを確認してみます。 https://(インスタンスのipアドレス):64297/ にアクセス。 証明書がないので怒られちゃいますが気にせず進んじゃいます。

はい!!

f:id:y0m0g1:20181210183109p:plain

できた!できた!攻撃きた!

T-potを起動して数分しか経っていませんが、中国とロシアから攻撃が来ていることを確認しました。

最後に調整

htopでみてみるとこんなかんじでした。

f:id:y0m0g1:20181210183500p:plain

起動してすぐなのにメモリがかつかつ気味ですね? ということで、色々調整していきます。

おなじみgraneedさんのブログを参考にしました

graneed.hatenablog.com

けちってElasticsearchの保存期間を30日にした以外は同じようにしました。 つまり、

  • swap領域の作成
  • ログの保存期間を30日→15日に短縮
  • Elasticsearchの保存期間を90日→30日に短縮

観察してみた

子供みたいな感想しか出てこないけれども許してね

たくさん来た既知の脆弱性への攻撃

既知の脆弱性にはCVEという共通識別子を割り振って、世界共通の枠組みで管理しています。 (ここではCANもCVEと同じ意味だと思ってください)

30日間の集計期間ではこんな感じの結果になりました

f:id:y0m0g1:20181210224014p:plain

CVE-2001-0540 がぶっちぎって多いですね。 ちょっと詳しく見てみましょう。

この脆弱性、2001って番号からわかる方もいらっしゃるかもしれませんが、 かなり古い脆弱性になっています。

CVE-2001-0540 : Memory leak in Terminal servers in Windows NT and Windows 2000 allows remote attackers to cause a denial of service (mem

Microsoft Security Bulletin MS01-040 - Important | Microsoft Docs

2001年7月25日に公開されたこの脆弱性、どんなものかというと、

Memory leak in Terminal servers in Windows NT and Windows 2000 allows remote attackers to cause a denial of service (memory exhaustion) via a large number of malformed Remote Desktop Protocol (RDP) requests to port 3389.

私なりに訳してみれば

ポート3389への大量の不正RDPリクエストを送ることで、WindowsNT/2000のターミナルサーバーでメモリーリークが発生する。これは攻撃者のDoS攻撃(メモリ枯渇)に悪用されうる。

あたりでしょうか。 今どきWindowsNT/2000で、修正パッチがあてられていないサービスなんてあるのかな? なんて思いますが、この攻撃が成功すればシステムダウンを引き起こせます。

もしかしたら、過去に作成したbotによる攻撃が2018年になっても、世界の何処かで生き残っている…… なんてこともあるかもしれないですね。少しロマンが……ないわ。

そういえばどこかの実験室でWindows2000を見かけた気がする?


つかっちゃいけないユーザー名・パスワード

sshのポートに対しての攻撃に対応するハニポがCowrieです。

f:id:y0m0g1:20181210230014p:plain

そこで 試しに使われたユーザー名とパスワードのランキング です。 このあたりの組み合わせは使わないようにしましょう*13、 っていうのがわかりました。攻撃に使われちゃうので。

参考までに

2017年最悪のパスワード100発表、トップは不動の「123456」 - GIGAZINE


あなたの攻撃はどこから?

ここ30日の攻撃を国別に分類すると、こんな感じです

f:id:y0m0g1:20181210231015p:plain

地図にするとこんな感じ

f:id:y0m0g1:20181210231147p:plain

アメリカ・中国・ロシアからの攻撃が多い ですね。 わかりやすい、Kibanaすごい!

国はごまかせると思うので、あくまでも参考程度に。 大国ばっかりですね、怖い


あからさまな

12/08のログでこんなものが

f:id:y0m0g1:20181210232503j:plain

ここ見てみてください

f:id:y0m0g1:20181210232544p:plain

これは uname -a ; cat /etc/passwd ; exit の入力があったことを示しています。

uname -a でシステム情報を入手し、 cat /etc/passwd でユーザーの一覧を取得*14し、 exit で何事もなかったかのように退出します。

ログの中で etc/passwd をキーワードにして検索したら引っかかりました。 どうやら韓国の Korea Telecom社の回線を利用してきてアクセスしてきたみたいです。 etc/passwd は定番とも言えるファイルだけに、ここにアクセスを試みようとしているのは、 それはそれでびっくりです(2回目)

ただ、同様の攻撃が過去にもありました。が、ログの保存期間を超えていたので、 私のTwitterのスクショで許してください(ちょっと気持ち悪い)

f:id:y0m0g1:20181210233626p:plain

11/23にもありました。 同じ攻撃を長い期間で繰り返す のは、 結構 粘着質な感じ がありますね……


お金の話

最初の方で150$のクレジットをもらってウハウハな話をしたのですが、 実際にはどのくらいのお金がかかったのでしょう

f:id:y0m0g1:20181210234855p:plain

0.00JPY! ただ! やったね! 今月は950円位かかりそうな感じだけど気にしない!

実際思ったより安いので、気軽にできちゃうかもしれないですね。


感想とか

初めてはにぽをやってみて、実際に攻撃を受けているのを観察するのは、 想像以上に嬉しく感じてしまいました。M寄りなんですかね……

拙い、なんちゃって解析で、どうか許してください。 解析でも何でもないなあ……時間あったらもうちょっと詳しくやりたいです。 あとWOWHoneypotも運用したほうが良さそうだな

最後の方になると時間がない!って慌てて書いてしまっているので、 もともと乱れている筆が抑えきれなくなっています。 読みにくかったと存じますが、最後までお付き合いいただきありがとうございました。

もともと、EEIC Advent Calendarに憧れを抱いていたので、 こうして記事を投稿できるのは嬉しいです。 よかったら学科の皆さん、あるいは将来の学科民、ぜひ投稿してみてください。

最後になりますが、不備とか不足している点がありましたら、 コメントなりツイッターなりで教えていただけると幸いです。


参考リンクなど

本編では紹介しなかったものの、参考になったサイト様たちをここに紹介させていただきます。

https://blackle0pard.net/wxn7jq/

ハニーポット詰め合わせT-potをAmazon EC2上で10日間運用してかかった費用の話 - スープの上で

【ハニーポットの検証】ハニーポット設置2日目 - サイバーセキュリティはじめました

EC2上にHoneypot(T-Pot)をインストールして、サイバー攻撃をELKで可視化してみた - Qiita

ありがとうございます🙇

www.shuwasystem.co.jp

これを読んで面白かったのですが、 技量が足りず活かしきれなかった……


*1:電情はいいぞぉで検索!

*2:ここでは触れませんが、危険な環境にアクセスして能動的に攻撃を受ける手法もあります

*3:GitHub

*4:NVIDIA

*5:JSON

*6:元記事はhttp://www3.nhk.or.jp/kansai-news/20181121/0009933.htmlなのに、今は見れなくなっています……なぜ?

*7:gooのGoogleキャッシュ:https://webcache.googleusercontent.com/search?q=cache:ZlHaDUwmcGcJ:https://news.goo.ne.jp/article/nhknews/nation/nhknews-10011719041_20181121.html+&cd=3&hl=ja&ct=clnk&gl=jp

*8:分け方にも色々あると思いますが

*9:ブクマに登録せずに、ブラウザのタブで開いたまま残しておいたってだけ

*10:Elasticsearch, Logstash, Kibanaのこと。ログ基盤

*11:利用規約が気になる方もいるかもしれませんが、攻撃目的ではないので私が見た限りOKです

*12:https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/t2-credits-baseline-concepts.html

*13:みんなには当たり前だとおもうけれども!

*14:最近では/etc/passwdにはパスワード情報を置かないようになっていると思います