• 検索結果がありません。

かんたんな自己紹介

N/A
N/A
Protected

Academic year: 2021

シェア "かんたんな自己紹介"

Copied!
113
0
0

読み込み中.... (全文を見る)

全文

(1)

Dreamweaver使いが

知っておきたいセキュリティ

株式会社ビジネス・アーキテクツ 太田 良典

(2)
(3)

私の所属

• 株式会社ビジネス・アーキテクツ (bA) • 大規模企業サイトの構築を得意とする

(4)

4

仕事でやっていること

• マークアップデザインエンジニア – HTML や CSS の設計、ガイドライン • 弊社内では、変な HTML を書くと私に怒られるという 都市伝説がある – Webアクセシビリティ • 企業の「アクセシビリティ指針」策定 – ユーザビリティ • サイト設計 / UI 設計 /情報設計諸々

(5)

こっそりやっていること

• 脆弱性の発見と届出

– 経済産業省の「情報セキュリティ早期警戒パート ナーシップ」の制度を利用していろいろ届出

(6)

6

届出の例

• それなりに報道された りしたケースも

(7)

届出件数

• 届出件数 : たぶん150件くらい – 国内の届出は約1000件なので、シェア約15% – ウェブアプリケーションの届出に絞るとシェア20% 超 • 第2回IPA賞 (情報セキュリティ部門) 受賞 – 理由 : 届出件数日本一 受賞したりしている時点で、もう「こっそり」で

(8)
(9)

おねがい

• 情報を不正アクセスから守るためには、攻撃 側の手法を知る必要があります • そのため、この話の中にも攻撃手法の解説 が出てきますが、絶対に悪用しないでください • 不正アクセス行為は、法令によって処罰され ることがあります

(10)
(11)

お話の流れ

• DreamweaverのPHPサンプル • 脆弱性とは?

• 脆弱性事例の紹介 • おわりに

(12)
(13)
(14)

14

(15)
(16)

16

(17)

サンプルフォームの問題

(18)

18

(19)
(20)

20

(21)
(22)

22

(23)

拡大

• <table> がそのままソース中に出力されている • これが table要素の開始タグとして解釈された

(24)

サンプルフォームの問題

(25)
(26)

26

(27)
(28)

28

そのときのソース

• 今度は <script …… と書き込まれている • script要素として解釈されてしまい、alert() がスクリ プトとして実行された • 任意のスクリプトを書き込むことが出来てしまう

(29)

alert() が出るだけなら害はない?

• alert() が 10000回実行されたらどうか – ダイアログが出ているとブラウザを閉じることもで きない – 俗に言う「ブラクラ」 • 利用者の Cookie を読み取って別のサイトに 送ることもできる – Cookie にセッションID が含まれていた場合、漏 洩するとセッションハイジャックの危険がある

(30)

サンプルフォームの問題

(31)
(32)

32

(33)

そのときのソース

• 今度は <iframe …… と書き込まれている • 属性によって、幅・高さ共に100%に設定 • すると……

(34)

34

(35)

結論

• Dreamweaver のチュートリアルで作られるサンプ ルフォームは、悪用される危険がある – サンプルフォームをそのまま公開する人はいないと思い ますが…… – 同じような作り方をしてしまうと危険 これは

クロスサイトスクリプティング脆弱性

(36)
(37)

原因

• 入力された文字をそのまま出力している • 「<」が入力されてもそのまま出力 – 「<」はタグの開始区切り子として使用される文字 • 「<……」が入力されると、HTMLのマークアッ プとして解釈されてしまう

(38)

38

対策

• HTML のマークアップとして解釈されるおそ れがある文字を出力しない • 3つの方法 – 文字を削除する – 文字を置き換える – エスケープする

(39)

文字を削除する

• 「<」を削除してしまう方法 • 「<table>が……」→table>が…… • 利用者が意図した表示にならないことがある – コメントに < が含まれることはあり得る。 – たとえばプログラムの話題。「if (a <= 0)」と書くと、 「if(a = 0)」と表示されてしまう

(40)

40

文字を置き換える

• 「<」を別な文字に置き換えてしまう方法 – たとえば全角の「<」 • 「<table>が……」→<table>が…… • いちおう表示されるが、やはり利用者が意図 した表示にならないことがある • かっこ悪い

(41)

文字をエスケープする

• 文字参照を使用すると、「<」をマークと認識さ れないように表示することができる – 文字実体参照 &lt; – 数値文字参照 &#60; もしくは &#x3e; – 文字実体参照を使用するのが一般的 • 利用者の入力したままが表示される

(42)

42

修正対応

• 文字をエスケープするのが望ましい • PHP の場合、エスケープのための関数 htmlspecialchars() が用意されている • 以下を変換 – 「<」→&lt; – 「>」→&gt; – 「”」→&quot; – 「&」→&amp;

(43)
(44)
(45)

修正箇所

(46)

46

修正後

(47)
(48)
(49)

ぜいじゃくせい

×きじゃくせい (危ではありません)

(50)

50 経済産業省告示第二百三十五号 「ソフトウエア等脆弱性関連情報取扱基準」 1.脆弱性 ソフトウエア等において、コンピュータウイル ス、コンピュータ不正アクセス等の攻撃により その機能や性能を損なう原因となり得る安全 性上の問題箇所。ウェブアプリケーションに あっては、ウェブサイト運営者がアクセス制御 機能により保護すべき情報等に誰もがアクセ スできるような、安全性が欠如している状態 を含む。

(51)

「脆弱性」まとめ

• 読みは「ぜいじゃくせい」 • 情報セキュリティの分野では、ソフトウェアな どのセキュリティ上の問題点を指す – 「セキュリティホール」も同義 • 「ソフトウェアの脆弱性」のほか、 「Webアプリケーションの脆弱性」というものも ある

(52)

52

(53)
(54)

54

(55)

届出件数

(56)

56

脆弱性の印象と実際

• ニュース等で目にするのはソフトウェアの脆 弱性の方が多い • しかし、実際にはWebアプリケーションの脆 弱性の方がたくさん発見されている

(57)
(58)

事例1 : TBCのケース

(59)
(60)
(61)
(62)

62

アクセスしてみると

• 書き込みにある URL

http://www.tbc.co.jp/cgi/

(63)
(64)

64

そして

• 一覧を見ていくと、多数のCSV ファイルを発 見 • CSVファイルにアクセス制限などはなく、誰で もアクセスできた • さまざまなデータが格納されていた – アンケートのデータ – 求人応募のデータ etc.

(65)

手法の解説

(66)

66

「フォースフル・ブラウジング」とは

• 無理やり(forceful) 閲覧 (browsing)。

• 閲覧されることを意図していないものを、強制 的に閲覧する手法

(67)

具体的な方法

• ブラウザのアドレスバーに URL を入れる 以上。

(68)

68

フォースフル・ブラウジングの原理

• ブラウザのアドレスバーに URL を入れれば、 その URL にアクセスできる – あたりまえですが…… • どこからもリンクされていない URL であって も、管理者がアクセスされることを想定してい ない URL であっても、自由にアクセスできる 「リンクされていないから見られないはず」 という判断は NG

(69)
(70)

70

注意点

• 公開ディレクトリに重要なデータファイルを置 かないこと!! – 特に CGI プログラムの設計時に注意 • サーバ移行時の罠にも要注意 – 今までは見られなかったディレクトリが…… – cgi-bin にも置かないほうが良い

(71)
(72)

事例2 : カカクコムのケース

(73)
(74)
(75)
(76)

76

事件の経緯(1)

• アンチウイルスソフト NOD32 のユーザがサ イトにアクセスすると、ウイルス警告が表示さ れた • サイトトップページがひそかに改竄され、ウイ ルスが仕込まれていたことが判明 • のちに、ユーザのメールアドレス約25000件 が漏洩していたことも判明

(77)

事件の経緯(2)

• 中国からの留学生が逮捕され、カカクコムへの不正 アクセスを認める • ただし、この留学生は閉鎖の直接原因ではない – 閉鎖の原因となった攻撃の犯人は不明 • 以前から大量の不正アクセスが行われていた模様 – 「実際には単一の犯人ではなく、入れ替わり立ち代わり異 なる犯人による小規模のハッキングを受けてきたことが 明らかになってきた」 • 「備える心」が大事――カカクコムのインシデントから得られた教訓

(78)

78

その後

• カカクコムは事件の詳細を 公表していない • 報道、インタビューその他 の情報によれば、 「SQLインジェクション」 によるものだったと言われ ている

(79)

手法の解説

(80)

80

SQLインジェクションとは

• SQL = Structured Query Language

– データベースに問い合わせを行うための言語

• Injection = 注射、注入

• SQL文の中に悪意あるデータを「注入」するこ とで、SQL文の内容を改竄する手法

(81)

起きることの例

• 不正なログイン • 本来は取得できないはずのデータを取得 • データの消去 • データの改竄 • サーバ上で任意のコマンドを実行 – xp_cmdshell 拡張ストアドプロシージャ

危険

(82)
(83)

SQL文の例

SELECT * FROM user

WHERE user=‘admin’ AND pass=‘root’

• SELECT * FROM user

– 「user」という名前のテーブルから全データを取得

• WHERE user=‘admin’ AND pass=‘root’

– user, pass の値が特定の条件を満たすものに絞り込む

(84)

84

ところで……

SELECT * FROM user WHERE

user=‘admin’ AND pass=‘root

• ユーザがフォームから入力した値は、 「’」(単引用符、シングルクォート)

(85)

単引用符を入れてみると……

SELECT * FROM user

WHERE user=‘Let’s Note’ AND pass=‘’

• 入力されたのが引用符だったため、引用符の 対応関係がおかしくなっている

– ちなみに「’Let’’s Note’」とする必要があります

(86)

86

さらに……

SELECT * FROM user

WHERE user=‘’ OR 1==1--’ AND pass=‘’

• 「--」の後ろはコメントとみなされて無視される ため、以下の SQL 文と等価になる

SELECT * FROM user WHERE user=‘’ OR 1==1

(87)

その結果

SELECT * FROM user

WHERE user=‘’ OR 1==1 • これは、user=‘’ が成立するか、あるいは 1==1 が成立するレコードを取ってくる • 1==1 は常に成立するので、全てのレコード が取得できる

非常にまずい感じの誤動作

(88)
(89)

注意点

• プログラム中で SQL 文を組み立てたりしな いのがベスト – Prepared Statement によるバインドメカニズム を使用する • それが無理なら、確実にエスケープする – 「’」→「’’」 「¥」→「¥¥」 – DB に応じてさまざまな変換関数がある • たとえば mysql_real_escape_string()

(90)

90

(91)

事例3 : Yahoo! メールのケース

(92)
(93)

ログイン後

• Web上でメールを読ん だり書いたりできる

• HTMLメールも表示で きる

(94)
(95)

事件1 : フィッシング

• 普通は、アドレスバーを 見たりすれば偽サイト を識別できる • しかし、本物サイト上で フィッシングを行う「巧 妙」な手口が出現

(96)

96

事件2 : ウイルスメール

• Yahoo! メールを狙った ウイルスメールが発生

(97)

手法の解説

(98)

98

フィッシングの手口

• 攻撃者は、スクリプトを含む HTML メールを 送信 • メールを表示すると、攻撃者のスクリプトが実 行され、ページの内容がひそかに改竄される – iframe要素が挿入され、yahoo!メールの本物サ イトの中に攻撃者の用意したコンテンツが表示さ れた – ブラウザのアドレスバーの URL は本物のまま

(99)

ウイルスメールの手口

• メールを開くと、やはりスクリプトが実行される • そして、自動的に他のユーザにメールを送信 してしまう • そのメールにもやはりスクリプトが……。

増殖

(100)

100

何故スクリプトが動いた?

• 通常、HTMLメールに含まれるスクリプトは実 行されないようにする必要がある • Yahoo!メールでも、原則としてスクリプトは実 行されないような処理をしていた • しかし、その処理に欠陥があり、スクリプトが 実行されてしまった

(101)

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

• Cross Site Scripting / XSS

– 「CSS」と略すと Cascading Style Sheet と混同 されるので「XSS」と呼ぶ • ウェブサイト上に外部からスクリプトを挿入さ れ、そのスクリプトが動作してしまうこと – 攻撃者の用意したスクリプトが、ターゲットのドメ イン上で実行される – 広義には、スクリプトを含んでいない HTML の改

(102)

102

何がまずいのか

• 普通、スクリプトで別ドメインのコンテンツを操 作することはできない • XSS脆弱性があるとターゲットのドメイン上で スクリプトが動くので、さまざまな攻撃ができ てしまう – フィッシング – 不正な操作 (ウイルスメール送信) – Cookie読み出しによるセッションハイジャック

(103)
(104)

104

注意点

• 外部から入力された値をそのまま HTML に 出力しないこと!

• 文字参照に変換すればだいたい OK

– 「<」→「&lt;」 「>」→「&gt;」 「”」→「&quot;」 「&」→「&amp;」

• PHP の場合、htmlspecialchars()

– addslashes() では駄目! (というか意味が無い)

(105)

特に難しい場合

• HTMLメールを「安全に」表示するのは非常 に難しい!! • スクリプトが動作するような記述は無数にあ るが、その全てを考慮する必要がある – イベントハンドラ、javascript: スキーム、url() • ブラウザの挙動まで考慮する必要がある – expression() 、全角の expression()

(106)

106

(107)
(108)

108

知っておいてほしいこと

• Dreamweaver を使うと、PHP のアプリケー ションがとても簡単に作れる • しかし安全に動くものを作るとなると、 必ずしも簡単ではない • 脆弱性のあるアプリケーションを公開し、 悪用されると大変なことが起きる • 公開するアプリケーションは、 安全性に注意して実装するべき

(109)

おすすめサイト (技術情報)

• 安全なウェブサイトの作り方 改訂第2版 – http://www.ipa.go.jp/security/vuln/websecurity. html • IPA ISEC セキュア・プログラミング講座 – http://www.ipa.go.jp/security/awareness/vend or/programming/ • SecurIT 産業技術総合研究所 グリッド研究 センター セキュアプログラミングチーム

(110)

110

昨日の常識は今日の非常識

• 次々に発覚する脆弱性 • どんどん出現する新手法 • 時代の変遷、手法の変遷

常に最新情報を追う必要がある

(111)

どうやって情報を集めるか

• 主に Webサイト – やはり Web サイトの方が情報が早い – Webのセキュリティに関しては、そもそも Web サ イトが一次情報源であることが多い • セキュリティ系、ITニュース系のサイトをこま めにチェックするのが吉

(112)

112

おすすめサイト (最新情報)

セキュリティホール memo http://www.st.ryukoku.ac.jp/~kjm/security/ memo/ • いろいろな情報を網羅、他サイトへのリンクが 中心 • 興味が出てきたら、少しずつリンク先のサイト をチェックするようにすると良い

(113)

参照

関連したドキュメント

テキストマイニング は,大量の構 造化されていないテキスト情報を様々な観点から

ドリル教材 教材数:6 問題数:90 ひきざんのけいさん・けいさんれんしゅう ひきざんをつかうもんだいなどの問題を収録..

当社は、お客様が本サイトを通じて取得された個人情報(個人情報とは、個人に関する情報

Sabbah, Equations diff´ ´ erentielles ` a points singuliers irr´ eguliers et ph´ enom` ene de Stokes en dimension 2, Ast´erisque, 263, Soci´et´e Math´ematique de France,

けいさん たす ひく かける わる せいすう しょうすう ぶんすう ながさ めんせき たいせき

「系統情報の公開」に関する留意事項

7.自助グループ

3. 利用者の安全確保のための遊歩道や案内板などの点検、 応急補修 4. 動植物の生息、 生育状況など自然環境の継続的観測および監視