More Related Content
Similar to 若手エンジニアのためのセキュリティ講座 (20)
More from Hiroshi Tokumaru (20)
若手エンジニアのためのセキュリティ講座
- 2. 徳丸浩の自己紹介
• 経歴
– 1985年 京セラ株式会社入社
– 1995年 京セラコミュニケーションシステム株式会社(KCCS)に出向・転籍
– 2008年 KCCS退職、HASHコンサルティング株式会社(現社名:EGセキュアソリューションズ株式会社)設立
• 経験したこと
– 京セラ入社当時はCAD、計算幾何学、数値シミュレーションなどを担当
– その後、企業向けパッケージソフトの企画・開発・事業化を担当
– 1999年から、携帯電話向けインフラ、プラットフォームの企画・開発を担当
Webアプリケーションのセキュリティ問題に直面、研究、社内展開、寄稿などを開始
– 2004年にKCCS社内ベンチャーとしてWebアプリケーションセキュリティ事業を立ち上げ
• 現在
– EGセキュアソリューションズ株式会社 代表 https://www.eg-secure.co.jp/
– 独立行政法人情報処理推進機構 非常勤研究員 https://www.ipa.go.jp/security/
– 著書「体系的に学ぶ 安全なWebアプリケーションの作り方」(2011年3月)
「徳丸浩のWebセキュリティ教室 」(2015年10月)
– 技術士(情報工学部門)
2
- 4. Webサイトへの侵入経路
• 管理用ツールの認証を突破される
– telnet, FTP, SSH等のパスワードを推測される
– FTP等のパスワードがマルウェア経由で漏洩する
• ソフトウェアの脆弱性を悪用される
– 基盤ソフトウェアの脆弱性を悪用される
• Apache, PHP, JRE(Java), Tomcat, …
• 脆弱性は世界中で調査され、日々新たな脆弱性が報告される
– アプリケーションの脆弱性を悪用される
• 個別のアプリケーションの脆弱性
• SQLインジェクションなど
Copyright © 2012-2017 EG Secure Solutions Inc. 4
- 5. 脆弱性とは何か
• 脆弱性とは、悪用可能なバグ、設定不備など
• 悪用可能なバグの例
– バッファオーバーフロー
– SQLインジェクション
– クロスサイト・スクリプティング
• 悪用可能な設定不備の例
– デフォルトのパスワードのまま放置している
– パスワードとして「password」を設定している
– 任意のメールを中継する設定(オープンリレー)
– インターネット経由で誰でも使えるPROXY
Copyright © 2012-2017 EG Secure Solutions Inc. 5
- 6. 攻撃を受けるとどうなるか?
• 情報漏洩
– サーバー内の重要情報、個人情報等が外部に漏洩する
– Aさんの情報をBさんが見てしまう事故(別人問題)も漏洩に分類する
• データ改ざん
– DB、ファイルの書き換え、
– 画面の改変
– スクリプトやiframeを埋め込み、閲覧者がマルウェアに感染
• DoS攻撃
– サービス停止に追い込む
• なりすまし
– 別人になりすまして操作ができる
Copyright © 2012-2017 EG Secure Solutions Inc. 6
- 8. Webサイトに対する侵入事件のトレンド
• 2000年:各省庁を狙った改ざん事件
– 「ファイアウォールが導入されていなかった」という報道から、FW導入のきっかけに
• 2005年:カカクコム、ワコールなどに対するSQLインジェクション攻撃(理論的
可能性から実際の脅威に)
• 2008年:SQLインジェクション攻撃が急増
• 2009年~2010年:Gumblar騒動
• 2011年:PSN事件、ソニー関連会社への攻撃、Lizamoon攻撃(SQLi)
• 2012年:Anonymous、国際情勢がらみの攻撃
• 2013年:パスワードリスト攻撃など不正ログインの多発
• 2014年:Heartbleed、Strutsの脆弱性等
• 2015年:Joomlaの脆弱性CVE-2015-8562に対する攻撃
• 2017年:WordPress REST APIの脆弱性、Struts2 S2-045脆弱性に対する攻撃
Copyright © 2012-2017 EG Secure Solutions Inc. 8
- 9. セキュリティはイタチごっこと言うけれど
• 2000年頃の侵入事件は、以下が多いと推測
– ローカルネットワーク向けのポート(RPC等)に対する攻撃
– 管理用 telnet / ftp / ssh に対する辞書攻撃
– Apache や sendmail の脆弱性悪用
• 上記が対策された後に、SQLインジェクションの全盛期(2005年~2010年頃)
• SQLインジェクションが対策されてくると下記が台頭
– フレームワーク(Struts2、Ruby on Rails等)の脆弱性を狙った攻撃
– 著名アプリケーション(WordPress, Joomla! 等)の脆弱性を狙った攻撃
– 管理端末のマルウェア感染(端末脆弱性や管理者の不注意)
(いわゆるガンブラー、標的型攻撃)
– ユーザーパスワードに対する攻撃
(フィッシング、パスワードリスト攻撃)
Copyright © 2012-2017 EG Secure Solutions Inc. 9
- 11. 責任と契約について
• ウェブアプリケーションの脆弱性の責任は発注者か開発者か
– 発注者に責任というのが主流のよう
– ただし、判例があるわけではないので要注意
• 経産省の「モデル契約書」では、以下のような記述がある
• 発注者は自衛のために要求仕様にセキュリティ要件を盛り込んでおくべきだが…
11
なお、本件ソフトウェアに関するセキュリティ対策については、具体的な機能、
遵守方法、管理体制及び費用負担等を別途書面により定めることとしている
(第50 条参照)。セキュリティ要件をシステム仕様としている場合には、「システ
ム仕様書との不一致」に該当し、本条の「瑕疵」に含まれる。
(セキュリティ)
第50 条 乙が納入する本件ソフトウェアのセキュリティ対策について、甲及び乙
は、その具体的な機能、遵守方法、管理体制及び費用負担等を協議の上、別
途書面により定めるものとする。
参照 http://www.meti.go.jp/policy/it_policy/softseibi/index.html
判例出ました
- 12. ケーススタディ 家具インテリアECサイト侵入事件
• 概要
– 家具インテリアのECサイトを運営するX社が、Y社にECサイトアプリケーション
を発注
– X社が運営するECサイトに対して、外部からの不正アクセスにより、最大7316
件のクレジットカード情報が漏洩した
– X社は謝罪、対応、調査等の費用、売上減少による損害等に関して、Y社に対し
て、委託契約の債務不履行にもとづき1億913万円の損害賠償を請求、東京地裁
に起訴した
Copyright © 2012-2017 EG Secure Solutions Inc. 12
- 21. SQLインジェクションで情報を盗む方法
• UNION SELECTを使う
• エラーメッセージを使う
• なんらかの1ビットの情報を積み重ねる(Blind SQLi)
– 表示上のなんらかの差異
– エラーの有無
– ステータスコードの違い(200 or 500など)
– 更新できるか否か
– 時間差 (Time-base SQL Injection)
Copyright © 2012-2017 EG Secure Solutions Inc. 21
- 22. WordPress REST API のコンテンツインジェクション脆弱性
Copyright © 2012-2017 EG Secure Solutions Inc. 22
- 25. Sucuriブログより
25
Our journey begins in ./wp-includes/rest-api/endpoints/class-wp-rest-posts-controller.php
https://blog.sucuri.net/2017/02/content-injection-vulnerability-wordpress-rest-api.html より引用
- 26. 時系列の流れ
• 1月26日(木) WordPress 4.7.2 リリース。脆弱性情報に重大なものはなし
• 2月1日(水) WordPress ブログにて、WordPress 4.7.2で重大な脆弱性を修正したことを告知
• 2月1日(水) Sucuri がブログにてWordPress 4.7.1の脆弱性の内容を報告
• 2月2日(木) 日本のセキュリティクラスタがざわつき始める
• 2月3日(金)世界各地でWordPressサイトの改ざんが始まる
• 2月6日(月)日本でもサイト改ざんのリリース、報道があいつぐ
Copyright © 2012-2017 EG Secure Solutions Inc. 26
- 30. デバッガで追いかけてみよう
• PHPのリモートデバッグに使用できるIDE等
– NetBenas
– Eclipse
– PHPStorm
– Vim
– Emacs
– MS VisualStudio Code
• 今回は NetBeans + Xdebug を用います!
• 脆弱性の検証には、古めのPHP + 古めの MySQLをお勧めします
– 今回は、Ubuntu12.04LTSにバンドルされる PHP 5.3.10とMySQL 5.5.34 を使い
ます
Copyright © 2012-2017 EG Secure Solutions Inc. 30
- 32. Xdebugとは
• Xdebug とは?
– xdebug は PHP のコア開発者である Derick Rethans 氏が開発している、PHP のデバッグ用エク
ステンション
– $ sudo pecl install xdebug
• Ubuntu等では apt-get で導入するのが楽ちん
$ sudo apt-get install php5-xdebug
• php.ini (あるいは conf.d/xdebug.ini 等)に以下を追記
Copyright © 2012-2017 EG Secure Solutions Inc. 32
zend_extension=/usr/lib/php5/20090626+lfs/xdebug.so ここは環境依存
xdebug.remote_enable = 1
xdebug.remote_autostart=on
xdebug.remote_host = "192.168.79.1" NetBeansを動かすPCのIPアドレス
xdebug.remote_handler = "dbgp"
xdebug.remote_port=9000
xdebug.idekey="netbeans-xdebug"
xdebug.remote_mode=req
NetBeans 側とそろえる
- 37. 脆弱性診断の種類
• Webアプリケーション脆弱性診断
– Webアプリケーションの脆弱性の有無を確認する
– Webアプリケーションのセキュリティ機能の正当性を確認する
– Webアプリケーションのテストの一環として実施する
• プラットフォーム脆弱性診断
– プラットフォームに既知の脆弱性がないかを確認する
– プラットフォームの設定のミスを確認する
• オープンリレーメールなど
– ポートの開き状況等を確認する(ポートスキャン)
• ペネトレーションテスト
– 侵入可能性の実証まで行う
Copyright © 2008-2017 EG Secure Solutions Inc. 37
- 38. Webアプリケーション脆弱性診断の方法
• リモート(ブラックボックス)診断
– 攻撃者の立場でインターネット越しに擬似攻撃を行う
– ツール診断と手動診断
– ツール診断は、手動の30%程度しか見つからないという声も…
– 大規模なサイトではツールによる網羅性確保をする場合が多い
• ソースコード(ホワイトボックス)診断
– ソースコードを読むことで診断する
– 専用ツール(Fortify等)を用いる場合が多い
– 人手による目視診断もあるが、網羅性確保は難しい
• グレーボックス診断
– リモート診断とソースコード診断の合わせ技
– 最近注目されているが、実施例は少ないと予想
Copyright © 2008-2017 EG Secure Solutions Inc. 38
- 41. Webアプリケーション脆弱性診断の流れ
• 診断前準備
– 診断環境準備
– 診断用アカウントの準備
• アプリケーション仕様把握
• 画面構成の把握
• 診断箇所の決定(全画面・全項目の場合は省略)
• 画面一覧表の作成
• 診断作業
• 報告書作成
• 報告会
• 診断後の後始末
Copyright © 2008-2017 EG Secure Solutions Inc. 41
- 47. 徳丸浩の受動的人生
• 20代前半は、ニートしていた時期があった。その後フリーターに昇格
– 京王線で中吊り広告吊っていました
• 当時出始めのパソコン(PC-8801mkII)を購入、プログラミングを独習
• 就職活動始めなきゃなと思ってぃたら、高校の同級生から突然電話が
あり、「就職するつもりがあるなら親父の会社で働かないか?」
– 彼は、京セラ創業時メンバーの孫だったw
• wktkして京セラに入社、鹿児島県の工場(実家の近く)で働く
• 最初はFOTRANで技術系アプリケーションを書いていた
• 仕事は定時(16:45 !)で終わって、自宅では趣味のプログラムを書い
ていた
Copyright © 2012-2017 EG Secure Solutions Inc. 47
- 48. 徳丸はコンパイラの実装に興味を持った
• プログラマあるあるw
• コンパイラの作り方の本を10冊くらい読んだ
– 「Pascalの言語処理系」という本は、Pascalコンパイラ4000行のソースコード
とその解説からなる
• コンパイラに興味を持つやつ、作りたいと思うやつは多いが、実際に
作るやつは少ないw
• いくつかの習作の後、PascalコンパイラCabezon(カベソン)を開発、
発表した
– CabezonはPascal言語で記述され、自分自身をコンパイルできた
– 「実用」はまったく考慮していなかったが、いくつかの大学でプログラミング
実習用に使わたらしい
– 海外でも使われていたもよう(東欧など)
Copyright © 2012-2017 EG Secure Solutions Inc. 48
- 52. 独立の課題と解決策
• 二大課題…受注の獲得と、家族(家内)の説得
• 受注について
– 当時は無名だったのでおいそれと注文がくるとも思えない
– 飛び込み営業とか無理…
• 家内は当然猛反対
• 解決策
• 前職(KCCS)に技術顧問として残ることを上司から提案され、収入の
6~7割を確保した
• 当時家内は子育てに悩んでいて、自分が自宅で仕事をすることで、子
育てにコミットすることを約束
Copyright © 2012-2017 EG Secure Solutions Inc. 52
- 57. FizzBuzz
Fizz Buzz(フィズ・バズ、Bizz BuzzやBuzzとも呼ばれる)は英語圏で長距離ドライブ中や飲み会の時
に行われる言葉遊びである。
遊び方
プレイヤーは円状に座る。最初のプレイヤーは「1」と数字を発言する。次のプレイヤーは直前のプ
レイヤーの次の数字を発言していく。ただし、3で割り切れる場合は「Fizz」(Bizz Buzzの場合は
「Bizz」)、5で割り切れる場合は「Buzz」、両者で割り切れる場合(すなわち15で割り切れる場合)
は「Fizz Buzz」(Bizz Buzzの場合は「Bizz Buzz」)を数の代わりに発言しなければならない。発言を
間違えた者や、ためらった者は脱落となる。
ゲーム例
ゲームは、以下のとおりに発言が進行する。
1, 2, Fizz, 4, Buzz, Fizz, 7, 8, Fizz, Buzz, 11, Fizz, 13, 14, Fizz Buzz, 16, 17, Fizz, 19, Buzz, Fizz, 22, 23, Fizz,
Buzz, 26, Fizz, 28, 29, Fizz Buzz, 31, 32, Fizz, 34, Buzz, Fizz, ...
FizzBuzz問題
このゲームをコンピュータ画面に表示させるプログラムとして作成させることで、コードが書けない
プログラマ志願者を見分ける手法をJeff AtwoodがFizzBuzz問題 (FizzBuzz Question) として提唱した。
その提唱はインターネットの様々な場所で議論の対象になっている。
57https://ja.wikipedia.org/wiki/Fizz_Buzz より引用
- 62. プログラマ35歳定年説を超えて
• プログラマ35歳定年説というものがありますが…割合あると思います
• なぜ35歳定年なのか?
– 馬力にものを言わせている開発者は、その馬力が衰えてくる
– 新技術習得についていけない
– プログラマのままだと給与が上がらない
• 解決策
– 馬力に頼らなくて済む技術力を若いうちから身につけておく
– 新技術習得も、基礎があればだいぶ楽になる
• でも、どうしても苦痛なら、無理して続ける必要はない
– 給与は、転職か独立で
– 40代になると、厄年とか更年期とか色々出てきますが、いつまでもは続かない
ので一時的なスランプだと思ってやり過ごしましょう
Copyright © 2012-2017 EG Secure Solutions Inc. 62