#はじめに
今回私達4人(長谷川、飯島、韓、大橋)は、
生ログに出力される様々なデータから、必要な情報を抽出・可視化することで、
様々な障害検知などに活用出来ることを確認します。
今期(12月末まで)の検証としては、
「Windowsイベントログからログイン成功/失敗のログを収集・(可視化するために) 集計」することで、
不正アクセスの疑いを検知出来るようにします。
具体的には、以下の流れでログ収集から可視化までを検証します。
①ログ収集 > 蓄積 > 可視化 の各ツールはLinuxに導入する。
そのため、WindowsイベントログをLinuxへ転送する。(ログ出力:Winlogbeat)
②ログ検索・集計の高速化のため、収集したログを加工(整形)してログ蓄積ツールに渡す。
(ログ収集:Logstash)
③ログ蓄積ツールと可視化ツールを連携し、不正アクセスの疑いを可視化する。
(ログ蓄積:Elasticsearch、ログ可視化:Kibana)
#ログ検索ツールElasticsearchについて
今回のログ検索ツールには、
Elastic社の元でOSSとして開発されている全文検索エンジンのElasticsearchを使用します。
Elasticsearchには以下のような特徴があります。
(公式サイトから引用:https://www.elastic.co/jp/products/elasticsearch/service)
①直感的でフレキシブル
設定・デプロイが驚くほど簡単で、高機能で使いやすい設計。
②すぐれた機能を搭載
Elasticのプロダクト/サービス限定のすぐれた機能を搭載
(Machine LearningやCanvas、APM、インデックスライフサイクル管理など)。
③あらゆるユースケースに対応
多様なデータを組み合わせてセキュリティや可監視性の強化、クリティカルなユースケースに対応可能。
このElasticsearchへのデータ格納について説明する前に、
Elasticsearchで使われる用語やデータ型について説明します。
#Elasticsearchにおいて使用される用語
「Elasticsearchにおいて使用される用語」は一般的なRDBとは異なっているため、
各用語について、RDBで使用する用語との対比を交えて説明します。
- index:データを保存する領域。RDBの「Database」や「Table」にあたる。
以前は「_type」でindex内をさらに領域に分けることができましたが、現在は廃止されています。 - field:列を示す。RDBの「column」にあたる。
- document:行を示す。RDBの「record」にあたる。
#Elasticsearchのデータ型
Elasticsearchの「データ型」は多岐に渡るため、
今回使用するデータ型と関連するデータ型を中心に説明します。
- date:日時を格納する。
- integer:32ビットの符号付整数で、値の範囲は「-2147483648 ~ 2147483647」。
一般的には9桁以下の数値を格納するために用いられる。 - short:16ビットの符号付整数で、値の範囲は「-32768~32767」。
一般的には4桁以下の数値を格納するために用いられる。integer型よりも容量節約ができる。 - keyword:文字型のデータを格納する。完全一致検索に利用可能。
(正規表現などを利用することで部分一致検索も可能) - text:文字型のデータを格納する。あいまい検索に利用可能。(1文字異なる単語の検索など)
- ip:IPv4/IPv6を格納する。
#Elasticsearchの検索・集計
Elasticsearchでは収集する各項目ごとに「検索可否」と「集計可否」を設定します。
- 検索可否:指定した項目での検索可否を定義します。
- 集計可否:指定した項目で「可視化」するための集計可否を定義します。
なお、検索可否と集計可否はデフォルトで有効になっています。
無効にする場合は明示的に「false」を設定する必要がありますが、
無効設定とすることでデータ容量を節約できます。
#今回収集するデータのデータ構造について
ここまで説明した内容を踏まえて、今回収集するデータを
Elasticsearchにどのような「データ構造」で保存するかを決めていきます。
- 収集する対象(ログファイル名と項目名)
→ Windowsログ「セキュリティ」から以下の表の項目を取得します。 - 収集する項目のデータ型
→ 以下の表のデータ型の通りです。 - 収集する項目についての「検索/(可視化するための)集計」可否
→ 以下の表の通り、全項目とも「検索/集計」を実施します。 - index名:logon_event.log
項目名 | field名 | データ型 | 検索 可否 |
集計 可否 |
備考 |
---|---|---|---|---|---|
日付と時刻 | date | date | ○ | ○ | |
イベントID | event_id | short | ○ | ○ | 4桁の数値のためshort型を選択する。 |
ログオン タイプ |
log_on_type | short | ○ | ○ | 1~2桁の数値のためshort型を選択する。 |
アカウント名 | account | keyword | ○ | ○ | ログ内の「ログオンが失敗したアカウント」 というブロック内の値を使う。 |
アカウント ドメイン |
account_domain | keyword | ○ | ○ | ログ内の「ログオンが失敗したアカウント」 というブロック内の値を使う。 |
ソース ネットワーク アドレス |
network_address | ip | ○ | ○ |
上記を決めた上で、
続いてログ収集に必要になる環境構築に取り組んでいきます。
この取り組みでは12月末までに全3回のアウトプットを予定しています。
なお、次回アウトプットは12月中旬頃を予定しています。