diff options
author | We-unite <3205135446@qq.com> | 2024-08-09 13:56:37 +0800 |
---|---|---|
committer | We-unite <3205135446@qq.com> | 2024-08-12 14:16:51 +0800 |
commit | 3e49a044d22635157916651f0acb5a062397b34b (patch) | |
tree | 254cd9a2605fa003f4579e7c5510e6e2aea19375 /src/organize.go | |
parent | ea32e017e579f168d87732893335c38d539ac2f1 (diff) | |
download | godo-3e49a044d22635157916651f0acb5a062397b34b.tar.gz godo-3e49a044d22635157916651f0acb5a062397b34b.zip |
Add db structure, fix filePath, start filtering
This commit I made several changes:
- Use structure instead of simple bson.M(interface{}). bson.M has
some shortcomings: 1) It makes the database in chaos and hard to
read, but this's not important; 2) Some entrys may has more or
less content than others, which makes it hard to decode and filt.
So I design new data structure to encode and decode. Hopes that
there's no bugs.
- Fix the way to calculate file path. The original method is to add
all the PATH entries together, that's totally wrong! PATH entry
has several types, as it shows in "objtype". I can't find it in
the kernel src code, so what i know is just "PARENT" means the dir
the file is in, while the filename itself has the path, so we
whould ignore all "PARENT"s. When the src code is found, we should
check it again.
- Fix bugs in updating. The update function of mongodb is set to
required to has a '$' such as 'set'/'push', so when we update a
whole doc, we should use replace but not update function. And,
we should never ignore the error infomation it gives us.
Hope that there's no more bugs for this Big Change.
Now its' time to write filter as well as viewer. Best wishes with
NO BUGS!
Diffstat (limited to '')
-rw-r--r-- | listener/organize.go (renamed from src/organize.go) | 32 |
1 files changed, 16 insertions, 16 deletions
diff --git a/src/organize.go b/listener/organize.go index 293371b..0c05eb4 100644 --- a/src/organize.go +++ b/listener/organize.go | |||
@@ -23,14 +23,12 @@ var event Event | |||
23 | var pEvent *Event | 23 | var pEvent *Event |
24 | var eventId, argc int | 24 | var eventId, argc int |
25 | 25 | ||
26 | // var errs [6]error | ||
27 | |||
28 | // 要用的正则匹配列表 | 26 | // 要用的正则匹配列表 |
29 | var ( | 27 | var ( |
30 | syscallRegex = regexp.MustCompile(`audit\((\d+\.\d+):(\d+)\).*?syscall=(\d+)(?:.*?exit=([-+]?\d+))?.*?ppid=(\d+) pid=(\d+).*?subj=(.*?):(.*?):(.*?):(.*?) .*?$`) | 28 | syscallRegex = regexp.MustCompile(`audit\((\d+\.\d+):(\d+)\).*?syscall=(\d+)(?:.*?exit=([-+]?\d+))?.*?ppid=(\d+) pid=(\d+).*?subj=(.*?):(.*?):(.*?):(.*?) .*?$`) |
31 | execveRegex = regexp.MustCompile(`audit\(\d+\.\d+:(\d+)\): argc=(\d+)`) | 29 | execveRegex = regexp.MustCompile(`audit\(\d+\.\d+:(\d+)\): argc=(\d+)`) |
32 | argsRegex = regexp.MustCompile(`a\d+=("(.*?)"|([0-9a-fA-F]+))`) | 30 | argsRegex = regexp.MustCompile(`a\d+=("(.*?)"|([0-9a-fA-F]+))`) |
33 | pathRegex = regexp.MustCompile(`audit\(\d+\.\d+:(\d+)\): item=(\d+) name="(.*?)"`) | 31 | pathRegex = regexp.MustCompile(`audit\(\d+\.\d+:(\d+)\): item=(\d+) name="(.*?)" .*objtype=([A-Z]+) `) |
34 | cwdRegex = regexp.MustCompile(`audit\(\d+\.\d+:(\d+)\): cwd="(.*?)"`) | 32 | cwdRegex = regexp.MustCompile(`audit\(\d+\.\d+:(\d+)\): cwd="(.*?)"`) |
35 | proctitleRegex = regexp.MustCompile(`audit\(\d+\.\d+:(\d+)\): proctitle=("(.*?)"|([0-9a-fA-F]+))$`) | 33 | proctitleRegex = regexp.MustCompile(`audit\(\d+\.\d+:(\d+)\): proctitle=("(.*?)"|([0-9a-fA-F]+))$`) |
36 | eoeRegex = regexp.MustCompile(`audit\(\d+\.\d+:(\d+)\)`) | 34 | eoeRegex = regexp.MustCompile(`audit\(\d+\.\d+:(\d+)\)`) |
@@ -112,12 +110,12 @@ func syscallRaw(rawEvent libaudit.RawAuditMessage) { | |||
112 | tag: EXECVE, | 110 | tag: EXECVE, |
113 | timestamp: event.timestamp, | 111 | timestamp: event.timestamp, |
114 | syscall: event.syscall, | 112 | syscall: event.syscall, |
115 | exit_code: a[0], | 113 | // exit_code: a[0], // 为啥这么写? |
116 | ppid: event.ppid, | 114 | ppid: event.ppid, |
117 | pid: event.pid, | 115 | pid: event.pid, |
118 | argc: 0, | 116 | argc: 0, |
119 | argv: make([]string, 0), | 117 | argv: make([]string, 0), |
120 | cwd: "", | 118 | cwd: "", |
121 | }) | 119 | }) |
122 | case "open": | 120 | case "open": |
123 | // 检查打开的权限 | 121 | // 检查打开的权限 |
@@ -129,7 +127,7 @@ func syscallRaw(rawEvent libaudit.RawAuditMessage) { | |||
129 | tag: FILEOPEN, | 127 | tag: FILEOPEN, |
130 | timestamp: event.timestamp, | 128 | timestamp: event.timestamp, |
131 | syscall: event.syscall, | 129 | syscall: event.syscall, |
132 | exit_code: uint64(exit), | 130 | exit_code: exit, |
133 | ppid: event.ppid, | 131 | ppid: event.ppid, |
134 | pid: event.pid, | 132 | pid: event.pid, |
135 | argc: 0, | 133 | argc: 0, |
@@ -143,7 +141,7 @@ func syscallRaw(rawEvent libaudit.RawAuditMessage) { | |||
143 | tag: FILEWRITE, | 141 | tag: FILEWRITE, |
144 | timestamp: event.timestamp, | 142 | timestamp: event.timestamp, |
145 | syscall: event.syscall, | 143 | syscall: event.syscall, |
146 | exit_code: uint64(exit), | 144 | exit_code: exit, |
147 | ppid: event.ppid, | 145 | ppid: event.ppid, |
148 | pid: event.pid, | 146 | pid: event.pid, |
149 | argc: 0, | 147 | argc: 0, |
@@ -157,7 +155,7 @@ func syscallRaw(rawEvent libaudit.RawAuditMessage) { | |||
157 | tag: FILECLOSE, | 155 | tag: FILECLOSE, |
158 | timestamp: event.timestamp, | 156 | timestamp: event.timestamp, |
159 | syscall: event.syscall, | 157 | syscall: event.syscall, |
160 | exit_code: uint64(exit), | 158 | exit_code: exit, |
161 | ppid: event.ppid, | 159 | ppid: event.ppid, |
162 | pid: event.pid, | 160 | pid: event.pid, |
163 | argc: 0, | 161 | argc: 0, |
@@ -271,6 +269,7 @@ func path(rawEvent libaudit.RawAuditMessage) { | |||
271 | eventId, _ = strconv.Atoi(string(match[1])) | 269 | eventId, _ = strconv.Atoi(string(match[1])) |
272 | // item, _ := strconv.Atoi(string(match[2])) | 270 | // item, _ := strconv.Atoi(string(match[2])) |
273 | name := string(match[3]) | 271 | name := string(match[3]) |
272 | objtype := string(match[4]) | ||
274 | 273 | ||
275 | tmp, ok = eventTable.Load(eventId) | 274 | tmp, ok = eventTable.Load(eventId) |
276 | if !ok { | 275 | if !ok { |
@@ -278,14 +277,15 @@ func path(rawEvent libaudit.RawAuditMessage) { | |||
278 | } | 277 | } |
279 | pEvent = tmp.(*Event) | 278 | pEvent = tmp.(*Event) |
280 | 279 | ||
281 | // 先看看是不是文件操作 | 280 | // 先看看是不是文件操作,再看是不是所在目录 |
282 | if pEvent.tag != FILEOPEN { | 281 | if pEvent.tag != FILEOPEN || objtype == "PARENT" { |
283 | return | 282 | return |
284 | } | 283 | } |
285 | 284 | ||
286 | if name[0] == '/' { | 285 | if pEvent.cwd == "/" || name[0] == '/' { |
287 | pEvent.srcPath = name | 286 | pEvent.srcPath = name |
288 | } else { | 287 | } else { |
289 | pEvent.srcPath += "/" + name | 288 | pEvent.srcPath = pEvent.cwd + "/" + name |
290 | } | 289 | } |
290 | // ATTENTION: 这里需要做路径简化,留给过滤清洗流程吧 | ||
291 | } | 291 | } |