はじめに
今回は,pythonのpandasを使ってハニーポットのログを分析してみたという記事になります.なお,これは個人の遊びになります.
cowrieってなに?
cowrieとは,SSHやTelnetのセキュリティー的脆弱性をあえて作ってクラッカにあえて攻撃をさせるものです.(低対話側パニーポット)
導入記事は前記事にありますのでもしよろしければご覧ください.
https://qiita.com/asmg07/items/73808eee7c960707da2b
分析する前段階(jaonログについて)
ログを分析する前にログの中身について理解する必要があります.
ここでは,全てではなくとりあえず必要なものだけをピックアップして
紹介します.
eventidの種類について(自分が分析する上で使ったもののみを紹介)
eventid | 意味 |
---|---|
cowrie.login.success | ログインに成功した |
cowrie.login.failed | ログインに失敗した |
cowrie.command.input | コマンド実行に成功した |
cowrie.command.failed | コマンド実行に失敗した |
参考サイト
pandasを使って実際にログの分析
前置き
環境は,vscodeにjupterのプラグインを導入してvscode上に対話型でプログラムを実行しています.
####①全体像の把握
#2020-12-13 cowrieログ分析について
import pandas as pd #ライブラリのインポート
import datetime #ライブラリのインポート
fname = 'cowrie.json' #ファイルの読み込み
access = pd.read_json(fname,lines=True) #pandasに通す
df=pd.DataFrame(access)
df['timestamp']=pd.to_datetime(df['timestamp'])#timeを時間形式に変換
df #表示
②取りたいデータごとに分析を開始
(1)アクセスに成功しているログを抽出
#ログインに成功したログの抽出
df2=df.query('eventid == "cowrie.login.success"') #cowrie.login.successのログのみを抽出
print("ログイン成功回数:"+str(len(df2))) #行数を表示(行数=ログインに成功した数)
password=df2['password'].value_counts() #どのパスワードでログインしているかを可視化
password1=df2['password'].value_counts(normalize=True) #最頻値を可視化
print(password)
print("パスワード頻度")
print(password1)
実行結果(一部抜粋)
※IDに関しては,初期設定でrootやadminなどのデフォルト名でログインされることを想定しています.
(1)アクセスに成功しているログを抽出
※IDに関しては,初期設定でrootやadminなどのデフォルト名でログインされることを想定しています.
#ログインに成功したログの抽出
df2=df.query('eventid == "cowrie.login.success"') #cowrie.login.successのログのみを抽出
print("ログイン成功回数:"+str(len(df2))) #行数を表示(行数=ログインに成功した数)
password=df2['password'].value_counts() #どのパスワードでログインしているかを可視化
password1=df2['password'].value_counts(normalize=True) #最頻値を可視化
print(password)
print("パスワード頻度")
print(password1)
(2)アクセスに失敗しているログを抽出
#ログインに失敗したログの抽出
df2=df.query('eventid == "cowrie.login.failed"')
print("ログイン失敗回数:"+str(len(df2)))
nopassword=df2['password'].value_counts()
nopassword1=df2['password'].value_counts(normalize=True)
print(nopassword)
print("パスワード頻度")
print(nopassword1)
(3)実行されているコマンドを抽出する
#実行に成功したコマンド
df1=df.query('eventid == "cowrie.command.input"')
print(df1['input'])
まとめと考察
まとめ:
今まで,pythonを使ったcowrieのログ分析の記事があまりネット上になかったので実際にやってみて記事にしてみました.
考察:
①サーバのIDをデフォルトのrootやadminを使うのは絶対にやめましょう
・実際に今回アクセス自体は,失敗,成功合わせて1日で22,111回アクセスされていることがわかります.port22番でrootやadminのIDをそのまま使うということはそれだけで攻撃の標的にされやすいということがわかります.
②簡単なパスワードの設定はとても危険です
・今回抽出したパスワードも比較的簡単なパスワードを入力してログインされていることがわかります!危険なのでやめましょう.
また,ネットの記事を見てサーバやシステムを導入する際になにも考えずに導入してしまうと標的にされてサーバに簡単にアクセスされてしまう危険があることを認識しましょう.
今回は失敗していますが,自作iotを比較的簡単に作れるラズパイは攻撃の標的にされやすいというのがログインに失敗しているパスワードをみて一目瞭然でわかります.
③実行されているコマンドを見て...
今回のログでは,全てを表示していませんが,何かをダウンロードしているのがわかります.これもしかするとマルウェアかも...
最後に
今回は簡単なログの分析に留まりましたが,持続的に分析できるツールを今後作れればいいなと思っています.
ありがとうございました.