From 08892e64716e2def48d505eb3155191ac2266b91 Mon Sep 17 00:00:00 2001 From: wagga40 <6437862+wagga40@users.noreply.github.com> Date: Fri, 29 Mar 2024 18:28:23 +0100 Subject: [PATCH] =?UTF-8?q?Force=20encoding=20for=20Windows=20=F0=9F=A4=AE?= =?UTF-8?q?=20Correct=20Typo=20in=20code=20Update=20docs?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/Advanced.md | 27 +++++++++++---------------- docs/Zircolite_manual.pdf | Bin 680000 -> 679391 bytes zircolite.py | 10 +++++----- zircolite_dev.py | 10 +++++----- 4 files changed, 21 insertions(+), 26 deletions(-) diff --git a/docs/Advanced.md b/docs/Advanced.md index e2f9935..eddfd04 100755 --- a/docs/Advanced.md +++ b/docs/Advanced.md @@ -128,32 +128,27 @@ Examples : Some rules can be noisy or slow on specific datasets (check [here](https://github.com/wagga40/Zircolite/tree/master/rules/README.md)) so it is possible to skip them by using the `-R` or `--rulefilter` argument. This argument can be used multiple times. -The filter will apply on the rule title. Since there is a CRC32 in the rule title it is easier to use it. For example, to skip execution of the rule "Suspicious Eventlog Clear or Configuration Using Wevtutil - BFFA7F72" : +The filter will apply on the rule title. To avoid unexpected side-effect **comparison is case-sensitive**. For example, if you do not want to use all MSHTA related rules : ```shell -python3 zircolite.py --evtx logs/ --ruleset rules/rules_windows_sysmon.json -R BFFA7F72 -``` - -You can also specify a string, to avoid unexpected side-effect **comparison is case-sensitive**. For example, if you do not want to use all MSHTA related rules and skip the execution of the rule "Suspicious Eventlog Clear or Configuration Using Wevtutil - BFFA7F72": - -```shell -python3 zircolite.py --evtx logs/ --ruleset rules/rules_windows_sysmon.json \ - -R BFFA7F72 -R MSHTA +python3 zircolite.py --evtx logs/ \ + --ruleset rules/rules_windows_sysmon.json \ + -R MSHTA ``` -:information_source: As of version 2.2.0 of Zircolite, since the rulesets are directly generated from the official `sigmac` tool there is no more CRC32 in the rule title. Rule filtering is still available but you have to rely on other criteria. ### Limit the number of detected events -Sometimes, SIGMA rules can be very noisy (and generate a lot of false positives) but you still want to keep them in your rulesets. It is possible to filter rules that returns too mich detected events with the option `--limit `. Please note that when using this option, the rules are not skipped the results are just ignored. But this is useful when forwarding events to Splunk. +Sometimes, SIGMA rules can be very noisy (and generate a lot of false positives) but you still want to keep them in your rulesets. It is possible to filter rules that returns too mich detected events with the option `--limit `. **Please note that when using this option, the rules are not skipped the results are just ignored** but this is useful when forwarding events to Splunk. ## Forwarding detected events -Zircolite provide 2 ways to forward events to a collector : +Zircolite provide multiple ways to forward events to a collector : -- the HTTP forwarder : this is a very simple forwarder and pretty much a "toy" example and should be used when you have nothing else. An **example** server called is available in the [tools](../tools/zircolite_server/) directory -- the Splunk HEC Forwarder : it allows to forward all detected events to a Splunk instance using **HTTP Event Collector**. +- the HTTP forwarder : this is a very simple forwarder and pretty much a **"toy"** example and should be used when you have nothing else. An **example** server called is available in the [tools](../tools/zircolite_server/) directory +- the Splunk HEC Forwarder : it allows to forward all detected events to a Splunk instance using **HTTP Event Collector** +- the ELK ES client : it allows to forward all detected events to an ELK instance -For now, the forwarders are not asynchronous so it can slow Zircolite execution. There are two modes to forward the events : +There are two modes to forward the events : - By default all events are forwarded after the detection process - The argument `--stream` allow to forward events during the detection process @@ -269,7 +264,7 @@ Then you just have to open `index.html` in your favorite browser and click on a * After Python 3.8 install, you will need Nuitka : `pip3 install nuitka` * In the root folder of Zircolite type : `python3 -m nuitka --onefile zircolite.py` -:warning: When packaging with PyInstaller some AV may not like your package. +:warning: When packaging with PyInstaller or Nuitka some AV may not like your package. ## Using With DFIR Orc diff --git a/docs/Zircolite_manual.pdf b/docs/Zircolite_manual.pdf index 3996ec2bc5e15c327e4b416481312fc7767d1e9d..b9abfb1812b4b4ec09fd3366d480a904f7849ec0 100644 GIT binary patch delta 28096 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 delta 28767 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 Ai~s-t diff --git a/zircolite.py b/zircolite.py index d32f1a0..43e082f 100755 --- a/zircolite.py +++ b/zircolite.py @@ -134,14 +134,14 @@ def __init__(self, logger=None, template=[], templateOutput=[], timeField=""): self.templateOutput = templateOutput self.timeField = timeField - def generateFromTemplate(self, templateFile, outpoutFilename, data): + def generateFromTemplate(self, templateFile, outputFilename, data): """Use Jinja2 to output data in a specific format""" try: tmpl = open(templateFile, "r", encoding="utf-8") template = Template(tmpl.read()) - with open(outpoutFilename, "a", encoding="utf-8") as tpl: + with open(outputFilename, "a", encoding="utf-8") as tpl: tpl.write(template.render(data=data, timeField=self.timeField)) except Exception as e: self.logger.error( @@ -1391,7 +1391,7 @@ def run(self, file): try: data = "" # We need to read the entire file to remove annoying newlines and fields with newlines (System.evtx Logs for example...) - with open(str(file), "r") as XMLFile: + with open(str(file), "r", encoding="utf-8") as XMLFile: data = ( XMLFile.read() .replace("\n", "") @@ -1637,7 +1637,7 @@ def __init__(self, logger=None, config=None, listPipelineOnly=False): def isYAML(self, filepath): """Test if the file is a YAML file""" if filepath.suffix == ".yml" or filepath.suffix == ".yaml": - with open(filepath, "r") as file: + with open(filepath, "r", encoding="utf-8") as file: content = file.read() try: yaml.safe_load(content) @@ -1648,7 +1648,7 @@ def isYAML(self, filepath): def isJSON(self, filepath): """Test if the file is a JSON file""" if filepath.suffix == ".json": - with open(filepath, "r") as file: + with open(filepath, "r", encoding="utf-8") as file: content = file.read() try: json.loads(content) diff --git a/zircolite_dev.py b/zircolite_dev.py index 4ba83d1..1669333 100755 --- a/zircolite_dev.py +++ b/zircolite_dev.py @@ -119,14 +119,14 @@ def __init__(self, logger=None, template=[], templateOutput=[], timeField=""): self.templateOutput = templateOutput self.timeField = timeField - def generateFromTemplate(self, templateFile, outpoutFilename, data): + def generateFromTemplate(self, templateFile, outputFilename, data): """ Use Jinja2 to output data in a specific format """ try: tmpl = open(templateFile, 'r', encoding='utf-8') template = Template(tmpl.read()) - with open(outpoutFilename, 'a', encoding='utf-8') as tpl: + with open(outputFilename, 'a', encoding='utf-8') as tpl: tpl.write(template.render(data=data, timeField=self.timeField)) except Exception as e: self.logger.error(f"{Fore.RED} [-] Template error, activate debug mode to check for errors{Fore.RESET}") @@ -1022,7 +1022,7 @@ def run(self, file): try: data = "" # We need to read the entire file to remove annoying newlines and fields with newlines (System.evtx Logs for example...) - with open(str(file), 'r') as XMLFile: + with open(str(file), 'r', encoding="utf-8") as XMLFile: data = XMLFile.read().replace("\n","").replace("","\n").replace("