From 4c1aa94ebaffab66186ccac06abc8c1a20c8e57f Mon Sep 17 00:00:00 2001 From: DustInDark Date: Tue, 31 May 2022 17:06:12 +0900 Subject: [PATCH] display logo in green (#552) * added termcolor reset function #537 * added logo green output #537 * fixed test * cargo fmt * updated changelog #537 * fixed clippy error * update logo screenshot * updated rules * changed no colored logo when --no-color option is enabled * fixed colored reset bug when --update-rules option is enabled * fixed color reset bug when --level-tuning option is enabled * cargo fmt Co-authored-by: Tanaka Zakku <71482215+YamatoSecurity@users.noreply.github.com> --- CHANGELOG-Japanese.md | 3 +- CHANGELOG.md | 3 +- rules | 2 +- screenshots/Hayabusa-Startup.png | Bin 83098 -> 79167 bytes src/afterfact.rs | 73 ++++++------- src/detections/configs.rs | 27 +---- src/detections/detection.rs | 7 +- src/detections/print.rs | 31 +++--- src/detections/rule/count.rs | 7 +- src/detections/utils.rs | 17 +++ src/filter.rs | 7 +- src/main.rs | 180 ++++++++++++++++--------------- src/options/level_tuning.rs | 25 +++-- src/yaml.rs | 11 +- 14 files changed, 202 insertions(+), 191 deletions(-) diff --git a/CHANGELOG-Japanese.md b/CHANGELOG-Japanese.md index 88408164..1f370774 100644 --- a/CHANGELOG-Japanese.md +++ b/CHANGELOG-Japanese.md @@ -12,8 +12,9 @@ - ルールの`details`でeventkey_alias.txtやEvent.EventData内に存在しない情報を`n/a` (not available)と表記するようにした。(#528) (@hitenkoku) - 読み込んだイベント数と検知しなかったイベント数を表示するようにした。 (#538) (@hitenkoku) -- 新しいロゴ。 (@YamatoSecurity) +- 新しいロゴに変更した。(#536) (@YamatoSecurity) - evtxファイルのファイルサイズの合計を出力するようにした。(#540) (@hitenkoku) +- ロゴの色を変更した (#537) (@hitenkoku) **バグ修正:** diff --git a/CHANGELOG.md b/CHANGELOG.md index 4d68dc7c..a2b2efa6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,8 +12,9 @@ - In the `details` line in a rule, when a placeholder points to a field that does not exist or there is an incorrect alias mapping, it will be outputted as `n/a` (not available). (#528) (@hitenkoku) - Display total event and data reduction count. (How many and what percent of events were ignored.) (#538) (@hitenkoku) -- New logo. (@YamatoSecurity) +- New logo. (#536) (@YamatoSecurity) - Display total evtx file size. (#540) (@hitenkoku) +- Changed logo color. (#537) (@hitenkoku) **Bug Fixes:** diff --git a/rules b/rules index 7a1cb7c0..33126392 160000 --- a/rules +++ b/rules @@ -1 +1 @@ -Subproject commit 7a1cb7c0cf4a055abc3b6241c4f5a47c6ae82a9d +Subproject commit 3312639216142abe4f4fffb7e28d92ade7cf6ba0 diff --git a/screenshots/Hayabusa-Startup.png b/screenshots/Hayabusa-Startup.png index fcdfdd38a3b55170c22e328314abfebeb31921b8..cf0233f4bce8dda1ab743a2101ba07e8ff6f224f 100644 GIT binary patch literal 79167 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 literal 83098 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"Etk75 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 diff --git a/src/afterfact.rs b/src/afterfact.rs index 1dce6f30..e94129fd 100644 --- a/src/afterfact.rs +++ b/src/afterfact.rs @@ -2,6 +2,7 @@ use crate::detections::configs; use crate::detections::print; use crate::detections::print::AlertMessage; use crate::detections::utils; +use crate::detections::utils::write_color_buffer; use chrono::{DateTime, Local, TimeZone, Utc}; use csv::QuoteStyle; use hashbrown::HashMap; @@ -67,11 +68,7 @@ pub fn set_output_color() -> HashMap { } if read_result.is_err() { // color情報がない場合は通常の白色の出力が出てくるのみで動作への影響を与えない為warnとして処理する - AlertMessage::warn( - &mut BufWriter::new(std::io::stderr().lock()), - read_result.as_ref().unwrap_err(), - ) - .ok(); + AlertMessage::warn(read_result.as_ref().unwrap_err()).ok(); return color_map; } read_result.unwrap().into_iter().for_each(|line| { @@ -82,10 +79,10 @@ pub fn set_output_color() -> HashMap { let level = line.get(0).unwrap_or(empty); let convert_color_result = hex::decode(line.get(1).unwrap_or(empty).trim()); if convert_color_result.is_err() { - AlertMessage::warn( - &mut BufWriter::new(std::io::stderr().lock()), - &format!("Failed hex convert in level_color.txt. Color output is disabled. Input Line: {}",line.join(",")) - ) + AlertMessage::warn(&format!( + "Failed hex convert in level_color.txt. Color output is disabled. Input Line: {}", + line.join(",") + )) .ok(); return; } @@ -93,7 +90,10 @@ pub fn set_output_color() -> HashMap { if level.is_empty() || color_code.len() < 3 { return; } - color_map.insert(level.to_lowercase(), Color::Rgb(color_code[0], color_code[1], color_code[2])); + color_map.insert( + level.to_lowercase(), + Color::Rgb(color_code[0], color_code[1], color_code[2]), + ); }); color_map } @@ -115,23 +115,22 @@ fn _print_timeline_hist(timestamps: Vec, length: usize, side_margin_size: u let buf_wtr = BufferWriter::stdout(ColorChoice::Always); let mut wtr = buf_wtr.buffer(); wtr.set_color(ColorSpec::new().set_fg(None)).ok(); + if timestamps.len() < 5 { - write!( + writeln!( wtr, "Event Frequency Timeline could not be displayed as there needs to be more than 5 events.", ) .ok(); - writeln!(wtr).ok(); buf_wtr.print(&wtr).ok(); return; } let title = "Event Frequency Timeline"; let header_row_space = (length - title.len()) / 2; - writeln!(wtr).ok(); - write!(wtr, "{}", " ".repeat(header_row_space)).ok(); - writeln!(wtr, "{}", title).ok(); - writeln!(wtr).ok(); + println!(); + writeln!(wtr, "{}{}", " ".repeat(header_row_space), title).ok(); + println!(); let timestamp_marker_max = if timestamps.len() < 2 { 0 @@ -162,11 +161,7 @@ fn _print_timeline_hist(timestamps: Vec, length: usize, side_margin_size: u pub fn after_fact(all_record_cnt: usize) { let fn_emit_csv_err = |err: Box| { - AlertMessage::alert( - &mut BufWriter::new(std::io::stderr().lock()), - &format!("Failed to write CSV. {}", err), - ) - .ok(); + AlertMessage::alert(&format!("Failed to write CSV. {}", err)).ok(); process::exit(1); }; @@ -177,11 +172,7 @@ pub fn after_fact(all_record_cnt: usize) { match File::create(csv_path) { Ok(file) => Box::new(BufWriter::new(file)), Err(err) => { - AlertMessage::alert( - &mut BufWriter::new(std::io::stderr().lock()), - &format!("Failed to open file. {}", err), - ) - .ok(); + AlertMessage::alert(&format!("Failed to open file. {}", err)).ok(); process::exit(1); } } @@ -372,10 +363,6 @@ fn _print_unique_results( tail_word: String, color_map: &HashMap, ) { - let buf_wtr = BufferWriter::stdout(ColorChoice::Always); - let mut wtr = buf_wtr.buffer(); - wtr.set_color(ColorSpec::new().set_fg(None)).ok(); - let levels = Vec::from([ "critical", "high", @@ -389,12 +376,15 @@ fn _print_unique_results( counts_by_level.reverse(); // output total results - writeln!( - wtr, - "{} {}: {}", - head_word, - tail_word, - counts_by_level.iter().sum::() + write_color_buffer( + BufferWriter::stdout(ColorChoice::Always), + None, + &format!( + "{} {}: {}", + head_word, + tail_word, + counts_by_level.iter().sum::() + ), ) .ok(); @@ -403,12 +393,13 @@ fn _print_unique_results( "{} {} {}: {}", head_word, level_name, tail_word, counts_by_level[i] ); - - wtr.set_color(ColorSpec::new().set_fg(_get_output_color(color_map, level_name))) - .ok(); - writeln!(wtr, "{}", output_raw_str).ok(); + write_color_buffer( + BufferWriter::stdout(ColorChoice::Always), + _get_output_color(color_map, level_name), + &output_raw_str, + ) + .ok(); } - buf_wtr.print(&wtr).ok(); } fn format_time(time: &DateTime) -> String { diff --git a/src/detections/configs.rs b/src/detections/configs.rs index ab4287c7..a9f1cbed 100644 --- a/src/detections/configs.rs +++ b/src/detections/configs.rs @@ -8,7 +8,6 @@ use hashbrown::HashMap; use hashbrown::HashSet; use lazy_static::lazy_static; use regex::Regex; -use std::io::BufWriter; use std::sync::RwLock; lazy_static! { pub static ref CONFIG: RwLock = RwLock::new(ConfigReader::new()); @@ -153,11 +152,7 @@ fn load_target_ids(path: &str) -> TargetEventIds { let mut ret = TargetEventIds::new(); let lines = utils::read_txt(path); // ファイルが存在しなければエラーとする if lines.is_err() { - AlertMessage::alert( - &mut BufWriter::new(std::io::stderr().lock()), - lines.as_ref().unwrap_err(), - ) - .ok(); + AlertMessage::alert(lines.as_ref().unwrap_err()).ok(); return ret; } @@ -195,7 +190,6 @@ impl TargetEventTime { Ok(dt) => Some(dt.with_timezone(&Utc)), Err(_) => { AlertMessage::alert( - &mut BufWriter::new(std::io::stderr().lock()), "start-timeline field: the timestamp format is not correct.", ) .ok(); @@ -213,7 +207,6 @@ impl TargetEventTime { Ok(dt) => Some(dt.with_timezone(&Utc)), Err(_) => { AlertMessage::alert( - &mut BufWriter::new(std::io::stderr().lock()), "end-timeline field: the timestamp format is not correct.", ) .ok(); @@ -296,11 +289,7 @@ fn load_eventkey_alias(path: &str) -> EventKeyAliasConfig { // eventkey_aliasが読み込めなかったらエラーで終了とする。 let read_result = utils::read_csv(path); if read_result.is_err() { - AlertMessage::alert( - &mut BufWriter::new(std::io::stderr().lock()), - read_result.as_ref().unwrap_err(), - ) - .ok(); + AlertMessage::alert(read_result.as_ref().unwrap_err()).ok(); return config; } @@ -332,11 +321,7 @@ fn load_eventkey_alias(path: &str) -> EventKeyAliasConfig { pub fn load_pivot_keywords(path: &str) { let read_result = utils::read_txt(path); if read_result.is_err() { - AlertMessage::alert( - &mut BufWriter::new(std::io::stderr().lock()), - read_result.as_ref().unwrap_err(), - ) - .ok(); + AlertMessage::alert(read_result.as_ref().unwrap_err()).ok(); } read_result.unwrap().into_iter().for_each(|line| { @@ -406,11 +391,7 @@ fn load_eventcode_info(path: &str) -> EventInfoConfig { let mut config = EventInfoConfig::new(); let read_result = utils::read_csv(path); if read_result.is_err() { - AlertMessage::alert( - &mut BufWriter::new(std::io::stderr().lock()), - read_result.as_ref().unwrap_err(), - ) - .ok(); + AlertMessage::alert(read_result.as_ref().unwrap_err()).ok(); return config; } diff --git a/src/detections/detection.rs b/src/detections/detection.rs index b6ec1eab..8f282ebd 100644 --- a/src/detections/detection.rs +++ b/src/detections/detection.rs @@ -20,7 +20,6 @@ use hashbrown; use hashbrown::HashMap; use serde_json::Value; use std::fmt::Write; -use std::io::BufWriter; use std::sync::Arc; use tokio::{runtime::Runtime, spawn, task::JoinHandle}; @@ -69,7 +68,7 @@ impl Detection { if result_readdir.is_err() { let errmsg = format!("{}", result_readdir.unwrap_err()); if configs::CONFIG.read().unwrap().args.is_present("verbose") { - AlertMessage::alert(&mut BufWriter::new(std::io::stderr().lock()), &errmsg).ok(); + AlertMessage::alert(&errmsg).ok(); } if !*QUIET_ERRORS_FLAG { ERROR_LOG_STACK @@ -91,10 +90,10 @@ impl Detection { let errmsg_body = format!("Failed to parse rule file. (FilePath : {})", rule.rulepath); if configs::CONFIG.read().unwrap().args.is_present("verbose") { - AlertMessage::warn(&mut std::io::stdout().lock(), &errmsg_body).ok(); + AlertMessage::warn(&errmsg_body).ok(); err_msgs.iter().for_each(|err_msg| { - AlertMessage::warn(&mut std::io::stdout().lock(), err_msg).ok(); + AlertMessage::warn(err_msg).ok(); }); } if !*QUIET_ERRORS_FLAG { diff --git a/src/detections/print.rs b/src/detections/print.rs index 85d2e0e2..2eb5b35a 100644 --- a/src/detections/print.rs +++ b/src/detections/print.rs @@ -2,6 +2,7 @@ extern crate lazy_static; use crate::detections::configs; use crate::detections::utils; use crate::detections::utils::get_serde_number_to_string; +use crate::detections::utils::write_color_buffer; use chrono::{DateTime, Local, TimeZone, Utc}; use hashbrown::HashMap; use lazy_static::lazy_static; @@ -15,6 +16,7 @@ use std::io::BufWriter; use std::io::{self, Write}; use std::path::Path; use std::sync::Mutex; +use termcolor::{BufferWriter, ColorChoice}; #[derive(Debug)] pub struct Message { @@ -108,11 +110,7 @@ impl Message { } let read_result = utils::read_csv(path); if read_result.is_err() { - AlertMessage::alert( - &mut BufWriter::new(std::io::stderr().lock()), - read_result.as_ref().unwrap_err(), - ) - .ok(); + AlertMessage::alert(read_result.as_ref().unwrap_err()).ok(); return HashMap::default(); } read_result.unwrap().into_iter().for_each(|line| { @@ -265,13 +263,21 @@ impl AlertMessage { } /// ERRORメッセージを表示する関数 - pub fn alert(w: &mut W, contents: &str) -> io::Result<()> { - writeln!(w, "[ERROR] {}", contents) + pub fn alert(contents: &str) -> io::Result<()> { + write_color_buffer( + BufferWriter::stderr(ColorChoice::Always), + None, + &format!("[ERROR] {}", contents), + ) } /// WARNメッセージを表示する関数 - pub fn warn(w: &mut W, contents: &str) -> io::Result<()> { - writeln!(w, "[WARN] {}", contents) + pub fn warn(contents: &str) -> io::Result<()> { + write_color_buffer( + BufferWriter::stderr(ColorChoice::Always), + None, + &format!("[WARN] {}", contents), + ) } } @@ -281,7 +287,6 @@ mod tests { use crate::detections::print::{AlertMessage, Message}; use hashbrown::HashMap; use serde_json::Value; - use std::io::BufWriter; #[test] fn test_create_and_append_message() { @@ -422,15 +427,13 @@ mod tests { #[test] fn test_error_message() { let input = "TEST!"; - AlertMessage::alert(&mut BufWriter::new(std::io::stdout().lock()), input) - .expect("[ERROR] TEST!"); + AlertMessage::alert(input).expect("[ERROR] TEST!"); } #[test] fn test_warn_message() { let input = "TESTWarn!"; - AlertMessage::warn(&mut BufWriter::new(std::io::stdout().lock()), input) - .expect("[WARN] TESTWarn!"); + AlertMessage::warn(input).expect("[WARN] TESTWarn!"); } #[test] diff --git a/src/detections/rule/count.rs b/src/detections/rule/count.rs index aa03403e..e7bb9ecc 100644 --- a/src/detections/rule/count.rs +++ b/src/detections/rule/count.rs @@ -8,7 +8,6 @@ use crate::detections::rule::RuleNode; use chrono::{DateTime, TimeZone, Utc}; use hashbrown::HashMap; use serde_json::Value; -use std::io::BufWriter; use std::num::ParseIntError; use std::path::Path; @@ -88,7 +87,7 @@ fn get_alias_value_in_record( ), }; if configs::CONFIG.read().unwrap().args.is_present("verbose") { - AlertMessage::alert(&mut BufWriter::new(std::io::stderr().lock()), &errmsg).ok(); + AlertMessage::alert(&errmsg).ok(); } if !*QUIET_ERRORS_FLAG { ERROR_LOG_STACK @@ -190,7 +189,7 @@ impl TimeFrameInfo { } else { let errmsg = format!("Timeframe is invalid. Input value:{}", value); if configs::CONFIG.read().unwrap().args.is_present("verbose") { - AlertMessage::alert(&mut BufWriter::new(std::io::stderr().lock()), &errmsg).ok(); + AlertMessage::alert(&errmsg).ok(); } if !*QUIET_ERRORS_FLAG { ERROR_LOG_STACK @@ -226,7 +225,7 @@ pub fn get_sec_timeframe(rule: &RuleNode) -> Option { Err(err) => { let errmsg = format!("Timeframe number is invalid. timeframe. {}", err); if configs::CONFIG.read().unwrap().args.is_present("verbose") { - AlertMessage::alert(&mut BufWriter::new(std::io::stderr().lock()), &errmsg).ok(); + AlertMessage::alert(&errmsg).ok(); } if !*QUIET_ERRORS_FLAG { ERROR_LOG_STACK diff --git a/src/detections/utils.rs b/src/detections/utils.rs index 7fe6603c..bfad4c46 100644 --- a/src/detections/utils.rs +++ b/src/detections/utils.rs @@ -3,6 +3,7 @@ extern crate csv; extern crate regex; use crate::detections::configs; +use termcolor::Color; use tokio::runtime::Builder; use tokio::runtime::Runtime; @@ -12,11 +13,13 @@ use regex::Regex; use serde_json::Value; use std::cmp::Ordering; use std::fs::File; +use std::io; use std::io::prelude::*; use std::io::{BufRead, BufReader}; use std::str; use std::string::String; use std::vec; +use termcolor::{BufferWriter, ColorSpec, WriteColor}; use super::detection::EvtxRecordInfo; @@ -239,6 +242,20 @@ pub fn create_rec_info(data: Value, path: String, keys: &[String]) -> EvtxRecord } } +/** + * 標準出力のカラー出力設定を指定した値に変更し画面出力を行う関数 + */ +pub fn write_color_buffer( + wtr: BufferWriter, + color: Option, + output_str: &str, +) -> io::Result<()> { + let mut buf = wtr.buffer(); + buf.set_color(ColorSpec::new().set_fg(color)).ok(); + writeln!(buf, "{}", output_str).ok(); + wtr.print(&buf) +} + /** * CSVのrecord infoカラムに出力する文字列を作る */ diff --git a/src/filter.rs b/src/filter.rs index 766f2d35..79ffc6b4 100644 --- a/src/filter.rs +++ b/src/filter.rs @@ -5,7 +5,6 @@ use crate::detections::print::QUIET_ERRORS_FLAG; use hashbrown::HashSet; use regex::Regex; use std::fs::File; -use std::io::BufWriter; use std::io::{BufRead, BufReader}; #[derive(Debug)] @@ -55,11 +54,7 @@ impl RuleExclude { let f = File::open(filename); if f.is_err() { if configs::CONFIG.read().unwrap().args.is_present("verbose") { - AlertMessage::warn( - &mut BufWriter::new(std::io::stderr().lock()), - &format!("{} does not exist", filename), - ) - .ok(); + AlertMessage::warn(&format!("{} does not exist", filename)).ok(); } if !*QUIET_ERRORS_FLAG { ERROR_LOG_STACK diff --git a/src/main.rs b/src/main.rs index 9d9d9492..98e72f5e 100644 --- a/src/main.rs +++ b/src/main.rs @@ -19,12 +19,12 @@ use hayabusa::detections::print::{ QUIET_ERRORS_FLAG, STATISTICS_FLAG, }; use hayabusa::detections::rule::{get_detection_keys, RuleNode}; -use hayabusa::filter; use hayabusa::omikuji::Omikuji; use hayabusa::options::level_tuning::LevelTuning; use hayabusa::yaml::ParseYaml; use hayabusa::{afterfact::after_fact, detections::utils}; use hayabusa::{detections::configs, timeline::timelines::Timeline}; +use hayabusa::{detections::utils::write_color_buffer, filter}; use hhmmss::Hhmmss; use pbr::ProgressBar; use serde_json::Value; @@ -42,6 +42,7 @@ use std::{ path::PathBuf, vec, }; +use termcolor::{BufferWriter, Color, ColorChoice}; use tokio::runtime::Runtime; use tokio::spawn; use tokio::task::JoinHandle; @@ -88,7 +89,12 @@ impl App { if std::env::args().len() == 1 { self.output_logo(); println!(); - println!("{}", configs::CONFIG.read().unwrap().args.usage()); + write_color_buffer( + BufferWriter::stdout(ColorChoice::Always), + None, + configs::CONFIG.read().unwrap().args.usage(), + ) + .ok(); println!(); return; } @@ -105,7 +111,6 @@ impl App { if !self.is_matched_architecture_and_binary() { AlertMessage::alert( - &mut BufWriter::new(std::io::stderr().lock()), "The hayabusa version you ran does not match your PC architecture.\nPlease use the correct architecture. (Binary ending in -x64.exe for 64-bit and -x86.exe for 32-bit.)", ) .ok(); @@ -122,15 +127,16 @@ impl App { match self.update_rules() { Ok(output) => { if output != "You currently have the latest rules." { - println!("Rules updated successfully."); + write_color_buffer( + BufferWriter::stdout(ColorChoice::Always), + None, + "Rules updated successfully.", + ) + .ok(); } } Err(e) => { - AlertMessage::alert( - &mut BufWriter::new(std::io::stderr().lock()), - &format!("Failed to update rules. {:?} ", e), - ) - .ok(); + AlertMessage::alert(&format!("Failed to update rules. {:?} ", e)).ok(); } } println!(); @@ -139,7 +145,6 @@ impl App { if !Path::new("./config").exists() { AlertMessage::alert( - &mut BufWriter::new(std::io::stderr().lock()), "Hayabusa could not find the config directory.\nPlease run it from the Hayabusa root directory.\nExample: ./hayabusa-1.0.0-windows-x64.exe" ) .ok(); @@ -150,25 +155,19 @@ impl App { for (key, _) in PIVOT_KEYWORD.read().unwrap().iter() { let keywords_file_name = csv_path.to_owned() + "-" + key + ".txt"; if Path::new(&keywords_file_name).exists() { - AlertMessage::alert( - &mut BufWriter::new(std::io::stderr().lock()), - &format!( - " The file {} already exists. Please specify a different filename.", - &keywords_file_name - ), - ) + AlertMessage::alert(&format!( + " The file {} already exists. Please specify a different filename.", + &keywords_file_name + )) .ok(); return; } } if Path::new(csv_path).exists() { - AlertMessage::alert( - &mut BufWriter::new(std::io::stderr().lock()), - &format!( - " The file {} already exists. Please specify a different filename.", - csv_path - ), - ) + AlertMessage::alert(&format!( + " The file {} already exists. Please specify a different filename.", + csv_path + )) .ok(); return; } @@ -180,11 +179,21 @@ impl App { } if *STATISTICS_FLAG { - println!("Generating Event ID Statistics"); + write_color_buffer( + BufferWriter::stdout(ColorChoice::Always), + None, + "Generating Event ID Statistics", + ) + .ok(); println!(); } if *LOGONSUMMARY_FLAG { - println!("Generating Logons Summary"); + write_color_buffer( + BufferWriter::stdout(ColorChoice::Always), + None, + "Generating Logons Summary", + ) + .ok(); println!(); } if configs::CONFIG @@ -209,7 +218,6 @@ impl App { .starts_with('.') { AlertMessage::alert( - &mut BufWriter::new(std::io::stderr().lock()), "--filepath only accepts .evtx files. Hidden files are ignored.", ) .ok(); @@ -219,11 +227,7 @@ impl App { } else if let Some(directory) = configs::CONFIG.read().unwrap().args.value_of("directory") { let evtx_files = self.collect_evtxfiles(directory); if evtx_files.is_empty() { - AlertMessage::alert( - &mut BufWriter::new(std::io::stderr().lock()), - "No .evtx files were found.", - ) - .ok(); + AlertMessage::alert("No .evtx files were found.").ok(); return; } self.analysis_files(evtx_files, &time_filter); @@ -262,11 +266,10 @@ impl App { .value_of("rules") .unwrap_or("rules"), ) { - AlertMessage::alert(&mut BufWriter::new(std::io::stderr().lock()), &err).ok(); + AlertMessage::alert(&err).ok(); } } else { AlertMessage::alert( - &mut BufWriter::new(std::io::stderr().lock()), "Need rule_levels.txt file to use --level-tuning option [default: ./rules/config/level_tuning.txt]", ) .ok(); @@ -277,7 +280,12 @@ impl App { let analysis_end_time: DateTime = Local::now(); let analysis_duration = analysis_end_time.signed_duration_since(analysis_start_time); println!(); - println!("Elapsed Time: {}", &analysis_duration.hhmmssxxx()); + write_color_buffer( + BufferWriter::stdout(ColorChoice::Always), + None, + &format!("Elapsed Time: {}", &analysis_duration.hhmmssxxx()), + ) + .ok(); println!(); // Qオプションを付けた場合もしくはパースのエラーがない場合はerrorのstackが9となるのでエラーログファイル自体が生成されない。 @@ -315,7 +323,7 @@ impl App { for (key, _) in PIVOT_KEYWORD.read().unwrap().iter() { output += &(pivot_file.to_owned() + "-" + key + ".txt" + "\n"); } - println!("{}", output); + write_color_buffer(BufferWriter::stdout(ColorChoice::Always), None, &output).ok(); } else { //標準出力の場合 let mut output = "The following pivot keywords were found:\n".to_string(); @@ -335,18 +343,16 @@ impl App { output += "\n"; } - print!("{}", output); + write_color_buffer(BufferWriter::stdout(ColorChoice::Always), None, &output).ok(); } } } #[cfg(not(target_os = "windows"))] fn collect_liveanalysis_files(&self) -> Option> { - AlertMessage::alert( - &mut BufWriter::new(std::io::stderr().lock()), - "-l / --liveanalysis needs to be run as Administrator on Windows.\r\n", - ) - .ok(); + AlertMessage::alert("-l / --liveanalysis needs to be run as Administrator on Windows.") + .ok(); + println!(); None } @@ -357,20 +363,14 @@ impl App { let evtx_files = self.collect_evtxfiles(&[log_dir, "System32\\winevt\\Logs".to_string()].join("/")); if evtx_files.is_empty() { - AlertMessage::alert( - &mut BufWriter::new(std::io::stderr().lock()), - "No .evtx files were found.", - ) - .ok(); + AlertMessage::alert("No .evtx files were found.").ok(); return None; } Some(evtx_files) } else { - AlertMessage::alert( - &mut BufWriter::new(std::io::stderr().lock()), - "-l / --liveanalysis needs to be run as Administrator on Windows.\r\n", - ) - .ok(); + AlertMessage::alert("-l / --liveanalysis needs to be run as Administrator on Windows.") + .ok(); + println!(); None } } @@ -380,7 +380,7 @@ impl App { if entries.is_err() { let errmsg = format!("{}", entries.unwrap_err()); if configs::CONFIG.read().unwrap().args.is_present("verbose") { - AlertMessage::alert(&mut BufWriter::new(std::io::stderr().lock()), &errmsg).ok(); + AlertMessage::alert(&errmsg).ok(); } if !*QUIET_ERRORS_FLAG { ERROR_LOG_STACK @@ -426,11 +426,7 @@ impl App { match fs::read_to_string("./contributors.txt") { Ok(contents) => println!("{}", contents), Err(err) => { - AlertMessage::alert( - &mut BufWriter::new(std::io::stderr().lock()), - &format!("{}", err), - ) - .ok(); + AlertMessage::alert(&format!("{}", err)).ok(); } } } @@ -443,7 +439,12 @@ impl App { .value_of("min-level") .unwrap_or("informational") .to_uppercase(); - println!("Analyzing event files: {:?}", evtx_files.len()); + write_color_buffer( + BufferWriter::stdout(ColorChoice::Always), + None, + &format!("Analyzing event files: {:?}", evtx_files.len()), + ) + .ok(); let mut total_file_size = ByteSize::b(0); for file_path in &evtx_files { @@ -461,7 +462,6 @@ impl App { if rule_files.is_empty() { AlertMessage::alert( - &mut BufWriter::new(std::io::stderr().lock()), "No rules were loaded. Please download the latest rules with the --update-rules option.\r\n", ) .ok(); @@ -524,8 +524,7 @@ impl App { record_result.unwrap_err() ); if configs::CONFIG.read().unwrap().args.is_present("verbose") { - AlertMessage::alert(&mut BufWriter::new(std::io::stderr().lock()), &errmsg) - .ok(); + AlertMessage::alert(&errmsg).ok(); } if !*QUIET_ERRORS_FLAG { ERROR_LOG_STACK @@ -654,7 +653,17 @@ impl App { fn output_logo(&self) { let fp = &"art/logo.txt".to_string(); let content = fs::read_to_string(fp).unwrap_or_default(); - println!("{}", content); + let output_color = if configs::CONFIG.read().unwrap().args.is_present("no-color") { + None + } else { + Some(Color::Green) + }; + write_color_buffer( + BufferWriter::stdout(ColorChoice::Always), + output_color, + &content, + ) + .ok(); } /// output easter egg arts @@ -669,7 +678,7 @@ impl App { None => {} Some(path) => { let content = fs::read_to_string(path).unwrap_or_default(); - println!("{}", content); + write_color_buffer(BufferWriter::stdout(ColorChoice::Always), None, &content).ok(); } } } @@ -682,9 +691,12 @@ impl App { let hayabusa_repo = Repository::open(Path::new(".")); let hayabusa_rule_repo = Repository::open(Path::new("rules")); if hayabusa_repo.is_err() && hayabusa_rule_repo.is_err() { - println!( - "Attempting to git clone the hayabusa-rules repository into the rules folder." - ); + write_color_buffer( + BufferWriter::stdout(ColorChoice::Always), + None, + "Attempting to git clone the hayabusa-rules repository into the rules folder.", + ) + .ok(); // execution git clone of hayabusa-rules repository when failed open hayabusa repository. result = self.clone_rules(); } else if hayabusa_rule_repo.is_ok() { @@ -712,11 +724,7 @@ impl App { submodule.update(true, None)?; let submodule_repo = submodule.open()?; if let Err(e) = self.pull_repository(&submodule_repo) { - AlertMessage::alert( - &mut BufWriter::new(std::io::stderr().lock()), - &format!("Failed submodule update. {}", e), - ) - .ok(); + AlertMessage::alert(&format!("Failed submodule update. {}", e)).ok(); is_success_submodule_update = false; } } @@ -753,11 +761,7 @@ impl App { .find_remote("origin")? .fetch(&["main"], None, None) .map_err(|e| { - AlertMessage::alert( - &mut BufWriter::new(std::io::stderr().lock()), - &format!("Failed git fetch to rules folder. {}", e), - ) - .ok(); + AlertMessage::alert(&format!("Failed git fetch to rules folder. {}", e)).ok(); }) { Ok(it) => it, Err(_err) => return Err(git2::Error::from_str(&String::default())), @@ -775,7 +779,6 @@ impl App { Ok("Finished fast forward merge.".to_string()) } else if analysis.0.is_normal() { AlertMessage::alert( - &mut BufWriter::new(std::io::stderr().lock()), "update-rules option is git Fast-Forward merge only. please check your rules folder." , ).ok(); @@ -797,7 +800,6 @@ impl App { } Err(e) => { AlertMessage::alert( - &mut BufWriter::new(std::io::stderr().lock()), &format!( "Failed to git clone into the rules folder. Please rename your rules folder name. {}", e @@ -868,10 +870,15 @@ impl App { *update_count_by_rule_type .entry(tmp[3].to_string()) .or_insert(0b0) += 1; - println!( - "[Updated] {} (Modified: {} | Path: {})", - tmp[0], tmp[1], tmp[2] - ); + write_color_buffer( + BufferWriter::stdout(ColorChoice::Always), + None, + &format!( + "[Updated] {} (Modified: {} | Path: {})", + tmp[0], tmp[1], tmp[2] + ), + ) + .ok(); } println!(); for (key, value) in &update_count_by_rule_type { @@ -880,7 +887,12 @@ impl App { if !&update_count_by_rule_type.is_empty() { Ok("Rule updated".to_string()) } else { - println!("You currently have the latest rules."); + write_color_buffer( + BufferWriter::stdout(ColorChoice::Always), + None, + "You currently have the latest rules.", + ) + .ok(); Ok("You currently have the latest rules.".to_string()) } } diff --git a/src/options/level_tuning.rs b/src/options/level_tuning.rs index c8cf6283..ed3e9573 100644 --- a/src/options/level_tuning.rs +++ b/src/options/level_tuning.rs @@ -1,9 +1,12 @@ +use crate::detections::utils::write_color_buffer; use crate::detections::{configs, utils}; use crate::filter::RuleExclude; use crate::yaml::ParseYaml; use std::collections::HashMap; use std::fs::{self, File}; use std::io::Write; +use termcolor::{BufferWriter, ColorChoice}; + pub struct LevelTuning {} impl LevelTuning { @@ -55,7 +58,12 @@ impl LevelTuning { // Convert rule files for (path, rule) in rulefile_loader.files { if let Some(new_level) = tuning_map.get(rule["id"].as_str().unwrap()) { - println!("path: {}", path); + write_color_buffer( + BufferWriter::stdout(ColorChoice::Always), + None, + &format!("path: {}", path), + ) + .ok(); let mut content = match fs::read_to_string(&path) { Ok(_content) => _content, Err(e) => return Result::Err(e.to_string()), @@ -85,11 +93,16 @@ impl LevelTuning { file.write_all(content.as_bytes()).unwrap(); file.flush().unwrap(); - println!( - "level: {} -> {}", - rule["level"].as_str().unwrap(), - new_level - ); + write_color_buffer( + BufferWriter::stdout(ColorChoice::Always), + None, + &format!( + "level: {} -> {}", + rule["level"].as_str().unwrap(), + new_level + ), + ) + .ok(); } } Result::Ok(()) diff --git a/src/yaml.rs b/src/yaml.rs index dc5ca046..b56fb6a0 100644 --- a/src/yaml.rs +++ b/src/yaml.rs @@ -10,7 +10,6 @@ use hashbrown::HashMap; use std::ffi::OsStr; use std::fs; use std::io; -use std::io::BufWriter; use std::io::{BufReader, Read}; use std::path::{Path, PathBuf}; use yaml_rust::Yaml; @@ -65,7 +64,7 @@ impl ParseYaml { path.as_ref().to_path_buf().display(), ); if configs::CONFIG.read().unwrap().args.is_present("verbose") { - AlertMessage::alert(&mut BufWriter::new(std::io::stderr().lock()), &errmsg)?; + AlertMessage::alert(&errmsg)?; } if !*QUIET_ERRORS_FLAG { ERROR_LOG_STACK @@ -97,7 +96,7 @@ impl ParseYaml { read_content.unwrap_err() ); if configs::CONFIG.read().unwrap().args.is_present("verbose") { - AlertMessage::warn(&mut BufWriter::new(std::io::stderr().lock()), &errmsg)?; + AlertMessage::warn(&errmsg)?; } if !*QUIET_ERRORS_FLAG { ERROR_LOG_STACK @@ -118,7 +117,7 @@ impl ParseYaml { yaml_contents.unwrap_err() ); if configs::CONFIG.read().unwrap().args.is_present("verbose") { - AlertMessage::warn(&mut BufWriter::new(std::io::stderr().lock()), &errmsg)?; + AlertMessage::warn(&errmsg)?; } if !*QUIET_ERRORS_FLAG { ERROR_LOG_STACK @@ -170,7 +169,7 @@ impl ParseYaml { read_content.unwrap_err() ); if configs::CONFIG.read().unwrap().args.is_present("verbose") { - AlertMessage::warn(&mut BufWriter::new(std::io::stderr().lock()), &errmsg)?; + AlertMessage::warn(&errmsg)?; } if !*QUIET_ERRORS_FLAG { ERROR_LOG_STACK @@ -191,7 +190,7 @@ impl ParseYaml { yaml_contents.unwrap_err() ); if configs::CONFIG.read().unwrap().args.is_present("verbose") { - AlertMessage::warn(&mut BufWriter::new(std::io::stderr().lock()), &errmsg)?; + AlertMessage::warn(&errmsg)?; } if !*QUIET_ERRORS_FLAG { ERROR_LOG_STACK