Javaセキュアコーディングセミナー東京 第4回 メソッドとセキュリティ

Similar documents
Javaセキュアコーディングセミナー東京 第4回 メソッドとセキュリティ 演習解説

Javaセキュアコーディングセミナー東京 第2回 数値データの取扱いと入力値の検証 演習解説

Javaセキュアコーディングセミナー2013東京第1回 演習の解説

JEB Plugin 開発チュートリアル 第4回

Apache Tomcatにおけるクロスサイトリクエストフォージェリ(CSRF)保護メカニズム回避の脆弱性

Javaセキュアコーディングセミナー東京 第3回 入出力(File, Stream)と例外時の動作 演習解説

Microsoft PowerPoint ppt

1. 業 務 概 要 貨 物 情 報 登 録 済 の 貨 物 に 対 して システムを 介 さずに 行 われた 税 関 手 続 きについて 税 関 が 許 可 承 認 等 を 行 った 旨 を 登 録 する また システムで 行 われた 以 下 の 税 関 手 続 き( 以 下 輸 出 申 告 等

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

1

Taro-契約条項(全部)

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

Speed突破!Premium問題集 基本書サンプル

(1)1オールゼロ 記 録 ケース 厚 生 年 金 期 間 A B 及 びCに 係 る 旧 厚 生 年 金 保 険 法 の 老 齢 年 金 ( 以 下 旧 厚 老 という )の 受 給 者 に 時 効 特 例 法 施 行 後 厚 生 年 金 期 間 Dが 判 明 した Bは 事 業 所 記 号 が

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

PowerPoint プレゼンテーション

第 8 条 乙 は 甲 に 対 し 仕 様 書 に 定 める 期 日 までに 所 定 の 成 果 物 を 検 収 依 頼 書 と 共 に 納 入 する 2 甲 は 前 項 に 定 める 納 入 後 10 日 以 内 に 検 査 を 行 うものとする 3 検 査 不 合 格 となった 場 合 甲 は

神の錬金術プレビュー版

定款  変更

ができます 4. 対 象 取 引 の 範 囲 第 1 項 のポイント 付 与 の 具 体 的 な 条 件 対 象 取 引 自 体 の 条 件 は 各 加 盟 店 が 定 めます 5.ポイントサービスの 利 用 終 了 その 他 いかなる 理 由 によっても 付 与 されたポイントを 換 金 すること

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

要 な 指 示 をさせることができる ( 検 査 ) 第 8 条 甲 は 乙 の 業 務 にかかる 契 約 履 行 状 況 について 作 業 完 了 後 10 日 以 内 に 検 査 を 行 うものとする ( 発 生 した 著 作 権 等 の 帰 属 ) 第 9 条 業 務 によって 甲 が 乙 に

PowerPoint プレゼンテーション

目 次 目 次 1 ログイン ログアウト ログインする...1 ログイン 画 面 が 表 示 されないときは?... 1 初 めてログインするときのパスワードは?... 2 初 期 パスワードを 忘 れてしまったときは?... 2 変 更 したパスワードを 忘 れてしまったときは?.

るよう 工 事 打 合 せ 簿 ( 様 式 2)により 受 注 者 に 求 めます 5-1 理 由 書 ( 様 式 3)が 提 出 され 特 別 の 事 情 を 有 すると 認 めた 場 合 は 社 会 保 険 等 の 加 入 が 確 認 できる 書 類 を 提 出 するよう 工 事 打 合 せ 簿

ていることから それに 先 行 する 形 で 下 請 業 者 についても 対 策 を 講 じることとしまし た 本 県 としましては それまでの 間 に 未 加 入 の 建 設 業 者 に 加 入 していただきますよう 28 年 4 月 から 実 施 することとしました 問 6 公 共 工 事 の

PowerPoint プレゼンテーション

1 光 回 線 工 事 1 2 光 回 線 工 事 光 提 供 機 器 光 回 線 工 事 内 容 説 明 本 参 考 回 線 工 事 間 機 器 設 置 場 所 検 討 宅 内 配 線 端 末 機 器 等 準 備 提 携 申 込

( 別 紙 ) 以 下 法 とあるのは 改 正 法 第 5 条 の 規 定 による 改 正 後 の 健 康 保 険 法 を 指 す ( 施 行 期 日 は 平 成 28 年 4 月 1 日 ) 1. 標 準 報 酬 月 額 の 等 級 区 分 の 追 加 について 問 1 法 改 正 により 追 加


<4D F736F F F696E74202D2082C882E982D982C DD8ED88EE688F882CC82B582AD82DD C668DDA9770>

HK05

untitled

WEBメールシステム 操作手順書

Microsoft Word - ML_ListManager_10j.doc

<947A957A8E9197BF C E786C73>

2. 前 項 の 規 定 にかかわらず 証 券 会 社 等 又 は 機 構 を 通 じた 届 出 の 対 象 となっていない 事 項 については 当 会 社 の 定 める 書 式 により 株 主 名 簿 管 理 人 宛 に 届 け 出 るものとす る ( 法 人 株 主 等 の 代 表 者 ) 第

マネジメントシステム 認 証 規 則 目 次 1 章 総 則 1.1 一 般 2 章 マネジメントシステムの 登 録 2.1 一 般 2.2 登 録 原 簿 2.3 登 録 証 書 2.4 登 録 マークの 使 用 及 び 認 証 の 引 用 2.5 登 録 維 持 2.6 登 録 継 続 2.7

Microsoft Word - 養生学研究投稿規定(改)

PowerPoint プレゼンテーション

目 次 電 子 申 請 を 使 用 した 申 請 の 流 れ 1ページ 申 請 書 ( 概 算 保 険 料 申 告 書 )の 作 成 2ページ 作 成 した 申 請 書 の 送 信 31ページ 状 況 照 会 電 子 納 付 を 行 う 62ページ 返 送 書 類 の 取 得 75ページ お 問 い

事 業 者 所 在 地 事 業 者 名 役 職 電 話 番 号 メールアドレス( 当 局 が 提 供 したデ ータから 変 更 等 があれば 入 力 を 行 うこと) アンケート 設 問 数 : 全 27 問 程 度 当 該 データをとりまとめる 際 は 必 ず2 名 以 上 によるデータのチェック

新・明解Java入門

小 売 電 気 の 登 録 数 の 推 移 昨 年 8 月 の 前 登 録 申 請 の 受 付 開 始 以 降 小 売 電 気 の 登 録 申 請 は 着 実 に 増 加 しており これまでに310 件 を 登 録 (6 月 30 日 時 点 ) 本 年 4 月 の 全 面 自 由 化 以 降 申

23信託の会計処理に関する実務上の取扱い

Exam : 1z1-809-JPN Title : Java SE 8 Programmer II Vendor : Oracle Version : DEMO Get Latest & Valid 1z1-809-JPN Exam's Question and Answers 1 from Ac

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

はファクシミリ 装 置 を 用 いて 送 信 し 又 は 訪 問 する 方 法 により 当 該 債 務 を 弁 済 す ることを 要 求 し これに 対 し 債 務 者 等 から 直 接 要 求 しないよう 求 められたにもかか わらず 更 にこれらの 方 法 で 当 該 債 務 を 弁 済 するこ

158 高 校 講 座 習 モ 現 ラ 習 モ 距 離 置 示 終 向 据 示 唆 与 取 ょ 第 7576 回 第 :

PowerPoint プレゼンテーション

著 作 権 について このレポートは 著 作 権 法 で 保 護 されている 著 作 物 です このレポートの 著 作 権 はカラバオに 属 します 著 作 権 者 の 許 可 なく このレポートの 全 部 又 は 一 部 をいかなる 手 段 においても 複 製 転 載 流 用 転 売 等 すること

・モニター広告運営事業仕様書

(現行版)工事成績書と評定表をあわせた_docx

2. 事 務 連 絡 者 用 メニュー (1) 登 録 変 更 申 請 委 員 会 メンバー メンバー 個 人 情 報 企 業 情 報 の 変 更 および JIRA 会 員 を 退 会 する 場 合 こ のメニューから 各 種 申 請 を 行 います 申 請 後 変 更 内 容 を JIRA 事 務

(Microsoft PowerPoint - \223\306\217KJAVA\221\346\202R\224\ ppt)

本 日 の 内 容 1. ゲートウェイシステムにより 提 出 する 電 子 ファイル 2. ゲートウェイシステムによる 提 出 方 法 3. 電 子 データとeCTDの 関 係 4. 提 出 形 式 提 出 方 法 に 係 るQ&A 2

2 出 願 資 格 審 査 前 記 1の 出 願 資 格 (5) 又 は(6) により 出 願 を 希 望 する 者 には, 出 願 に 先 立 ち 出 願 資 格 審 査 を 行 いますので, 次 の 書 類 を 以 下 の 期 間 に 岡 山 大 学 大 学 院 自 然 科 学 研 究 科 等

戦略担当者のための

3-1_CSAJ_投資契約書_シードラウンド)

PowerPoint プレゼンテーション


スライド 1

二 資本金の管理

PowerPoint プレゼンテーション

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

- 1 - 総 控 負 傷 疾 病 療 養 産 産 女 性 責 帰 べ 由 試 ~ 8 契 約 契 約 完 了 ほ 契 約 超 締 結 専 門 的 知 識 技 術 験 専 門 的 知 識 高 大 臣 専 門 的 知 識 高 専 門 的 知 識 締 結 契 約 満 歳 締 結 契 約 契 約 係 始

Microsoft PowerPoint - 報告書(概要).ppt

に 対 して 消 磁 装 置 によるデータ 破 壊 を 行 い データの 復 旧 を 不 可 能 とするこ と 2 消 去 が 終 了 したことが 識 別 できるシール 等 を 媒 体 に 貼 付 すること(このシール は 本 委 託 契 約 の 範 囲 内 で 受 託 者 が 用 意 すること)

平成18年1月4日

ー ただお 課 長 を 表 示 するものとする ( 第 三 者 に 対 する 許 諾 ) 第 4 条 甲 は 第 三 者 に 対 して 本 契 約 において 乙 に 与 えた 許 諾 と 同 一 又 は 類 似 の 許 諾 を することができる この 場 合 において 乙 は 甲 に 対 して 当

募集新株予約権(有償ストック・オプション)の発行に関するお知らせ

1 本 店 の 申 請 において 代 理 人 を 立 てない 場 合 電 子 証 明 書 の 利 用 者 は 代 表 者 で 取 得 してください 6 電 子 証 明 書 の 利 用 者 は 誰 にすればよいのですか? 2 本 店 の 申 請 で 代 理 人 を 立 てる または 支 店 の 申 請

5 相 続 時 精 算 課 税 制 度 の 特 例 一 定 の 要 件 を 満 たした 中 古 住 宅 を 取 得 するために 65 歳 未 満 の 直 系 尊 属 から 贈 与 を 受 けた 贈 与 税 について 相 続 時 精 算 課 税 制 度 の 利 用 を 受 けられる 特 例 6 贈 与

< C8EAE81698B4C93FC8FE382CC97AF88D38E968D CA8E86816A2E786C73>

Taro-条文.jtd

端 末 型 払 い 出 しの 場 合 接 続 構 成 図 フレッツ グループから 払 出 されたIPアドレス /32 NTT 西 日 本 地 域 IP 網 フレッツ グループ フレッツ グループから 払 出 されたIPアドレス /

JEB Plugin 開発チュートリアル 第3回

PowerPoint プレゼンテーション

贈与税 faq

Ⅶ 東 海 地 震 に 関 して 注 意 情 報 発 表 時 及 び 警 戒 宣 言 発 令 時 の 対 応 大 規 模 地 震 対 策 特 別 措 置 法 第 6 条 の 規 定 に 基 づき 本 県 の 東 海 地 震 に 係 る 地 震 防 災 対 策 強 化 地 域 において 東 海 地 震

MetaMoJi ClassRoom/ゼミナール 授業実施ガイド

1 特 別 会 計 財 務 書 類 の 検 査 特 別 会 計 に 関 する 法 律 ( 平 成 19 年 法 律 第 23 号 以 下 法 という ) 第 19 条 第 1 項 の 規 定 に 基 づき 所 管 大 臣 は 毎 会 計 年 度 その 管 理 する 特 別 会 計 について 資 産

1.1 評 価 サマリー 作 業 手 順 に 関 しては 全 体 的 に 誤 謬 防 止 やデータの 整 合 性 を 保 つためのチ ェックが 組 み 込 まれており 支 障 の 無 い 水 準 と 評 価 できます 一 部 作 業 漏 れチェックの 不 があったので 今 後 は 手 順 に 含 む

KINGSOFT Office 2016 動 作 環 境 対 応 日 本 語 版 版 共 通 利 用 上 記 動 作 以 上 以 上 空 容 量 以 上 他 接 続 環 境 推 奨 必 要 2

プログラミング基礎I(再)

<4D F736F F D208CF689768ED C8FE395FB978E8CEA8BA689EF814592E88ABC2E646F63>

雇用保険被保険者資格取得届(様式)編

< 現 在 の 我 が 国 D&O 保 険 の 基 本 的 な 設 計 (イメージ)> < 一 般 的 な 補 償 の 範 囲 の 概 要 > 請 求 の 形 態 会 社 の 役 員 会 社 による 請 求 に 対 する 損 免 責 事 由 の 場 合 に 害 賠 償 請 求 は 補 償 されず(

企業結合ステップ2に関連するJICPA実務指針等の改正について③・資本連結実務指針(その2)

Microsoft Word - 【事務連絡】居所情報の登録申請が間に合わなかった場合の取扱いの周知について.docx

<4D F736F F F696E74202D C90BF8F CC8DEC90AC97E181698A4F8D E8816A5F56322E707074>

01_07_01 データのインポート_エクスポート_1

推 奨 環 境 このレポート 上 に 書 かれている URL はクリックできます できない 場 合 は 最 新 の AdobeReader をダウンロードしてください ( 無 料 ) 著 作

1 林 地 台 帳 整 備 マニュアル( 案 )について 林 地 台 帳 整 備 マニュアル( 案 )の 構 成 構 成 記 載 内 容 第 1 章 はじめに 本 マニュアルの 目 的 記 載 内 容 について 説 明 しています 第 2 章 第 3 章 第 4 章 第 5 章 第 6 章 林 地

目 次 1. はじめに 3 2. システム 要 件 4 3. HDD Password Tool のインストール 5 Windows の 場 合 5 Mac の 場 合 8 4. HDD Password Tool の 使 い 方 HDD Password Tool を 起 動 する

<4D F736F F D E A815B F95F28D73838F C D758DC02093C195CA8D A93AD95DB8CAF82CC8F578C B582A2944E937882AA82CD82B682DC82E9914F82CC8A6D C E646F6

AGT10 ( Android(TM) 4.1) ファームウェア更新方法

iStorage ソフトウェア VMware vSphere Web Client Plug-in インストールガイド

同 期 を 開 始 する( 初 期 設 定 ) 2 1 Remote Link PC Sync を 起 動 する 2 1 接 続 機 器 の [PIN コード ] [ ユーザー 名 ] [ パスワード ] を 入 力 する [PIN コード ] などの 情 報 は 接 続 機 器 の 設 定 画 面

Memo

Transcription:

Japan Computer Emergency Response Team Coordination Center 電子署名者 : Japan Computer Emergency Response Team Coordination Center DN : c=jp, st=tokyo, l=chiyoda-ku, email=office@jpcert.or.jp, o=japan Computer Emergency Response Team Coordination Center, cn=japan Computer Emergency Response Team Coordination Center 日付 : 2013.06.26 14:36:21 +09'00' Javaセキュアコーディングセミナー東京 第4回 メソッドとセキュリティ 2012年12月16日(日) JPCERTコーディネーションセンター 脆弱性解析チーム 熊谷 裕志 戸田 洋三 1

本 資 料 について 本 セミナーに 使 用 するテキストの 著 作 権 はJPCERT/CCに 帰 属 します 事 前 の 承 諾 を 受 けた 場 合 を 除 いて 本 資 料 に 含 有 される 内 容 ( 一 部 か 全 部 かを 問 わな い)を 複 製 公 開 送 信 頒 布 譲 渡 貸 与 使 用 許 諾 転 載 再 利 用 できません 本 セミナーに 関 するお 問 い 合 わせ JPCERTコーディネーションセンター セキュアコーディング 担 当 E-mail:secure-coding@jpcert.or.jp TEL:03-3518-4600 2

本 セミナーについて 4 回 連 続 セミナーです 第 1 回 9 月 9 日 ( 日 ) オブジェクトの 生 成 と 消 滅 におけるセキュリティ 第 2 回 10 月 14 日 ( 日 ) 数 値 データの 取 扱 いと 入 力 値 検 査 第 3 回 11 月 11 日 ( 日 ) 入 出 力 (ファイル,ストリーム)と 例 外 時 の 動 作 第 4 回 12 月 16 日 メソッドとセキュリティ 開 発 環 境 持 参 3

今 日 の 時 間 割 講 義 (13:30--15:00) メソッド/セキュリティ (13:30--14:35) ファイナライザ (14:45--15:15) ハンズオン (15:15--16:30) 15:25--15:55 15:55--16:30 4

メソッド 5

メソッドとは プログラミング 言 語 Java 第 4 版 1.8メソッドとパラメータ 6

メソッドとは Java 言 語 仕 様 第 3 版 8.4.2 メソッドのシグネチャ 7

メソッドとは class Person { private int id; private String name; public Person(int i, String s){ id=i; name=s; public int id(){ return id; public String name(){ return name; public static void main(string[] args){ person p = new person(1, taro ); System.out.println(p.name() + : + p.id()); クラスPersonに メソッドid()とname()とmain(String[])が 定 義 されている 8

メソッドオーバーロードを乱用しない Java言語ではメソッドのオーバーロードが可能 2つのメソッドは 異なる数のパラメータか異なる型のパラメータ を持っていれば つまり異なるシグネチャであれば 同じ名前を 持つことができます メソッドの1つの名前が複数の意味を持つの で この機能はオーバーロード(overloading)と呼ばれます 1つのメソッドを呼び出す場合に オーバーロードされているメソ ッドから最も一致するメソッドを探すために コンパイラーは引 数の型を使用します プログラミング言語Java第4版 2.8メソッドのオーバーロード 9

メソッドオーバーロードを 乱 用 しない オーバーロードを 使 った 単 純 なサンプルコード class overload { public void id(string s){ System.out.println("String"); public void id(integer i){ System.out.println("Integer"); public static void main(string[] args) { overload o = new overload(); o.id("choichoi"); o.id(42); 実 行 例 $ java overload String Integer $ 10

メソッドオーバーロードを 乱 用 しない メソッドのオーバーロード メソッド 名 が 同 じでも 引 数 リストが 異 なれば 異 なるメ ソッド シグネチャで 区 別 される 呼 び 出 すメソッドはコンパイル 時 に 決 まる メソッドのオーバーライド 呼 び 出 すメソッドは 実 行 時 に 決 定 される 11

メソッドオーバーロードを 乱 用 しない メソッド id(int i)を 追 加 class Overload { public void id(string s){ System.out.println("String"); public void id(integer i){ System.out.println("Integer"); public void id(int i){ System.out.println("int"); public static void main(string[] args) { Overload o = new Overload(); o.id("choichoi"); o.id(42); 追 加 されたメソッド 実 行 例 $ java Overload String int $ 呼 び 出 すメソッドが 変 わっ てしまった! 12

メソッドオーバーロードを 乱 用 しない メソッドのオーバーロードを 乱 用 すると 動 作 が 分 かりにくく 誤 解 を 招 く デバッグしにくい コードの 保 守 が 困 難 になる 13

メソッドオーバーロードを 乱 用 しない public class Overloader { private static String display(arraylist<integer> arrlist) { return "ArrayList"; private static String display(linkedlist<string> llist) { return "LinkedList"; private static String display(list<?> list) { return "List is not recognized"; public static void main(string[] args) { List<?>[] invokeall = new List<?>[] { new ArrayList<Integer>(), new LinkedList<String>(), new Vector<Integer>() ; for (List<?> i : invokeall) { System.out.println(display(i)); コンパイル 時 の 型 はList 3つ 全 てについて List is not recognized と 出 力 される 違 反 コード display()メソッドがオーバ ーロードされている 14

メソッドオーバーロードを乱用しない public class Overloader { 適合コード private static String display(list<?> l) { return (l instanceof ArrayList? "Arraylist" : (l instanceof LinkedList? "LinkedList" : "List is not recognized")); 実行時に引数の型を public static void main(string[] args) { List<?>[] invokeall = new List<?>[] { new ArrayList<Integer>(), new LinkedList<String>(), new Vector<Integer>() ; for (List<?> i : invokeall) { System.out.println(display(i)); 15 識別するには instanceof()を使う

メソッドオーバーロードを乱用しない // Effective Java, 項目 41 違反コード public class SetList { public static void main(string[] args){ Set<Integer> set = new TreeSet<Integer>(); List<Integer> list = new ArrayList<Integer>(); for (int i=-3; i<3; i++){ set.add(i); list.add(i); for (int i=0; i<3; i++){ set.remove(i); list.remove(i); System.out.println(set + " " + list); 16 ArrayListには動作の異なる2つのremove() メソッドが提供されている

メソッドオーバーロードを 乱 用 しない 実 行 例 $ java SetList [-3, -2, -1] [-2, 0, 2] $ [-3,-2,-1] [-3,-2,-1]にならないのはなぜ? 17

メソッドオーバーロードを乱用しない set.remove(i)の動作 [-3,-2,-1,0,1,2] [-3,-2,-1,1,2] set.remove(0) (int)0がautoboxingにより (Integer)0になる set.remove(1) (int)1がautoboxingにより (Integer)1になる [-3,-2,-1,2] set.remove(2) (int)2がautoboxingにより (Integer)2になる [-3,-2,-1] 18

メソッドオーバーロードを乱用しない list.remove(i)の動作 [-3,-2,-1,0,1,2] [-2,-1,0,1,2] list.remove(0) remove(int)が呼び出される list.remove(1) remove(int)が呼び出される [-2,0,1,2] list.remove(2) remove(int)が呼び出される [-2,0,2] 19

メソッドオーバーロードを 乱 用 しない // Effective Java, 項 目 41 public class SetList { public static void main(string[] args){ Set<Integer> set = new TreeSet<Integer>(); List<Integer> list = new ArrayList<Integer>(); 適 合 コード for (int i=-3; i<3; i++){ set.add(i); list.add(i); for (int i=0; i<3; i++){ set.remove(i); list.remove((integer)i); // あるいは (Integer.ValueOf(i)) System.out.println(set + " " + list); 20

まとめ オーバーロードを 乱 用 するとコードの 可 読 性 が 下 がり メソッドを 誤 用 する 危 険 が 増 す なるべくオーバーロードを 避 け 異 なる 名 前 のメ ソッドを 実 装 するほうが 安 全 Effective Java, 項 目 41 21

セキュリティ 22

privateのフィールドやメソッドにアクセス? public class Example { private int i = 3; private int j = 4; private void zeroi() { this.i = 0; Example e = new Example(); System.out.println("" + e.i); e.i = 10; e.zeroi(); 他のクラスからprivateのiやj zeroi()にアクセスできる 23

リフレクション http://docs.oracle.com/javase/jp/6/api/java/lang/reflect/package-summary.html 24

リフレクションを 使 うと try { Class<Example> c = Example.class; Example example = new Example(); Field field = c.getdeclaredfield("i"); field.setaccessible(true); System.out.println("" + field.get(example)); catch (Exception ex) { ex.printstacktrace(system.out); privateのフィールドに アクセスできる setaccessibleを 有 効 にするとリフレクションを 使 っ て 通 常 アクセスできないところにアクセスできる 25

リフレクションを 使 うと try { Class<Example> c = Example.class; Example example = new Example(); Method method = c.getdeclaredmethod("zeroi"); method.setaccessible(true); Object ret = method.invoke(example); Field field = c.getdeclaredfield("i"); field.setaccessible(true); privateのメソッドにも アクセスできる System.out.println("" + field.get(example)); catch (Exception ex) { ex.printstacktrace(system.out); 26

リフレクション セキュリティマネージャで 制 限 することができる 27

セキュリティマネージャ http://docs.oracle.com/javase/jp/6/api/java/lang/securitymanager.html 28

Java : セキュリティモデル サンドボックスによって保護されている セキュリティポリシーにもとづいて操作を許可する 許可されていない操作をすると例外が発生 例えば Javaアプレットは ローカルのリソースにはアクセス出来ない ダウンロード元のサーバとのみ通信可 29

セキュリティマネージャを 使 う 違 反 コード import java.util.hashtable; class SensitiveHash { Hashtable<Integer,String> ht = new Hashtable<Integer,String>(); public void removeentry(object key) { ht.remove(key); // 中 略 removeentry()がpublic 悪 意 ある 攻 撃 者 が 自 由 に 呼 び 出 せる 30

セキュリティマネージャを 使 う import java.util.hashtable; 適 合 コード class SensitiveHash { private Hashtable<Integer,String> ht = new Hashtable<Integer,String>(); public final void removeentry(object key) { check("removekeypermission"); ht.remove(key); private void check(string directive) { SecurityManager sm = System.getSecurityManager(); if (sm!= null) { sm.checksecurityaccess(directive); // 中 略 31

セキュリティポリシーファイル 指 定 した 署 名 で 署 名 されているクラスに 許 可 を 与 える 指 定 したディレクトリからロードされたクラスに 許 可 を 与 える grant SignedBy hogehoge codebase "file:${user.dir/sensitive" { ; permission java.security.securitypermission "removekeypermission"; http://docs.oracle.com/javase/jp/6/technotes/guides/security/spec/security-spec.doc3.html#20128 32

policytool 付 属 のPolicy Toolユーティリティを 使 用 して ポ リシーファイルを 作 成 することもできる http://docs.oracle.com/javase/jp/6/technotes/guides/security/policyguide.html 33

実 行 してみる $ java -Djava.security.manager -Djava.security.policy=my.policy - classpath./sensitive:./ UseHash 34

セキュリティマネージャを 使 う import java.util.hashtable; import java.security.accesscontroller; import java.security.securitypermission; 適 合 コード class SensitiveHash { private Hashtable<Integer,String> ht = new Hashtable<Integer,String>(); public final void removeentry(object key) { check("removekeypermission"); ht.remove(key); private void check(string directive) { SecurityPermission sp = new SecurityPermission(directive); AccessController.checkPermission(sp); // 中 略 AccessController#checkPermissionを 呼 び 出 すこの 方 法 が 推 奨 されている 35

ファイナライザ 36

finalize()メソッド クラス Object には, finalize と呼ばれる protected メソッドが用意されており, 他のクラス からこのメソッドをオーバーライドすることがで きる あるオブジェクトに対して起動可能な特定 の finalize 定義は, そのオブジェクトのファイナラ イザ(finalizer)と呼ばれる Java言語仕様第3版 12.6 クラス インスタンスのファイナライズ 37

finalize()メソッド public class Object {...... protected void finalize() throws Throwable...... JavaSE6 API仕様 クラスObject, finalizeメソッドの説明 38

finalize()メソッドを 使 わない finalizeメソッドの 利 用 に 関 しては 数 々の 問 題 が 存 在 するため その 利 用 は 例 外 的 場 合 に 限 るべき 実 行 に 関 して 無 保 証 並 行 実 行 の 可 能 性 例 外 の 扱 い リソース 一 般 の 後 処 理 には 使 えない 39

実 行 されるかどうか 無 保 証 finalizeメソッドは 実 行 されるとは 限 らない メモリに 余 裕 があればGCは 働 かない finalize メソッドも 実 行 されない オブジェクトの 状 態 をファイルに 保 存 するなどの 終 了 処 理 をfinalizeメソッドで 実 行 してはいけない 実 行 タイミングが 重 要 な 処 理 をfinalizeメソッドで 実 行 してはいけない 40

実行順序や並行実行の可能性, 例外の扱い finalizeメソッドの実行順序 Java言語仕様第3版 12.6.2 ファイナライザの起動は順序付けられていない 複数の(オブジェクトの)finalizeメソッドの実行順序は指定できない 複数の(オブジェクトの)finalizeメソッドが並列に実行されるかも finalizeメソッドのなかからスローされた例外は無視される finalize メソッドの実行自体は中断 41

リソース 一 般 の 後 処 理 には 使 えない finalizeメソッドとリソース 管 理 finalizeメソッドの 実 行 はメモリの 使 用 状 況 に 依 存 メモリ 以 外 のリソースの 空 き 状 況 は 関 係 しない 結 果 : 空 きメモリが 潤 沢 でも 他 のリソースが 枯 渇 する 可 能 性 GCが 実 行 されない finalizeメソッドも 実 行 されない DoS 攻 撃 の 危 険 性 注 意!! finalizeメソッドは C++ の destructor とは 違 います 42

リソース 一 般 の 後 処 理 には 使 えない リソース 一 般 の 後 処 理 には Closeable インタフェースと try-withresources 構 文 を 活 用 すべき リソース... 使 用 開 始 時 にオープン/ 使 用 終 了 時 にクローズするもの ストリームのclose メソッド, Timerのcancel メソッド, Graphics の dispose メソッドなど Closeable インタフェースを 実 装... close() メソッドを 持 っている try-with-resources て 東 京 セミナ part3 でちらっと 紹 介 したよね! 43

finalize()を 使 う 場 合 の 注 意 点 時 間 のかかる 処 理 を 行 うべきではない 明 示 的 に 行 うべきクローズ 処 理 の 最 終 チェック 手 段 として 使 う finalize()メソッドをオーバライドする 場 合, 親 クラスのfinalize() 呼 び 出 しを 忘 れずに 行 う 44

finalizer guardian サブクラスで finalize() メソッドをオーバライドして いる 状 況 で, 親 クラスの finalize() 呼 び 出 しを 保 証 す るための 手 法 public class Foo { private final Object finalizerguardian = new Object() { @Override protected void finalize() throws Throwable {... 外 側 のオブジェクトをファイナライズする... ;... 45

ファイナライザに 関 連 するコーディングルール FIO04-J. 不 要 になったらリソースを 解 放 する FIO14-J. プログラムの 終 了 時 には 適 切 なクリーンアップ を 行 う MET12-J. ファイナライザは 使 わない 46

攻 撃 手 法 の 紹 介 : ファイナライザー 攻 撃 47

概 要 ライセンス 認 証 を 行 うサンプルアプリケーションに 対 し Java コードを 追 加 するだけで 認 証 回 避 を 行 う 攻 撃 手 法 finalize()メソッドを 悪 用 するため ファイナライザー 攻 撃 と 呼 ばれる 手 法 48

サンプルアプリケーションの 構 成 アプリ 本 体 : Application クラス アプリ 本 体 の 実 行 に 先 立 って ライセンス 認 証 を 行 う LicenseManagerクラス: ライセンス 情 報 の 確 認 SecuritySystemクラス: 認 証 完 了 したことを 記 録 LicenseManager コンストラクタ 中 に ライセンス 確 認 処 理 SecuritySystem LicenseManagerの インスタンスを 登 録 Application 本 体 実 行 49

サンプルアプリケーション(1/2) public class LicenseManager { public LicenseManager() { if (!licensevalidation()) { throw new SecurityException("License Invalid!"); private boolean licensevalidation() { // ライセンスファイルをリードしてチェックし ライセンスが正当ならtrueを返す return false; ここでは必ず認証失敗するようなコードにしている public class SecuritySystem { private static LicenseManager licensemanager = null; public static void register(licensemanager lm) { // licensemanagerが初期化されていない場合のみ登録 if (licensemanager == null) { if (lm == null) { System.out.println("License Manager invalid!"); System.exit(1); licensemanager = lm; Heinz M. Kabutz. Exceptional Constructors - Ressurecting the dead. Java Specialists Newsletter. 2001 50

サンプルアプリケーション(2/2) public class Application { public static void main(string[] args) { LicenseManager lm; try { lm = new LicenseManager(); catch(securityexception ex) { lm = null; SecuritySystem.register(lm); System.out.println("Now let s get things started"); 正 しいライセンス 情 報 を 持 っていないと... LicenseManagerのインスタンス 生 成 時 に 例 外 発 生 LicenseManager のインスタンスを 登 録 しないと... SecuritySystem.register() で 例 外 発 生 51

サンプルアプリケーション 実 行 例 % ls *.java Application.java SecuritySystem.java % javac *.java % java Application License Manager invalid! % LicenseManager.java たしかに 認 証 失 敗 している 52

サンプルアプリケーションを 攻 撃 する 攻 撃 目 的 LicenseManager のセキュリティチェックを 回 避 し Application.main() を 実 行 する 前 提 条 件 これらのクラスはすべて 変 更 できないものとする 攻 撃 方 針 LicenseManagerのサブクラスを 作 成 し 攻 撃 者 のアプリ( 後 述 の AttackerApp)に 脆 弱 なアプリApplicationを 読 み 込 む 問 題 LicenseManagerのサブクラスを 作 っても サブクラスでは 親 クラスでスローされる 例 外 をキャッチできない 53

親 クラスでスローされる 例 外 を 悪 用 できれば public class MyApplication { public static void main(string[] args) { MyLicenseManager lm; try { lm = new MyLicenseManager(); catch(securityexception ex) { lm = null; SecuritySystem.register(lm); // Applicationのメインメソッドを 呼 ぶ Application.main(args); public class MyLicenseManager extends LicenseManager { public MyLicenseManager() { System.out.println("Created MyLicenseManager"); MyApplication を 実 行 すると License Manager invalid! このやり 方 ではうまく 攻 撃 できない 54

finalize()メソッドの 悪 用 SecuritySystem に LicenseManager のインスタンスを 登 録 できれば 勝 ち しかもサンプルアプリケーションではLicenseManagerの インスタンスの 中 身 はチェックしていない LicenseManagerのインスタンス 欲 しい ライセンス 情 報 を 持 っていない 場 合 コンストラクタ 実 行 中 に 例 外 が 発 生 するので 生 成 途 中 で 捨 てられている finalize()を 使 えば GCされる 直 前 に 拾 うことができる! 55

ファイナライザー 攻 撃 を 行 うコード public class LicenseManagerInterceptor extends LicenseManager { private static LicenseManagerInterceptor instance = null; public static LicenseManagerInterceptor make() { try { new LicenseManagerInterceptor(); catch(exception ex) { // 例 外 を 無 視 try { synchronized(licensemanagerinterceptor.class) { while (instance == null) { System.gc(); LicenseManagerInterceptor.class.wait(100); catch(interruptedexception ex) { return null; return instance; public void finalize() { System.out.println("In finalize of " + this); synchronized(licensemanagerinterceptor.class) { instance = this; LicenseManagerInterceptor.class.notify(); public LicenseManagerInterceptor() { System.out.println("Created LicenseManagerInterceptor"); finalize()メソッド を 追 加 攻 撃 コード 56

ファイナライザー 攻 撃 を 行 うコード 攻 撃 コード public class AttackerApp { public static void main(string[] args) { LicenseManagerInterceptor lm = LicenseManagerInterceptor.make(); SecuritySystem.register(lm); // now we call the other application Application.main(args); LicenseManagerInterceptor.make()の 返 り 値 は GC 直 前 に 拾 い 上 げたLicenseManagerInterceptor のインスタンス 57

ファイナライザ 攻 撃 の 流 れ LicenseManagerInterceptor 親 クラスLicenseManagerの ライセンス 確 認 処 理 で 例 外 発 生 例 外 を 捕 捉 し GCが finalize()メソッドを 起 動 するのを 待 つ 初 期 化 途 中 だったLicenseManager のインスタンスを 取 得 やがて GCによって finalize() 起 動 SecuritySystem LicenseManagerの インスタンスを 登 録 Application 本 体 実 行 SecuritySystemにはすでに LicenseManagerのインスタンスが 登 録 されているため ライセンス 認 証 は 完 了 したと 思 わされる 58

攻 撃 コード 実 行 例 % ls Application.class LicenseManager.class SecuritySystem.class AttackerApp.java LicenseManagerInterceptor.java % javac *.java % java AttakerApp In finalize of LicenseManagerInterceptor@7dcb3cd Now let s get things started % 59

ファイナライザ 攻 撃 対 策 finalize()メソッドを 上 書 きされないように 定 義 重 要 なインスタンスは 初 期 化 の 完 了 を 必 ず 確 認 サブクラス 化 による 悪 用 を 防 ぐため クラスをfinal 宣 言 60