diff --git a/src/assets/css/components/views/detections/detection-list/row.scss b/src/assets/css/components/views/detections/detection-list/row.scss index 4427d85e..4c430962 100644 --- a/src/assets/css/components/views/detections/detection-list/row.scss +++ b/src/assets/css/components/views/detections/detection-list/row.scss @@ -138,6 +138,29 @@ $bg-color-page: var(--el-bg-color-page); border-radius: 3px; margin-right: 10px; } + + .detection-event-name { + font-family: NotoSansSChineseRegular; + font-size: 16px; + color: var(--el-text-color-primary); + font-weight: 400; + } + + .detection-event-key { + font-family: Roboto-Black; + font-style: italic; + font-size: 12px; + color: var(--el-color-info); + letter-spacing: 0; + line-height: 14px; + font-weight: 400; + margin-left: 4px; + } + + .detection-event-line { + border-left: 1px var(--el-color-info) solid; + margin: 8px; + } } .cn-detection__body { @@ -188,6 +211,35 @@ $bg-color-page: var(--el-bg-color-page); color: var(--el-color-success); font-weight: 500; } + + .item__key { + font-family: NotoSansSChineseRegular; + font-size: 16px; + color: var(--el-text-color-primary) !important; + font-weight: 400; + } + + .item__key__type { + font-family: Roboto-Black; + font-style: italic; + font-size: 12px; + color: var(--el-color-info); + letter-spacing: 0; + line-height: 14px; + font-weight: 400; + margin-left: 4px; + margin-right: 16px; + } + + .item__key__nums { + background: rgba(250,144,28,0.14); + border-radius: 12px; + font-family: NotoSansSChineseRegular; + font-size: 12px; + color: #FA901C !important; + font-weight: 400; + padding: 2px 8px; + } } .basic-info__item1 { diff --git a/src/assets/css/components/views/detections/detection-overview.scss b/src/assets/css/components/views/detections/detection-overview.scss index df3be2a7..2b15c9c8 100644 --- a/src/assets/css/components/views/detections/detection-overview.scss +++ b/src/assets/css/components/views/detections/detection-overview.scss @@ -58,6 +58,11 @@ $color-regular: var(--el-text-color-regular); width: 80px; } + .row__content__charts { + width: 600px; + height: 220px; + } + .row__content--metric { display: flex; flex-wrap: nowrap; @@ -114,8 +119,20 @@ $color-regular: var(--el-text-color-regular); .row__content1 { display: block; padding-right: 50px; + + .charts__visual__map { + width: 490px; + height: 32px; + margin: 12px 0 10px 60px; + background: linear-gradient(to right, #d7c668, #ffdd4a, #ffb65a, #ff9a79, #d84c4c); + } } } + + .overview__row__display { + display: flex; + flex-direction: column; + } } } .overview__row-timeline { diff --git a/src/assets/css/components/views/detections/detections.scss b/src/assets/css/components/views/detections/detections.scss index fdd3be0a..2e437807 100644 --- a/src/assets/css/components/views/detections/detections.scss +++ b/src/assets/css/components/views/detections/detections.scss @@ -12,6 +12,38 @@ width: 100%; } + .detections__search { + display: flex; + + .detections__search__btns { + width: 80px; + height: 40px; + border: 1px solid var(--el-border-color-light); + margin-right: 10px; + border-radius: 2px; + display: flex; + + div { + width: 40px; + display: flex; + align-items: center; + justify-content: center; + background-color: var(--el-fill-color); + cursor: pointer; + + i { + color: var(--el-text-color-primary); + } + } + .active__btn { + i { + color: var(--el-color-primary) !important; + } + background-color: var(--el-bg-color) !important; + } + } + } + .detections__container { display: flex; flex-direction: column; diff --git a/src/assets/css/font/iconfont.css b/src/assets/css/font/iconfont.css index 8abb4231..e3cee2be 100644 --- a/src/assets/css/font/iconfont.css +++ b/src/assets/css/font/iconfont.css @@ -1,8 +1,8 @@ @font-face { font-family: "cn-icon"; /* Project id 2614877 */ - src: url('iconfont.woff2?t=1711625913930') format('woff2'), - url('iconfont.woff?t=1711625913930') format('woff'), - url('iconfont.ttf?t=1711625913930') format('truetype'); + src: url('iconfont.woff2?t=1722997039116') format('woff2'), + url('iconfont.woff?t=1722997039116') format('woff'), + url('iconfont.ttf?t=1722997039116') format('truetype'); } .cn-icon { @@ -13,6 +13,14 @@ -moz-osx-font-smoothing: grayscale; } +.cn-icon-fuhe:before { + content: "\e815"; +} + +.cn-icon-danfenxi:before { + content: "\e816"; +} + .cn-icon-tag-fill:before { content: "\e775"; } diff --git a/src/assets/css/font/iconfont.js b/src/assets/css/font/iconfont.js index 64de6787..81ad7444 100644 --- a/src/assets/css/font/iconfont.js +++ b/src/assets/css/font/iconfont.js @@ -1 +1 @@ -window._iconfont_svg_string_2614877 = '', (function (l) { var a = (a = document.getElementsByTagName('script'))[a.length - 1]; const c = a.getAttribute('data-injectcss'); var a = a.getAttribute('data-disable-injectsvg'); if (!a) { let h; let o; var i; var m; var v; const z = function (a, c) { c.parentNode.insertBefore(a, c) }; if (c && !l.__iconfont__svg__cssinject__) { l.__iconfont__svg__cssinject__ = !0; try { document.write('') } catch (a) { console && console.log(a) } }h = function () { let a; let c = document.createElement('div'); c.innerHTML = l._iconfont_svg_string_2614877, (c = c.getElementsByTagName('svg')[0]) && (c.setAttribute('aria-hidden', 'true'), c.style.position = 'absolute', c.style.width = 0, c.style.height = 0, c.style.overflow = 'hidden', c = c, (a = document.body).firstChild ? z(c, a.firstChild) : a.appendChild(c)) }, document.addEventListener ? ~['complete', 'loaded', 'interactive'].indexOf(document.readyState) ? setTimeout(h, 0) : (o = function () { document.removeEventListener('DOMContentLoaded', o, !1), h() }, document.addEventListener('DOMContentLoaded', o, !1)) : document.attachEvent && (i = h, m = l.document, v = !1, s(), m.onreadystatechange = function () { m.readyState == 'complete' && (m.onreadystatechange = null, t()) }) } function t () { v || (v = !0, i()) } function s () { try { m.documentElement.doScroll('left') } catch (a) { return void setTimeout(s, 50) }t() } }(window)) +window._iconfont_svg_string_2614877='',function(l){var a=(a=document.getElementsByTagName("script"))[a.length-1],c=a.getAttribute("data-injectcss"),a=a.getAttribute("data-disable-injectsvg");if(!a){var h,o,m,i,v,z=function(a,c){c.parentNode.insertBefore(a,c)};if(c&&!l.__iconfont__svg__cssinject__){l.__iconfont__svg__cssinject__=!0;try{document.write("")}catch(a){console&&console.log(a)}}h=function(){var a,c=document.createElement("div");c.innerHTML=l._iconfont_svg_string_2614877,(c=c.getElementsByTagName("svg")[0])&&(c.setAttribute("aria-hidden","true"),c.style.position="absolute",c.style.width=0,c.style.height=0,c.style.overflow="hidden",c=c,(a=document.body).firstChild?z(c,a.firstChild):a.appendChild(c))},document.addEventListener?~["complete","loaded","interactive"].indexOf(document.readyState)?setTimeout(h,0):(o=function(){document.removeEventListener("DOMContentLoaded",o,!1),h()},document.addEventListener("DOMContentLoaded",o,!1)):document.attachEvent&&(m=h,i=l.document,v=!1,s(),i.onreadystatechange=function(){"complete"==i.readyState&&(i.onreadystatechange=null,t())})}function t(){v||(v=!0,m())}function s(){try{i.documentElement.doScroll("left")}catch(a){return void setTimeout(s,50)}t()}}(window); diff --git a/src/assets/css/font/iconfont.ttf b/src/assets/css/font/iconfont.ttf index 1d9adb72..f9b8ddb4 100644 Binary files a/src/assets/css/font/iconfont.ttf and b/src/assets/css/font/iconfont.ttf differ diff --git a/src/assets/css/font/iconfont.woff b/src/assets/css/font/iconfont.woff index 961aad24..f229b40c 100644 Binary files a/src/assets/css/font/iconfont.woff and b/src/assets/css/font/iconfont.woff differ diff --git a/src/assets/css/font/iconfont.woff2 b/src/assets/css/font/iconfont.woff2 index 702dd23b..e6a4f9a2 100644 Binary files a/src/assets/css/font/iconfont.woff2 and b/src/assets/css/font/iconfont.woff2 differ diff --git a/src/mock/detection.js b/src/mock/detection.js index f86ec279..8d9caf94 100644 --- a/src/mock/detection.js +++ b/src/mock/detection.js @@ -141,6 +141,272 @@ if (openMock) { data.status = 1 } + return { + msg: 'success', + code: 200, + data: data + } + }) + Mock.mock(new RegExp(urlAndVersion + '/detection/event/keyFields/statistics.*'), 'get', function (requestObj) { + const data = { + resultType: 'table', + result: [ + { key: '192.168.1.1, test.com', count: 25 }, + { key: 'baidu.com,app', count: 23 }, + { key: '192.168.2.33, app', count: 15 }, + { key: '192.168.8.8, test.com', count: 12 }, + { key: 'baidu.com, test.com', count: 8 }, + { key: '192.168.1.101, test.cn', count: 5 }, + { key: 'jd.com, app', count: 25 } + ] + } + + return { + msg: 'success', + code: 200, + data: data + } + }) + Mock.mock(new RegExp(urlAndVersion + '/detection/event/list.*'), 'get', function (requestObj) { + const data = { + resultType: 'table', + result: [ + { + eventId: 1212, + eventType: 'Anonymity', + eventName: 'Tor', + matchIds: '1, 2', + keyFields: 'ip, domain', + keyValues: '192.168.1.1, test.com', + ruleId: 2, + ruleVersion: '1', + ruleType: 'indicator_match', + isBuiltin: 1, + status: 1, + startTime: 1697092617, + endTime: 1697092777, + durationS: 30 + }, + { + eventId: 1213, + eventType: 'Anonymity', + eventName: 'Tor', + matchIds: '3, 4', + keyFields: 'ip, domain', + keyValues: '192.168.1.1, test.com', + ruleId: 3, + ruleVersion: '1', + ruleType: 'threshold', + isBuiltin: 1, + status: 1, + startTime: 1697092617, + endTime: 1697092777, + durationS: 30 + }, + { + eventId: 1214, + eventType: 'Anonymity', + eventName: 'Tor', + matchIds: '5, 6', + keyFields: 'ip, domain', + keyValues: '192.168.1.1, test.com', + ruleId: 3, + ruleVersion: '1', + ruleType: 'sequence/unordered_sequence', + isBuiltin: 1, + status: 0, + startTime: 1697092617, + endTime: 1697092777, + durationS: 30 + } + ] + } + + return { + msg: 'success', + code: 200, + data: data + } + }) + Mock.mock(new RegExp(urlAndVersion + '/detection/event/name/statistics.*'), 'get', function (requestObj) { + const data = { + resultType: 'table', + result: [ + { + eventName: 'event1', + count: 25 + }, + { + eventName: 'event2', + count: 23 + }, + { + eventName: 'event3', + count: 15 + }, + { + eventName: 'event4', + count: 12 + } + ] + } + + return { + msg: 'success', + code: 200, + data: data + } + }) + Mock.mock(new RegExp(urlAndVersion + '/detection/event/count.*'), 'get', function (requestObj) { + const data = { + resultType: 'single', + result: 3 + } + + return { + msg: 'success', + code: 200, + data: data + } + }) + Mock.mock(new RegExp(urlAndVersion + '/detection/security/event/timedistribution.*'), 'get', function (requestObj) { + const data = { + resultType: 'table', + result: [ + { + statTime: 1722565322, + severity: 'critical', + count: 25 + }, + { + statTime: 1722565502, + severity: 'info', + count: 25 + }, + { + statTime: 1722566702, + severity: 'critical', + count: 25 + }, + { + statTime: 1722568322, + severity: 'critical', + count: 25 + } + ] + } + + return { + msg: 'success', + code: 200, + data: data + } + }) + Mock.mock(new RegExp(urlAndVersion + '/detection/security/event/detail.*'), 'get', function (requestObj) { + const data = { + eventIds: [1, 2, 3, 4, 5], + indicatorMatchs: [], + thresholdMatchs: [ + { + matchId: 2, + ruleId: 2, + ruleType: 'threshold', + eventType: 'Command and Control', + eventName: 'event2', + severity: 'high', + keyFields: 'domain', + keyValues: 'test.com', + thresholdNum: 3, + recordsNum: 5, + reset: 60, + startTime: 169780543432, + endTime: 169790486213 + } + ], + sequenceMatchs: [ + { + matchId: 3, + ruleId: 3, + ruleType: 'sequence/unordered_sequence', + eventType: 'Command and Control', + eventName: 'event3', + severity: 'low', + eventInfo: '[{"stage_id":"A","recv_time":10000000,"client_ip":"192.168.1.1"},{"stage_id":"B","recv_time":10000001,"client_ip":"192.168.1.2",...}]' + } + ] + } + const indicatorMatchObj = { + matchId: 1, + ruleId: 1, + ruleType: 'indicator_match', + eventType: 'Anonymity', + eventName: 'event1', + severity: 'critical', + matchNum: 20, + indicatorFields: 'ip,domain', + indicatorValues: '192.168.1.1,test.com', + reset: 60, + clientIp: '192.168.1.1', + client_country_region: 'china', + client_super_admin_area: 'beijing', + client_admin_area: 'beijing', + client_longitude: '116.30', + client_latitude: '40.50', + serverIp: '192.168.1.2', + server_country_region: 'china', + server_super_admin_area: 'beijing', + server_admin_area: 'beijing', + server_longitude: '116.30', + server_latitude: '40.50', + domain: 'test.com', + app: 'test', + matchTime: 1722503700000 + } + + for (let i = 0; i < 10; i++) { + data.indicatorMatchs.push(JSON.parse(JSON.stringify(indicatorMatchObj))) + indicatorMatchObj.matchId += 1 + indicatorMatchObj.ruleId += 2 + indicatorMatchObj.matchTime += 900000 + indicatorMatchObj.matchNum = Math.floor((Math.random() * 100) + 1) + } + + return { + msg: 'success', + code: 200, + data: data + } + }) + Mock.mock(new RegExp(urlAndVersion + '/detection/event/status/statistics.*'), 'get', function (requestObj) { + const data = { + resultType: 'table', + result: [ + { + status: 1, + count: 25 + }, + { + status: 0, + count: 23 + } + ] + } + + return { + msg: 'success', + code: 200, + data: data + } + }) + Mock.mock(new RegExp(urlAndVersion + '/detection/event/type/statistics.*'), 'get', function (requestObj) { + const data = { + resultType: 'table', + result: [ + { eventType: 'Anonymity', count: 25 }, + { eventType: 'Command and Control', count: 13 } + ] + } + return { msg: 'success', code: 200, diff --git a/src/utils/api.js b/src/utils/api.js index 394a3b3a..3c95787e 100644 --- a/src/utils/api.js +++ b/src/utils/api.js @@ -176,6 +176,17 @@ export const api = { create: { topKeys: apiVersion + '/detection/topKeys', // topKeys列表 create: apiVersion + '/rule/detection' + }, + event: { + keyStatistics: apiVersion + '/detection/event/keyFields/statistics', // 事件key统计 + nameStatistics: apiVersion + '/detection/event/name/statistics', // 事件名称统计 + statusStatistics: apiVersion + '/detection/event/status/statistics', // 状态统计 + typeStatistics: apiVersion + '/detection/event/type/statistics', // 事件类型统计 + list: apiVersion + '/detection/event/list', // 事件列表 + count: apiVersion + '/detection/event/count', // 事件总数 + timeDistribution: apiVersion + '/detection/event/timedistribution', // 事件等级分布 + detail: apiVersion + '/detection/event/detail', // 事件详情 + detailTimeDistribution: apiVersion + '/detection/event/detail/timedistribution' // 事件详情分布统计 } }, // Dashboard diff --git a/src/utils/constants.js b/src/utils/constants.js index 0aa81c2e..65f29ff0 100644 --- a/src/utils/constants.js +++ b/src/utils/constants.js @@ -2910,8 +2910,15 @@ export const intentColor = { export const tagValueLabelMapping = [{ name: 'Psiphon3 Server', value: 'psiphon3_server' }, { name: 'Psiphon3 Server', value: 0 }, { name: 'Psiphon3 CDN', value: 1 }, { name: 'I2P', value: 'i2p' }, { name: 'MTProxy', value: 'mtproxy' }, { name: 'Obfs4', value: 'obfs4' }, { name: 'Snowflake', value: 'snowflake' }, { name: 'Tor', value: 'tor' }, { name: 'Loki Password Stealer', value: 'Loki Password Stealer (PWS)' }, { name: 'IcedID', value: 'IcedID' }, { name: 'QakBot', value: 'QakBot' }, { name: 'Mirai', value: 'Mirai' }, { name: 'BazarBackdoor', value: 'BazarBackdoor' }, { name: 'NjRAT', value: 'NjRAT' }, { name: 'CryptBot', value: 'CryptBot' }, { name: 'BitRAT', value: 'BitRAT' }, { name: 'RedLine Stealer', value: 'RedLine Stealer' }, { name: 'Nanocore RAT', value: 'Nanocore RAT' }, { name: 'DCRat', value: 'DCRat' }, { name: 'Cobalt Strike', value: 'Cobalt Strike' }, { name: 'AsyncRAT', value: 'AsyncRAT' }, { name: 'ostap', value: 'ostap' }, { name: 'Vidar', value: 'Vidar' }, { name: 'magecart', value: 'magecart' }, { name: 'Hancitor', value: 'Hancitor' }, { name: 'SystemBC', value: 'SystemBC' }, { name: 'SmokeLoader', value: 'SmokeLoader' }, { name: 'Remcos', value: 'Remcos' }, { name: 'Amadey', value: 'Amadey' }, { name: 'Ficker Stealer', value: 'Ficker Stealer' }, { name: 'Get2', value: 'Get2' }, { name: 'ISFB', value: 'ISFB' }, { name: 'Dridex', value: 'Dridex' }, { name: 'Pony', value: 'Pony' }, { name: 'Azorult', value: 'Azorult' }, { name: 'NetWire RC', value: 'NetWire RC' }, { name: 'Mozi', value: 'Mozi' }, { name: 'Raccoon', value: 'Raccoon' }, { name: 'Quasar RAT', value: 'Quasar RAT' }, { name: 'Emotet', value: 'Emotet' }, { name: 'Numando', value: 'Numando' }, { name: 'Oski Stealer', value: 'Oski Stealer' }, { name: 'Ave Maria', value: 'Ave Maria' }, { name: 'NetSupportManager RAT', value: 'NetSupportManager RAT' }, { name: 'STRRAT', value: 'STRRAT' }, { name: 'Orcus RAT', value: 'Orcus RAT' }, { name: 'Vjw0rm', value: 'Vjw0rm' }, { name: 'Ghost RAT', value: 'Ghost RAT' }, { name: 'LimeRAT', value: 'LimeRAT' }, { name: 'Astaroth', value: 'Astaroth' }, { name: 'Unknown malware', value: 'Unknown malware' }, { name: 'TrickBot', value: 'TrickBot' }, { name: 'IcedID Downloader', value: 'IcedID Downloader' }, { name: 'BetaBot', value: 'BetaBot' }, { name: 'Agent Tesla', value: 'Agent Tesla' }, { name: 'Bashlite', value: 'Bashlite' }, { name: 'DanaBot', value: 'DanaBot' }, { name: 'Snake', value: 'Snake' }, { name: 'Gozi', value: 'Gozi' }, { name: 'PoshC2', value: 'PoshC2' }, { name: 'Houdini', value: 'Houdini' }, { name: 'BlackNET RAT', value: 'BlackNET RAT' }, { name: 'Revenge RAT', value: 'Revenge RAT' }, { name: 'ServHelper', value: 'ServHelper' }, { name: 'Alien', value: 'Alien' }, { name: 'N-W0rm', value: 'N-W0rm' }, { name: 'LokiBot', value: 'LokiBot' }, { name: 'Zloader', value: 'Zloader' }, { name: 'Crimson RAT', value: 'Crimson RAT' }, { name: 'Grandoreiro', value: 'Grandoreiro' }, { name: 'Buer', value: 'Buer' }, { name: 'Qealler', value: 'Qealler' }, { name: 'FastCash', value: 'FastCash' }, { name: 'CyberGate', value: 'CyberGate' }, { name: 'Formbook', value: 'Formbook' }, { name: 'Hydra', value: 'Hydra' }, { name: 'Arkei Stealer', value: 'Arkei Stealer' }, { name: 'Tsunami', value: 'Tsunami' }, { name: 'AdWind', value: 'AdWind' }, { name: 'Dofloo', value: 'Dofloo' }, { name: 'MrBlack', value: 'MrBlack' }, { name: 'XLoader', value: 'XLoader' }, { name: 'Anatsa', value: 'Anatsa' }, { name: 'TeamBot', value: 'TeamBot' }, { name: 'DiamondFox', value: 'DiamondFox' }, { name: 'BillGates', value: 'BillGates' }, { name: 'Kinsing', value: 'Kinsing' }, { name: 'CCleaner Backdoor', value: 'CCleaner Backdoor' }, { name: 'JSOutProx', value: 'JSOutProx' }, { name: 'SharkBot', value: 'SharkBot' }, { name: 'Empire Downloader', value: 'Empire Downloader' }, { name: 'solarmarker', value: 'solarmarker' }, { name: 'FireBird RAT', value: 'FireBird RAT' }, { name: 'XpertRAT', value: 'XpertRAT' }, { name: 'RMS', value: 'RMS' }, { name: 'GCleaner', value: 'GCleaner' }, { name: 'Unidentified Linux 001', value: 'Unidentified Linux 001' }, { name: 'Ousaban', value: 'Ousaban' }, { name: 'sLoad', value: 'sLoad' }, { name: 'PerlBot', value: 'PerlBot' }, { name: 'SectopRAT', value: 'SectopRAT' }, { name: 'Loda', value: 'Loda' }, { name: 'Coinminer', value: 'Coinminer' }, { name: 'DarkSide', value: 'DarkSide' }, { name: '404 Keylogger', value: '404 Keylogger' }, { name: 'Cpuminer', value: 'Cpuminer' }, { name: 'MooBot', value: 'MooBot' }, { name: 'Parallax RAT', value: 'Parallax RAT' }, { name: 'XOR DDoS', value: 'XOR DDoS' }, { name: 'Vulturi', value: 'Vulturi' }, { name: 'Taurus Stealer', value: 'Taurus Stealer' }, { name: 'Cutwail', value: 'Cutwail' }, { name: 'Metamorfo', value: 'Metamorfo' }, { name: 'GootLoader', value: 'GootLoader' }, { name: 'Meterpreter', value: 'Meterpreter' }, { name: 'BumbleBee', value: 'BumbleBee' }, { name: 'Tofsee', value: 'Tofsee' }, { name: 'Socelars', value: 'Socelars' }, { name: 'Squirrelwaffle', value: 'Squirrelwaffle' }, { name: 'Roaming Mantis', value: 'Roaming Mantis' }, { name: 'Alfonso Stealer', value: 'Alfonso Stealer' }, { name: 'DarkComet', value: 'DarkComet' }, { name: 'STOP', value: 'STOP' }, { name: 'MoqHao', value: 'MoqHao' }, { name: 'CollectorGoomba', value: 'CollectorGoomba' }, { name: 'Prometei', value: 'Prometei' }, { name: 'Cerberus', value: 'Cerberus' }, { name: 'Spectre Rat', value: 'Spectre Rat' }, { name: 'Unidentified 001', value: 'Unidentified 001' }, { name: 'FluBot', value: 'FluBot' }, { name: 'BlackRock', value: 'BlackRock' }, { name: 'CryptoNight', value: 'CryptoNight' }, { name: 'Kronos', value: 'Kronos' }, { name: 'Winnti', value: 'Winnti' }, { name: 'Korlia', value: 'Korlia' }, { name: 'Monero Miner', value: 'Monero Miner' }, { name: 'Anubis', value: 'Anubis' }, { name: 'MirrorBlast', value: 'MirrorBlast' }, { name: 'Banload', value: 'Banload' }, { name: 'FlawedGrace', value: 'FlawedGrace' }, { name: 'DoppelDridex', value: 'DoppelDridex' }, { name: 'Mispadu', value: 'Mispadu' }, { name: 'Mekotio', value: 'Mekotio' }, { name: 'Ozone RAT', value: 'Ozone RAT' }, { name: 'StealthWorker Go', value: 'StealthWorker Go' }, { name: 'SilverFish', value: 'SilverFish' }, { name: 'NodeJS Ransomware', value: 'NodeJS Ransomware' }, { name: 'Ryuk', value: 'Ryuk' }, { name: 'QNAPCrypt', value: 'QNAPCrypt' }, { name: 'Venom RAT', value: 'Venom RAT' }, { name: 'BlackMatter', value: 'BlackMatter' }, { name: 'Janeleiro', value: 'Janeleiro' }, { name: 'Chrysaor', value: 'Chrysaor' }, { name: 'PurpleFox', value: 'PurpleFox' }, { name: 'Mars Stealer', value: 'Mars Stealer' }, { name: 'Matanbuchus', value: 'Matanbuchus' }, { name: 'FFDroider', value: 'FFDroider' }, { name: 'BlackGuard', value: 'BlackGuard' }, { name: 'SMSspy', value: 'SMSspy' }, { name: 'TitanStealer', value: 'TitanStealer' }, { name: 'BianLian', value: 'BianLian' }, { name: 'Deimos', value: 'Deimos' }, { name: 'Sliver', value: 'Sliver' }, { name: 'Aurora Stealer', value: 'Aurora Stealer' }, { name: 'Stealc', value: 'Stealc' }, { name: 'Gomorrah stealer', value: 'Gomorrah stealer' }, { name: 'RecordBreaker', value: 'RecordBreaker' }, { name: 'Brute Ratel C4', value: 'Brute Ratel C4' }, { name: 'LaplasClipper', value: 'LaplasClipper' }, { name: 'XWorm', value: 'XWorm' }, { name: 'PhotoLoader', value: 'PhotoLoader' }, { name: 'Kimsuky', value: 'Kimsuky' }, { name: 'Rhadamanthys', value: 'Rhadamanthys' }, { name: 'Nighthawk', value: 'Nighthawk' }, { name: 'Fabookie', value: 'Fabookie' }, { name: 'Lumma Stealer', value: 'Lumma Stealer' }, { name: 'Kaiji', value: 'Kaiji' }, { name: 'ClipBanker', value: 'ClipBanker' }, { name: 'PrivateLoader', value: 'PrivateLoader' }, { name: 'ViperSoftX', value: 'ViperSoftX' }, { name: 'Phonk', value: 'Phonk' }, { name: 'PlugX', value: 'PlugX' }, { name: 'HyperBro', value: 'HyperBro' }, { name: 'SideWinder', value: 'SideWinder' }, { name: 'Coper', value: 'Coper' }, { name: 'Specter', value: 'Specter' }, { name: 'Kaiten', value: 'Kaiten' }, { name: 'Bitter RAT', value: 'Bitter RAT' }, { name: 'BATLOADER', value: 'BATLOADER' }, { name: 'ACBackdoor', value: 'ACBackdoor' }, { name: 'BKA Trojaner', value: 'BKA Trojaner' }, { name: 'JSSLoader', value: 'JSSLoader' }, { name: 'PureCrypter', value: 'PureCrypter' }, { name: 'SpyNote', value: 'SpyNote' }, { name: 'S.O.V.A.', value: 'S.O.V.A.' }, { name: 'Ginzo Stealer', value: 'Ginzo Stealer' }, { name: 'PennyWise Stealer', value: 'PennyWise Stealer' }, { name: 'DOUBLEBACK', value: 'DOUBLEBACK' }, { name: 'OPRDNS', value: 'OPRDNS' }, { name: 'TLDNS', value: 'TLDNS' }, { name: 'RTDNS', value: 'RTDNS' }, { name: 'ADNS', value: 'ADNS' }, { name: 'FWDNS', value: 'FWDNS' }] // detection新增页的第一步,选择mode export const detectionRuleType = { - indicator: 'indicator_match', - threshold: 'threshold' + indicator: { key: 1, value: 'indicator_match' }, + threshold: { key: 2, value: 'threshold' }, + sequence: { key: 3, value: 'sequence' }, + unordered: { key: 4, value: 'unordered_sequence' } +} + +export const detectionEventType = { + single: 'single', + aggregation: 'aggregation' } // 顶级域名列表 diff --git a/src/views/detections/DetectionFilter.vue b/src/views/detections/DetectionFilter.vue index ac1258c2..37c0991e 100644 --- a/src/views/detections/DetectionFilter.vue +++ b/src/views/detections/DetectionFilter.vue @@ -3,7 +3,7 @@
{{$t('detections.filters')}}
{{ $t('npm.noData') }}
diff --git a/src/views/detections/Index.vue b/src/views/detections/Index.vue index 08ae9c31..8d6dcd4b 100644 --- a/src/views/detections/Index.vue +++ b/src/views/detections/Index.vue @@ -4,10 +4,6 @@
{{$t('overall.detections')}}
-
- - {{$t('config.detections.configurePolicies')}} -
-
- -
- + +
@@ -44,17 +49,29 @@
+
+
+
{{$t('detection.eventType')}}
+
+ + +
-
{{$t('detections.severity')}}
+
{{$t('detections.eventName')}}
-
-
-
{{$t('detections.eventType')}}
-
- - -
-
{{pageType === detectionPageType.securityEvent ? $t('detection.activeOffender') : $t('detections.activeEntity')}}
+
Key