Facebook Google Plus Twitter LinkedIn YouTube RSS Menu Search Resource - BlogResource - WebinarResource - ReportResource - Eventicons_066 icons_067icons_068icons_069icons_070

Tenable ブログ

ブログ通知を受信する

Tenable Python SDKを使用する際のヒント:内部スキャン、スキャンのインポートとエクスポートなどを実行する方法

Tenable Python SDKがビルドされたのは、 Tenable.io™のユーザーが独自のスクリプト、プログラム、およびモジュールを作成してTenable.ioプラットフォーム内のデータとシームレスにやり取りできるように、Tenable.io APIを活用する機能をユーザーに提供するためです。

Python SDKを初めて使用する場合は、私の過去のブログ投稿 を読むか、GitHubにあるこのプロジェクトのREADMEをご覧ください。

前提条件

この投稿で使用した例では、次の条件を想定しています。

  • Python 2.7 または 3.4+ 以降がインストールされていること
  • Tenable.ioの管理者アカウントと生成されたAPIキー
  • Tenable.ioにリンクされたNessusスキャナー

内部スキャンを実行する

このセクションでは、Tenable.io Python SDKを使用して内部スキャンを実行する方法を説明します。

コード

from tenable_io.client import TenableIOClient
from tenable_io.api.scans import ScanCreateRequest
from tenable_io.api.models import ScanSettings
client = TenableIOClient(access_key='{YOUR ACCESS KEY}', secret_key='{YOUR SECRET KEY}')
scanners = {scanner.name: scanner.id for scanner in client.scanners_api.list().scanners}
template = client.scan_helper.template(name='basic')
scan_id = client.scans_api.create(
 ScanCreateRequest(
 template.uuid,
 ScanSettings(
 ‘{YOUR SCAN NAME}’,
 ‘{YOUR SCAN TARGETS}’,
 scanner_id=scanners['{YOUR SCANNER NAME}']
 )
 )
)
scan = client.scan_helper.id(scan_id)
scan.launch()

:上のコードで中括弧で囲まれている変数には、ご自分の環境の情報を入れてください。

最初の数行では、Tenable.io SDKクライアントとスキャンを作成する対象のモデルをインポートしています。

from tenable_io.client import TenableIOClient from tenable_io.api.scans import ScanCreateRequest from tenable_io.api.models import ScanSettings 
次に、クライアントをAPIキーで初期化する必要があります。
client = TenableIOClient(access_key='{YOUR ACCESS KEY}', secret_key='{YOUR SECRET KEY}')

次の行では、すべてのスキャナー名をスキャナーIDとリンクするディクショナリーを作成します。

scanners = {scanner.name: scanner.id for scanner in client.scanners_api.list().scanners}

次の行では、実行するスキャンのポリシーID(内部的にはテンプレートIDとして知られる)を取得します。この例では、「Basic」スキャンテンプレートを使用しています。

template = client.scan_helper.template(name='basic') 

最後に、これらのすべての詳細を使用して、スキャンを作成するためにAPIに渡すことができる「CreateScanRequest」オブジェクトを作成します。

scan_id = client.scans_api.create(
 ScanCreateRequest(
 template.uuid,
 ScanSettings(
 ‘{YOUR SCAN NAME}’,
 ‘{YOUR SCAN TARGETS}’,
 scanner_id=scanners['{YOUR SCANNER NAME}']
 )
 )
)

:スキャンのターゲットはユーザーインターフェイスで定義されているのと同じ方法で定義する必要があり、各ターゲットをコンマで区切ります。

スキャンを正常に作成されると、残っている「ScanRef」をスキャンIDを使用して取得します。これを使用すると、すべてのスキャンコントロールにアクセスすることができます。最後の行に示されているとおり、スキャンの起動も可能です。

scan = client.scan_helper.id(scan_id) scan.launch() 

このスクリプトを実行した後に、Tenable.ioのスキャンページをチェックして、スクリプトが実行されたことを確認できます。このケースでは、スキャンの名前は「My Basic Scan」で、3つのIPをスキャンするように設定されています。

スキャンが完了すると、次のようになります。

名前を指定してスキャンレポートをエクスポートする

多くのユーザーにとって重要な別のユースケースは、以前に実行したスキャンをエクスポートして、その結果を経営陣やその他の利害関係者と共有できることです。これも、SDKを使用すれば簡単にできます。

コード

from tenable_io.client import TenableIOClient

client = TenableIOClient(access_key='{YOUR ACCESS KEY}', secret_key='{YOUR SECRET KEY}')
scans = {scan.name: scan.id for scan in client.scans_api.list().scans}
scan = client.scan_helper.id(scans['{YOUR SCAN NAME}'])
scan.download('{YOUR SCAN NAME}.pdf')

前述の例と同じように、最初にTenable.io SDKクライアントをインポートし、APIキーを使って初期化します。

from tenable_io.client import TenableIOClient

client = TenableIOClient(access_key='{YOUR ACCESS KEY}', secret_key='{YOUR SECRET KEY}')

次に、スキャン名とそれに関連付けられたIDのディクショナリーを生成します。

scans = {scan.name: scan.id for scan in client.scans_api.list().scans}

これについても、前述の例と同じように、スキャンの名前を指定して、必要なスキャンの「ScanRef」を作成します。

scan = client.scan_helper.id(scans['{YOUR SCAN NAME}'])

最後に、最終行でスキャンしたレポートをダウンロードします。デフォルトではPDFです。必要に応じて、「ScanExportRequest」の追加パラメータを渡して、CSVやHTMLなどの別の形式でレポートをエクスポートすることもできます。

scan.download('{YOUR SCAN NAME}.pdf')

NessusスキャンをTenable.ioにインポートする

一部のユーザーには別のソリューションが役立つかもしれません。それは、NessusスキャンをリンクされていないスキャナからTenable.ioにインポートして、最新の サイバーエクスポージャーについてより完全なビューを得る機能です。

コード

import os
from tenable_io.client import TenableIOClient

client = TenableIOClient(access_key='{YOUR ACCESS KEY}', secret_key='{YOUR SECRET KEY}')
dir_path = os.path.dirname(os.path.realpath(__file__))
file = os.path.join(dir_path, '{YOUR NESSUS FILE}')
client.scan_helper.import_scan(file, True)

この例の最初の数行は前の例と同じですが、Pythonのosモジュールが追加されています。これは、アップロードするファイルを指定するために使用します。この例では、ファイルは、実行しているスクリプトと同じディレクトリーにある必要があります。

import os
from tenable_io.client import TenableIOClient

client = TenableIOClient(access_key='{YOUR ACCESS KEY}', secret_key='{YOUR SECRET KEY}')

次の行では、実行中のスクリプトのパスをosモジュールを使用して判別し、アップロードするスキャン結果ファイルのフルパスを取得します。

dir_path = os.path.dirname(os.path.realpath(__file__))
file = os.path.join(dir_path, '{YOUR NESSUS FILE}')

最後に、scan_helperの「import_scan」関数を使用してスキャン結果をアップロードします。

client.scan_helper.import_scan(file, True) 

このスクリプトを実行した後、アップロードされたスキャンがないかTenable.ioのスキャンページをチェックすることで、動作を確認できます。この例では、スキャンの名前は「offlineScanResults.nessus」です。

ヒント

複数のスクリプトを使用したり、スクリプトを他のマシンに展開したりする際に役立つヒントは、INIファイルまたは環境変数にAPIキーを設定して、Tenableクライアントがそれを使用できるようにするという方法です。

INIの例

tenable_io.ini」という名前のスクリプトを実行するのと同じディレクトリに新しいファイルを作成します。このファイルは、下の例のようにフォーマットします。この方法なら、ログ記録のレベルも簡単に設定できます。不明な理由で失敗するスクリプトがある場合は、これをINFOまたはDEBUGに設定するとよいかもしれません。

[tenable_io]
access_key = 1111d58e443e08e080790193e27ae151c16b0415270b738137e50eecbcc08d74
secret_key = 22220bf73a6bcb0cf4bcd9cf5839bff21357f2cd81884e4984e8ed4ecd4b6d83
logging_level = ERROR

環境変数

むしろINIファイルのルートに行かない場合は、TENABLEIO_ACCESS_KEYおよびTENABLEIO_SECRET_KEY環境変数を設定して、クライアントにAPIキーを供給することもできます。

詳細情報

関連記事

役立つサイバーセキュリティ関連のニュース

Tenable エキスパートからのタイムリーな警告とセキュリティガイダンスを見逃さないように、メールアドレスをご入力ください。

Tenable Vulnerability Management

最新のクラウドベースの脆弱性管理プラットフォームにフルアクセスし、これまでにない精度で全資産の表示および追跡が可能です。

アラブ首長国連邦を除くすべての地域で作成された Tenable Vulnerability Management のトライアルには、Tenable Lumin とTenable Web App Scanning も含まれます。

Tenable Vulnerability Management

最新のクラウドベースの脆弱性管理プラットフォームの全機能にアクセスして、これまでにない精度で全ての資産を確認、追跡しましょう。 年間サブスクリプションをご購入ください。

100 資産

サブスクリプションオプションを選択してください。

今すぐ購入する

Tenable Vulnerability Management

最新のクラウドベースの脆弱性管理プラットフォームにフルアクセスし、これまでにない精度で全資産の表示および追跡が可能です。

アラブ首長国連邦を除くすべての地域で作成された Tenable Vulnerability Management のトライアルには、Tenable Lumin とTenable Web App Scanning も含まれます。

Tenable Vulnerability Management

最新のクラウドベースの脆弱性管理プラットフォームの全機能にアクセスして、これまでにない精度で全ての資産を確認、追跡しましょう。 年間サブスクリプションをご購入ください。

100 資産

サブスクリプションオプションを選択してください。

今すぐ購入する