第三弾:BlueTeamを勉強したいんじゃ!シリーズ
前回の記事でLABを作りました。今回はCovenantを使ってWin10に侵入してコマンドを実行するまでを行い、SecurityOnionでどの様にしてハンティングさせるかまでをやっていきます。
注意事項
- 自分環境以外には絶対に攻撃しないでください(本記事はハンティングが目的なので・・・)
全体の流れ(ざっくりレベル)
- マリシャスなWordを作成
- powershell起動&C2に接続
- SecurityOnionでハンティング
見つけたいもの
親プロセスがWordで子プロセスがpowershellの怪しい挙動をしているものをハンティングしたいと思います。
Covenant
Covenantは.NETで作成されたコマンドアンドコントロールフレームワークです。
Covenantのインストール方法はここを参考にしてください。
1. Listenertsの作成
2. PowerShell Launchersの作成
-
エンコードされたPowershellのコマンドをコピーします。
3. Wordに挿入
Sub AutoOpen()
Call Shell("エンコードされたPowershellのコマンド")
End Sub
- 保存します。
4. コマンド実行
SecurityOnionでハンティング
1. NIDSでの検知
Suricata
ET OPENルールではCovenant Frameworkの検知ルールがあり、以下の4つがアラートとして検知します。
- ET MALWARE Covenant Framework Default HTTP Beacon
- ET MALWARE Covenant Framework HTTP Beacon
- ET MALWARE Covenant Framework HTTP Hello World Server Response
- ET MALWARE Possible Covenant Framework Grunt PowerShell Stager HTTP Download
2. SIEMでの検知
SIEMの検知ルールを自分で作成するのはとても大変です。
今回は検知ルール作成にSigmaというものを使い検知させていきます。
Sigma
SigmaとはSIEMのYARAみたいなものになります。
Sigmaのルールを作成して使用することで、さまざまなターゲット(SIEMなど)に対して共有して実行できる汎用的なルールを持つことができます。
詳細はgithubを参照してください。
ルールは下記のように記述していきます。
チュートリアルはここにあるので詳しく知りたい人は参照してください。
title:タイトルは検出ルール
id [optional]:一意の識別子
description [optional]:ルールと悪意のあるアクティビティについて説明します。
author [optional]:ルールの作成者
references [optional]:ルールを導出するための情報源を提供先など
logsource:ログソース
category [optional]:この属性を使用すると、製品のグループに属するすべてのログファイルを選択できます。
product [optional]:すべてのルールに一致する製品
...
detection:ログデータの特定のフィールドの検索値が選択範囲に一覧表示されます。
{search-identifier} [optional]
{string-list} [optional]
{field: value} [optional]
etc・・・
Detection属性について
- リストとマップという2つの異なるデータ構造から定義します。
- リスト
- リストには、完全なログメッセージに適用される文字列が含まれており、論理的な「OR」でリンクされています。
- 例「EvilService」OR「svchost.exe -n evil」を検出するルール
detection:
keywords:
- EVILSERVICE
- svchost.exe -n evil
- マップ
- マップ(または辞書)は、キーと値のペアで構成され、キーはログデータのフィールドで、値は文字列または整数値です。マップのリストは、論理的な 'OR' で結合されます。マップのすべての要素は、論理的な「AND」で結合されます。
- 例イベントログ「セキュリティ」AND ( イベントID 517 またはイベントID 1102 ) を検出するルール
detection:
selection:
- EventLog: Security
EventID:
- 517
- 1102
condition: selection
イメージ
Sigmaルールをコンバーターで各SIEMの検知ルール又は検索クエリに変更して分析する。
サポートされているSIEM
- Splunk (plainqueries and dashboards)
- ElasticSearch Query Strings
- ElasticSearch Query DSL
- Kibana
- Elastic X-Pack Watcher
- Logpoint
- Microsoft Defender Advanced Threat Protection (MDATP)
- Azure Sentinel / Azure Log Analytics
- Sumologic
- ArcSight
- QRadar
- Qualys
- RSA NetWitness
- PowerShell
- Grep with Perl-compatible regular expression support
- LimaCharlie
- ee-outliers
- Structured Threat Information Expression (STIX)
Playbook
今回使用するルールは親プロセスがOffice系のアプリケーション且つ、子プロセスがシェル、スクリプトインタープリターなどを検知するのSigmaルールです。
title: Microsoft Office Product Spawning Windows Shell
id: 438025f9-5856-4663-83f7-52f878a70a50
status: experimental
description: Detects a Windows command line executable started from Microsoft Word, Excel, Powerpoint, Publisher and Visio.
references:
- https://www.hybrid-analysis.com/sample/465aabe132ccb949e75b8ab9c5bda36d80cf2fd503d52b8bad54e295f28bbc21?environmentId=100
- https://mgreen27.github.io/posts/2018/04/02/DownloadCradle.html
tags:
- attack.execution
- attack.defense_evasion
- attack.t1059
- attack.t1202
- car.2013-02-003
- car.2014-04-003
author: Michael Haag, Florian Roth, Markus Neis
date: 2018/04/06
logsource:
category: process_creation
product: windows
detection:
selection:
ParentImage:
- '*\WINWORD.EXE'
- '*\EXCEL.EXE'
- '*\POWERPNT.exe'
- '*\MSPUB.exe'
- '*\VISIO.exe'
- '*\OUTLOOK.EXE'
Image:
- '*\cmd.exe'
- '*\powershell.exe'
- '*\wscript.exe'
- '*\cscript.exe'
- '*\sh.exe'
- '*\bash.exe'
- '*\scrcons.exe'
- '*\schtasks.exe'
- '*\regsvr32.exe'
- '*\hh.exe'
- '*\wmic.exe' # https://app.any.run/tasks/c903e9c8-0350-440c-8688-3881b556b8e0/
- '*\mshta.exe'
- '*\rundll32.exe'
- '*\msiexec.exe'
- '*\forfiles.exe'
- '*\scriptrunner.exe'
- '*\mftrace.exe'
- '*\AppVLP.exe'
- '*\svchost.exe' # https://www.vmray.com/analyses/2d2fa29185ad/report/overview.html
condition: selection
fields:
- CommandLine
- ParentCommandLine
falsepositives:
- unknown
level: high
このSIGMAルールをコンバーターにかけてElasticsearchの検索クエリに変換したいと思います。
コンバーターはPlaybook又はSocprime(検知ルールなどマーケットプレイスや検出ルールを作成して、報奨金がもらえたりするプラットフォーム)のuncoder.ioで変換可能です。
PlaybookのSigma Editorで変換したクエリがしたになります。
(event.code.security:"1" AND winlog.channel.security:"Microsoft\-Windows\-Sysmon\/Operational" AND process.parent.executable.security:("*\\WINWORD.EXE" OR "*\\EXCEL.EXE" OR "*\\POWERPNT.exe" OR "*\\MSPUB.exe" OR "*\\VISIO.exe" OR "*\\OUTLOOK.EXE") AND process.executable.security:("*\\cmd.exe" OR "*\\powershell.exe" OR "*\\wscript.exe" OR "*\\cscript.exe" OR "*\\sh.exe" OR "*\\bash.exe" OR "*\\scrcons.exe" OR "*\\schtasks.exe" OR "*\\regsvr32.exe" OR "*\\hh.exe" OR "*\\wmic.exe" OR "*\\mshta.exe" OR "*\\rundll32.exe" OR "*\\msiexec.exe" OR "*\\forfiles.exe" OR "*\\scriptrunner.exe" OR "*\\mftrace.exe" OR "*\\AppVLP.exe" OR "*\\svchost.exe"))
このままでは上手く検索できないので修正します。
修正ポイントは下記の2点になります。
- process.parent.executable.security ⇒ process.parent.executable
- process.executable.security ⇒ process.executable
Elasticsearchのドキュメントの項目には〜.securityはないので(おそらくバグ?)手動で修正します。
修正したクエリをkibanaで検索すると以下のように検出することができます。
フィニッシュ!(マリパ風)
(event.code:"1" AND winlog.channel:"Microsoft\-Windows\-Sysmon\/Operational" AND process.parent.executable:("*\\WINWORD.EXE" OR "*\\EXCEL.EXE" OR "*\\POWERPNT.exe" OR "*\\MSPUB.exe" OR "*\\VISIO.exe" OR "*\\OUTLOOK.EXE") AND process.executable.:("*\\cmd.exe" OR "*\\powershell.exe" OR "*\\wscript.exe" OR "*\\cscript.exe" OR "*\\sh.exe" OR "*\\bash.exe" OR "*\\scrcons.exe" OR "*\\schtasks.exe" OR "*\\regsvr32.exe" OR "*\\hh.exe" OR "*\\wmic.exe" OR "*\\mshta.exe" OR "*\\rundll32.exe" OR "*\\msiexec.exe" OR "*\\forfiles.exe" OR "*\\scriptrunner.exe" OR "*\\mftrace.exe" OR "*\\AppVLP.exe" OR "*\\svchost.exe"))
参考サイト
- https://labs.f-secure.com/blog/attack-detection-fundamentals-initial-access-lab-1/
- https://note.com/lacnote/n/n5ffcebce3aef
次回
BlueTeamを勉強したいんじゃ!~osqueryでマルウェアハンティング編~