wolfSSL製品のセキュリティは常にわたしたちwolfSSL社が意識している最重要事項です。定常的、入念かつよく計画されたテスティングこそがwolfSSLの堅牢性とセキュリティ性の維持を助けます。わたしたちは常にクリーンで可読性が高く分かりやすいコードを書くように努めています。
ホルト問題のように、ソフトウェアの可能なパスをすべてテストしつすことは不可能だと考えますが、障害のリスクを最小化することにフォーカスするアプローチをとります。広範囲な自動化テストに加えて、特に既知のユースケースが確実にテストされることを確認します。この記事ではwolfSSL社内でのテスト・プロセスについて概説します。
- API 単体テスト:API関数の正しい挙動をテストする単体テストを実施しています。これは複数のリリース間にまたがってコードが進化していくなかでライブラリーの一貫性を維持することも助けます。ソフトウェアのリリースごとに高品質のテスト済APIをエンド・ユーザに届けるための助けともなっています。API単体テストはwolfSSLの “make check” コマンドごとにも実行されます。
- 暗号スイーツ・テスト:wolfSSLは広範囲の暗号スイーツ・リストをサポートします。これらのすべては “make check” コマンドのたびに、wolfSSLサンプル・クライアントとサーバを使用してテストされます。それぞれの暗号スイーツはデフォルト構成だけでなく、ノンブロッキング・モードとクライアント認証のそれぞれの有無の場合についてテストされます。
- アルゴリズム・テスト:わたしたちwolfSSLのSSL/TLSインプリメンテーションの安全性は基盤としているwolfCrypt暗号ライブラリの正当性と堅牢性に依拠しています。wolfCryptのテストでは、すべてのアルゴリズムについてNISTテスト・ベクトルとともにFIPS140-2検証のために使用されたCAVPテスト・ハーネスを実行します。ポータビリティのためにビッグとリトル・エンディアンの両方のテストも行います。
- ベンチマーク・テスト:次にわたしたちは、サイズ、転送レート、コネクション速度、暗号性能などを見るベンチマーク・テストの世界へとはいっていきます。wolfSSLのベンチマーク・スーツはユーザ自身で実行できるようにダウンロードの中に含まれています。
- 静的解析:wolfSSLの全コードベースは単一のツールではなく、複数の異なる静的解析ツールを使用して解析しています。現在、Coverity Scan、clang scan-build、およびFacebook inferを使用しています。これらのツールは実行されることの少ないコード・パスのバグを含めて自動的に発見する手助けをしてくれます。
- メモリ・エラー検出:wolfSSLではvalgrindを使用して定常的かつ自動的にメモリー・エラーを削減します。このツールはメモリーの不正アクセス、未設定値の使用、動的メモリーの不正の解放、あるいはメモリー漏れなどの発見を助けます。
- 相互接続性テスト:相互接続性のテストはOpenSSL、BoringSSL、あるいは GnuTLSなど他のオープンソースのTLSインプリメンテーションに対して行います。これは、wolfSSLまたは相手方インプリメンテーションのプロトコル・インプリメンテーションに関するエラーを捕捉するのを助けます。wolfSSLではまた、実世界のどのSSL/TLSインプリメンテーションか知られていないサーバに対して接続することで閉じた環境の外とのテストも実施しています。
- 実世界のビルド:わたしたちはcURL、wget、pppd、OpenSSH、stunnel、lighttpd他といった一連の “実” アプリケーションとのビルドも実施します。トップレベル・サポートの一部のお客さまに対してはお客さまのアプリケーションとの新しいリリースのビルドも行います。
- コンパイラ・テスト:わたしたちはたくさんの異なるコンパイラでwolfSSL製品をコンパイルするお客さまをかかえています。gcc/g++、clang、icc、Visual Studio、CodeWarrior、KDS、LPCXpresso、MPLAB XC、TI CCS、Keil、IAR、Cygwin、MinGW、CrossWorks、Arduino、Wind River Workbench他多数のコンパイラーとツールチェーンに対するコンパイル・テストを行っています。
- 相互レビュー:より多くの目によるコードベース・レビューによって最終製品の残留バグを減少させることができます。わたしたちは “ForkとPull リクエスト” モデルを利用して運営しています。これによって、すべての我々のマスターブランチに対するコミットは少なくとも2名の独立したエンジニアによってレビューされたものとなります。
- 第三者テスト:wolfSSLのコードは定常的に、大学の研究者、お客さま、ユーザのセキュリティ・チーム、FIPSと認証研究所、また、わたしたちのオープンソース・ユーザベースによってレビューされています。これは、wolfSSLのコードと製品アーキテクチャにより多くの目がそそがれる助けになっています。
- Fuzzテスト:wolfSSLは、イン・メモリーのfuzzer、ネットワークfuzzerをふくむ複数の異なるfuzzerを使用してテストしています。これは、不正な、期待されない、あるいはランダムなデータでプログラムを爆撃して、潜在的メモリー漏れや論理エラーが無いか観測することを可能にします。これによって、もし最終リリースでリリースされていたら、潜在的な脆弱性となってしまったかも知れないバグを検知することができます。
- 継続的インテグレーション(CI):Jenkinsを利用してwolfSSLコード・レポジトリに発行されたコミットごとにテストを実行します。コミットごとのテスト実行には、FIPSビルド、膨大な数のビルド・オプション(お客さま、ユーザ、共通)、valgrindの実行、scan-buildによる静的解析の実行などのテストが含まれます。
- 夜間テスト・サイクル:毎晩、営業日に行われる典型的なものより拡張された長時間のテストを行います。これらはCIテストより深いもので、翌朝までにエンジニアのインボックスに結果が配送されます。このテストには、複数プラットフォーム、コンパイラに対する拡張されたビルドオプション・テストや拡張されたfuzzテストなどが含まれます。.
もし、wolfSSLでどのようなテストを行っているのかさらにご質問などありましたらinfo@wolfssl.com(英語),info@wolfssl.jp (日本語) 宛お問い合わせください。また、wolfSSLとの相互接続性テストをご希望のSSL/TLSまたは暗号インプリメンテーションがありましたらお知らせください。wolfSSLのご自身のテスト・フレームワークへの組み込みのご希望がありましたら検討させていただきますのでお知らせください。
原文はこちら