はじめに
前回ハニーポットを公開してみたとかハニーポット分析してみたとかという記事を書きましたが,
その後実際に毎日分析したか?と言われると分析していません.
なのでレポートツールを実際に作ってみたので公開します.
作成したプログラム
#cowrieログ分析について
import pandas as pd
import datetime
import gzip
import datetime
import requests
dt_now = datetime.datetime.now()
year=dt_now.year
mon=dt_now.month
day=dt_now.day
if day!=1:
day1=day-1
elif day==1:
if mon==1:
mon=12
day1=31
elif mon==2:
mon=mon-1
day1=28
elif mon==3 and mon==5 and mon==7 and mon==8 and mon==10:
mon=mon-1
day1=31
else:
mon=mon-1
day1=30
print(mon)
print(day1)
if mon==12 and day1==31:
year=year-1
if mon<=9:
fname = 'cowrie.json.'+str(year)+'-0'+str(mon)+'-'+str(day1)
if day1<=9:
fname = 'cowrie.json.'+str(year)+'-0'+str(mon)+'-0'+str(day1)
else:
fname = 'cowrie.json.'+str(year)+'-0'+str(mon)+'-'+str(day1)
elif mon>=9:
if day1<=9:
fname = 'cowrie.json.'+str(year)+'-'+str(mon)+'-0'+str(day1)
else:
fname = 'cowrie.json.'+str(year)+'-'+str(mon)+'-'+str(day1)
print(fname)
access = pd.read_json(fname,lines=True)
df=pd.DataFrame(access)
df['timestamp']=pd.to_datetime(df['timestamp'])
#===========================================================#
#ログインしようとしたID(ユーザーネーム)
df1=df.query('eventid == "cowrie.login.failed"')
noid=df1['username'].value_counts()
noid1=df1['username'].value_counts(normalize=True)
print(noid)
print("パスワード頻度")
print(noid1)
#ログインに成功したログ
df2=df.query('eventid == "cowrie.login.success"')
print("ログイン成功回数:"+str(len(df2)))
password=df2['password'].value_counts()
password1=df2['password'].value_counts(normalize=True)
print(password)
print("パスワード頻度")
print(password1)
#ログインに失敗したログ
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)
#実行に成功したコマンド
df3=df.query('eventid == "cowrie.command.input"')
print("実行に成功したコマンド")
print(df3['input'])
#実行に失敗したコマンド
df4=df.query('eventid == "cowrie.command.failed"')
print("実行に失敗したコマンド")
print(df4['input'])
#ダウンロードに成功
df5=df.query('eventid == "cowrie.session.file_download"')
print("ダウンロードに成功したもの")
print(df5['destfile'])
#ダウンロードに成功
print("ダウンロードに失敗したもの")
df6=df.query('eventid == "cowrie.session.file_download.failed"')
print(df6['destfile'])
#===========================================================#
def message1():
line_notify_token = ''
line_notify_api = 'https://notify-api.line.me/api/notify'
message = 'メッセージを送信します'
payload = {'message': message}
headers = {'Authorization': 'Bearer ' + line_notify_token}
line_notify = requests.post(line_notify_api, data=payload, headers=headers)
print('メッセージの送信')
def message1():
line_notify_token = ''
line_notify_api = 'https://notify-api.line.me/api/notify'
message = str(noid)
payload = {'message': message}
headers = {'Authorization': 'Bearer ' + line_notify_token}
line_notify = requests.post(line_notify_api, data=payload, headers=headers)
print('ログインしようとしたID')
def message2():
line_notify_token = ''
line_notify_api = 'https://notify-api.line.me/api/notify'
message = str(password)
payload = {'message': message}
headers = {'Authorization': 'Bearer ' + line_notify_token}
line_notify = requests.post(line_notify_api, data=payload, headers=headers)
print('ログインに成功したログ')
def message3():
line_notify_token = ''
line_notify_api = 'https://notify-api.line.me/api/notify'
message = str(nopassword)
payload = {'message': message}
headers = {'Authorization': 'Bearer ' + line_notify_token}
line_notify = requests.post(line_notify_api, data=payload, headers=headers)
print('ログインに失敗したログ')
def message4():
line_notify_token = ''
line_notify_api = 'https://notify-api.line.me/api/notify'
message = str(df3['input'])
payload = {'message': message}
headers = {'Authorization': 'Bearer ' + line_notify_token}
line_notify = requests.post(line_notify_api, data=payload, headers=headers)
print('実行に成功したコマンド')
def message5():
line_notify_token = ''
line_notify_api = 'https://notify-api.line.me/api/notify'
message = str(df4['input'])
payload = {'message': message}
headers = {'Authorization': 'Bearer ' + line_notify_token}
line_notify = requests.post(line_notify_api, data=payload, headers=headers)
print('実行に成功したコマンド')
def message6():
line_notify_token = ''
line_notify_api = 'https://notify-api.line.me/api/notify'
message = str(df5['destfile'])
payload = {'message': message}
headers = {'Authorization': 'Bearer ' + line_notify_token}
line_notify = requests.post(line_notify_api, data=payload, headers=headers)
print('ダウンロードに成功したコマンド')
message1()
message2()
message3()
message4()
message5()
message6()
最後に
この記事は未完ですがとりあえずメモ的な感じで公開します.
LINEに通知するためにはline_notify_token = 'LINEAPI'のLINEAPIの部分を変更することで
実行することができます.
他に必要なのはubuntu側で定期処理をすることが必要ですが,そこに関しては後日記入します.