はせがわようすけ OWASP Kansai チャプターリーダー OWASP Japan アドバイザリボードメンバー 株 式 会 社 セキュアスカイ テクノロジー 常 勤 技 術 顧 問 CODE BLUE Security Conference Review board member セキュリティキ

Similar documents
長谷川陽介 ( はせがわようすけ OWASP Kansai チャプターリーダー OWASP Japan アドバイザリボードメンバー 株式会社セキュアスカイ テクノロジー CTO セキュリティキャンプ講師 (2008~) CODE BLUE カンファレンスレビュー

自己紹介 長谷川陽介 ( はせがわようすけ ( 株 ) セキュアスカイ テクノロジー常勤技術顧問 セキュリティキャンプ講師 (2008 年 ~) OWASP Kansai チャプターリーダー OWASP Japan ボードメンバー CODE BLUE カンファレ

自己紹介 はせがわようすけ ネットエージェント株式会社 株式会社セキュアスカイ テクノロジー技術顧問 OWASP Kansai Chapter Leader OWASP Japan Chapter Advisory Board member

Microsoft Word - 不正アクセス行為の禁止等に関する法律等に基づく公安

1.セッション3では 流 出 した 際 の 損 害 を 最 小 限 に 抑 える 対 応 仕 組 み 1

自 己 紹 介 ( 株 )セキュアスカイ テクノロジー 常 勤 技 術 顧 問 OWASP Kansaiチャプターリーダー OWASP Japanボードメンバー http//utf-8.jp/

Taro-契約条項(全部)

為 が 行 われるおそれがある 場 合 に 都 道 府 県 公 安 委 員 会 がその 指 定 暴 力 団 等 を 特 定 抗 争 指 定 暴 力 団 等 として 指 定 し その 所 属 する 指 定 暴 力 団 員 が 警 戒 区 域 内 において 暴 力 団 の 事 務 所 を 新 たに 設

<4D F736F F F696E74202D E A B D682CC91E3955C93498D558C822E707074>

Taro-データ公安委員会相互協力事

タイトルを1~2行で入力 (長文の場合はフォントサイズを縮小)

<4D F736F F D AC90D1955D92E CC82CC895E DD8C D2816A2E646F63>

(3) その 他 市 長 が 必 要 と 認 める 書 類 ( 補 助 金 の 交 付 決 定 ) 第 6 条 市 長 は 前 条 の 申 請 書 を 受 理 したときは 速 やかにその 内 容 を 審 査 し 補 助 金 を 交 付 すべきものと 認 めたときは 規 則 第 7 条 に 規 定 す

質 問 票 ( 様 式 3) 質 問 番 号 62-1 質 問 内 容 鑑 定 評 価 依 頼 先 は 千 葉 県 などは 入 札 制 度 にしているが 神 奈 川 県 は 入 札 なのか?または 随 契 なのか?その 理 由 は? 地 価 調 査 業 務 は 単 にそれぞれの 地 点 の 鑑 定

security

自己紹介 はせがわようすけ OWASP Kansai チャプターリーダー OWASP Japan アドバイザリボードメンバー 株式会社セキュアスカイ テクノロジー常勤技術顧問 CODE BLUE Security Conference Review board member セキュリティキャンプ講師

Microsoft PowerPoint 資料6 技術基準.ppt [互換モード]

1. 目 次 1 目 次 7 会 員 検 索 申 込 2 ログイン 方 法 ( 初 回 ) 8 活 動 状 況 ( 申 込 申 受 お 見 合 い 管 理 ) 3 ログイン 方 法 (2 回 目 以 降 ) 9 活 動 状 況 ( 不 成 立 履 歴 削 除 ) 4 パスワードを 忘 れた 時 は

通 知 カード と 個 人 番 号 カード の 違 い 2 通 知 カード ( 紙 )/H27.10 個 人 番 号 カード (ICカード)/H28.1 様 式 (おもて) (うら) 作 成 交 付 主 な 記 載 事 項 全 国 ( 外 国 人 含 む)に 郵 送 で 配 布 希 望 者 に 交

った 場 合 など 監 事 の 任 務 懈 怠 の 場 合 は その 程 度 に 応 じて 業 績 勘 案 率 を 減 算 する (8) 役 員 の 法 人 に 対 する 特 段 の 貢 献 が 認 められる 場 合 は その 程 度 に 応 じて 業 績 勘 案 率 を 加 算 することができる

別 紙 釧 路 公 立 大 学 ホームページリニューアル 業 務 CMS 要 件 一 覧 NO ( 大 分 類 ) NO ( 中 分 類 ) NO ( 小 分 類 ) 3 静 的 HTML 作 成 4 HTMLソース 直 接 編 集 5 CSSソース 直 接 編 集 6 画 像 掲 載 7 アクセシ

平 成 27 年 11 月 ~ 平 成 28 年 4 月 に 公 開 の 対 象 となった 専 門 協 議 等 における 各 専 門 委 員 等 の 寄 附 金 契 約 金 等 の 受 取 状 況 審 査 ( 別 紙 ) 専 門 協 議 等 の 件 数 専 門 委 員 数 500 万 円 超 の 受

自己紹介 はせがわようすけ ネットエージェント株式会社 株式会社セキュアスカイ テクノロジー技術顧問 OWASP Kansai Chapter Leader OWASP Japan Chapter Advisory Board member

(別紙3)保険会社向けの総合的な監督指針の一部を改正する(案)

個 人 情 報 分 析 表 類 型 K1: 履 歴 書 職 務 経 歴 書 社 員 基 礎 情 報 各 種 申 請 書 誓 約 書 同 意 書 入 退 室 記 録 教 育 受 講 者 名 簿 理 解 度 確 認 テト 取 得 入 力 利 用 加 工 移 送 送 信 委 託 保 管 バッアップ 廃 棄

●労働基準法等の一部を改正する法律案

スライド 1

一宮市町内会に対する防犯カメラ設置補助金交付要綱

高松市緊急輸送道路沿道建築物耐震改修等事業補助金交付要綱(案)

<4D F736F F D C689D789B582B581698AAE90AC92CA926D816A2E646F63>

の 購 入 費 又 は 賃 借 料 (2) 専 用 ポール 等 機 器 の 設 置 工 事 費 (3) ケーブル 設 置 工 事 費 (4) 防 犯 カメラの 設 置 を 示 す 看 板 等 の 設 置 費 (5) その 他 設 置 に 必 要 な 経 費 ( 補 助 金 の 額 ) 第 6 条 補

積 載 せず かつ 燃 料 冷 却 水 及 び 潤 滑 油 の 全 量 を 搭 載 し 自 動 車 製 作 者 が 定 める 工 具 及 び 付 属 品 (スペアタイヤを 含 む )を 全 て 装 備 した 状 態 をいう この 場 合 に おいて 燃 料 の 全 量 を 搭 載 するとは 燃 料

川崎市木造住宅耐震診断助成金交付要綱

( 運 用 制 限 ) 第 5 条 労 働 基 準 局 は 本 システムの 維 持 補 修 の 必 要 があるとき 天 災 地 変 その 他 の 事 由 によりシステムに 障 害 又 は 遅 延 の 生 じたとき その 他 理 由 の 如 何 を 問 わず その 裁 量 により システム 利 用 者

1

目     次

経 常 収 支 差 引 額 等 の 状 況 平 成 26 年 度 予 算 早 期 集 計 平 成 25 年 度 予 算 対 前 年 度 比 較 経 常 収 支 差 引 額 3,689 億 円 4,597 億 円 908 億 円 減 少 赤 字 組 合 数 1,114 組 合 1,180 組 合 66

提案書タイトルサブタイトルなし(32ポイント)

平成25年度 独立行政法人日本学生支援機構の役職員の報酬・給与等について

<4D F736F F D208C6F D F815B90A BC914F82CC91CE899E8FF38BB582C982C282A282C42E646F63>

Taro-条文.jtd

1. 決 算 の 概 要 法 人 全 体 として 2,459 億 円 の 当 期 総 利 益 を 計 上 し 末 をもって 繰 越 欠 損 金 を 解 消 しています ( : 当 期 総 利 益 2,092 億 円 ) 中 期 計 画 における 収 支 改 善 項 目 に 関 して ( : 繰 越

自 己 紹 介 企 業 組 織 のネットワークにセキュリティー 機 器 を 配 置 発 生 するアラートをSOCへ 集 約 アラートをSOCが 分 析 し 必 要 に 応 じてお 客 様 へご 連 絡 対 応 を 助 言 お 客 様 ネットワーク Security Operation Center

自己紹介 XSS のほうから来ました author of jjencode, aaencode

スライド 1

<4D F736F F F696E74202D B D E90E096BE89EF8E9197BF2E >

入札公告 機動装備センター

Microsoft PowerPoint _2b-DOM.pptx

<4D F736F F D20906C8E968B4B92F FC90B3835A A8D958E9A2E646F6378>

労働時間と休日は、労働条件のもっとも基本的なものの一つです

連結計算書


係 に 提 出 する 2 財 形 担 当 係 は 前 項 の 規 定 による 財 形 貯 蓄 等 の 申 込 みがあった 場 合 には 当 該 申 込 みの 内 容 を 点 検 し 財 形 貯 蓄 等 の 契 約 の 要 件 ( 第 6 条 に 規 定 する 基 準 を 含 む )を 満 たしている

中小規模事業者向けはじめてのマイナンバーガイドライン

調達パートナー CSR調査票

社会保険等に加入しましょう -みんなで取り組む保険加入-

<4D F736F F F696E74202D B B83678E9197BF2E B93C782DD8EE682E890EA97705D>

スライド 1

スライド 1

text

PowerPoint プレゼンテーション

4 承 認 コミュニティ 組 織 は 市 長 若 しくはその 委 任 を 受 けた 者 又 は 監 査 委 員 の 監 査 に 応 じなければ ならない ( 状 況 報 告 ) 第 7 条 承 認 コミュニティ 組 織 は 市 長 が 必 要 と 認 めるときは 交 付 金 事 業 の 遂 行 の

 

マンション電子投票サービス ご説明資料

様式第4号

スライド 1

する ( 評 定 の 時 期 ) 第 条 成 績 評 定 の 時 期 は 第 3 次 評 定 者 にあっては 完 成 検 査 及 び 部 分 引 渡 しに 伴 う 検 査 の 時 とし 第 次 評 定 者 及 び 第 次 評 定 者 にあっては 工 事 の 完 成 の 時 とする ( 成 績 評 定

Office 10 パッケージ版「リンク集」

Microsoft Word 役員選挙規程.doc

1_2013BS(0414)

(2) 特 別 障 害 給 付 金 国 民 年 金 に 任 意 加 入 していなかったことにより 障 害 基 礎 年 金 等 を 受 給 していない 障 がい 者 の 方 に 対 し 福 祉 的 措 置 として 給 付 金 の 支 給 を 行 う 制 度 です 支 給 対 象 者 平 成 3 年 3

公 的 年 金 制 度 について 制 度 の 持 続 可 能 性 を 高 め 将 来 の 世 代 の 給 付 水 準 の 確 保 等 を 図 るため 持 続 可 能 な 社 会 保 障 制 度 の 確 立 を 図 るための 改 革 の 推 進 に 関 する 法 律 に 基 づく 社 会 経 済 情

第2回 制度設計専門会合 事務局提出資料

新ひだか町住宅新築リフォーム等緊急支援補助金交付要綱

社会保険加入促進計画に盛込むべき内容

科 売 上 原 価 売 上 総 利 益 損 益 計 算 書 ( 自 平 成 26 年 4 月 1 日 至 平 成 27 年 3 月 31 日 ) 目 売 上 高 販 売 費 及 び 一 般 管 理 費 営 業 利 益 営 業 外 収 益 受 取 保 険 金 受 取 支 援 金 補 助 金 収 入 保

<6D33335F976C8EAE CF6955C A2E786C73>

<8AC48DB88C8B89CA82C98AEE82C382AD915B C8E8682C696DA8E9F E A>

[2] 控 除 限 度 額 繰 越 欠 損 金 を 有 する 法 人 において 欠 損 金 発 生 事 業 年 度 の 翌 事 業 年 度 以 後 の 欠 損 金 の 繰 越 控 除 にあ たっては 平 成 27 年 度 税 制 改 正 により 次 ページ 以 降 で 解 説 する の 特 例 (

管理画面マニュアル(1.0.9)

タグの 内 側 で 関 数 を 定 義 してタグ 側 で 実 行 することもできます <TITLE>JavaScript サンプル</TITLE> function write(str) { document.write(str); } write('hello World!'); 上 例 のように

参加表明書・企画提案書様式

Microsoft Word - h doc

JavaScript演習

定款

代 議 員 会 決 議 内 容 についてお 知 らせします さる3 月 4 日 当 基 金 の 代 議 員 会 を 開 催 し 次 の 議 案 が 審 議 され 可 決 承 認 されました 第 1 号 議 案 : 財 政 再 計 算 について ( 概 要 ) 確 定 給 付 企 業 年 金 法 第

国 税 クレジットカード 納 付 の 創 設 国 税 のクレジットカード 納 付 については マイナンバー 制 度 の 活 用 による 年 金 保 険 料 税 に 係 る 利 便 性 向 上 に 関 するアクションプログラム( 報 告 書 ) においてその 導 入 の 方 向 性 が 示 されている

委員会規程

Microsoft PowerPoint - 【資料3】中小規模事業者向け+はじめてのマイナンバーガイドライン

Microsoft Word - 20ガイドラインリーフレット案4ページ

(4) 武 力 攻 撃 原 子 力 災 害 合 同 対 策 協 議 会 との 連 携 1 市 は 国 の 現 地 対 策 本 部 長 が 運 営 する 武 力 攻 撃 原 子 力 災 害 合 同 対 策 協 議 会 に 職 員 を 派 遣 するなど 同 協 議 会 と 必 要 な 連 携 を 図 る

2 役 員 の 報 酬 等 の 支 給 状 況 役 名 法 人 の 長 理 事 理 事 ( 非 常 勤 ) 平 成 25 年 度 年 間 報 酬 等 の 総 額 就 任 退 任 の 状 況 報 酬 ( 給 与 ) 賞 与 その 他 ( 内 容 ) 就 任 退 任 16,936 10,654 4,36

WEB版「新・相続対策マスター」(ご利用の手引き)

老発第    第 号

後 にまで 及 んでおり(このような 外 部 研 究 資 金 を 以 下 契 約 理 由 研 究 という ) かつ その 者 が 退 職 後 も 引 き 続 き 研 究 代 表 者 となることを 研 究 所 が 認 める 場 合 とし 理 事 室 の 命 を 受 けて 発 議 書 ( 別 に 定 め

「はぴeみる電」をご利用するにあたって

<8BB388F58F5A91EE82A082E895FB8AEE967B95FB906A>

企業におけるマイナンバーのセキュリティに関する実態調査

損 益 計 算 書 自. 平 成 26 年 4 月 1 日 至. 平 成 27 年 3 月 31 日 科 目 内 訳 金 額 千 円 千 円 営 業 収 益 6,167,402 委 託 者 報 酬 4,328,295 運 用 受 託 報 酬 1,839,106 営 業 費 用 3,911,389 一

参 考 様 式 再 就 者 から 依 頼 等 を 受 けた 場 合 の 届 出 公 平 委 員 会 委 員 長 様 年 月 日 地 方 公 務 員 法 ( 昭 和 25 年 法 律 第 261 号 ) 第 38 条 の2 第 7 項 規 定 に 基 づき 下 記 のとおり 届 出 を します この

Transcription:

OWASP Kansai Chapter Yosuke HASEGAWA

はせがわようすけ OWASP Kansai チャプターリーダー OWASP Japan アドバイザリボードメンバー 株 式 会 社 セキュアスカイ テクノロジー 常 勤 技 術 顧 問 CODE BLUE Security Conference Review board member セキュリティキャンプ 講 師 (Webクラス/ 高 レイヤートラック) http://utf-8.jp/ Author of jjencode and aaencode

自 分 たちの 直 面 するWebセキュリティの 問 題 を 自 分 たちの 手 で 解 決 したい 日 本 で2 番 目 のOWASPローカルチャプター 2014 年 3 月 から 活 動 開 始 3か 月 に1 回 のChapter Meeting ( 勉 強 会 )を 開 催 Webセキュリティの 悩 み 事 を 気 楽 に 相 談 し 情 報 共 有 で きる 場 スキル 役 職 業 種 国 籍 性 別 年 齢 関 係 なく 遠 慮 な くお 越 しください

はせがわようすけ OWASP Kansai チャプターリーダー OWASP Japan アドバイザリボードメンバー 株 式 会 社 セキュアスカイ テクノロジー 常 勤 技 術 顧 問 CODE BLUE Security Conference Review board member セキュリティキャンプ 講 師 (Webクラス/ 高 レイヤートラック) http://utf-8.jp/ Author of jjencode and aaencode

JavaScriptに 関 連 するセキュリティ 問 題 JavaScriptによるオープンリダイレクタ DOM-based XSS CORSの 設 定 不 備 クライアントサイドでの 不 適 切 なデータ 保 存 その 他 DOM APIの 不 適 切 な 使 用

JavaScriptに 関 連 するセキュリティ 問 題 JavaScriptによるオープンリダイレクタ DOM-based XSS CORSの 設 定 不 備 脆 弱 性 の 発 生 が 圧 倒 的 に 多 い クライアントサイドでの 不 適 切 なデータ 保 存 その 他 DOM APIの 不 適 切 な 使 用

対 象 動 的 にHTMLを 生 成 するWebアプリ 問 題 攻 撃 者 が 用 意 したスクリプトがHTML 内 に 挿 入 さ れる 対 策 HTMLを 生 成 する 時 点 でエスケープ URLはhttp/httpsのみに 限 定 する

被 害 者 http://shop.example.jp/?item="><script>... 攻 撃 者 GET /?item="><script>... XSSの 被 害 JSでてきることは 何 でも 偽 情 報 の 表 示 Cookie 情 報 の 漏 えい 機 密 情 報 の 漏 えい その 他 OWASP Kyushu Local Chapter Meeting 3rd <input type="text" value=""><script>... HTML 生 成 時 に エスケープされていない Web サイト

対 象 動 的 にHTMLを 生 成 するWebアプリ 問 題 攻 撃 者 が 用 意 したスクリプトがHTML 内 に 挿 入 さ れる 対 策 HTMLを 生 成 する 時 点 でエスケープ URLはhttp/httpsのみに 限 定 する

HTMLを 生 成 する 時 点 でエスケープする < < > > " " ' &#39; & & <html> < > データ 処 理 HTML 生 成 ユーザ

URLはhttp/httpsのみに 限 定 する src,hrefなどの 属 性 値 の 動 的 生 成 <a href="javascript:alert(1)"> <iframe src="data:text/html;base64, PHNjcmlwdD5hbGVydCgnWFNTJyk8L3NjcmlwdD4K"> URLの 動 的 生 成 時 はhttp,https 限 定 とする

反 射 型 XSS ユーザーからの 送 信 内 容 をそのまま 表 示 お 問 い 合 わせフォーム 検 索 フォームなど XSSフィルタである 程 度 防 御 蓄 積 型 XSS 攻 撃 者 のスクリプトをサーバ 内 で 保 持 掲 示 板 Webメールなど

反 射 型 XSS ユーザーからの 送 信 内 容 をそのまま 表 示 お 問 い 合 わせフォーム 検 索 フォームなど XSSフィルタである 程 度 防 御 蓄 積 型 XSS ユーザー 攻 撃 者 のスクリプトをサーバ 内 で 保 持 掲 示 板 Webメールなど GET /?item="><script>... Web アプリ <input type="text" value=""><script>...

リクエストとレスポンスに 同 じ 内 容 が 含 まれる GET /?<script>alert(1)</script> HTTP/1.1 Host: example.jp HTTP/1.1 200 OK Content-Type: text/hthml; charst=utf-8 <html> <body> <script>alert(1)</script> </body>

リクエストとレスポンスに 同 じ 内 容 が 含 まれる GET /?<script>alert(1)</script> HTTP/1.1 Host: example.jp HTTP/1.1 200 OK Content-Type: text/hthml; charst=utf-8 <html> <body> <script>alert(1)</script> </body>

反 射 型 XSS ユーザーからの 送 信 内 容 をそのまま 表 示 お 問 い 合 わせフォーム 検 索 フォームなど XSSフィルタである 程 度 防 御 蓄 積 型 XSS ユーザー 攻 撃 者 のスクリプトをサーバ 内 で 保 持 掲 示 板 Webメールなど Web アプリ 攻 撃 者 Subject: Hello <script>... Subject: Hello <script>...

サーバに 攻 撃 者 のスクリプトが 保 存 される 攻 撃 の 永 続 化 攻 撃 と 被 害 に 時 間 差 反 射 型 より 影 響 が 大 きい

反 射 型 XSS ユーザーからの 送 信 内 容 をそのまま 表 示 お 問 い 合 わせフォーム 検 索 フォームなど XSSフィルタである 程 度 防 御 蓄 積 型 XSS 攻 撃 者 のスクリプトをサーバ 内 で 保 持 掲 示 板 Webメールなど

反 射 型 XSS ユーザーからの 送 信 内 容 をそのまま 表 示 お 問 い 合 わせフォーム 検 索 フォームなど XSSフィルタである 程 度 防 御 蓄 積 型 XSS 攻 撃 者 のスクリプトをサーバ 内 で 保 持 掲 示 板 Webメールなど DOM-based XSS JavaScriptが 引 き 起 こすXSS サーバ 側 のHTML 生 成 では 問 題 なし

JavaScriptが 引 き 起 こすXSS サーバ 側 のHTML 生 成 時 には 問 題 なし JavaScriptによるHTMLレンダリング 時 の 問 題 //http://example.jp/#<img src=0 onerror=alert(1)> <html> <script> document.write( location.hash.substring(1) ); </script> </html> JavaScriptの 利 用 に 合 わせて 増 加

ブラウザのXSSフィルタを 通 過 することが 多 い location.hash 内 などの 実 行 コードはサーバ 側 にログが 残 らない //http://example.jp/#<img src=0 onerror=alert(1)> <html> <script> document.write( location.hash.substring(1) ); </script> </html>

JavaScriptが 実 行 されるまでXSSの 存 在 が わからない 検 査 ツール 既 存 の 検 査 ツールでは 検 出 不 可 な 場 合 も 生 成 されるHTML 自 体 には 問 題 はない リクエスト/レスポンスの 監 視 だけでは 見 つからな い <XSS> 検 査 対 象 アプリ ブラウザ <xss> <XSS>

静 的 コンテンツのみでもXSSする 可 能 性 動 的 にHTMLを 生 成 する Webアプリケーション ではなく *.htmlしか 提 供 してなくてもXSSのある 可 能 性 がある ブラウザ <html> <script> document.write( location.hash.substring(1) ); </script> 静 的 な Webサーバ

攻 撃 者 はJavaScriptを 読 むことができる じっくり 読 んで 脆 弱 性 を 探 すことが 可 能 脆 弱 性 の 有 無 を 確 認 するための 試 行 リクエストは 不 要 一 撃 必 殺 でXSSを 成 功 させる

IE10, XSSフィルターを 通 過

圧 倒 的 に 不 利 な 状 況 JavaScriptコード 量 の 大 幅 な 増 加 XSSフィルタを 通 過 することがある サーバのログに 残 らないことがある これまでの 検 査 方 法 では 見 つからない 静 的 コンテンツでもXSSする 攻 撃 者 は 時 間 をかけてXSSを 探 す 開 発 時 点 で 作 りこまない 必 要 性

原 因 攻 撃 者 の 与 えた 文 字 列 が JavaScript 上 のコードのどこかで 文 字 列 からHTMLを 生 成 あるいは JavaScript コードとして 実 行 される //http://example.jp/#<img src=0 onerror=alert(1)> <html> <script> document.write( location.hash.substring(1) ); </script> </html>

原 因 攻 撃 者 の 与 えた 文 字 列 が JavaScript 上 のコードのどこかで 文 字 列 からHTMLを 生 成 あるいは JavaScript コードとして 実 行 される //http://example.jp/#<img src=0 onerror=alert(1)> <html> <script> document.write( location.hash.substring(1) ); </script> </html>

原 因 攻 撃 者 の 与 えた 文 字 列 が JavaScript 上 のコードのどこかで 文 字 列 からHTMLを 生 成 あるいは JavaScript コードとして 実 行 される //http://example.jp/#<img src=0 onerror=alert(1)> <html> <script> document.write( location.hash.substring(1) ); </script> </html>

原 因 攻 撃 者 の 与 えた 文 字 列 が JavaScript 上 のコードのどこかで 文 字 列 からHTMLを 生 成 あるいは JavaScript コードとして 実 行 される //http://example.jp/#<img src=0 onerror=alert(1)> <html> <script> document.write( location.hash.substring(1) ); </script> </html>

ソース 攻 撃 者 の 与 えた 文 字 列 の 含 まれる 箇 所 シンク 文 字 列 からHTMLを 生 成 したりコードとして 実 行 す る 部 分 ソース 処 理 シンク

ソース 攻 撃 者 の 与 えた 文 字 列 の 含 まれる 箇 所 シンク 文 字 列 からHTMLを 生 成 したりコードとして 実 行 す る 部 分 location. hash document. referrer location. search ソース 処 理 シンク XHR etc...

ソース 攻 撃 者 の 与 えた 文 字 列 の 含 まれる 箇 所 シンク 文 字 列 からHTMLを 生 成 したりコードとして 実 行 す る 部 分 location. hash document. referrer location. href document. write location. search ソース 処 理 シンク innerhtml XHR etc... eval etc...

対 策 HTML 生 成 時 にエスケープ/ 適 切 なDOM 操 作 URLの 生 成 時 はhttp(s)に 限 定 使 用 しているライブラリの 更 新 サーバ 側 でのXSS 対 策 と 同 じ これまでサーバ 上 で 行 っていたことをJavaScript 上 で 行 う

対 策 HTML 生 成 時 にエスケープ/ 適 切 なDOM 操 作 URLの 生 成 時 はhttp(s)に 限 定 使 用 しているライブラリの 更 新 サーバ 側 でのXSS 対 策 と 同 じ これまでサーバ 上 で 行 っていたことをJavaScript 上 で 行 う

HTML 生 成 時 に 適 切 なDOM 操 作 JavaScriptでレンダリングされる 直 前 エスケープ ではなく 適 切 なDOM 操 作 関 数 // bad code document.write( location.hash.substring( 1 ) ); var text = document.createtextnode( location.hash.substring( 1 ) ); document.body.appendchild( text );

テキストノードだけでなく 属 性 値 も // bad code var text = "..."; // 変 数 textは 攻 撃 者 がコントロール 可 能 form.innerhtml = '<input type="text" name="key" value="' + text + '">'; <input... value=""><script>...</script "><script>...</script ""> var text = "..."; // 変 数 textは 攻 撃 者 がコントロール 可 能 var elm = document.createelement( "input" ); elm.setattribute( "type", "text" ); elm.setattribute( "name", "key" ); elm.setattribute( "value", text ); // 属 性 値 を 設 定 する form.appendchild( elm );

HTML 生 成 時 に 適 切 なDOM 操 作 関 数 テキストノードの 生 成 createtextnode, innertext, textcontent 属 性 の 設 定 setattribute シンクとなるAPIを 不 用 意 に 使 用 しない innerhtml, document.write,...

対 策 HTML 生 成 時 にエスケープ/ 適 切 なDOM 操 作 URLの 生 成 時 はhttp(s)に 限 定 使 用 しているライブラリの 更 新 サーバ 側 でのXSS 対 策 と 同 じ これまでサーバ 上 で 行 っていたことをJavaScript 上 で 行 う

URLの 生 成 時 はhttp(s)に 限 定 //bad code // <a id="link">リンク</a> var url = "..."; // 変 数 textは 攻 撃 者 がコントロール 可 能 var elm = document.getelementbyid( "link" ); elm.setattribute( "href", url ); <a id="link" href=" javascript:alert(1) ">リンク</a> // urlが http:// https:// で 始 まる 場 合 のみに 限 定 if( url.match( /^https?: / // ) ){ var elm = document.getelementbyid( "link" ); elm.setattribute( "href", url ); }

URLの 生 成 時 はhttp(s)に 限 定 他 のスキームが 入 り 込 まないように javascript:, vbscript:, data:, <a> 要 素 だけでなくlocationオブジェクトの 操 作 時 にも 注 意 // bad code var url = "javascript:alert(1)"; location.href = url; // XSS location.assign( url ); // XSS

対 策 HTML 生 成 時 にエスケープ/ 適 切 なDOM 操 作 URLの 生 成 時 はhttp(s)に 限 定 使 用 しているライブラリの 更 新 サーバ 側 でのXSS 対 策 と 同 じ これまでサーバ 上 で 行 っていたことをJavaScript 上 で 行 う

使 用 してるライブラリの 更 新 JavaScriptライブラリの 脆 弱 性 対 応 使 用 しているJSライブラリの 更 新 を 把 握 すること Masato Kinugawa Security Blog: jquery Mobile 1.2 Beta 未 満 は 読 み 込 んでいるだけでXSS 脆 弱 性 を 作 ります http://masatokinugawa.l0.cm/2012/09/jquery-mobile-location.href-xss.html サーバ 側 のミドルウェア 等 の 運 用 と 同 じ

対 策 HTML 生 成 時 にエスケープ/ 適 切 なDOM 操 作 URLの 生 成 時 はhttp(s)に 限 定 使 用 しているライブラリの 更 新 サーバ 側 でのXSS 対 策 と 同 じ これまでサーバ 上 で 行 っていたことをJavaScript 上 で 行 う

DbXSS 対 策 の 原 則 ( 再 掲 ) HTML 生 成 時 にエスケープ/ 適 切 なDOM 操 作 URLの 生 成 時 はhttp(s)に 限 定

DbXSS 対 策 の 原 則 ( 再 掲 ) HTML 生 成 時 にエスケープ/ 適 切 なDOM 操 作 URLの 生 成 時 はhttp(s)に 限 定 原 則 だけでは 立 ちいかない 現 実 一 部 のHTMLタグは 許 容 したい 相 対 URLも 使 いたい

一 部 のタグだけは 許 容 したい 装 飾 やリンクのためのHTMLタグ var s = "** 注 意 ** 雨 天 時 は[こちら](http://example.jp/)です "; <b> 注 意 </b> 雨 天 時 は<a href="http://example.jp/">こちら</a>です 相 対 URLも 使 いたい <a href="/next-page">next</a> // 相 対 リンクをJSでも 生 成 したい

一 部 のタグだけは 許 容 したい 特 定 書 式 の 繰 り 返 し テンプレート 的 な 用 途 [ { "date" : "2015/09/10", "url" : "http://example.jp/news", "title" : " 新 製 品 発 表 のお 知 らせ" }, { "date" : "2015/09/19", "url" : "http://example.jp/owasp", "title" : "Local Chapter Meeing 開 催 " } ] ユーザーによる 自 由 な 入 力 <div> <span>2015/09/10</span> <a href="http://example.jp/news"> 新 製 品 発 表 のお 知 らせ </a> </div> <div> <span>2015/09/19</span> <a href="http://example.jp/owasp"> Local Chapter Meeting 開 催 </a> </div> var markdown = "** 注 意 ** 雨 天 時 は[こち ら](http://example.jp/)です "; <b> 注 意 </b> 雨 天 時 は<a href="http://example.jp/">こちら</a>です

一 部 のタグだけは 許 容 したい 特 定 書 式 の 繰 り 返 し テンプレート 的 な 用 途 [ { "date" : "2015/09/10", "url" : "http://example.jp/news", "title" : " 新 製 品 発 表 のお 知 らせ" }, { "date" : "2015/09/19", "url" : "http://example.jp/owasp", "title" : "Local Chapter Meeing 開 催 " } ] ユーザーによる 自 由 な 入 力 <div> <span>2015/09/10</span> <a href="http://example.jp/news"> 新 製 品 発 表 のお 知 らせ </a> </div> <div> <span>2015/09/19</span> <a href="http://example.jp/owasp"> Local Chapter Meeting 開 催 </a> </div> var markdown = "** 注 意 ** 雨 天 時 は[こち ら](http://example.jp/)です "; <b> 注 意 </b> 雨 天 時 は<a href="http://example.jp/">こちら</a>です

一 部 のタグだけは 許 容 したい 特 定 書 式 の 繰 り 返 し テンプレート 的 な 用 途 [ { "date" : "2015/09/10", "url" : "http://example.jp/news", "title" : " 新 製 品 発 表 のお 知 らせ" }, { "date" : "2015/09/19", "url" : "http://example.jp/owasp", "title" : "Local Chapter Meeing 開 催 " } ] HTMLの 構 造 は 固 定 <div> <span>2015/09/10</span> <a href="http://example.jp/news"> 新 製 品 発 表 のお 知 らせ </a> </div> <div> <span>2015/09/19</span> <a href="http://example.jp/owasp"> Local Chapter Meeting 開 催 </a> </div> 属 性 値 やテキストノードの 部 分 を 動 的 に 生 成

特 定 書 式 の 繰 り 返 し テンプレート 的 な 用 途 自 分 でテンプレート 処 理 を 書 く? // bad code function expandtemplate( template, json ){ var i, s, html = ""; for( i = 0; i < friends.length; i++ ){ s = template.replace( /%( w+)%/g, function( s, param ){ if( param === "date" ) return htmlescape( json[ i ].date ); else if( param === "url" ) return htmlescape( json[ i ].url ); else if( param === "title" ) return htmlescape( json[ i ].title ); else return "%" + param + "%"; } ); html += s; } return html; } elm.innerhtml = expandtemplate( '<div>' + '<span>%date%</span><a href="%url%">%title%</a>', json );

テンプレート 処 理 を 自 分 で 書 くのはやめるべ き 汎 用 性 に 欠 けるのに 見 通 しの 悪 いコードが 増 える 細 かな 対 策 全 てを 自 分 でケアする 必 要 がある テキストノードにエスケープが 必 要 URLにjavascript:スキーム 等 が 混 入 しないように 注 意 がいる

JSのテンプレートエンジンライブラリの 導 入 MV*フレームワークの 採 用 (vue,knockoutなど) 各 ライブラリの 挙 動 を 把 握 して 使 用 すること テキストノードへ 出 力 するときにエスケープされる か(vueのv-textとv-htmlの 違 い 等 ) 属 性 値 にjavascript:スキーム 等 が 設 定 された 場 合 にどうなるか

一 部 のタグだけは 許 容 したい 特 定 書 式 の 繰 り 返 し テンプレート 的 な 用 途 [ { "date" : "2015/09/10", "url" : "http://example.jp/news", "title" : " 新 製 品 発 表 のお 知 らせ" }, { "date" : "2015/09/19", "url" : "http://example.jp/owasp", "title" : "Local Chapter Meeing 開 催 " } ] ユーザーによる 自 由 な 入 力 <div> <span>2015/09/10</span> <a href="http://example.jp/news"> 新 製 品 発 表 のお 知 らせ </a> </div> <div> <span>2015/09/19</span> <a href="http://example.jp/owasp"> Local Chapter Meeting 開 催 </a> </div> var markdown = "** 注 意 ** 雨 天 時 は[こち ら](http://example.jp/)です "; <b> 注 意 </b> 雨 天 時 は<a href="http://example.jp/">こちら</a>です

一 部 のタグだけは 許 容 したい 特 定 書 式 の 繰 り 返 し テンプレート 的 な 用 途 [ { "date" : "2015/09/10", "url" : "http://example.jp/news", "title" : " 新 製 品 発 表 のお 知 らせ" }, { "date" : "2015/09/19", "url" : "http://example.jp/owasp", "title" : "Local Chapter Meeing 開 催 " } ] ユーザーによる 自 由 な 入 力 <div> <span>2015/09/10</span> <a href="http://example.jp/news"> 新 製 品 発 表 のお 知 らせ </a> </div> <div> <span>2015/09/19</span> <a href="http://example.jp/owasp"> Local Chapter Meeting 開 催 </a> </div> var markdown = "** 注 意 ** 雨 天 時 は[こち ら](http://example.jp/)です "; <b> 注 意 </b> 雨 天 時 は<a href="http://example.jp/">こちら</a>です

ユーザーによる 自 由 な 入 力 HTML 構 造 が 事 前 に 定 義 されていない 安 全 なタグや 属 性 は 許 可 それ 以 外 を 禁 止 Webメール 掲 示 板 などのリッチエディット markdown

ユーザーによる 自 由 な 入 力 安 全 なタグや 属 性 だけ 許 可 それ 以 外 を 禁 止 <div>こんにちは</div> <script>alert(1)</script> <img src=# onerror=alert(1)> <s> 取 り 消 し 線 </s> <div>こんにちは</div> <img src=#> <s> 取 り 消 し 線 </s> 攻 撃 者 Web アプリ ユーザー

危 険 そうな 属 性 やタグを 全 て 削 除 する? // bad code function safehtml( html ){ return html.replace( /<script>/ig, "").replace( /onerror=/ig, "" ).replace( /onload=/ig, "" )... } var elm.innerhtml = safehtml( "<div>こんにちは</div>" + "<script>alert(1)</script>" + "<img src=# onerror=alert(1)>" + "<s> 取 り 消 し 線 </s>" );

危 険 そうな 属 性 やタグを 全 て 削 除 する? // bad code function safehtml( html ){ return html.replace( /<script>/ig, "").replace( /onerror=/ig, "" ).replace( /onload=/ig, "" )... } var elm.innerhtml = safehtml( "<s<script>cript>alert(1)</script>" ); // <script>alert(1)</script> このアプローチでは 絶 対 に 抜 けが 発 生 する

安 全 なタグ 要 素 だけでHTMLを 組 み 立 てな おす 安 全 なタグ 属 性 を 事 前 に 定 めておく 文 字 列 をHTMLとしてパースする 安 全 なタグ 属 性 のみでHTMLを 再 生 成 する といったことを 自 分 でやるのはしんどいので ライブラリに 任 せる

安 全 なタグ 要 素 だけでHTMLを 組 み 立 てな おす DOMPurify https://github.com/cure53/dompurify <script src="purify.js"></script>... var html = "<div>こんにちは</div>" + "<script>alert(1)</script>" + "<img src=# onerror=alert(1)>" + "<s> 取 り 消 し 線 </s>"; elm.innerhtml = DOMPurify.sanitize( html ); <div>こんにちは</div> <img src="#"> <s> 取 り 消 し 線 </s>

相 対 URLも 使 いたい // urlが http:// https:// で 始 まる 場 合 に <a id="link">を 設 定 function setlink( url ){ if( url.match( /^https?: / // ) ){ var elm = document.getelementbyid( "link" ); elm.setattribute( "href", url ); elm.textcontent = url; } } setlink( "http://example.jp/" ); // ok setlink( "javascript:alert(1)" ); // ng setlink( "/foo" ); //??? setlink( "foo" ); //???

相 対 URLを 絶 対 URLに 正 規 化 する URLUtilsインターフェース // Chrome, Firefoxのみ var url = new URL( "/foo", location.href ); console.log( url.href ); a 要 素 で 代 用 // IE 向 け var a = document.createelement( "a" ); a.setattribute( "href", "/foo" ); console.log( a.href );

function getabsoluteurl( url ){ var elm = document.createelement( "a" ); // hrefプロパティが 絶 対 URLを 返 すかテストする elm.setattribute( "href", "/test" ); if( elm.href === "/test" ){ // IE6, IE7 elm.setattribute( "href", url ); return elm.getattribute( "href", 4 ); }else{ elm.setattribute( "href", url ); return elm.href; } } function parseurl( url ){ try{ // URLコンストラクタが 使 用 できる 場 合 はそのまま 使 用 する var result = new URL( url ); return result; } catch( e ){ // URLコンストラクタが 使 用 できない 場 合 は<a> 要 素 を 使 用 する var elm = document.createelement( "a" ); // IEでは 相 対 URLをhref 属 性 に 設 定 した 場 合 にいくつかのプロパティが 正 しく // 取 得 できないため いったん 絶 対 URLに 変 換 してからhref 属 性 に 設 定 する elm.setattribute( "href", getabsoluteurl( url ) ); var result = { protocol: elm.protocol, host: elm.host, hostname: elm.hostname, port: elm.port, pathname: elm.pathname, search: elm.search, hash: elm.hash, href: elm.href, origin: elm.origin }; if( elm.protocol === "http:" ){ result.host = result.host.replace( /:80$/, "" ); }else if( elm.protocol === "https:" ){ result.host = result.host.replace( /:443$/, "" ); } if( result.origin === undefined ){ result.origin = result.protocol + "//" + result.host; } return result; } }

相 対 URLを 絶 対 URLに 変 換 したのちにプロト コルを 確 認 する var target = parseurl( "javascript:alert(1)" ); if( target.protocol.match( /^https?:/ ) ){ /* http httpsなurlなので 処 理 する */ }

DbXSS 対 策 に 自 信 がない 万 が 一 に 備 えたい DbXSSが 発 生 しても 被 害 が 及 ばないようにする HTML5 iframe sandboxが 利 用 可 能 <iframe sandbox seamless style="border-width:0px" id="f"></iframe> document.getelementbyid("f").srcdoc = "<div><img src=# onerror=alert(1)></div>"; sandbox 属 性 を 付 与 することでJSの 実 行 が 禁 止 される

一 部 のHTMLタグは 許 容 したい 特 定 書 式 の 繰 り 返 しにはテンプレートライブラリやMV*フ レームワークを 用 いる それらのエスケープ 有 無 を 把 握 すること リンクがhttp/httpsに 限 定 されるかを 確 認 すること ユーザーによる 自 由 なHTMLタグ 入 力 を 許 容 したい DOMPurifyのようなライブラリを 用 いる 相 対 URLを 使 いたい 絶 対 URLへ 変 換 したのちにプロトコルスキームを 確 認 する 保 険 的 対 策 iframe sandboxの 活 用

スキャナで 静 的 解 析 AppScan (よく 知 らない) スキャナで 動 的 解 析 DOMinatorPro (よく 知 らない) JavaScriptのソースコードを 読 む 一 番 効 果 的? 無 料! 攻 撃 者 もできる

ブラウザのデバッガでシンクの 使 用 箇 所 を 探 す innerhtml, locationなどが 多 い シンクがコントロール 可 能 か 調 べる シンク ソースへの 経 路 を 上 っていく 実 際 に 試 す

ソースコードを 読 みながら 探 す デバッグと 同 じ 技 術 が 要 求 される 開 発 者 としての 能 力 が 要 求 される 難 読 化 (minify)されているjsを 読 む 能 力

DOM-based XSSの 脅 威 の 増 加 攻 撃 可 能 箇 所 の 増 加 脆 弱 性 診 断 の 技 術 の 不 足 攻 撃 者 有 利 な 状 況 脆 弱 性 を 作 りこまない 必 要 性

hasegawa@utf-8.jp hasegawa@securesky-tech.com @hasegawayosuke http://utf-8.jp/