セキュリティ完備のシステム開発を発注する前に知っておくべき基礎知識

キーボードと鍵

更新日:2017年09月25日 | 公開日:2017年06月20日

誰もが「自分だけは大丈夫」と考えがちなリスク対策ですが、インターネットのセキュリティ対策も例外ではありません。
セキュリティ問題は、起きてみて初めてことの重大さに気がつく、そしてそのときにはすべてが遅い…といった悲劇になりがちです。

では、いつの時点からセキュリティ対策をしていたら遅くないのでしょうか?個人レベルでは「パソコンを買ったら」というのは正しい答えですが、企業で使うシステムで同じ常識は通用しません。
企業でのセキュリティ対策を始める時期として「納品されたら」と漠然と考えていた担当者の方は、今すぐその考え方を変えてください。

企業で使うシステムにおいてセキュリティ対策を始める最適な時期は、システムが納品された時点ではなく、システムの発注をする時点、いえ、もっと遡って「システムの開発を考えた時点」=「外注先を選び始めた時点」であると言えるのです。

極端な話、インターネットに接続をしなければネットワーク経由のクラッキングの確率はほぼゼロにすることができます。
つまり、完全にクローズドの環境の中で運営することのできるシステムであれば、そもそも設計段階で「ネット接続なし」という仕様にしてしまえば、納品後のインターネット経由のセキュリティ対策をまったく行わなくても、セキュアな環境は保たれます。

そこまで極端な話でなくとも、ネットワークに対してオープンなシステムを構築しながら、同時にありとあらゆる不正アクセス対策を行うことだけがセキュリティ対策の唯一の方法ではありません。

設計段階で、システムにアクセスする必要のある人員を厳選し、ごく限られたプライベートネットワークからしかアクセスできない仕組みを構築しておけば、セキュリティ対策の規模も費用も抑えることができますし、不確実性もかなりの部分まで減少させることもできます。

とはいえ、こうした方法をすべて発注側で想定し、開発会社に指示を行うということも現実的ではありません。
一番よいのは、RFP=Request For Proposal(提案依頼書)の段階で、開発会社にセキュリティに関する事項を含めて提案を依頼すればよいのです。

その場合、発注者側では、RFPの中で「セキュリティの提案もお願いします」という漠然としたリクエストではなく、「想定される危険性を列挙して、それに対してどんな有効なセキュリティ対策があるのか提案してもらう」という積極的な態度が必要となります。

この記事では、そうしたRFP作成のための「セキュリティ完備のシステム開発を発注する前に知っておくべき基礎知識」についてまとめます。
「システムの開発を考えた時点」=「外注先を選び始めた時点」=「RFPを作成する時点」からセキュリティ対策を立てることで、安全で安心なシステムの構築を目指しましょう。

この記事では、今日インタフェースとして最も広く採用されている、webブラウザ経由の攻撃の危険性、機密保持の根幹である認証周り、サービス継続に重大な影響を及ぼす全般的な脆弱性の話題、を柱に整理します。

ブラウザを経由した攻撃対策

マウスを操作する人

社内で使うシステムにせよ、外部ユーザーに開放されたシステムにせよ、ブラウザを使ってデータのやり取りをすることはあらゆるシステムで必要とされていると言ってよいでしょう。

特にBtoCサイトにおいては、フォームはユーザーが個人情報を打ち込んでくれるいわば顧客との大切な接点です。
フォームをすべて廃止して、メールでのみ商品の購入受付を行うというスタイルのECサイトは使い勝手の点でライバルサイトに大きく差をつけられていると言っても過言ではありません。

ブラウザのフォームは悪意ある実行コマンドを埋め込まれてしまう温床であるとも言えますが、ブラウザのフォームを一切使わずにデータのやり取りをすることはUI、UXにかなりの制約が出てしまいます。

したがって、ブラウザのフォームを使う場合には、システムの設計段階で悪意ある実行コマンドを無効にする対策が必要となってきます。

SQLインジェクションとは何か

「SQLインジェクション」とは、不正なデータベース検索用の命令文を、フォームを通じて実行するという手法です。
正常な検索では、例えば「ハンドバッグ」という普通の文字列を打ち込むと、データベースに対して「ハンドバッグという文字列を含んだ商品を表示しなさい」という命令文がデータベースに届きます。

「SQLインジェクション」では、この命令部分までフォームの中に入れてしまうことで不正な命令を実行できてしまうのです。
例えば、先程の例で言えば「ハンドバッグ」だけを入力するのではなく「ハンドバッグという文字列を含んだ商品をすべて消去しなさい」という命令文を挿入することができます。

「SQL」(Structured Query Language)というプログラミング言語自体は世界中で最もよく使われているデータベース用のプログラミング言語ですので、「消去しなさい」という命令文の使い方を含めて、情報はネット上にも広く公開されています。

RFPでのリクエストの例
  • 「ユーザーからの問い合わせや商品の購入画面などでフォームを多用するので、『SQLインジェクション』に対する対策を提案してください」

コマンドインジェクションとは何か

「SQLインジェクション」がデータベースに対する不正操作であったのに対して、「コマンドインジェクション」とは、WindowsやUNIXといったオペレーションシステムに対する不正なコマンドを紛れ込ませてシステムをダウンさせたり、サービスを不能にしたりすることを指します。

「コマンドインジェクション」が実行されると、データに関する被害が中心であった「SQLインジェクション」よりももっと広範囲に被害が拡大する傾向にあります。
例えば、「情報漏えい、ファイルの改ざん・削除」「不正なシステム操作」「ウイルスなどのマルウェア感染」「踏み台にされて他サイトへ攻撃を仕掛ける」などの被害が報告されています。

RFPでのリクエストの例
  • 「オンプレミス型の自社サーバーの環境にシステムを構築したいので、『コマンドインジェクション』に対する対策を提案してください」

パス(ディレクトリ)トラバーサルとは何か

「パス(ディレクトリ)トラバーサル」もフォーム経由で悪意のあるデータを送りつける手法です。
サーバーに格納されているファイルを閲覧したり、ファイル名を付けて保存したりする「ファイルサーバー」がよく狙われます。
フォームから特殊な文字列を送信して、非公開ファイルや、非公開ディレクトリの内容を取得してしまいます。

例えば同じファイルサーバーに、公開ファイルと非公開ファイルをファイルへのアクセス権限の設定で混在させている場合や、これは公開用のディレクトリ、これは非公開ディレクトリといった形で場所そのものを分けてアクセス権限を設定している場合に狙われます。

パス(ディレクトリ)トラバーサルの手法を使うと、通常の公開ファイルを取得する場合に「一つ上の階層」という指定を紛れ込ませたりすることで、入り口は公開ディレクトリであっても、非公開ディレクトリにアクセスできてしまいます。

RFPでのリクエストの例
  • 「ファイルサーバーの構築を考えているので、『パス(ディレクトリ)トラバーサル』に対する対策を提案してください」

パラメータ改ざんとは何か

「パラメータ改ざん」とは、正常なコマンドを送信するときにそのパラメータ(データ処理の詳細)を改ざんして、本来のコマンド以外の操作を行う手法です。

例えば、ブラウザのURLを打ち込む欄には、サイトのアドレスだけでなく商品を検索して表示させるなどの正常なコマンドを記述する場合があります。
通常は、検索したい商品名を指定するパラメータと一緒に記述されますが、その商品名を記述する場所に本来の商品とは別の商品を記述して公開されていない商品を表示させたりすることが可能な場合があります。

また、フォームを送信するときにhiddenタグという、ユーザーから見えないパラメータを送信する専用のタグのパラメータを悪用して、確認画面に表示するときに価格を改ざんして注文することなどができてしまう場合があります。

その他、Cookie情報に個人を特定する偽のログイン情報を送りつけることで、別のユーザーになりすましてそのユーザーのマイページにアクセスして情報を取得したり、なりすましたままショッピングを継続したりすることなどができてしまう場合があります。

RFPでのリクエストの例
  • 「ユーザーがマイページを持つECサイトの公開を考えているので、『パラメータ改ざん』に対する対策を提案してください」

クロスサイトスクリプティングとは何か

「クロスサイトスクリプティング」とは悪意のあるスクリプト(JavaScriptなどのブラウザ上で実行できるプログラム)を脆弱性のあるサイトに忍び込ませ、ユーザーがそのサイトにアクセスしたタイミングで実行させる手法です。

「クロスサイト」(横断的)という名前が付いているのは、この手法が登場した頃には脆弱性のあるサイトを片っ端から横断的に攻撃対象としていたからです。
しかし現在では、脆弱性のある標的サイトを特定して下記のような被害を与えることが可能となってしまっています。

「標的サイトの変数値改ざんや情報漏えい」「ログイン中ユーザーの認証を横取りするセッションハイジャック」「スクリプト機能の不正実行」「webサイトの改ざん」「フィッシング詐欺」「ユーザーアカウントの乗っ取り」「ワームウイルスの実行」など、甚大な被害が報告されています。

RFPでのリクエストの例
  • 「JavaScriptを多用したサイトになると思われますので、その場合には『クロスサイトスクリプティング』に対する対策を提案してください」

バッファオーバーフローとは何か

「バッファオーバーフロー」とは、あらかじめ確保したメモリ容量(バッファ)を上回るデータ入力をわざと実行し、プログラムの暴走を引き起こす手法です。
この攻撃を行うと、システムをダウンさせたり、意図的に誤動作を引き起こして本来公開されていないデータを取得したりすることができます。

処理容量を上回るデータを送りつけるのだから、プログラムが暴走することはあってもなぜ意図的に悪意ある攻撃が可能なのか? と疑問を持つ方もいるでしょう。
確かに、データをオーバーフロー(溢れさせる)させるだけであれば、たちの悪い愉快犯というレベルの脅威でしかありませんが、オーバーフローしたプログラムは自分でその状態を復旧させようとします。

多くのプログラムは暴走したことをエラーと認識し、エラーが起きた時点で、エラーの状態をいったん廃棄し、エラーが起きた場所に処理をし直しに行きます。
このとき、戻ってくる場所に悪意あるプログラムコードを仕込ませておくと事態を復旧させようと戻ってきたプログラムが用意された悪意あるコードを実行してしまうという仕組みになっています。

RFPでのリクエストの例
  • 「既存のサーバープログラムの一部にC言語を使用していますので、『バッファオーバーフロー』に対する対策を提案してください」

以上、インターネット時代にあらゆるシステムのインタフェースとして採用されている、「ブラウザ」をベースにしたセキュリティ問題について整理しました。

いっそ、広く攻撃手法が広まってしまっているブラウザをインタフェースにするのをやめ、独自のインタフェースにしてしまえばこうした問題は起こらないと言えます。
しかし、今日ブラウザをインタフェースにしないという選択はかなり難しいので、ブラウザベースでサービスを提供するならばこうしたセキュリティ対策について、RFPの段階で開発会社の対応策について提案を受けておくべきでしょう。

認証と承認プロセスの攻撃対策

南京錠と鍵

先程のフォームは、本来悪意ある攻撃を想定していない顧客との接点であったのに対し、認証画面は不正なアクセスを遮断するという目的を持っています。
しかし、それでもなお認証プロセスを悪用した攻撃が発生してしまします。

これらについても、定番のクラッキング手法を確認し、開発会社にRFPの段階で有効な対策の提案をしてもらうことが大切です。

セッション情報の不正取得とは何か

「セッション情報の不正取得」とは、最初の認証時点では正規ユーザーがログインしていたのに、途中でセッション情報を乗っ取られて、それ以後の操作が不正に実行されることを指します。

一般的にはあまり知られてしませんが、ブラウザはページが移るとすべて通信が切れてしまいます。
このためサイトにアクセスした最初のページでログイン認証をしていても、次のページに移ったときには自動的にログアウトした状態になってしまうのです。
そのため本来webページを遷移するたびにログインし直さなければいけないのですが、これではあまりにも不便なので、自分自身でログアウト操作するまでは、同一人物が操作を実行しているということにして、ログイン情報をブラウザやサーバー側で保持する仕組みが導入されています。
これをセッションと言います。

「セッション情報の不正取得」は、この同一とみなす仕組みが保持しているセッションIDを乗っ取ることにより、最初のログイン情報を取得していなくても、ブラウザを閉じるまでのユーザーの権限を不正使用するものです。

RFPでのリクエストの例
  • 「会員制サイトのためセッション情報を長く保持するユーザーが多いことが想定されるので、『セッション情報の不正取得』に対する対策を提案してください」

「中間者攻撃」とは何か

中間者攻撃とは、「暗号化通信を行っているので機密データが漏れることはない」と信じているユーザーの隙を狙う攻撃手法です。
社内の顧客データや、製品開発データのやり取りなどで、通常のIDとパスワードによる認証よりももっと強固なセキュリティを実装したい場合、多くの企業で「公開暗号鍵」や「秘密鍵」を使ったSSL通信を導入します。

SSL通信においては交換されるデータは暗号化され、「公開暗号鍵」や「秘密鍵」を使って暗号化されたデータを解読(復号化)します。
このため、SSLを導入しさえすればデータの安全性は完全に保たれると考えてしまうユーザーも多いのですが、実際には暗号化通信を行う二者の間に割り込んで、両者が交換する鍵情報を自分のものとすりかえることにより、通信当事者に気付かれることなく盗聴したり、通信内容に介入したりすることができてしまうのです。
これらの手法は「中間者攻撃」として知られています。

この「中間者攻撃」は、解読までに理論的に数十年かかる、などの強固な暗号システムであっても、まったく無効化することが可能です。

RFPでのリクエストの例
  • 「SSL通信を導入して機密性の高いデータのやり取りをしたいのだが、『中間者攻撃』に対する有効な対策も提案してください」

情報漏えいとは何か

「情報漏えい」については、インターネット上の認証以外にもさまざまなセキュリティ対策が必要になってきます。
例えば、内部の関係者による印刷物の持ち出しや外部メディアへの情報コピー等、インターネットアクセスの認証をしっかりすれば防げるという考え方では対応できない事態があります。

IPA(独立行政法人 情報処理推進機構 セキュリティセンター)では、「情報漏えいを防止するための7つのポイント」を公開していますが、こうした指摘をいかにして実現するか、RFPの段階でシステムの運用面を含めて提案を受けておくようにしましょう。

RFPでのリクエストの例
  • 「派遣やアルバイトのスタッフなどもシステムを触る権限があるので、『情報漏えい』に対する有効な『運用対策』なども提案してください」

ここまで、ブラウザベースのユーザーインタフェース、認証周りのセキュリティ対策について整理してきました。
最後に、これらの2つの領域とも重なりますが、明確な攻撃目標を持たない、レスポンス低下などの嫌がらせ的な攻撃についてまとめます。

嫌がらせ的な攻撃に対応する脆弱性対策

地球儀とスマホとペン

次に、明確な目的を持ってセキュリティホールを攻撃するようなタイプとは違った、被害を与えることを主目的とした嫌がらせ的攻撃の対策について整理します。

DoS、DDoS攻撃とは何か

「DoS、DDoS攻撃」とは、webサーバーに対してブラウザをリロードして再表示させるなどの無意味なリクエストを大量に送りつける手法です。
これまで見てきたブラウザのフォームから悪意あるコマンドを忍び込ませたり、認証周りの高度なセキュリティクラッキングを実行したりするのとは異質の手法であることが分かります。

ここで例に挙げたブラウザをリロードするなどでwebサーバーに高負荷をかけるという攻撃は、パソコンのF5キーを連続的に押せばよいだけなので、その気になれば子供でも実行することができます。
しかし単体のパソコンから実行するDoS攻撃を拡張して複数のパソコンから仕掛けるDDoS攻撃を実行すれば、その効果は悪意あるハッカーが攻撃を仕掛けたときのように、webサービスを停止に追い込むほどの効果を持ちます。

また、webサービスをつながりにくくするという以外にも、被害者に経済的ダメージを負わせることが可能です。
例えば、自社のサービスを公開する上で、従量制課金サービスなどを利用している場合、アクセスが集中すればするほど売上には結びつかない従量制課金が発生してしまいますので、経済的損失が発生します。
このタイプのDoS攻撃はEDoS攻撃(Economic DoS Attack)と呼ばれています。

RFPでのリクエストの例
  • 「オンラインゲームサービスで、不特定多数の人に24時間無料で提供する性質上、「DoS、DDoS攻撃」などの愉快犯対策も提案してください」

ウイルス・ワーム・スパイウェアとは何か

「コンピュータウイルス」の特徴は、人間の体内のウイルスと同じように、対象に感染したあと自分自身のセルフコピーを作成して、次々と悪い影響力を拡大していくことにあります。
最初は一つのファイルだけであったものが、あっという間に別のファイルへと感染していき、それらのファイルがサーバーをまたいでコピーされたり共有されたりすることによって別のPCへと拡大していきます。
最初は1人の人間の体の中に入り込んで悪さをしていたものが、周りの人に風邪などの病原菌をうつしてしまうという点でも、リアル世界のウイルスそっくりです。
自社のサーバーが被害に遭うだけでなく、他社のサービスも破壊するおそれがあるので、早い段階で対策を立てておく必要があります。

「ワーム」の振る舞いはほとんどウイルスと同じですが、ウイルスは実行ファイルなどに感染して増殖していくのに対して、ワームは感染せずとも活動範囲を勝手に広げていきます。
振る舞いは同じでも対策方法は違ってきますので、開発会社に最適な対策方法を提案してもらいましょう。

「スパイウェア」の特徴は、サーバー内部に侵入し、サーバー内の個人情報やインターネットの購買履歴などを特定の場所に勝手に送信してしまうことです。
まさに、スパイ活動そのものですが、人間がハッキングするのと違って、自動で活動を継続するので厄介です。

インターネットバンキング利用時に利用者により入力される口座番号やログインID、パスワードなどの取引に必要な情報を盗み出して外部に送信するなどの可能性もありますので、サービスが停止に追い込まれるだけでなく、損害賠償などで高額な補償が必要になるケースが想定できます。

RFPでのリクエストの例
  • 「「ウイルス・ワーム・スパイウェア」などの人間以外の自動で実行されるウイルス対策も提案してください。また、セキュリティパッチのアップデートのタイミングはどれくらいでできるのかも提案に盛り込んでください。」

不正侵入検知(IDS)防御システム(IPS)とは何か

ここまでは、すべて設計段階でセキュリティの対策を立てていくという基本線に沿って整理してきました。
最後に、万が一不正侵入があったときにそれをいち早く検知、自動防御するシステムについてまとめておきます。

IDSとはIntrusion Detection Systemの略で、Intrusion(=侵入)をDetection(=検知、検出)するシステムとなります。

IPSはIntrusion(=侵入)を Prevention(=防御)するシステム、すなわち侵入防御システムです。

IDSもIPSも振る舞いは基本的に同じですが、不正アクセスなどを検出後、システム管理者に通報などのアクションを実施するものがIDSで、IPSはそれに加えて自分でネットワーク遮断などの防御措置を取ります。

IDSもIPSも外部からの攻撃だけでなく、この記事の「情報漏えいとは何か」で問題とした内部からの情報漏えいにも対応します。
したがって、システム運用面におけるセキュリティの強化を考える場合には、このIDSやIPSの導入は極めて有効だと言えるでしょう。

RFPでのリクエストの例
  • 「万が一不正侵入があったときにそれをいち早く検知、自動防御するシステムについても提案してください。」

【まとめ】RFPの段階で積極的にセキュリティ対策の必要性を話題にする

握手をするビジネスマン

以上、webブラウザ経由の攻撃の危険性、機密保持の根幹である認証周り、サービス継続に重大な影響を及ぼす全般的な脆弱性の話題を軸に、システム開発の最初期の段階で開発会社と共有しておくべきトピックスについてまとめました。

個人用のパソコンであれば、何万台という同じ仕様のパソコンとソフトウェアが出荷されていますので、買ってからすぐにセキュリティ対策ソフトをインストールすれば問題は解決します。
しかし、オリジナルのシステム開発においては、セキュリティ対策そのものもオリジナルである必要があります。
100通りのシステムの納品物があれば、原則としてその脆弱性についても100通りの対策が存在します。

このように考えた場合、オリジナルのシステム構築を行った開発会社こそが、そのシステムのセキュリティ対策について最も的確な提案をしてくれるポジションにあると言えるでしょう。

さらに、まだ設計前のシステム開発においてセキュリティ対策を行う大きなメリットとして、そもそも脆弱な設計をしないという最良のセキュリティ対策が可能になることが挙げられます。

例えば不正アクセス対策のプライオリティを何よりも高いところに置きたい場合、設計段階で完成したシステムにアクセスできる組織や人員を絞りこみ、例えば「社長」「開発部長」「研究所所長」などの限られた人員しかアクセスできない仕様にしてしまうことが可能です。
またアクセスポイントも「社長室」「開発部長室」「研究所所長室」に限るようにプライベートネットワークを張るなどの仕様にしてしまえば、オープンな環境を前提とした強固なセキュリティ対策そのものが不要になるでしょう。

もちろん、こうした的確なセキュリティ対策とシステム開発とを両方提供できる業者はそれほど多くはありません。
多くのセキュリティ対策は、ある開発業者の構築したシステムを、別のセキュリティ対策専門会社が対応するというパターンで行われています。

業界の情報に精通した「アイミツ」にご相談いただければ、RFPの段階でセキュリティ対策の具体的提案をしてくれる、開発のスキルとセキュリティ対策のノウハウを併せ持った会社を紹介することができます。
開発の初期段階から、開発を担当する会社にセキュリティ対策もお願いしたい、というご要望がある場合は、ぜひ「アイミツ」に声をかけていただければと思います。

いま知りたいこと
コンシェルジュが解決します!

コンシェルジュサービスは
3万社以上が利用している無料の相談サービスです。

コンシェルジュ

発注は時間も手間もかかりますよね?

コンシェルジュが解決します!

コンシェルジュに相談、あなたにあった業者を提案、発注の手間を削減!

完全無料

まずはお気軽にご相談ください