teppay’s log

セキュリティ、CTF、機械学習などに興味があります。情報系学生です。興味のあることを思い立った時に書きます。曖昧なことの整理にも使います。月1が目標です。

はじめてのハニーポット(Dionaea)はじめました

f:id:teppay:20171004204926p:plain

はじめに

ハニポは以前からやってみたかったのですが、やらなきゃ卒業できない憎いタスクに追われていまして、いまになりました。
なににすればいいか分からなかったので、Dionaeaを選んだのは、IPAが推奨しているからです。
いままでハニーポットに手が出なかったのは、もちろんやらなきゃいけない事があって時間が割けなかったのが一番の理由なのですが、サーバをどうしようという問題がありまして、この度セキュキャンで見事にさくらのクラウドのクーポンをもらったので踏み切ることが出来ました。 この記事は新規性ゼロですので、新しい情報をほしい方はUターンでお願いします。 実際に始めてみると、検索してヒットするサイトの情報は古くなっていて?修正部分などが変わっている事がありましたので、それらの情報を手がかりに手探りでやってみました。そのへんで詰まっているかたは見てもらえるとありがたいです。

参考サイト

sonickun.hatenablog.com

Dionaeaとは

Dionaeaはハエトリグサという意味だそうです。
攻撃者(ハエ)をおびき寄せて自分の栄養にしちゃうハニーポット(食虫植物)ってことですよね。
いろんなプロトコルに対応しているハニーポットで、勉強不足なもんで、知らないプロトコルGitHubのProtocolsリストにありました。

github.com

環境

blackle0pard.net

  • OS : Ubuntu Server 14.04.2 LTS 64bit
    UbuntuはDionaeaのインストールにapt-getがつかえて楽らしいので..

やったこ

1. サーバ作成

前述したとおり、さくらのクラウドUbuntuのサーバを作成しました。 クーポンを入力しただけでは、色んな所でエラーがでますので、クレカ情報いれてからやりましょう。
サーバ作成の時点で自分の公開鍵を設定しておくと、最初のsshから公開鍵認証で入れて便利でした(当たり前か笑)
サーバ立てるの初めてなので、以下のQiitaを参考にして最小限の初期設定をしました。

qiita.com

ファイアウォールで許可するポートは、Dionaeaが対応しているプロトコルのポートなので、

$ sudo apt-get install ufw
$ sudo ufw allow 21
$ sudo ufw allow 80
$ sudo ufw allow 443
$ sudo ufw allow 445
$ sudo ufw allow 1433
$ sudo ufw allow 3306
$ sudo ufw allow 5060
$ sudo ufw allow 5061

からの自分が使うsshは2222ポートを使う設定にしたので

$ sudu ufw limit 2222

からのその他のポートは拒否します。

$ sudo ufw default deny

2. Dionaeaインストール

これはもうDionaeaのドキュメントどおりです

$ sudo apt-get update
$ sudo apt-get dist-upgrade
$ sudo apt-get install software-properties-common
$ sudo add-apt-repository ppa:honeynet/nightly
$ sudo apt-get update
$ sudo aot-get install dionaea

これだけです。笑

3. Dionaea起動

以下のコマンドで起動できます。

$ sudo service dionaea start

ちなみに、起動前のnmap結果は

PORT      STATE    SERVICE
25/tcp    filtered smtp
80/tcp    open     http
110/tcp   open     pop3
143/tcp   open     imap
2222/tcp  open     EtherNetIP-1
3128/tcp  open     squid-http
8080/tcp  open     http-proxy
12345/tcp filtered netbus

起動後は、

PORT     STATE SERVICE
21/tcp   open  ftp
80/tcp   open  http
110/tcp  open  pop3
143/tcp  open  imap
443/tcp  open  https
445/tcp  open  microsoft-ds
1433/tcp open  ms-sql-s
2222/tcp open  EtherNetIP-1
3128/tcp open  squid-http
3306/tcp open  mysql
5060/tcp open  sip
5061/tcp open  sip-tls
8080/tcp open  http-proxy

です。

あきらかに増えました。 上に示したnmapはオプションなしで実行したのでサービス名しか表示してくれていませんが、-sVオプションを付けることでそのポートを使っている?ソフトウェアとそのバージョンを調べて表示してくれます。これがまさにnmapが攻撃の準備行為に当たってしまうことの理由でしょうね。
そしてこれによってDionaeaの決定的な欠点(修正可)が露呈します。以下に-sVオプションをつけた結果を示します。

PORT     STATE SERVICE      VERSION
21/tcp   open  ftp          Synology DiskStation NAS ftpd
80/tcp   open  http         nginx
110/tcp  open  pop3?
143/tcp  open  imap?
443/tcp  open  ssl/http     nginx
445/tcp  open  microsoft-ds Dionaea honeypot smbd
1433/tcp open  ms-sql-s     Dionaea honeypot MS-SQL server
2222/tcp open  ssh          OpenSSH 6.6.1p1 Ubuntu 2ubuntu2.8 (Ubuntu Linux; protocol 2.0)
3128/tcp open  squid-http?
3306/tcp open  mysql        MySQL 5.7.16
5060/tcp open  sip?
5061/tcp open  ssl/sip-tls?
8080/tcp open  http-proxy?

445番ポートと1433番ポートがDionaeaとバレています。
攻撃者を騙せていません。これはデフォルトのDionaeaでは各ポートの返事に特徴があるためらしいです。これは次で修正します。

4. Nmapによる検出の回避

前述したように、Dionaeaがエミュレートしているサービスのレスポンスには特徴(シグネチャ)があるため、Nmapを使うことでDionaeaが稼働しているサーバが攻撃者にバレてしまいます。
Dionaeaであることがバレてしまうと、攻撃者はそこで攻撃をやめてしまい、私達がほしい攻撃ログが取得できません。そこで攻撃者にばれないように修正していきます。
そこで、Nmapがソフトウェアやバージョンを判定するのに使うシグネチャが収められたファイル(nmap-service-probes)を検索してDionaeaを判別するためのシグネチャを見つけてみます。

$ wget https://raw.githubusercontent.com/nmap/nmap/master/nmap-service-probes

$ cat nmap-service-probes| grep -i dionaea
match ftp m|^220 Welcome to the ftp service\r\n| p/Dionaea honeypot ftpd/
match http m|^HTTP/1\.0 200 OK\r\nContent-type: text/html; charset=utf-8\r\nContent-Length: 204\r\n\r\n<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 3\.2 Final//EN\"><html>\n<title>Directory listing for /</title>\n<body>\n<h2>Directory listing for /</h2>\n<hr>\n<ul>\n<li><a href=\"\.\./\">\.\./</a>\n</ul>\n<hr>\n</body>\n</html>\n$| p/Dionaea honeypot httpd/
match microsoft-ds m|^\0...\xffSMBr\0\0\0\0\x98\x01\x40\0\0\0\0\0\0\0\0\0\0\0\0\xff\xff\x40\x06\0\0\x01\0\x11\x07\0\x03\x01\0\x01\0\0\x10\0\0\0\0\x01\0\0\0\0\0\xfd\xe3\0\0..........\x00\x34\0W\0O\0R\0K\0G\0R\0O\0U\0P\0\0\0H\0O\0M\0E\0U\0S\0E\0R\0-\0.\0.\0.\0.\0.\0.\0\0\0|s p/Dionaea honeypot smbd/
match honeypot m|^HTTP/1\.0 200 OK\r\nAllow: OPTIONS, GET, HEAD, POST\r\nContent-Length: 0\r\nConnection: close\r\n\r\n| p/Dionaea Honeypot httpd/
match honeypot m|^SIP/2\.0 200 OK\r\nContent-Length: 0\r\nVia: SIP/2\.0/TCP nm;branch=foo\r\nFrom: sip:nm@nm;tag=root\r\nAccept: application/sdp\r\nTo: sip:nm2@nm2\r\nContact: sip:nm2@nm2\r\nCSeq: 42 OPTIONS\r\nAllow: REGISTER, OPTIONS, INVITE, CANCEL, BYE, ACK\r\nCall-ID: 50000\r\nAccept-Language: en\r\n\r\n| p/Dionaea Honeypot sipd/
match ms-sql-s m|^\x04\x01\x00\x2b\x00\x00\x00\x00\x00\x00\x1a\x00\x06\x01\x00\x20\x00\x01\x02\x00\x21\x00\x01\x03\x00\x22\x00\x00\x04\x00\x22\x00\x01\xff\x08\x00\x02\x10\x00\x00\x02\x00\x00| p/Dionaea honeypot MS-SQL server/

この結果から、FTP HTTP SMB SIP MSSQLシグネチャがあることがわかりました。

FTP

Nmapの結果からもわかるとおり、最新の?DionaeaのFTPのウェルカムメッセージはシグネチャのものとは異なっているため、修正は必要なさそうなのでとりあえず放置します。

HTTP

HTTPは修正が簡単です。シグネチャの内容を見ると、HTTPレスポンスを見ているようですが、Dionaeaは80番ポートにアクセスしてきたブラウザに/opt/dionaea/var/dionaea/roots/wwwにおいたindex.htmlの内容を表示させる仕様になっています。
よって適当なhtmlを書いて置いてあげればOKです。

SMB

参考サイトによると、

SMBの"SMB Negotiate Protocol Response"に含まれる"OemDomainName"と"ServerName"の値をチェックしている

らしいので、ここを修正してあげます。
/opt/dionaea/lib/dionaea/python/dionaea/smb/extras.pyの20行目と23行目を以下のように修正してあげます。

20   self.oem_domain_name = "MIDOMINIO"

23   self.server_name = "EQUIPO-TEST"
SIP

SIPに関しても検出されていませんので放置します。

MSSQL

MSSQLは参考サイトによると、

 MSSQLデータベースに接続する際のpre-login TDS package (Tabular Data Streams)の情報をチェックしている模様.Token Typeの値が0x00になっているので,これを0x01に変更する

らしいです。
よって、****の147行目を以下のように修正します。

r.VersionToken.TokenType = 0x01

以上でとりあえずNmapによる検出は回避できるはずです。

今後の方針

MySQLにも、Nmapでは検出されないが、特徴があるらしいので今後気が向いたら修正していきたい。
今後はとりあえずログをたっぷり取っていただいて、Dionaeaのログを可視化出来るツールであるDionaeaFRも使ってログの分析をしたり、収集できたマルウェアを解析してみたいと思います。

まとめ

今回は、いままでやってみたかったハニーポットを設置できました。
しかし、私の戦いはここからはじまる!(訳 : たくさん攻撃していただいて、攻撃トレンドを感じてみたいと思っています。)
今後の展望としては、sshハニーポットや、maliciousなメールを収集するスパムトラップも運用していきたいです。