Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Security Solution] Handle negative lookback in rule upgrade flyout #204317

Open
wants to merge 6 commits into
base: main
Choose a base branch
from

Conversation

maximpn
Copy link
Contributor

@maximpn maximpn commented Dec 14, 2024

Resolves: #202715

Summary

This PR makes inconsistent/wrong rule's look-back duration prominent for a user. It falls back to a default 1 minute value in rule upgrade workflow.

Details

Negative/wrong lookback problem

There is a difference between rule schedule value in a saved object and value represented to users

  • Saved object (and rule management API) has interval, from and to fields representing rule schedule. interval shows how often a rule runs in task runner. from and to stored in date math format like now-10m represent a date time range used to fetch source events. Task manager strives to run rules exactly every interval but it's not always possible due to multiple reasons like system load and various delays. To avoid any gaps to appear from point in time usually stands earlier than current time minus interval, for example interval is 10 minutes and from is now-12m meaning rule will analyze events starting from 12 minutes old. to represents the latest point in time source events will be analyzed.
  • Diffable rule and UI represent rule schedule as interval and lookback. Where interval is the same as above and lookback and a time duration before current time minus interval. For example interval is 10 minutes and lookback is 2 minutes it means a rule will analyzing events starting with 12 minutes old until the current moment in time.

Literally interval, from and to mean a rule runs every interval and analyzes events starting from from until to. Technically from and to may not have any correlation with interval, for example a rule may analyze one year old events. While it's reasonable for manual rule runs and gap remediation the same approach doesn't work well for usual rule schedule. Transformation between interval/from/to and interval/lookback works only when to is equal the current moment in time i.e. now.

Rule management APIs allow to set any from and to values resulting in inconsistent rule schedule. Transformed interval/lookback value won't represent real time interval used to fetch source events for analysis. On top of that negative lookback value may puzzle users on the meaning of the negative sign.

Prebuilt rules with interval/from/to resulting in negative lookback

Some prebuilt rules have such interval, from and to field values thatnegative lookback is expected, for example Multiple Okta Sessions Detected for a Single User. It runs every 60 minutes but has from field set to now-30m and to equals now. In the end we have lookback equals to - from - interval = 30 minutes - 60 minutes = -30 minutes.

Our UI doesn't handle negative lookback values. It simply discards a negative sign and substitutes the rest for editing. In the case above 30 minutes will be suggested for editing. Saving the form will result in changing from to now-90m

image

Changes in this PR

This PR mitigates rule schedule inconsistencies caused by to fields not using the current point in time i.e. now. The following was done

  • _perform rule upgrade API endpoint was changed to use default 1 minute look back in case provided look back interval can't be parsed. Parsing error happens for negative lookback. Previously it resulted in setting lookback to 0s upon rule upgrade.
  • Rule upgrade flyout's rule schedule readonly view was changed to show a warning when to isn't equal now.
  • Rule upgrade flyout's rule schedule edit view gets default 1 minute look back when to isn't equal now.
  • Rule upgrade flyout's JSON Diff was changed to show non-transformed from value when to isn't equal now. Transformed values are incorrect in that case since transformation functionality assumes to is equal now.
  • Rule details page was changed to show a look-back warning when to isn't equal now.

Screenshots

  • Rule upgrade workflow
Screenshot 2024-12-16 at 15 20 18 Screenshot 2024-12-16 at 15 20 31 Screenshot 2024-12-16 at 15 20 42
Screen.Recording.2024-12-16.at.15.20.56.mov
  • JSON view

Screenshot 2024-12-16 at 15 57 19

  • Rule details page
Screenshot 2024-12-16 at 15 21 29 Screenshot 2024-12-16 at 15 21 39

How to test?

  • Ensure the prebuiltRulesCustomizationEnabled feature flag is enabled
  • Allow internal APIs via adding server.restrictInternalApis: false to kibana.dev.yaml
  • Clear Elasticsearch data
  • Run Elasticsearch and Kibana locally (do not open Kibana in a web browser)
  • Install an outdated version of the security_detection_engine Fleet package
curl -X POST --user elastic:changeme  -H 'Content-Type: application/json' -H 'kbn-xsrf: 123' -H "elastic-api-version: 2023-10-31" -d '{"force":true}' http://localhost:5601/kbn/api/fleet/epm/packages/security_detection_engine/8.14.1
  • Install prebuilt rules
curl -X POST --user elastic:changeme  -H 'Content-Type: application/json' -H 'kbn-xsrf: 123' -H "elastic-api-version: 1" -d '{"mode":"ALL_RULES"}' http://localhost:5601/kbn/internal/detection_engine/prebuilt_rules/installation/_perform
  • Set "inconsistent" rule schedule for Suspicious File Creation via Kworker rule by running a query below
curl -X PATCH --user elastic:changeme -H "Content-Type: application/json" -H "elastic-api-version: 2023-10-31" -H "kbn-xsrf: 123" -d '{"rule_id":"ae343298-97bc-47bc-9ea2-5f2ad831c16e","interval":"10m","from":"now-5m","to":"now-2m"}' http://localhost:5601/kbn/api/detection_engine/rules
  • Open rule upgrade flyout for Suspicious File Creation via Kworker rule

@maximpn maximpn added bug Fixes for quality problems that affect the customer experience release_note:skip Skip the PR/issue when compiling release notes impact:high Addressing this issue will have a high level of impact on the quality/strength of our product. v9.0.0 Team:Detections and Resp Security Detection Response Team Team: SecuritySolution Security Solutions Team working on SIEM, Endpoint, Timeline, Resolver, etc. Team:Detection Rule Management Security Detection Rule Management Team Feature:Prebuilt Detection Rules Security Solution Prebuilt Detection Rules area backport:version Backport to applied version labels v8.18.0 labels Dec 14, 2024
@maximpn maximpn self-assigned this Dec 14, 2024
@maximpn maximpn force-pushed the handle-negative-lookback-in-rule-upgrade-flyout branch 4 times, most recently from 3254df1 to a8dacbc Compare December 17, 2024 08:25
@maximpn maximpn marked this pull request as ready for review December 17, 2024 10:55
@maximpn maximpn requested review from a team as code owners December 17, 2024 10:55
@maximpn maximpn requested review from rylnd and xcrzx December 17, 2024 10:55
@elasticmachine
Copy link
Contributor

Pinging @elastic/security-detections-response (Team:Detections and Resp)

@elasticmachine
Copy link
Contributor

Pinging @elastic/security-solution (Team: SecuritySolution)

@elasticmachine
Copy link
Contributor

Pinging @elastic/security-detection-rule-management (Team:Detection Rule Management)

@rylnd
Copy link
Contributor

rylnd commented Dec 18, 2024

@maximpn when I follow your instructions and attempt to open the upgrade flyout for the modified rule, I receive the following error, which looks to have been thrown by parseDuration:

Screenshot 2024-12-18 at 1 45 07 PM
The above error occurred in ErrorBoundary:
    at ErrorBoundary (http://localhost:5601/XXXXXXXXXXXX/bundles/kbn-ui-shared-deps-npm/kbn-ui-shared-deps-npm.dll.js:173844:7)
    at DragDropContext (http://localhost:5601/XXXXXXXXXXXX/bundles/kbn-ui-shared-deps-npm/kbn-ui-shared-deps-npm.dll.js:182244:23)
    at DragDropContextWrapperComponent (http://localhost:5601/XXXXXXXXXXXX/bundles/plugin/securitySolution/1.0.0/securitySolution.chunk.lazy_application_dependencies.js:123797:3)
    at TourContextProvider (http://localhost:5601/XXXXXXXXXXXX/bundles/plugin/securitySolution/1.0.0/securitySolution.chunk.lazy_application_dependencies.js:125963:3)
    at http://localhost:5601/XXXXXXXXXXXX/bundles/plugin/securitySolution/1.0.0/securitySolution.chunk.10.js:3132:3
    at div
    at P (http://localhost:5601/XXXXXXXXXXXX/bundles/kbn-ui-shared-deps-npm/kbn-ui-shared-deps-npm.dll.js:416847:19797)
    at HomePageComponent (http://localhost:5601/XXXXXXXXXXXX/bundles/plugin/securitySolution/1.0.0/securitySolution.chunk.lazy_application_dependencies.js:119685:3)
    at FilesContext (http://localhost:5601/XXXXXXXXXXXX/bundles/plugin/cases/1.0.0/cases.plugin.js:4051:3)
    at QueryClientProvider (http://localhost:5601/XXXXXXXXXXXX/bundles/kbn-ui-shared-deps-npm/kbn-ui-shared-deps-npm.dll.js:201457:3)
    at CasesProvider (http://localhost:5601/XXXXXXXXXXXX/bundles/plugin/cases/1.0.0/cases.plugin.js:12930:3)
    at Suspense
    at CasesProviderLazyWrapper (http://localhost:5601/XXXXXXXXXXXX/bundles/plugin/cases/1.0.0/cases.plugin.js:10620:3)
    at CasesProviderLazyWrapperWithRegistry (http://localhost:5601/XXXXXXXXXXXX/bundles/plugin/cases/1.0.0/cases.plugin.js:10648:5)
    at Route (http://localhost:5601/XXXXXXXXXXXX/bundles/kbn-ui-shared-deps-npm/kbn-ui-shared-deps-npm.dll.js:365980:29)
    at Route (http://localhost:5601/XXXXXXXXXXXX/bundles/plugin/securitySolution/1.0.0/securitySolution.chunk.lazy_application_dependencies.js:52215:3)
    at Switch (http://localhost:5601/XXXXXXXXXXXX/bundles/kbn-ui-shared-deps-npm/kbn-ui-shared-deps-npm.dll.js:366182:29)
    at Routes (http://localhost:5601/XXXXXXXXXXXX/bundles/plugin/securitySolution/1.0.0/securitySolution.chunk.lazy_application_dependencies.js:52349:3)
    at http://localhost:5601/XXXXXXXXXXXX/bundles/plugin/securitySolution/1.0.0/securitySolution.chunk.lazy_application_dependencies.js:124866:3
    at RenderedRoute (http://localhost:5601/XXXXXXXXXXXX/bundles/kbn-ui-shared-deps-npm/kbn-ui-shared-deps-npm.dll.js:364147:5)
    at Routes (http://localhost:5601/XXXXXXXXXXXX/bundles/kbn-ui-shared-deps-npm/kbn-ui-shared-deps-npm.dll.js:364708:5)
    at Router (http://localhost:5601/XXXXXXXXXXXX/bundles/kbn-ui-shared-deps-npm/kbn-ui-shared-deps-npm.dll.js:364646:15)
    at CompatRouter (http://localhost:5601/XXXXXXXXXXXX/bundles/kbn-ui-shared-deps-npm/kbn-ui-shared-deps-npm.dll.js:362673:5)
    at Router (http://localhost:5601/XXXXXXXXXXXX/bundles/kbn-ui-shared-deps-npm/kbn-ui-shared-deps-npm.dll.js:365599:30)
    at Router (http://localhost:5601/XXXXXXXXXXXX/bundles/plugin/securitySolution/1.0.0/securitySolution.chunk.lazy_application_dependencies.js:52305:3)
    at ManageRoutesSpyComponent (http://localhost:5601/XXXXXXXXXXXX/bundles/plugin/securitySolution/1.0.0/securitySolution.chunk.lazy_application_dependencies.js:141727:3)
    at PageRouterComponent (http://localhost:5601/XXXXXXXXXXXX/bundles/plugin/securitySolution/1.0.0/securitySolution.chunk.lazy_application_dependencies.js:119811:3)
    at AssistantProvider (http://localhost:5601/XXXXXXXXXXXX/bundles/plugin/securitySolution/1.0.0/securitySolution.chunk.lazy_application_dependencies.js:89064:3)
    at AssistantProvider (http://localhost:5601/XXXXXXXXXXXX/bundles/plugin/securitySolution/1.0.0/securitySolution.chunk.lazy_application_dependencies.js:121929:3)
    at DiscoverInTimelineContextProvider (http://localhost:5601/XXXXXXXXXXXX/bundles/plugin/securitySolution/1.0.0/securitySolution.chunk.lazy_application_dependencies.js:123268:86)
    at http://localhost:5601/XXXXXXXXXXXX/bundles/plugin/securitySolution/1.0.0/securitySolution.chunk.lazy_application_dependencies.js:135727:3
    at CellActionsProvider (http://localhost:5601/XXXXXXXXXXXX/bundles/plugin/securitySolution/1.0.0/securitySolution.chunk.7.js:8148:3)
    at QueryClientProvider (http://localhost:5601/XXXXXXXXXXXX/bundles/kbn-ui-shared-deps-npm/kbn-ui-shared-deps-npm.dll.js:201457:3)
    at http://localhost:5601/XXXXXXXXXXXX/bundles/plugin/securitySolution/1.0.0/securitySolution.chunk.default~lazy_app_links.js:593:3
    at NavigationProvider (http://localhost:5601/XXXXXXXXXXXX/bundles/plugin/securitySolution/1.0.0/securitySolution.plugin.js:762:3)
    at ManageUserInfo (http://localhost:5601/XXXXXXXXXXXX/bundles/plugin/securitySolution/1.0.0/securitySolution.chunk.lazy_application_dependencies.js:146394:3)
    at UserPrivilegesProvider (http://localhost:5601/XXXXXXXXXXXX/bundles/plugin/securitySolution/1.0.0/securitySolution.chunk.lazy_application_dependencies.js:135990:3)
    at http://localhost:5601/XXXXXXXXXXXX/bundles/plugin/securitySolution/1.0.0/securitySolution.chunk.lazy_application_dependencies.js:131967:3
    at Le (http://localhost:5601/XXXXXXXXXXXX/bundles/kbn-ui-shared-deps-npm/kbn-ui-shared-deps-npm.dll.js:416847:17442)
    at KibanaStyledComponentsThemeProvider (http://localhost:5601/XXXXXXXXXXXX/bundles/plugin/kibanaReact/1.0.0/kibanaReact.plugin.js:2009:3)
    at Provider (http://localhost:5601/XXXXXXXXXXXX/bundles/kbn-ui-shared-deps-npm/kbn-ui-shared-deps-npm.dll.js:359229:20)
    at ManageGlobalToaster (http://localhost:5601/XXXXXXXXXXXX/bundles/plugin/securitySolution/1.0.0/securitySolution.chunk.0.js:884:3)
    at ErrorBoundaryInternal (http://localhost:5601/XXXXXXXXXXXX/bundles/kbn-ui-shared-deps-src/kbn-ui-shared-deps-src.js:63384:5)
    at KibanaErrorBoundary (http://localhost:5601/XXXXXXXXXXXX/bundles/kbn-ui-shared-deps-src/kbn-ui-shared-deps-src.js:63445:110)
    at KibanaErrorBoundaryProvider (http://localhost:5601/XXXXXXXXXXXX/bundles/kbn-ui-shared-deps-src/kbn-ui-shared-deps-src.js:63205:3)
    at EuiContext (http://localhost:5601/XXXXXXXXXXXX/bundles/kbn-ui-shared-deps-npm/kbn-ui-shared-deps-npm.dll.js:71325:24)
    at IntlProvider (http://localhost:5601/XXXXXXXXXXXX/bundles/kbn-ui-shared-deps-src/kbn-ui-shared-deps-src.js:237142:47)
    at I18nProvider (http://localhost:5601/XXXXXXXXXXXX/bundles/kbn-ui-shared-deps-src/kbn-ui-shared-deps-src.js:57310:3)
    at I18nContext (http://localhost:5601/XXXXXXXXXXXX/bundles/core/core.entry.js:21999:9)
    at EuiComponentDefaultsProvider (http://localhost:5601/XXXXXXXXXXXX/bundles/kbn-ui-shared-deps-npm/kbn-ui-shared-deps-npm.dll.js:127252:36)
    at CurrentEuiBreakpointProvider (http://localhost:5601/XXXXXXXXXXXX/bundles/kbn-ui-shared-deps-npm/kbn-ui-shared-deps-npm.dll.js:152993:23)
    at ThemeProvider (http://localhost:5601/XXXXXXXXXXXX/bundles/kbn-ui-shared-deps-npm/kbn-ui-shared-deps-npm.dll.js:164284:63)
    at EuiEmotionThemeProvider (http://localhost:5601/XXXXXXXXXXXX/bundles/kbn-ui-shared-deps-npm/kbn-ui-shared-deps-npm.dll.js:158268:23)
    at EuiThemeMemoizedStylesProvider (http://localhost:5601/XXXXXXXXXXXX/bundles/kbn-ui-shared-deps-npm/kbn-ui-shared-deps-npm.dll.js:158743:23)
    at EuiThemeProvider (http://localhost:5601/XXXXXXXXXXXX/bundles/kbn-ui-shared-deps-npm/kbn-ui-shared-deps-npm.dll.js:158537:22)
    at EuiSystemColorModeProvider (http://localhost:5601/XXXXXXXXXXXX/bundles/kbn-ui-shared-deps-npm/kbn-ui-shared-deps-npm.dll.js:127579:23)
    at EuiCacheProvider (http://localhost:5601/XXXXXXXXXXXX/bundles/kbn-ui-shared-deps-npm/kbn-ui-shared-deps-npm.dll.js:127173:20)
    at EuiProviderNestedCheck (http://localhost:5601/XXXXXXXXXXXX/bundles/kbn-ui-shared-deps-npm/kbn-ui-shared-deps-npm.dll.js:127405:23)
    at EuiProvider (http://localhost:5601/XXXXXXXXXXXX/bundles/kbn-ui-shared-deps-npm/kbn-ui-shared-deps-npm.dll.js:127465:25)
    at KibanaEuiProvider (http://localhost:5601/XXXXXXXXXXXX/bundles/plugin/securitySolution/1.0.0/securitySolution.chunk.lazy_application_dependencies.js:51630:3)
    at KibanaRootContextProvider (http://localhost:5601/XXXXXXXXXXXX/bundles/plugin/securitySolution/1.0.0/securitySolution.chunk.lazy_application_dependencies.js:51751:3)
    at KibanaRenderContextProvider (http://localhost:5601/XXXXXXXXXXXX/bundles/plugin/securitySolution/1.0.0/securitySolution.chunk.lazy_application_dependencies.js:51528:3)
    at StartAppComponent (http://localhost:5601/XXXXXXXXXXXX/bundles/plugin/securitySolution/1.0.0/securitySolution.chunk.lazy_application_dependencies.js:119310:3)
    at CloudContextProvider (http://localhost:5601/XXXXXXXXXXXX/bundles/plugin/cloud/1.0.0/cloud.plugin.js:599:7)
    at Provider (http://localhost:5601/XXXXXXXXXXXX/bundles/plugin/kibanaReact/1.0.0/kibanaReact.plugin.js:2813:15)
    at SecurityAppComponent (http://localhost:5601/XXXXXXXXXXXX/bundles/plugin/securitySolution/1.0.0/securitySolution.chunk.lazy_application_dependencies.js:119342:3)
    ```
  </details>

@maximpn maximpn force-pushed the handle-negative-lookback-in-rule-upgrade-flyout branch from a8dacbc to 1a0d56f Compare December 19, 2024 00:16
@maximpn
Copy link
Contributor Author

maximpn commented Dec 19, 2024

Hi @rylnd,

are you sure you pulled the latest PR changes? I double checked and it works for me locally as described in the PR description. Could you try removing the branch and pull the latest changes?

Copy link
Contributor

@rylnd rylnd left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@maximpn I tested this and verified that it works as described. However, I'm not sure that this is the best solution for users. There are two main issues with the implementation:

  1. By disallowing negative lookback values, it forces the user to change the rule's logic on upgrade
  2. The upstream rule will continue to conflict, necessitate resolution, and (again) have its in-situ schedule changed on each subsequent release/upgrade workflow.

If I'm understanding correctly, these rules cannot be edited/upgraded without (significantly) changing their schedule. I would like to discuss this with both rule authors and the rest of the DE team to get their thoughts before approving this.

I appreciate the move toward consistency here, and the addressing of some of the UI/form bugs, but I really think we should strive to preserve the existing values, if possible. Can we not simply use a form component that allows negative values?

'xpack.securitySolution.detectionEngine.rules.upgradeRules.ruleSchedule.lookbackInconsistencyWarning',
{
defaultMessage:
'There is an inconsistency in rule schedule configuration. Rule may run with gaps. Default value "{defaultValue}" is suggested for upgrade.',
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We might want some additional articles here for legibility:

Suggested change
'There is an inconsistency in rule schedule configuration. Rule may run with gaps. Default value "{defaultValue}" is suggested for upgrade.',
'There is an inconsistency in rule schedule configuration, and the rule may run with gaps. The default value "{defaultValue}" is suggested.',

'xpack.securitySolution.detectionEngine.ruleDetails.lookbackInconsistencyWarning',
{
defaultMessage:
'There is an inconsistency in rule schedule configuration. Rule may run with gaps. Please edit the rule to resolve it.',
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Again, I'd make this one sentence to make the relationship clearer between the two statements:

Suggested change
'There is an inconsistency in rule schedule configuration. Rule may run with gaps. Please edit the rule to resolve it.',
'There is an inconsistency in rule schedule configuration, and the rule may run with gaps. Please edit the rule to resolve this.',

@@ -577,7 +577,7 @@ export const getCatchupTuples = ({
*/
export const calculateFromValue = (interval: string, lookback: string) => {
const parsedInterval = parseInterval(interval) ?? moment.duration(0);
const parsedFrom = parseInterval(lookback) ?? moment.duration(0);
const parsedFrom = parseInterval(lookback) ?? moment.duration(1, 'm');
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should this be more closely tied to DEFAULT_RULE_EXECUTION_LOOKBACK ? It seems like we're adding this default in two places instead of just one.

@maximpn
Copy link
Contributor Author

maximpn commented Dec 19, 2024

@rylnd thanks for your review 🙏

Generally speaking the problem won't be solved by allowing editing negative look-back. Rule can also have to set to a value lower than now. In that case it's impossible to convert between interval/from/to and interval/lookback. This conversion is required in rule upgrade workflow since diffable rule has only interval and lookback. A solution would require using interval/from/to in diffable rule and perform conversion in UI.

Can we not simply use a form component that allows negative values?

It's possible but requires some amount of work justification to users.
For example any time duration helper functions we use in _review and _perform API endpoints and in UI (parseDuration, parseInterval) work only with positive time intervals. It was done on purpose.

If I'm understanding correctly, these rules cannot be edited/upgraded without (significantly) changing their schedule. I would like to discuss this with both rule authors and the rest of the DE team to get their thoughts before approving this.

Sure. Let's discuss it.

Copy link
Contributor

@banderror banderror left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@maximpn I agree with:

Whatever comes or can possibly come from prebuilt rules or rules CRUD API (as long as the rule is valid and can be created/updated/installed) should not be reset to any default values by the rule upgrade workflow, and should stay as is, unless the user explicitly changes it. UI elements should not reset / change the values on their own.

I'm blocking this PR until an agreement is reached in #204714.

We should have a single PR that resolves both #202715 and #204714.

@maximpn maximpn force-pushed the handle-negative-lookback-in-rule-upgrade-flyout branch 9 times, most recently from 9f7223f to 5ebec94 Compare December 31, 2024 13:23
@elastic-vault-github-plugin-prod elastic-vault-github-plugin-prod bot requested a review from a team as a code owner December 31, 2024 17:37
@maximpn maximpn force-pushed the handle-negative-lookback-in-rule-upgrade-flyout branch from 09b35af to e63a9e5 Compare December 31, 2024 18:56
@maximpn maximpn force-pushed the handle-negative-lookback-in-rule-upgrade-flyout branch from e63a9e5 to 85aa6da Compare January 1, 2025 08:54
@maximpn maximpn force-pushed the handle-negative-lookback-in-rule-upgrade-flyout branch from b4bf2a1 to 95bbf57 Compare January 1, 2025 11:13
@elasticmachine
Copy link
Contributor

elasticmachine commented Jan 1, 2025

💔 Build Failed

Failed CI Steps

Metrics [docs]

Module Count

Fewer modules leads to a faster build time

id before after diff
securitySolution 6508 6529 +21

Async chunks

Total size of all lazy-loaded chunks that will be downloaded as the user navigates the app

id before after diff
securitySolution 21.4MB 21.4MB +12.9KB

History

cc @maximpn

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
backport:version Backport to applied version labels bug Fixes for quality problems that affect the customer experience Feature:Prebuilt Detection Rules Security Solution Prebuilt Detection Rules area impact:high Addressing this issue will have a high level of impact on the quality/strength of our product. release_note:skip Skip the PR/issue when compiling release notes Team:Detection Rule Management Security Detection Rule Management Team Team:Detections and Resp Security Detection Response Team Team: SecuritySolution Security Solutions Team working on SIEM, Endpoint, Timeline, Resolver, etc. v8.18.0 v9.0.0
Projects
None yet
Development

Successfully merging this pull request may close these issues.

5 participants