(wolfSSL注釈:本記事はDeutsche Telekom Security社Robert Hörr氏によるブログ投稿を翻訳して掲載しています。)
Robert Hörr (e-mail: robert.hoerr@t-systems.com)
(Deutsche Telekom Security GmbH セキュリティ評価者)
私はRobert Hörrです。Deutsche Telekom Security GmbHでペネトレーションテスターとして働いています。ペネトレーションテスト(pentesting)というのは、wolfSSL のようなセキュリティソフトウエアを対象にOpenSSLで見つかったハートブリードのような脅威を発見するためのテストのことです。私はこれまでに私が開発したTLS-FAST(Fast Automated Software Testing) フレームワークを使ってwolfSSLの問題点をいくつか発見してきました(それらについては https://www.wolfssl.com/docs/security-vulnerabilities を参照)。私の次の目標はお客様のソフトウエアをテストするFASTサービスを提供することです。
何故TLSライブラリをテストするの?
TLSはインターネット上で最も普及したセキュリティプロトコルの一つです。インタネットユーザに広く利用されるように標準的なインタネットサーバはデフォルトの設定ではクライアント認証なしになっています。そのためTLSプロコル実装の脆弱性は容易に攻撃が可能です。たくさんのTLSの脆弱性がパブリックなCVEリストに登録されていて、その数はますます増えています。
どのようなテストが行われているの?
wolfSSLライブラリは絶えず成長しているプロジェクトであり、時間の経過と共に多くの拡張機能、サポートするTLSバージョンの追加も顧客に提供します。このような姿勢がwolfSSLの顧客に最大限の柔軟性を提供しているのです。このような成長過程でソースコードはより複雑となり全てのコードパスを目視ではレビューできなくなってきます。従って、動的でかつ自動実行されるテストが用いられます。この種のテストを効果的にに実行する為にはコードカバレッジファジング手法が使われます。このファジング手法の亜種は全コードパスを検出します。検出速度は利用できる計算機リソースに依存します。検出されたコードパスに対してメモリーリーク、バッファオーバーフロー、論理的不正などがシステマチックにチェックされます。
TLSテストにはどのようなツールが使われているの?
ファジング手法(予測不可能な入力データを与えて例外を発生させ挙動を観察する手法)に基づいた、いくつかのオープンソースのファジングツールが公開されていて利用可能です。最も人気のあるのは、AFL、 LbFuzzer と HonggFuzzでしょう。コミュニティはそれらのいずれにも多くのバグを発見しました。また、いずれも特定の領域に各々の強みを持っています。例えば、HonggFuzzは単位時間当たりの実行数が他より大きいです。私がTLSライブラリ向けテストフレームワークとして開発したFAST(Fast Automated Software Testing)はいくつかのFussing ツールの長所を束ねて、同時に恩恵をうけられるようにしました。時を経るに従い以下の機能とアプローチがフレームワークに追加されました:
1.決定論的実行:
テストプロセス全体が決定論的であるため、発見された問題を簡単に再現できます 。
2.独立性:
テストプロセスは環境から独立しています。例えば、 プロセスはすべてのオペレーティングシステムで実行できます。
3.現実的な使用:
TLSライブラリは、現場で発生している問題を発見するために現実的に使用されます。従って、ソースコードとコードパスはテストによって変更されるべきではありません。
4.検出:
あらゆる種類の実装の問題点は、テストプロセスによって発見できます。バッファオーバーフローやメモリリークの例は、AddressSanitizerによって検出されます。 論理的な問題または脆弱性は、特定のTLSテストによって発見されます。
5.スケーラビリティ:
テストプロセスは、計算リソースとストレージを追加することでリニアに拡張できます。
6.カバレッジ:
コードカバレッジは、すべてのコードパスを検出するために使用されます。該当するすべてのコードパスが特定されたら、 実際のテストが開始されます。
7.自動化:
完全なテストプロセスは、マシン上で自動的に実行されるので、手作業はもう必要ありません。
8.柔軟性:
フレームワークは、別のテスト済みソフトウェアに適用させることができます。この適用には数時間または数日かかります。
wolfSSL ライブラリはどのようにテストされているの?
wolfSSLライブラリはいくつかのTLSバージョンのサポート、機能、拡張要素と暗号化オプションを含んでいます。テストは主にTLS(v1.2とv1.3)のハンドシェークと機能と拡張要素に対して行われます。その理由としては、TLSハンドシェークの実装には多くのTLS脆弱性(CVE)が知られていますし、他のTLSバージョンはもはや使用を推奨されないということです。
現在、私はTLS-FASTフレームワークを、GitHubマスターブランチで公開されているwolfSSLのwolfSSL_accept(..)、wolfSSL_connect(..)関数をテストするのに使っています。このマスターブランチはwolfSSLの最新のコードが取得できますから、新たに追加された障害を検出してテストされるべきです。新たな障害がステーブルバージョンに追加されるのを防ぐ必要があるのです。
私がこれまで検出した障害(https://www.wolfssl.com/docs/security-vulnerabilities)はTLSメッセージであるclient_hello とserver_helloをパースする処理に含まれていました。それらの障害はバッファーオーバーフローか未初期化メモリでしたから、サニティチェックやメモリ初期化処理を追加すれば簡単に解決できる類のものでした。完全を期す為に、wolfSSLライブラリは521,655行(コメントを空白を含まない)ものコードから成り立っているということを申し添えます。つまり、ファジングなしでは障害を回避することは簡単ではありません。
ファジングの将来は?
現時点では私がテストしている対象はwolfSSLライブラリだけです。しかし、(会社としての)wolfSSLは他にもライブラリ(例えばwolfCrypt)を提供しています。これらのライブラリは互いに協力しあいながら機能を提供しています。例えば、wolfSSLライブラリはwolfCryptライブラリの機能を使っています。つまり、これらのライブラリもまたテストされなければならないわけです。この目的の為に、将来、私は新たなFASTフレームワークを開発する予定です。新FASTフレームワークには既存のTLS-FASTフレームワークと同じ機能と手法を持たせます。FASTフレームワークは時と共に新機能が追加されることでしょう。
私の将来の目標はお客様にソフトウエアをテストするサービスとしてFASTフレームワークを提供することです。このサービスはすべての障害を迅速に検出することでしょう。
原文:https://www.wolfssl.com/modern-testing-wolfssl-tls-library/