Webサービスのセキュリティ維持向上について啓蒙の案とその議論CISSP-322515株式会社リコー大平浩貴（おおひらこうき）

●セキュリティの向上は大切
•セキュリティでは特に教育・啓蒙による展開がとても大切•どのようにセキュリティを向上しようか？ •セキュリティに興味のない人、セキュリティ業務を嫌いな人にも受けれてもらえる教育を提案したい•最近はセキュリティも流行っていますが、以前はそりゃぁひどいもので•飲み屋の親父モード
•本日のプレゼン
•その教育を紹介….VulneSHOPというものを作ってみました•そのような教育が許されるかどうか議論•セキュリティの教育がどうあるべきか議論セキュリティ体感型ハンズオンOSS VulneSHOPのご紹介リコーICT研究所システム研究センター S&S開発室AC開発グループ大平浩貴CISSP-322515 ■プライベートでOSSを作りました■セキュリティが嫌いな人にセキュリティを教えるシステムです■自分の会社内に展開しました●うまくいった感じです■もしよければみんなも使ってください■おっさんになりました■ここ最近思うこと●他人の役に立ちたい●会社の役に立ちたい●社会の役に立ちたい■誰しもおっさんになると、そういうことを考えるらしいみんなの「困りごと」を解決しよう！セキュリティ屋としてみんなの役に立とう！
■弊社は実はみんなセキュアである●セキュリティ業務は全員行っている／社内体制も整備されている■あまり困っていない？ ■セキュリティが嫌いな人もいる●セキュリティ対策は自由な開発業務の妨げだと思う●怖がらせようったって、だまされないぞ●まずはお客様に喜んでもらう機能をつくるのが大切、セキュリティは後回しに世の中で一番怖い物は...怖いもの知らず■セキュリティの行動は充分■セキュリティのマインドもっと身につけたい！ ■マインドがあれば…… ●現場の対応が高度化するく「なぜ？」を知っていると強い●緊急時に対応できる■セキュリティが嫌いな人は、セキュリティのマインドを持てない●嫌いな物を理解するのは難しい●ピーマン嫌いにピーマンのおいしさを理解させたい■セキュリティが嫌いな人は、痛い目にあったことのない人●危険を説いてもそっぽを向かれるだけ■痛みを教えるのではなく、他人に痛みを与えることを教える■簡単に攻撃できることを体感してもらう●さすがにみんな大人なので…… ■自分が簡単に攻撃できることを知れば、誰でも自分を攻撃できることに気づく
■攻撃だけを教えると●自分が何でもできる気になってしまう人もいる■攻撃は防御よりもリスキーな行為であることも教えよう●違法であることもちゃんと教える
■部署内展開
● {興味深かった:9割,普通だった:約1割,興味なかった:なし} ● {新しい知見だった:4割,知っていたが一部新しい:5割,知っていた:1割} ● {業務に役立つ:9割,どちらともいえない:1割,役に立たない:なし} ●どんな部分で役に立つ？ ■ GUIをWebにしているので、これから気をつける■ユーザ登録やログアウトなどの怖さ■ネットワークに関わる以上無視できないと思った■ etc... ●そのほか■ハンズオンであることがよかった■これから教育範囲を広げていきます！ ● FacebookにOSSを載せたら、自社の知り合いから引き合いが….( w

■ OSSソース
● https://github.com/kotowarinone/VulneSHOP
■ハンドアウト
●日本語： http://www.slideshare.net/kotowarinone/web- security-hojp01 ●英語：鋭意作成中■ご興味のある方はどうぞ●ご利用いただけますとすごく嬉しいです
11
VulneSHOPの紹介と議論大平浩貴（おおひらこうき） kotowarinone@qmail.com https://www.facebook.com/kohki.ohhira
▶セキュリティを啓蒙する▶他者への攻撃を教えることで、自分も同じ目にあう危険があることを理解させる▶マテリアルは二つ▶ Webサイト実現OSS ▶ユーザに攻撃してもらうための脆弱Webサイト▶解説ハンドアウト▶日本語版：公開中▶英語版：鋭意作成中
▶機能▶ ECサイトの真似事
▶商品三つを販売▷商品を複数個力－トに投入・保持▶カートの中身を購入▶購入履歴確認▶ユーザアカウント編集▶ログアウト▶パスワード忘れ対応▶保有脆弱性▶サ二タイズなし▶入力のHTML表示▶入力のSQL実行▶入力のOSコマンド実行
▶セッションID推測可能▶単調増加のスカラー値▶商品はシーケンシヤルなIDで指定▶ formメソッドは全てGETを使用3
▶配布▶ https://github.com/kotowarinone/VulneSHOP ▶ MITライセンス▶実行環環境▶ Node.js （サーバサイドJavaScript実行環境） ▶ Express （Node.js用Webサイトフレームワーク) ▶レンダラはEJSを採用▶ jsSHA （Brian Turek氏によるJSライブラリ） ▶ MySQL （データ記憶用RDMBS） ▶ Mailコマンド▶昔からあるmailコマンド▶ OSはUNIXライクOSを前提
(実験) VulneSHOPサイトの正常な使い方(実験）VulneSHOPサイトへの攻撃方法と防御▶非公開情報の参照▶ SQLインジェクション▶セッションハイジヤック▶ OSコマンドインジェクション（解説）そのほかの攻撃(解説）2015年最近のWebセキュリティ解説
© 2015 Kohki Ohhira, CISSP-322515

▶配布元▶日本語▶ http://www.slideshare.net/kotowarinone/web-security-hojp01 ▶英語▶鋭意作成中▶ページ数とプレゼン所要時間▶実験・ハンズオン：45分～1時間▶ 40ページほど▶解説：（端折って30分）～50分▶ 30ページほど
▶ IPAのAppGoatと類似▶ AppGoatはとても高度A当該VulneSHOPと比べたAppGoatの特徴▶一人で自習できる▶脆弱性Webサイトを運用する担当者が不要▶多彩な脆弱性に対応▶ XSS / SQL injection / XSRF / OS command injection / Directory traversal / HTTP header injection /その他認証不痛/ Session hijack / Error message放置▶プログラムの脆弱性修正までサンドボックスでできスペ▶ VulneSHOPとの違いは後で言及77 VulneSHOPにおける攻撃教育の実際
▶ Wi-Fiに接続▷ SSID: Vulne52G (5.2GHz)  / Vulne24G  (2.4GHz) ▶パスワード：password ▶ IPアドレス等はDHCPにより配布▶ VulneSHOPサイトに接続▶ http://192.168.2.2/ ▶ブラウザは新しいものを推奨▶使用しているタグは基本的にHTML2.0レベル▶ただし、ユーザが誤って実運用しているパスワードを入力してしまう事故に対応するため、JavaScriptライブラリ（jsSHA）を使って不可視化（SHA256化）している›新しいブラウザを推奨操作する事柄▶ユーザに依頼する具体的な操作▶ formのinputコントロールへ入力する▶ URL部のGETメソッドの値を書き換える▷スマートフォン・タブレットでも攻撃可能▷ iPhoneなどはGETの文字の書き換えが若干面倒▶ただし、GETの入力文字数は数文字なので、あまり手間をかけさせない
© 2015 Kohki Ohhira, CISSP-322515
紹介体験1/4 :サイトを普通に使う
1.ログインページの参照2.自分のアカウントの作成3.自分のアカウントでログイン購買を試す4. ▶商品をカートに入れる/チェックアウトする/履歴を見る5.自分のアカウント変更を確認する6. ログアウトする7.パスワードをリセットする■紹介体験2/4 .非公開情報を参照する
▶ URLに注意しつつ、ニンジン・ズッキ・大根をカートに入れてみよう▷それぞれ、putintocart.htmlに対してcommodityid=1~3が指定されている▶じゃあ、commodityid=4の時は？ ▶試してみよう{=, =} {C}    }  localhost/shop/putintocart.html?sessionic=2&commodityid=4
▶価格の$ 521,000,000は総工費▶ JPYで650億円、レートは8月の夏休み頃▶何の話か分からない人は、 commodityid=4でアクセスしてみよni ▶わざわざ地下鉄乗り継いで、人が少ない早朝に撮影しに行ったら曇りだった▶何？この謎写真
▶ユーザが使うことを前提としていないデータが使われる▶番兵(データ構造において、終端を示す特殊なデータ) ▶テスト用データ▶　オーバーフロー時に残存するごみデータ▷ テストデータ・ごみデータがお客様に見えてしまう事故は多数起きている▶　損失だけでなく、こじれて裁判にも発展しかねない▶ 価格/付与ポイント/キャッシュバック額が異常▶最近はテストデータを本番環境で扱うことも流行している▶評価設計しっかりその他、IDの推測不可能化なども提案紹介体験3/4  : SQLインジェクションでログインする
▷ログインでは、ユーザアカウントを確認する▶ユーザアカウントはDBに記録されており、その参照には下記のSQL文が実行される▶ unameとpassがユーザの入力' SELECT userid FROM users WHERE username="' +uname+ AND  password="' +pass+' " ▶このクエリで1行発見できれば認証成功、0行なら認証失敗▶動作例uname=user pass=abf3123・・・・・・・・・・ea3 ' SELECT userid FROM users WHERE username="user" AND password="abf3123・・・・・・・・・・ea3" ;; '
18

▶では、ユーザの入力がこんな時は？ Login Page " OR 1=1 LIMIT 1 ; -- uname=" OR 1=1 LIMT 1 ; hashedpass= Password --の後ろに空白があるのを忘れずに▶ SQL文はこうなるOR ' SELECT userid FROM users WHERE username=" " 1 = 1  LI MI  1 ;  - - " AND password=“01ba747…." ▶常に成立する条件となる▶成立行はLIMIT修飾子で1行に制限している-以降はコメント行になる
最良の対策として、O/R Mapper（ORMとも）を提案▶　言語で参照する「0:オブジェクト」と「R:リレーショナルデータベース」とをルールに従って自動的に連結する▶　オブジェクト〜DBのデータの交換を自動化するので変なDB操作は混入しないA計算機資源の消費と交換に検索操作を自動化する▶　サニタイズについても言及▶　適切なサニタイズを、適切なタイミングで▶　いつサニタイズするかも言及紹介体験4/4  :ハンズオンのまとめ
▶ご理解のとおり、現実の攻撃はこんなに簡単じゃない▶ TLSで暗号化されている▶ GETメソッドを使用しない▶操作がログに残っている可能性が高い▶　特にGETメソッドでSQLインジェクションを行った場合、初期状態で、 URLがそのままサーバログに残る▶法執行機関の対策も素晴らしい▶法律で刑事罰を与えることがしっかりと明記されている▶　「不正アクセス行為の禁止等に関する法律」 ▶攻撃者は自分のIPアドレスを残せない▶　警察はログに残ったIPアドレスと時刻から回線を特定できる▶容疑があれば、警察は当然仕事をする▶　当然被疑者のPCは押収されてフォレンジックへ© 2015 Kohki Ohhira, CISSP-322515
▶攻撃を補助するものが世に蔓延している▶ ボットネット・脆弱性放置のホスト/ルータ/AP/その他▶しかし、このハンズオンで攻撃の難しさも理解して頂けたと思う▶攻撃者が痕跡を残さずに深く長く攻撃するのは薄氷をふむような行為▶攻撃者が嫌がるようなサイト・サービスにしよう▶攻撃者が嫌がるような口グを取ろう▶法治国家において、攻撃はものすごくリスクが高い行為▶ちよっとしたミスで、攻撃者は犯罪捜査の対象となる▶くだらないイタズラで人生を失いたくない人は攻撃すべきでない
▶今googleでloginという文字を検索したら、 3,470,000,000件引っかかった▶今回説明した攻撃に対して脆弱なサイトは必ずあるだろう▶攻撃できるものを攻撃するというポリシーの攻撃者も多い▶　自分のサイトが攻撃対象にならないようにミスや手抜きの組み合わせで、リスクは指数関数的にA増大する▶手間を惜しむと簡単にセキュリティホールができてしまう▶　また、そういう脆弱サイトに無為に触れないように▶　攻撃なんてもってのほか▶　八二一ポットや攻撃研究家、脅迫に使われることも
違い25
▶ AppGoat ▷天下のIPAさまによるソリューション▶一人で自習できる▶多彩な脆弱性に対応▶ XSS / SQL injection / XSRF / OS command injection / Directory traversal / HTTP header injection /その他認証不備/ Session hijack / Error message放置プログラムの脆弱性修正までサンドボックスで教え) Re
▶攻撃させることで理解を促進することは同じ▶基本方針が違う▷ AppGoat :プログラマに対するセキュリティ教育▶大切なことをたくさん教える▶独習可能▶完成されている▷ VulneSHOP :非プログラマも対象▶セキュリティ嫌いにセキュリティを教える▶興味を引くことが第一目標▶独習よりも教師による教育が基本▶教育の改変・活用は自由自在▶ OSSであり、解析・改変・活用OK
▶ AppGoatは、多少きびしく教育▶例：SQLインジェクションの教育1.あれれ、SQLの比較文いじっているのにうまくできないい……実はそのサイトはパスワード欄が空っぽだとエラー 2.を出す仕様でした▶な….なんか実践的？ ▶ VulneSHOPの基本的方針とは異なる▶ AppGoatはちゃんと答えさせる▶ VuIneSHOPは答えを教えて、興味を引くのが主たる流れ紹介体験のまとめ
知らなかったor知識だけで体験したことがなかった実際にインジエクションした▶この差はものすごく大きい▶未経験者から、経験者に転換する▶プログラムを作ったことのないプログラマに仕事はできない▶経験によって危機感が増す▷しかし、攻撃を教えることの是非もある▶攻撃はリスキー、防御は安全であることも教える意見交換と議論のお願いセキュリティ教育として攻撃を教えることの良し悪しをどう見るか
▷ VulneSHOPというOSSとハンドアウトを作った▶ Webサイトの簡単な攻撃を教えるもの▶セキュリティに興味を持たせる▶セキュリティ上のリスクを教える知覚させる▶セキュリティの実体験を積ませる▷プログラミング実体験のないプログラマに何ができるのか？ ▷セキュリティ対策プログラミングも同様ではないか？
▶このOSS/ハンドアウトに対する心象を教えて頂きたいいです▶そして議論したいです▶攻撃を教えてよいのか？ ▷悪意のある人が/今は悪意がなくても将来攻撃したくなった人が活用するのではないか？ ▶ 「この程度の技術なら教えても良い？」 ▶だとしたら、どの程度から先が危うい？」
▶教えたい理由▶セキュリティに興味を持たないのは痛みを知らないから▶まともに言っても理解してもらえない▶他人に痛みを与えることを教えて、自分の危機を知ってもらう▶具体的な行為を経験することで、応用が効くから\ ▷プログラミングしたことのないプログラマはダメ▶敵に何をされるのか、なぜサニタイズするのかを理解してほしい教えるべきでない理由▶悪用できる▶悪事のための技術習得のきっかけになる質問1
▷質問1：セキュリティ啓豪のために攻撃を教えるのは良いと思うか？あらゆる攻撃を教えるべきではないA.攻撃を教えてもよいが、知識に留めて行為は避けるべきB.今回の程度の実攻撃活用可能性なら教えてもよいC.暗号化、ログ改竄防御を回避できない程度何を教えてもよい、防御を高度化すべきであるD.その他E.挙手・コメントください！
© 2015 Kohki Ohhira, CISSP-322515    35
回答A/B
▶教育は防衛手段にとどめ、経験させない▶教えたことにより、正しい行動はとれる▶ 「どのように攻撃されるか」の理解は類推に頼る▶類推できる人とできない人が生じる▶類推できない人は事態に対応できない▷自分で類推できない人は切り捨てるべき？ ▶自分で類推できない人こそ教育すべき？ ▶組織力を向上するために教育する？ /切り捨てる? ▷セキュリティ嫌いでもモノづくりや組織運営がうまかったりする▷セキュリティは直接儲けにつながらない会社が多くて立場が逆だったりする…コメントください！
▶ GIZMODOさんの面白い記事▶ http://gizmodo.com/5498412/sql-injection-license- plate-hopes-to-foil-euro-traffic-cameras ▶この面白さがわかる？ ▶今日VuIneSHOPを体験した人ならわかる▶ 「あ、DROP DATABASEしてる」 ▶ 「入力を関数に通しなさい（サニタイズしなさい)」 [ORM使いなさい」とだけ教えられている人はわからない▷この記事は想定外の事態の実例ではないか？ ▷ルールの想定外の事象にも対処できた方がよいのでは？」コメントください！余談
▶攻撃＝犯罪▶犯罪を犯して困らない人と困る人がいる▶弁護士になりたい人は犯罪を犯さない▶罰金刑になると資格喪失▶医師も、会計士も、一流企業勤務も、貴重な職を失いたくない▶犯罪を犯さない、合理的理由がある人だけに教えるというのは一つの手段▶会社の教育でも、管理職に教えることの一部は一般職には秘密にしている▶いささか選民的で残念だがコメントください！
▶攻撃実用性がさほど高くない▶サニタイズなし、暗号化なし▷ ECサイト運営にあたって、これらへの対応はDue Careだろう▶では一体、どの辺に閾値がある？今回程度ならOK ？ a.今回攻撃の応用もOK ? b. ▶メールや偽Webを応用した水飲み場への誘導具体的に活用可能な脆弱性・攻撃インフラも教えてOK ? C. ▶ TorやHKLが普通になるのは苦しそうd.   攻撃戦略と手順まで教えてOK ? ▶ほかに許される基準は？
39
回答D
▶原理主義的・モヒカン主義的▶黎明期のインターネットはそうして育った▷しかし、今のインターネットは社会インフラに成長した▶黎明期の常識は適用しにくい▶インフラは質を担保するために法律で縛られることになる▶例：放送/電話/電波/電気/水など▶今の総務省のインターネット扱いはナイスバランスだと思う▷でもフロンティアスピリッツは残したい！ ▷フロンティアスピリッツはイノベーションの源泉だ！ ▶フロンティアスピリッツを残すにはどうしたらよいか？ ▶絶妙な加減の自由と規制/自主自立主義/標準化は個人に付託？ /ヘテロジニアスな環境▶水道で新ビジネスは出にくい…違いは？ /コメントください！質問2 ：あなたが社内教育チーフだとして攻撃を従業員に教える？ ▶ VulneSHOP程度の攻撃を教えたい？ ▶確実に技術の底上げになる▶しかし、いたずらをできる人は確実に増加する▶もっと高度な攻撃も教えたい？ ▶軍隊と同様で、メンバーは強い方がよい▶攻撃を教えるのは避けたい？ ▶社外への攻撃など、従業員の不要な技術が高まりすぎるとアンコントローラブルになる可能性が高い▷倫理教育が必要だが、そのメソッドが確立していない挙手・コメントください！
▷不正アクセス行為の禁止等に関する法律▶不許可者による権限昇格など、今回の説明が含まれている▶インジェクションでコマンド実行とか、あきらかに抵触▶刑法(2015年10月現在) ▲ (幇助)第六十二条正犯を幇助した者は、従犯とする▶ VulneSHOPは幇助に該当するか？ ..こわいよ
▷ IPAさんのAppGoat / SECCONさんの活動など▶先人を参考にする？ ▶彼らは法執行機関のパトロネージを得ているよう▶法執行機関に相談するときの参考になりそう▶結局運用次第なのか▶ AppGoatも、頑張って丁寧に悪用するなと伝えている▶現在、相談する法執行機関の選定と、そのための情報収集をしている状況▶良いつてがあれば、情報ください！
▶情報倫理の今ある資料は一般ユーザ向けに終始▶知財保護/コミュニケーションマナー /法規遵守/自主保護な▶いい資料はありませんか？ ▶社会倫理・技術倫理の拡張は有効かも▶例：強者が弱者を蹂躙してはならない理由▶全体最適ではない▶社会が維持できない▶多様性が失われる▶強者で社会を形成するのは特定資産だけで資産形成するようなもの▶強弱の指標がない▶自動車に乗った人がか弱い子供を殺してよいわけではない
▶各国法規対応（ローカライズ） ▶個人としての活動なので簡単ではない▶各国の団体に相談して、その伝で法執行機関に相談するしかない？ ▷価値を高めればISOCは相談に乗ってくれる？ ▶言語的な問題（グローバライズ） ▶英語化は必須▷ EN/JP→各国は有志が居るかも…居たらうれしいなぁ…まとめ長時間おつきあいくださりありがとうございました▶振り返り▶元々のお題▶セキュリティに興味のない人にセキュリティを伝えたい▶痛みを教えるのではなく、痛みを与える方法を教える▶痛みを知らない人はこの方が理解しやすい議論▶攻撃を教えるのはよいか？ ▶程度は？ ▶ガバナンス・法・倫理は？
▶世の中には▶持たない方がいいものもある（銃とかナイフとか） ▶ …だから、知らない方がいい情報もある▶知ったからには、責任が必要▶日本の法律は素晴らしく、うまくフォローしてくれている▶強者こそ遵守が求められる倫理▷ホワイトハッカー…などという言葉が出てくるようになったまぁ、VulneSHOPはそんなに大上段に構えるようなレベルの攻撃でもないですけどね▶今後は大上段に近づきたい
▶日本のICT分野はブラック企業のイメージがひどい▶大学などの高等教育では情報科が不人気という話もある▶子供が触れるICTであるゲームも、ソフトウェア販売からコンテンツ販売へ移行▶ ICT技術の裾野が広がりにくい▶セキュリティは最近話題だが、特定領域に終始▶各種情報漏えい事件▶マイナンバー対応など▶あるべき姿は？ ▶法・倫理を守る（他人を食い物にしない）、技術を大切にする、技術の価値を守る▷なんだ、セキュリティって、メインストリームじゃないか！ ▷ IAjapan IPv6ディプロイメント委員会の皆様▶藤崎智宏さま、新善文さま▷ IPv6普及高度化推進協議会共存WGアプリv6化SWGの皆様▶波田野裕一さま、渡辺露文さま▶株式会社リコーのみなさん▶東義一さま、田村博さま▶ ISOC-JPのみなさん▷橘俊男さま、本日ご協力・ご参加くださったみなさん▶うちの女房▶大平有さまもしよろしければ、使ってみてく
▶ VulneSHOPの配布場所▶解説http://www.slideshare.net/kotowarinone/web-security-hojp01 ▶ OSS https://github.com/kotowarinone/VulneSHOP ▶社内教育などで使ってくださったらうれしいです▷役務になりますが、講演/解説のご要望にも対応できます▶英語での講演は、高品質フリーランス通訳（うちの女房）も付けられますでも、ご自身で活用すればもちろん無料
▶大平浩貴（おおひらこうき） ▶ CISSP-322515 ▶ kotowarinone@gmail.com ▷ https://www.facebook.com/kohki.ohhira