はじめてのHoneypot🍯
はじめに
この記事は EEICアドベントカレンダー2018 11日目の記事です。
- 12/10の投稿はこちら
- 12/12の投稿はこちら
簡単な自己紹介と記事の内容
はじめましての方ははじめまして、EEIC2018のよもぎといいます。工学部電子情報工学科のB3です。
セキュリティとかCTFとかに興味がありつつ、
いろいろなところに足を突っ込んでいて 大変な 楽しい生活を送っています。
Twitterやっていたりするので良かったらどぞ。 (学科垢と何かの垢)
この記事は、初心者によるHoneypot体験記 となっています。
初心者の私が実際にHoneypotを運用してみたよ 、みたいなことを書くので、 あまり技術的な面には期待しないでください。
TL;DR
- ハニーポットをAWS+T-potで運用してみました
- この記事の殆どが導入手順です
- ちょっとだけログを解析してみます
- 初めてだけどもHoneypotはいいぞぉ👍*1
- 間違っていたり補足があったりしたら教えてください!
そもそもHoneypotってなに?
Honeypot とは、 わざと攻撃されやすい環境を用意する*2ことで、 つられてやってきた実際の攻撃者の行動ログだったりマルウェアを収集したりするもの で、 コンピュータ上での”おとり捜査におけるおとりの役割”みたいなものです。
(Honeypotあるいはハニーポット、って一々書くのが面倒になってしまったのでこれからは ハニポ って言っていきます)
設計図共有サイト*3だったり、謎の半導体メーカー*4だったり、聞いたこともないような怪しい拡張子*5だったり、 メディアで用いられる"翻訳"と違和感は切っても切り離せない関係ですが、このハニポも
「ハニーポット」と呼ばれる特殊な機器
けれども、 ハニポそれ自体はふつうの機器でも設置できる ものなので、 なんだかなぁ って思うのです。
ハニポには大きく分けて2種類あります。つまり、 高対話型ハニポ と 低対話型ハニポ です。*8 高対話型は、脆弱性があるOSやソフトウェアなどの「ほんもの」を使用したハニポである一方で、 低対話型は、エミュレートをしたものを使用するハニポです。 今回は比較的初心者向けの低対話型を用いました。
ハニポを運用するに当たって注意なのですが、基本的に脆弱な環境を用意するので、 設定を誤ることで攻撃の踏み台に転用されたり、 運用しているハニポを悪用されないようにしなければなりません。
めっちゃ気軽にできる! というわけではないので、試してみたい方は十分に気をつけてください。
それでは前書きはこのあたりにして、実際に設定して動かしてログを見てみたことを書いていきたいと思います。
ハニポやっていき
前から気になっていたハニポの運用で、ある日こんなサイトがついったで回ってきました
あ、なんかよさそ〜 という軽い気持ちでチェックしておいて、2ヶ月ぐらい寝かせておいて*9 それでアドベントカレンダーにあわせて始めてみた感じです。
その際にとても参考になったのが、graneedさんの次のブログとスライドです。
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のアーキテクチャはこんな感じ(すごい)
学生だとAWSがいいっぽい
GitHub Educateすごい
AWSを趣味の範囲で使うのは初めてのことだったのですが、 その際にmasao君に GitHub Educate を教えてもらいました。
GitHub Studentならば 150ドルのAWSクレジットが無料でもらえる という、 すんごいものなので是非みてみてください! 他にもいろいろな特典があるみたい
ただ、ここから Uniqueリンクをクリックしても無限に読み込み中になって使えない…… ということで、
- URLのクエリに渡されるpromoCodeプロパティをコピーして、
- それをAWSの新規アカウント作成のときにペースト
- そうしたら、AWS Educate Application Approvedみたいなメールが来る
- そのメールに書いてあるcredit codeをAWS内で入力して150$ゲット!
みたいな めんどくさい 手順を踏んで無事にAWSのアカウントを作成できました。
リンククリックして全部おっけーぐらいにしてほしかったよ……
AWSのアカウントを作ったら、次のQiitaの記事を参考に初期設定しました。
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
を選びました。
インスタンスタイプは tc2.medium
を選んで、ボリュームサイズを30GB に設定しました。
tc2.medium
は有料インスタンスなんですが、CPUの使用率が20%を切っていれば課金されない*12という裏技も。
T-potのシステム要件が4GB RAM & 64GB ROMな感じなのですが、AWSの無料枠で納めるために30GBにしました。
セキュリティーグループはこんな感じにして
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
ログインユーザー名がubuntu
、IPアドレスが 255.aaa.bbb.ccc
、ポート番号が22番の時には、
次のようにしてsshをつなぎます
PS C:\> ssh -l ubuntu -p 22 -i <秘密鍵へのパス> 255.aaa.bbb.ccc
あとは、このブログの通りのことをしました。 滞りなく、できました。わいわい
こんな感じのことをやりました
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上でインスタンスのポートを 開けに開けまくります。
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/
にアクセス。
証明書がないので怒られちゃいますが気にせず進んじゃいます。
はい!!
できた!できた!攻撃きた!
T-potを起動して数分しか経っていませんが、中国とロシアから攻撃が来ていることを確認しました。
最後に調整
htopでみてみるとこんなかんじでした。
起動してすぐなのにメモリがかつかつ気味ですね? ということで、色々調整していきます。
おなじみgraneedさんのブログを参考にしました
けちってElasticsearchの保存期間を30日にした以外は同じようにしました。 つまり、
- swap領域の作成
- ログの保存期間を30日→15日に短縮
- Elasticsearchの保存期間を90日→30日に短縮
観察してみた
子供みたいな感想しか出てこないけれども許してね
たくさん来た既知の脆弱性への攻撃
既知の脆弱性にはCVEという共通識別子を割り振って、世界共通の枠組みで管理しています。 (ここではCANもCVEと同じ意味だと思ってください)
30日間の集計期間ではこんな感じの結果になりました
CVE-2001-0540
がぶっちぎって多いですね。
ちょっと詳しく見てみましょう。
この脆弱性、2001って番号からわかる方もいらっしゃるかもしれませんが、 かなり古い脆弱性になっています。
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です。
そこで 試しに使われたユーザー名とパスワードのランキング です。 このあたりの組み合わせは使わないようにしましょう*13、 っていうのがわかりました。攻撃に使われちゃうので。
参考までに
2017年最悪のパスワード100発表、トップは不動の「123456」 - GIGAZINE
あなたの攻撃はどこから?
ここ30日の攻撃を国別に分類すると、こんな感じです
地図にするとこんな感じ
アメリカ・中国・ロシアからの攻撃が多い ですね。 わかりやすい、Kibanaすごい!
国はごまかせると思うので、あくまでも参考程度に。 大国ばっかりですね、怖い
あからさまな
12/08のログでこんなものが
ここ見てみてください
これは uname -a ; cat /etc/passwd ; exit
の入力があったことを示しています。
uname -a
でシステム情報を入手し、 cat /etc/passwd
でユーザーの一覧を取得*14し、
exit
で何事もなかったかのように退出します。
ログの中で etc/passwd
をキーワードにして検索したら引っかかりました。
どうやら韓国の Korea Telecom社の回線を利用してきてアクセスしてきたみたいです。
etc/passwd
は定番とも言えるファイルだけに、ここにアクセスを試みようとしているのは、
それはそれでびっくりです(2回目)
ただ、同様の攻撃が過去にもありました。が、ログの保存期間を超えていたので、 私のTwitterのスクショで許してください(ちょっと気持ち悪い)
11/23にもありました。 同じ攻撃を長い期間で繰り返す のは、 結構 粘着質な感じ がありますね……
お金の話
最初の方で150$のクレジットをもらってウハウハな話をしたのですが、 実際にはどのくらいのお金がかかったのでしょう
0.00JPY! ただ! やったね! 今月は950円位かかりそうな感じだけど気にしない!
実際思ったより安いので、気軽にできちゃうかもしれないですね。
感想とか
初めてはにぽをやってみて、実際に攻撃を受けているのを観察するのは、 想像以上に嬉しく感じてしまいました。M寄りなんですかね……
拙い、なんちゃって解析で、どうか許してください。 解析でも何でもないなあ……時間あったらもうちょっと詳しくやりたいです。 あとWOWHoneypotも運用したほうが良さそうだな
最後の方になると時間がない!って慌てて書いてしまっているので、 もともと乱れている筆が抑えきれなくなっています。 読みにくかったと存じますが、最後までお付き合いいただきありがとうございました。
もともと、EEIC Advent Calendarに憧れを抱いていたので、 こうして記事を投稿できるのは嬉しいです。 よかったら学科の皆さん、あるいは将来の学科民、ぜひ投稿してみてください。
最後になりますが、不備とか不足している点がありましたら、 コメントなりツイッターなりで教えていただけると幸いです。
参考リンクなど
本編では紹介しなかったものの、参考になったサイト様たちをここに紹介させていただきます。
https://blackle0pard.net/wxn7jq/
ハニーポット詰め合わせT-potをAmazon EC2上で10日間運用してかかった費用の話 - スープの上で
【ハニーポットの検証】ハニーポット設置2日目 - サイバーセキュリティはじめました
EC2上にHoneypot(T-Pot)をインストールして、サイバー攻撃をELKで可視化してみた - Qiita
ありがとうございます🙇
これを読んで面白かったのですが、 技量が足りず活かしきれなかった……
*1:電情はいいぞぉで検索!
*2:ここでは触れませんが、危険な環境にアクセスして能動的に攻撃を受ける手法もあります
*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にはパスワード情報を置かないようになっていると思います