ADC

OTP暗号化ツール

NetScalerリリース13.0ビルド41.20以降、OTPシークレットデータは、セキュリティを強化するためにプレーンテキストではなく暗号化された形式で保存されます。OTP シークレットは暗号化された形式で自動的に保存され、手動で操作する必要はありません。

以前は、NetScalerアプライアンスはOTPシークレットをプレーンテキストとしてアクティブディレクトリに保存していました。OTP シークレットをプレーンテキスト形式で保存すると、悪意のある攻撃者や管理者が他のユーザーの共有シークレットを表示してデータを悪用する可能性があるため、セキュリティ上の脅威となりました。

OTP 暗号化ツールには次の利点があります。

  • 古い形式 (プレーンテキスト) を使用している古いデバイスがあっても、データが失われることはありません。
  • 古いバージョンのNetScaler Gateway との下位互換性がサポートされているため、既存のデバイスと新しいデバイスの統合とサポートに役立ちます。
  • OTP暗号化ツールは、管理者が一度にすべてのユーザーのすべてのOTP秘密データを移行するのに役立ちます。

注:

OTP 暗号化ツールは、KBA 登録または電子メール登録データを暗号化または復号化しません。

OTP暗号化ツールの使用

OTP 暗号化ツールは、次の目的で使用できます。

  • 暗号化。OTP シークレットを暗号化された形式で保存します。このツールは、NetScalerに登録されたデバイスのOTPデータを抽出し、プレーンテキスト形式のOTPデータを暗号化形式に変換します。
  • 復号化。OTP シークレットをプレーンテキスト形式に戻します。
  • 証明書を更新します。管理者は、いつでも証明書を新しい証明書に更新できます。管理者は、ツールを使用して新しい証明書を入力し、すべてのエントリを新しい証明書データで更新できます。証明書パスは、絶対パスまたは相対パスのいずれかである必要があります。

重要

  • OTP暗号化ツールを使用するには、NetScalerアプライアンスで暗号化パラメータを有効にする必要があります。
  • ビルド41.20より前にNetScalerに登録されているデバイスの場合は、次の手順を実行する必要があります。
    • Upgrade the 13.0 Citrix ADC appliance to 13.0 build 41.20.
    • Enable the encryption parameter on the appliance.
    • Use the OTP Secret migration tool to migrate OTP secret data from plain text format to encrypted format.
  • OTP 暗号化ツールは単一値のユーザー属性のみをサポートします。複数値のユーザー属性はサポートされていません。

プレーンテキスト形式の OTP シークレットデータ

例:

#@devicename=<16 or more bytes>&tag=<64bytes>&,

ご覧のとおり、古い形式の開始パターンは常に「#@」で、終了パターンは常に「&」です。 "devicename="および終了パターンの間のすべてのデータは、ユーザーOTPデータを構成します。

暗号化された形式の OTP シークレットデータ

OTP データの新しい暗号化形式は、次の形式になります。

例:

    {
         "otpdata”: {
         “devices”: {
                        “device1”: “value1”,
                        “device2”: “value2”, …
                    }
            }
    }
<!--NeedCopy-->

ここで、値 1 は KID + IV + 暗号データの base64 でエンコードされた値です。

暗号データは次のように構成されています。

    {
      secret:<16-byte secret>,
      tag : <64-byte tag value>
      alg: <algorithm used> (not mandatory, default is sha1, specify the algorithm only if it is not default)
    }
<!--NeedCopy-->
  • 「デバイス」には、それぞれの名前に対する価値があります。値は base64 エンコード (KID) .base64 エンコード (IV) .base64 エンコード (暗号データ) です。
  • KID は、OTP シークレットデータ暗号化に使用される証明書を識別するために使用されるキー ID 値です。キー ID は、OTP シークレットデータの暗号化に複数の証明書を使用する場合に特に役立ちます。
  • 標準の AES アルゴリズムでは、IV は常に最初の 16 バイトまたは 32 バイトの暗号データとして送信されます。同じモデルに従うことができます。
  • IVはデバイスごとに異なりますが、キーは変わりません。

注:

暗号化された形式の OTP データは、ユーザー属性 AD に保存されます。

OTP 暗号化ツールのセットアップ

OTP 暗号化ツールはディレクトリ\var\netscaler\otptoolにあります。NetScalerソースからコードをダウンロードし、必要なAD資格情報を使用してツールを実行する必要があります。

  • OTP 暗号化ツールを使用するための前提条件は次のとおりです。
    • このツールを実行している環境に python 3.5 以降のバージョンをインストールします。
    • pip3 以降のバージョンをインストールします。
  • 次のコマンドを実行します:
    • pip install-r requirements.txt。要件を自動的にインストールします。
    • python main.py。OTP 暗号化ツールを起動します。OTP シークレットデータの移行の必要性に応じて、必要な引数を指定する必要があります。
  • このツールは、\var\netscaler\otptoolのシェルプロンプトから見つけることができます。
  • 必要な AD 認証情報を使用してツールを実行します。

OTP 暗号化ツールインターフェイス

次の図に、OTP 暗号化ツールのインターフェイスの例を示します。インターフェイスには、暗号化/復号化/証明書のアップグレード用に定義する必要のあるすべての引数が含まれています。また、各引数の簡単な説明も取り込まれます。

オペレーション引数

暗号化、復号化、または証明書のアップグレードに OTP 暗号化ツールを使用するには、OPERATION 引数を定義する必要があります。

次の表は、OTP 暗号化ツールおよび対応する OPERATION 引数の値を使用できるシナリオの一部をまとめたものです。

シナリオ 演算引数の値とその他の引数
プレーンテキスト OTP シークレットを同じ属性で暗号化された形式に変換する OPERATION 引数の値に 0 を入力し、ソース属性とターゲット属性に同じ値を指定します。例: python3 main.py -Host 192.0.2.1 –Port 636 -username ldapbind_user@aaa.local -search_base cn=users,dc=aaa,dc=local -source_attribute unixhomedirectory -target_attribute unixhomedirectory -operation 0 -cert_path aaatm_wild_all.cert
プレーンテキスト OTP シークレットを別の属性で暗号化された形式に変換する OPERATION 引数の値に 0 を入力し、ソース属性とターゲット属性に対応する値を指定します。例: python3 main.py -Host 192.0.2.1 –Port 636 -username ldapbind_user@aaa.local -search_base cn=users,dc=aaa,dc=local -source_attribute unixhomedirectory -target_attribute userparameters -operation 0 -cert_path aaatm_wild_all.cert
暗号化されたエントリをプレーンテキストに変換し直す OPERATION 引数の値に 1 を入力し、ソース属性とターゲット属性に対応する値を指定します。例: python3 main.py -Host 192.0.2.1 –Port 636 -username ldapbind_user@aaa.local -search_base cn=users,dc=aaa,dc=local -source_attribute unixhomedirectory -target_attribute userparameters -operation 1 -cert_path aaatm_wild_all.cert
証明書を新しい証明書に更新する OPERATION 引数の値に 2 を入力し、対応する引数に以前の証明書と新しい証明書の詳細をすべて入力します。例: python3 main.py -Host 192.0.2.1 –Port 636 -username ldapbind_user@aaa.local -search_base cn=users,dc=aaa,dc=local -source_attribute unixhomedirectory -operation 2 -cert_path aaatm_wild_all.cert –new_cert_path aaatm_wild_all_new.cert

CERT_PATH 引数

CERT_PATH 引数は、NetScalerでデータの暗号化に使用される証明書を含むファイルです。ユーザーは、 暗号化復号化、 および更新証明書の3つの操作すべてに対してこの引数を指定する必要があります。

CERT_PATH 引数ファイルには、証明書と関連する秘密キーの両方を PEM または CERT 形式で含める必要があります (pfx はサポートされていません)。

たとえば、certificate.cert ファイルと certificate.key ファイルが証明書ファイルとその秘密鍵に対応している場合、UNIX ライクなシステムでは、次のコマンドで cert_pathフラグの値として使用できるファイルcertkey.mergedを作成します。

$ cat certificate.cert certificate.key > certkey.merged
$
<!--NeedCopy-->

証明書に関する注意点

  • ユーザーは、ユーザーデータの暗号化のためにNetScalerアプライアンスでグローバルにバインドされているのと同じ証明書を提供する必要があります。
  • 証明書には、Base64 でエンコードされたパブリック証明書とそれに対応する RSA 秘密鍵を同じファイルに含める必要があります。
  • 証明書の形式は PEM または CERT のいずれかである必要があります。証明書は X509 形式に準拠している必要があります。
  • パスワードで保護された証明書形式および.pfx ファイルは、このツールでは受け入れられません。ユーザーは、ツールに証明書を提供する前に、PFX 証明書を.cert に変換する必要があります。

検索フィルタ引数

SEARCH_FILTER 引数は、Active Directory ドメインまたはユーザーをフィルタリングするために使用されます。

例:

  • -search_filter "(sAMAccountName=OTP*)": SAMAccountNames (ユーザーログオン名) が「OTP」で始まるユーザーをフィルタリングします。
  • -search_filter "(objectCategory=person)": person タイプのオブジェクトカテゴリをフィルタリングします。
  • -search_file "(objectclass=*)": すべてのオブジェクトをフィルタリングします。

NetScalerアプライアンスでの暗号化オプションの有効化

プレーンテキスト形式を暗号化するには、NetScalerアプライアンスで暗号化オプションを有効にする必要があります。

CLI を使用して OTP 暗号化データを有効にするには、コマンドプロンプトで次のように入力します。

set aaa otpparameter [-encryption ( ON | OFF )]

例:

set aaa otpparameter -encryption ON

OTP 暗号化ツールの使用例

OTP 暗号化ツールは、次のユースケースに使用できます。

NetScalerアプライアンスバージョン13.0ビルド41.20に新しいデバイスを登録する

新しいデバイスをNetScalerアプライアンスバージョン13.0ビルド41.xに登録し、暗号化オプションが有効になっている場合、OTPデータは暗号化された形式で保存されます。手動による介入を避けることができます。

暗号化オプションが有効になっていない場合、OTP データはプレーンテキスト形式で保存されます。

13.0 build 41.20 より前に登録されたデバイスの OTP データを移行する

NetScalerアプライアンスに13.0ビルド41.20より前に登録されたデバイスのOTPシークレットデータを暗号化するには、次の手順を実行する必要があります。

  • 変換ツールを使用して、OTP データをプレーンテキスト形式から暗号化形式に移行します。
  • NetScalerアプライアンスで「暗号化」パラメーターを有効にします。
    • CLI を使用して暗号化オプションを有効にするには、次の手順を実行します。
      • set aaa otpparameter -encryption ON
    • GUI を使用して暗号化オプションを有効にするには、次の手順を実行します。
      • [ セキュリティ] > [AAA-アプリケーショントラフィック ] に移動し、[ **認証設定] セクションで [認証 AAA OTP パラメータの変更** ]
      • [ AAA OTP パラメータの設定 ] ページで、[ OTP シークレット暗号化] を選択し、[ OK] をクリックします。
    • 有効な AD 資格情報を使用してログインします。
    • 必要な場合は、追加のデバイスを登録します (オプション)。

暗号化されたデータを古い証明書から新しい証明書に移行する

管理者が証明書を新しい証明書に更新する場合、ツールには新しい証明書データエントリを更新するオプションが用意されています。

CLI を使用して証明書を新しい証明書に更新するには

コマンドプロンプトで入力します:

例:

python3 main.py -Host 192.0.2.1 –Port 636 -username ldapbind_user@aaa.local -search_base cn=users,dc=aaa,dc=local -source_attribute unixhomedirectory -target_attribute userparameters -operation 2 -cert_path aaatm_wild_all.cert –new_cert_path aaatm_wild_all_new.cert

  • 証明書には秘密鍵と公開鍵の両方が含まれている必要があります。
  • 現在、この機能は OTP に対してのみ提供されています。

アプライアンスを暗号化して 13.0 build 41.20 にアップグレードした後に登録されたデバイスの再暗号化または新しい証明書への移行

管理者は、証明書ですでに暗号化されているデバイスでこのツールを使用し、その証明書を新しい証明書で更新できます。

暗号化されたデータをプレーンテキスト形式に変換し直す

管理者は OTP シークレットを復号化して、元のプレーンテキスト形式に戻すことができます。OTP 暗号化ツールは、暗号化された形式の OTP シークレットをすべてのユーザーにスキャンし、復号化された形式に変換します。

CLI を使用して証明書を新しい証明書に更新するには

コマンドプロンプトで入力します:

例:

python3 main.py -Host 192.0.2.1 –Port 636 -username  ldapbind_user@aaa.local -search_base cn=users,dc=aaa,dc=local -source_attribute unixhomedirectory -target_attribute userparameters -operation 1
<!--NeedCopy-->

トラブルシューティング

このツールは、次のログファイルを生成します。

  • app.log。すべての主要な実行ステップと、エラー、警告、および失敗に関する情報を記録します。
  • unmodified_users.txt。プレーンテキスト形式から暗号化形式にアップグレードされなかったユーザ DN の一覧が含まれます。これらのログは、形式のエラーとして生成されるか、他の理由が原因である可能性があります。