インターネット・セキュリティ初級(教材本体)
Download
Report
Transcript インターネット・セキュリティ初級(教材本体)
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