P.1 (ホワイトハット)ハッカーになろう! P.2 ハッカーって何? ハッカー(Hacker) = ?           ネットワーク犯罪者?           ネットワークに侵入して破壊する?           ネットワーク盗聴?                           個人データを盗み出す?           悪者,悪人,無法者? P.3 RFC (Request For Comment) IETF インターネット エンジニアリング タスク フォース RFC IETF が管理するインターネット上の法律書          インターネット上の約束事は全てRFCに従わなければならない. P.4 RFC (Request For Comment) インターネットの通信規約,アイディア,用語,ジョークなど WWWの通信方法 メールのやり取り 伝書鳩でネットワーク通信する方法(ジョーク) RFC1983(1996), RFC2828(2000) 用語定義 P.5 RFC (Request For Comment) Hacker hacker とは、特にシステムやコンピュータやコンピュータ ネットワークの内部構造に関して詳しい知識を持つことに喜びを感じる人のことである。この専門用語はしばしば悪い言葉の意味として悪用される。 その場合は“cracker” が適切な用語である。 コンピュータに強い興味を持つ者。彼らは、コンピュータについて学ぶことを楽しみ、色々な実験を行う。 推奨される定義は、それらの元来の意味 である。当時、この用語は、「物事を完全に把握し、カッコよく何かを起こす者」という中立的あるいは好意的な響きをもっていた。今日、この用語は、特に報道関係者によって、しばしば、「クラッカー(cracker)」の軽蔑的な意味をもつように濫用されている。  P.6 ハッカーって何? ハッカー(Hacker) ≠             ネットワーク犯罪者?           ネットワークに侵入して破壊する?           ネットワーク盗聴?                           個人データを盗み出す?           悪者,悪人,無法者? = クラッカー P.7 ハッキング(Hacking) 物事の本質を知ろうとすること (叩き切る,切り刻む) テレビは何で映るんだろう? 自動車の仕組みは? コンピュータは何で言う事を聞いてくれないの? 分からないから,中身を調べちゃえ!!  P.8 フォースの暗黒面 (star wars 風) フォース    ジェダイ  ------------------ ダークサイド    シス P.9 ハッキングの暗黒面 ハッキング    ハッカー  ------------------ ダークサイド    クラッカー P.10 アイツはシスだ!! (映画の内容とは無関係です.念のため) ダースベーダ: 俺は最強のジェダイだ! ジェダイは悪い奴だ! P.11 アイツはクラッカーだ!! クラッカー: 俺は天才ハッカーだ! ハッカーは悪い奴だ! P.12 時代を作り上げて来たハッカー達 バベッジ エイダ チューリング トンプソン リッチー カーニハン 嶋 正利 ゲイツ ジョブス アラン・ケイ 村井 純 ティム リヌース ストールマン ペイジ ブリン ザッカーバーグ P.13 ハッカー 深い知識と高度な技術,高い倫理感 どのような難問も魔術師の如く解決 秩序の守護神 (攻めるより,守るほうが遥かに難しい) コンピュータが対象とは限らない ex.) Life Hacker ウィザード・ハッカー, ホワイト(ハット)・ハッカー P.14 ハッカーの知識 (セキュリティ入門) 守るためには相手の攻撃手段を熟知する - パスワード クラックキング - Wi-Fi クラッキング - BOF アタック 便利なものには必ずセキュリティリスクが存在する 利便性と安全性はトレードオフの関係にある P.15 パスワード コンピュータ内ではパスワードは生のままではなく,ハッシュ値化されて保存される ハッシュ値化は一方向ハッシュ関数によって計算される P.16 一方向ハッシュ関数 一方向ハッシュ関数とは ハッシュ値(メッセージダイジェスト:MD)を計算する関数 MDは元のデータの特徴を取り出したもの 元のデータが1bit でも変化すると,MDは大きく変化する MDから元のデータを計算することは,非常に困難 SHA2 など P.17 パスワード コンピュータ内ではパスワードは生のままではなく,ハッシュ値化されて保存される ハッシュ値化は一方向ハッシュ関数によって計算される 例) $6$GmOzOFcr7Q6dNT//$gZ6TVQSMaUB1Pf/3jxD8q1WjbkCZRsnFPUalDuT.y2jiTBx9G/NrHdohaQKjsF/4vGPJ7Jkh1PRcSB0jRo9zQ. P.18 パスワード クラッキング John the Ripper - https://www.openwall.com/john/ (解析用)辞書 に載っているような物は簡単に解読可能 P.19 Wi-Fi セキュリティ SSIDステルス  × あまり意味がない MACアドレス制限 × あまり意味がない WPS △ 可能なら使わない方が良い 暗号化   WEP ×× 絶対に使うな    WPA, WPA2 △ 暗号方式にAES,複雑なPSKを使用  WPA3(2018.6) ? 既にいくつかの脆弱性が… PSK: ホットスポットの同一 PSK   × 明らかにヤバい  P.20 Wi-Fi クラッキング APとのコネクション時のパケットからPSKを推測 既にコネクションが張られている場合は,切断信号を送信する (解析用)辞書 に載っているような物は簡単に解読可能 P.21 BOF Attack Buffer Over Flow Attack バッファ(データの格納領域)からあぶれ出たデータを利用して,データ中のプログラムを起動させる (もしくは本来のプログラムを誤作動させる) P.22 プログラムの構造 プログラムのメモリ配置(OSに依存) --------------------------------- Low Address 出来スト領域(プログラムコード) --------------------------------- 静的領域(静的変数) --------------------------------- ヒープ領域 ↓ スタック領域 ↑ --------------------------------- High Address P.23 プログラムのスタック領域 データのメモリ配置 ------------------ 2 - 0x30 ← スタックポインタ ------------------ 1 - 0x28 ------------------ buf[0] - 0x20 ------------------ buf[1] - 0x18 ------------------ buf[2] - 0x10 ------------------ (buf[3]) - 0x08 ------------------ rbp (buf[4]) ------------------ リターンアドレス (buf[5]) ------------------ P.24 リターンアドレスの書き換え 何が起こっているの リターンアドレス (buf[5]) を書き換えて,本来 main関数も戻るところ,dummy()関数へ飛ばしてしまう. ------------------ 2 - 0x30 ← スタックポインタ ------------------ 1 - 0x28 ------------------ buf[0] - 0x20 ------------------ buf[1] - 0x18 ------------------ buf[2] - 0x10 ------------------ (buf[3]) - 0x08 ------------------ rbp (buf[4]) ------------------ リターンアドレス (buf[5]) → dummy() 関数 ------------------ P.25 BOF Attack プログラムをデータとして流し込みリターンアドレスを破壊して,流し込んだプログラムの先頭にリターンするようにする ------------------ プログラムをデータとして流し込む Data Data Data Data Data Data Data Data ...... ...... リターンアドレス → 流し込んだデータへ ------------------ P.26 BOF Attack 防御 実際にはいくつかの対策がある ASLR (Address Space Layout Randomization) - データの領域をランダムに配置する DEP (Data Execution Prevention):NX - データの領域中に存在するコードの実行を禁止する SSP (Stack Smashing Protector):スタック カナリア - スタックの破壊を監視する (DEADBEEF) PIC (Position Independent Code) - テキスト領域のアドレスを可変にする P.27 (ホワイトハット)ハッカーになろう https://cruel.org/freeware/hacker.html プログラミングを勉強しよう (作って公開する) HTML(ホームページ)を書いてみよう プログラミングを勉強しよう (作って公開する) HTML(ホームページ)を書いてみよう 英語を勉強しよう (せめて文章が読めるくらい) 正しい倫理観を持とう (ダークサイドに落ちないように) 何に対しても「不思議」だという気持ちを持とう - Sense of Wonder SFを読もう (小説・マンガ)