CSI ネットワークマスター 虎の穴 第7回

テーマ

『Webアプリのセキュリティ』

講師

中村 隆之氏
(三井物産セキュアディレクション株式会社)

資料はこちらから

第7回 開催を終えて 〜レポート&開催風景〜

12月14日(木)に、「CSI ネットワークマスター 虎の穴 第7回」を広島市まちづくり市民交流プラザにて開催いたしました。今回も、CSI会員・学校関係者・一般企業より50名を超える多くの皆様にご参加いただきました。

初めに中国・四国インターネット協議会副理事を務める広島大学教授の相原玲二氏より開会の挨拶を行いました。CSIネットワークマスター虎の穴を代表するセミナー事業に ついて、また2007年1月に広島で国内外の様々なインターネット関連の会議を行う 「Advanced Internet Tour in Hiroshima」について紹介がされました。

今回は、三井物産セキュアディレクション株式会社の中村 隆之氏を講師にお迎えし、 「安全なWebサイト構築のためのポイント」と題して、セキュアなWebサイト構築に対するポイントについてご講演いただきました。

はじめに中村氏は、Webアプリケーションにおける脆弱性の種類とその対策についてデモを交えながら解説されました。

・様々な脆弱性が存在するが、被害の重大さから考えると「SQL Injection」は重要である(中村氏)

・「個人情報の漏えいなどの問題は大半がSQL Injectionの脆弱性を突いて起こっている」(中村氏)

【主要な脆弱性の内容と対策】

・Buffer Overflow
バイナリデータを扱う言語(C言語、C++など)で発生する。不正なプログラムを実行させることができる。ユーザ入力の長さチェックなどが行われていないと発生する危険がある。

・Cross-Site Scripting
ユーザのブラウザ上で不正なスクリプトを動作させ、不正な偽ページを表示させたり、 認証情報を奪取することができる。 対策を取らずに、ページ出力の際、ユーザが入力した情報をそのまま出力してしまうと起こりえる。JAVAスクリプトが入力されると、ローカルのポートスキャンやルータの設定変更などをする危険性がある。 ユーザ入力を次のページで出力する際は必ずHTMLエスケープを行うなどの対策を 行わなければならない。

・SQL Injection

不正なSQL文をWebアプリケーション経由でDBに送り、対象外であるデータの閲覧、 改ざん、破壊をしてしまう。 SQL Injectionは良く知られる脆弱性であるが、顧客情報のDBを直接アクセスされて しまうので非常に被害が大きい脆弱性である。 DBにユーザ入力値を渡す場合は、SQL文で使用される特殊文字をエスケープする。 またはバインド変数を必ず使用する(推奨)などの対策を取る必要がある。

例) ログイン認証の入力に「 'or 1=1;-- 」と入れると認証のSQL文のwhereが 必ず真となり認証されてしまう。

・Blind SQL Injection
SQL特殊文字の入力によりエラーは表示されないが挙動が変わる。

例)ユーザ認証欄
常に真となる条件 (xxx'and 1=1--)を入力すると、正常遷移。
常に偽となる条件 (xxx'and 1=0--)を入力すると、エラーが発生。

and 以降の条件で真偽を判定することが可能となり、これを利用することで、 DB内の情報を抜き出すことができる。

・Cross-Site Request Forgeries
処理のコミット(登録完了、メール送信、振込完了、購入完了、等)を強制的に 実行させられてしまう。 発生する被害は実行させられてしまう機能に依存する。送信URL、送信パラメータを 攻撃者が推測可能である場合に発生してしまう恐れがある。 送信するパラメータの中に攻撃者が推測できない値を入れておくなどの対策が必要である。

Webアプリケーション単位の脆弱性とサイト全体の脆弱性の一覧は以下の通り。

 

アプリケーション別の脆弱性

サイト全体の脆弱性

Buffer Overflow
Cross-Site Scripting
Parameter Manipulation
Backdoor & Debug Options
SQL Injection
OS Command Injection
Client Side Comment
Error Codes
Forceful Browsing
Unnecessary Information
HTTPS Misuse
Cross-Site Request Forgeries

Unnecessary File
Server misconfiguration
Insecure Cookies
Session Hijack
Session Replay
Session Fixation
Known Vulnerability



次に、安全なWebアプリケーション開発のための基礎知識として「認証」 「セッション管理」「セッションID」「画面遷移の管理」「入力値チェック」 などについて解説いただきました。

セッション管理については、「BASIC認証」「Digest認証」「CookieにセッションIDを入れる」 「hiddenにセッションIDを入れる」「HTTPSクライアント認証」などが挙げられましたたが、 それぞれにメリット・デメリットがあるため、サイトが取り扱う情報・ユーザによって、 手段を使い分ける必要があると解説されました。

「BASIC認証」or「Digest認証」
特定の集団にのみアクセスを許可させたいサイトで有効

「CookieにセッションIDを入れる」
個人情報を扱うが、それほど重要性が高くないサイトで有効

「hiddenにセッションIDを入れる」
機密性の高い情報を扱うサイトで有効

「HTTPSクライアント認証」
B2Bなど、特定少数のユーザ向けのサービスで、重要な情報を扱うサイトで有効

最後に、ユーザとしてWEBサイトを立ち上げる際、運用する際のポイントと対策について、企画〜運用までの一連の手順に沿って解説いただきました。

例えば、Webサイトを企画する際のポイントとしては、サイトで扱うデータ(資産)の明確化に気をつけ、データを収集するにあたりどのような脅威が考えられるかを事前に 検討した上で、構築するWebサイトへの対策を講じなければならないと指摘されました。 また、サイトの重要度を判断した上で、開発経験・セキュリティに関する理解度などを考慮に入れ発注業者を選定することも重要で、ここで判断を誤ると、脆弱性が作りこまれる危険性があると説明いただきました。

特に気をつけるべき脆弱性に対する対策

・不正な入力に対する入力値チェックおよび無害化
・SQLインジェクション
・OSコマンドインジェクション
・認証回避
・セッション乗っ取り

また、設計時のポイントとして、安全性を保つ設計方針のポイントを以下の通り挙げられました。

・外部からの入力は全てチェック
・不要な情報をユーザ側から受け取らない。
・必要最小限の権限しか与えない。
・フェイルセーフ

最後に、発注側でもセキュリティに関する検証を行うべきであると述べ、専門家がいない場合の検証方法を紹介いただき講義を終了されました。

【簡単な脆弱性チェックの方法】

・ユーザ入力欄に「"><script>alert()</script>」と入力した場合、スクリプトが動作しないように、HTMPエスケープが行われているか。

・「'」(シングルクォート)を入力した場合、おかしな挙動をしたり、DBのエラーが出力されたりしないかどうか。


次回のCSI ネットワークマスター 虎の穴 は市民講座として「Advanced Internet Tour in Hiroshima」内の併設プログラムとして 開催いたします。次回市民講座の参加費は無料となっております。多くの皆様のご参加をお待ちしております。 よろしくお願い申し上げます。

お問い合わせ先

CSI事務局 セミナー担当:池上

セミナー専用Tel:090-7772-5114 (受付時間 平日10:00-18:00)
e-mail:seminar-sec[at]csi.ad.jp

主催:特定非営利活動法人 中国・四国インターネット協議会(CSI)