www.morihi-soc.net

誰もが安心して使える、安全なインターネットを目指して

OSUETA 攻撃 vs Kippo

SSH にはユーザ名を列挙される脆弱性があります.

通称 OSUETA 攻撃と呼ばれており,パスワード認証が有効になっている SSH サービスにおいて,実在するアカウントでは長いパスワード文字列を指定すると,認証エラーに時間がかかることを利用し,実際に存在するユーザ名を確認することができます.

参考
OpenSSH User EnumerationTime-Based Attack と Python-paramiko
sshによるユーザ列挙攻撃”osueta” (ろば電子が詰まっている)

そこで自称ハニーポッター(?)の私としては,SSH ハニーポットである Kippo に対して,OSUETA 攻撃を試行した場合どうなるか気になったので試してみました.

検証環境

攻撃側環境:Debian 6.0 + Python 2.6.6

Kippo 側環境:Ubuntu 12.04.4 + SSH 5.9 + Kippo 0.8

攻撃コードは @ozuma5119 さんのブログ記載の Python スクリプトをちょっと改変したものを使用.

 

脆弱性の確認

まずは攻撃コードで本当に SSH のユーザ名の列挙ができるか試してみます.

※ real が処理にかかった時間です.

 

$ time -p ./osueta.py targetIP test  2> /dev/null
real 21.78
user 0.34
sys 0.09

$ time -p ./osueta.py targetIP aaa  2> /dev/null
real 3.13
user 0.26
sys 0.05

test は存在するユーザ名で,aaa は存在しないユーザ名です.違いは一目瞭然ですね.

報告されている通り,存在するユーザ名の方が,存在しないユーザ名よりもログイン処理に明らかに長い時間(約19秒)がかかっています.

つまり今回の調査により,test ユーザアカウントは存在しているが,aaa ユーザアカウントは存在しない確率が高いと推測できてしまいました.

 

OSUETA 攻撃 vs Kippo

では,Kippo に試してみます.なお Kippo の設定ファイル(kippo.cfg)には test ユーザアカウントのみを追加しています.

$ time -p ./osueta.py targetIP test  2> /dev/null
real 1.79
user 0.24
sys 0.06

$ time -p ./osueta.py targetIP aaa  2> /dev/null
real 2.00
user 0.29
sys 0.09

$ time -p ./osueta.py targetIP root  2> /dev/null
real 1.82
user 0.27
sys 0.05

$ time -p ./osueta.py targetIP admin  2> /dev/null
real 1.78
user 0.26
sys 0.06

なんということでしょう.アカウント名が存在する・しないに関わらず同程度の処理時間がかかっていますね.
今回は統計処理をしているわけではありませんが,おそらく有意差はないでしょう.

OSUETA 攻撃 vs Kippo は,ユーザ名の列挙ができないということで Kippo の勝利です!

 

結論

SSH ハニーポットの Kippo は,SSH のユーザ名を列挙する OSUETA 攻撃に対して,脆弱ではない.
(ユーザ名を列挙することができない)

 

ハニーポットなのに脆弱ではないとはこれいかに(;´∀`)

 

Written by 森久

6月 24th, 2014 at 6:11 pm