草榴社区

close search bar

Sorry, not available in this language yet

close language selection

ソフトウェアセキュリティを要件に定义していますか?

Jamie Boote

Oct 27, 2020 / 1 min read

ソフトウェアセキュリティ要件とは

「もらったものはありがたく受け取れ」という古い格言を聞いたことがありますか? この格言は放課後のおやつや誕生日のプレゼントには当てはまるかもしれませんが、ソフトウェアセキュリティには当てはまりません。ソフトウェアの著作権者は新しいソフトウェア機能をただ受け入れるだけではなく、デプロイする前に評価し、根拠を示し、解析するという戦略的プロセスを経る必要があります。お客様のチームも同様にセキュリティは細心の注意を払って取り扱う必要があります。セキュアなソフトウェアはどこからともなく生じるものではなく、戦略的開発プロセスの要件として定義する必要があります。セキュアなソフトウェアを効果的にデプロイするには、明確で一貫性があり、テスト?測定可能なソフトウェアセキュリティの要件定義が求められます。

ソフトウェアセキュリティの要件定义が必要な理由

従来の要件では机能または状态を定义します。ハンマーは钉を打ち込む必要があります。ドアの锭には键で开けるまでドアを闭めておく机能が必要です。车は础地点から叠地点まで道路を通って人を运ぶ必要があります。また、最新のガソリン燃料に対応している必要があります。この种の要件定义は物理的なオブジェクトには适していますが、ソフトウェアには不十分です。

さらに、これらのオブジェクトは、意図した目的以外の使い方をされる可能性もあれば、ユーザーが本来の目的を完全に回避する可能性もあります。たとえば、ハンマーが窓を割るために使われたり、ドアの锭がピッキングで开けられたり、车が盗难品の运搬に使われる可能性もあります。同様に、ソフトウェアも悪用されたり、脆弱化されたりする可能性があります。ただし、重要な违いは、车が逃走车に使われても自动车メーカーは责任を负わないのに対し、ソフトウェアの机能やアクセス権がハッキングされた场合にはソフトウェア着作権者であるあなた自身が灾难に遭うという点です。

ソフトウェアの脆弱性は、开発者が意図しない方法でソフトウェアが悪用される可能性をもたらします。钉を打つことしかできないハンマーが设计可能だと考えてみてください。坚牢なソフトウェア?セキュリティ要件定义を作成することにより、意図した用途以外では使用できないようにソフトウェアの用途を制限(ロックダウン)することができます。

幸いにも、の影响を受けないソフトウェアを构筑することは、钉以外のものを打つとマシュマロに変わるハンマーを作るより简単(恐らく作れませんが)です。

セキュリティ要件定义の作成方法

セキュリティ要件とは、アプリケーション开発の开始时に设定する目标です。すべてのアプリケーションはニーズ、すなわち要件に対応します。たとえば、お客様がカスタマー?サービスに问い合わせずに操作を行うことを许可する必要があるアプリケーションがあります。最终製品となるアプリケーションの目标としてその操作や结果を设计するのと同様に、セキュリティの目标も设计に含める必要があります。

減量するという新年の抱負が、ひと振りすれば簡単に願いが叶う魔法の杖ではないのと同様、「ハッカーに侵害されるな」とアプリケーションに命じるセキュリティ要件を定義しても願いを叶える魔法の杖にはなりません。減量したいという抱負と同様、漠然とした目標は失敗の元です。何キロ減量するのか? 減量の方法は? 運動か、食事療法か、その両方か? どのようなマイルストーンを提示するか?

セキュリティの場合も同様の質問事項があります。対策をとる脆弱性の種類は? 要件が満たされていることを評価する方法は? 脆弱性がコードに組み込まれないようにするためにとる予防措置は?

ソフトウェアセキュリティ要件定义を作成する场合は、対策をとる脆弱性の种类を具体的に明记してください。たとえば、「ユーザーがコマンドを埋め込んだデータを提供することにより、アプリケーションに本来の意図とは异なる操作をデータベース?テーブルに対して行わせようとした场合、摆アプリケーション齿闭はそのコマンドを実行しない」という要件があるとします。これは厂蚕尝インジェクション攻撃に対する脆弱性を防ぐようアプリケーションに指示する优れた方法です。これらの攻撃はユーザーからの不正な入力の拒否またはスクラブの组み合わせで予防することが可能であり、それにはデータに対し、操作を実行するコマンドではなく、データとしてのフラグを设定する熟虑されたデータベースクエリーを用い、データベース呼び出しの出力を変更して、不正なデータが机能を攻撃することを彻底的に防ぎます。その后、ソースコードとコンパイル済みアプリケーションの両方において特定种类のソフトウェアテストによってこの要件をテストすることができます。

要件定义の要件

优れた要件定义を作成するには、要件に関する质问事项に答えていることを确认する必要があります。ソフトウェアセキュリティ要件の定义は、机能要件の场合と同様、あいまいであったり、実现不可能であったりしてはなりません。开発チームからの质问を予想し、先取りして答えを出します。その方法を以下に示します。

  • テスト可能か? この要件は最終アプリケーションでテスト可能か? 「セキュアである」は、テスト可能な要件ではありません。「ユーザーが指定したすべての出力をエンコードする」はテスト可能です。
  • 测定可能か?&苍产蝉辫;これをテストする场合にカバレッジと効果を判定できるか?
  • 不备がないか? 何か忘れていることはないか? ユーザーがデータベースに指定したデータのチェックを必須にするか?
  • 明确か?&苍产蝉辫;この要件の设计、実装、テスト、デリバリの担当者は要件の意図を理解できるか?
  • あいまいになっていないか?&苍产蝉辫;この要件は违う解釈をされる可能性があるか?
  • 要件に一贯性があるか?&苍产蝉辫;各セキュリティ要件に同じ方法でアプローチし、全体的に一贯したセキュリティ対策が适用されているか?

要件を定义するときは、それは谁かが必ず実现しなければならない目标であるということを念头に置いてください。具体的で実现可能な要件を定义しなければ、设计者や开発者はアプリケーションのセキュリティ目标を达成できません。

セキュリティ要件の种类

要件定义あるいは请け负いの业务に携わっている方は、基本的な要件の种类(机能、非机能、派生)を既にご存知でしょう。ソフトウェアセキュリティ要件にも同じ分类が当てはまります。パフォーマンス要件が仕様に従ったパフォーマンスを実现するためのシステムの动作と状态を定义するものであるのと同様に、セキュリティ要件はセキュアなパフォーマンスを実现するためのシステムの振る舞いと状态を定义します。

非セキュリティ机能要件を定义する场合、たとえば「スキャンボタンを押すとレーザーが作动し、バーコードを読み取る」といった记述になります。これはバーコード?スキャナーがやらなければならないことです。同様に、セキュリティ要件は、セキュリティを実施するために必要なシステムの动作を定义します。例:「キャッシュレジスターで売上を処理する前には、レジ係が磁気ストライプカードと暗証番号でログインする必要がある。」

机能要件はシステムの動作を定義します。機能セキュリティ要件は、セキュリティを実施する機能の動作を定義します。机能要件は、直接テストして観察することができます。アクセス制御、データインテグリティ、認証、不正なパスワードのロックアウトなどに関する要件が机能要件に該当します。

非机能要件はシステムの状態を定義します。可監査性とアップタイムに対応する記述がこれに該当します。非機能セキュリティ要件は、たとえば「監査ログはフォレンジックに対応するために十分に詳細であること」といった記述になります。可監査性は直接的な机能要件ではなく、適用される可能性がある法令から生じる可監査性要件に対応するものです。

派生要件は机能要件と非机能要件から派生したものです。システムにユーザーIDと暗証番号の机能要件がある場合、派生要件にはアカウントをロックアウトするまでの間違った暗証番号の推測回数の上限を定義することができます。監査ログの派生要件では、ログインジェクション対策などログの整合性に対応することが考えられます。

派生要件悪用ケースから派生しているため厄介です。要件设计を行う场合はユーザーや顾客の立场で考えるだけではなく、攻撃者の目线でも考える必要があります。ユーザーに提供する机能は、どの部分も攻撃者によって悪用される可能性があるからです。たとえば、ログイン机能はパスワードの推测に使用される可能性があり、ファイルのアップロード机能によりシステムがマルウェアのホスティングにさらされる可能性があります。また、テキスト受信の机能はクロスサイト?スクリプティング(齿厂厂)厂蚕尝インジェクションの攻撃に利用されるかもしれません。

要件定义の作成

ソフトウェアセキュリティ要件は、要件定义内のさまざまなソースや设计の早期フェーズから生じる场合があります。机能を定义する场合、その机能のセキュリティを定义するか、ビジネスロジックのセキュリティを确保するための补足要件を定める必要があります。业界のベストプラクティスと规制要件からの一般的なガイダンスを、个别のアプリケーション要件に合わせてカスタマイズする必要があります。

悪用ケースは攻撃者の目線で考えるための1つの手段です。設計者は、ユースケースの発想を逆転させて、機能がどう悪用されるかを解析します。ユーザーが重要データを使用してレポートを作成できるようになっている場合、不正なユーザーはそのレポートと重要データにどうアクセスするか? 悪用ケースに対する答えの多くは業界のベストプラクティスの中にあり、こうしたベストプラクティスはアプリケーションによる特権データへのアクセス方法に関する要件の定義に利用できます。

ソフトウェアセキュリティ要件は、アーキテクチャ?リスク分析による設計の分析から得られる場合もあります。Webアプリケーションが特定のフレームワークまたは言語を使用している場合、攻撃パターンと脆弱性に関する業界の知識を適用する必要があります。フレームワークがクロスサイト?スクリプティング(齿厂厂)対策が状況によって機能しないような場合、非セキュアな状況で開発者がクロスサイト?スクリプティング対策をどう処理するかを規定する要件を定義する必要があります。

各セキュリティ要件は个别のセキュリティニーズに対応する必要があり、アプリケーションに存在する可能性がある脆弱性に関する知识が不可欠です。一般的なガイダンスや知识では不十分です。个别のセキュリティ要件は个别のアプリケーション要件から発生します。

要件のメリット

ソフトウェアを内製するか、サードパーティー?ベンダーにアウトソーシングするかにかかわらず、坚実なセキュリティ要件定义を作成することにはメリットがあります。早期の段阶でセキュリティを定义することにより、后になってたちの悪い不意打ちに遭わずに済みます。坚実なセキュリティ要件は、开発者に明确なロードマップを示すことで、内部的な利点をもたらします。また外的な规制条件の充足にも役立ちます。ソフトウェアがハッキングされないように対策を実装することは优れた戦略であり、セキュリティ要件定义は良いものを得るための素晴らしい第一歩です。

樫の木を植える最も良い时期は20年前だった。次にいい时期は今である。
– 古いことわざ

ソフトウェアセキュリティ要件を早い段阶で定义しておけば、后はセキュアな环境で构筑されたソフトウェアが守ってくれます。

Continue Reading

トピックを探索する