チームは、テストプロセスにセキュリティテストを追加し、機能テストの自動化の一部としてセキュリティチェックを追加して領域の特定ができるようになるためにセキュリティの専門家によってトレーニングをうけることが可能だ。これにより、継続的なセキュリティテストが可能になり、すべてのリリースでセキュリティテストの対象範囲が広がり、セキュリティの欠陥を早期に発見できる。
シニアテストエンジニアのChristina Thalayasingam氏が、ConTEST 2021で継続的なセキュリティテストについて講演した。
Thalayasingam氏によると、セキュリティテストはソフトウェアテストの一種であり、組織内のシステムとアプリケーションに大きな損失を引き起こす可能性のある抜け穴がないことを確認する。システムのセキュリティテストとは、結果として、従業員や組織の外部の人が情報を失う可能性があるシステムの抜け穴や弱点をすべて見つけることだ。
セキュリティテストを開始するには、セキュリティの専門家がセキュリティと手動のセキュリティテストの方法について品質エンジニアをトレーニングする必要がある。次に、品質エンジニアはセキュリティの専門家と協力して、セキュリティテストのテストを絞り込み、既存のテストケースに付加価値を付けることができる。これにより、スプリントレベルのアクティビティでセキュリティテストが実行され、自動化され、継続的インテグレーションの一部になる。
品質エンジニアは、ストーリーごとにテストプロセスにセキュリティチェックを追加する必要があるとThalayasingam氏は提案している。これは、明らかなセキュリティの脆弱性と非常に早期にとどまっているのを見つけるのに役立つ。適切なガイダンスとトレーニングは、品質エンジニアがセキュリティテストの考え方を身に付けるのに役立つ。
Thalayasingam氏は、品質エンジニアをセキュリティテストの一部にする理由について次のように述べている:
- QEは毎スプリントで新機能をテストしている
- QEは常識にとらわれない考えをすることが知られている
- QEはアプリケーションの完全な知識がある
- QEはすでにテスト方法を持っている
Thalayasingam氏が説明するように、品質エンジニアにセキュリティの問題を監視させるという全体的な考え方は、明らかなセキュリティの脆弱性を早い段階で発見することだ:
チームが継続的なセキュリティテストに移行すると、バグ修正によって発生する可能性のあるセキュリティの問題を早期に発見できるようになります。このプロセスは、チーム全体で見つかったセキュリティの問題を認識するのに役立ちます。これにより、チームはすべての変更について迅速なフィードバックメカニズムをコミュニケーションおよび受け取ることができます。
Thalayasingam氏は、安全なアプリケーションをリリースすることで顧客の信頼を得ることができると述べた。また、収益への不要な影響やダウンタイムを回避するのにも役立つ。これにより、将来の攻撃からアプリケーションを保護するコストを防ぐことができる。Thalayasingam氏によると、安全性の高いアプリケーションであれば、チームは規制上の罰金 (GDPR) を課されることがなくなる。
InfoQは、Christina Thalayasingam氏に継続的セキュリティテストについてインタビューした。
InfoQ: セキュリティ上の欠陥を早期に発見するために何ができるのでしょうか? どのような手順を提案しますか?
Christina Thalayasingam氏: 一緒に作業する場合、セキュリティの専門家は、品質/テストエンジニアをトレーニングして、セキュリティテストを理解し、手動で実行できるようにすることができます。
このトレーニングには次のようなシミュレーションツールを使用することで有効になります:
- WEBGOAT
- DVWA
- OWASP JUICE SHOP
- bWAPP
- Bodgeit Store
- iGoat
- Goat Droid
その後、セキュリティの専門家はQEと一緒に作業してテストを絞り込み、既存のテストケースに付加価値を追加します。
これらのテストは次のようになります:
- 認証と認可
- GETリクエストに含まれる機密データ
- ファイルアップロード
- SSL/TLS
- セキュリティレスポンスヘッダ
- エラー処理
これにより、スプリントレベルのアクティビティでセキュリティテストの実行が徐々に開始され、最終的には自動化と継続的インテグレーションの後半にセキュリティテストが追加されるようになります。
InfoQ: ソフトウェア開発ライフサイクルにセキュリティテストを組み込むにはどうすればよいのでしょうか?
Thalayasingam氏: セキュリティは、要件定義フェーズの最初から考え、計画し、議論する必要があります。セキュリティテストの計画は、設計段階から開始する必要があります。セキュリティホワイトボックステストは、コーディングおよび単体テストに組み込む必要があります。ブラックボックステストと脆弱性スキャンは、統合とシステムテストのフェーズで行われます。最後に、侵入テストと脆弱性テストが登場します。セキュリティは、SDLC全体に焦点を当てる必要があります。
次のタイプを使用した定期的なセキュリティテストをお勧めします:
- SAST (静的アプリケーションセキュリティテスト)
- DAST (動的アプリケーションセキュリティテスト)
- アプリケーション侵入テスト
InfoQ: セキュリティテストに使用できるオープンソースツールにはどのようなものがありますか?
Thalayasingam氏: 私は次のツールをお勧めします:
- Zed Attack Proxy (ZAP)
- Wfuzz
- Wapiti
- W3af
- SQLMap
- SonarQube
- Nogotofail
- Iron Wasp
- Grabber
- Arachni
InfoQ: どのタイプのセキュリティテストが最も役立ちますか? 何から始めればよいでしょうか?
Thalayasingam氏: 以下は、チームがセキュリティテストを実行する文化に移行するときに検討を開始できるセキュリティテストの一部です:
- 認証と認可
- GETリクエストに含まれる機密データ
- ファイルアップロード
- SSL/TLS
- セキュリティレスポンスヘッダ
- エラー処理
InfoQ: テスターはどうすればセキュリティテストのスキルを向上させることができますか?
Thalayasingam氏: テストエンジニアは、セキュリティの専門家によるトレーニングを受けることから始めることができます。また、OWASP® Foundationなどの高度なセキュリティテスト関連の資料を読むと、最新のトレンドを把握するのに役立ちます。シミュレーションツールや脆弱性の高いアプリケーションを実際に体験すると、アプリケーションで攻撃を実行する方法を理解するのに役立ちます。これにより、テストエンジニアは、日常的にテストしているアプリケーションでテストを実行することになります。
InfoQ: どのような学びがありましたか?
Thalayasingam氏: 多くの人が、QE/TEにセキュリティテストの理解を移すのは不可能な作業だと考えています。私のチームと私が日々のスプリントテストの一部としてセキュリティテストを追加するようになったとき、私たちはさまざまな課題と挫折がありましたが、絶え間ないトレーニング、練習、実行によってそれらを克服することができました。
チームは、継続的なセキュリティテストを理解し、貢献する能力を達成することができました。私があなたと共有したステップは私たちにとって非常に有益でした。小さな一歩を踏み出すと、セキュリティテストをテストプロセスに完全に含めることを達成するという全体像に到達します。