From 19aa51e5a8ce76b11e14a68d9a583a58bcc0d33c Mon Sep 17 00:00:00 2001 From: Philippe Oberti Date: Mon, 25 Jul 2022 19:27:05 +0200 Subject: [PATCH] [TIP] Add new Threat intelligence plugin (#136479) * [TIP] Add Threat Intelligence plugin - create Threat Intelligence plugin and integrate with Security Solution plugin - setup jest unit tests, i18n, Cypress tests and Storybook - fetch Indicator of Compromise, and display in data-grid - add flyout components to show IOCs details (table and JSON) - add new threatIntelInt entry to kbn-doc-links package https://github.com/elastic/security-team/issues/4329 https://github.com/elastic/security-team/issues/4138 https://github.com/elastic/security-team/issues/4241 https://github.com/elastic/security-team/issues/4242 https://github.com/elastic/security-team/issues/4244 https://github.com/elastic/security-team/issues/4245 Co-authored-by: lgmys Co-authored-by: Maxim Kholod Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com> --- .buildkite/ftr_configs.yml | 1 + .github/CODEOWNERS | 6 + docs/developer/plugin-list.asciidoc | 4 + packages/kbn-doc-links/src/get_doc_links.ts | 12 +- packages/kbn-doc-links/src/types.ts | 1 + packages/kbn-optimizer/limits.yml | 3 +- src/dev/storybook/aliases.ts | 1 + src/dev/typescript/projects.ts | 7 +- tsconfig.base.json | 2 + x-pack/.i18nrc.json | 3 +- .../security_solution/common/constants.ts | 29 +- x-pack/plugins/security_solution/kibana.json | 7 +- .../public/app/deep_links/index.ts | 13 + .../public/app/home/home_navigations.ts | 8 + .../public/app/translations.ts | 7 + .../common/components/navigation/types.ts | 1 + .../__snapshots__/index.test.tsx.snap | 10 + .../use_navigation_items.tsx | 1 + .../common/components/url_state/constants.ts | 3 +- .../common/images/threat_intelligence.png | Bin 0 -> 97783 bytes .../public/landing_pages/links.ts | 3 +- .../public/lazy_sub_plugins.tsx | 6 +- .../security_solution/public/plugin.tsx | 2 + .../public/threat_intelligence/index.tsx | 19 + .../public/threat_intelligence/links.ts | 30 + .../pages/threat_intelligence.tsx | 27 + .../public/threat_intelligence/routes.tsx | 25 + .../plugins/security_solution/public/types.ts | 5 + .../plugins/security_solution/tsconfig.json | 11 +- .../threat_intelligence/.storybook/main.js | 8 + .../threat_intelligence/CONTRIBUTING.md | 135 ++ x-pack/plugins/threat_intelligence/FAQ.md | 15 + x-pack/plugins/threat_intelligence/README.md | 44 + .../threat_intelligence/common/constants.ts | 12 + .../threat_intelligence/common/types/feed.ts | 11 + .../common/types/indicator.ts | 52 + .../threat_intelligence/cypress/cypress.json | 20 + .../cypress/fixtures/example.json | 5 + .../integration/sources/indicators.spec.ts | 43 + .../cypress/plugins/index.js | 29 + .../cypress/screens/indicators.ts | 28 + .../cypress/support/commands.js | 32 + .../cypress/support/index.js | 27 + .../cypress/tasks/login.ts | 341 ++++ .../cypress/tasks/navigation.ts | 20 + .../cypress/tasks/privileges.ts | 232 +++ .../threat_intelligence/cypress/tsconfig.json | 23 + .../threat_intelligence/jest.config.js | 12 + .../plugins/threat_intelligence/kibana.json | 12 + .../plugins/threat_intelligence/package.json | 23 + .../mocks/mock_kibana_search_service.tsx | 25 + .../public/common/mocks/test_providers.tsx | 18 + .../public/common/utils/dates.test.ts | 38 + .../public/common/utils/dates.ts | 17 + .../empty_page/empty_page.stories.tsx | 38 + .../components/empty_page/empty_page.test.tsx | 47 + .../components/empty_page/empty_page.tsx | 104 ++ .../public/components/empty_page/index.tsx | 8 + .../empty_page/integrations_light.svg | 9 + .../public/components/layout/index.tsx | 8 + .../components/layout/layout.stories.tsx | 31 + .../public/components/layout/layout.test.tsx | 33 + .../public/components/layout/layout.tsx | 34 + .../public/hooks/use_documentation_link.tsx | 14 + .../hooks/use_integrations_page_link.tsx | 13 + .../public/hooks/use_kibana.ts | 14 + .../threat_intelligence/public/index.ts | 14 + .../indicators_flyout.stories.tsx | 33 + .../indicators_flyout.test.tsx | 62 + .../indicators_flyout/indicators_flyout.tsx | 123 ++ .../indicators_flyout_json.stories.tsx | 26 + .../indicators_flyout_json.test.tsx | 44 + .../indicators_flyout_json.tsx | 44 + .../indicators_flyout_table.stories.tsx | 26 + .../indicators_flyout_table.test.tsx | 58 + .../indicators_flyout_table.tsx | 89 + .../indicators_table/actions_row_cell.tsx | 14 + .../indicators_table/cell_renderer.tsx | 31 + .../indicators_table.stories.tsx | 38 + .../indicators_table.test.tsx | 67 + .../indicators_table/indicators_table.tsx | 158 ++ .../open_indicator_flyout_button.stories.tsx | 22 + .../open_indicator_flyout_button.test.tsx | 38 + .../open_indicator_flyout_button.tsx | 44 + .../indicators/hooks/use_indicators.test.tsx | 169 ++ .../indicators/hooks/use_indicators.ts | 170 ++ .../hooks/use_indicators_total_count.test.tsx | 67 + .../hooks/use_indicators_total_count.tsx | 76 + .../indicators/indicators_page.test.tsx | 95 + .../modules/indicators/indicators_page.tsx | 28 + .../indicators/lib/display_value.test.ts | 42 + .../modules/indicators/lib/display_value.ts | 70 + .../indicators/lib/unwrap_value.test.ts | 21 + .../modules/indicators/lib/unwrap_value.ts | 24 + .../threat_intelligence/public/plugin.tsx | 38 + .../threat_intelligence/public/types.ts | 23 + .../plugins/threat_intelligence/tsconfig.json | 20 + .../threat_intelligence_cypress/config.ts | 59 + .../threat_intelligence/data.json.gz | Bin 0 -> 565286 bytes .../threat_intelligence/mappings.json | 1599 +++++++++++++++++ .../ftr_provider_context.d.ts | 12 + .../pipelines/pipeline.ts | 12 + .../pipelines/ti_abusech_malware.ts | 212 +++ .../pipelines/ti_abusech_malware_bazaar.ts | 356 ++++ .../pipelines/ti_abusech_url.ts | 151 ++ .../threat_intelligence_cypress/runner.ts | 169 ++ .../threat_intelligence_cypress/services.ts | 8 + .../visual_config.ts | 19 + 108 files changed, 6155 insertions(+), 38 deletions(-) create mode 100644 x-pack/plugins/security_solution/public/common/images/threat_intelligence.png create mode 100644 x-pack/plugins/security_solution/public/threat_intelligence/index.tsx create mode 100644 x-pack/plugins/security_solution/public/threat_intelligence/links.ts create mode 100644 x-pack/plugins/security_solution/public/threat_intelligence/pages/threat_intelligence.tsx create mode 100644 x-pack/plugins/security_solution/public/threat_intelligence/routes.tsx create mode 100644 x-pack/plugins/threat_intelligence/.storybook/main.js create mode 100644 x-pack/plugins/threat_intelligence/CONTRIBUTING.md create mode 100644 x-pack/plugins/threat_intelligence/FAQ.md create mode 100755 x-pack/plugins/threat_intelligence/README.md create mode 100644 x-pack/plugins/threat_intelligence/common/constants.ts create mode 100644 x-pack/plugins/threat_intelligence/common/types/feed.ts create mode 100644 x-pack/plugins/threat_intelligence/common/types/indicator.ts create mode 100644 x-pack/plugins/threat_intelligence/cypress/cypress.json create mode 100644 x-pack/plugins/threat_intelligence/cypress/fixtures/example.json create mode 100644 x-pack/plugins/threat_intelligence/cypress/integration/sources/indicators.spec.ts create mode 100644 x-pack/plugins/threat_intelligence/cypress/plugins/index.js create mode 100644 x-pack/plugins/threat_intelligence/cypress/screens/indicators.ts create mode 100644 x-pack/plugins/threat_intelligence/cypress/support/commands.js create mode 100644 x-pack/plugins/threat_intelligence/cypress/support/index.js create mode 100644 x-pack/plugins/threat_intelligence/cypress/tasks/login.ts create mode 100644 x-pack/plugins/threat_intelligence/cypress/tasks/navigation.ts create mode 100644 x-pack/plugins/threat_intelligence/cypress/tasks/privileges.ts create mode 100644 x-pack/plugins/threat_intelligence/cypress/tsconfig.json create mode 100644 x-pack/plugins/threat_intelligence/jest.config.js create mode 100644 x-pack/plugins/threat_intelligence/kibana.json create mode 100644 x-pack/plugins/threat_intelligence/package.json create mode 100644 x-pack/plugins/threat_intelligence/public/common/mocks/mock_kibana_search_service.tsx create mode 100644 x-pack/plugins/threat_intelligence/public/common/mocks/test_providers.tsx create mode 100644 x-pack/plugins/threat_intelligence/public/common/utils/dates.test.ts create mode 100644 x-pack/plugins/threat_intelligence/public/common/utils/dates.ts create mode 100644 x-pack/plugins/threat_intelligence/public/components/empty_page/empty_page.stories.tsx create mode 100644 x-pack/plugins/threat_intelligence/public/components/empty_page/empty_page.test.tsx create mode 100644 x-pack/plugins/threat_intelligence/public/components/empty_page/empty_page.tsx create mode 100644 x-pack/plugins/threat_intelligence/public/components/empty_page/index.tsx create mode 100644 x-pack/plugins/threat_intelligence/public/components/empty_page/integrations_light.svg create mode 100644 x-pack/plugins/threat_intelligence/public/components/layout/index.tsx create mode 100644 x-pack/plugins/threat_intelligence/public/components/layout/layout.stories.tsx create mode 100644 x-pack/plugins/threat_intelligence/public/components/layout/layout.test.tsx create mode 100644 x-pack/plugins/threat_intelligence/public/components/layout/layout.tsx create mode 100644 x-pack/plugins/threat_intelligence/public/hooks/use_documentation_link.tsx create mode 100644 x-pack/plugins/threat_intelligence/public/hooks/use_integrations_page_link.tsx create mode 100644 x-pack/plugins/threat_intelligence/public/hooks/use_kibana.ts create mode 100755 x-pack/plugins/threat_intelligence/public/index.ts create mode 100644 x-pack/plugins/threat_intelligence/public/modules/indicators/components/indicators_flyout/indicators_flyout.stories.tsx create mode 100644 x-pack/plugins/threat_intelligence/public/modules/indicators/components/indicators_flyout/indicators_flyout.test.tsx create mode 100644 x-pack/plugins/threat_intelligence/public/modules/indicators/components/indicators_flyout/indicators_flyout.tsx create mode 100644 x-pack/plugins/threat_intelligence/public/modules/indicators/components/indicators_flyout_json/indicators_flyout_json.stories.tsx create mode 100644 x-pack/plugins/threat_intelligence/public/modules/indicators/components/indicators_flyout_json/indicators_flyout_json.test.tsx create mode 100644 x-pack/plugins/threat_intelligence/public/modules/indicators/components/indicators_flyout_json/indicators_flyout_json.tsx create mode 100644 x-pack/plugins/threat_intelligence/public/modules/indicators/components/indicators_flyout_table/indicators_flyout_table.stories.tsx create mode 100644 x-pack/plugins/threat_intelligence/public/modules/indicators/components/indicators_flyout_table/indicators_flyout_table.test.tsx create mode 100644 x-pack/plugins/threat_intelligence/public/modules/indicators/components/indicators_flyout_table/indicators_flyout_table.tsx create mode 100644 x-pack/plugins/threat_intelligence/public/modules/indicators/components/indicators_table/actions_row_cell.tsx create mode 100644 x-pack/plugins/threat_intelligence/public/modules/indicators/components/indicators_table/cell_renderer.tsx create mode 100644 x-pack/plugins/threat_intelligence/public/modules/indicators/components/indicators_table/indicators_table.stories.tsx create mode 100644 x-pack/plugins/threat_intelligence/public/modules/indicators/components/indicators_table/indicators_table.test.tsx create mode 100644 x-pack/plugins/threat_intelligence/public/modules/indicators/components/indicators_table/indicators_table.tsx create mode 100644 x-pack/plugins/threat_intelligence/public/modules/indicators/components/open_indicator_flyout_button/open_indicator_flyout_button.stories.tsx create mode 100644 x-pack/plugins/threat_intelligence/public/modules/indicators/components/open_indicator_flyout_button/open_indicator_flyout_button.test.tsx create mode 100644 x-pack/plugins/threat_intelligence/public/modules/indicators/components/open_indicator_flyout_button/open_indicator_flyout_button.tsx create mode 100644 x-pack/plugins/threat_intelligence/public/modules/indicators/hooks/use_indicators.test.tsx create mode 100644 x-pack/plugins/threat_intelligence/public/modules/indicators/hooks/use_indicators.ts create mode 100644 x-pack/plugins/threat_intelligence/public/modules/indicators/hooks/use_indicators_total_count.test.tsx create mode 100644 x-pack/plugins/threat_intelligence/public/modules/indicators/hooks/use_indicators_total_count.tsx create mode 100644 x-pack/plugins/threat_intelligence/public/modules/indicators/indicators_page.test.tsx create mode 100644 x-pack/plugins/threat_intelligence/public/modules/indicators/indicators_page.tsx create mode 100644 x-pack/plugins/threat_intelligence/public/modules/indicators/lib/display_value.test.ts create mode 100644 x-pack/plugins/threat_intelligence/public/modules/indicators/lib/display_value.ts create mode 100644 x-pack/plugins/threat_intelligence/public/modules/indicators/lib/unwrap_value.test.ts create mode 100644 x-pack/plugins/threat_intelligence/public/modules/indicators/lib/unwrap_value.ts create mode 100755 x-pack/plugins/threat_intelligence/public/plugin.tsx create mode 100644 x-pack/plugins/threat_intelligence/public/types.ts create mode 100644 x-pack/plugins/threat_intelligence/tsconfig.json create mode 100644 x-pack/test/threat_intelligence_cypress/config.ts create mode 100644 x-pack/test/threat_intelligence_cypress/es_archives/threat_intelligence/data.json.gz create mode 100644 x-pack/test/threat_intelligence_cypress/es_archives/threat_intelligence/mappings.json create mode 100644 x-pack/test/threat_intelligence_cypress/ftr_provider_context.d.ts create mode 100644 x-pack/test/threat_intelligence_cypress/pipelines/pipeline.ts create mode 100644 x-pack/test/threat_intelligence_cypress/pipelines/ti_abusech_malware.ts create mode 100644 x-pack/test/threat_intelligence_cypress/pipelines/ti_abusech_malware_bazaar.ts create mode 100644 x-pack/test/threat_intelligence_cypress/pipelines/ti_abusech_url.ts create mode 100644 x-pack/test/threat_intelligence_cypress/runner.ts create mode 100644 x-pack/test/threat_intelligence_cypress/services.ts create mode 100644 x-pack/test/threat_intelligence_cypress/visual_config.ts diff --git a/.buildkite/ftr_configs.yml b/.buildkite/ftr_configs.yml index b0bc12488ea7..5abe469587f3 100644 --- a/.buildkite/ftr_configs.yml +++ b/.buildkite/ftr_configs.yml @@ -32,6 +32,7 @@ disabled: - x-pack/test/security_solution_cypress/response_ops_cli_config.ts - x-pack/test/security_solution_cypress/upgrade_config.ts - x-pack/test/security_solution_cypress/visual_config.ts + - x-pack/test/threat_intelligence_cypress/visual_config.ts - x-pack/test/functional_enterprise_search/with_host_configured.config.ts - x-pack/plugins/apm/ftr_e2e/ftr_config_open.ts - x-pack/plugins/apm/ftr_e2e/ftr_config_run.ts diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 16f86540a4de..d1f72aadb188 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -589,6 +589,12 @@ x-pack/plugins/session_view @elastic/awp-platform x-pack/plugins/security_solution/public/common/components/sessions_viewer @elastic/awp-platform x-pack/plugins/security_solution/public/kubernetes @elastic/awp-platform +## Security Solution sub teams - Protections Experience +x-pack/plugins/threat_intelligence @elastic/protections-experience +x-pack/plugins/security_solution/public/threat_intelligence @elastic/protections-experience +x-pack/test/threat_intelligence_cypress @elastic/protections-experience + + # Security Intelligence And Analytics /x-pack/plugins/security_solution/server/lib/detection_engine/rules/prepackaged_rules @elastic/security-intelligence-analytics diff --git a/docs/developer/plugin-list.asciidoc b/docs/developer/plugin-list.asciidoc index 041c0cee5735..d9b2c970b630 100644 --- a/docs/developer/plugin-list.asciidoc +++ b/docs/developer/plugin-list.asciidoc @@ -639,6 +639,10 @@ Documentation: https://www.elastic.co/guide/en/kibana/master/task-manager-produc |Gathers all usage collection, retrieving them from both: OSS and X-Pack plugins. +|{kib-repo}blob/{branch}/x-pack/plugins/threat_intelligence/README.md[threatIntelligence] +|Elastic Threat Intelligence makes it easy to analyze and investigate potential security threats by aggregating data from multiple sources in one place. You’ll be able to view data from all activated threat intelligence feeds and take action. + + |{kib-repo}blob/{branch}/x-pack/plugins/timelines/README.md[timelines] |Timelines is a plugin that provides a grid component with accompanying server side apis to help users identify events of interest and perform root cause analysis within Kibana. diff --git a/packages/kbn-doc-links/src/get_doc_links.ts b/packages/kbn-doc-links/src/get_doc_links.ts index 9f576cd1629d..e98929ce88f0 100644 --- a/packages/kbn-doc-links/src/get_doc_links.ts +++ b/packages/kbn-doc-links/src/get_doc_links.ts @@ -336,13 +336,13 @@ export const getDocLinks = ({ kibanaBranch }: GetDocLinkOptions): DocLinks => { ruleApiOverview: `${SECURITY_SOLUTION_DOCS}rule-api-overview.html`, }, securitySolution: { - trustedApps: `${ELASTIC_WEBSITE_URL}guide/en/security/${DOC_LINK_VERSION}/trusted-apps-ov.html`, - eventFilters: `${ELASTIC_WEBSITE_URL}guide/en/security/${DOC_LINK_VERSION}/event-filters.html`, - blocklist: `${ELASTIC_WEBSITE_URL}guide/en/security/${DOC_LINK_VERSION}/blocklist.html`, + trustedApps: `${SECURITY_SOLUTION_DOCS}trusted-apps-ov.html`, + eventFilters: `${SECURITY_SOLUTION_DOCS}event-filters.html`, + blocklist: `${SECURITY_SOLUTION_DOCS}blocklist.html`, threatIntelInt: `${SECURITY_SOLUTION_DOCS}es-threat-intel-integrations.html`, policyResponseTroubleshooting: { - full_disk_access: `${ELASTIC_WEBSITE_URL}guide/en/security/${DOC_LINK_VERSION}/deploy-elastic-endpoint.html#enable-fda-endpoint`, - macos_system_ext: `${ELASTIC_WEBSITE_URL}guide/en/security/${DOC_LINK_VERSION}/deploy-elastic-endpoint.html#system-extension-endpoint`, + full_disk_access: `${SECURITY_SOLUTION_DOCS}deploy-elastic-endpoint.html#enable-fda-endpoint`, + macos_system_ext: `${SECURITY_SOLUTION_DOCS}deploy-elastic-endpoint.html#system-extension-endpoint`, }, }, query: { @@ -653,7 +653,7 @@ export const getDocLinks = ({ kibanaBranch }: GetDocLinkOptions): DocLinks => { rustOverview: `${ELASTIC_WEBSITE_URL}guide/en/elasticsearch/client/rust-api/${DOC_LINK_VERSION}/overview.html`, }, endpoints: { - troubleshooting: `${ELASTIC_WEBSITE_URL}guide/en/security/${DOC_LINK_VERSION}/ts-management.html#ts-endpoints`, + troubleshooting: `${SECURITY_SOLUTION_DOCS}ts-management.html#ts-endpoints`, }, legal: { privacyStatement: `${ELASTIC_WEBSITE_URL}legal/privacy-statement`, diff --git a/packages/kbn-doc-links/src/types.ts b/packages/kbn-doc-links/src/types.ts index 8a7a0e788cbc..bf3132a8c0e9 100644 --- a/packages/kbn-doc-links/src/types.ts +++ b/packages/kbn-doc-links/src/types.ts @@ -249,6 +249,7 @@ export interface DocLinks { full_disk_access: string; macos_system_ext: string; }; + readonly threatIntelInt: string; }; readonly query: { readonly eql: string; diff --git a/packages/kbn-optimizer/limits.yml b/packages/kbn-optimizer/limits.yml index 174077ea2871..1044cae862fe 100644 --- a/packages/kbn-optimizer/limits.yml +++ b/packages/kbn-optimizer/limits.yml @@ -58,7 +58,7 @@ pageLoadAssetSize: telemetry: 51957 telemetryManagementSection: 38586 transform: 41007 - triggersActionsUi: 119000 #This is temporary. Check https://github.com/elastic/kibana/pull/130710#issuecomment-1119843458 & https://github.com/elastic/kibana/issues/130728 + triggersActionsUi: 119000 upgradeAssistant: 81241 urlForwarding: 32579 usageCollection: 39762 @@ -132,3 +132,4 @@ pageLoadAssetSize: expressionXY: 36000 kibanaUsageCollection: 16463 kubernetesSecurity: 77234 + threatIntelligence: 29195 diff --git a/src/dev/storybook/aliases.ts b/src/dev/storybook/aliases.ts index 7f9c46783412..89e78848a136 100644 --- a/src/dev/storybook/aliases.ts +++ b/src/dev/storybook/aliases.ts @@ -39,6 +39,7 @@ export const storybookAliases = { presentation: 'src/plugins/presentation_util/storybook', security_solution: 'x-pack/plugins/security_solution/.storybook', shared_ux: 'packages/kbn-shared-ux-storybook/src/config', + threat_intelligence: 'x-pack/plugins/threat_intelligence/.storybook', ui_actions_enhanced: 'src/plugins/ui_actions_enhanced/.storybook', unified_search: 'src/plugins/unified_search/.storybook', }; diff --git a/src/dev/typescript/projects.ts b/src/dev/typescript/projects.ts index a104b5a171d7..5f34bef2df51 100644 --- a/src/dev/typescript/projects.ts +++ b/src/dev/typescript/projects.ts @@ -66,21 +66,22 @@ export const PROJECTS = [ createProject('x-pack/plugins/fleet/cypress/tsconfig.json', { name: 'fleet/cypress', }), - createProject('x-pack/plugins/synthetics/e2e/tsconfig.json', { name: 'uptime/synthetics-e2e-tests', disableTypeCheck: true, }), - createProject('x-pack/plugins/ux/e2e/tsconfig.json', { name: 'ux/synthetics-e2e-tests', disableTypeCheck: true, }), - createProject('x-pack/plugins/observability/e2e/tsconfig.json', { name: 'observability/synthetics-e2e-tests', disableTypeCheck: true, }), + createProject('x-pack/plugins/threat_intelligence/cypress/tsconfig.json', { + name: 'threat_intelligence/cypress', + disableTypeCheck: true, + }), // Glob patterns to be all search at once ...findProjects([ diff --git a/tsconfig.base.json b/tsconfig.base.json index c1c1539e7b04..e314c1662420 100644 --- a/tsconfig.base.json +++ b/tsconfig.base.json @@ -407,6 +407,8 @@ "@kbn/task-manager-plugin/*": ["x-pack/plugins/task_manager/*"], "@kbn/telemetry-collection-xpack-plugin": ["x-pack/plugins/telemetry_collection_xpack"], "@kbn/telemetry-collection-xpack-plugin/*": ["x-pack/plugins/telemetry_collection_xpack/*"], + "@kbn/threat-intelligence-plugin": ["x-pack/plugins/threat_intelligence"], + "@kbn/threat-intelligence-plugin/*": ["x-pack/plugins/threat_intelligence/*"], "@kbn/timelines-plugin": ["x-pack/plugins/timelines"], "@kbn/timelines-plugin/*": ["x-pack/plugins/timelines/*"], "@kbn/transform-plugin": ["x-pack/plugins/transform"], diff --git a/x-pack/.i18nrc.json b/x-pack/.i18nrc.json index c15d92ff5798..c527e0a3d955 100644 --- a/x-pack/.i18nrc.json +++ b/x-pack/.i18nrc.json @@ -68,7 +68,8 @@ "xpack.urlDrilldown": "plugins/drilldowns/url_drilldown", "xpack.watcher": "plugins/watcher", "xpack.observability": "plugins/observability", - "xpack.banners": "plugins/banners" + "xpack.banners": "plugins/banners", + "xpack.threatIntelligence": "plugins/threat_intelligence" }, "exclude": ["examples"], "translations": [ diff --git a/x-pack/plugins/security_solution/common/constants.ts b/x-pack/plugins/security_solution/common/constants.ts index 6f4f1b9d03e1..4e39313eb455 100644 --- a/x-pack/plugins/security_solution/common/constants.ts +++ b/x-pack/plugins/security_solution/common/constants.ts @@ -81,11 +81,21 @@ export enum SecurityPageName { case = 'cases', // must match `CasesDeepLinkId.cases` caseConfigure = 'cases_configure', // must match `CasesDeepLinkId.casesConfigure` caseCreate = 'cases_create', // must match `CasesDeepLinkId.casesCreate` + /* + * Warning: Computed values are not permitted in an enum with string valued members + * All cloud security posture page names must match `CloudSecurityPosturePageId` in x-pack/plugins/cloud_security_posture/public/common/navigation/types.ts + */ + cloudSecurityPostureBenchmarks = 'cloud_security_posture-benchmarks', + cloudSecurityPostureDashboard = 'cloud_security_posture-dashboard', + cloudSecurityPostureFindings = 'cloud_security_posture-findings', + cloudSecurityPostureRules = 'cloud_security_posture-rules', + dashboardsLanding = 'dashboards', detections = 'detections', detectionAndResponse = 'detection_response', endpoints = 'endpoints', eventFilters = 'event_filters', exceptions = 'exceptions', + exploreLanding = 'explore', hostIsolationExceptions = 'host_isolation_exceptions', hosts = 'hosts', hostsAnomalies = 'hosts-anomalies', @@ -93,6 +103,7 @@ export enum SecurityPageName { hostsRisk = 'hosts-risk', hostsEvents = 'hosts-events', investigate = 'investigate', + kubernetes = 'kubernetes', landing = 'get_started', network = 'network', networkAnomalies = 'network-anomalies', @@ -100,11 +111,14 @@ export enum SecurityPageName { networkExternalAlerts = 'network-external_alerts', networkHttp = 'network-http', networkTls = 'network-tls', + noPage = '', overview = 'overview', policies = 'policy', responseActions = 'response_actions', rules = 'rules', rulesCreate = 'rules-create', + sessions = 'sessions', + threatIntelligence = 'threat-intelligence', timelines = 'timelines', timelinesTemplates = 'timelines-templates', trustedApps = 'trusted_apps', @@ -113,21 +127,8 @@ export enum SecurityPageName { usersAuthentications = 'users-authentications', usersAnomalies = 'users-anomalies', usersRisk = 'users-risk', - sessions = 'sessions', usersEvents = 'users-events', usersExternalAlerts = 'users-external_alerts', - kubernetes = 'kubernetes', - exploreLanding = 'explore', - dashboardsLanding = 'dashboards', - noPage = '', - /* - * Warning: Computed values are not permitted in an enum with string valued members - * All cloud security posture page names must match `CloudSecurityPosturePageId` in x-pack/plugins/cloud_security_posture/public/common/navigation/types.ts - */ - cloudSecurityPostureDashboard = 'cloud_security_posture-dashboard', - cloudSecurityPostureFindings = 'cloud_security_posture-findings', - cloudSecurityPostureBenchmarks = 'cloud_security_posture-benchmarks', - cloudSecurityPostureRules = 'cloud_security_posture-rules', } export const EXPLORE_PATH = '/explore' as const; @@ -156,6 +157,7 @@ export const HOST_ISOLATION_EXCEPTIONS_PATH = `${MANAGEMENT_PATH}/host_isolation_exceptions` as const; export const BLOCKLIST_PATH = `${MANAGEMENT_PATH}/blocklist` as const; export const RESPONSE_ACTIONS_PATH = `${MANAGEMENT_PATH}/response_actions` as const; +export const THREAT_INTELLIGENCE_PATH = '/threat_intelligence' as const; export const APP_OVERVIEW_PATH = `${APP_PATH}${OVERVIEW_PATH}` as const; export const APP_LANDING_PATH = `${APP_PATH}${LANDING_PATH}` as const; @@ -180,6 +182,7 @@ export const APP_HOST_ISOLATION_EXCEPTIONS_PATH = `${APP_PATH}${HOST_ISOLATION_EXCEPTIONS_PATH}` as const; export const APP_BLOCKLIST_PATH = `${APP_PATH}${BLOCKLIST_PATH}` as const; export const APP_RESPONSE_ACTIONS_PATH = `${APP_PATH}${RESPONSE_ACTIONS_PATH}` as const; +export const APP_THREAT_INTELLIGENCE_PATH = `${APP_PATH}${THREAT_INTELLIGENCE_PATH}` as const; // cloud logs to exclude from default index pattern export const EXCLUDE_ELASTIC_CLOUD_INDICES = ['-*elastic-cloud-logs-*']; diff --git a/x-pack/plugins/security_solution/kibana.json b/x-pack/plugins/security_solution/kibana.json index cf6ab94cf15b..3744f7ac4b6b 100644 --- a/x-pack/plugins/security_solution/kibana.json +++ b/x-pack/plugins/security_solution/kibana.json @@ -12,23 +12,24 @@ "actions", "alerting", "cases", + "cloudSecurityPosture", "data", "embeddable", "eventLog", "features", "inspector", + "kubernetesSecurity", "lens", "licensing", "maps", "ruleRegistry", "sessionView", "taskManager", + "threatIntelligence", "timelines", "triggersActionsUi", "uiActions", - "unifiedSearch", - "kubernetesSecurity", - "cloudSecurityPosture" + "unifiedSearch" ], "optionalPlugins": [ "encryptedSavedObjects", diff --git a/x-pack/plugins/security_solution/public/app/deep_links/index.ts b/x-pack/plugins/security_solution/public/app/deep_links/index.ts index 2060d21baaf9..5295ec1fd845 100644 --- a/x-pack/plugins/security_solution/public/app/deep_links/index.ts +++ b/x-pack/plugins/security_solution/public/app/deep_links/index.ts @@ -45,6 +45,7 @@ import { DASHBOARDS, CREATE_NEW_RULE, RESPONSE_ACTIONS, + THREAT_INTELLIGENCE, } from '../translations'; import { OVERVIEW_PATH, @@ -69,6 +70,7 @@ import { KUBERNETES_PATH, RULES_CREATE_PATH, RESPONSE_ACTIONS_PATH, + THREAT_INTELLIGENCE_PATH, } from '../../../common/constants'; import type { ExperimentalFeatures } from '../../../common/experimental_features'; import { hasCapabilities, subscribeAppLinks } from '../../common/links'; @@ -384,6 +386,17 @@ export const securitySolutionsDeepLinks: SecuritySolutionDeepLink[] = [ }, ], }, + { + id: SecurityPageName.threatIntelligence, + title: THREAT_INTELLIGENCE, + path: THREAT_INTELLIGENCE_PATH, + navLinkStatus: AppNavLinkStatus.hidden, + keywords: [ + i18n.translate('xpack.securitySolution.search.threatIntelligence', { + defaultMessage: 'Threat Intelligence', + }), + ], + }, { id: SecurityPageName.kubernetes, title: KUBERNETES, diff --git a/x-pack/plugins/security_solution/public/app/home/home_navigations.ts b/x-pack/plugins/security_solution/public/app/home/home_navigations.ts index 0d8795dcdf8a..d732135c5337 100644 --- a/x-pack/plugins/security_solution/public/app/home/home_navigations.ts +++ b/x-pack/plugins/security_solution/public/app/home/home_navigations.ts @@ -30,6 +30,7 @@ import { APP_KUBERNETES_PATH, APP_LANDING_PATH, APP_RESPONSE_ACTIONS_PATH, + APP_THREAT_INTELLIGENCE_PATH, } from '../../../common/constants'; export const navTabs: SecurityNav = { @@ -173,6 +174,13 @@ export const navTabs: SecurityNav = { disabled: false, urlKey: 'administration', }, + [SecurityPageName.threatIntelligence]: { + id: SecurityPageName.threatIntelligence, + name: i18n.THREAT_INTELLIGENCE, + href: APP_THREAT_INTELLIGENCE_PATH, + disabled: false, + urlKey: 'threat_intelligence', + }, }; export const securityNavGroup: SecurityNavGroup = { diff --git a/x-pack/plugins/security_solution/public/app/translations.ts b/x-pack/plugins/security_solution/public/app/translations.ts index a8817802bcb7..776df745b323 100644 --- a/x-pack/plugins/security_solution/public/app/translations.ts +++ b/x-pack/plugins/security_solution/public/app/translations.ts @@ -138,3 +138,10 @@ export const NO_PERMISSIONS_MSG = (subPluginKey: string) => export const NO_PERMISSIONS_TITLE = i18n.translate('xpack.securitySolution.noPermissionsTitle', { defaultMessage: 'Privileges required', }); + +export const THREAT_INTELLIGENCE = i18n.translate( + 'xpack.securitySolution.navigation.threatIntelligence', + { + defaultMessage: 'Threat Intelligence', + } +); diff --git a/x-pack/plugins/security_solution/public/common/components/navigation/types.ts b/x-pack/plugins/security_solution/public/common/components/navigation/types.ts index 9c5fa4d0d15a..8980e367efe5 100644 --- a/x-pack/plugins/security_solution/public/common/components/navigation/types.ts +++ b/x-pack/plugins/security_solution/public/common/components/navigation/types.ts @@ -64,6 +64,7 @@ export const securityNavKeys = [ SecurityPageName.trustedApps, SecurityPageName.users, SecurityPageName.kubernetes, + SecurityPageName.threatIntelligence, ] as const; export type SecurityNavKey = typeof securityNavKeys[number]; diff --git a/x-pack/plugins/security_solution/public/common/components/navigation/use_security_solution_navigation/__snapshots__/index.test.tsx.snap b/x-pack/plugins/security_solution/public/common/components/navigation/use_security_solution_navigation/__snapshots__/index.test.tsx.snap index 4da2600f3929..c02e7adbb6ea 100644 --- a/x-pack/plugins/security_solution/public/common/components/navigation/use_security_solution_navigation/__snapshots__/index.test.tsx.snap +++ b/x-pack/plugins/security_solution/public/common/components/navigation/use_security_solution_navigation/__snapshots__/index.test.tsx.snap @@ -116,6 +116,16 @@ Object { "name": "Users", "onClick": [Function], }, + Object { + "data-href": "securitySolutionUI/threat-intelligence", + "data-test-subj": "navigation-threat-intelligence", + "disabled": false, + "href": "securitySolutionUI/threat-intelligence", + "id": "threat-intelligence", + "isSelected": false, + "name": "Threat Intelligence", + "onClick": [Function], + }, ], "name": "Explore", }, diff --git a/x-pack/plugins/security_solution/public/common/components/navigation/use_security_solution_navigation/use_navigation_items.tsx b/x-pack/plugins/security_solution/public/common/components/navigation/use_security_solution_navigation/use_navigation_items.tsx index 12223d904298..bb15fd45cef9 100644 --- a/x-pack/plugins/security_solution/public/common/components/navigation/use_security_solution_navigation/use_navigation_items.tsx +++ b/x-pack/plugins/security_solution/public/common/components/navigation/use_security_solution_navigation/use_navigation_items.tsx @@ -109,6 +109,7 @@ function usePrimaryNavigationItemsToDisplay(navTabs: Record) { ...(navTabs[SecurityPageName.users] != null ? [navTabs[SecurityPageName.users]] : []), + navTabs[SecurityPageName.threatIntelligence], ], }, { diff --git a/x-pack/plugins/security_solution/public/common/components/url_state/constants.ts b/x-pack/plugins/security_solution/public/common/components/url_state/constants.ts index 6e421b57a90c..dfff0e8d4fe3 100644 --- a/x-pack/plugins/security_solution/public/common/components/url_state/constants.ts +++ b/x-pack/plugins/security_solution/public/common/components/url_state/constants.ts @@ -42,4 +42,5 @@ export type UrlStateType = | 'rules' | 'timeline' | 'explore' - | 'dashboards'; + | 'dashboards' + | 'threat_intelligence'; diff --git a/x-pack/plugins/security_solution/public/common/images/threat_intelligence.png b/x-pack/plugins/security_solution/public/common/images/threat_intelligence.png new file mode 100644 index 0000000000000000000000000000000000000000..53badc4b84b173294a1c798b23ed277c0de4f9ca GIT binary patch literal 97783 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�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 @=cn;{_SS;y(a!gT16x| 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 { + const services = useKibana().services; + const { threatIntelligence } = services; + const ThreatIntelligencePlugin = threatIntelligence.getComponent(); + + return ( + + + + + ); +}; + +export const ThreatIntelligencePage = React.memo(ThreatIntelligence); diff --git a/x-pack/plugins/security_solution/public/threat_intelligence/routes.tsx b/x-pack/plugins/security_solution/public/threat_intelligence/routes.tsx new file mode 100644 index 000000000000..65b1440c49d2 --- /dev/null +++ b/x-pack/plugins/security_solution/public/threat_intelligence/routes.tsx @@ -0,0 +1,25 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React from 'react'; +import { TrackApplicationView } from '@kbn/usage-collection-plugin/public'; +import { ThreatIntelligencePage } from './pages/threat_intelligence'; +import { SecurityPageName, THREAT_INTELLIGENCE_PATH } from '../../common/constants'; +import type { SecuritySubPluginRoutes } from '../app/types'; + +const ThreatIntelligenceRoutes = () => ( + + + +); + +export const routes: SecuritySubPluginRoutes = [ + { + path: THREAT_INTELLIGENCE_PATH, + render: ThreatIntelligenceRoutes, + }, +]; diff --git a/x-pack/plugins/security_solution/public/types.ts b/x-pack/plugins/security_solution/public/types.ts index bc6d71c04798..1104ff630b61 100644 --- a/x-pack/plugins/security_solution/public/types.ts +++ b/x-pack/plugins/security_solution/public/types.ts @@ -39,6 +39,7 @@ import type { SavedObjectsTaggingApi, SavedObjectTaggingOssPluginStart, } from '@kbn/saved-objects-tagging-oss-plugin/public'; +import type { ThreatIntelligencePluginStart } from '@kbn/threat-intelligence-plugin/public'; import type { ResolverPluginSetup } from './resolver/types'; import type { Inspect } from '../common/search_strategy'; import type { Detections } from './detections'; @@ -54,6 +55,7 @@ import type { Timelines } from './timelines'; import type { Management } from './management'; import type { LandingPages } from './landing_pages'; import type { CloudSecurityPosture } from './cloud_security_posture'; +import type { ThreatIntelligence } from './threat_intelligence'; export interface SetupPlugins { home?: HomePublicPluginSetup; @@ -87,6 +89,7 @@ export interface StartPlugins { osquery?: OsqueryPluginStart; security: SecurityPluginSetup; cloudSecurityPosture: CspClientPluginStart; + threatIntelligence: ThreatIntelligencePluginStart; } export interface StartPluginsDependencies extends StartPlugins { @@ -127,6 +130,7 @@ export interface SubPlugins { management: Management; landingPages: LandingPages; cloudSecurityPosture: CloudSecurityPosture; + threatIntelligence: ThreatIntelligence; } // TODO: find a better way to defined these types @@ -144,4 +148,5 @@ export interface StartedSubPlugins { management: ReturnType; landingPages: ReturnType; cloudSecurityPosture: ReturnType; + threatIntelligence: ReturnType; } diff --git a/x-pack/plugins/security_solution/tsconfig.json b/x-pack/plugins/security_solution/tsconfig.json index 0e1f49e52858..7a8d161ad062 100644 --- a/x-pack/plugins/security_solution/tsconfig.json +++ b/x-pack/plugins/security_solution/tsconfig.json @@ -32,19 +32,20 @@ { "path": "../actions/tsconfig.json" }, { "path": "../alerting/tsconfig.json" }, { "path": "../cases/tsconfig.json" }, + { "path": "../cloud_security_posture/tsconfig.json" }, { "path": "../encrypted_saved_objects/tsconfig.json" }, { "path": "../features/tsconfig.json" }, { "path": "../fleet/tsconfig.json" }, + { "path": "../kubernetes_security/tsconfig.json" }, { "path": "../licensing/tsconfig.json" }, { "path": "../lists/tsconfig.json" }, { "path": "../maps/tsconfig.json" }, { "path": "../ml/tsconfig.json" }, { "path": "../osquery/tsconfig.json" }, - { "path": "../spaces/tsconfig.json" }, - { "path": "../security/tsconfig.json" }, - { "path": "../timelines/tsconfig.json" }, { "path": "../session_view/tsconfig.json" }, - { "path": "../kubernetes_security/tsconfig.json" }, - { "path": "../cloud_security_posture/tsconfig.json" } + { "path": "../security/tsconfig.json" }, + { "path": "../spaces/tsconfig.json" }, + { "path": "../threat_intelligence/tsconfig.json" }, + { "path": "../timelines/tsconfig.json" } ] } diff --git a/x-pack/plugins/threat_intelligence/.storybook/main.js b/x-pack/plugins/threat_intelligence/.storybook/main.js new file mode 100644 index 000000000000..86b48c32f103 --- /dev/null +++ b/x-pack/plugins/threat_intelligence/.storybook/main.js @@ -0,0 +1,8 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +module.exports = require('@kbn/storybook').defaultConfig; diff --git a/x-pack/plugins/threat_intelligence/CONTRIBUTING.md b/x-pack/plugins/threat_intelligence/CONTRIBUTING.md new file mode 100644 index 000000000000..d27b26442e56 --- /dev/null +++ b/x-pack/plugins/threat_intelligence/CONTRIBUTING.md @@ -0,0 +1,135 @@ +# Contributing + +Before contributing to this plugin, make sure you read the [contributing guide for Kibana](https://github.com/elastic/kibana/blob/main/CONTRIBUTING.md), as well as the [STYLEGUIDE](https://github.com/elastic/kibana/blob/main/STYLEGUIDE.mdx) and [TYPESCRIPT](https://github.com/elastic/kibana/blob/main/TYPESCRIPT.md) md files.. + +> Kibana recommends working on a fork of the [elastic/kibana repository](https://github.com/elastic/kibana) (see [here](https://docs.github.com/en/get-started/quickstart/fork-a-repo) to learn about forks). + +> This plugin uses TypeScript, see Kibana's recommendation here. + +## Submitting a Pull Request (PR) + +Before you submit your PR, consider the following guidelines: + +1. Be sure that an issue describes the problem you're fixing, or documents the design for the feature you'd like to add. + +2. Make your changes in a new git branch. + + ``` + git checkout -b my-branch main + ``` + +3. Commit your changes using a descriptive commit message that follows our commit message conventions: + + ``` + git commit -a + ``` + +4. Push your branch to GitHub: + + ``` + git push origin my-fix-branch + ``` + +5. In GitHub, create a PR. + + Note: If changes are suggested, then make the required updates, [rebase](https://hackernoon.com/git-merge-vs-rebase-whats-the-diff-76413c117333) your branch, and force push (this will update your PR): + + ``` + git rebase main -i + git push -f + ``` + +## Commit Message Guidelines + +> **Note:** These guidelines are **recommended - not mandatory**. + +### Commit Message Format + +Each commit message consists of a **header**, **body**, and **footer**. + +``` + + + + +