From 9273861d554e5801d7f69da452ad54e774d4dc60 Mon Sep 17 00:00:00 2001 From: Tanaka Zakku <71482215+YamatoSecurity@users.noreply.github.com> Date: Sat, 6 Nov 2021 08:14:27 +0900 Subject: [PATCH] =?UTF-8?q?Readme=E3=81=AE=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README-English.md | 126 +++++++ README-Japanese.md | 125 +++++++ README.md | 84 +---- ...LEFILE.md => AboutRuleCreation-English.md} | 0 doc/AboutRuleCreation-Japanese.md | 315 ++++++++++++++++++ hayabusa-logo.png | Bin 0 -> 59392 bytes 6 files changed, 569 insertions(+), 81 deletions(-) create mode 100644 README-English.md create mode 100644 README-Japanese.md rename doc/{RULEFILE.md => AboutRuleCreation-English.md} (100%) create mode 100644 doc/AboutRuleCreation-Japanese.md create mode 100644 hayabusa-logo.png diff --git a/README-English.md b/README-English.md new file mode 100644 index 00000000..9ca30054 --- /dev/null +++ b/README-English.md @@ -0,0 +1,126 @@ +
+

+ + ![Hayabusa Logo](hayabusa-logo.png) + +

+
+ +# Hayabusa +Hayabusa is a very fast Windows event analyzer used for creating forensic timelines and performing threat hunting based on IoCs written in either hayabusa or SIGMA rules. It can be run live, offline, pushed out as agents to be run on endpoints in an enterprise after an incident or even periodically reporting back alerts on slack. + +# About Hayabusa +Hayabusa ("falcon" in Japanese) was written by the Yamato Security group in Japan. First inspired by the DeepblueCLI Windows event log analyzer, we started in 2020 porting it over to Rust for the RustyBlue project, then created SIGMA-like flexible signatures based in YAML, and then added a backend to SIGMA to support converting SIGMA rules into hayabusa rules. Supporting multi-threading, (to our knowledge) it is currently the fastest forensics timeline generator and threat hunting tool as well supports the most features in SIGMA. It can analyze multiple Windows event logs and consolidate the results into one timeline for easy analysis. It will output in CSV to be imported into tools like Timeline Explorer and Excel for analysis. + +# Screenshots +Add screenshots here. + +# Features +* Cross-platform support: Windows, Linux, macOS (Intel + ARM) +* Faster than a hayabusa falcon! +* English and Japanese support +* Multi-thread support +* Enterprise-wide threat hunting via alerts to Slack +* Creating event timelines for forensic investigations and incident response +* Threat hunting based on IoC signatures written in easy to read/create/edit YAML based hayabusa rules +* SIGMA support to convert SIGMA rules to hayabusa rules +* Event log statistics (Useful for getting a picture of what types of events there are and for tuning your log settings) + +# Downloads +You can download pre-compiled binaries for the Windows, Linux and macOS at [Releases.](https://github.com/Yamato-Security/hayabusa/releases) + +# Usage +## Command line options +```` +USAGE: + hayabusa.exe [FLAGS] [OPTIONS] + +FLAGS: + --credits Prints a list of contributors + -h, --help Prints help information + --rfc-2822 Output date and time in RFC 2822 format. Example: Mon, 07 Aug 2006 12:34:56 -0600 + --slack Sends alerts to Slack + -s, --statistics Prints statistics for event logs + -u, --utc Output time in UTC format (default: local time) + -V, --version Prints version information + +OPTIONS: + --csv-timeline Save timeline to CSV file + -d, --directory Event log files directory + -f, --filepath Event file path + --human-readable-timeline Human readable timeline + -l, --lang Output language + -t, --threadnum Number of threads (Default is the number of CPU cores) +```` + +## Usage examples +* Run hayabusa against one Windows event log file: +```` +hayabusa.exe --filepath=eventlog.evtx +```` + +* Run hayabusa against a directory with multiple Windows event log files: +```` +hayabusa.exe --directory=.\evtx +```` + +* Export to a CSV file: +```` +hayabusa.exe --directory=.\evtx --csv-timeline results.csv +```` + +# Hayabusa rules +Hayabusa attack detection rules are written in a SIGMA-like YAML format. + +Please read [AboutRuleCreation-English.md](./doc/AboutRuleCreation-English.md) to understand about how to create rules. + +All of the rules are in the `rules` folder. +You can check out the current rules to use as a template in creating new ones. + +# Compiling from source +If you have rust installed, you can compile from source with the following command. + +```` +cargo build --release +```` + +# How to send alerts to a Slack channel + +Slackチャンネルへの通知にはSlackでのWEBHOOKURLの設定と実行マシンの環境変数(WEBHOOKURL、CHANNEL)への追加が必要です。 + +1. Add an "Incoming Webhook" to the slack workspace you want to send alerts to. +2. 「チャンネルへの投稿」で投稿するチャンネルを選択し 「Incoming Webhookインテグレーションの追加」をクリックします。 +3. 遷移後のぺージの「Webhook URL」の内容(https:hooks.slack.com/services/xxx...)を環境変数の`WEBHOOK_URL` に代入してください。 +4. 投入するchannelを#付きで環境変数の`CHANNEL`に代入してください。 +5. 以下のコマンドで実行をするとCHANNELで指定したチャンネルに検知情報の通知が送付されます。 + +```` +hayabusa.exe --slack +```` + +# Other Windows event log analyzers and related projects +There is no "one tool to rule them all" and we have found that each have their own merits so we recommend checking out these other great tools and projects and see which ones you like. + +- [APT-Hunter](https://github.com/ahmedkhlief/APT-Hunter) - Attack detection tool written in Python. +- [Chainsaw](https://github.com/countercept/chainsaw) - A similar SIGMA based attack detection tool written in Rust. +- [DeepBlueCLI](https://github.com/sans-blue-team/DeepBlueCLI) - Attack detection tool written in Powershell. +- [EvtxToElk](https://www.dragos.com/blog/industry-news/evtxtoelk-a-python-module-to-load-windows-event-logs-into-elasticsearch/) - Python tool to send Evtx data to Elastic Stack. +- [EVTX ATTACK Samples](https://github.com/sbousseaden/EVTX-ATTACK-SAMPLES) - EVTX attack sample event log files by [SBousseaden](https://twitter.com/SBousseaden). +- [EVTX-to-MITRE-Attack](https://github.com/mdecrevoisier/EVTX-to-MITRE-Attack) - Another great repository of EVTX attack sample logs mapped to ATT&CK. +- [EVTX parser](https://github.com/omerbenamram/evtx) - the Rust library we used written by [@OBenamram](https://twitter.com/obenamram). +- [LogonTracer](https://github.com/JPCERTCC/LogonTracer) - A graphical interface to visualize logons to detect lateral movement by [JPCERTCC](https://twitter.com/jpcert_en). +- [RustyBlue](https://github.com/Yamato-Security/RustyBlue) - Rust port of DeepBlueCLI by [Eric Conrad](https://twitter.com/eric_conrad). +- [SIGMA](https://github.com/SigmaHQ/sigma) - Generic SIEM rules. +- [so-import-evtx](https://docs.securityonion.net/en/2.3/so-import-evtx.html) - Import evtx files into Security Onion. +- [Timeline Explorer](https://ericzimmerman.github.io/#!index.md) - The best CSV timeline analyzer by [Eric Zimmerman](https://twitter.com/ericrzimmerman). +- [Zircolite](https://github.com/wagga40/Zircolite) - SIGMA based attack detection tool written in Python. + +## License + +Hayabusa is released under GPLv3 and all rules are release under the Detection Rule License (DRL) 1.1 + +## Contributing + +We would love any form of contributing. Pull requests and rule creation are the best but feature requests, notifying us of bugs, etc... are also very welcome. + +At the least, if you like our tool then please give us a star on Github and show your support! diff --git a/README-Japanese.md b/README-Japanese.md new file mode 100644 index 00000000..286748a6 --- /dev/null +++ b/README-Japanese.md @@ -0,0 +1,125 @@ +
+

+ + ![Hayabusa Logo](hayabusa-logo.png) +

+
+ +# Hayabusa +Hayabusaは非常に高速なWindowsイベントアナライザで、フォレンジックタイムラインの作成や、HayabusaまたはSIGMAルールで記述されたIoCに基づいた脅威のハンティングを行うために使用されます。ライブでもオフラインでも実行でき、インシデント後に企業内のエンドポイントで実行されるエージェントとしてプッシュアウトしたり、slackで定期的にアラートを報告することもできます。 + +# Hayabusaについて +Hayabusaは日本のYamato Securityグループによって書かれました。最初にDeepblueCLI Windowsイベントログアナライザに触発され、2020年にRustyBlueプロジェクトのためにRustに移植することから始まり、SIGMAのようなYAMLベースの柔軟なシグネチャを作成し、SIGMAのルールをhayabusaのルールに変換することをサポートするためにSIGMAにバックエンドを追加しました。マルチスレッドをサポートし、(我々の知る限り)現在最速のフォレンジックタイムラインジェネレータと脅威探索ツールであり、SIGMAの最も多くの機能をサポートしています。複数のWindowsイベントログを分析し、分析しやすいように結果を一つのタイムラインに集約することができます。また、CSV形式で出力されるので、Timeline ExplorerやExcelなどのツールに取り込んで分析することができます。 + +# スクリーンショット +screenshotを入れる + +# 機能 +* 複数のOSに対応: Windows, Linux, macOS (Intel + ARM) +* ハヤブサよりも速い! +* 英語と日本語に対応 +* マルチスレッド +* エンタプライズ向けのインシデント対応やヘルスチェックのためのSlackへのアラート通知 +* フォレンジック調査用のイベントタイムライン作成 +* 作成・編集しやすいYAML形式のhayabusaルールでIoCシグネチャーを作成し、攻撃検知(スレットハンティング)を行う +* SIGMAルールをhayabusaルールに自動変換 +* イベントログの集計(どのようなイベントがあるかを把握するためやログ設定のチューニングに便利) + +# ダウンロード +[Releases](https://github.com/Yamato-Security/hayabusa/releases)からコンパイル済みの実行ファイルをダウンロードできます。 + +# 使い方 +## コマンドラインオプション +```` +USAGE: + hayabusa.exe [FLAGS] [OPTIONS] + +FLAGS: + --credits コントリビューターの一覧表示 + -h, --help ヘルプ画面の表示 + --rfc-2822 日付と時間をRFC 2822形式で表示する。例: Mon, 07 Aug 2006 12:34:56 -0600 + --slack Slackへの通知 + -s, --statistics イベントログの集計 + -u, --utc 時間をUTCで出力する(デフォルトはローカル時間) + -V, --version バージョン情報を出力する + +OPTIONS: + --csv-timeline タイムラインをCSVに保存する + -d, --directory イベントログファイルが入っているディレクトリ + -f, --filepath イベントファイルのパス + --human-readable-timeline 読みやすいタイミングを出力 + -l, --lang 出力する言語 + -t, --threadnum スレッド数(デフォルトではCPUコア数) +```` + +## 使い方の例 +* Windowsイベントログを一つ指定する: +```` +hayabusa.exe --filepath=eventlog.evtx +```` + +* Windowsイベントログが格納されているフォルダを指定する: +```` +hayabusa.exe --directory=.\evtx +```` + +* 結果をCSVファイルに出力する: +```` +hayabusa.exe --directory=.\evtx --csv-timeline kekka.csv +```` + +# ルールファイル +HayabusaではWindowsEventログを検知するルールをYAML形式で定義します。 + +ルールの記載方法については[AboutRuleCreation-Japanese.md](./doc/AboutRuleCreation-Japanese.md)を参照してください。 + +ルールファイルはrulesフォルダ内に設置します。 +rulesフォルダには組み込みルールファイルも設置されていますので、参考にしてください。 + +# ソースコードからのコンパイル +下記のコマンドでビルドできます。 + +```` +cargo build --release +```` + +# Slackチャンネルへの通知 + +Slackチャンネルへの通知にはSlackでのWEBHOOKURLの設定と実行マシンの環境変数(WEBHOOKURL、CHANNEL)への追加が必要です。 + +1. 通知先のSlackのワークスペースに対して「Incoming Webhook」をSlackに追加してください。 +2. 「チャンネルへの投稿」で投稿するチャンネルを選択し 「Incoming Webhookインテグレーションの追加」をクリックします。 +3. 遷移後のぺージの「Webhook URL」の内容(https:hooks.slack.com/services/xxx...)を環境変数の`WEBHOOK_URL` に代入してください。 +4. 投入するchannelを#付きで環境変数の`CHANNEL`に代入してください。 +5. 以下のコマンドで実行をするとCHANNELで指定したチャンネルに検知情報の通知が送付されます。 + +```` +hayabusa.exe --slack +```` + +# 関連するWindowsイベントログのスレットハンティングプロジェクト +まだ完璧なWindowsイベントログ解析ツールは存在していなくて、それぞれ長所短所があるので、以下のツールとプロジェクトもチェックして、好きなツールを使ってくださいね! + +- [APT-Hunter](https://github.com/ahmedkhlief/APT-Hunter) - Pythonで書かれた攻撃検知ツール。 +- [Chainsaw](https://github.com/countercept/chainsaw) - 他のRustで書かれたSIGMAベースの攻撃検知ツール。 +- [DeepBlueCLI](https://github.com/sans-blue-team/DeepBlueCLI) Powershellで書かれた攻撃検知ツール。 +- [EvtxToElk](https://www.dragos.com/blog/industry-news/evtxtoelk-a-python-module-to-load-windows-event-logs-into-elasticsearch/) - EvtxデータをElastic Stackにインポートするツール。 +- [EVTX ATTACK Samples](https://github.com/sbousseaden/EVTX-ATTACK-SAMPLES) - 攻撃の痕跡が入っているEVTXサンプルファイルのリポジトリ。作者:[SBousseaden](https://twitter.com/SBousseaden)。 +- [EVTX-to-MITRE-Attack](https://github.com/mdecrevoisier/EVTX-to-MITRE-Attack) - もう一つの素晴らしい攻撃の痕跡が入っているEVTXサンプルファイルのリポジトリ。攻撃はMITE ATT&CKにマッピングされている。 +- [EVTXパーサ](https://github.com/omerbenamram/evtx) - Hayabusaが使っているRustライブラリ。作者:[@OBenamram](https://twitter.com/obenamram)。 +- [LogonTracer](https://github.com/JPCERTCC/LogonTracer) - 横展開を検知するためのEVTX可視化ツール。作者:[JPCERTCC](https://twitter.com/jpcert)。 +- [RustyBlue](https://github.com/Yamato-Security/RustyBlue) - DeepBlueCLIをRustに書き換えたツール。 +- [SIGMA](SIGMA: https://github.com/SigmaHQ/sigma) - SIEM等のジェネリックな攻撃検知ルール。 +- [so-import-evtx](https://docs.securityonion.net/en/2.3/so-import-evtx.html) - evtxファイルをSecurity Onionにインポートするコマンド。 +- [Timeline Explorer](https://ericzimmerman.github.io/#!index.md) - CSV形式のタイムラインの最高な解析ツール。作者:[Eric Zimmerman](https://twitter.com/ericrzimmerman)。 +- [Zircolite](https://github.com/wagga40/Zircolite) - Pythonで書かれたSIGMAベースの攻撃検知ツール。 + +## ライセンス + +HayabusaのライセンスはGPLv3で、ルールはすべてDetection Rule License (DRL) 1.1でリリースしています。 + +## 貢献 + +コントリビューターは大募集中です!プルリクエストやルール作成が一番ですが、機能リクエストやバグのお知らせなども大歓迎です。 + +hayabusaを気に入って頂けたら、Githubで星をつけて応援してくださいね! \ No newline at end of file diff --git a/README.md b/README.md index c1227020..f05c1ca8 100644 --- a/README.md +++ b/README.md @@ -1,83 +1,5 @@ -# Lagotto -Aiming to be the world's greatest Windows event log analysis tool! +Hayabusa Readme: -世界一のWindowsイベントログ解析ツールを目指しています! +[English](README-English.md) - -# Platforms -Lagottoは下記のプラットフォーム上で実行できます。 -* Windows -* Linux -* macOS - -# Downloads -[Releases](https://github.com/Yamato-Security/YamatoEventAnalyzer/releases)からコンパイル済みの実行ファイルをダウンロードできます。 - -# Usage -## Commnad line option -```` -USAGE: - lagotto.exe [FLAGS] [OPTIONS] - -FLAGS: - --credits Prints credits - -h, --help Prints help information - --rfc-2822 Output date and time in RFC 2822 format. Example: Mon, 07 Aug 2006 12:34:56 -0600 - --slack Slack notification - -s, --statistics Prints statistics for event logs - -u, --utc Output time in UTC format(default: local time) - -V, --version Prints version information - -OPTIONS: - --csv-timeline Csv output timeline - -d, --directory Event log files directory - -f, --filepath Event file path - --human-readable-timeline Human readable timeline - -l, --lang Output language - -t, --threadnum Thread number -```` - -## Usage examples -* Windowsイベントログを一つ指定する -```` -lagotto.exe --filepath=eventlog.evtx -```` - -* Windowsイベントログが格納されているフォルダを指定する -```` -lagotto.exe --directory=.\evtx -```` - -* 結果をCSVファイルに出力する。 -```` -lagotto.exe --directory=.\evtx --csv-timeline lagotto.csv -```` - -# Rule files -LagottoではWindowsEventログを検知するルールをYAML形式で定義します。 - -ルールの記載方法については[RULEFILE.md](./doc/RULEFILE.md)を参照してください。 - -ルールファイルはrulesフォルダ内に設置します。 -rulesフォルダには組み込みルールファイルも設置されていますので、参考にしてください。 - -# How to compile from source files -下記のコマンドでビルドできます。 - -```` -cargo build -```` - -# How to notify to Slack channel - -Slackチャンネルへの通知にはSlackでのWEBHOOKURLの設定と実行マシンの環境変数(WEBHOOKURL、CHANNEL)への追加が必要です。 - -1. 通知先のSlackのワークスペースに対して「Incoming Webhook」をSlackに追加してください。 -2. 「チャンネルへの投稿」で投稿するチャンネルを選択し 「Incoming Webhookインテグレーションの追加」をクリックします。 -3. 遷移後のぺージの「Webhook URL」の内容(https:hooks.slack.com/services/xxx...)を環境変数の`WEBHOOK_URL` に代入してください。 -4. 投入するchannelを#付きで環境変数の`CHANNEL`に代入してください。 -5. 以下のコマンドで実行をするとCHANNELで指定したチャンネルに検知情報の通知が送付されます。 - -```` -lagotto.exe --slack -```` +[Japanese](README-Japanese.md) \ No newline at end of file diff --git a/doc/RULEFILE.md b/doc/AboutRuleCreation-English.md similarity index 100% rename from doc/RULEFILE.md rename to doc/AboutRuleCreation-English.md diff --git a/doc/AboutRuleCreation-Japanese.md b/doc/AboutRuleCreation-Japanese.md new file mode 100644 index 00000000..a341be36 --- /dev/null +++ b/doc/AboutRuleCreation-Japanese.md @@ -0,0 +1,315 @@ +# ルールファイル +LagottoはWindowsEventログの検知ルールをYAML形式のファイルに記載します。 +単なる文字列一致だけでなく、正規表現やANDやOR等の条件を組み合わせることができ、複雑な検知ルールも表現できるようになっています。 +ここではその検知ルールの書き方について説明します。 + +# ルールファイルのフォーマット +ルールファイルのフォーマットは下記の通りです。 + +`````` +title: PowerShell Execution Pipeline +description: This rule detect powershell execution pipeline. +author: Zach Mathis +detection: + selection: + Event.System.EventID: 7040 + Event.System.Channel: System +falsepositives: + - unknown +level: medium +output: 'command=%CommandLine%' +creation_date: 2020/11/8 +updated_date: 2020/11/8 +`````` + +* title [required]: ルールファイルのタイトルを入力します。 +* description [optional]: ルールファイルの説明を入力します。 +* author [optional]: ルールファイルの作者を入力します。 +* detection [required]: 検知ルールを入力します。 +* falsepositives [optional]: 誤検知に関する情報を入力します。 +* level [optional]: リスクレベルを入力します。指定する値は`informational`,`low`,`medium`,`high`,`critical`のいづれかです。 +* output [required]: イベントログが検知した場合に表示されるメッセージを入力します。 +* creation_date [optional]: ルールファイルの作成日を入力します。 +* updated_date [optional]: ルールファイルの更新日を入力します。 + +# detectionの記法について +## detectionの基本 +まず、detectionの基本的な書き方について説明します。 + +### AND条件とOR条件の書き方 +AND条件を記載する場合はYAMLのハッシュを用いて記載します。 +下記のようにdetectionを記載すると、以下`両方の条件を満たす`イベントログを検知します。 +* EventIDが`7040`に完全一致する +* Channelが`System`に完全一致する + +`````` +detection: + selection: + Event.System.EventID: 7040 + Event.System.Channel: System +`````` + +OR条件を記載する場合は配列を利用します。 +下記のようにdetectionを記載すると、以下`いずれの条件を満たす`イベントログを検知します。 +* EventIDが`7040`に完全一致する +* Channelが`System`に完全一致する + +`````` +detection: + selection: + - Event.System.EventID: 7040 + - Event.System.Channel: System +`````` + +また、下記のように記載することもできます。 +この場合、以下`両方の条件を満たす`イベントログを検知します。 +* EventIDが`7040`又は`7041`に完全一致する +* Channelが`System`に完全一致する + +`````` +detection: + selection: + Event.System.EventID: + - 7040 + - 7041 + Event.System.Channel: System +`````` + +### eventkey +WindowsイベントログをXML形式で一部抜粋で出力すると、下記のようになります。ルールファイルの例に含まれる`Event.System.Channel`は、XMLの`System`を指しています。今回の例のように、XML形式のWindowsイベントログについて、入れ子になったXMLのタグに含まれる値をルールの条件に指定する場合、`.`でつなげて指定します。ルールファイルでは、この`.`でつなげた文字列をeventkeyと呼んでいます。 + +`````` + + + 7040 + System + + + Background Intelligent Transfer Service + 自動的な開始 + + +`````` + +### eventkeyのalias +`.`でつなげたeventkeyは長い文字列になってしまうことがあるため、Lagottoではeventkeyに対するエイリアスを使用できます。エイリアスは`config\eventkey_alias.txt`というファイルに定義されています。ファイルはCSV形式であり、aliasとevent_keyという列から構成されています。aliasにはエイリアスを定義し、event_keyには`.`でつなげたeventkeyを指定します。このエイリアスを用いると、最初に例に挙げたdetectionは以下のように書き換えることができます。 + +`````` +detection: + selection: + EventID: 7040 + Channel: System +`````` +### XMLの属性(attribute)をルールの条件にする方法 +WindowsEventログをXML形式で出力すると、XMLの属性に値が設定されている場合もあります。下記の例だと、ProviderタグのNameがXMLの属性です。 + +```````````` + + + + 4672 + 607469 + Security + + + +```````````` + +XMLの属性をeventkeyで指定するには、{eventkey}_attributes.{attribute_name}という形式で指定します。例えば、ProviderタグのName属性をルールファイルに指定する場合、下記のようになります。 + +`````` +detection: + selection: + Channel: Security + EventID: 4672 + Event.System.Provider_attributes.Name: 'Microsoft-Windows-Security-Auditing' +`````` + +### EventData +WindowsEventログをXML形式で出力すると、EventDataというタグが使用されている場合があります。(EventDataタグは様々なEventIDのログで頻繁に利用されます。)このEventDataにネストされたタグの名前は全て`Data`となっており、ここまで説明してきたeventkeyではSubjectUserSidやSubjectUserNameを区別することができません。 +```````````` + + + 5379 + + 607469 + Security + + + + S-1-1-11-1111111111-111111111-1111111111-1111 + lagotto + DESKTOP-LAGOTTO + 0x11111111 + + +```````````` + +この問題に対応するため、eventkeyで`Data`の代わりに`Name`に指定されている値をeventkeyに指定できるようになっています。例えば、EventData内のSubjectUserNameとSubjectDomainNameをルールの条件とする場合、下記のように記載します。 + +`````` +detection: + selection: + EventID: 7040 + Channel: System + Event.EventData.SubjectUserName: lagotto + Event.EventData.SubjectDomainName: DESKTOP-LAGOTTO +`````` + +### EventDataの特殊なパターン +EventDataというタグにネストされたタグの中には、Name属性が存在しないタグもあります。 +`````` + + + 5379 + Security + + + + Available + None + NewEngineState=Available PreviousEngineState=None SequenceNumber=9 HostName=ConsoleHost HostVersion=2.0 HostId=5cbb33bf-acf7-47cc-9242-141cd0ba9f0c EngineVersion=2.0 RunspaceId=c6e94dca-0daf-418c-860a-f751a9f2cbe1 PipelineId= CommandName= CommandType= ScriptName= CommandPath= CommandLine= + + +`````` + +上記のようなイベントログを検知する場合、`EventData`というeventkeyを指定します。この場合、EventDataタグにネストされているName属性の指定されてないタグのうち、いずれか一つでも一致するタグがあれば、条件に一致したものとして処理されます。 +`````` +detection: + selection: + Channel: Security + EventID: 5379 + EventData: None +`````` + +## パイプ +eventkeyにはパイプを指定することができます。ここまで説明した書き方では完全一致しか表現できませんでしたが、パイプを使うことでより柔軟な検知ルールを記載できるようになります。下記の例ではCommandLineの値が`yamato.*lagotto`という正規表現にマッチする場合、条件に一致したものとして処理されます。 + +`````` +detection: + selection: + EventID: 7040 + Channel: System + CommandLine|re: yamato.*lagotto +`````` + +使用できるパイプの一覧です。なお、v1.0.0時点では、複数のパイプをつなげて使用することはできません。 +* startswith: 先頭一致 +* endswith: 後方一致 +* contains: 部分一致 +* re: 正規表現(正規表現の処理にはregexクレートを使用しています。正規表現の詳細記法についてはhttps://docs.rs/regex/1.5.4/regex/を参照してください。) + +## ワイルドカード +eventkeyに対応する値にはワイルドカードを指定することができます。下記の例ではCommandLineがlagottoという文字列で始まっていれば、条件に一致したものとして処理されます。基本的にはsigmaルールのwildcardと同じ仕様になっています。 + +`````` +detection: + selection: + EventID: 7040 + Channel: System + CommandLine: lagotto* +`````` + +使用できるワイルドカードの一覧です。 +* `*`: 任意の0文字以上の文字列にマッチします。(内部的には`.*`という正規表現に変換されます。) +* `?`: 任意の1文字にマッチします。(内部的には`.`という正規表現に変換されます。) + +ワイルドカードを使用する場合、下記のルールに則って解釈されます。 +* ワイルドカード(`*`と`?`)をエスケープするにはバックスラッシュ(`/`)を使用します。 +* ワイルドカードの直前に文字としてのバックスラッシュ(`/`)を使用する場合、`\\*`又は`\\?`と記載してください。 +* バックスラッシュを単体で使う分にはエスケープ不要です。 + +## eventkeyにネストできるキーワード +eventkeyには特定のキーワードをネストさせることができます。下記の例ではCommandLineの値が`aa*bb`というワイルドカードにマッチした上で文字列長が10以上である場合、条件に一致したものと処理されます。 + +`````` +detection: + selection: + EventID: 7040 + Channel: System + CommandLine: + value: aa*bb + min_length: 10 +`````` + +現状では下記のキーワードを指定できます。 +* value: 文字列による一致(ワイルドカードやパイプを指定することもできます) +* min_length: 指定した文字数以上である場合、条件に一致したものとして処理されます。 +* regexes: 指定したファイルに記載された正規表現のリストにひとつでも一致すれば、`条件に一致した`ものとして処理されます。 +* whitelist: 指定したファイルに記載された正規表現のリストにひとつでも一致すれば、`条件に一致していない`ものとして処理されます。 + +### regexes.txtとwhitelist.txt +lagottoではregexesやwhitelistを使用した組み込みのルールを用意しており、それらのルールはregexes.txtとwhitelist.txtを参照しています。regexes.txtとwhitelist.txtを書き換えることで、参照する全てのルールの挙動を一度に変更することが可能です。 + +また、regexesやwhitelistに指定するファイルは、ユーザーが独自に作成することも可能です。作成する場合、regexes.txtとwhitelist.txtを参考にしてください。 + +## condition +これまでの記法を用いると、AND条件やOR条件を表現することができますが、ANDやOR等が複雑に入り組んだ条件を定義することは難しい場合があります。その場合、conditionというキーワードを使用することで、複雑な条件式を定義することができます。 + +`````` +detection: + selection_1: + EventID: 7040 + selection_2: + EventID: 7041 + selection_3: + Channel: System + selection_4: + CommandLine|contains: lsass.exe + selection_5: + CommandLine|contains: services.exe + selection_6: + ParentProcessName|contains: wininit.exe + + condition: ( selection_1 or selection_2 ) and selection_3 and ( selection_4 or selection_5 ) and ( not selection_6 ) +`````` + +conditionには以下のキーワードを使用することができます。 +* {expression1} and {expression2}: {expression1}と{expression2}のAND条件を表します。 +* {expression1} or {expression2}: {expression1}と{expression2}のOR条件を表します。 +* not {expression}: {expression}の条件式の真偽を逆転させます。 +* ( {expression} ) : {expression}の条件式を優先して評価します。数学等で現れる括弧と同じです。 + +なお、上記の例では、条件式をグルーピングするためにselection_1やselection_2といった名前を使用していますが、selectionというprefixを付ける必要はなく、ユーザーが任意の名前を定義できます。ただし、使用可能な文字は`\w`という正規表現にマッチする文字のみです。 + +## aggregation condition +上記で説明したconditionには、andやor条件だけでなく、検知したイベントログを集計するような機能も実装されています。この機能をaggregation conditionと呼んでおり、conditionの後にパイプでつなげて指定します。下記の例では、DestinationIpの値が3種類以上あるかどうかをSubjectUserName毎に判定する条件式になります。 + +`````` +detection: + selection: + EventID: 7040 + Channel: System + condition: selection | count(DestinationIp) by SubjectUserName >= 3 +`````` + +aggregation conditionは下記の形式で定義できます。なお、{number}には数値を指定します。 +* `count() {operator} {number}`: conditionのパイプ以前の条件に一致したログについて、一致したログ数が{operator}と{number}で指定した条件式を満たす場合に、条件に一致したものとして処理されます。 + +![](count1.png) + +* `count() by {eventkey_2} {operator} {number}`: conditionのパイプ以前の条件に一致したログを{eventkey_2}毎にグルーピングし、グルーピング毎に一致したログ数が{operator}と{number}で指定した条件式を満たす場合に、条件に一致したものとして処理されます。 + +![](count2.png) + +* `count({eventkey}) {operator} {number}`: conditionのパイプ以前の条件に一致したログについて、{eventkey}の値が何種類存在するか数えます。その数が{operator}と{number}で指定した条件式を満たす場合に、条件に一致したものとして処理されます。 + +![](count3.png) + +* `count({eventkey_1}) by {eventkey_2} {operator} {number}`: conditionのパイプ以前の条件に一致したログを{eventkey_2}毎にグルーピングし、そのグループ毎に{eventkey_1}の値が何種類存在するか数えます。そのグルーピング毎に数えた値が{operator}と{number}で指定した条件式を満たす場合に、条件に一致したものとして処理されます。 + +![](count4.png) + +また、上記のoperatorには下記を指定できます。 +* `==`: 指定された値と等しい場合、条件に一致したものと処理されます。 +* `>=`: 指定された値以上である場合、条件に一致したものと処理されます。 +* `>`: 指定された値より大きい場合、条件に一致したものと処理されます。 +* `<=`: 指定された値以下である場合、条件に一致したものと処理されます。 +* `<`: 指定された値より小さい場合、条件に一致したものと処理されます。 + +# outputの記法 +detectionの条件に一致した場合に、出力されるメッセージを指定できます。固定の文字列が出力できる他、eventkeyを%で囲むことにより、検知したログの値を表示することも可能です。下記の例では検知した際のメッセージにScriptBlockTextというeventkeyの値を使用しています。 + +`````` +output: 'command=%ScriptBlockText%' +`````` \ No newline at end of file diff --git a/hayabusa-logo.png b/hayabusa-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..1b58bd4192df4eb33c0e16d5567654c2c45da157 GIT binary patch literal 59392 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%0D4wbEWQYq&wZ`=`BMz~S&ooG+)&MA+@P z59^gf8jTmJV;&B0Y@kx67IZn=kukq37sIgBk5x3A!PULba+2uGFP(x)Iealk2U|YT zzP+y#bQ5aH>F^vC?v-gv61)tz#0(TaUe1=S2xRleVGHeLSbZ6c$s09^#7O|Ql>Br^cHmhc8#4pu(SJ$hEZYqIt zc&feY@x;S7X=EawQ{5k&W46`1S_T~ zON6h!HuHHS0HobKPrUFsoW9Nv9t7z3V?LYuvF~|(3=lZgr5tf7|ECXx3}Wm=XMNFn zK^|R1t@>gHde7H2K&GqKJf$A{g0Xb7EJ9iGX%%_qYlhAO9_9WTsJjP0Ob0E$zWo&37la!iaT$ca5$!>@d^`*;#?vqa?vTr(rvd*W{!4#po0 zc!f)V_QR})Nbh&%-hhThl7{&H9X)0@GDp?rl*dkAUfme)+8}&50h+aSb{j(Trn7CU zGx+fs-C@BJBIC=eIb!DP3gZ$k*`u6NVy^eBw){kfw`Xx+ zh}ANV(Hubi`@l^7ns#g{1|W!Di&%4?IP%v+Ckfs#vNP7x=feUpOwHl_jM0?PlBRjh zSK1ix5&P0bEx$hb;fm6cRzrQF{&et#%*(laN}t8ioIdYD8ki_C)1w#S*I5@6n{Isi zHI6Ttx|?-cn+qk<+wawY|JBhj*xt>M@Y0={V6#s>cMvAFS6t5!4mMe*VfGXrWmzw^ zEP~XcAG~Fa0X;ft{+dX~&P>f4tiq$GV)i`*6@@yyOR0Lw_3roD^qjQj8i*2(d~KLx z16Jv&s)oAVZVsb&x9!~h-}ChaRGBF!O)Sj-c2*|;F~#yk#K7BMF@0FLA|k|ykt8F( z0|hV7vUE$mZm?*@B#?)VM?Kt)64zuq$gh(eW9X$MoisYFPH5 zBDsIjoSNu;$==|l@(zP*mv!zCmEkuyZ;#_EG8Ho7wom?$E9S5Mfh$SOvi^L+rR_1v z!V`n9wVeoz9+yU?nKa??bD0Puqx@rO#3u=xO3KU-+In=Ie$MGc2%3<8FwY0Y#JZ{h z7Pdu7)g2heGvvGgWg9_9z5Prhy+D*F*7Spmad)Fmc$+^nm|~EJdqgiIzO58}`x-t|ok)w|AD?;X-U# z$6Wh4sKGF4XFm6gmSj!U;VrG}sOjs~$~`~!o^$e404cciYseL6=Y&@L1*R497Cr%* z8lld0zRj~`bxey^QF^;R9c>n+-PS8S0ak)l+_^7IN)P%e!8!9GGcSrofd0@06hf0-d zztz2fb#gb5tu}1`)O4Rs5`T`@S#{m~YZtFA#sdJl&0k>T*I(#5PJ7`V%Nn61;$|yH z+UybNGHjsuXd0x_U#s7nDi9MWNiXDsMy+u~+1wfug3uOl2d}OEzGCb~kM~XGm#@3Z zpfXM@OS|1Cb2G1<&pK{?J!WUxUqu$genSiOQ;)O7xII{?uzMuF~_=Uk~vL z6SJ6o#zcant>2AP~KX( z6Q^gaOeg>IHh?@SN{e(}rnP6VQRJ_1=JKDaIj7lwoLw0z;O;#bQrT`?uJ`$Ru4m*D zclpVXx82V{DiZu!#sl8fAF(&k1Ppds>e*w%DAF&hH=h+p85bzRHaW zeES4yl<%5&J4L18JqFBo&bggly$R+a6`FMLmvqDSH1%NRpScd&TWsx@brzuQ7vF!1 zKTvAi^@+WYP#V%-i=2Jlh)JJYYFu!IsDiR*(z`)pJ^*Hha?nM;g;tPwG%*3n#P~da zLb2dCHC@B~qQ&l)Zhtuo_uHtwUH~Seko|pg)VkAB0!i}76QiE#1eeD#&?CR0b-rR1 z_mHv4z&yog;Fm0ccx+&P(xgAEwW!!IMjXMngEljn;hfJfCO7><$ui8BlXO=0wA7ev zK@H+u%yKwPaudOPfTj4Ib3{KVN!J6qHjb$oHq8N_`lI-`*)J|b>O$(A=8^c)Ctz%G z+JhYwotqcARvtn0Tx(Rm66V6M(ER`+j0i)x`-L2*-AG3X$0SOS!7tLU%SRg#eiTsZqcMI%wV1kS8u*Y&AL=wQy3`yJb~}*u9O!M5lW9|pcB&yx z>c=-JGBaAW$w)~~$oC!PU!oc&UlMP7YY-h32V|R7mI8hrh6tlTd{(`V2$j@{&sV?8 z^}olKj=g4}98;kKW1JJK`~4;N*p@q{`g_A0~KFHjX2D+jVJI24tV;AD=1JLo*Q4E5`eU7vfHu?&g$ptBF#-I7ix&-@peH zbX{L%1`4*xx(?Aa>wV}`7n-`WqK_*#h|F%&Vxq|ULDUNiR@f?-+wp@Qo)1 z4O8Ocs`b$Oba~4nw0QM&yK_!a@Mt3RUXWGMthtvfk>8=Gy~NPR@`cIPDUh+)qTjjg z$LE#j!lA{cYHGZZx@@`oWO)9oAd|dp@ZFM)9X|7uIuRrXq*Y8gx5vogYIc1_up` zr|h6|G%UNx`{3L)a~=bT^Hk~WzS(p5%6FQb`GA*wv0Ei6_G)GWG#A<&gCG)#3Yjok zt^#Zo=Zh^wpsdE1@_i~5Cabp;@cv*0rF+jN+1V0caYU>soYkXWa*fC$(*y2{Wlh6JSJ4#wKYJ^_c=G2F%!Oj36Gp7bFl0o zzU$*oH~u&auPZXtXCNy&Sjh3I2G)RB$QllbtEO0Y)Yi@K^um}BHc6=%iZL^_e{svVxK!YLBjtcaKPN0 zS7Q?EFh8+-O74CuS>G)CNE>J81^F5}BD${k%2Z@d&jUeCp%dMqPVmlFQ+z*mB=?2= z$MJT7WA)|G>ePRG=Ml1ZJ|!>sn&TDQt6rlQUIcPt2cT@)27Gr)=**iLG82e>F zV>+Yqs0MEU=CA0kd=R)X>&~b=o!ekVxK9^SZ`%K&z&6_Zwr*otM3lVlq)Xh@Or{;R z1wD5puqHg~V;m1pj9_zs-9z-JKW}mEF7m9^!5l36t5y;6jBa=K>LMEKA;hJz+MmM& zUB0Rzf+0L(J$CqRCD;Nxb#vi1eSJ8d+R&&8g11q=Wk-fJ)t{-+H>uWj$mSm_3X^K_ zauAVRvVWi5<##}AUvx*6!F&wVNy>uz44=$@(eyu)r+CU-jY>KB(>e|x6f#N+W%m>V zjFg>>b^r%7>oL4uJ!4NaEY7zZ?G=VwX!fq)CkkGgX5ws%cU+t8RS~5m<%8zlVQiZ` zXC*MT@k5*xLkWFA8z~XCv0z)QkmS>^!A{!0o1MXOgXKwnX^9m0|?VD%b=O!L2Oi2$oj7~sDqsjO#%}f{SrPRW6S>_n zaO`ERmiKp;T_=q_H+1Gc2%Iy@Oy;W(1U?yo#EXi_eAda zH*oDI+Zk7HewYv6ZPPy5Sp1@jzO-xe3<|l|E-fMn;0>oWW9ko%K-n0XaQ^ zg%>t<_k3y2PGW1Uyqo$u%yM6wxYV=xzDUowLyVUTtCcb&Y?8o8h zYN#R}U9I;9bJkN^{vMhXQ<}FW6?;@?TJbCKckOm!``C&me28qivzG~q*oAIJ+ttCX zo*f)DUbb$oEt|Hi0H1FFmAQnjf6sIxO`zp6R6*%~rD;Xrcrgq(Z>BGX_ zneO#2f5uH=+$zQPo=d6A&WQqRya36t?#U+->#NL91|8+DydXVEWUVY0*M%+GEB*Zr zZj;mZTG1S=Ple1EMyIHNsjH*V_{zZd;f&isdeKI%<4D4yU;$hwD1C-H+j}*EtKOe z&m5UxA-3{8_wT7o_gL4{tH$g*P_Eeg{=Q7^jQ`xbM@e~F;`Qx23-qXKB!oUp!RC`^ z`7FlR__yoH-hHgOs^%UVsc+K0v{U3*B_Y#p$mTIHSZBlAJtT9GyNc(c@o`R7 z+P=Kl!{X|E!>Yo_-Q_TAbSHjm_x)oNiPD$Z3qYf*S696?{?+E{7D=)*d_BBgtKZMv zAo^1dm?!0H(#Sq~EV$I9cu8u8=%44x$Vk3&@$+8zYCl6CL>*m73Dn?At|D;h z-CYXOAzJ}yK}xz2QIPHsM7l$e?(Pyv>1XV7&U4@I`!76S{2@8_+H1`@#x<@uYTC3; z*rRa?E#nBp@3?vVSC(XCP=?kVfEQ2^%R5aD{knj|#B5a=s#3LRzFul1vi#N5_rGjB z=ZH9BYQv5zzHj$g-H3Z*+-2K^XiU)pYX?tT0t!d!iC9 z^R%G(v zcB2(lFw*U)^Vq4^FR>n`TPipGL67Q`;GP9Rhkz?Qd@m;;wRwkPHH(CTs*6- z{6*e(zo7U{Ed6^a98ujB&PHN|>a^wh?SGay0;+Y>C)5P_>T*^oj)6tBN+;b{jDd)W zcK!h{wJ_uAZb(0cF}l*D9_?dedeWPESuAkHNvX<9YfCpTsY7yHpQ-p|2lmDn(_wt! zmbMZA=kLM3tXbtc`TNyOUE8W+oz#7;H$nJTypoa4=W=pB z1&M-r?!?!O;&)OHGEy zY!$l#UA+dr#~Meg1Cqn9{@HutwI!l&?6Onb33ezpwbEhiDWScyA%ahKe{CsR`5|x# z-_9dBg|AhsQY|pxZHC;u)tF2G17YpuTT&aTe?w7C!1GZ#k~0n^n&$_}Y{}Zy7WaI) zp4z_enw|M!ptfr3e))ItFTBKL?ze{`mVgv#5Htb=wZvZbNqp=W;JeHWFg1u~5F>36 zlbE@lmj<_W+N0QIHQAV7eqH$LBz_QhzLTIg#eveR?dYw$GQ%=|Rvb%q)n4j~?un4>vr&OiIrP5MBA>vxebi@o~NFYza>`nYkj zooKho15P!DGIk#A%8h-?OM@cmF7s7X(rXm|0byw)QX|Nc%sf^M9=!v(fH)UF=IbD3(Ww0ZdZj;Iu{s*D0)g_M1&?xHR?Gh z2sf8&R*8S`484&lQG*A!i}6DX0sixcnk6p)ra7SbHHY{8NqnTeV=vB}I+!}&S51k_ zuD$F@JjCg{!)Wx_aFDAmN$peZxfKwFS^j$Cd=oe6=Fm_4q4?o0w^RQE?nV0H&!jz* zV2z@eR1vYjdK1wD<55MzujwK(VXrsH+SNY_%IPD5WWhvDLEG+Mtc1pFIvO{Ev)F4~ z*{j|YMg+r73=G{(t>Osz)4zWTmacJzkFwR@NR9VI<$rz}yq6k$sLkuH1xcf-uZTq{ z;U@~r)0k{7$PWBpvl)=|Jbc`OjEt=Rj-Y$v>Vf`|=}N~asz2oQeLAA%x(df+?thRo zDV^v*546`v%$6ml3HFwwrW2FRq#(($$N(~j>sYZSt}Tx)z~uvTN@H6dFhv1=QZBbj zK4OgriW>&sfjbk)BB5?^SMUB2PbqHqk2)uG{_ochtzACUUBI9sR*M9~Ku7aj7$X2b z+L+G23jBeG*b^%HGjrDJ}*H^a%=n6HI9sIcb ze(3*{kn(qFt#uMTZqo%vKSbD%=e>*4kifSRr>pi*Bf)Az3_?v&8&HA_O?}vOu zQM#WioVz#PmO3m4bF3C}TE?g0>IS_%%VzY^Nb(kP$!av+DDOZo{J5R7xiM+ieXiP{ zQH@kL{kAdqenJhGf2#_QKzL4=+^*PSN}%TfAXy@M{I+$(R!<+OJ&i^8=<3o2qNsVZ z5yk!P`O=@j;m90Q3A&4=?2JNng8v2C-BXylKUBnuyM0@<;4X@C_<0hA0X(h_b82r= z=Ts1R3)l%8%MT78AQ5-Ma=+gV&nLjO5PzAF3^TIzbZZ1}X+$T+kK$xD0m(`5EGH3A z^1_cVJlma1emLu`3jM=to?PRrP7Z!Yh`znBu;Bm=*$*TA`2uc@12$}vDv*M4j7s%h>iDlYE$p@eF04 zij>65#Cq{|tK{iI7nM5Fbvj~wsii^!*tR1=Q-~i7_NLqC` zZdm$J229mI$D({Wd$}#WmXCWvWOsoGMAYHblfd&?XJxqo?oUjodt8M7A;IC;IzD!c zTFeruyxZeVU|3{fNpeP+=rUMc$%|eNT;Hdq^~bph$f-Iw@!5VpgOG;tV3Av?`vqXr zwLYXN`?|AhNaek2Ebqs%x-~tcIa~hh0^j&{Zd|GOswt=LhRxX7BG@TS?iaN3fSKCy zFztmQF^dDLlQO!$yxh1cAR4)mG)J`3!5E>?bIqrhSg$w;(BV2y1te0#(!1@SRiKrh ze?S`BH>ftp)ZB^)n3N}7AF$lxQqxHghR)w_nc>!o0KEPcE!Ol=eP=~uy<E%RX4re; z?z^GS1o^1~vddVJ8004eZguJ1))n-I$LFUQ{xqznP$l?qQAk)GiN~l-lg^|qAUj9y zbqdt#K5?D;!Y6UWb9%(HysVUnc6-5tImbIUN#iLW=V8RZ6CJxkvn)4sKPCx4a75A;0u|A%~2;@9P#@{ z#J#?$tGNgbcRochcjM1j5>caCn3+l%=O+-HyVk5rX{Viq8~DJP_*8YIMx@!A|9V6{ z=$7zo8YtZL$+7i;Lez#yq5rY9Ahy~HRv8LL{P!4@Nu=`Iri&GdLdn=QnW`1$s=<>} zK=}0zjl2E~fw3nKUh1YiNNhqO?8lv4KIUbNZIO8*N&M+e_HzHxyM>d#+jMP4@VXCd zhP}Emf0|(CJ>(c{ANU4mWS*Cq9;9{Qb-P~WE^3^a2=Q=pXw4Ox>S(eAF7pf)k9@A) z>Dzq5?&4blG&^cgswy*(ogM$N*9UP_aN*~!&XFYk<~NKl;6N1%mXWS56~(5Wiyj3u z`;T~*bTtQkfyLn&AjTBDk4*2yb-6;VgkA&MktzxD(X-n1O1W1P(|#F-)cDceVbplKyTTWsrD<~o3+n~ zl(>f2dh1Px^IENuBBR-8v$WU#6}k8Ntg2?g@2H0i(Q+;VOAi>PwP9ecLLB|)u1<;7 z#3gM9bR9R(-7YLP$d@jPZOmtjw;)ds~V z5uD`U3c{`iE5<;!WXC=9XlfaSd@gpDewP9+6VWeFL3pOgP+M9#ZiHkza~n6GTG<3n zm*;DWE-RQ}pFWrPiE;$uZ+X5$2duhq)IGj@#@!j$ZvK-DFNNve>fG^LfPDodPL`te zO-$*(yry5|2$jR@S2yT?kr)~ydJW|xgRpdX%);S&Xd}7h34AhQPn)}=Z^78|QK$W8 z39T zlk|}m(!%~6b`ejVCFT)5^>C0o?=F*6dZ5lN75jqTzX=$`4|w!5<;eDfSG3kIw`+khw;m_HSnzF0_ZsV(`A4SKCtT__$t^AvdY z$lI!6r$f!Nz8;f#{!WF~e+pQYb^2XYCl_=Orj(zrwot=bRBXLxM&w4n(GWmk_(FH{ zGNzw1mVpG2r9xemox^G*=L;WXqK>saymF+YHo~ge5 zf{HRdDeXyKPt>Y*u%jT`!06LJDg%p%7yL;bW}R+j-k;Nz^|+DUkn9;c;~83pXCW>r zvKY$euTjhzOWe+I4R!|InUWNJ)f0Q<-i;yJd2DqBu(W-dzNNDNXmoM^RXF3sP)T;9 zm5!07TT1p~%?L$;`&m- z<5_y@Od~gRjew#xKe<8+ePN-@9F)sPV#=)#iy=kWGQoSY@W%VGAlGcKH(%^IOi9T0 zZMFEM^26WeET|c?@2i~gCZ?R z3v_-jymS;Bi62J2pP8WVud|&2D<%DI(~m-*a%~yt+#$kXD_3nGY%SvF!3@Y}q74lv z_hk~BbW2XlEr_%nYF%xoYbva&_t@<1CjYikBYK5l5`emZdvWX6@ac-C*xm=(208mA zFywx_V?ccNr~)IJ)+Ix#l)~a2m}07TGtBP=@wyIuR{9Xwep*_y_&7P;#xn;T1?-bo zEox4nHvE_N%}FE}SDk9b2}ayyEYUCx`cUYrtIws7@{`*FGfrB@6CKxnQuB_ri6Nb` z;5-KDcGX6(r-Jw?rIk>(i?*UqemNh~!k#wcuO zQK}Ot zk)S_Z>`41AS%*$eExCAZlRGANR$|kue%YD>niufKy+v1@i%y0% zJ$Ua$L9Q83QO#W&k(p;lJJXY8Dacrfs%>`yZ&Cscz%MV(D62|i;qBUNo??46V9Wif zpZTtF_NO|?+KX_?jUm)NH`hYaTLu6<$_DH?JN>Ed^+a={U&34`5k+plMcSGcwh4m^ zB%s@cU3`LA-f3QhR$Ugx*L|WAgc(K@P?hTCA?Bvu`2=6W_0v`r;e-B1o_)tZD%s9< zS4bV@WxfKc)e`+wMUm#W_=k>7cmO_hWK8L!HzxBmevIMdkhJVeD`2Ad&&_3r$zFzb zTl6t=0k_?1vtqH5kHg)fWV)k={P)>Vgyy7T$ExMQW$GR0zehHph(usfp(;G4e6T9G zw;oy%wu}dC2Ej7uu`DA~j9MPJqI?t?dHR|gmn~%CYpx6F7_r5Pf1f$(u1|HF$XUP* zexBU>zyqjv6F5GDhgz{#@o&xqv-|We%ZQ{ z63pVV!NYLkiRgaijp#1Z01ImMToIqrnB;CDYV`9@5JWilU_kVm{lV0dx-E4N0gnxg z%3rAYKg|Q}RrXhb>q(3cUi7CQTs5E*@}nvb0vbW?-d7z5hHG03O9EJJGV=LcC)r%? zKX$ZM{CZydO?90a=v8=XOT_V~0=KVDR0i*QbXUR=RDU5In{bq5a@LR^`=Li(UHo}x z`EgkFIo(`hug%Yw;`|3C!D8(6DJfCKTMKNPukd zd|vOwx(w!#c#olYlzP9a=M(s5)XAIy48A93l=+bV8To+@oDqA&0xwo!61CaQxPIuj zQ#9e_PeVfX>I7g84MnlcB_H%i(9iy=I>#JF!`lOp5SRJDls-B_ysd!S;-Mrd*~i~H zkuyMf5)g}>t^{w5(}%aTNi*e|@P=SAw8CD*Co%9ZqV>!{kWoaCg}kV_1#KO4w%V;| z_CoVp%kX;CnDf4NIW}TaeOjI~`G-E$0BwS-xtpWJl z1NpDSX=m^yzE>PF6!(#~6J~(0(;nwl#2XZT+B0PQ-&aFq!7J(aV_;AE{zlbL@eV~5 zjVfD!oa;E$OIx2RJXAr(E(zq(9YmhnXJKba&=c(8E6z&n&?~ zdS8(UIkS89dQR#BD4h2SB3dV}_G~`<3p=cGj5bQQ?$G3aFI`ER`}M?ETz1u8;G6c~ z1?cj=WnrD)Wy1CIk&VjlIUa9c`UZFYZX#Yk_hdr(T_+Kvr%&-=+PQ090;JOFWgW{& zP$Mtg%hU4;n!)OG(l+}CH?dXIwVmU?#r}t+&$M4-(f+*x)6<8pDR+Wykdy^D?p46> zO~pR*;x9a*Ib7W9`)tSV$xBu<=fDe2aG(6+S~uzTz5M;8s{&T=8|_qZGYS5lq%E-N z)+ac*kTi!P&(-m+jm5LPEGGKFLGW%>=!LV30%d|p;&p|2VoKrd?-@AJW+InPy!iX{ zeb?Vzo>*mFepqSs?75nx!;%8+?^E*c5 z4-TR7BI%X)Y;69bbwXfP_ZEom?rHW$6yeywIa9qI)2Uw+d?hx zO37kp39-yfT%MtN$Ubv##D;5K*+K)IR#iDL%a9L$QP$=}f%?f&St#}7&Yr}KoF`!4 zxyIbv?oS*Zyc@TOk4;E-t_B!Gu3qD2$er6XrdutYvl*BN6#MoFm=Z;VZsAa>)JGui9J=S_;HDScU#i{U9{l~Z)*HT*I& zuK>{^TtGEnLo3^B4nQWeKXNuIy%(#vkn%Ds0V} zJdeROW4%j*JufAg^C(hKDXIA3ucDs~buUT>v5)?e^B@&l~Pj+YZi! zi=oLs!#fr2Ikq&J0pOQ+Ppe)JJ)~htb&0~|qahna5&3x!{X5mFu`|INH13}86 zA-mnjz6{P&D|kn4!aD+UAnv{+LP9x{K>&ZWZ*-!4qeo>%jtzdLdkw@%_l=d2Cn8m? zxcXr}pZA4-UBQke?W^-i?O5=NM^L-Yqk69+&FgesmDW4l{nAmF*cK)ja%;x*iNQ$} z+7W3_Q168k>b>BNKD~xdK(|XoSJ9768`0n=jKI)58o;+7Re!d7dxiN+$2RwROHb~` zO90jc<~>OfvXz%FIJOhl0B*=Gl;${@+iDmQ*f@q6qS>@sd$hI@+lnsTM#!wG2cAO) zQ-WLOHb$eecs{z5IMdUdS;vu(`7|k?L=;6pqQtp`(8T4j7-0ZUMepqi&}h}>e)1nL zp1i}jMg4NTCOy0j_nzPR`J5l&*AMODSqw9x2RvjCbWgYr(ULeQ&UVkgnC;yhn})Qw!aPO&Am5Q$4bn~NEA0bn-iFk%devnWL0CM92`gD zKRn-mZbW3%llLluiZ3gpDe1y5n3;ygeVwBGC)h5P@I$SR=OkwhBepk8*;~TRB?=@$R zv)=jw8#MjI5=JURKWa+03^yYl%0KZ76{uT5)$-(b|DOvlzT?7KNG z=o7rS#EJDsn5jjyNteT4$|1Q^x?euguC&b51$u@zal`57zq;79Ci3CVAnkkP`PVu8 zOZO7`1e0K7!z8aL2lntd>)E29@H!YTq~ke`RB7Dzv9@cxGrq~Gdh6(@gj-6B=WZJn zWE1L#$Fr#EVT%&x#1(U3?@jUsUOef*qk=xiA{V)4#%5!Yltb8GEXn^0Ey5|K5FZIL zPBEmh$(s>C7iH7-WI8`_x1(T48`np(^nO-rOJo#yD>O)XaEtcXDkW+kOb$QSHkxu) zJU;b(@XOGaa)dZ11zf>jrh!Id<>BP3#T>tQJCmw*+yGv%Uz0=_e&UliAlag}T)qcb7FoPIG)t>&1=PB&9rlKr(J-O$?O@d#}O zVT6QMPJv$4Fa6B#X`vZQwBfC~_fw;2(F?SS3@u@d#r9w(Uf(HLX~RDX1p8UB2YAVS zIBmNApiD~Zt{J5$ayN00E;LQzvkJ%6ns;Br*LxaGgH8G+`yQ)y1*dXKqmjB!sUY3O zj{>uSKR`~j`0V>fjM&N^Izoa>#(bA8S;bm>R0K`%CDvyBZmR2tAN)_BWZwZ}yiBQM z@ixW0A?z0*QMJjwL0!?<#jsaP-Jd1$`t~7Wi%ePQvZk&LR zsHnG>jz$S{FAi9AR6jUcczgyT={G~(7Ooo_)hb+{4^Rs5FJ{vA!&tp(GOHc*s<}Ok znu4ksDhm2sF&}jA+DyPv9`=V=#GE66avmdn0NrIk*Q66|2?F?rzhp7T2?UzF{am5P zH+e@$$$h71nUS_xyp1+~$1^lp6K(>#n)NJgOtEa~HEZdBhBm_*6!c(+jGK7q!e9t% z6$e0K=zzqLF`vG8bOrd8#xv

uR?M9E9*v7gj{vm&Hoz+*gZt4qLl(q%>#zROr6} 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 literal 0 HcmV?d00001