Linux用 Microsoft Defender for Endpointを使ってリアルタイムスキャン/PUA検知/脆弱性スキャンを実現する


# はじめに

Linux用MicrosoftDefender for Endpointにはマルウェア対策とエンドポイント検出と応答（EDR）機能が含まれています。今回はこれを試そうと思います。マルウェア検知に関しては、いつもどうするかなーと頭を悩ましているのですが一つの選択肢になりそうです。

今回はこんなことをやっていこうと思います。

1. Defender for Endpointを有効化
2. マルウェアのリアルタイムスキャンの有効化＆テストウィルスファイルを使って検知させる
3. PUA検出の有効化＆テスト用PUAファイルを使って検知させる
4. 脆弱性検査

https://learn.microsoft.com/ja-jp/microsoft-365/security/defender-endpoint/microsoft-defender-endpoint-linux?view=o365-worldwide

ちなみに大変ややこしいのですが、Defender for Cloudの一つがDefender for Serversとなり、これがDefender for Endpoint for Serversのライセンスを含むことからこの機能を利用できるようです。

https://learn.microsoft.com/ja-jp/azure/defender-for-cloud/integration-defender-for-endpoint#what-are-the-licensing-requirements-for-microsoft-defender-for-endpoint

# Defender for Cloudを有効にする

Defender for Cloudを有効にする

![Untitled.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/57686/eff37830-c154-c97f-fd0c-a81fc673edfa.png)

デフォルトだと全部ONになってしまうので不要なものはオフに設定する

![Untitled 1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/57686/b43cbe8e-95a8-80c0-7199-8ca8e8d98b20.png)

今回はDefender for Endpointが利用したいので、プラン１を選択した

![Untitled 2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/57686/4fb37208-4e8d-9a51-21de-68b4dd62286e.png)


# インストール要件を確認

今回はUbuntu20.04を利用することにしました。Redhatなどももちろん利用可能です。

その他ハードウェアの要件についても記載があるので確認します。

https://learn.microsoft.com/ja-jp/microsoft-365/security/defender-endpoint/microsoft-defender-endpoint-linux?view=o365-worldwide

接続先のネットワークは[こちら](https://learn.microsoft.com/ja-jp/microsoft-365/security/defender-endpoint/microsoft-defender-endpoint-linux?view=o365-worldwide#network-connections)を確認。ブロックされていないことを確認する。

# mdatpをインストールしていく（Ubuntu20.04の場合）

Linuxサーバ内ではmdatpというデーモンが起動してこれがウィルス検知などの役割を負います。

ドキュメントには色々書いてありますが、以下のコマンドをコピペして貼ってください。

```bash
sudo apt update
```

```bash
sudo apt install libplist-utils
```

```bash
curl -o microsoft.list https://packages.microsoft.com/config/ubuntu/22.04/prod.list
```

```bash
sudo mv ./microsoft.list /etc/apt/sources.list.d/microsoft-prod.list
```

```bash
sudo apt install gpg
```

```bash
curl -sSL https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor | sudo tee /etc/apt/trusted.gpg.d/microsoft.gpg > /dev/null
```

```bash
sudo apt install apt-transport-https
```

```bash
sudo apt update
```

```bash
sudo apt install mdatp
```

サービスの起動を確認しておきます

```bash
$ sudo service mdatp status
● mdatp.service - Microsoft Defender
     Loaded: loaded (/lib/systemd/system/mdatp.service; enabled; vendor preset: enabled)
     Active: active (running) since Mon 2023-02-06 06:18:59 UTC; 1 day 18h ago
   Main PID: 3612 (wdavdaemon)
      Tasks: 159 (limit: 4095)
     Memory: 539.9M
     CGroup: /system.slice/mdatp.service
             ├─  3612 /opt/microsoft/mdatp/sbin/wdavdaemon
             ├─  3636 /opt/microsoft/mdatp/sbin/wdavdaemon edr 10 9 --log_level info
             ├─179408 /opt/microsoft/mdatp/sbin/wdavdaemon unprivileged 62 64 66 68 19 --log_level info
             └─200556 /opt/microsoft/mdatp/sbin/telemetryd_v2 33"

Feb 06 06:18:59 vm-plat-ubuntu2004 systemd[1]: mdatp.service: Succeeded.
Feb 06 06:18:59 vm-plat-ubuntu2004 systemd[1]: Stopped Microsoft Defender.
Feb 06 06:18:59 vm-plat-ubuntu2004 systemd[1]: Started Microsoft Defender.
Feb 07 22:42:13 vm-plat-ubuntu2004 wdavdaemon[3636]: avc:  could not determine enforcing mode: No such file or directory
```

# オンボーディング

mdatp healthコマンドを実行するとライセンスがない旨出力されると思います。

これを解消するには、DefenderポータルにあるPythonスクリプトをダウンロードして実行してライセンスを付与する必要があります。これをオンボーディングと言います。

```python
$ mdatp health --field healthy
false
```

まずはDefenderポータルを開く

[Sign in to your account](https://sip.security.microsoft.com/homepage)

[設定] [エンドポイント] > [デバイス管理>] [オンボード] >の順に移動

![Untitled 3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/57686/403828f9-8d5d-fb99-4c7d-90878e8d748a.png)


スクリプトをダウンロードして実行します。

```python
$ sudo python MicrosoftDefenderATPOnboardingLinuxServer.py
Generating /etc/opt/microsoft/mdatp/mdatp_onboard.json ...
```

IDが取得できることを確認する

```python
$ mdatp health --field org_id
"aacebf9a-98bf-4f22-8a66-dfc3c8b61c3c"
```

healthyもtrueになることを確認する

```bash
$ mdatp health --field healthy
true
```

これで準備はOKです。早速動作確認していきます。

# 動作確認

リアルタイムスキャンがどうなっているか確認します。

```python
mdatp health --field real_time_protection_enabled
```

falseが表示されている場合は有効化します。

```python
mdatp config real-time-protection --value enabled
```

この状態で脅威がないことを確認する

```bash
$ mdatp threat list
No threats.
```

テスト用のファイルをダウンロード

- EICARというファイルはテスト用のウィルスファイルです（安全です）

```bash
$ curl -o /tmp/eicar.com.txt https://www.eicar.org/download/eicar.com.txt
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100    68  100    68    0     0     53      0  0:00:01  0:00:01 --:--:--    53
```

すぐ脅威が検出可能

```bash
$ mdatp threat list
Id: "60194780-0aaf-49c3-8aba-8b709aea9c75"
Name: Virus:DOS/EICAR_Test_File
Type: "virus"
Detection time: Tue Feb  7 08:26:49 2023
Status: "quarantined"
```

Defenderポータルにもデバイスが表示される

![Untitled 4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/57686/63168250-e4fc-bcc6-c3cf-05a4d6aca127.png)


アラートタブを見ると先ほどのEICARが表示されてる！

![Untitled 5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/57686/271719d1-57c3-d510-edc4-e4adc79d704d.png)


# 通知するには？

Defenderポータル→設定→エンドポイントから設定します。

![Untitled 6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/57686/3f4080ac-62f0-812a-9959-6f970be12df6.png)


もういちどEICARをダウンロードして、検知させてみるとメールが飛んでくることが確認できると思います。

![Untitled 7.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/57686/12635d8d-dc61-f8da-769d-3fb3359338a0.png)


# 更新

Linux用のDefender for Endpointの各バージョンには有効期限があり、Updateする必要がある。更新されないと止まってしまうので注意が必要です。

https://learn.microsoft.com/ja-jp/microsoft-365/security/defender-endpoint/linux-updates?source=recommendations&view=o365-worldwide

有効期限を調べるには以下のコマンドを実行する

```bash
$ mdatp health --field product_expiration
Sep 16, 2023 at 05:17:54 PM
```

Updateはコマンド一発(今回は最新だったので更新されなかった模様）

```bash
$ sudo apt install --only-upgrade mdatp
Reading package lists... Done
Building dependency tree       
Reading state information... Done
mdatp is already the newest version (101.94.13).
0 upgraded, 0 newly installed, 0 to remove and 9 not upgraded.
```

ご丁寧にcronの設定方法まで記載されていました。ただ、失敗時の対応が書かれていませんのでログの監視や有効期限の監視は行っておいたほうがよさそうです。

https://learn.microsoft.com/ja-jp/microsoft-365/security/defender-endpoint/linux-update-mde-linux?source=recommendations&view=o365-worldwide

# 推奨される構成プロファイル

mdatpには設定ファイルがあり、これを修正することで様々な機能を利用することができます

設定ファイルを修正した場合、デーモンの再起動は必要ないようです。（[参考](https://learn.microsoft.com/ja-jp/microsoft-365/security/defender-endpoint/linux-preferences?view=o365-worldwide#verifying-that-the-mdatp_managedjson-file-is-working-as-expected)）

```bash
$ sudo cat /etc/opt/microsoft/mdatp/managed/mdatp_managed.json
{
   "antivirusEngine":{
      "enforcementLevel":"real_time",
      "threatTypeSettings":[
         {
            "key":"potentially_unwanted_application",
            "value":"block"
         },
         {
            "key":"archive_bomb",
            "value":"audit"
         }
      ]
   },
   "cloudService":{
      "automaticDefinitionUpdateEnabled":true,
      "automaticSampleSubmissionConsent":"safe",
      "enabled":true
   }
}
```

推奨される構成プロファイルはこちらに記載がありました

https://learn.microsoft.com/ja-jp/microsoft-365/security/defender-endpoint/linux-preferences?view=o365-worldwide#recommended-configuration-profile

# PUA保護(potentially_unwanted_application)

https://learn.microsoft.com/ja-jp/microsoft-365/security/defender-endpoint/linux-pua?view=o365-worldwide

ウイルス、マルウェア、またはその他の種類の脅威とは見なされませんが、パフォーマンスや使用に悪影響を与える可能性があるアプリケーションをブロックしたりできます。

既定では何もしませんが、推奨される構成プロファイルではブロックされているのでこれの動作検証をしていきます。

セキュリティ製品のテスト標準化団体 AMSTO （Anti-Malware Testing Standards Organization）がテスト用のファイルを配布しているのでこちらから入手します。

https://www.amtso.org/feature-settings-check-potentially-unwanted-applications/

PUA保護が有効になっているVMでwgetしてみましょう

```bash
wget http://amtso.eicar.org/PotentiallyUnwanted.exe
```

ちゃんとPUAとして検知されました。

```bash
$ mdatp threat list
Id: "4a6d516c-5e18-46b5-b890-517fc3a4d568"
Name: PUA:Win32/EICAR_Test_File
Type: "potentially_unwanted_application"
Detection time: Wed Feb  8 01:49:39 2023
Status: "quarantined"
```

# 脆弱性検知

なんと脆弱性検知もできます・・・。mdatpをインストール後しばらくたつと在庫というところでパッケージのリストが表示されました。

![Untitled 8.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/57686/319a23fe-1fc2-e4ce-586a-f47ea9cbb6b4.png)


しばらくたつと「弱点」というところに脆弱性の一覧が表示されました。CVSSのスコアなんかも表示されます。

![Untitled 9.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/57686/6cff1f4e-858b-2ee1-a463-f59df020da98.png)


ちなみにこれも設定→エンドポイント→メール通知から通知の設定を行うことができます。すっご・・・。

届いたメールがこちら

![Untitled 10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/57686/7546755a-bea3-50b8-7284-95c3a522c0f7.png)


View recommendationsを選択すると何をしたらよいか教えてくれます

![Untitled 11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/57686/10796085-fb1e-7586-f238-23dac9aedd33.png)

ついでにパッケージを更新してみます。まずはupgradeできるか確認します

おお。。。ドンピシャ。

```bash
$ sudo apt list --upgradable
Listing... Done
libssl1.1/focal-updates,focal-security 1.1.1f-1ubuntu2.17 amd64 [upgradable from: 1.1.1f-1ubuntu2.16]
openssl/focal-updates,focal-security 1.1.1f-1ubuntu2.17 amd64 [upgradable from: 1.1.1f-1ubuntu2.16]
```

ということでアップグレードしてみます

```bash
$ sudo apt upgrade
Reading package lists... Done
Building dependency tree       
Reading state information... Done
Calculating upgrade... Done
The following packages will be upgraded:
  libssl1.1 openssl
2 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
2 standard LTS security updates
Need to get 1944 kB of archives.
After this operation, 4096 B of additional disk space will be used.
Do you want to continue? [Y/n] Y
Get:1 http://azure.archive.ubuntu.com/ubuntu focal-updates/main amd64 libssl1.1 amd64 1.1.1f-1ubuntu2.17 [1322 kB]
Get:2 http://azure.archive.ubuntu.com/ubuntu focal-updates/main amd64 openssl amd64 1.1.1f-1ubuntu2.17 [622 kB]
Fetched 1944 kB in 0s (29.1 MB/s)
Preconfiguring packages ...
(Reading database ... 68954 files and directories currently installed.)
Preparing to unpack .../libssl1.1_1.1.1f-1ubuntu2.17_amd64.deb ...
Unpacking libssl1.1:amd64 (1.1.1f-1ubuntu2.17) over (1.1.1f-1ubuntu2.16) ...
Preparing to unpack .../openssl_1.1.1f-1ubuntu2.17_amd64.deb ...
Unpacking openssl (1.1.1f-1ubuntu2.17) over (1.1.1f-1ubuntu2.16) ...
Setting up libssl1.1:amd64 (1.1.1f-1ubuntu2.17) ...
Setting up openssl (1.1.1f-1ubuntu2.17) ...
Processing triggers for man-db (2.9.1-1) ...
Processing triggers for libc-bin (2.31-0ubuntu9.9) ...
```

しばらくすると脆弱性の推奨事項からも消えました。

推奨事項の一覧から修正を依頼したりすることもできるようで至れり尽くせりでした。

# その他

Plan2独自の機能も存在するようです。プランの比較はこちらをどうぞ

https://learn.microsoft.com/en-us/microsoft-365/security/defender-endpoint/defender-endpoint-plan-1-2?view=o365-worldwide#compare-microsoft-endpoint-security-plans-1