ハニーポット詰め合わせT-potをAmazon EC2上で10日間運用してかかった費用の話
経緯
突然ですが、ある日唐突にハニーポットを運用してみたくなりました。 以前IoTマルウェアの記事を書かせていただいた経緯もあり、そういったマルウェアからの攻撃を実際に受けてみたいなと思ったのが動機です。
嘘です。
森久和昭さんの「サイバー攻撃の足跡を分析するハニーポット観察記録」が会社に置いてあって、カッコイイ!とミーハーな気持ちで運用し始めました。
サイバー攻撃の足跡を分析する ハニーポット観察記録 [ハニーポット観察記録]
- 作者: 森久和昭
- 出版社/メーカー: 秀和システム
- 発売日: 2017/03/30
- メディア: Kindle版
- この商品を含むブログを見る
全くハニーポットについてなにも知らない状態だったので、調べてみたところ、ハニーポットの選定やインストール方法の記事は発見したのですが、運用にいくら位必要なのか明記しているのはあまりなかったので備忘録的に記しておきます。
あくまでも2017年5月31日時点での情報になりますが、これから運用してみようかなという方の参考になればと思います。
運用期間
運用期間は、2017年5月21日(日)17時ごろ 〜 2017年5月31日(水)10時ごろ の約10日間です。
環境
自宅にRaspberryPiが転がっていたのでそいつをハニーポット化してみようかとも思いましたが、自宅のネットワークに手を加えると同居人に鉄拳制裁を喰らうので今回はEC2を利用しました。
ホスティングサービスを利用してハニーポットを構築する前に留意しておくべきなのはサービスの利用規約ですが、AWSの日本語規約は、現時点ではハニーポット運用は明示的に許可されてもいませんし、明示的に禁止されてもいません。
今回の運用中、事業主から注意されるようなことはありませんでしたが、T-potを立てたサーバ自体が侵害されてしまった場合、事業主の判断でインスタンスを止められたり、規約違反としてサービスが利用できなくなる可能性もあります。規約は各ホスティングサービスによって異なりますので確認の上実施ください。
黒彪さんが以下の記事にて各サービスに問い合わせた結果を載せていらっしゃるので、参考にしてください。
今回EC2上に立てた環境は以下の通りです。
項目 | タイプ |
---|---|
ホスティングサービス | AWS EC2 |
リージョン | 東京 |
インスタンスタイプ | t2.medium |
メモリ | 4GB |
ディスク | SSD64GB(ボリュームタイプgp2) |
OS | Ubuntu16.04 LTS |
ハニーポット | T-pot 16-10 |
T-potの要求スペックが結構高い(ハニーポット+ELKで可視化して見ようと思うとメモリ最低4GB、ボリューム最低64GB)のでこんなことになっております。 別にSSDにする必要はなかったと思うのですが、いい機会なので使ってみました。
T-potのインストールについてはこちらがわかりやすかったので参考にさせていただきました。
上記記事ではElastic IPが割り当てられていますが、Elastic IPは作成すると追加料金がかかったことと(かなり微々たるものではありましたが)、割り当てられるIPが北米のものになってしまったので日本のIP帯にくる攻撃が見たかったため今回は割り当てていません。
このような感じの構成で10日間、運用してみました。
かかった費用
項目 | 価格 |
---|---|
Data Transfer / Asia Pacific (Tokyo) Region | $0.08 |
Elastic Compute Cloud / Asia Pacific (Tokyo) Region | $17.81 |
消費税(日本) | $1.43 |
合計 | $19.32 |
合計(円) | ¥2,168 |
※レートはあくまでもAmazonが管理しているので為替レートを即時反映しているわけではないと思われる
このスペックならそんなもんか〜と思っていたのですが、方々から「高い」と言われるので、日常的にサーバーを運用している人にとっては多分高いんだと思います。SSDをHDDにすればもう少し抑えられそうです。
ちなみにさくらのVPSとかでも料金を見積もってみましたが、メモリ4GB以上/SSDで64GB以上…とするとこんな感じになってしまい、あまり値段的には変わらない感じでした。
ConoHaはもう少し安いようなので、移動しようかなあと検討中です。
ConoHaはハニーポット構築は不可とのことでした。
攻撃を観察してみたい人はハニーポットOKなVPSとかでぽこっとサーバを立てて1週間とか運用してみると楽しいと思います。 インストール時にトラブったんですがそれでも一時間半くらいで導入できました。
install.sh、実行する前にtpotっていうユーザーとグループを作ってたら失敗するし、削除して再度実行したら再実行のこと考えてなくってそのファイルはすでに存在してるだとかそのファイルがないだとかいっていちいち止まるし、最後まで正常実行させるのにめっちゃ時間かかった
— momonga (@nhnmomonga) 2017年5月21日
観測結果
※ポート22は2222へ、23は2223へ転送されるようになってます
23日に急に観測数が跳ね上がっていますが、これは多分Shodanで見つけられるようになったのがその頃くらいからだからなのではないかと思われます。
同じ期間の辻さんのハニーポット情報と結構違うような気がするなぁと思っていましたが、telnetやsshで試行されるユーザー名とパスワードは似た感じ、という印象です。
先週の我が家のハニーポット情報です。
— 辻 伸弘(nobuhiro tsuji) (@ntsuji) 2017年5月28日
上段、ポート別アクセス数(3時間毎)
中断、試されたIDとパスワード(週を通じCowrieとDionaea毎)
下段、攻撃元の国別件数(3時間毎)
となっております。#1人CSIRT pic.twitter.com/JcwSujno76
開けてあるポートもおそらく違うでしょうし(私は全ポート解放はしてません)、どの場所のIP帯かでも違うと思うので、環境差が出てしまった、という感じでしょうか。
その他
T-pot バージョン16-10だと、一部の検体はハニーポット(cowrie)であることを検出していて捕まえられないようです。 まだリリースはされていませんが、17.06ブランチでは修正されているようなので、近々こちらにアップデートする予定です。
SECCON2016のIoT CTF Challengeに参加してきました
かなり遅いレポートですが、1月末に開催されたSECCON2016決勝大会(のワークショップの方)に行ってきました。
私が参加したのは土曜日だけでしたが、「王様達のヴァイキング」がつくられた裏話などが聞けてとても面白かったです。 そして公演の後はワークショップ、「IoT CTF Challenge」に参加してきました。 環境は手元にはないので、内容の全てを詳細にレポートできませんが、参加していない方でも雰囲気を味わっていただけるかと思います。 また、配線図は公開可能か不明だったので、ネットに落ちている配線図を引っ張ってきましたが、もし不明点や補足点などあれば、ご連絡いただければと思います。
今回開催されたIoT CTF Challengeは、
- 前半:九州大会予選で使用されたIoT CTF Challengeに関するハンズオン・解説
- 後半:IoT CTF(実践)
という構成で行われました。
## 前半
Lチカ〜EEPROMをRaspberry piから読み書き
写真は撮っていないのですが、テーブルにはRaspberry Piが既にセッティングされており(ローカルネットワークに接続されている状態)、sshやVNC ViewerでRAspberry Piに接続するところからワークショップが始まりました。
今回使わせていただいたRaspberry PiはRaspberry Pi 2 Model B。Amazonでは5000円くらいで買えるようです。
Raspberry Piに接続できると、定番のLチカを行った後、以下の練習問題とともにIC「24LC256」が手渡されました。 これは実際に九州大会予選で使用された問題だそうです(ICの内容自体は違った様子です)。
特務機関JN○Aのミッションを遂行せよ あなたは特務機関JN○Aに属しているエージェン トである.当局からとあるミッションを8ピンの ICを受け取るかたちで受けた.ミッションを果た せ!
データシートを確認するとI2C通信するICだということがわかるので、Raspberry PiでI2C通信ができるようにします。
Rasberry Pi I2C EEPROM Program - richud.com
書き込みソフトウェア
GitHub - tat/eeprog: eeprog is a Linux C program that allows you to read and write to 24Cxx EEPROMs.
ワークショップで利用したRaspberry Piには既に準備されていたので上記手順は行わずに問題に着手することができました。 ブレッドボード上にICを置き、配線をし、試しに書き込み・読み出しをしてみます。 ※回路図は公開可能か不明だったので記載しませんが、こちらなどを参考に配線すれば大丈夫かと思います。
Raspberry pi and i2c. Connecting a 24Cxx eeprom.
pi@raspi03:~/work/eeprom/eeprog $ date | ./eeprog -f -16 -w 0 -t 5 /dev/i2c-1 0x50 // ←dateコマンドの結果を書き込み eeprog 0.7.7-tear12, a 24Cxx EEPROM reader/writer Copyright (c) 2003-2004 by Stefano Barbato - All rights reserved. Copyright (c) 2011 by Kris Rusocki - All rights reserved. Bus: /dev/i2c-1, Address: 0x50, Mode: 16bit Operation: write at offset 0, Input file: <stdin> Write cycle time: 5 milliseconds Writing <stdin> starting at address 0x0 ............................. pi@raspi03:~/work/eeprom/eeprog $ ./eeprog -16 -r 0:29 -f /dev/i2c-1 0x50 eeprog 0.7.7-tear12, a 24Cxx EEPROM reader/writer Copyright (c) 2003-2004 by Stefano Barbato - All rights reserved. Copyright (c) 2011 by Kris Rusocki - All rights reserved. Bus: /dev/i2c-1, Address: 0x50, Mode: 16bit Operation: read 29 bytes from offset 0, Output file: <stdout> Reading 29 bytes from 0x0 Sat 21 Jan 17:41:58 UTC 2017 // ←先ほど書き込んだdateコマンドの結果
うまく読み書きできました。 実際に出題された問題は、同様にこのICからデータを読み出すと、以下のようにファイルが取り出せるという問題だったようです。
pi@raspberrypi:~/work/eeprom/eeprog $ ./eeprog -f -16 -r 0:0x8000 /dev/i2c-1 0x50 > image eeprog 0.7.7-tear12, a 24Cxx EEPROM reader/writer Copyright (c) 2003-2004 by Stefano Barbato - All rights reserved. Copyright (c) 2011 by Kris Rusocki - All rights reserved. Bus: /dev/i2c-1, Address: 0x50, Mode: 16bit Operation: read 32768 bytes from offset 0, Output file: <stdout> Reading 32768 bytes from 0x0 pi@raspberrypi:~/work/eeprom/eeprog $ file image image: gzip compressed data, last modified: Tue Jan 17 06:07:30 2017, from Unix pi@raspberrypi:~/work/eeprom/eeprog $ mv image image.gz ; gzip -d image.gz gzip: image.gz: decompressing OK, trailing garbage ignored pi@raspberrypi:~/work/eeprom/eeprog $ file image image: POSIX tar archive (GNU) pi@raspberrypi:~/work/eeprom/eeprog $ mv image image.tar ; tar xvd image.tar flag xxx.jpg xxx.py
flagの中身はSECCON{assemble this circuit}
で、取り出したxxx.jpgに記載された回路図を組み、Raspberry Piでxxx.pyを実行すれば解けるものだったようです。
ArduinoをAVRライタとして使う準備
次に、Raspberry PiからArduinoにプログラムを書き込んでArduinoをAVRマイコンライタにして、AVRにプログラムを(Arduinoを介して)書き込みました。 入れ子のようでややこしいですが、Raspberry Pi上でArduino IDEを起動させ、そこからArduinoを介してAVRにプログラムを書き込みます。
今回利用したArduinoはArduino nanoなので、Raspberry Pi-Arduino間はUSBで接続します。
- File->Preferencesの「Additional Board Manager URLs」にhttp://drazzy.com/package_drazzy.com_index.jsonを追加してOKを押す
- Tools->Board->BoardManagerからATTinyCore by Spence Kondeをインストールする
- Tools->Bard:“xxx(今の設定)”->Arduino Nanoを選択
- Tools->Processor:“xxx(今の設定)”->ATmega328を選択
- File->Examples->ArduinoISP->ArduinoISPを選択
- Uploadボタンを押し、Arduinoに(ArduinoSIPプログラムを)書き込む
以上でArduinoをAVRライタとして動かす準備ができました。
今回利用するAVRは、ATTniy85なので、Arduino-AVR間は以下のような感じで配線します。
ATtiny85にArduinoで書き込んでみた - Qiita
※上記に加えてRST-GND間にコンデンサを入れるとエラーを連発させず書き込めるらしい…プルアップ抵抗つけとけということなのだろうか…(内臓されてるとか書いてありますがライタがあんまりそのへんを考慮してない作りなのでしょうか?)
そして以下でArduinoからAVRに書き込みます
- Tools->Bard:“xxx(今の設定)”->ATtiny25/45/85を選択
- Tools->Chip:“xxx(今の設定)”->ATtiny85を選択
- Tools->Programmer: “xxx(今の設定)”->“Arduino as ISP"を選択
- Uploadボタンを押し、AVRにプログラムを書き込む
これでAVRにプログラムを書き込む準備ができました。
後編
ここで前半のハンズオンが終わり、IoT CTFに
出題された問題は、IC一つのみ(問題文なし)。前半でも利用された24LC256が手渡されました。 ここまででやってきたことで回答できるということなので、先ほどと同じ手順でICからデータを読み出します。
pi@raspi03:~/work/eeprom/eeprog $ ./eeprog -f -16 -r 0:0x8000 /dev/i2c-1 0x50 > image eeprog 0.7.7-tear12, a 24Cxx EEPROM reader/writer Copyright (c) 2003-2004 by Stefano Barbato - All rights reserved. Copyright (c) 2011 by Kris Rusocki - All rights reserved. Bus: /dev/i2c-1, Address: 0x50, Mode: 16bit Operation: read 32768 bytes from offset 0, Output file: <stdout> Reading 32768 bytes from 0x0 pi@raspi03:~/work/eeprom/eeprog $ ls 24cXX.c 24cXX.o dist eeprog.c i2c-dev.h Makefile WARNING 24cXX.h ChangeLog eeprog eeprog.o image README pi@raspi03:~/work/eeprom/eeprog $ file image image: gzip compressed data, last modified: Thu Jan 19 11:35:52 2017, from Unix pi@raspi03:~/work/eeprom/eeprog $ mv image image.gz pi@raspi03:~/work/eeprom/eeprog $ gzip -d image.gs gzip: image.gs.gz: No such file or directory pi@raspi03:~/work/eeprom/eeprog $ gzip -d image.gz gzip: image.gz: decompression OK, trailing garbage ignored pi@raspi03:~/work/eeprom/eeprog $ file image image: POSIX tar archive (GNU) pi@raspi03:~/work/eeprom/eeprog $ mv image image.tar; tar xvf image.tar flag xxx.ico xxx.py pi@raspi03:~/work/eeprom/eeprog $ cat flag SECCON{Assemble this circuit, and execute this code on ATtiny85.}
第一段階のフラグはSECCON{Assemble this circuit, and execute this code on ATtiny85.}
「This」はどれを指しているのでしょうか?「コードを実行しろ」と言っているので、xxx.icoが回路図なのでしょうか?
pi@raspi03:~/work/eeprom/eeprog $ file xxx.ico xxx.ico: ASCII text pi@raspi03:~/work/eeprom/eeprog $ cat xxx.ico int clk = 3; int q7 = 4; int oe = 0; int d[8] = { 0, 0, 0, 0, 0, 0, 0, 0 }; int prevClock = LOW; int flag = HIGH; void setup() { pinMode(clk, INPUT); pinMode(q7, OUTPUT); pinMode(oe, INPUT); } void loop() { if (flag == HIGH && digitalRead(clk) == LOW) { if (digitalRead(oe)==HIGH) { d[7]=d[6]=d[5]=d[4]=d[3]=d[2]=d[1]=d[0]=0; return; } int tmp = !(d[6] ^ d[5]) & 1; d[7] = d[6]; d[6] = d[5]; d[5] = d[4]; d[4] = d[3]; d[3] = d[2]; d[2] = d[1]; d[1] = d[0]; d[0] = tmp; if (d[7] != 0) { digitalWrite(q7, HIGH); } else { digitalWrite(q7, LOW); } flag = LOW; } if (flag == LOW && digitalRead(clk) == HIGH) { flag = HIGH; } } pi@raspi03:~/work/eeprom/eeprog $ cat xxx.py #!/usr/bin/env python import RPi.GPIO as GPIO import time import sys CLOCK = 36 Q7 = 38 OE = 40 COUNT = 127 def init() : GPIO.setwarnings(False) GPIO.setmode(GPIO.BOARD) GPIO.setup(CLOCK, GPIO.OUT) GPIO.setup(Q7, GPIO.IN) GPIO.setup(OE, GPIO.OUT) GPIO.output(CLOCK, GPIO.LOW) GPIO.output(OE, GPIO.HIGH) clock() GPIO.output(OE, GPIO.LOW) def clock() : GPIO.output(CLOCK, GPIO.HIGH) time.sleep(0.001) GPIO.output(CLOCK, GPIO.LOW) time.sleep(0.001) def main() : init() for _ in xrange(COUNT) : data = GPIO.input(Q7) sys.stdout.write(str(data)) sys.stdout.flush() clock() sys.stdout.write("\n") GPIO.cleanup() main()
xxx.pyもxxx.icoもプログラムですが、xxx.pyはpythonの(おそらくRaspberry pi用の)プログラム、xxx.icoはマイコン向けのプログラムのようなので、ATtiny85にこのxxx.icoを書き込んだ上でRaspberry Piの上でxxx.pyを実行すればよいのかな?と思ったのですが、ここでブレッドボード上に回路を組んでいる間にタイムアップ。最後のフラグは取得できませんでした。
まとめ
久しぶりにマイコンやブレッドボードに触れられて、とても楽しいワークショップでした。 実際にIoT CTFで出題された問題も解説していただき、IoT CTFの雰囲気を感じることができ参考になりました。
また機会があればセキュリティ系だけではなくIoT系のワークショップに参加したいです( ´ ▽ ` )ノ