Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[bug] Fields get moved over in JSON output when a word like c: is in the field. #748

Closed
YamatoSecurity opened this issue Oct 15, 2022 · 10 comments · Fixed by #755
Closed
Assignees
Labels
bug Something isn't working
Milestone

Comments

@YamatoSecurity
Copy link
Collaborator

YamatoSecurity commented Oct 15, 2022

Describe the bug
When using JSON or JSONL output, when there is a word like hogehoge: in the field, it will be parsed as a field and move the other fields producing incorrect results.

json-bug

For example here, c: is in the command line options so it creates a c field and moves everything else over.

Step to Reproduce
Steps to reproduce the behavior:

  1. Create .json results with something like hayabusa -d ../hayabusa-sample-evtx -P all-field-info-verbose -j -o test.json
  2. Look for processes that are n/a
    Example: cat test.json | jq '.[] | select (.Proc == "n/a")'
    It should show something like this:
{
  "Timestamp": "2019-07-19 23:49:52.210 +09:00",
  "Computer": "MSEDGEWIN10",
  "Channel": "Sysmon",
  "EventID": 1,
  "Level": "info",
  "OtherTags": [
    "sysmon"
  ],
  "RecordID": 3727,
  "RuleTitle": "Proc Exec",
  "Cmd": "\"C:\\Windows\\system32\\cmd.exe\" /c \"for /R | %%f in (*.docx) do copy %%f c:\\temp\\\"",
  "c": "C:\\Windows\\System32\\cmd.exe",
  "Proc": "n/a",
  "OriginalFilename": "MSEDGEWIN10\\IEUser",
  "User": "powershell",
  "ParentCmd": 1568,
  "PID": "747F3D96-D890-5D31-0000-0010FA3F3200",
  "PGUID": "0x50951",
  "RuleFile": "1_ProcessCreated.yml",
  "EvtxFile": "../hayabusa-sample-evtx/EVTX-ATTACK-SAMPLES/AutomatedTestingTools/PanacheSysmon_vs_AtomicRedTeam01.evtx",
  "AllFieldInfo": "CommandLine: \"C:\\Windows\\system32\\cmd.exe\" /c \"for /R c: %%f in (*.docx) do copy %%f c:\\temp\\\" ¦ Company: Microsoft Corporation ¦ CurrentDirectory: C:\\AtomicRedTeam\\ ¦ Description: Windows Command Processor ¦ FileVersion: 10.0.17763.1 (WinBuild.160101.0800) ¦ Hashes: SHA1=8C5437CD76A89EC983E3B364E219944DA3DAB464,MD5=975B45B669930B0CC773EAF2B414206F,SHA256=3656F37A1C6951EC4496FABB8EE957D3A6E3C276D5A3785476B482C9C0D32EA2,IMPHASH=272245E2988E1E430500B852C4FB5E18 ¦ Image: C:\\Windows\\System32\\cmd.exe ¦ IntegrityLevel: High ¦ LogonGuid: 747F3D96-D4B4-5D31-0000-002051090500 ¦ LogonId: 0x50951 ¦ ParentCommandLine: powershell ¦ ParentImage: C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe ¦ ParentProcessGuid: 747F3D96-D6F7-5D31-0000-00104ACE2500 ¦ ParentProcessId: 3912 ¦ ProcessGuid: 747F3D96-D890-5D31-0000-0010FA3F3200 ¦ ProcessId: 1568 ¦ Product: Microsoft® Windows® Operating System ¦ RuleName:  ¦ TerminalSessionId: 1 ¦ User: MSEDGEWIN10\\IEUser ¦ UtcTime: 2019-07-19 14:49:52.202"
}

The c field should not exist.

Environment (please complete the following information):

  • OS: mac
  • hayabusa version: 1.7.1

Additional context

details output example: "Cmd: ""C:\Windows\system32\cmd.exe"" /c ""for /R c: %%f in (*.docx) do copy %%f c:\temp\"" ¦ Proc: C:\Windows\System32\cmd.exe ¦ etc...

When parsing the fields, it is probably necessary to check for the broken pipes (ex: ¦ Proc:). This is not a perfect solution but normally, broken pipes are not used so it should be good enough for now. The only problem is that there is no broken pipe in the first field, so some kind of exception has to be made for that.

追伸
@hitenkoku さんへ、 @fukusuket さんは主にバグ修正がしたいそうなので、このissueを彼にお願いしようと思っていますが、大丈夫ですか?

@YamatoSecurity YamatoSecurity added the bug Something isn't working label Oct 15, 2022
@YamatoSecurity YamatoSecurity added this to the v1.7.2 milestone Oct 15, 2022
@hitenkoku
Copy link
Collaborator

hitenkoku commented Oct 15, 2022

はい。問題ないです。もともと仕様として:で分けるという話でしたので、分けて良いものなのかの判別が難しいと思います。今回のケースの場合であれば、文字数で判定するなどの対応をするのが良いと思います。
結構複雑ではあるので、もし、難しそうであれば私にふってください

@hitenkoku
Copy link
Collaborator

https://github.com/Yamato-Security/hayabusa/blob/main/src/afterfact.rs#L1057

Detailsの中から:を切り出してキーを作っているのはここになりますので、今回はドライブレターで引っかかってしまっているのでsp.len() >2 を入れてもらえればよいかと思います。

試しに別ブランチで作成しておきますので参考としてご確認ください

@hitenkoku
Copy link
Collaborator

@YamatoSecurity

I did not check this bug. feature of separate fields when -P all-field-info is used.(separate fields feature against %Details%)

Please show config/profiles.yaml data.

@YamatoSecurity
Copy link
Collaborator Author

@hitenkoku あ、ごめんなさい!all-field-infoだと確かにdetails情報が出ないので、all-field-info-verboseやsuper-verboseで確認できると思います。

@hitenkoku
Copy link
Collaborator

hitenkoku commented Oct 16, 2022

@YamatoSecurity 対処が完了しました。こんな感じの出力になりますが問題なさそうでしょうか。profileはverboseで出力をしてみました。

{
    "Timestamp": "2019-07-19 23:49:52.210 +09:00",
    "Computer": "MSEDGEWIN10",
    "Channel": "Sysmon",
    "EventID": 1,
    "Level": "info",
    "OtherTags": [
        "sysmon"
    ],
    "RecordID": 3727,
    "RuleTitle": "Proc Exec",
    "Cmd": "\"C:\\Windows\\system32\\cmd.exe\" /c \"for /R c: %%f in (*.docx) do copy %%f c:\\temp\\\"",
    "Proc": "C:\\Windows\\System32\\cmd.exe",
    "User": "MSEDGEWIN10\\IEUser",
    "ParentCmd": "powershell",
    "PID": 1568,
    "PGUID": "747F3D96-D890-5D31-0000-0010FA3F3200",
    "LID": "0x50951",
    "RuleFile": "1_ProcessCreated.yml",
    "EvtxFile": "../hayabusa-sample-evtx\\EVTX-ATTACK-SAMPLES\\AutomatedTestingTools\\PanacheSysmon_vs_AtomicRedTeam01.evtx"
  }

@YamatoSecurity
Copy link
Collaborator Author

Detailsの中から:を切り出してキーを作っているのはここになりますので、今回はドライブレターで引っかかってしまっているのでsp.len() >2 を入れてもらえればよいかと思います。

そうですね。今回はドライブレターですが、hogehoge: のような文字列がたまたま入っている場合もあり得るので、broken pipeの存在でチェックした方がより確実かなと思いました。難しいのであれば、取り敢えずドライブレターチェックで対応して良いと思います。

@hitenkoku
Copy link
Collaborator

hitenkoku commented Oct 16, 2022

@YamatoSecurity 今回のケースだとbroken pipeは関係ないです。確かにbroken pipeでも分けていますが、今回のバグと言っている機能はDetailsの中で: があったら別のフィールドに分けるという機能です。こちらの機能を削除してDetailsをそのまま出すという方針にしたらバグはなくなりますがどうしますか?

@hitenkoku
Copy link
Collaborator

一旦対応方針を確認するためpendingにします

@hitenkoku hitenkoku modified the milestones: v1.7.2, v1.8.0 Oct 16, 2022
@YamatoSecurity
Copy link
Collaborator Author

色々悩みましたが、結論として:
恐らくミニマルなデータでJSONを保存して解析したいアナリストと最も多いデータを保存して解析したいアナリストが2種類いると思うので、両方に対応したいです。(また、データが少ない時は全部、データが膨大の時はミニマルという風に出力したいアナリストもいると思います)
ので、detailsは今のままJSON出力の場合は各フィールドを抽出したいです。見た感じではこのドライブレター以外の誤検知は無さそうなので、sp.len() >2 のhotfixをお願いできますか? @hitenkoku

@fukusuket もっと複雑なフィックスになると思いましたが、思ったより簡単に直せそうなので、PRを @hitenkoku にお願いしようと思います。(既に対応完了のため)お手数をかけて申し訳ありませんでした。この件について他に良い方法とか提案があれば、仰ってください。

@hitenkoku hitenkoku removed the pending label Oct 16, 2022
@hitenkoku
Copy link
Collaborator

@YamatoSecurity 承りました。それではhotfixとしてドライブレターを対応したものをpull-requestで出しておきます。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
None yet
3 participants