AIアシスト付きログ分析ツール(TWLogAIAN)に監視すべきWindowsイベントを教えた
今朝は5時から開発開始です。
昨日は、野菜の買い出し+近くの温泉の週末の定番コースでした。
温泉効果でぐっすり眠れました。
先週からログ分析ツールの改善をしていますが、Windowsのイベントログのレベルがほとんど正常しかないことをしらべていて、
を見つけました。
のようなことが書いてあります。これは、よいものを見つけました。
この表のレベルを反映させたくなりました。
このサイト(英語版)のデータからJSON形式のデータを作っている人
も見つけました。これを使おうかと思いましたが、3年間更新されていないようなので、心配になりました。
そこで、英語版の元サイト
の表から組み込むデータを作成することにしました。
この表を私がみてデータを入力するようなことをすれば、人的ミスだらけになるのは目に見えています。
そこで、プログラムで、このサイトの表から必要なデータを取得することにしました。
そこで使えそうなのが
です。日本語の解説記事もいろいろあります。
試しに、
package main
import (
"fmt"
"log"
"net/http"
"github.com/PuerkitoBio/goquery"
)
func GetPage(url string) {
// Request the HTML page.
res, err := http.Get(url)
if err != nil {
log.Fatal(err)
}
defer res.Body.Close()
if res.StatusCode != 200 {
log.Fatalf("status code error: %d %s", res.StatusCode, res.Status)
}
// Load the HTML document
doc, err := goquery.NewDocumentFromReader(res.Body)
if err != nil {
log.Fatal(err)
}
doc.Find("table tbody tr").Each(func(_ int, s *goquery.Selection) {
s.Find("td").Each(func(i int, s2 *goquery.Selection) {
fmt.Printf("%s\t", s2.Text())
})
fmt.Println()
})
}
func main() {
url := "https://learn.microsoft.com/en-us/windows-server/identity/ad-ds/plan/appendix-l--events-to-monitor"
GetPage(url)
}
というプログラムを書いてみました。サイトの
の表のデータだけ取得できます。
4618 N/A High A monitored security event pattern has occurred.
4649 N/A High A replay attack was detected. May be a harmless false positive due to misconfiguration error.
4719 612 High System audit policy was changed.
4765 N/A High SID History was added to an account.
4766 N/A High An attempt to add SID History to an account failed.
これは便利です。
ログ分析ツールに教えるために必要なのは、イベントIDとレベルだけです。
1列名と3列名だけです。レベルは数値に変換します。
取得する処理を
c := 0
doc.Find("table tbody tr").Each(func(_ int, s *goquery.Selection) {
id := ""
level := ""
s.Find("td").Each(func(i int, s2 *goquery.Selection) {
switch i {
case 0:
id = s2.Text()
case 2:
level = s2.Text()
}
})
if id == "" || level == "" {
return
}
if i, err := strconv.Atoi(id); err == nil && i != 0 {
l := 0
if strings.Contains(level, "High") {
l = 100
} else if strings.Contains(level, "Medi") {
l = 101
} else {
l = 102
}
if c%10 == 0 {
fmt.Println()
}
c++
fmt.Printf("%d:%d,", i, l)
}
})
fmt.Println()
のように修正してログ分析ツールに組み込むデータを作りました。
プログラムに組み込んでみると
エディタがエラーを指摘しています。同じイベントIDが2つあるというものです。もとのサイトの表をよく見ると
たしかに2つあります。イベントログの説明から下のほうが正解です。上のほうの番号を間違えたのかと思って、説明に一致するイベントIDを探しましたが、これは登録されているので、単に余分なIDが残ったようです。
たぶん、人的ミスです。
とりあえず、このデータを削除して組み込みました。
その結果、
のようにWindowsのイベントログのレベルわけがいい感じになりました。
ちなみに、AI(Google Bard)に
「Windowsのイベントログで監視すべきイベントIDを教えて?」
と聞いてみました。
MicrosoftのことをGoogleのAIに聞いても、親切に教えてくれないのかもしれません。仰せのとおりWebサイトで調べました。
明日に続く
開発のための諸経費(機材、Appleの開発者、サーバー運用)に利用します。 ソフトウェアのマニュアルをnoteの記事で提供しています。 サポートによりnoteの運営にも貢献できるのでよろしくお願います。