多くの場合、システムは機密データを保存し、転送し、アクセスできるようにしています。 データの性質上、外部からアクセスできるシステムは、サイバー犯罪者の標的となり、情報の漏洩につながる可能性があります。情報が漏洩した場合、組織に壊滅的な打撃を与え、修復に多大な費用がかかることがあります。 これらの損害は企業・個人に対する金銭的な影響だけでなく、人命の損失にもつながる可能性もあります。 例えば、あるサイバー犯罪者がスマートカーのソフトウェアの設計上の脆弱性を突いたとします。攻撃が成功してしまった場合、死亡事故につながってしまう可能性も出てきます。
このように、システム設計の中核にセキュリティを据え、脆弱性を回避することは、非常に重要です。
目次
脆弱性とは
脆弱性とは、最も単純な定義では、コンピュータシステムの設計上の欠陥や弱点のことです。 サイバー犯罪者はこの欠陥を悪用して、コンピュータシステムに不正にアクセスします。
システムがセキュリティ上の欠陥である脆弱性を持つとき、設計の時点ですでに脆弱性が発生しやすい状態になっている場合や、後から見つかった脆弱性に対応しづらくなってしまっている場合があります。 攻撃をできるかぎり回避し、攻撃を受けても被害を最小限にとどめることができるようにするためには、設計の時点で、セキュリティを念頭に置いた設計原則を共通認識として持つことが重要になります。
設計の原則
システムを設計する前に、その背景を理解する
どのようなシステム設計においても、セキュリティを中核に据えることが不可欠です。しかし、残念ながら、セキュリティは設計の過程で多くの人に後回しにされてしまいます。 その理由は、コストと優先順位によるものです。多くの人は、セキュリティは追加コストと考え、通常、他の側面を優先します。しかし、攻撃を受けた後にその重要性を認識する傾向があります。
これでは、システムに欠陥が生じます。システムを作る前に、システムの核心となる部分と、潜在的な部分をよく理解することが重要です。これは、脆弱性を防ぐために、基本的なレベルでセキュリティ対策を実施することに役立ちます。
攻撃を受けにくくする
セキュリティを核としたシステム設計を行うことで、攻撃を受けにくくすることができます。一般的なセキュリティの概念と技術がシステムに適用され、悪用される余地がほとんどない状態を目指した設計になります。
例えば、プログラマーがシステムに新しい機能を追加するときは、どのような場合でも、セキュリティの脆弱性が発生する可能性を大なり小なり高めていることになります。新しいコードが追加されると、そのコードに「何か」があるかどうかを確認するために、攻撃者が利用できる領域が増えるからです。
次のようなシナリオを見てみましょう。
Aさんは、旅行に関するブログを作成するためにウェブサイトを作成しました。自分のウェブサイトのユーザが簡単にアクセスできるようにするために、彼はブログに検索機能を導入することを決定しました。
上記で説明したように、どんな新しい機能でもセキュリティの脆弱性をもたらす可能性があります。標準的な概念とテクニックに従わなければ、検索機能を追加するだけでなく、以下のような可能性があります。例えば、SQLインジェクション攻撃などがそうです。
更新や何らかの変更を行う際には、常にセキュリティについて考えることが重要です。上記のシナリオでは、AさんはSQLインジェクション攻撃を防ぐために、入力検証とパラメトリッククエリを採用することができます。その後、適切なテストにより検証する必要があります。永続的に通用するような絶対的な防御の仕組みはありませんが、これらの予防策は攻撃を困難にします。目的は、攻撃されにくい、あるいはされないようにすることです。
攻撃を受けにくくするために、複数のセキュリティ制御を用いることも有効です。例としては、単にパスワードの入力を求めるだけでなく、MFA(多要素認証)のような別のセキュリティレイヤーを追加するなどです。
侵害の検出を容易にする
たとえ、あらゆるセキュリティの概念や手法に則ってシステムを設計したとしても、新たな脅威によってシステムが侵害される可能性は常に存在します。そのため、侵害があった場合でも、容易に検出可能にし、被害を最小限にとどめることができるように設計する必要があります。
これを実現する一つの方法は、セキュリティをシンプルに保つことです。シンプルなセキュリティコントロールを持つことは、十分に理解できない複雑なセキュリティ制御を導入することよりも優れています。後者を選ぶと、ヒューマンエラーの一種である設定ミスにつながる可能性があります。(IPAによると、ヒューマンエラーはサイバー攻撃の基本的な原因です。
サイバー攻撃への根本的な原因である
侵害の影響を軽減する
100%安全なシステムはありません。そのため、万が一、セキュリティ侵害が発生した場合でも、システムへの被害が最小限になるような設計が必要です。
これを達成する一つの方法は、最小特権の原則を用いることです。IPA(情報処理推進機構)は次のように述べています。
「ユーザーは、特定のタスクを実行するために必要な最小限の特権を持つべきです」
例えば、 Aさんの旅行ブログの場合、Aさん以外のユーザーはアカウントを作成したり、ブログにコメントすることはできても、ブログを書く権限は持つべきではありません。
セキュリティ上の問題を正しく修正する
セキュリティ上の脆弱性が検出・特定されたら、その問題を正しく修正する必要があります。脆弱性の根本的な原因を特定したうえで、影響を受けるすべてのシステムを特定し、修正し、徹底的にテストする必要があります。
まとめ
以上のように、セキュリティはあらゆるシステムにおいて、基本的に設計の段階から考慮されるべきものです。また、ヒューマンエラーを回避するためには、設計の各工程に専門家の集団を配置することが不可欠です。