TWLogEye開発10日目:SNMP TRAP/NetFlowの受信とsyslog/TRAPの通知ができた
今朝は、なんと2時台に起きました。助手の猫さんは、かみさんの布団で寝ていました。TWLogEyeがだいぶ動くようになってきて開発が楽しいので続きがみたくて早く目が覚めました。
昨日まででsyslogを受信してSIGMAのルールで検査するところまでできましたが、今朝は、脅威と判定した後、syslogとSNMPのTRAPで通知する部分をつけました。
syslogは
のような感じでTWSNMP FCで受信できます。
SNMPのTRAPは、
のような感じです。
調子がでてきたので、SNMPのTRAPを受信してSIGMAのルールで検査する部分も作りました。
title: trap test rule
id: 2c1d45db-f739-460e-9be9-491e1fd13e2d
status: test
description: test rule
author: Masayuki Yamai(TWSNP)
date: 2025-01-24
modified: 2025-01-24
tags:
- attack.discovery
- attack.t1083
logsource:
category: test
product: linux
detection:
selection:
snmpTrapOID.0|contains: 'coldStart'
condition: selection
falsepositives:
- Unknown
level: low
のようなルールです。coldStartのTRAPの受信を検知するルールです。
SNMPのTRAPを受信する部分を作っている時に、MIBファイルの読み込みでpanicが発生しました。
2025/01/23 16:58:29 load mib path=mibs/DISMAN-EVENT-MIB.txt
panic: 1307:15: branch (<ident>)? was accepted but did not progress the lexer at 1307:15 ("}")
goroutine 11 [running]:
github.com/alecthomas/participle.(*disjunction).Parse(0x14005de4fa8?, 0x14006a56c80, {0x103042240?, 0x14006a537a0?, 0x14005de4fe8?})
この処理は、TWSNMP FCからコピペしたものなので、問題ないはずです。どうやらGo言語のANS1を読み込むパッケージを新しいバージョンにするとだめなようです。
MIBの定義に
DEFVAL { {} }
のような部分があるとエラーになることがわかったので、とりあえず、MIBファイルを修正しました。
なんとか解決できたので、ますます調子にのってきました。
NetFlowをsFlowの対応もしようと思って、
を読み返しました。
NetFlowとsFlowは、新しいGo言語のパッケージを使おうと思っていましたが、その、パッケージをよくみると、今回の用途に向いていないことがわかりました。予定を変更して、これもTWSNMP FCと同じパッケージで作ることにしました。こうなるとsFlowをつける魅力がないので、sFlowはやめることに方針を転換しました。 移植は簡単にできました。
NetFlowのテストで使ったルールは、
title: Public Accesible IP Address
id: 13b822f1-c024-4e4b-b303-f0ecbd130710
status: test
description: Detects access external IPs
author: Masayuki Yamai(TWSNP)
date: 2025-01-24
modified: 2025-01-24
tags:
- attack.discovery
- attack.t1083
logsource:
category: test
product: netflow
detection:
selection:
dstAddr|cidr:
- '10.0.0.0/8'
- '172.16.0.0/12'
- '192.168.0.0/16'
condition: not selection
level: high
外部と通信したことを検知できます。
NetFlowの検知もうまく動きました。
早起きしたおかげで、
のような感じのところまでできました。
いよいよgRPCで外部から制御や情報の取得をできるようにしたいところですが、ここで時間切れです。
明日に続く