Framework definitions that allow to build a custom SIEM. Code you own SIEM like you code your own web page.
I have seen many times updates in rules that break things or inneficient regular expressions that slow down the entire SIEM. With the aproach of uSIEM, all changes to the SIEM are traced and can be reversed using a version control system like GIT. Also you can have a team designing rules with SIGMA in a different repository and join the SIEM code and the rules using CI/CD tools like Jenkins that can run a integration test to check if the new changes breaks the system and then deploy the new version.
Some benchmarks (single-thread): | Log Source | Events/second | |-------------------|-------------------| |Suricata(JSON) |261780 | |OpnSense Firewall |750127 |
|---------------|
|----> | GatheringNode |------------------>|
| |---------------| |
| |
|---------| |------------------| |--------------| |
|InputNode| ----> | EnchancementNode | ----> | IndexingNode | |
|---------| |------------------| | |--------------| |
| |
| |----------| |--------------| |----------|
--> | RuleNode | ----> | AlertingNode | ----> | SoarNode |
| |----------| |--------------| |----------|
| |
| |
| |------------| |
--->|BehavourNode| ---------->|
|------------|
It ingests logs and process them. We can support elasticsearch type (Like API-REST) or syslog.
It adds information about the IP, if its in a blocklist, if its a AmazonWebServices/Azure/GoogleCloud IP, if the IP has never been seen it then it contacts the GatheringNode to find information about that IP. It adds the tag "neverseenip" in that cases. It uses datasets to access information in a non-blocking form. See https://1drv.ms/p/s!AvHbai5ZA14wjV9J4rbBlSWyIw0t?e=AgBWNf
Consults feeds or databases like AbuseIP/Virus total to know if the IP is malicios or not, the same with domains and Hashes.
Send logs to index in the database (elasticsearch) and queries them when asked.
Set conditions for logs and fires alerts when the conditions matches. If a Rule is battletested, then we can tell the SOAR node to do things. https://github.com/Neo23x0/sigma/tree/master/rules/windows
Creates alerts and sents them to another SIEM or stores them locally to use the native UI. Uses templates for the alerts.
Do actions automatically, like blocking IPs, domains... OpnSense supports blocking IPs with a simple API-REST call, the same for Cortex XDR. For PaloAlto: https://panos.pan.dev/docs/apis/panosdagqs Work in progress: define a custom trait that can be used with a common component as to simplify design. So we only need to import a library that defines the actions to be done (like an API call) and works in any custom SOAR component.
Apply multiple simple rules (like DarkTrace) does to calculate the threat score associated with the event. That score is added to the total score of a user in a period of time (Slicing Window). It will be implemented in redis wit a ScoreSet of users-scores in periods of 15 min with each removed after 24 hours by default.