-
Notifications
You must be signed in to change notification settings - Fork 558
[New Rule] Potential PowerShell Obfuscation via Invalid Escape Sequences #4614
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
base: main
Are you sure you want to change the base?
Conversation
Rule: Tuning - GuidelinesThese guidelines serve as a reminder set of considerations when tuning an existing rule. Documentation and Context
Rule Metadata Checks
Testing and Validation
|
⛔️ Test failed Results
|
⛔️ Test failed Results
|
| WHERE count >= 10 | ||
|
||
// Filter FPs, and due to the behavior of the LIKE operator, allow null values | ||
| WHERE (file.name NOT LIKE "TSS_*.psm1" or file.name IS NULL) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Any reason not to filter this up front before doing the evals and aggregations?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
No particular reason, but as it is not a significant pattern to exclude, it makes sense to do only at the end of the condition, just like we do on other rule types
Issues
Part of https://github.com/elastic/ia-trade-team/issues/533
Summary
Identifies PowerShell scripts that use invalid escape sequences as a form of obfuscation. This technique introduces
backticks (`) between characters in a way that does not correspond to valid PowerShell escape sequences, breaking up
strings and bypassing pattern-based detections while preserving execution logic. This is designed to evade static
analysis and bypass security protections such as the Antimalware Scan Interface (AMSI).
83 hits last 90d on telemetry, FPs related to TSS scripts with malformed strings, excluded in the query
Additional information
From my testing, the | KEEP condition doesn’t need to specify any fields other than the metadata ones (_id and _index), as the engine appears to populate the alert using them. However, I’m keeping it as-is because it significantly improves performance in Discovery and makes the results more understandable if someone uses the query for hunting.
Sample Match