web-dev-qa-db-ja.com

ASN.1パーサーをテストして保護するにはどうすればよいですか?

私の知る限り、.NETには、フレームワークで構築されたデータの読み取りまたは書き込み用の ASN.1パーサー がありません。つまり、ASN.1データを作成または検証するコードは、さまざまな品質のサードパーティライブラリを使用しています。 Bouncy Castle 、および JavaScience for .NET は、このようなライブラリのいくつかの例です。

私は、あまり広く使用されておらず、あまりテストされていないASN1パーサーを使用するいくつかの実動インストールを認識しています。 解析データの問題 の過去と、さらに OpenSSLにはまだASN1解析の問題があります を考えると、ASN1解析は見落とされている問題だと思います。

背景

ASN.1は、TLS証明書、X.400電子メール、X.500およびライトウェイトディレクトリアクセスプロトコル(LDAP)ディレクトリサービス、H.323(VoIP)、Kerberos、BACnetおよび簡易ネットワーク管理プロトコル(SNMP)で使用され、それらが交換するプロトコルデータユニット(PDU)。信頼できるラッパーの外部でASN.1データを読み書きするカスタムソフトウェアは、システムを危険にさらす可能性があります。

詳細については、Wikipediaを参照してください。

質問

  • ASN.1パーサーをテストして保護するにはどうすればよいですか?

  • 他のパーサーよりも安全なパーサーは何ですか?

  • .NETは、組み込みライブラリなしでAD LDAP、証明書OID検証、およびケルベロスをどのように実行しますか?

6

ASN.1パーサーは修正のために実際にテストできません。これは、複雑なソフトウェアであり、特定の部分であることを証明する方法がわからないためです。ソフトウェアの正しいです。あなたができることは、評判の良い図書館に頼ることです。 この質問 をご覧になることをお勧めします。または、自分で再実装します。 ASN.1の実行可能なサブセットに固執する場合、これはそれほど難しくありません(たとえば、DERエンコーディングのみ、いくつかの文字列タイプのみ...)。

.NETには、ASN.1解析を行うための組み込みコードが必ず含まれています。これは、必ずしもそのライブラリへのアクセスアクセスを意味するわけではありません。

少なくとも、Javaまたは.NET言語で記述されたASN.1ライブラリは、バッファオーバーフローに対するこれらの言語の生来の抵抗から恩恵を受けます(バッファオーバーフローが発生すると、例外がスローされ、わずかにセキュリティの観点から、メモリ内のデータを実際に上書きすることをお勧めします)。

3
Thomas Pornin

解析に関しては、あなたの能力は何ですか。 ASN.1のEBNF定義があるのでASN.1を検証できるようにしたい場合、これは非常に長いプロジェクトになりますが、LALRパーサーのいずれかを使用できます。コードの生成に役立つフレームワーク。

基本的には、ライブラリを再作成します。

安全とはどういう意味かわかりません。有効なPDUはASN.1に準拠します。しかし、この方法を使用して要求できるデータのタイプまたは量を制限したい場合は、別の問題を見ています。私が実際に言えることは、より人気のあるライブラリーはおそらくもう少し精査されていて、最終的には導入されるシステム全体の一部にすぎないということです。

0
M15K

ASN.1エンコーダー/デコーダーは、形式の正式な説明から自動的に生成できるため、(プログラミング)障害から比較的安全なはずです。 ASN.1コンパイラを確認します。また、MITRE CVEデータベースでASN.1を検索して、そのような欠陥がどれほど一般的で誰がそれを行っているかを確認することもできます。または、一般的に弾力がある城のようなライブラリに、OpenSSLなどと比較して、そのような欠陥がある傾向がある場合。リスクは非常に低いと思います。そのような事件は1つしか知りません。

0
pepe