プログラミング言語を学んでいて、あまりピンと来なかったのがセキュリティ絡みの単語。
(PHPのhtmlspecialchars、フォームのSCRF対策など)
セキュリティ対策が必要なのは何となくわかるけど、それが無いとどう問題なのか?どんなリスクがあるのか?しっかりと腹落ちしてませんでした。
今回は、セキュリティへの知見を深めるべく記事を書いてみました。
▪︎何についての記事?
webサービスにおけるセキュリティについての記事です。
セキュリティ対策をしないとどんな危険があるのか、対策方法など、参考書を元に書きました。
▪︎記事のゴール
セキュリティ対策について学ぶ
①基礎知識
②攻撃手法
③暗号化(HTTPS)
④対策装置
▪︎基礎知識
近年webシステムが発達して様々な機能をもつようになりましたが、それに伴い、悪意をもったユーザーからの攻撃のリスクも高まっています。
例えば今年9月、ドコモの電子マネー決済サービス「ドコモ口座」で不正利用が明らかになりました。ドコモ口座とは、ドコモが展開する電子決済サービスで、ドコモ口座と銀行口座のひもづけによって、スマホ決済が便利に使えるというものです。今回の不正利用者は、何らかのセキュリティ攻撃によってユーザーの銀行口座情報を入手。入手した銀行口座情報をドコモ口座にひもづけ、本人になりすまして銀行口座からドコモ口座にお金をチャージ。というのが今回の手口です。
この事件は、本人認証の甘さが最大の理由と考えられており、セキュリティ対策の重要性が非常によくわかる例だと思います。
上記の事件を踏まえて、セキュリティの基礎用語を押さえましょう。
▪︎情報セキュリティの3要素
まず、情報セキュリティの3要素である『機密性・完全性・可用性』について。
機密性・・・第三者(攻撃者)にアクセスさせない事。
完全性・・・情報が改ざん、消去されてない状態を確保すること。
可用性・・・利用者が必要なときはいつでも情報にアクセスできる状態を確保すること
セキュリティ対策として、これらの3要素が確保されてることがまず必須となります。
▪︎リスク・脅威・脆弱性
次に『機密性・完全性・可用性』という言葉。
なんらかの損失が生まれる可能性を『リスク』、リスクを実現する要因を『脅威』、脅威に対する弱みを『脆弱性』と呼びます。
実際に不正アクセスを受け、損失が現実化することを『リスクの顕在化』と言います。
ドコモ口座の事件の場合、何らかの脆弱性につけこまれてユーザー情報を抜き取られました。また、ユーザー認証の甘さも脆弱性として挙げられます。それらの脆弱性をついた脅威(攻撃者の不正アクセス)によりリスクが顕在化しました。
上記のようなリスクの顕在化を防ぐためには、強固なセキュリティ対策が必要不可欠となってきます。
が、その前に、「敵を知り、己を知れば百戦危うからず。」ということで、まずは攻撃者側がどんな攻撃を仕掛けてくるのか。主な手法について紹介します。
▪︎攻撃手法
・パスワードクラッキング
IDとパスワードによる認証を行う会員制のwebサイトから個人情報を抜き出す攻撃。手法は主に下記の2通りです。
①辞書攻撃・・・パスワードによく使われる単語を辞書にまとめ、しらみつぶしに試す攻撃
②ブルートフォース攻撃・・・パスワードに使われる全組み合わせをしらみつぶしに試す攻撃
簡単に破られないパスワードにするため、パスワードの条件を強固にする対策が必要です。(文字数指定+記号必須にする等)
・Dos攻撃
短時間に大量のアクセスを行うことでサーバーのキャパオーバーを狙い、サービスを停止させる攻撃。対策としては、不自然なアクセスの増加を検知して、該当するIPアドレスからのアクセスを遮断することが必要になります。
・ディレクトリトラバーサル
webで公開しているURLから、別のディレクトリを辿ることで公開されていないファイルにアクセスする攻撃です。非公開のディレクトリにアクセスすることでwebサーバーのパスワードを取得し、webサービスへの不正ログイン等の攻撃に繋げてきます。
対策としては、まず機密性の高いファイルは第三者からログインできない場所に格納すること。また、リクエストに含まれるURLのチェックをして、非公開のファイルがしてされていないかのチェックが必要です。
・SCRF
フォーム関連でよく聞く名前ですね。
SNSのような投稿型のサイトで狙われやすい攻撃です。投稿の中に悪意のあるサイトへのリンクが表示され、そのリスクを踏むと、ユーザーのSNSに対して勝手に操作を行うスクリプトが実行されます。それにより悪意のある投稿やパスワードの変更がなされ、本人へのなりすましが行われます。
他にも攻撃の手法は様々ですが、今回は代表的なものを紹介しました。上記のような攻撃を受けないために、 プラグラムへのセキュリティ対策が必要になるのですね。
次は、これらの攻撃への対策方法を紹介します。
▪︎暗号化(HTTPS)
URLの冒頭に、HTTPSという単語を見たことがあると思います。HTTPは通信時のプロトコルですが、HTTPSとは何なのか?これは、webサイトにおいて、脅威から大切なデータを守るための仕組みです。正式名称はHTTP over SSL/TLSで、通信を暗号化することで下記のようなリスクを軽減してくれます。
・盗聴防止・・・データを暗号化することで盗聴を防止する。(例)フォームから送った個人情報など。
・改ざん防止・・・データの改ざんを防止する。(例)ネットバンクの振り込みの改ざんなど。
・なりすまし防止・・・webサーバーに『SSLサーバー証明書』と呼ばれる電子証明書を配置することで、webサイトの運営元を確認できる。
上記の理由により、HTTPよりもHTTPSの方が安全性が確保されています。ただしHTTPSだから絶対に安心という訳ではないので、セキュリティへの意識を徹底するに越した事はないでしょう。
▪︎対策装置
様々な攻撃を防ぐための装置も存在します。ここでは代表的なものを紹介します。
・ファイアーウォール
サービスに必要な通信のみを許可し、それ以外の通信を拒否してくれます。広く使用されてるものとしてはパケットフィルタ型が挙げられます。送受信データ(パケット)のIPアドレスとポート番号をチェックし、許可したIPアドレス・ポート番号以外の通信を防いでくれます。
・IDS/IP
不正アクセスと思われる通信を検知してくれます。IDSは管理者への通知のみ、IPSは通信を遮断します。サービスの内容によって使い分けされてます。
検知方法は2つあり、既知の攻撃パターンを登録したデータベースと一致する通信を検知するシグネチャ型、普段の通信と大きく異なる通信(異常なアクセス増加等)を検知するアノマリー型があります。
・WAF
上記の装置に検知されない、一見正常な通信に見える攻撃もあります。そうした攻撃への対策として、パケットの中身を見て不正アクセスを検知するWAF(Web Aplication Firewall)が開発されました。
既知の攻撃パターンを検知するブラックリスト型と、登録されたパターンの通信のみを許可するホワイトリスト型が存在します。
まとめ
webサービスの提供において、セキュリティ対策は最重要課題である。機密性・完全性・可用性を意識し、リスク顕在化の可能性をゼロに近づける努力が必要。
攻撃手法は様々で、代表的なものは、パスワードクラッキング、Dos攻撃、ディレクトリトラバーサル、CSRFなど。
セキュリティ対策としては、HTTPSを用いた暗号化や、ファイアーウォール・IDS/IPS・WAFのような通信制限の装置が、挙げられる。
参考書
この一冊で全部わかる「Web技術の基本」 著:小林恭平、坂本陽