Cloud One Workload SecurityのAPIを利用してポリシー設定をしてみた

2021.03.29

こんにちは、コンサル部@大阪オフィスのTodaです。

Cloud One Workload SecurityのAPIを利用して自動化を試しています。
今回はポリシー設定をモジュール別に設定してみました。

Cloud One Workload Securityとは?

トレンドマイクロ社が提供している製品でサーバ保護に必要な複数のセキュリティ機能を提供するクラウド型総合サーバセキュリティサービスです。
詳細は公式サイトをご覧ください。

同システムには自動化するためのAPIとSDKが用意されています。
下記マニュアルを参考に操作をしていきます。

■ Workload Security Python SDK
https://cloudone.trendmicro.com/docs/jp/workload-security/sdk-python/

■ Trend Micro Deep Security API (50.0.245)
https://cloudone.trendmicro.com/docs/workload-security/api-reference/

目標

  • ポリシー設定にて各モジュール別に設定をする。

前提条件

  • Python3系が動作できる環境
  • Cloud One トライアル版アカウント登録し、利用できる状態
  • API利用の準備編を試している

モジュールについて

CloudOneのポリシーには複数のモジュール(監視・対策に関する機能)があります。
2021年03月時点で下記モジュールが提供されています。

  • 不正プログラム対策
  • Webレピュテーション
  • アクティビティ監視
  • アプリケーションコントロール
  • 変更監視
  • セキュリティログ監視
  • ファイアウォール
  • 侵入防御

モジュール別設定

今回はモジュール別で[タブ:一般]の設定を試してみます。
細かい設定についてはTrend Micro Deep Security APIのマニュアルを参照ください。

不正プログラム対策

不正プログラム対策

リアルタイム検索、手動検索、予約検索には別途作成した検索設定をID指定に指定します。
Defaultと表記されている検索設定はCloudOneのデフォルト設定になります。

サンプルコード

policy.anti_malware = deepsecurity.AntiMalwarePolicyExtension()
policy.anti_malware.state = "on"                            # ステータス(on/off)
policy.anti_malware.real_time_scan_configuration_id = 1     # リアルタイム検索 Default Real-Time Scan Configuration
policy.anti_malware.real_time_scan_schedule_id = 1          # リアルタイム検索 Daily(id=1)
policy.anti_malware.manual_scan_configuration_id = 2        # 手動検索 Default Manual Scan Configuration(id=2)
policy.anti_malware.scheduled_scan_configuration_id = 2     # 予約検索 Default Manual Scan Configuration(id=2)

Webレピュテーション

Webレピュテーション セキュリティレベルの指定でブロック対象の範囲を指定します。

レベル(引数) ブロック範囲
High 危険: 不正、または脅威の既知の発信源であると確認されたページ
非常に不審: 不正または脅威の発信源である可能性が疑われたページ
不審: スパムメールに関連付けられている、または感染している可能性のあるページ
Medium 危険: 不正、または脅威の既知の発信源であると確認されたページ
非常に不審: 不正または脅威の発信源である可能性が疑われたページ
Low 危険: 不正、または脅威の既知の発信源であると確認されたページ

サンプルコード

policy.web_reputation = deepsecurity.WebReputationPolicyExtension()
policy.web_reputation.state = "on"                          # ステータス(on/off)
policy.policy_settings.web_reputation_setting_security_level = deepsecurity.SettingValue()
policy.policy_settings.web_reputation_setting_security_level.value = "Medium"  # セキュリティレベル(High/Medium/Low)
policy.policy_settings.web_reputation_setting_security_block_untested_pages_enabled = deepsecurity.SettingValue()
policy.policy_settings.web_reputation_setting_security_block_untested_pages_enabled.value = "false"  # トレンドマイクロ テストなしページブロックするか(true/false)

アクティビティ監視

アクティビティ監視

サンプルコード

policy.activity_monitoring = deepsecurity.ActivityMonitoringPolicyExtension()
policy.activity_monitoring.state = "on"                     # ステータス(on/off)

アプリケーションコントロール

アプリケーションコントロール

未承認のアプリケーション動作を許可・ブロックするルールについて指定します。

施行(引数) ルール
true 承認されていないソフトウェアを明示的に許可するまでブロック
false 承認されていないソフトウェアを明示的にブロックするまで許可

サンプルコード

policy.application_control = deepsecurity.ApplicationControlPolicyExtension()
policy.application_control.state = "on"                     # ステータス(on/off)
policy.application_control.block_unrecognized = "false"     # 施行(true/false)

変更監視

変更監視

ステータスの指定にてリアルタイム検索を有効化することがでます。

ステータス(引数) 状態 リアルタイム
real-time ○ 有効 ○ 有効
on ○ 有効 × 無効
off × 無効 × 無効

サンプルコード

policy.integrity_monitoring = deepsecurity.IntegrityMonitoringPolicyExtension()
policy.integrity_monitoring.state = "real-time"             # ステータス(on/off/real-time)
policy.policy_settings.integrity_monitoring_setting_auto_apply_recommendations_enabled = deepsecurity.SettingValue()
policy.policy_settings.integrity_monitoring_setting_auto_apply_recommendations_enabled.value = "Yes"    # 自動的に適用

セキュリティログ監視

セキュリティログ監視

サンプルコード

policy.log_inspection = deepsecurity.LogInspectionPolicyExtension()
policy.log_inspection.state = "on"                          # ステータス(on/off)
policy.policy_settings.log_inspection_setting_auto_apply_recommendations_enabled = deepsecurity.SettingValue()
policy.policy_settings.log_inspection_setting_auto_apply_recommendations_enabled.value = "Yes"    # 自動的に適用

ファイアウォール

ファイアウォール

ファイアウォールステートフル設定はデフォルト5点が設定されています。

ID 設定名
1 Enable Stateful Inspection
2 Deep Security Manager Stateful
3 Web Server Stateful
4 FTP Server Stateful
5 No Stateful Inspection

サンプルコード

policy.firewall = deepsecurity.FirewallPolicyExtension()
policy.firewall.state = "on"                                # ステータス(on/off)
policy.firewall.global_stateful_configuration_id = 1        # ファイアウォールステートフル設定(id)
policy.policy_settings.firewall_setting_virtual_and_container_network_scan_enabled = deepsecurity.SettingValue()
policy.policy_settings.firewall_setting_virtual_and_container_network_scan_enabled.value = "true"  # コンテナのネットワークトラフィックの検索(true/false)

侵入防御

侵入防御

侵入防御の動作は判定時に通信を遮断するか、記録・通知のみおこなうか設定になります。

動作(引数) 設定名 通信遮断 ログ記録、管理者に通知
prevent 防御モード ○ 有効 ○ 有効
detect 検出モード × 無効 ○ 有効

サンプルコード

policy.intrusion_prevention = deepsecurity.IntrusionPreventionPolicyExtension()
policy.intrusion_prevention.state = "detect"                # 侵入防御の動作(detect/prevent)
policy.policy_settings.intrusion_prevention_setting_auto_apply_recommendations_enabled = deepsecurity.SettingValue()
policy.policy_settings.intrusion_prevention_setting_auto_apply_recommendations_enabled.value = "Yes"    # 自動的に適用

全てのモジュール設定を合わせたサンプルスクリプト

from __future__ import print_function
import sys
import warnings
import datetime
import time
import deepsecurity
from deepsecurity.rest import ApiException
from pprint import pprint

# 初期設定
if not sys.warnoptions:
    warnings.simplefilter("ignore")
configuration = deepsecurity.Configuration()
configuration.host = 'https://cloudone.trendmicro.com/api'

# API認証情報
configuration.api_key['api-secret-key'] = '[APIキー]'

# APIリクエスト情報設定
api_version = 'v1'
api_instance = deepsecurity.PoliciesApi(deepsecurity.ApiClient(configuration))
overrides = False

# ポリシー設定
# 基本設定
policy = deepsecurity.Policy()
policy.parent_id = 0
policy.name = "Sample Policy"                               # ポリシー名
policy.description = "Sample Policyについて"                # 説明
policy.policy_settings = deepsecurity.PolicySettings()

# 不正プログラム対策 Anti Malware
policy.anti_malware = deepsecurity.AntiMalwarePolicyExtension()
policy.anti_malware.state = "on"                            # ステータス(on/off)
policy.anti_malware.real_time_scan_configuration_id = 1     # リアルタイム検索 Default Real-Time Scan Configuration
policy.anti_malware.real_time_scan_schedule_id = 1          # リアルタイム検索 Daily(id=1)
policy.anti_malware.manual_scan_configuration_id = 2        # 手動検索 Default Manual Scan Configuration(id=2)
policy.anti_malware.scheduled_scan_configuration_id = 2     # 予約検索 Default Manual Scan Configuration(id=2)

# Webレピュテーション Web Reputation
policy.web_reputation = deepsecurity.WebReputationPolicyExtension()
policy.web_reputation.state = "on"                          # ステータス(on/off)
policy.policy_settings.web_reputation_setting_security_level = deepsecurity.SettingValue()
policy.policy_settings.web_reputation_setting_security_level.value = "Medium"  # セキュリティレベル(High/Medium/Low)
policy.policy_settings.web_reputation_setting_security_block_untested_pages_enabled = deepsecurity.SettingValue()
policy.policy_settings.web_reputation_setting_security_block_untested_pages_enabled.value = "false"  # トレンドマイクロ テストなしページブロックするか(true/false)

# アクティビティ監視 Activity Monitoring
policy.activity_monitoring = deepsecurity.ActivityMonitoringPolicyExtension()
policy.activity_monitoring.state = "on"                     # ステータス(on/off)

# アプリケーションコントロール Application Control
policy.application_control = deepsecurity.ApplicationControlPolicyExtension()
policy.application_control.state = "on"                     # ステータス(on/off)
# policy.application_control.block_unrecognized = "true"    # 施行:承認されていないソフトウェアを明示的に許可するまでブロック
policy.application_control.block_unrecognized = "false"     # 施行:承認されていないソフトウェアを明示的にブロックするまで許可

# 変更監視 Integrity Monitoring
policy.integrity_monitoring = deepsecurity.IntegrityMonitoringPolicyExtension()
policy.integrity_monitoring.state = "real-time"             # ステータス(on/off/real-time)
policy.policy_settings.integrity_monitoring_setting_auto_apply_recommendations_enabled = deepsecurity.SettingValue()
policy.policy_settings.integrity_monitoring_setting_auto_apply_recommendations_enabled.value = "Yes"    # 自動的に適用

# セキュリティログ監視 Log Inspection
policy.log_inspection = deepsecurity.LogInspectionPolicyExtension()
policy.log_inspection.state = "on"                          # ステータス(on/off)
policy.policy_settings.log_inspection_setting_auto_apply_recommendations_enabled = deepsecurity.SettingValue()
policy.policy_settings.log_inspection_setting_auto_apply_recommendations_enabled.value = "Yes"    # 自動的に適用

# ファイアウォール (設定なし)
policy.firewall = deepsecurity.FirewallPolicyExtension()
policy.firewall.state = "on"                                # ステータス(on/off)
policy.firewall.global_stateful_configuration_id = 1        # ファイアウォールステートフル設定(id)
policy.policy_settings.firewall_setting_virtual_and_container_network_scan_enabled = deepsecurity.SettingValue()
policy.policy_settings.firewall_setting_virtual_and_container_network_scan_enabled.value = "true"  # コンテナのネットワークトラフィックの検索(true/false)

# 侵入防止 Intrusion Prevention
policy.intrusion_prevention = deepsecurity.IntrusionPreventionPolicyExtension()
policy.intrusion_prevention.state = "detect"                # 侵入防御の動作(検出モード:detect/防御モード:prevent)
policy.policy_settings.intrusion_prevention_setting_auto_apply_recommendations_enabled = deepsecurity.SettingValue()
policy.policy_settings.intrusion_prevention_setting_auto_apply_recommendations_enabled.value = "Yes"    # 自動的に適用

try:
    #pprint(policy)
    api_response = api_instance.create_policy(policy, api_version, overrides=overrides)
    pprint(api_response)
except ApiException as e:
    print("An exception occurred when calling PolicyApi.create_policy: %s\n" % e)

さいごに

今回はCloud One Workload SecurityのAPIを使ってポリシー設定をしてみました。
自動化をする中で設定の操作は必要になりますのでまとめております。