●深く知る
システム開発において、セキュリティを確保するための設計をセキュア設計といいます。セキュア設計は、システム開発のすべての段階で考える必要があります。開発者は、安全な設計の原則に基づいて開発プロセスを研究し、実装し、管理するようにしましょう。今回は、セキュア設計の中のデフォルトの安全性と障害時の安全確保のトピックを選出してお話していきます。
まずはデフォルトの安全性です。多くの設計者やユーザーは、製品を環境に導入するとき、スマホにアプリケーションを入れたとき、家にインターネットを開通するときなど、ソフトウェアを最初にインストールしたときの設定が最適だと思い込んでいるところがあります。細かい設定をしないほうが動作は安定し、設定のすべては製品開発側が満を持して推奨しているモノだと思っています。この事実を開発者が知らないということはありませんが、開発者にも利用者自身で設定してもらいたいモノはあるのです。例えば、パスワードです。製品導入した時点のパスワードを変えるのは、秘蔵性から利用者自身が設定しなければなりません。開発者や製造側の発行したパスワードをそのまま使うということは、その製品を開発した人はもちろん、製品を配送した人、もしくは同じ製品を買った人までその製品デフォルトのパスワードを知っているかもしれません。これでは、自分以外にもパスワードを知っている人が多いのです。そんなことを言っても、ユーザーが製品のパスワードを変える安全性を一般常識として知っているとも限りませんので、開発者や製造者は製品のことを完璧に把握しているユーザーを仮定してはいけません。こういった問題に対して一般的な回答は、セキュリティ設定という説明書やマニュアルを備えて置き、ユーザーに対して設定を促す努力がなされます。
次に障害時の安全確保です。システムの障害は、さまざまな原因で発生します。障害が発生した場合、システムや環境がその障害にどのようにリアクションするかが重要です。最も望ましいのは、故障しにくい設計をしたうえで、アプリケーションを”安全に”故障させることです。
プログラム設計では、エラー処理もしくはエラーハンドリングが埋め込まれています。一般的には、多くの言語でサポートされているtry catchステートメントをコーディングすることで実行されます。try catchステートメントは、tryブランチにエラーが発生する可能性のあるコードを記載し、catchブランチにエラーが発生した場合に実行されるコードを記載します。もしも、tryブランチで実行されたときに、例外エラーが発生した場合には、catchブランチのコードが実行されます。これは、条件分岐に使われるif then文に似ていますが、if文内の条件式は処理の実行の成功を前提としています。より具体的な使い分けを言うため、ログイン処理を例に説明します。ログイン画面でログインIDとパスワードを入力し、データベース内のアカウント情報と照合するシステムがあったとします。ログインIDとパスワードのペアが誤っている場合やパスワードの有効期限が切れている場合など、データベース内のアカウント情報をベースに実行される処理に関しては、正常な処理の一つとして、それぞれに応じたユーザーへの誘導も異なるため、if文で制御されているでしょう。一方で、データベースと接続できるがレスポンスが返ってこないなど、想定していなかったことが原因でなぜかうまくいかない場合にも、システムエラーといった画面をユーザーに返却しなければならないときもあります。この場合には、データベースの接続処理に対しては、try catchを仕掛けておくことが考えられます。
try catchとログイン画面は具体的な実践方法の話でしたが、このように障害が発生した際の安全確保の方法は数多くあります。これらは何を安全な状態として扱うのか?という観点で大きく、フェ-ルセーフかフェ-ルソフトという対策に分類されます。フェールセーフは、部品の故障が発生した際に、なるべく安全な状態に移行するような仕組みにすることです。try catchの対処方法では、ユーザーにとってはエラー画面など返されてもうれしくありませんが、システムにとっては不安定な状態で利用させるよりも安全です。一方で、フェールソフトとは、部品が故障した後もシステムの動作を継続させることです。違う言い方をすると、部品の故障が完全なシステム故障にならないように切り捨てる策でもあります。シンプルな例は冗長化です。同じシステムのセットを2つ用意しておき、片方が致命的な損傷をしても、もう片方が全体的な動作を補完します。フェールセーフとの違いは、現時点の機能をキープするかどうかです。この違いをより説明するために火災の例を上げます。火災が発生したとします。フェールセーフでは施設のドアは一斉にオープンとなり、人命を守るほうに移行していきますが、フェールソフトの考え方では施設のドアはクローズされたままでセキュリティ機能を維持しようとします。これらの概念はどちらがよいということではありません。普通の商業ビルであれば、フェールセーフでしょうし、銀行の金庫室、飛行機、医療研究室など、機能自体を継続しなければ人命に関わる致命的なものに対してはフェールソフトが採用されるように、保護する対象の役割に応じて変わります。