
ペネトレーションテスターと研究者向けの自動化されたTLSサーバーおよびクライアント構成スキャナー。暗号スイート、プロトコルバージョン、セキュリティガイドラインを評価し、カスタマイズ可能なスキャン深度と機械可読な出力を提供します。
TLS-Scanner は、ペネトレーションテスターやセキュリティ研究者が TLS サーバーおよびクライアントの設定を評価するためのツールです。
注意: TLS-Scanner は TLS 開発者、ペネトレーションテスター、管理者、研究者を対象とした研究ツールです。GUI はありません。初版であり、いくつかのバグが含まれている可能性があります。
TLS-Scanner をコンパイルして使用するには、次のコマンドを実行する必要があります。
$ cd TLS-Scanner
$ git submodule update --init --recursive
$ mvn clean package
または、急いでいる場合は、次のようにテストをスキップできます。
$ mvn clean package -DskipTests=true
TLS-Scanner をライブラリとして使用する場合は、次のコマンドでインストールする必要があります。
$ mvn clean install
TLS-Scanner を実行するには、apps/ フォルダ内の jar ファイルのいずれかを実行する必要があります。これらのファイルは、自分でアプリをコンパイルするか、GitHub からリリースされた jar ファイルをダウンロード して入手できます。
$ java -jar apps/TLS-Server-Scanner.jar -connect localhost:4433
スキャンするホストを -connect パラメータで指定する必要があります。
スキャンのパフォーマンスを向上させたい場合は、-threads パラメータを使用して使用するスレッド数を増やすことができます。
パフォーマンスに関するもう 1 つの重要なパラメータは -scanDetail です。これは、スキャンの詳細度を設定するために使用できます。高速から非常に詳細まで、設定可能な値は次のとおりです: QUICK、NORMAL、DETAILED、ALL。
出力の詳細度は -reportDetail パラメータで設定できます。ガイドラインの詳細を確認するには、-reportDetail ALL を使用します。
デフォルトでは、結果はコンソールにのみ出力されます。機械可読な出力が必要な場合は、-outputFile output.json を使用して結果を自動的に JSON ファイルに書き込むことができます。
最も重要なパラメータは -scanDetail と -reportDetail です。以下に、これらのパラメータのいくつかのユースケースを説明します。
ほとんどの場合、デフォルトのパラメータ設定で十分です。これにより、両方の詳細レベルが NORMAL に設定されたスキャンが実行されます。
システムの概要を素早く把握したい場合は、両方の詳細レベルを QUICK に設定することをお勧めします。これにより、一部の実行プローブの範囲が制限されて実行時間が短縮され、詳細な技術情報が含まれないようにレポートの詳細度が制限されます。
システムを完全に評価し、すべての機能を実行したい場合は、両方の詳細レベルを ALL に設定することをお勧めします。これにより、既存のすべてのプローブが完全に実行され、さらなる分析と評価のための非常に詳細な情報が出力されます。
すべての可能なパラメータの詳細情報を取得するには、-help パラメータを使用するか、パラメータを指定せずに jar を実行してください。
TLS-Server-Scanner を簡単に使用できるように、事前構築済みの Docker イメージを提供しています。
$ docker run -it --network host ghcr.io/tls-attacker/tlsscanner -connect localhost:4433
このイメージはサーバースキャン用に作成されていますが、他の jar ファイルも含まれています。エントリポイントを変更することでアクセスできます。
$ docker run -it --network host --entrypoint java ghcr.io/tls-attacker/tlsscanner -jar TLS-Client-Scanner.jar
また、自分でコンテナをビルドするための Dockerfile も提供しています。
$ docker build . -t tlsscanner
$ docker run -t tlsscanner
注意: 私は Docker のベストプラクティスにまったく精通していません。Dockerfile の改善方法をご存知の方は、プルリクエストを送信してください。
(TLS) プローブには、特定のプローブを実行するために必要な前提条件がある場合があります。要件システムを使用すると、プローブを実行するために満たす必要がある要件のセットを定義できます。
各要件には evaluate 関数があり、要件が満たされたかどうかを示すブール値を返します。要件は、よく知られた論理演算を使用していくつかの方法で連結できます。各要件には、複数の要件を連鎖させるための and、or、not、xor のインスタンスメソッドがあります。現在、以下のプローブが実装されており、すぐに使用できます。
FulfilledRequirement - 常に true に評価されます。要件がないことを示すのに便利です。UnfulfillableRequirement - 常に false に評価されます。プローブの実行を防ぎます。ProbeRequirement - 指定されたプローブが実行された場合に true に評価されます。PropertyRequirement - 指定された分析プロパティが事前定義された値を持つ場合に true に評価されます。値はコンストラクタパラメータとして指定するか、PropertyTrueRequirement と PropertyFalseRequirement を TestResults.TRUE および TestResults.FALSE の省略形として使用できます。PropertyComparatorRequirement - 分析プロパティのコレクション結果が定数値より小さい、等しい、または大きい場合に true に評価されます。これらの定義済み要件に加えて、getRequirements メソッド内で匿名で Requirement クラスを拡張することもできます。何も必要ない場合は、常に true に評価される FulfilledRequirement を返すことができます。
要件の使用例は、tls-client-scanner および tls-server-scanner の probe パッケージにあります。
@Override
public Requirement<ClientReport> getRequirements() {
return new ProbeRequirement<ClientReport>(TlsProbeType.CIPHER_SUITE)
.and(new PropertyTrueRequirement<>(TlsAnalyzedProperty.SUPPORTS_DHE));
}
ProtocolRequirement - 特定のプロトコルバージョンがサポートされている場合に true に評価されます。ExtensionRequirement - 特定の拡張機能がリモートピアによってサポートされている場合に true に評価されます。OptionsRequirement - 追加の CLI フラグが設定されている場合に true に評価されます。現在、いくつかのクライアントプローブ (ALPN、SNI、セッション再開) で使用されています。WorkingConfigRequirement - 動作する設定が見つかった場合に true に評価されます。