Threat detection with YARA
In this guide, we're creating a file classification rule for a specific project in the package store.
1. Create the YARA ruleโ
In your rl-secure
package store, access the project directory where you want to place the custom YARA rule.
By default, every project directory contains the .yara
directory.
Navigate to the .yara
directory and create a file named My_Classification_Rule.yara
inside it.
2. Add the YARA rule contentsโ
Open the newly created My_Classification_Rule.yara
file in a text editor.
Copy the YARA rule contents from the following example into the file.
Example 1: Classify files as maliciousโ
Third-party software components may be compromised even when they're installed from popular and generally trustworthy sources like official package repositories. Malicious actors make use of various techniques (such as typo-squatting, obfuscation, and backdoor planting) to create opportunities for further software supply chain compromise, data exfiltration, and malware execution. To prevent this, it is essential to audit third-party and open-source libraries before using them in your development environments.
You can create a YARA rule that will classify a software component as malicious when specific patterns and behaviors are detected.
In this example, we have identified patterns used in the IconBurst NPM software supply chain attack.
Specifically, our YARA rule is matching the contents of package.json
files against variables defined in the strings
section.
The presence of those strings in a package.json
file indicates malicious intent.
It means the associated NPM package is related to IconBurst and should not be used.
When the rule is triggered, the file classification from the meta
section will be applied.
Matching files will be classified as malicious and assigned the threat name Text.Infostealer.IconBurst
.
rule Text_Infostealer_IconBurst : tc_detection malicious
{
meta:
author = "ReversingLabs"
source = "ReversingLabs"
status = "RELEASED"
sharing = "TLP:WHITE"
category = "MALWARE"
malware = "ICONBURST"
description = "Yara rule that detects package.json files of NPM packages related to the IconBurst software supply chain attack."
tc_detection_type = "Infostealer"
tc_detection_name = "IconBurst"
tc_detection_factor = 5
strings:
$ajaxapis_v1_0_0_name = /\"name\"\s{0,10}:\s{0,10}\"ajaxapis\"/
$ajaxapis_v1_0_0_version = /\"version\"\s{0,10}:\s{0,10}\"1\.0\.0\"/
$ajaxapis_v1_0_0_main = /\"main\"\s{0,10}:\s{0,10}\"ajax\.min\.js\"/
$ajaxapis_v1_0_0_author = /\"author\"\s{0,10}:\s{0,10}\"\"/
$package_icon_v6_0_5_name = /\"name\"\s{0,10}:\s{0,10}\"package\-icon\"/
$package_icon_v6_0_5_version = /\"version\"\s{0,10}:\s{0,10}\"6\.0\.5\"/
$package_icon_v6_0_5_main = /\"main\"\s{0,10}:\s{0,10}\"ionicons\.map\.js\"/
$package_icon_v6_0_5_author = /\"author\"\s{0,10}:\s{0,10}\"\"/
$swiper_bundle_v3_7_1_name = /\"name\"\s{0,10}:\s{0,10}\"swiper\-bundle\"/
$swiper_bundle_v3_7_1_version = /\"version\"\s{0,10}:\s{0,10}\"3\.7\.1\"/
$swiper_bundle_v3_7_1_main = /\"main\"\s{0,10}:\s{0,10}\"node\.js\"/
$swiper_bundle_v3_7_1_author = /\"author\"\s{0,10}:\s{0,10}\"\"/
condition:
(
all of ($ajaxapis_v1_0_0_*)
) or
(
all of ($package_icon_v6_0_5_*)
) or
(
all of ($swiper_bundle_v3_7_1_*)
)
}
You can find more examples of YARA rules in the official ReversingLabs GitHub repository.
All rules from the repository are already included in Spectra Assure products.
3. Enable the ruleโ
Save your changes to the My_Classification_Rule.yara
file.
After saving changes to the rule, synchronize the project to apply the rule to all packages in the project.
- Simplified input
- Extended input
rl-secure sync pkg:rl/my-project
rl-secure sync --purl=pkg:rl/my-project --rl-store=/home/armando/my-repository/
You can confirm the rule has been used during analysis by looking at the report.
Export the SAFE report (rl-html
) for a package version in the project:
- Simplified input
- Extended input
rl-secure report rl-html pkg:rl/my-project/my-package@version
rl-secure report rl-html --purl=pkg:rl/my-project/my-package@version --rl-store=/home/armando/my-repository/ --output-path=/home/armando/secure-software-reports
Open the SAFE report in your web browser and navigate to the Policies page from the sidebar on the left-hand side.
Filter the page by policy category (select YARA Policies in the filter dropdown) to check if the rule you created is correctly listed.