ハニーポットのレポートを LINEで通知させてみた


はじめに

前回ハニーポットを公開してみたとかハニーポット分析してみたとかという記事を書きましたが,
その後実際に毎日分析したか?と言われると分析していません.
なのでレポートツールを実際に作ってみたので公開します.

作成したプログラム

#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側で定期処理をすることが必要ですが,そこに関しては後日記入します.