情報セキュリティ教育で必要な物は既に判っています。基礎的なセキュリティ対策ではSANS TOP 25のMonster Mitigationsだと思います。(この他に概念の話も必要です)
情報セキュリティに関わっている人で、入力と出力のセキュリティ対策の重要性を解ってない人は居ないはずです。問題なのは広く認知されていない状況にあります。そして効果的な方法はどのような方法であるか、を見つける事でしょう。
自動セキュリティ検査ツールの有効性と教育
入出力のセキュリティ対策が広く認知されていないと考える根拠は、ファジングやセキュリティスキャナーの有効性が高いことです。
Webアプリに限らずプログラムの脆弱性検査にファジング(Fuzzing)やセキュリティスキャナーなどの自動ツールが有用であることは知られています。IPAも組み込み機器向けにファジングによる脆弱性検査を推奨しています。外部から特定の脆弱性を自動検査するセキュリティスキャナーも有用です。ファジングツール以外でも幾つかのOSSのセキュリティスキャナー製品を紹介しています。
私自身もコード検査で基礎的部分の知識不足で脆弱なコードを書いてしまった例を何度も見ています。基礎知識不足で紛れ込んだ脆弱性の多くがセキュリティ検査ツールで発見しやすい脆弱性です。
ファジングやセキュリティスキャナーの有効性は高いと言えるでしょう。
これらのツールなどの簡易な検査で発見される多くの問題は「入力」と「出力」を堅牢にする事で対策できます。「入力」と「出力」を堅牢にするには、コードを書く開発者に「入力」と「出力」にどのようなリスクがあるのか、脆弱性発生の基本原理を解説し、どう対策できるのかを教えれば良いです。
当たり前のギャップ解消と経験知の伝達
目の前の脆弱性にフォーカスし過ぎて、なぜこのような事が発生したのか?本当の原因への考察が軽視されてきた感があります。基礎的な部分は「当たり前」過ぎて教えるまでもないと考えていた事により、一部の開発者は教育・学習の機会が無く「当たり前」ではないという認識のギャップが発生していたのでは?
人は経験上会得した知識やコツなどをなかなか人に伝えられない物です。(少なくとも私はそうです。教えるは学ぶの半ばなり、です。インジェクション対策、基礎の基礎はCプログラムを始めた時からの経験知ですが、今まで明確に解説したことはあまり無かったと思います)情報セキュリティは比較的新しい分野であること、体系的な教育などが行われていないことが原因で経験から学習した知識やノウハウ(基礎知識と基礎的ノウハウ)が伝わっていないのではないでしょうか?
よく「本当に酷いコードを見たことがある」という話を耳にします。実際にセキュリティに配慮していないコードは存在します。これは開発者・開発会社が情報セキュリティの基礎教育を受ける機会が無かった、または独自に学ぶ機会を作らなかった為に発生していると考えています。
私のブログを呼んでいる方には必要ない話ですが、簡単に脆弱性検査ツールで見つけられるような脆弱性が作られないようにするには、リスクと基本と効果的な対策を3点セットで教えれば良いと思います。SANS TOP 25はとても良い教材になります。
情報セキュリティ教育の実験
機会があれば実験してみたいことがあります。初心者の開発者を2つのグループに分け、一方には実践セキュリティ対策のみを教え、もう一方にはリスクと基本のみを教え、同じ仕様のある程度の大きさのアプリケーションを作らせた場合、どちらの方が堅牢なアプリケーションを作れるか比べてみたいです。
大きな会社であれば、新入社員研修などで実施することも可能だと思います。指導内容は
- 実践重視型はAPIの使い方など実践的内容のみを教え、基礎はポインタだけ与える。
- 基礎重視型は基礎的内容のみ教え、実践的な内容(APIなど)のポインタのみ与える。
作るアプリケーションは両方のグループに教えていないセキュリティ知識が必要な仕様を幾つか入れておくと良いでしょう。誰か1人でもセキュリティに詳しい人が居ると結果に大きく影響するので、第三のグループとして既にセキュリティに詳しいグループも作って実験すると良いと思います。もし余力があれば基礎と実践両方を教えた第四グループも作れば、グループ分けとして十分だと思います。
もし実験した方、類似の実験結果をご存知の方、ぜひ結果を教えて下さい。
追記
会社として実験に協力することも可能です。もし必要であればご連絡ください。
会社などで組織的に対策を行う場合は根本的なセキュリティ対策とは?を参照してください。
Leave a Comment