昨日、一般社団法人コンピュータソフトウェア協会(CSAJ)が「ソフトウェア出荷判定セキュリティ基準チェックリスト Ver.1.2」を公開した。
これは2016年に公開されたものの全面改訂版で、ソフトウェアやウェブサービスのセキュリティ品質を向上させるためのチェックリストである。初版は48項目だったものが、今回は113項目まで増加し、開発工程(要件定義・基本設計・結合・運用など)ごとに必要な情報がまとまっている。エクセルファイルとして公開されており、ライセンスはCC4.0として配布されている。
CSAJ「ソフトウェア出荷判定セキュリティ基準チェックリストをバージョンアップ 新しく発見された脆弱性を追加するなど項目数・使いやすさが大幅up」2020年12月1日
項目例としては例えば、要件定義の中では
・対策項目:重要な操作を行う場合には、再認証すること。
・対策詳細:パスワードの変更、決済の実施など重要な操作を行う場合には、事前に認証が済んでいても、再度パスワードの入力を求めるなど、再認証を実施すること。
・脅威シナリオ:セッションハイジャックなどの方法によって認証された場合に、パスワードが変更されアカウント自体が乗っ取られてしまう。
・テスト方法:・パスワードの変更時に、現行のパスワードが正しく入力されないと変更されないことを確認する。
ソフトウェア出荷判定セキュリティ基準チェックリストVer.1.2
といった基本的な情報の他、工程ごとに具体的にどのような対策を取るかといったものが表形式で記載されている。この他にも「IPA 安全なWebサイトの作り方第7版」や「Spring Frameworkセキュアコーディングガイドライン」との対応する項目なども記述されており、ソフトウェア・ウェブサービス開発企業にとって重要な情報源となる。
実際にコーディングする開発者にとっては、より具体的なチェックリストも必要となる。これについてはJPCERTコーディネーションセンターのコーディングスタンダードを活用するのが良いだろう。JavaとC言語版が公開されており、SQLインジェクション対策や浮動小数点演算の注意などからマルチスレッドプログラミングにおける注意など多くの項目とそのコード例が示されている。
参考:JPCERT CC「Java コーディングスタンダード CERT/Oracle 版」
経験豊富なエンジニアにとっては当たり前というような内容は多いが、実際に大きな問題になるセキュリティインシデントの場合、多くは基本的なところで致命的な問題がある。セブン・ペイなど、その例は枚挙に暇がない。
尤も、セキュリティインシデントの大半は内部の人間によるミス(情報紛失)によるものが多いが、それとは別に出荷する企業・エンジニアとして、上記のような内容に対応しておくのは当然の話だろう。