設計時に「脆弱性対策」は盛り込まれていますか?
作り込まれてしまう脆弱性の多くは、設計時の検討漏れが原因です。特に新規の開発ではなく、既存システムに対してカスタマイズ開発を行う場合、追加・変更する機能を実装することに注力してしまいがちです。
これは、そもそも脆弱性に対するコーディングを意識していない、もしくは既存機能で脆弱性の対策が盛り込まれていると思い込んで開発を進めていることが考えられます。既存機能では対策済みであったとしても、開発を担当する開発者自身が脆弱性について意識していないと、追加で開発した機能に脆弱性を作りこんでしまいやすくなります。
そのため、設計の段階で脆弱性対策が盛り込まれているか確認するようにします。合わせて単体テストなどのテストケースを作成する場合でも、正常系や異常系の項目のみを用意するのではなく、脆弱性に対する項目を用意して、必要なテストを忘れずに実施するようにします。
どのような脆弱性があり、どのようなテストを実施していいか不明な場合は、セキュリティ担当や、セキュリティガイドライン等を確認してみましょう。
担当している機能で脆弱性が発見された場合、周りのメンバーに脆弱性が発見された箇所や対策内容を共有する体制を用意しておくことが大切です。他のメンバーが開発している機能でも同じような脆弱性が作り込まれているかもしれません。そのため自分一人の中でクローズするのではなく、他のメンバーに共有することで、システム全体の安全性を高める事になります。
テストデータは独自に作成しましょう
一般的なテストフェーズの流れは、単体テスト、結合テスト、負荷テスト等の順番ですが、それらのテストのために本番のデータを使ってはいけません。本来は”閲覧権限のない”個人情報などを開発担当者へ渡してしまうことは問題です。また、本番データをテストのために安全ではない環境に置くことで、データの漏えいリスクが高まります。
結合テストや負荷テストでは大量のデータが必要となるため、すでに存在している本番のデータの利用を検討されることがあると思いますが、漏えいリスク等を考えるとランダムデータを作成し利用する方が安全です。