BlueTeamを勉強したいんじゃ！~Covenantハンティング編~

# 第三弾：BlueTeamを勉強したいんじゃ！シリーズ
[前回](https://qiita.com/ninja400/items/a95c6a1725201f12869d)の記事でLABを作りました。今回はCovenantを使ってWin10に侵入してコマンドを実行するまでを行い、SecurityOnionでどの様にしてハンティングさせるかまでをやっていきます。

# 注意事項
- 自分環境以外には絶対に攻撃しないでください(本記事はハンティングが目的なので・・・)

# 全体の流れ(ざっくりレベル)
1. マリシャスなWordを作成
2. powershell起動&C2に接続
3. SecurityOnionでハンティング

# 見つけたいもの
親プロセスがWordで子プロセスがpowershellの怪しい挙動をしているものをハンティングしたいと思います。
![Blueteam.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/509755/5b814056-7744-5279-49c2-797fcb07fca2.png)



# Covenant
Covenantは.NETで作成されたコマンドアンドコントロールフレームワークです。
Covenantのインストール方法は[ここ](https://github.com/cobbr/Covenant/wiki/Installation-And-Startup)を参考にしてください。
## 1. Listenertsの作成
- 「Listeners」　>　「Create」 を押下
![スクリーンショット 2020-10-21 223506.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/509755/695df03a-0dc8-7936-7051-26d7ff74f3fc.png)

- 「ConnectPort」および「ConnectAddress」を設定する
![スクリーンショット 2020-10-21 223614.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/509755/c51fdea0-8d1a-1b0d-5700-21c4f7a127b6.png)

## 2. PowerShell Launchersの作成
- 「Launchers」　> 「PowerShell」を押下
![スクリーンショット 2020-10-21 223731.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/509755/565e8de0-8a54-58cf-5b7a-330e5b0e2398.png)

- デフォルト設定のまま「Generate」を押下
![スクリーンショット 2020-10-21 223813.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/509755/59087740-f613-e59d-811b-d22329984330.png)

- URLにファイル名を入力して「host」を押下
![スクリーンショット 2020-10-21 224158.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/509755/38a27c8a-6cb8-f584-fb0f-9e275dc4340b.png)

- エンコードされたPowershellのコマンドをコピーします。
- 

## 3. Wordに挿入
- Wordの開発者ボックにチェックをいれて開発者タブを表示させます。
![スクリーンショット 2020-10-21 224420.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/509755/d12ed9f8-acbd-e6aa-7af1-e7c50d945b2a.png)

- 「開発者」タブの「VisualBasic」を選択します。
- VisualBasicエディターに以下のコマンドを記述します。

```
Sub AutoOpen()    
        Call Shell("エンコードされたPowershellのコマンド")
End Sub
```
- 保存します。

## 4. コマンド実行
- マクロ入りWordをやられWindowsに送り実行します。
![スクリーンショット 2020-10-21 225411.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/509755/2619e18a-ed31-f183-48fc-2d5b6f40129a.png)


# SecurityOnionでハンティング

## 1. NIDSでの検知
### Suricata
ET OPENルールではCovenant Frameworkの検知ルールがあり、以下の４つがアラートとして検知します。

- 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](https://github.com/Neo23x0/sigma)を参照してください。
ルールは下記のように記述していきます。
チュートリアルは[ここ](https://www.nextron-systems.com/2018/02/10/write-sigma-rules/)にあるので詳しく知りたい人は参照してください。

```
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の検知ルール又は検索クエリに変更して分析する。
![プレゼンテーション1.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/509755/471973fe-4f5f-6304-6219-68e4f78b3870.jpeg)

#### サポートされている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](https://uncoder.io/)で変換可能です。

Sigma Editor
![Screenshot from 2020-11-19 23-02-44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/509755/c1d2dd4e-a045-ccd5-7475-1eebd356a121.png)


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点になります。
1. process.parent.executable.security　⇒　process.parent.executable
2. 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"))
```

![Screenshot from 2020-11-19 23-10-14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/509755/7f3a88b7-d342-a5a8-3565-49e77435db8e.png)


# 参考サイト
- https://labs.f-secure.com/blog/attack-detection-fundamentals-initial-access-lab-1/
- https://note.com/lacnote/n/n5ffcebce3aef

# 次回
BlueTeamを勉強したいんじゃ！~osqueryでマルウェアハンティング編~