Yamato-Security / hayabusa

Hayabusa (隼) is a sigma-based threat hunting and fast forensics timeline generator for Windows event logs.
GNU Affero General Public License v3.0
2.26k stars 200 forks source link

[bug] Hayabusa crashes when level is not valid #560

Closed YamatoSecurity closed 2 years ago

YamatoSecurity commented 2 years ago

Describe the bug ルールのlevelが正しくない場合はクラッシュします:

thread 'main' panicked at 'called `Option::unwrap()` on a `None` value', src/afterfact.rs:297:18
stack backtrace:
   0:        0x101a37656 - <std::sys_common::backtrace::_print::DisplayBacktrace as core::fmt::Display>::fmt::h0d1bc6b9a6cb5b34
   1:        0x1018d3f5b - core::fmt::write::h64ddbe43c958ac83
   2:        0x101a2591a - std::io::Write::write_fmt::h7e453fd0bb915ce8
   3:        0x101a318f8 - std::panicking::default_hook::{{closure}}::hc0a95f88628ea979
   4:        0x101a32347 - std::panicking::rust_panic_with_hook::h59a745e8579c1996
   5:        0x101a37e2a - std::panicking::begin_panic_handler::{{closure}}::h77c7cdc59f5a8e41
   6:        0x101a37dc9 - std::sys_common::backtrace::__rust_end_short_backtrace::hc399a88e87a79fbd
   7:        0x101a31c55 - _rust_begin_unwind
   8:        0x101c50b6f - core::panicking::panic_fmt::h0686ac972197ca01
   9:        0x101c50b37 - core::panicking::panic::h756751112a1c234f
  10:        0x10196a393 - hayabusa::afterfact::emit_csv::ha951b771b84a1d7a
  11:        0x10186a104 - hayabusa::App::analysis_files::h2d176720e440de1a
  12:        0x101854264 - hayabusa::App::exec::hc8795a11d4fb697f
  13:        0x10185035c - hayabusa::main::h1c637782c8d06602
  14:        0x101992196 - std::sys_common::backtrace::__rust_begin_short_backtrace::h171a95d606c934e1
  15:        0x10187222a - _main

Step to Reproduce あるルールのlevel: lowlevel: low2にしたり、空白にしたりする。

Expected behavior levelが正しくない場合はどうしましょう? Rule parsing errorsとして扱って、The level in rule xxxx.yml is not correct.というエラーでルールを読み込まないようにするのはどうですか?

Environment (please complete the following information):

hitenkoku commented 2 years ago

バグ箇所の特定ができました。今まではruleで空白や想定していない文字列であった場合はundefine扱いにして、ルールとしては読み込み、検知などは行っておりました。 今回のバグは日毎の集計を行う際に想定していない文字列が来た場合の対応がなかったことが原因でした。失礼いたしました。こちらについては上記のルール読み込みと同じようにundefined扱いにして対応をしようと思います