2023年4月19日水曜日

ホストログの分析2 : 出現回数のカウント

 前回csvを作成しましたので、それを取り込んで各要素でどんな出現があるかを確認していきます。データに含まれている要素は、以下になります。

'UserName', 'EventID', 'LogHost', 'LogonID', 'DomainName', 'ParentProcessName', 'ParentProcessID', 'ProcessName', 'Time', 'ProcessID', 'LogonTypeDescription', 'AuthenticationPackage', 'LogonType', 'Source', 'Status', 'ServiceName', 'Destination', 'SubjectUserName', 'SubjectLogonID', 'SubjectDomainName', 'FailureReason'

この中で、取得までに時間がかかる項目は、'LogonID'、'ProcessID'、'Time'で実際やってみると24時間以上かかります。(UserName(19314s) -> 5.3時間、ProcessName(4836s) -> 1.3時間, ParentProcessID(24928s) -> 6.9時間とかかりますが、24時間以内ですので、なんとかなりそうです。)
今回はこの'LogonID'、'ProcessID'、'Time'項目以外の項目を、各要素に出現する項目の出現回数を取得して、どのような内容になっているかを確認していきます。今回は単純計算なので並列計算は使いません。

ソースコード(HostEvents_Element_Count.py)

import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
import time
import sys
import json
if __name__ == '__main__':
target_list = ['UserName', 'EventID', 'LogHost', 'DomainName', 'ParentProcessName', 'ParentProcessID', 'ProcessName', 'LogonTypeDescription', 'AuthenticationPackage', 'LogonType', 'Source', 'Destination', 'SubjectUserName', 'SubjectLogonID', 'SubjectDomainName', 'Status', 'ServiceName', 'FailureReason'] #'18項目、LogonID', 'ProcessID', 'Time'は別途計算
#(1)csvファイルの取り込み
file = './wls_day-07_all.csv'
df = pd.read_csv(file)
#(2)各プロセスで各要素の計算
for target in target_list:
element_list = df[target].unique().tolist() #ユニークリスト作成
element_count = []
for i in element_list: #出現回数をカウント
element_count.append(df[target].tolist().count(i))
df_element_count = pd.DataFrame( #データフレーム化
data=element_count,
columns=['Count'],
index=element_list
)
df_element_count.to_csv('./wls_day-07_'+str(target)+'.csv', index=True)
#python3 HostEvents_Element_Count.py

これを実行すると、以下のようなデータが得られます。(wls_day-07_EventID.csv)

これを算出することで、どんなイベントがどのような頻度ででているかがわかります。まずは基本分析として、各要素のイベント出現回数を調査しました。

0 件のコメント:

コメントを投稿