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.33k stars 203 forks source link

[bug] Problem with fields with spaces in them. #554

Closed YamatoSecurity closed 2 years ago

YamatoSecurity commented 2 years ago

Describe the bug フィールドにスペースがある時に発生するバグです。 例えば、rules/hayabusa/default/alerts/WindowsDefender/1116_WindowsDefenderAlert.ymldetails%SeverityNameを出力したい場合は、rules/config/eventkey_alias.txtSeverityName,Event.EventData.Severity Nameという風に定義する必要があります。

が、selection conditionでスペースが入っているフィールド(Provider Name等々)を使いたい場合は、Provider_Name,Event.System.Provider_attributes.Nameという風に定義する必要があります。(READMEにも書いてあります。) ※今までProvider_Name,Event.System.Provider_Nameという風に定義していましたが、正しく検知していませんでした。 Provider_Name,Event.System.Provider Nameも駄目です。

問題はaliasをdetails出力でもconditionselectionでも使う場合があるので、どちらにも対応する必要があります。

SeverityName,Event.EventData.Severity_attributes.Nameと定義したら、conditionが使えるようになるけど、details出力では%Event.EventData.Severity_attributes.Name%が出力されてしまいます。

多分eventkey_alias.txtでスペース対応するより、details出力でn/aという風に定義されているフィールドが正しく変換されるように修正した方がラクかな?

Step to Reproduce Steps to reproduce the behavior:

  1. eventkey_alias.txtSeverityName,Event.EventData.Severity NameSeverityName,Event.EventData.Severity_attributes.Nameに変える。
  2. ./target/release/hayabusa -d ../hayabusa-sample-evtx -r rules/hayabusa/default/alerts/WindowsDefender/1116_WindowsDefenderAlert.yml等を実行する。
  3. details出力でSeverity:をチェックする。

Expected behavior %SeverityName%が正しく変換されるはず。

Screenshots

Screen Shot 2022-05-31 at 20 04 20

Environment (please complete the following information):

hach1yon commented 2 years ago

@YamatoSecurity

本件調査しましたが、そもそもバグではなく想定通りの動作をしています。

下記のXML(パス: hayabusa-sample-evtx\DeepBlueCLI\many-events-system.evtx, 時刻: 2016-08-19 05:40:21)を見てください。ISSUEの説明ではProvider Nameという空白の入ったタグ名がXMLに存在するように書かれていますが、これは間違っています。実際にはタグ名はProviderで、その'Provider'タグにキーがNameの属性が定義されています。なので、Provider_Name,Event.System.Provider Nameという定義方法はそもそも間違っていて、Provider_Name,Event.System.Provider_attributes.Nameが正しいです。また、このように定義されたProvider_Nameはdetailでも正しく表示できることを確認しています。

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<Events>
    <Event xmlns="http://schemas.microsoft.com/win/2004/08/events/event">
        <System>
            <Provider Name="Service Control Manager" Guid="{555908d1-a6d7-4695-8e1e-26931d2012f4}" EventSourceName="Service Control Manager" />
            <EventID Qualifiers="16384">
                7045
            </EventID>
        </System>
        <EventData>
        </EventData>
    </Event>
</Events>
hach1yon commented 2 years ago

次にSeverity Nameですが、これも想定通りの動作をしています。ご存じの通り、EventDataはタグ名が全てDataになり、属性のキーも全てNameになっています。なので、Event.EventData.Severity Nameといった感じで、Event.EventDataに続いてEventDataタグ直下のDataタグについてはキーが"Name"という属性の属性値をeventkey_alias.txtで定義できるようにしています。この場合もdetailsだけでなく、selection conditionでも"SeverityName"で検知可能です。

下記XMLのパスはhayabusa-sample-evtx\EVTX-to-MITRE-Attack\Antivirus\ID1116-1117-Defender threat detected.evtxです。

-
<Event xmlns="http://schemas.microsoft.com/win/2004/08/events/event">
    -
    <System>
        <EventID>
            1116
        </EventID>
        <TimeCreated SystemTime="2020-12-11T12:28:44.3178756Z" />
        <EventRecordID>
            177
        </EventRecordID>
    </System>
    -
    <EventData>
        <Data Name="Severity Name">
            High
        </Data>
    </EventData>
</Event>
YamatoSecurity commented 2 years ago

@hach1yon ご確認ありがとうございました! 前はなぜか%SeverityName%を片方しか使えなかったが、今はconditionもdetailsも無事に使えているので、大丈夫です。 問題なさそうなので、issueをクローズします。