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
ダウンロード

インターネット・セキュリティ初級(教材本体)