1 インターネットセキュリティ初級 株式会社リナックスアカデミー http://www.linuxacademy.ne.jp 2 本講座の項目(1) インターネットの成り立ち、セキュリティの概念 攻撃および侵入について 攻撃および侵入対象の情報収集 攻撃および侵入に対する対策 暗号の必要性と種類 盗聴の実務 (1/2) 3 本講座の項目(2) セキュアシェルの構築 無線LANのセキュリティ対策 HTTPの盗聴の実務 Webサーバの構築とセキュリティ SSLの暗号化 Webアプリケーションのセキュリティ (2/2) 4 1章 インターネットの成立ち、セキュリティの概念 OSSの開発プロセス - Linuxカーネル - OSSのセキュリティリスク インターネットの成立ちとブロードバンド環境 - DARPAの開発動機 - ARPAnetの成立、学術ネットワークから商用 へ セキュリティの概念:脅威と脆弱性 - インターネット社会のおける脅威 - 脅威と脆弱性の構造、防御の設計 5 OSSの開発プロセス 1. 開発プロセスとは、開発の工程のこと - プロダクトによって工程が異なる 2. Linuxカーネルの開発プロセス 3. OSSのセキュリティリスク 4. OSSに求められるセキュリティ 6 OSSとは ソースコードが公開されている - ソースコードからバイナリファイル(実行コード )を作成する(コンパイル) ソースコードは著作物 OSSでは、著作権に、OSSライセンスを適用 OSSライセンスでは、無償での利用、改良の許可 、再配布の許可、利用の自己責任などを明記 企業がソースコードを(多くの場合)非公開とし、 供与に対し対価を必要とするものを、 プロプライエタリソフトウェア 7 OSSの開発プロセス OSSの開発主体は、インターネットコミュニティ - 法的な実体はない。 OSSの開発プロセスは、プロジェクト毎に違う 小さなサイクルは以下からなる。 ソースコードの作成、ビルド(コンパイル)、テスト 、バグレポート、バグフィックス 大きなサイクルは、プロジェクト毎に違う。 8 ソフトウェアの開発プロセス(工程) 標準的な開発プロセス (ウォーターフォールモデル) - 企画 - 仕様書作成 - ソースコード作成 - ビルド - リリース - テスト - システムテスト - バグフィックス - 保守 近年、スパイラル型開発モデルや、エクストリームプログ ラミング(XP)などの開発モデルが提案 9 Linuxカーネルの開発プロセス Linuxカーネルの開発主体は、Linuxコミュニティ 技術的な議論は、カーネルメーリングリスト 1000人以上の開発者が参加 パッチを単位に、リビジョンが管理 リビジョン → リリース 年に一回、カーネルサミット(会議)で、設計方針 を討議 - 主要な開発者が招待される 10 OSSのセキュリティリスク(1) ソースコードが公開されている → 早期に問題発見、フィックス 誰が修正するのか、主体が明確ではない場合が ある 利用者も責任主体として、セキュリティの評価、 検証の責任がある 開発コミュニティ、開発作業が停滞しているプロ ジェクトは、要注意 11 OSSのセキュリティリスク(2) Linuxサーバーを考えた場合: 複数のプロジェクトの成果の結果としての、ディ ストリビューション サービスの構成、開発主体の情報を、把握すべ き セキュリティ上の問題があるソフトウェアを更新 する作業は、利用者の責任 12 インターネットの成立ち 1. ARPANET 2. 学術ネットワーク 3. 商用ネットワーク 4. Webの発明 13 ARPANET DARPA:(Defense Advanced Research Projects Agency)大統領の直属機関 - 科学研究に投資して、軍事転用が出来るもの を育成 コンピュータを相互接続して、ネットワークを構成 することを発明 パケット交換方式を考案 1969: UCLA/スタンフォード研究所/UCサンタバ ーバラ/ユタ大学 ルーターの原型となるIMPを考案、TCP/IPを採 用 → 国防専用ネットワークになった 14 演習 キーワード「ARPANET」で検索エンジンで検索 判ったことを、ノートにまとめてみよう 15 NSFネットワーク 全米科学財団ネットワーク ARPANETが防衛ネットワークに再編、残りが学 術目的のネットワークに再編 学術研究が目的 - 参加者は研究者のみ 初期のインターネットのバックボーンの一部とな る 1995年に商用ネットワークにインターネットバック ボーンを移管 → 研究用ネットワークに再編され た 16 商用ネットワーク 1988年 商用インターネットが開始 1989年(平成元年) NSFネットと商用ネットワーク が接続 当時のプロトコル: FTP/TELNET/SMTPなど キラーアプリケーションがなかった 日本のインターネット: - 1981年 東北大学がインターネットに接続 - 1984年 慶應義塾大学と東京大学が相互接 続(村井純: JUNET) 17 Webの発明 1990年 ティム・バーナーズ・リーがWWWを実装( 欧州原子核研究機構: CERN) 1991年 ネットニュースに、論文が投稿 構造化文書をインターネットで使うアイディアを実 装し、技術を全て公開した 1992年 イリノイ大学(NCSA米国立スーパーコン ピュータ応用研究所)で、Mosaicブラウザが開発 された(文字と画像を表示) 1994年 ネットスケープ社設立 1995年 Windows95発売 18 セキュリティの視点 インターネットは、全ての情報を共有する視点で 構築 → 学術上の論文を、共有するため Webが発明され、インターネットの世界が一変 基本的なプロトコルは暗号化されていない PC上のウィルスが蔓延し、SPAMメールが送られ るようになった インターネットは、全てのネットワークが接続され ているので、非常に危険 19 セキュリティの概念 1. セキュリティとは 2. インターネットでのセキュリティ 3. 脅威と脆弱性 4. 防御の設計 20 セキュリティとは 資産をリスクから守ることを指します - 情報資産をリスクから守ることを情報セキュリ ティと呼びます 情報資産には、紙、と電子データ、があります。 電子データ - メディアに記録されたもの - コンピュータに保存されているもの セキュリティを確保するために、コストがかかる 21 情報セキュリティの3大要素 情報セキュリティの3大要素 - C-I-Aと呼ばれています 機密性(Confidentiality) - 情報の漏洩がないこと - 権限のあるものだけがアクセスできること 完全性(Integrity) - 改ざんや欠落がないこと 可用性(Availabirity) - 必要なときに情報が利用できること 22 脅威とは 脅威は、リスクを発生させる要因 技術的脅威 - 不正なアクセス - 悪意があるソフトウェア - 盗聴 物理的脅威 - 災害(地震、落雷、水害、火災) - 機器の故障 人的脅威 - 内部犯行 - ユーザの操作ミス 23 脅威と脆弱性の構造 情報資産に脆弱性があると、脅威が顕在化 脆弱性 - 暗号化されていない通信 - プログラムのセキュリティホール - パスワードが弱い - 誰でも入れる場所に置いてある - 鍵をかけない - 鍵を貸した - 知らない人がいる 24 防御の設計 情報セキュリティポリシーを設定し、実施 脆弱性を発生させない予防措置 - 組織として情報セキュリティに取り組む意思を 明確にする: 情報セキュリティ基本方針 - 組織の各部門に落としていく - 部門で設けるもの; 情報セキュリティ対策基準 - 個人で実施するもの; 情報セキュリティ対策実 施手順 - 手順まで落としたら、チェックシートを作って - PDCAを回す 25 1章のまとめ OSS特有のセキュリティリスク - 使用は利用者にも責任 インターネットは、セキュリティの配慮が少ないネ ットワークシステム - 長く学術研究の目的で運用されてきた セキュリティの考え方は、情報資産を脅威から守 ること - そのために、脆弱性を取り除く - 情報セキュリティポリシーを定め、実施 26 2章 攻撃および侵入について グローバルインターネットにおける脆弱性 - グローバルインターネットとプライベートネット インターネットにおける攻撃方法 - 各種の攻撃方法 Webにおけるセキュリティリスク - Web特有の攻撃 - 対策 27 グローバルインターネットにおける脆弱性(目次) 1. グローバル領域にあるサーバーには、どこから でもアクセス可能 2. パスワードの脆弱性 3. ネットワークサービスに存在する脆弱性 4. インターネットの構造に起因する脆弱性 28 グローバルインターネット インターネットのグローバル領域では、全てのア クセスが自由 - 地球の裏側からでも、ものの数秒でアクセス が可能 「日本からだけアクセスを許可する」制御は、事 実上不可能 攻撃者の存在地域が限定できない 法規制は国内法なので、海外からの攻撃には規 制がきかない → 攻撃者に非常に有利な状況になっている 29 パスワードの脆弱性 パスワードは非常に便利 - 認証の手続きに、長く使われてきた (本人を確認し、アクセス権を与える手続き) パスワードが推定されれば、本人になりすまして 、システムが利用可能 - システムからは、見分けがつかない パスワードの攻撃方法は、総当り、もしくは辞書 攻撃 → グローバルネットワークでは、脆弱 30 ネットワークサービスの脆弱性 ネットワークサービスはその性質上、 - インターネットの利用者に対しサービスを解放 相手を特定する方法は、IPアドレス ネットワークサービスに、プログラムのバグ(セキ ュリティホール)があれば、このプロセスを乗っ取 り可能 攻撃用のコードは、インターネットのあちこちで配 布 31 インターネットの構造に起因する脆弱性 インターネットで使われているプロトコルTCP/IP - IPプロトコルには、送信者がパケットの送信元 を偽装していても、真偽を確認する方法がない 相手のサーバーの処理能力を超えるような大量 のパケット送ることによって、サーバーを動けなく させることができる IPパケットの送信元は、偽装されているので、発 信者が特定できない 攻撃用のコードは、インターネットのあちこちで配 布されている → 攻撃者が圧倒的に有利な状況にある 32 インターネットにおける攻撃方法(目次) 1. パスワードの脆弱性を攻撃 - パスワードクラッキングの方法 2. ネットワークサービスの脆弱性を攻撃 - バッファオーバーフロー攻撃 3. インターネットプロトコルの脆弱性を攻撃 - DoS攻撃 - DDoS攻撃 33 パスワードクラッキング パスワード攻撃の単純な方法 - 全ての組み合わせを試す(ブルートフォースア タック) - 効率が悪く時間がかかるが、必ず破れる 辞書攻撃 - 人間が覚えているのは、意味のある単語の組 み合わせであることを利用 - 各国語の辞書を用い、総当りより組合せを減 らす - 効率が良いため、よく考えられたパスワードで なければ突破 34 セキュリティホールを攻撃 ネットワークサービスには、バッファオーバーフロ ー脆弱性と呼ばれるセキュリティホールが存在 することがあります - 開発者の不注意で、バグ(不具合)が混入 - セキュリティホールが空いたまま (対策済みのプログラムで更新まで) - ネットワークサービスの特定のバージョンを攻 撃するツールが存在 35 バッファオーバーフロー 用意されている変数領域に対し、その領域以上 のサイズのデータを書き、その後に実行コマンド を書くことにより、任意のコマンドを実行できる脆 弱性 バッファオーバーフローの問題点 • root権限で動作するサービス・プログラム中にこの脆 弱性が あると、root権限を奪取されてしまう • バッファオーバーフローを使った攻撃ではパケットフ ィルタリングも無効 36 バッファオーバーフロー(図) 正しいプログラム ローカル変数領域 スタックメモリ 戻りアドレス ローカル変数領域 戻りアドレス データはスタックメモリ内に収まる 任意コードの埋め込み等 バッファオーバーフロー ローカル変数領域 N O P s h 権限奪取、任意コマンドの実行 偽戻りアドレス 37 インターネットプロトコルの脆弱性の攻撃(1) インターネットプロトコルは、パケット交換式 送信元アドレスが正しいか、不明 パケットを大量に送り、サービスを停止可能 DoS攻撃(サービス停止攻撃) DDoS攻撃(協調分散型DoS攻撃) 38 サービス停止攻撃の手順(DoS攻撃) - 目標サーバーの選定(IPアドレスの特定) - サーバーの乗っ取り - プログラムの起動 - 大量のパケットの送信 39 サービス停止攻撃の種類(SYN flood) SYN flood - サーバーに接続要求を大量に送信 - その際、送信元アドレスをランダムに偽装 - サーバーの処理能力を超えるため、ダウン SYN cookiesなどの対策があるが、デフォルトで はない 40 サービス停止攻撃(UDP flood) UDP flood - 送信元を偽装したUDPパケットを大量に送信 - 非常に大きなUDPパケットを送信 - ファイアウォール(F/W)の反応時間低下 対策 - ポートの遮断(F/W) - ポートの遮断 (ルーター) - パッチの適用(サーバー) 41 サービス停止攻撃の種類(ICMPパケットによる攻 撃) ICMP echo requestを大量に送信(Ping flood) 送信元を目標アドレスにして、ブロードキャストア ドレスに送信(Smurf攻撃) - ネットワークがICMPリクエストで飽和 対策 - ICMPの拒否(F/W) - ICMPの拒否 (ルーター) - ICMP echo requestの応答停止(サーバー) 42 演習 Pingをかけてみる #1マシンから、#2マシンにpingをかけます #2において、IPアドレスを調べます # ifconfig #1マシンにおいて、pingをかけます # ping 127.0.0.1 # ping IPアドレス(#2) 43 協調分散型DoS攻撃、分散型サービス拒否攻撃 DDoS攻撃とも呼ぶ - 踏み台サーバーを複数台に拡大 - コンピュータウィルス内の攻撃プログラム - 海賊版OSから、一般家庭正規ユーザーに拡 大 2002年 Yahoo!(米国)がサービス停止 2007年 ニコニコ動画(β)がサービス停止 完全な対策がない ウィルスに感染した被害者が攻撃者 - アクセスの停止の可能性あり 44 F5アタック F5アタック - WebブラウザのF5キーを連打 - Webブラウザーに再読み込み要求が送信 - 大人数で 対策 - なし - ユーザーのモラルに訴える 45 演習 F5アタックの事例を調べなさい キーワード「F5アタック」で、検索エンジンで検索 してください 事例を調べて、まとめてください 46 2章のまとめ グローバルインターネットにあるサーバー - 攻撃を受ける可能性があることに留意 - パスワード認証を使用しない - セキュリティホールの対策 DoS攻撃、DDoS攻撃の当事者にならない - 誰でも、ウィルス感染の可能性 - コンピュータセキュリティ対策を実施 47 3章 攻撃および侵入対象の情報収集 侵入対象調査の方法 - IPv4でのIPアドレス - ポートスキャン スパムメールを利用した攻撃対象の選定 (フィッシングサイトの作成) - オープンリレーサーバーの利用 - メールアドレスの収集 - フィッシングサイトの作成 個人情報の収集 - ファイル共有システムの利用 48 侵入対象調査の方法 身元を隠すために必要 - 複数箇所の踏み台サーバー=セキュリティの 甘い(=管理が甘い)サーバー 踏み台サーバーを見つけるため - 踏み台候補となるリストを作る必要 効率的に、セキュリティの甘いサーバーを探す方 法を見つけておく 49 アドレス・スキャン IPv4では、0.0.0.0~255.255.255.255 - 43億個しかない - スクリプトで、総当り 対策 - ICMP echo requestに応答しない(サーバー) - ICMPパケットを通さない(ルーター) - ICMPパケットを通さない(F/W) 50 ポート・スキャン アドレス・スキャンの結果から、開いているポート を調査 - ポートスキャナ: nmap(Linux) 対策 - 不要なサービスの停止 - アクセス制限(TCP Wrapper/各サービス) 51 バナー・チェック(参考) サービスのバナー情報からバージョンを取得 - Apache(デフォルトのエラーページ) - BIND(バナー表示要求) 対策 - バナーを消す(Apache/BIND) 52 演習 Apacheのバナーチェック 検索キーワード「Apache バナーチェック」で検索 エンジンで検索 設定ファイルに設定する項目を調べてみる 53 フィッシングとは Webや、SPAMメールを使った - 銀行口座番号や暗証番号、クレジットカー - 主要オークションサイトのアカウント奪取 などを利用した、詐欺行為 高度に洗練されているため、 - Webブラウジングや、 - メールリンクのクリック を慎重に注意していないと、詐欺に会う たいていの場合、当事者が被害に気づいていな いので、発覚が遅れる 54 スパムメールによる攻撃対象の選定(フィッシング サイトへの誘導) 手順 - オープンリレーサーバーを探索 : 送信元アドレスに制限がないメールサーバ - 自分宛にメールを送信 - 拒否がなければ、リスト入り - あらかじめ入手したメールアドレスにSPAM送 信(もしくは、アドレスはランダムに生成) - 偽装サイトへのURLをSPAMに仕込む 55 演習 SPAMの語源と、オープンリレーサーバーに ついて調査 検索キーワードで、「SPAM」あるいは、「スパム」 で検索エンジンで調べる 検索キーワードで、「オープンリレーサーバー」で 検索エンジンで調べる 上記の関係をまとめる 56 フィッシングサイトの作成 - 入手したいアカウントそっくりのドメインを入手 - サイトを作成する - 例「Yahoo! Japan」のアカウント更新ページ - 他にも、Facebook、Twitterなどが対象 - 最後に、正規のサイトにリダイレクト (アカウントを奪取されたことが気づかれない) スパムメール送信 - クレジットカード暗証番号更新の手続き - オークションサイトアカウント更新の手続き 57 フィッシングサイト対策ブラウサーの利用 Mozilla Firefox 2.0以降 Google Chrome 1.0以降 Opera 9.10以降 IE 7以降 登録されたフィッシングサイトにアクセスすると、 警告画面が表示 警告が出た場合、絶対にアクセス禁止 対策のないブラウザーは利用しない 58 フィッシング対策メーラーの利用 フィッシングサイトへの誘導は、スパムメールが 利用される 対策メーラーを利用もしくは、拡張を導入 Mozilla Thunderbird Shuriken(ジャストシステム) Becky! Internet Mail用深海魚フィルタ 秀丸メール用深海魚フィルタ フィッシングサイトへのリンクを含むと警告 59 個人情報の収集 ネットワーク上の犯罪に対し、インターネットを利 用したリアルな犯罪も存在 個人情報を収集し、攻撃対象を選定 ターゲットは、P2P上の個人情報ファイルから収 集 DMで、ポルノ利用の過大な金額を請求。その際 、架空の法律事務所を名乗る オレオレ詐欺集団も存在し、より巧妙に 60 身を守るには 安易に、個人情報を登録しない おかしな請求があったら、まず、相談 電話をこちらからかけなおす、というだけでもある 程度被害を減らせる 「携帯電話の番号が変わった、登録しておいて」 → 前の番号にかけ直してみる 61 3章のまとめ 踏み台となるサーバーは、効率的に探索される 母数が大きいので、脆弱なサーバーは簡単に発 見可能 - セキュリティ対策の徹底 スパムメールを利用した、詐欺サイトが増加 - フィッシング対策の徹底 インターネットの普及で、個人情報はリスクが高 まっている - ある程度の個人情報の流出はやむ得ない - アンケートや、個人情報は最低限に 62 4章 攻撃および侵入に対する対策 ICMPパケットの応答停止対策 - Linuxカーネルパラメータでの対策と手順 OSのバージョンアップ - パッケージ管理システムでの対策 アプリケーションのバージョンアップとサービスの 応答対策 - 主要アプリケーションでのバージョン確認方法 - スーパーサーバーでの対策 63 ICMPパケットの応答停止対策 Linuxの場合 - カーネルパラメータで応答を停止可能 ブロードキャストアドレスからのICMPパケットへ の応答停止 # echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_bloadcast s もしくは、/etc/sysctl.confに設定 net.ipv4.icmp_echo_ignore_brodcasts = 1 64 OSのバージョンアップ OS備え付けのパッケージシステムでアップデート CentOS/RHEL5 - パッケージシステムyumを使用 # yum check-update アップデート対象確認 # yum update 全てのパッケージを更新 カーネルも更新される(デフォルト設定) - カーネルとは 65 演習 アップデート対象の確認 アップデート対象確認を行います # yum check-update 66 アプリケーションのバージョンアップ パッケージ管理システムでのバージョンアップ - OSのバージョンアップと同じ ソースコードからのバージョンアップ - ソースコードをダウンロード configureを実行して、Makefile作成 make実行 make install 実行 設定ファイルの確認(上書きはされない) 67 サービスの応答対策 xinetd配下で動作するサービス xinetd.d以下の設定ファイルを編集 - disable=noを、disable=yesに修正 - xinetdを再起動 # /etc/init.d/xinetd restart 68 スーパーサーバーとは 69 サービスの停止と、自動起動のオフ 動作中のサービスの停止 – service - サービスの停止 # service httpd stop もしくは、 # /etc/init.d/httpd stop 自動起動サービスの設定 - chkconfig - 自動起動設定の確認 # chkconfig –-list - 自動起動の停止 # chkconfig httpd off 70 演習 自動起動の設定確認 chkconfigを使います # chkconfig –-list less や、moreを使って、設定状態を確認します # chkconfig –-list | less 71 演習起動しているサービスを停止 起動しているサービスをリストします # service –-status-all Apacheを起動停止に設定して、再起動してみま しょう # chkconfig httpd off # shudown –r now # service –-status-all 72 図:サーバーで使われるポート ポート サービス 20, 21 FTP 22 SSH 23 TELNET 25 SMTP 53 DNS 80 HTTP 110 POP3 111 Portmap 514 syslog 6000 X 73 netstatコマンド ネットワークを使って、通信をする機構をソケット と呼ぶ(バークレーソケット、BSDソケット) netstatでは、ソケットの状態を表示 主なオプション -a 全てのソケットの状態を表示 -t TCPプロトコルのみ表示 -u UDPプロトコルのみ表示 74 演習 オープンしているソケットを調べる # netstat –atu 量が多く流れてしまう場合は、lessや、more を組み合わせる # netstat –atu | less # netstat –atu | more 特定のキーワードを抜き出す場合は、grepを 使う # netstat –atu | grep udp 75 演習 netstatのオプションを調べる netstatには、ほかにはどのようなオプションがあ るか調べよ 自分で使えそうなオプションをノートにまとめなさ い 76 演習 不要なサービスを止めてみる netstatを用い、オープンしているプロセスを特定 lsof、top、psなどを使っても良い - オプションは、自分で調べる → 随時メモ 起動停止には、chkconfig サービスを止め、あるいは、再起動した結果、ど のようになるかメモしていく ホスト#2を使ってください 最後に、元に戻しておく 77 付録 RH系主なサービスリスト 78 4章のまとめ サーバーに侵入されないためには 動かすサービスを確認 セキュリティ対策を実施 - 検知されない対策(ICMP対策) - OSのバージョンアップ - サービスを更新 - 不要なサービスを停止 79 5章 暗号の必要性と種類 暗号とは - 軍事技術としての暗号 - 暗号が使われる背景、無線通信 暗号解読の歴史 - 暗号史 - 計算機と暗号の関係 共通鍵暗号の仕組み、公開鍵暗号の仕組み - キーワード付きzip - データの流れ 80 暗号とは 1. 暗号の仕組みと用語 - 送信者と受信者での暗号文のやり取り 2. 暗号の発明 3. 軍事技術への応用 4. 現代暗号の仕組み 81 暗号の仕組みと用語 平文 平文 暗号化 復号化 82 暗号の発明 もっとも古い暗号は、エジプト文明の象形文字 - 王族だけが使っていた象形文字 (紀元前19世紀) 文字の発明≒暗号の発明 送信者=文字を彫った人 受信者=文字を読む人 伝達手段=壁に文字を刻む 暗号化=特殊な文字を用いる 83 軍事技術への応用 古代文明でも暗号技術は、軍事技術として応用 離れた場所にいる援軍に、伝令を送る • もし、伝令が捕獲されても、暗号化されていれば安全 軍隊を分割して、同時攻撃が可能 • 攻撃日時、攻撃場所などを通信 ユリウスカエサル(ジュリアス・シーザー) • シーザー暗号(紀元前1世紀) 84 シーザー暗号 シーザー暗号の仕組み:もっとも典型的な換字式暗号 ・ 古代ローマで使われていたアルファベットは、21文字ないし、23 文字。 ・ 暗号方式: アルファベットを特定の数、ずらす “help us” → “ifmq vt”:鍵=1 ・ ずらす数: 暗号を解く鍵 → 伝令が運ぶ暗号文 “help us” → “jgnr ws” : 鍵=2 85 近代軍事技術での暗号 無線通信の発明(1895年):モールス信号 • 接続線が不必要なので、リアルタイムの軍事運用が 可能 • 電波による通信なので、誰でも傍受可能 • 解読されない暗号通信が絶対条件 機械式暗号装置の発明 エニグマ(ドイツ、1925年) 86 エニグマ暗号機 キーボードを打つ • ランプがつく • 鍵:3枚のロータ、プ ラグ配線 暗号方式 • 3枚のローターと、プ ラグ配線が字を変換 • 反転式 87 暗号解読の歴史 新しい暗号方式が発明 • 暗号解読を試みる 解読できれば機密情報を入手可能 単一換字式暗号の解読 • アラビアで発達した統計数学を使用 • 言語によって、アルファベットの頻度が違うことに着 目(英語であれば、e、tの順) • 鍵がなくても、平文が類推可能 88 事例: ツィンメルマン電報事件 第一次世界大戦中 ドイツのツィンメルマン外務大臣は、 メキシコに米国攻撃の援助を申し出る暗号電文を送信 当時、英仏と独は戦争中で、米国は中立であった 電文は、ベルリン米国大使館から、コペンハーゲンを経 由し、英国を経由、米国経由でメキシコに送られた。 英国は、通信文を傍受し(米国の通信を盗聴していた)、 解読。これを、米国に通知 その頃、独軍の潜水艦が大西洋で無差別に米国商船を 攻撃しており、米国の民衆は、反独感情に傾いていた 電文が解読されていることを知らない、ツィンメルマンは、 演説で暗号電文について触れてしまい、米国民は電文 が真実であること知る → 米国がドイツに宣戦布告 89 エニグマ暗号の解読 エニグマの暗号は非常に複雑で解読困難 第二次世界大戦勃発直前、ポーランドでは独軍のエニグ マ暗号機の解読を実施 ポーランド暗号局では、数学者レイェフスキが解読に取り 組んでいた 1932年ごろ、初期型の解読に成功 しかし、 独軍は、構造を複雑化させ対抗 独軍のポーランド侵攻後、ポーランドの技術は英国に伝 わり、英国政府暗号学校(GC&CS)の数学者アラン・チュ ーリングが1939年に理論的に解読方法を解明 このとき、チューリングが発明したのが、後に、チューリン グマシンとして計算機の数学的な基礎となる理論 90 計算機と暗号解読の関係 計算理論の基礎は、チューリングマシンで確定 アランチューリングが論文で証明しているが、計算機で 計算可能な問題は、チューリングマシンで解ける ※ 特定の問題以外の用途向けの機械の製作が困難 1945年、フォン・ノイマンが考案したのがノイマン型計算 機 米国で製作されたEDVACと、英国 で製作されたEDSACが、ノイマン アーキテクチャの最初の計算機。 どちらも真空管で製作 91 現代暗号の要求定義 1. 無線通信、有線通信でも盗聴者の存在 • データの形式は、ファイル、もしくはメッセージ 言い換えれば、ビット列 2. 暗号解読にかかる時間が非常に長い (無限に計算を続ければ、必ず解ける) 3. 暗号化、暗号解読に計算機が利用可能 • 非常に高速な計算機器を利用 • 暗号化、復号化が高速である必要 92 共通鍵暗号方式 対称暗号方式とも呼ばれる。 ファイルを適切な長さのビット列に分割する(ブロック) このブロックを鍵データ(ビット列もしくは、数値)で暗号化 し、暗号ブロックを作る ファイルが終わるまで繰り返す(ECBモード) 復号する際は、鍵データを用いて、逆関数あるいは逆計 算で元のブロックを復元する 93 共通鍵暗号方式 暗号化 復号化 94 DES 対称暗号(共通鍵)方式のブロック暗号方式 1977年に米国で標準仕様 (Data Encryption Standard) 鍵のビット長は、56bit (64bitのうち7bitをパリティとして使う) ブロック長は、64bit IBMのファイステルが考案したファイステルネットワークを 利用(64bitのうち、下位32bitを関数にかけ、上位32bitと のXORを取る。下位はそのまま、上位を入れ替える) ラウンドを16回回し、各ラウンドでは鍵の一部を使って計 算 1999年の解読競争では、22時間で解読 95 TrippleDES DESは解読されたが、新仕様AESがまだ策定されていな かった DESを改良して、三重化したもの 鍵のビット長は、164bit(=56bit x 3) ブロック長は、64bit 三重化に使った鍵(56bit)を同じにするとDESと互換 DES暗号化-DES復号化-DES暗号化で、新しいブロック を得る 復号する際は、逆に計算 96 AES 2000年に規格化された米国の標準仕様 15の候補から、選定されたRijndael(ラインダール) 鍵のビット長は、128、192、256bitのいずれか ブロック長は、128bit(16byte) ラウンドは、SPN構造から構成される 基本構造は、256文字の換字表から、1Byte→1Byteの文 字変換 ラウンドは、10から14回繰り返す 復号は、暗号化の逆作業を行う 97 暗号モード 単純な繰り返し暗号(ECBモード)では、改ざんや類推の 恐れ そこで、前の暗号ブロックや、別にカウンタを用いて、繰り 返しを避ける方式が取られる(暗号モード) CBC(推奨): 前の暗号ブロックと入力ブロックを混ぜる CFB : 前のブロックの出力を暗号鍵に用いる OFB : 平文と暗号出力をXORする CTR(推奨): カウンターの値を、暗号化の鍵に用いる 98 鍵配送問題 共通鍵暗号(対称暗号)には根本的な問題が存在 「受信者に、どのように鍵を渡すか」 これを鍵配送問題という どのように強固な暗号であっても、鍵が盗聴されていて は、暗号の意味がない これを解決するのが「公開鍵暗号、非対称暗号」 99 鍵配送問題 盗聴者 平文 暗号化 復号化 100 公開鍵暗号 盗聴者 暗号化 復号化 101 RSA 1976年 公開鍵暗号のアイディアが公開 1978年 RSA暗号のアルゴリズムが発表 (RSAは、考案者3名の頭文字を取った) 暗号文=平文^E mod N : べき乗Eと除数Nの組が公開鍵 平文= 暗号文^D mod N: べき乗Dと除数Nの組が秘密鍵 鍵生成では、(E, N)と(D, N)の作成を、十分大きな素数の (p, q)の組から作成する Eから、Dは、計算で求められない 102 公開鍵暗号の弱点 (1)計算に時間がかかる(共通鍵暗号に比べて) (2)受信者に、盗聴者がなりすましている場合、見破れな い (1)の対策は、共通鍵交換のために、公開鍵を使うシステ ムを組めば、クリアできる → ハイブリッド暗号システム (2)の対策のためには、存在証明を行うためのデジタル署 名を使う必要がある → SSL/TLSなどで利用 103 ハイブリッド暗号システム 暗号化 復号化 104 ハイブリッド暗号システム 受信者が公開鍵を送信者に送信 乱数で作った共通鍵を、公開鍵で暗号化する( 送信者) 暗号化された共通鍵を、受信者に送信 鍵を受け取ったことを、送信者に教える(共通鍵 を使う) 送りたい平文を共通鍵で暗号化して送信 暗号文を、共通鍵で復号 やりとりが終わったら、共通鍵(セッション鍵)を破 棄 105 5章のまとめ 自分で作った暗号方式を使わない -公開されている実績がある暗号方式の方が解読され にくい - 暗号解読の理論は、進んでいるので、自作暗号は必 ず解読される 解読される弱い暗号を使わない - 暗号がかかっていると安心して、解読される危険性が 高まる 絶対に解読されない暗号はない (と思っていた方がよいです。いくらでもコストをかける気 であれば、解読可能) 暗号化は基本技術であり、安心しない 106 6章 盗聴の実務 telnetサーバ構築演習 - xinetd配下で、telnetサーバー起動 Wiresharkによる盗聴実務 - 暗号化されていない通信経路を使い、パスワ ードを奪取する TCP Wrapperによるアクセス制限 107 telnetサーバーとは インターネットの初期~最近まで使われていたリ モートログインの通信プロトコル(RFC854) クライアントサーバーシステム 通信路は暗号化されず、盗聴されるとパスワード が渡る 使用ポートは、23番 Windowsで使えるクライアント - Tera Term - PuTTY 108 図:telnetクライアントとtelnetサーバー 109 telnetサーバー構築演習 telnet-serverパッケージがインストールされてい るか、確認 # yum list telnet-server installedになっていなければ、以下を実行 # yum install telnet-server –y xinetdの設定ファイルで、telnetを有効にする # vi /etc/xinetd.d/telnet disable = yes の行を disable = no に変更 110 telnetサーバー構築演習(続き) xinetdサービスを再起動する # /sbin/service xinetd restart localhostにtelnetで接続する $ telnet localhost ネットワーク経由で、shellにログインできることを 確認 (ホスト#1にサーバーを、ホスト#2にクライアントを ) (また、逆からもログインできるように設定する) 111 Wireshark Wireshark - 通信の内容を表示、記録するアプリケーション - 特定のインターフェースに対するパケットを全 部表示、記録することが可能 - 通信内容の特定や、解読を行うことが可能 tcpdump - Wireshark同様、インターフェースを通過するパ ケットを表示、記録可能 - コマンドラインで実行 - 実行する際は、rootで実行 112 演習 Wiresharkをインストール Wiresharkがあるか、どうかを調べる。 # yum list wireshark-gnome Wiresharkをインストール # yum install wireshark-gnome –y 113 演習 Wiresharkを起動 - インターネット→Wireshark、から起動する - rootのパスワードを聞かれるので打ち込む - Wiresharkが開く - “Capture”メニューから、インターフェースをチ ェック - 表示が始まる - 画面上で、ソートが行える。 - ファイルに書き出せる 114 ローカルの接続をキャプチャ 127.0.0.1のインターフェースloを表示する - telnetで、ログインし表示がどうなるか - パスワードはどうなったか 結果 - 暗号化されていないプロトコルは、通信を盗聴 する者に、必ず解読される 115 イーサネットインターフェースのキャプチャ ホスト#1のインターフェースeth0を表示 - ホスト#1から、ホスト#2にtelnet接続 - パスワードはどうなったか ホスト#2のインターフェースeth0を表示 - 表示がどうなるか、調べてください 結果 - それぞれ調べて、盗聴者がどこにいれば、盗 聴可能なのか考えてみなさい 116 ホスト#2から、ホスト#1への接続 ホスト#2から、ホスト#1にtelnet接続 それぞれ、ホスト#1のeth0のキャプチャ ホスト#2のeth0のキャプチャ を調べ、先ほどと同様に、パケットがどのように 流れているかを考えてください 117 アクセス制限 TCP Wrapperの設定(アクセス制限) - /etc/hosts.allow を編集(追加) in.telnetd: 127.0.0.1 - /etc/hosts.deny を編集(追加) ALL: ALL アクセス制限がかかっていることを確認 ローカルホスト(自機)で接続できることを確認 118 6章のまとめ telnetのような暗号化されていないプロトコルは 盗聴のリスクあり 使用するなら、アクセス制限をかける パケットが流れる場所では、盗聴は可能 インターネットでの経路は分からないので、盗聴 の危険あり 必ず暗号化されたプロトコルを使用 119 7章 セキュアシェルの構築 SSHの概要と仕組み - SSHの仕組み - OpenSSH実装 ホスト認証、暗号化確認実務 - ホスト認証 公開鍵の認証手順、設定演習 - 公開鍵の作成手順、設置方法 - Wiresharkによる暗号経路の確認 SSHの安全な設定 120 SSHプロトコルとOpenSSH実装 SSHプロトコル ・ 通信経路を暗号化して盗聴されないための接 続プロトコル ・ リモートログイン、ファイル転送の機能 ・ バージョン1、バージョン2がある ・ バージョン1は解読されている OpenSSH ・ SSHプロトコルの実装 ・ OpenBSDプロジェクトの一部 ・ Linuxディストリビューションに標準搭載 121 ホスト認証 ホストのなりすましを防ぐ技術 ホスト公開鍵を、クライアント側で保存 アクセス時に、初回保存公開鍵を比較して、なり すましを防ぐ 初回アクセス時の公開鍵が既に、改ざんされて いる場合は、威力がない (板書で図示) 122 ホスト認証 123 ユーザー認証 公開鍵認証 - ユーザの公開鍵をサーバーに設置 - ユーザーの秘密鍵がないと、通信できない パスワード認証 - 通常のパスワード認証 - パスワード攻撃に合う可能性が高い - 2010年上半期に、攻撃が増加 124 ユーザー鍵の設定 鍵(公開鍵、秘密鍵)ペアの作成 - ssh-keygen 公開鍵をサーバーに登録 - ~/.ssh/authorized_keysに追記 パーミッションを適切に設定 - authorized_keyz 600 - 秘密鍵 400 - .ssh 700 - ホームディレクトリ 700 125 演習 ホスト認証確認 ホスト#1から、ホスト#2に、sshで接続 $ ssh ホスト#2のIPアドレス ホスト鍵が登録されたことを確認 $ cat .ssh/known_hosts $ ls –ls .ssh/known_hosts 126 演習 暗号化を確認 Wiresharkで、通信が暗号化されていることを確 認 eth0インターフェースをcaptureする設定 $ exit $ ssh ホスト#2のIPアドレス 通信が暗号化されており、パスワードが見えない ことを確認する(Wireshark) ホスト#1のeth0を確認したら、ホスト#2のeth0を 確認する 127 演習 ユーザー単位の公開鍵作成 鍵ペアを作成、パスフレーズは、「himitu」にする $ ssh-keygen –t dsa SSHバージョ 秘密鍵 ン 公開鍵 RSA(1) identity identity.pub RSA(2) id_rsa id_rsa.pub DSA(2) id_dsa id_dsa.pub 128 演習 ユーザー公開鍵をサーバーに設置 ホスト#2 に公開鍵を設置 $ scp .ssh/id_dsa.pub ホスト#2のIPアドレ ス:. $ ssh ホスト#2のIPアドレス $ cat id_dsa.pub >> .ssh/authorized_keys $ chmod 600 .ssh/authorized_keys $ exit $ ssh ホスト#2のIPアドレス Wiresharkで、通信の暗号化を確認 - 一度ログアウトして、再ログイン 129 SSHでセキュリティの高い設定 サーバー設定ファイル /etc/ssh/sshd_config rootでのログインを禁止 - PermitRootLoginを「no」 SSHプロトコル1の使用を禁止 - Protocolsを「2」 空パスワードの禁止 - PremitEmptyPasswordを「no」 PAMを禁止する - UsePAMを「no」 130 サーバー設定ファイル/etc/ssh/sshd_config パスワード認証の禁止 - PasswordAuthenticationを「no」 ログインできるユーザーの制限 - AllowUsersディレクティブにログイン可能なユ ーザーを列挙 - もしくは、DenyUsersディレクティブにログイン 拒否ユーザーを列挙 131 演習 ユーザー公開鍵をサーバーに設置 ホスト#1 にユーザー公開鍵を設置 ホスト#2には、ユーザー秘密鍵を設置します (ホスト#1→ホスト#2で使ったものを同じもの、な ぜか考えてみよう) Wiresharkで、通信の暗号化を確認 - 一度ログアウトして、再ログイン 次に、安全な設定をsshサーバーに設定しよう 132 7章のまとめ SSHは、安全な暗号通信接続を提供する しかし、パスワード解読などの攻撃を回避するた め、さらに安全な設定が必要である ホストのなりすましを避けるため、ホスト認証が ある 初回にダウンロードするホスト鍵がなりすましさ れていると、発見ができない 安全なSSHの認証には、公開鍵認証が必要 133 8章 無線LANのセキュリティ 無線LANの仕組み、暗号化方式、WEP - 無線LANの仕組み - WEPプロトコルの仕様 - WEPによる暗号化の手順 無線LANのセキュリティ - WEPのリスクとその対策 - AirSnort解説 WPAの仕様 - WPA - WEPとの違い 134 無線LANとは 無線LANでは、通信に無線を使用 135 無線LANを傍受 無線LANに暗号技術を使用しないと、誰でも傍 受が可能 136 無線LANを暗号化する 無線LANに適切な暗号技術を用いて、安全な通 信を行う 137 無線LANのセキュリティ MACアドレスフィルタリング - 登録されたMACアドレスのみを許可 - (MACアドレスが暗号化されず、偽装されると 侵入される) WEP - 暗号化プロトコル ・ 脆弱性が見つかっている WPA WPA2 138 演習 WEPについて調べてみる 検索キーワード「WEP 無線LAN」で検索エンジン で検索してみる WEPを解読する方法について調べる 139 演習 WPA/WPA2について調べてみる 検索キーワード「WPA 無線LAN」で検索エンジン で検索してみる WPAを解読する方法について調べる 検索キーワード「WPA2 無線LAN」で検索エンジ ンで検索してみる WPA2に対応している機器について調べる 140 無線LANの注意事項 対策 - ビジネスユースでは、無線LANを使用しない - 使用する際は強力な暗号を使用(WPA2) 盗聴されていることを前提にシステムを運用 141 8章のまとめ 無線LANでは、パケットが無線で周囲に到達す るため、盗聴が容易 暗号化プロトコルをかけない場合は、盗聴されて いることが前提 暗号化プロトコルも万全ではない セキュリティが重要とされるネットワークでは、無 線LANは利用しない 142 9章 HTTPの盗聴の実務 Webの構築演習 - Apache/HTML 基本認証の盗聴演習 - Basic認証(基本認証)とダイジェスト認証 - Basic認証(基本認証)の設定 ダイジェスト認証演習 - ダイジェスト認証の設定 Allow/Deny/Orderディレクティブでのアクセス制 御 - Apacheのアクセス制御 - アクセス制御の設定 143 9章 HTTPの盗聴実務 HTTPは、Webで使われるプロトコル Webは、クライアントサーバーシステムの一種 Webサーバーと、Webクライアントから構成 Webクライアントは、ブラウザーとも呼ばれ、 HTMLというフォーマットのファイルを表示可能 HTTPの待ちうけポート番号は、80番 144 Webの仕組み 145 演習 Webの構築 Apacheを設置 # yum list httpd (installedになっていることを確認) (installedになっていない場合) # yum install httpd (Apacheを起動) # /sbin/service httpd start 146 演習 HTMLを作成する index.htmlを作成 # vi /var/www/html/index.html <html> <head><title>This is a test site</title></head> <body> This is a test site. </body> </html> Firefoxで、URL「http://localhost/」にアクセス 147 基本認証とダイジェスト認証 HTTPには、ユーザー認証の仕組みがあります 基本認証とダイジェスト認証 基本認証 - ベーシック認証 - パスワードは暗号化されない - 全てのブラウザーで有効 ダイジェスト認証 - パスワードの平文は流れない - 過去のブラウザーで動かないものがある 148 演習 基本認証の設定 基本認証を設定する # vi /etc/httpd/conf/httpd.conf Directoryディレクティブの設定書式 <Directory “ディレクトリ”> AuthType Basic AuthName “ブラウザ表示文字列” AuthUserName パスワードファイルのパス require user 認証ユーザ名 </Directory> 149 演習 基本認証の設定(続き) ディレクトリを作成 # mkdir /var/www/html/basic # vi /etc/httpd/conf/httpd.conf - 下記を追加 <Directory “/var/www/html/basic”> AuthType Basic AuthName “Basic Auth” AuthUserFile /var/www/html/basic/.htpasswd require user basic </Directory> 150 演習 認証ファイルの作成 htpasswdコマンドで認証ファイルを作成 # htpasswd –c /var/www/html/basic/.htpasswd basic パスワードを聞いてくるので、「himitu」と設定 151 演習 基本認証用のHTMLファイルを用意 # vi /var/www/html/basic/index.html <html> <head><title>This is BASIC authentication</title></head> <body> This is BASIC authentication. </body> </html> 152 演習 基本認証の盗聴 Apacheを再起動 # /sbin/service httpd restart Firefoxで、アクセスする URL: localhost/basic/ Wiresharkで、通信をキャプチャ その際、使用するポートは、lo 結果をまとめる 153 演習 ダイジェスト認証の設定 /var/www/html/secret/index.htmlを作成 # mkdir /var/www/html/digest # vi /var/www/html/digest/index.html <html> <head><title>This is DIGEST authentication</title></head> <body> This is DIGEST authentication. </body> </html> 154 演習 ダイジェスト認証の設定 サーバー設定ファイルhttpd.confに設定を追加 # vi /etc/httpd/conf/httpd.conf <Directory “/var/www/html/digest”> AuthType Digest AuthName “Secret Directory” AuthDigestFile “/etc/httpd/conf/htdigest_secret” Require valid-user </Directory> 155 演習 ダイジェスト認証の盗聴 パスワードファイルを作成 # htdigest –c /etc/httpd/conf/htdigest_secret “Secret Directory” student # chown apache:apache /etc/httpd/conf/htdigest_secret # chmod 600 /etc/httpd/conf/htdigest_secret Apacheを再起動 # /etc/init.d/httpd restart Firefoxで、「http://localhost/secret/」に接続 Wiresharkで、通信をキャプチャ 156 ホストベースのアクセス制御 Apacheでは、ホスト名、IPアドレスによってアクセ スを制御することが可能 - Allowディレクティブ - Denyディレクティブ - Orderディレクティブ を用いる。 157 Orderディレクティブ Allowディレクティブ、Denyディレクティブの評価 の順序と、デフォルトの設定を決定 Order allow, deny Allow from 172.16.0.0/16 Allowを評価し、デフォルトは拒否 Order deny, allow Deny from 172.16.0.0/16 Denyを評価し、デフォルトは許可 158 演習 アクセス制御用のディレクトリを作成 # mkdir /var/www/html/access HTMLファイルを作成する # vi /var/www/html/access/index.html <html> <head><title>This is ACCESS control</title></head> <body> This is ACCESS control </body> </html> 159 演習 Apacheのアクセス制御 Webブラウザから、アクセスできること確認 URL: 「http://localhost/access/」 アクセス制御を設定 # vi /etc/httpd/conf/httpd.conf <Directory “/var/www/html/access”> Order allow, deny </Directory> Apacheを再起動し、再度アクセス 160 演習 アクセス制御の変更 アクセス制御を修正 # vi /etc/httpd/conf/httpd.conf <Directory “/var/www/html/access”> Order allow, deny Allow from 127.0.0.1/32 </Directory> Apacheを再起動し、再度アクセス Wiresharkでどうなっているか調べる 161 演習別のホストからのアクセス ホスト#2のブラウザーで、アクセス URL「http://ホスト#1のIPアドレス」 Wiresharkでどのようにパケットが流れているか、 観察 これまでの結果を考察しなさい: 「 」 162 9章のまとめ Webの代表的な実装に、Apache Webサーバー Webは、サーバークライアントシステム HTTPの認証として、基本認証とダイジェスト認証 基本認証では、パスワードは平文で送信 Apacheのアクセス制御に、Allow/Denyがある 適切に、アクセス制御することにより、必要な箇 所に、Webを公開することができる 163 10章 Webサーバーの構築とセキュリティ SSLの仕組み - SSLの考案 - SSLでの電子証明書の役割 Webと存在正当性 - Webの仕組みと、なりすましの危険性 - 存在正当性 認証局(CA)の位置づけ - 認証局の役割と位置づけ 証明書発行の手順 - 証明書要求の作成手順 - 証明書発行の手順 164 SSLの考案 SSL(Secure Socket Layer) ネットスケープ社(現在解散)が、開発したHTTP などのTCPのセッションを暗号化するプロトコル 暗号化、なりすまし、を防ぐ機構が含まれている SSL3.0は、改良されてRFC 2246(TLS1.0)として 標準化された 165 Webの仕組みを確認 166 Webと存在正当性 DNSと、IPアドレスを使ってWebにアクセスするこ とは分かった そのサイトが、偽のものか、正のものか見分ける 方法は、どうすればよいか。 例、DNSサーバーがクラックされ、書き換えられ ていたら・・・? 167 SSLの電子証明書 SSLでは、第三者による暗号署名を使用 第三者:ルート認証局(CA) Webブラウザーには、あらかじめ、ルート認証局 の発行した電子証明書をインストールされている 168 認証局 認証局は、上位の認証局が発行したデジタル証 明書を持つ(中間認証局) より上位にたどっていくと、ルート認証局にたどり 着く 169 ルート認証局 ルート認証局は、自己署名のデジタル証明書を 発行 ルート認証局のデータは、ブラウザに認証局証 明書としてプレインストール (Firefox→編集→設定→詳細→暗号化→証明 書を表示→認証局証明書): Linux版の場合 サーバーが送信してくるサーバー証明書の中か ら、ルート認証局への証明を検索 170 証明書発行の手順 暗号化用のサーバー鍵ファイルの生成 サーバー鍵を使ってサーバー証明書要求の作 成 要求を、証明文書と共に、認証局に送る サーバー証明書の発行(認証局) Apacheにサーバー証明書を組み込む SSLの設定 171 SSLでのやり取り アクセス サーバーからサーバー証明書をDL ルート認証局の証明書とデジタル署名をチェック 暗号アルゴリズムの送付(クライアント) 暗号アルゴリズムの選定(サーバー) 共通鍵の作成、サーバー公開鍵で暗号化し、サ ーバーに送付 秘密鍵により、共通鍵を復号化 共通鍵による、暗号通信の開始 172 SSLのやり取り 173 演習 認証局の審査 検索キーワード「認証局 審査」で検索エンジンに 検索をかけ、認証局に必要な審査サービスにつ いて調べなさい 174 10章のまとめ Webシステムでは、個人情報を始め、重要情報 の通信が行われる Webの暗号化通信には、SSLが使われる SSLには、サイト正当性の証明機能が含まれる 認証局には、厳密な鍵管理や、運用ガイドライン が定められている SSL通信は、暗号化される 175 11章 SSLでの暗号化 自己署名証明書の作成 - 自己署名証明書の位置づけ - 自己署名証明書の作成手順 SSL構築演習 - SSLの設定 - 自己証明証明書の設定 暗号化通信の確認 - ブラウザからの通信 176 自己署名証明書とは 認証局から、デジタル証明書を発行してもらうの には、コストがかかる(1年、3万円強) 自分で署名するサーバー証明書が、自己署名証 明書 ブラウザーでは、ルート認証局の署名との整合 が出来ないため、エラーとなる 例外を登録して、一時的な暗号通信 177 自己署名証明書の作成手順 自己署名証明書の作成手順 - サーバー鍵の生成 自己署名証明書の作成 サーバー鍵の設置 SSLの設定 178 演習 SSLモジュールをインストール # yum list mod_ssl # yum install mod_ssl –y サーバー鍵ファイルを生成 # cd /etc/pki/tls/certs # make genkey パスフレーズは、「himitu」に設定 証明書の各種設定は、次ページの通り 179 演習 自己署名証明書の作成 国名 : JP 都道府県名 : Tokyo 市町村名 : Shinjuku 組織名 : LinuxAcademy 部署名 : Security サーバーのホスト名 : localhost.localdomain (もしくは、設定されているホスト名) 管理者メールアドレス : root@<ホスト名> 自己署名証明書を作成 # make testcert 180 演習 SSL接続時のHTMLファイルの作成 # mkdir /var/www/shtml # vi /var/www/shtml/index.html <html><body> <center><h1>SSL Test Page</ha1> <hr/> SSL Test Page</center> </body></html> 181 演習 SSL設定 SSLの設定ファイルを修正 # vi /etc/httpd/conf.d/ssl.conf DocumentRoot “/var/www/shtml” ServerName localhost.localdomain:443 Apacheを再起動 # /sbin/service httpd restart ブラウザでアクセス URL: 「https://localhost.localdomain」 182 演習 SSL通信の観察 Wiresharkで、通信を観察します HTTPでの通信と違う箇所を調べてください 183 11章のまとめ 自サーバーをSSLで運用する時などは、自己署 名証明書を使用することが可能 自己署名証明書では、ブラウザーに警告が表示 警告の内容を確認した上で、利用 また、通常のドメインで、警告が出た場合は、ル ート認証局の署名がないデジタル証明書が使用 されている 自己署名証明書の利用には、注意が必要 184 12章 Webアプリケーションのセキュリティ コーディングする人を守る:ファイヤーウォール - ファイヤーウォールとは - 開発サーバー、試験サーバーの配置 Webアプリケーションのセキュリティ - Webアプリケーションの仕組み - SQLインジェクション 185 ソースコードを守る 企業の機密情報 - 顧客情報 - 会計情報 - 商品情報 ・ ソースコード ソースコードは、非常に重要 - ソフト開発・・・企業の中核 - 外部からの侵入を防ぐ - 内部からの流出を防ぐ 186 コーディングする人を守る ソースコードを守る - FW/ルーターで、内部ネットワークを分離 - 適切なパケットフィルタリング 一貫したバージョン管理 - ソースコードのリポジトリを統一 - 開発文書の版管理 ・要求仕様書/機能仕様書/設計仕様書 - 試験環境の構築 187 試験環境の設置 188 Webアプリケーションの仕組み perl/CGI, PHP, Javaなどによる動的Webサイト Webアプリケーション特有のセキュリティ保護 HTML/RDBMS/LL言語など、個別の要素を組み 合わせて作る → セキュリティの脆弱性の発生 FORMタグにおいての、セキュリティ - SQLインジェクション - OSインジェクション - クロスサイトスクリプティング 189 SQLインジェクションとは Webアプリケーションでよく使われる RDBMSを呼び出す際のSQL言語を目的以外に 悪用する行為 FORMのテキストフィールドに、SQL言語を操作 するテキストを設定して、実行させる 実際に、演習でSQLインジェクションを発生させ てみましょう 190 演習 PostgreSQLをインストール PostgreSQL: リレーショナルデータベース管理シ ステム - Apacheや、PHPとは独立したサービス - RDBMSでは、データを表形式で保存 # yum list postgresql-server # yum install postgresql-server PostgreSQLを起動 # /sbin/service postgresql start 191 演習 postgresユーザを設定 postgresユーザーにパスワード設定 # passwd postgres 「postgres」にしておく。 psqlコマンド - PostgreSQLサーバーに接続し、SQLでデータ を操作するコマンド - たくさんのサブコマンドがある # su – postgres -bash-3.2$ psql 192 演習 テーブル作成 各項目を宣言 postgres=> CREATE TABLE example ( \ -> id serial NOT NULL \ -> data varchar(2000), \ -> PRYMARY KEY (id) ); データを投入 postgres=> (‘This is a postgres=> (‘This is a INSERT INTO example (data) VALUES \ sample’); INSERT INTO example (data) VALUES \ data number 2’); 193 演習 データを表示させる データの表示 postgres=> SELECT * FROM example; psqlコマンドを抜ける postgres>\q 194 演習 PHPモジュールのインストール # yum list php # yum install php php-pgsql テストスクリプトを書く # vi /var/www/html/phpinfo.php <php? phpinfo(); ?> 195 演習 PHPの動作確認 Apacheを再起動します # /sbin/service httpd restart ブラウザーを開いて、 URL「http://localhost/phpinfo.php」 にアクセスします 青い表が表示され、PHPの環境が表示されたら PHPは動いています 196 演習 PostgreSQLのサーバー設定 # su - postgres $ vi /var/lib/pgsql/data/pg_hba.conf local all all ident sameuser の行を下記のように修正する local all all trust PostgreSQLサーバーを再起動しておく # /sbin/service postgresql restart 197 演習 データをリストするスクリプト # vi /var/www/html/index.php <?php $db = pg_connect(‘user=postgres password=postgres dbname=postgres’); if(!$db) { print ‘cannot connect <br/>\n’; } $sql = ‘select * from example order by id’; 198 演習 データを表示するスクリプト(続き) $result = pg_query($db, $sql); if( !$result ) { print “cannot submit query<br>\n"; print "SQL: $sql<br>\n"; print "Error: " . pg_error() . "<br>\n"; exit;} $row = $pg_numrows($result); for($i = 0; $i < $row; $i++){ $arr = pg_fetch_row($result, $I); for($j = 0; $j < count($arr); $j++) { echo “$arr[$j]”; } echo “<br/>”; } ?> 199 演習 テストデータを表示させる 「http://localhost/index.php」にアクセス - テストデータが表示されますか? 入力フォームを作成 # vi /var/www/html/update.html <head><title>Update form</title></head> <body> <form action=‘update.php’ method=‘POST’> New data: <input type=‘text’ name=‘data’ size=’30’> <input type=‘submit’ value=‘submit’> </form></body> 200 演習 特定のデータを表示するスクリプト # vi /var/www/html/update.php <?php $db = pg_connect(‘user=postgres password=postgres’); if(!$db) { print ‘cannot connect <br/>\n’; } $sql = “select * from example where id =“ . $_POST[data]; 201 演習 特定のデータを表示するためのスクリプト(続 き) $result = pg_query($db, $sql); if( !$result ) { print “cannot exec<br>\n"; print "SQL: $sql<br>\n"; print "Error: " . pg_error() . "<br>\n"; exit;} $row = $pg_numrows($result); for($i = 0; $i < $row; $i++){ $arr = pg_fetch_row($result, $I); for($j = 0; $j < count($arr); $j++) { echo “$arr[$j]”; } echo “<br/>”; } ?> 202 演習 特定のデータを表示させてみる URL「http://localhost/update.html」にアクセスす る。 入力欄に、「0」、「1」などを入力して、検索結果が 表示されることを確認 203 演習 SQLインジェクション攻撃 同様に、update.htmlの入力欄に、「0; insert into example (data) values (‘fuga’)」と入 力して、送信 URL「http://localhost/index.php」にアクセス 結果はどうなったか 同様に、exampleテーブルを削除する入力項目を 探しなさい(少し高度) 204 12章のまとめ Webでは、Webアプリケーションと呼ばれる動的 なシステムが主流 ソースコードの管理と、ネットワークを隔離して、 開発者を守ることが重要 Webアプリケーションには、SQLインジェクションと 呼ばれるような攻撃の方法が存在 他にもOSコマンドインジェクションや、クロスサイ トスクリプティングなど、様々な攻撃方法が存在 205 科目「インターネットセキュリティ初級」のまとめ 現在のインターネット技術は、様々な技術を組み 合わせたもので構成 インターネットは、地球全体がひとつのネットワー クに組み込まれており、世界のどこからでも接続 が可能 攻撃手段や、盗聴などの手法を知ることが重要 情報を秘匿するには、暗号技術が重要 Webアプリケーションには、固有の攻撃手段が存 在 206 207
© Copyright 2024 ExpyDoc