このドキュメントでは、 Netskope Cloud Exchangeプラットフォームの Threat Exchange モジュール用の OpenCTI v1.0.0 プラグインを構成する方法について説明します。 このプラグインは、OpenCTI の Observable から、URL、IPv4、ドメイン、IPv6、SHA256、MD5 タイプのインジケータを取得します。このプラグインは、 Add Indicatorsアクションを使用して、OpenCTI プラットフォーム上の Observable への MD5、SHA256、URL、ドメイン、IPv4、および IPv6 の共有をサポートします。
前提条件
この設定を完了するには、以下が必要です。
- Netskopeテナント(または、例えば本番環境と開発/テスト環境など、複数のテナント)。
- Netskope Cloud Exchangeテナントには、テナントプラグインと脅威交換プラグインが既に設定済みです。
- OpenCTI プラットフォーム クレデンシャル (ベース URL および API キー)。
- 以下のホストへの接続: OpenCTI ベース URL。
プラグインスコープ
OpenCTIプラグインは、OpenCTI上のオブザーバブルから、URL、IPv4、ドメイン、IPv6、SHA256、MD5タイプのIoCを取得します。このプラグインは、 Add Indicatorsアクションを使用して、OpenCTI プラットフォーム上の Observable への MD5、SHA256、URL、ドメイン、IPv4、および IPv6 の共有をサポートします。
サポートされているデータタイプ
| 取得したインジケータータイプ | 共有指標タイプ |
|---|---|
| URL、IPv4、ドメイン、IPv6、SHA256、MD5 | URL、IPv4、ドメイン、IPv6、SHA256、MD5 |
マッピング
プルマッピング
| Netskope CE Fields | OpenCTIフィールド |
|---|---|
| value | pattern |
| タイプ | スティックパターンからの抜粋 |
| expiresAt | valid_until |
| firstSeen | created |
| lastSeen | modified |
| reputation | confidence |
| tags | objectLabel |
| コメント | デスクリプション、減衰スコア、有効期限 |
| extendedInformation | indicator url |
プッシュマッピング
| Netskope CE Fields | OpenCTIフィールド |
|---|---|
| 名前 | インジケーター追加アクションから名前パラメータを取得 |
| Score | Input parameter from add indicators actions |
| value | pattern |
| タイプ | x_opencti_main_observable_type |
| reputation | confidence |
| Tag | netskope-ce Netskope CE | <Source Plugin Name> |
権限
OpenCTIでは、ユーザーがインジケーターのプッシュ、プル、削除などの操作を効果的に行うためには、必要な役割と権限を持つ特定のユーザーグループに割り当てられる必要があります。これらの役割によって、ユーザーはこれらのタスクを実行するために必要なアクセス権限と許可を確実に取得できます。
指標管理に必要な主要な役割と能力は以下のとおりです。
- 知識の作成/更新:この役割により、ユーザーは知識記事や知識オブジェクトを作成および更新し、必要に応じて指標を変更できるようになります。
- 知識の削除:ユーザーは、知識や指標を削除する機能を持っている必要があります。これは、古くなったデータや誤ったデータを削除する際に必要となります。
- 分類体系の管理:分類体系を管理および整理する機能は、ユーザーが指標を効果的に分類および維持するために重要です。
これらの役割をユーザーに割り当てることで、ユーザーはOpenCTI内で指標を管理する完全な権限(プッシュ、プル、削除など)を持つことができ、同時に知識と分類体系の適切なガバナンスと組織化も確保されます。
APIの詳細
使うAPI一覧
| APIエンドポイント | 方法 | 使うケース |
|---|---|---|
| https://<opencti_baseurl>/graphql | 役職 | クレデンシャルを検証する |
| https://<opencti_baseurl>/graphql | 役職 | プルインジケーター |
| https://<opencti_baseurl>/graphql | 役職 | プッシュインジケーター |
| https://<opencti_baseurl>/graphql | 役職 | インジケーターを削除 |
ベアラートークンを取得する
API Key – APIキーはOpenCTI UIのプロファイルページで入手できます。
Validate Credentials
API Endpoint: https://<base_url>/graphql
Method: 役職
Request Headers
| 鍵 | Value |
|---|---|
| Authorization | Bearer <API Key> |
| ユーザーエージェント | netskope-ce-5.1.1-cte-opencti-v1.0.0 |
Sample API Response
{
"data": {
"indicators": {
"edges": [
{
"node": {
"id": "08a0e35b-5749-4d08-80a9-9f9e8abf1cd4",
"entity_type": "Indicator",
"name": "testing 4",
"pattern_type": "stix",
"pattern": "[file:hashes.'MD5' = '932e07750da28e9d40350ffc840ffb8a']",
"valid_from": "2025-03-13T07:10:55.521Z",
"valid_until": "2026-03-15T04:22:42.820Z",
"revoked": false,
"x_opencti_score": 90,
"description": null,
"x_opencti_main_observable_type": "StixFile",
"created": "2025-03-06T05:17:37.578Z",
"modified": "2025-03-13T07:12:35.933Z",
"confidence": 40,
"draftVersion": null,
"createdBy": null,
"objectMarking": [],
"objectLabel": [
{
"id": "1226a53e-962a-4c11-a0d1-c4cdfc9d0729",
"value": "performance",
"color": "#b8e986"
}
],
"creators": [
{
"id": "88ec0c6a-13ce-5e39-b486-354fe4a7084f",
"name": "admin"
}
],
"__typename": "Indicator"
},
"cursor": "WzAuMDAwMDAzMjY0MjAyOSwiaW5kaWNhdG9yLS0wMDAxNWU0OC05YWRmLTU1YjItODlhZi05OTQzZGE5YjBkZDYiXQ=="
}
],
"pageInfo": {
"endCursor": "WzAuMDAwMDAzMjY0MjAyOSwiaW5kaWNhdG9yLS0wMDAxNWU0OC05YWRmLTU1YjItODlhZi05OTQzZGE5YjBkZDYiXQ==",
"hasNextPage": true,
"globalCount": 123134
}
}
}
}
プルインジケーター:
API Endpoint: https://<base_url>/graphql
Method: POST
Request Headers
| 鍵 | Value |
|---|---|
| Authorization | Bearer <API Key> |
| ユーザーエージェント | netskope-ce-5.1.1-cte-opencti-v1.0.0 |
Graphql Query
query Indicators(
$filters: FilterGroup,
$search: String,
$first: Int,
$after: ID,
$orderBy: IndicatorsOrdering,
$orderMode: OrderingMode
) {
indicators(
filters: $filters,
search: $search,
first: $first,
after: $after,
orderBy: $orderBy,
orderMode: $orderMode
) {
edges {
node {
id
objectLabel {
id
value
color
}
revoked
confidence
created
modified
pattern_type
pattern
description
indicator_types
valid_from
valid_until
x_opencti_score
x_opencti_main_observable_type
}
}
pageInfo {
startCursor
endCursor
hasNextPage
hasPreviousPage
globalCount
}
}
}
Graphql Variable
{
"first": 1000,
"after": None,
"orderBy": "modified",
"orderMode": "desc",
"filters": {
"mode": "and",
"filters": [
{
"key": "entity_type",
"values": ["Indicator"],
"operator": "eq",
"mode": "or",
},
{
"key": "pattern_type",
"values": ["stix"],
"operator": "eq",
"mode": "or",
},
],
"filterGroups": [{"mode": "and", "filters": [], "filterGroups": []}],
},
}
Sample API Response:
{
"data": {
"indicators": {
"edges": [
{
"node": {
"id": "08a0e35b-5749-4d08-80a9-9f9e8abf1cd4",
"entity_type": "Indicator",
"name": "testing 4",
"pattern_type": "stix",
"pattern": "[file:hashes.'MD5' = '932e07750da28e9d40350ffc840ffb8a']",
"valid_from": "2025-03-13T07:10:55.521Z",
"valid_until": "2026-03-15T04:22:42.820Z",
"revoked": false,
"x_opencti_score": 90,
"description": null,
"x_opencti_main_observable_type": "StixFile",
"created": "2025-03-06T05:17:37.578Z",
"modified": "2025-03-13T07:12:35.933Z",
"confidence": 40,
"draftVersion": null,
"createdBy": null,
"objectMarking": [],
"objectLabel": [
{
"id": "1226a53e-962a-4c11-a0d1-c4cdfc9d0729",
"value": "performance",
"color": "#b8e986"
}
],
"creators": [
{
"id": "88ec0c6a-13ce-5e39-b486-354fe4a7084f",
"name": "admin"
}
],
"__typename": "Indicator"
},
"cursor": "WzAuMDAwMDAzMjY0MjAyOSwiaW5kaWNhdG9yLS0wMDAxNWU0OC05YWRmLTU1YjItODlhZi05OTQzZGE5YjBkZDYiXQ=="
}
],
"pageInfo": {
"endCursor": "WzAuMDAwMDAzMjY0MjAyOSwiaW5kaWNhdG9yLS0wMDAxNWU0OC05YWRmLTU1YjItODlhZi05OTQzZGE5YjBkZDYiXQ==",
"hasNextPage": true,
"globalCount": 123134
}
}
}
}
プッシュ型インジケーター:
API Endpoint: https://<base_url>/graphql
Method: POST
Request Headers
| 鍵 | Value |
|---|---|
| Authorization | Bearer <API Key> |
| ユーザーエージェント | netskope-ce-5.1.1-cte-opencti-v1.0.0 |
Graphql Mutation
mutation IndicatorCreationMutation($input: IndicatorAddInput!) {
indicatorAdd(input: $input) {
id
standard_id
name
description
entity_type
parent_types
pattern_type
valid_from
valid_until
x_opencti_score
x_opencti_main_observable_type
created
confidence
x_opencti_detection
createdBy {
id
name
entity_type
}
objectMarking {
id
definition_type
definition
x_opencti_order
x_opencti_color
}
objectLabel {
id
value
color
}
creators {
id
name
}
}
}
Graphql Variable
{
"input": {
"name": "Testing 5",
"description": "",
"indicator_types": [],
"pattern": "[file:hashes.'MD5' = '932e07750da28e9d40350ffc840ffb8a']",
"pattern_type": "stix",
"createObservables": false,
"x_opencti_main_observable_type": "StixFile",
"x_mitre_platforms": [],
"confidence": 100,
"x_opencti_score": 9,
"x_opencti_detection": false,
"valid_from": null,
"valid_until": null,
"killChainPhases": [],
"objectMarking": [],
"objectLabel": [],
"externalReferences": []
}
}
Sample API Response
{
"data": {
"indicatorAdd": {
"id": "08a0e35b-5749-4d08-80a9-9f9e8abf1cd4",
"standard_id": "indicator--00015e48-9adf-55b2-89af-9943da9b0dd6",
"name": "Testing 5",
"representative": {
"main": "Testing 5"
},
"description": null,
"entity_type": "Indicator",
"parent_types": [
"Basic-Object",
"Stix-Object",
"Stix-Core-Object",
"Stix-Domain-Object"
],
"pattern_type": "stix",
"valid_from": "2025-03-17T05:28:52.077Z",
"valid_until": "2025-03-17T05:28:52.077Z",
"x_opencti_score": 9,
"x_opencti_main_observable_type": "StixFile",
"created": "2025-03-06T05:17:37.578Z",
"confidence": 100,
"draftVersion": null,
"createdBy": null,
"objectMarking": [],
"objectLabel": [
{
"id": "1226a53e-962a-4c11-a0d1-c4cdfc9d0729",
"value": "performance",
"color": "#b8e986"
}
],
"creators": [
{
"id": "88ec0c6a-13ce-5e39-b486-354fe4a7084f",
"name": "admin"
}
]
}
}
}
インジケーターを削除する:
API Endpoint: https://<base_url>/graphql
Method: POST
Request Headers
| 鍵 | Value |
|---|---|
| Authorization | Bearer <API Key> |
| ユーザーエージェント | netskope-ce-5.1.1-cte-opencti-v1.0.0 |
Graphql Mutation
mutation DataTableToolBarListTaskAddMutation(
$input: ListTaskAddInput!
) {
listTaskAdd(input: $input) {
__typename
id
type
}
}
Graphql Variable
{
"input": {
"ids": [
"08a0e35b-5749-4d08-80a9-9f9e8abf1cd4",
"e816325c-cf42-4174-9f52-af0ccfe807f4",
"140d2dbc-fff0-424d-ab4d-ee7ce2c2bbf6"
],
"actions": [
{
"type": "DELETE",
"context": null,
"containerId": null
}
],
"scope": "KNOWLEDGE"
}
}
Sample API Response
{
"data": {
"listTaskAdd": {
"__typename": "ListTask",
"id": "2227261e-e342-44d7-a3b6-4a0dcb8ec92e",
"type": "LIST"
}
}
}
パフォーマンスマトリックス
以下は、下記の仕様を持つ大規模CEインスタンス上で、各プラグインライフサイクルにおいて10万個のIOCを取得およびプッシュする際に実施したパフォーマンス測定結果です。
| デスクリプション | 仕様 |
|---|---|
| スタックの詳細 | サイズ:大 RAM:32 GB CPU:16コア |
| OpenCTIから取得した指標 | ~15K per minute |
| OpenCTIに共有された指標 | ~100 per minute |
ユーザーエージェント
netskope-ce-5.1.1-cte-opencti-v1.0.0
ワークフロー
- OpenCTI APIキーを取得してください。
- OpenCTIプラグインを設定します。
- OpenCTI用のビジネスルールを追加します。
- OpenCTIに共有機能を追加します。
- プラグインを検証してください。
再生ボタンをクリックして動画をご覧ください。
OpenCTI APIキーを取得してください
OpenCTIプラグインを設定するには、お客様のAPIキーが必要です。APIキーを取得するには、以下の手順に従ってください。
- OpenCTIのインスタンスにログインし、右上のメニューから Profile を選択します。

- APIアクセスセクションまでスクロールダウンして、APIキーをコピーしてください。

OpenCTIプラグインの設定
- Cloud Exchange で、 Settings > Pluginsに移動します。
- OpenCTI v1.0.0 (CTE)プラグインボックスを検索して選択します。

- 基本情報を入力してください:
- 構成名:構成の一意の名前。
- 同期間隔:デフォルトのままにしてください。
- 有効期限基準:プラグインの有効期限(日数)。(デフォルト値:90)
- 評判の上書き:この設定から受信した指標の評判を上書きする値を設定します。(デフォルト値:5)
- タグ集約戦略:既存のIoCに新しいタグを追加するか、上書きするかを選択します。このパラメータは、この構成で取得されたインジケーターのタグの保存方法を決定します。
- SSL検証を有効にする:SSL証明書の検証を有効にします。
- システムプロキシ:通信にプロキシが必要な場合は有効にしてください。
- Nextをクリックしてください。
- Enter the configuration parameters:
- ベースURL: OpenCTIベースURL。
- API キー: OpenCTI プラットフォームの [マイ プロファイル] > [API キー] から API キーを指定します。
- 取得する脅威データの種類: 取得する脅威データの種類。許可される値は、Stix File [SHA256] [MD5]、Domain、Url、IPv4、IPv6です。
- 最小信頼度:0~100の範囲で最小信頼度を入力してください。指定された信頼度以上の信頼度を持つ指標のみが取得されます。
注記
空欄のままにしておくと、利用可能なすべてのインジケーターを取得します。
Netskope CEでは、ラベルはタグと呼ばれます。 - 失効した指標:失効ステータスに一致する指標のみが取得されます。特定の値が指定されていない場合は、利用可能なすべての取り消しステータスを持つ指標が取得されます。
- ラベル: 一致するタグを持つインジケーターのみが取得されます。複数のタグを追加する場合は、カンマで区切ってください。例: tag1、tag2、tag3。すべてのタグから指標を取得するには、空欄のままにしてください。
注記
Netskope CEでは、ラベルはタグと呼ばれます。
- ポーリングを有効にする:OpenCTIからのポーリングデータを有効/無効にします。OpenCTIにインジケーターを送信するだけであれば無効にしてください。
- タグ付けを有効にする:タグ付け機能を有効/無効にします。
- 撤回間隔(日数) : OpenCTI インジケーターの IoC 撤回を実行する日数を指定します。
注記
このパラメータはNetskope CEバージョン5.1.0にのみ適用されます。またはそれ以降、脅威交換設定で IoC 撤回が有効になっている場合。
- 初期範囲(日数):初回実行時にデータを取得する日数。
- Save .
をクリックしてください
OpenCTI 用の脅威交換ビジネスルールを追加する
OpenCTIから取得した指標をNetskope CEに共有したり、その逆を行うには、共有したい指標をフィルタリングするビジネスルールが必要です。ビジネスルールを設定するには、以下の手順に従ってください。
- Threat Exchange > Business Ruleに移動してCreate New Ruleをクリックしてください。
- ルールに要件に応じたフィルターを追加し、「保存」をクリックしてください。

Open CTI の脅威交換共有の設定
Netskope CE から OpenCTI プラットフォームへ、またはその逆に IoC を共有するには:
- Threat Exchange > Sharingに移動してAdd Sharing Configurationをクリックしてください。
- ソース構成(CTE Netskope )、ビジネスルール、宛先構成(CTE OpenCTI)、およびターゲットSelect 。 Saveをクリックし、OpenCTIのIoCをNetskopeに共有するには、これらの手順を逆に実行してください。ソース構成としてCTE OpenCTI、ビジネスルール、宛先構成(CTE Netskope )、およびターゲットをSelect 。

- 以下の値を入力してください。
- 指標名:OpenCTIにプッシュする指標の名前。
- スコア:このスコアは、この指標に適用される減衰ルールに基づいて更新されます。
- Saveをクリックしてください。

Open CTIプラグインを検証する
プルを検証する
Threat Exchangeでは、取得されたデータは脅威IoCページに一覧表示されます。プラットフォームから取得した IoC をフィルタリングするには、フィルタを使用します: sources.source 「 」のように<plugin configuration name>
Cloud Exchange で取得したログを確認するには、 Loggingにアクセスして、CTE OpenCTI プラグインからログを検索してください。
OpenCTIで取得可能なデータを確認するには、OpenCTIにログインしてObservations > Indicatorsにアクセスしてください。
プッシュ通知を検証する
CEでプッシュを検証するには、[ログ]に移動し、共有ログをOpenCTIプラグインでフィルタリングします。
>
OpenCTI プラットフォームで、[サービス] > [URL 保護] > [管理対象 URL] に移動し、プラットフォーム上の共有 IOC を確認します。
ラベルに「 Netskope -ce」としてフィルタを適用します。
注記
インジデントの指標ソースラベルである「 Netskope ce | Netskope Threat Exchange」というラベルが表示されます。 これは、特定のインジデントの指標がNetskope CE のNetskope Threat Exchange プラグインから取得されたことを示します。
撤回を検証する
撤回に関連するログは、 フィルター:sources.source Like “<plugin configuration name> [Retraction]” でフィルタリングできます。
脅威IOCページで同じことを検証できます。
OpenCTIプラグインはプッシュリトラクションもサポートしており、OpenCTIプラグインに共有されたサードパーティプラグインからのIOCがCEでリトラクションとマークされた場合、それらのIOCはプッシュリトラクションを通じて自動的にOpenCTIプラットフォームから削除されます。 <plugin configuration name>「: 取り消し済み」と表示される「取り消し結果」フィールドを確認することで、同じことを確認できます。
OpenCTIからサードパーティに共有されたIOCがそのプラットフォームから削除されると、撤回結果に「<plugin-config-name>: retracted」としてマークされます。第三者から削除されない場合、撤回結果は保留となり、削除されない場合は撤回されます。
OpenCTIから取得したIOC(侵害指標)は、 Netskopeテナント上のURLリスト「CTEデモ」に共有されました。
共有されたIOCのいずれかがCEで撤回済みとしてマークされた場合、Netskopeテナントからも削除されます。ここでは、撤回スクリーンショットで「はい」とマークされたIOCが、NetskopeテナントのURLリストからも削除されていることが確認できます。
トラブルシューティング
OpenCTIプラグインの設定ができません
原因としては、以下のいずれかが考えられます。
- 無効なベースURL
- Inavalid API key
What to do: 根本原因を特定し、指定された問題に対する手順に従ってください。
無効なベースURL
「以下のホストへの接続」セクションを参照し、OpenCTIインスタンスが正しく動作していることを確認してください。
Inavalid API key
OpenCTI インスタンスの有効な API キーを取得するには、 「OpenCTI プラットフォームの構成」セクションを参照してください。
OpenCTI プラットフォームから IOC を取得できない
プラグインの設定後、プラットフォームからIOCが取得されない場合は、以下のいずれかが原因である可能性があります。
- プラットフォーム上には取得可能なIOCがありません
What to do: プラットフォーム上でIOCが利用可能かどうかを確認してください。
既知の動作
- Netskope CEからOpenCTIにインジケーターをプッシュする場合、APIがインジケーターを作成も更新もしないシナリオが2つあります。
- If the Indicator Already Exists:
- インジケーターが OpenCTI にプッシュされ、既存のものよりもlower confidence valueで既に存在する場合、API will not update the indicator 。インジケーターは、OpenCTIの内部ロジックの動作と同様に、変更されません。
- If the Older Indicator is Revoked:
- インジケーターの旧バージョンがrevokedだった場合、APIはそのインジケーターに対してもnot update or create a new version返します。取り消されたインジケーターは非アクティブとして扱われ、いかなる変更も実行されません。
- OpenCTI でインジケーターを削除するときに、インジケーターがNetskope CE から取り消されると、削除バック グランド タスクがトリガーされます。 このタスクは、次の URL から追跡できます: http://{base_url}/dashboard/Data/processing/tasks。
- ただし、OpenCTI上でこのバックグランドタスクが何らかの問題(接続性、処理エラーなど)により失敗した場合、インジケータの削除は正常に処理されません。 その結果、 Netskope CE によって共有される指標は取り下げられたものとしてマークされたままになり、OpenCTI プラグインはバックグランドタスクの失敗を追跡できなくなります。 したがって、OpenCTIタスク処理の失敗に関わらず、Netskope CEではインジケーターの取り消し状態が維持されます。

