/
vuln_init.go
69 lines (61 loc) · 2.15 KB
/
vuln_init.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
package vuln
import (
"context"
"github.com/bytedance/Elkeid/server/manager/infra"
"github.com/bytedance/Elkeid/server/manager/infra/ylog"
"go.mongodb.org/mongo-driver/bson"
"go.mongodb.org/mongo-driver/mongo/options"
)
func InitVuln() {
go FlushVulnInfo()
go CalcuVulnList("crontab")
go WriteVulnProcessList("crontab")
go InitVulnConf()
go vulnStatustic()
}
// 初始化漏洞配置
func InitVulnConf() {
c := context.Background()
var vulnConf VulnConfUpdate
vulnConf.Type = VulnConfAutoUpdate
// 计算最新漏洞日期
vulnInfoCol := infra.MongoClient.Database(infra.MongoDatabase).Collection(infra.VulnInfoCollection)
updateStruct := struct {
UpdateTime int64 `json:"update_time" bson:"update_time"`
}{}
err := vulnInfoCol.FindOne(c, bson.M{}, options.FindOne().SetSort(bson.M{"update_time": -1})).Decode(&updateStruct)
if err != nil {
ylog.Infof("Find error", err.Error())
}
vulnConf.VulnLibVersion = updateStruct.UpdateTime
cpeInfoCol := infra.MongoClient.Database(infra.MongoDatabase).Collection(infra.CpeInfoCollection)
err = cpeInfoCol.FindOne(c, bson.M{}, options.FindOne().SetSort(bson.M{"update_time": -1})).Decode(&updateStruct)
if err != nil {
ylog.Infof("Find error", err.Error())
}
vulnConf.CpeLibVersion = updateStruct.UpdateTime
vulnConfCol := infra.MongoClient.Database(infra.MongoDatabase).Collection(infra.VulnConfig)
num, _ := vulnConfCol.CountDocuments(c, bson.M{"type": vulnConf.Type})
if num > 0 {
_, err := vulnConfCol.UpdateOne(c, bson.M{"type": vulnConf.Type}, bson.M{"$set": bson.M{"vuln_lib_version": vulnConf.VulnLibVersion, "cpe_lib_version": vulnConf.CpeLibVersion}})
if err != nil {
ylog.Errorf("Update error", err.Error())
}
} else {
_, err := vulnConfCol.InsertOne(c, vulnConf)
if err != nil {
ylog.Errorf("InsertOne error", err.Error())
}
}
// 初始化7日漏洞统计
num, _ = vulnConfCol.CountDocuments(c, bson.M{"type": VulnConf7DayList})
if num == 0 {
var vulnConf7Day VulnConf7Day
vulnConf7Day.Type = VulnConf7DayList
vulnConf7Day.Day7List = make([]VulnDaily, 0)
_, err := vulnConfCol.InsertOne(c, vulnConf7Day)
if err != nil {
ylog.Errorf("InsertOne error", err.Error())
}
}
}