oss os セキュリティ
DESCRIPTION
OSS OS セキュリティ. 株式会社リナックスアカデミー http://www.linuxacademy.ne.jp. 本講座の項目 . サーバセキュリティ概論 ネットワークセキュリティ セキュアシェル セキュア OS 概論 SELinux の仕組みと機能(1) SELinux の仕組みと機能(2) (1/2). 本講座の項目 . SELinux 構築演習 Web 環境におけるセキュリティ Web 環境におけるセキュリティの実務 ログ管理システムの仕組み(1) ログ管理システムの仕組み(2) ログ管理システムの構築実務 (2/2). - PowerPoint PPT PresentationTRANSCRIPT
OSS OS セキュリティOSS OS セキュリティ
株式会社リナックスアカデミー
http://www.linuxacademy.ne.jp
本講座の項目 サーバセキュリティ概論 ネットワークセキュリティ セキュアシェル セキュア OS 概論 SELinux の仕組みと機能 (1) SELinux の仕組みと機能 (2)
(1/2)
本講座の項目 SELinux 構築演習 Web 環境におけるセキュリティ Web 環境におけるセキュリティの実務 ログ管理システムの仕組み (1) ログ管理システムの仕組み (2) ログ管理システムの構築実務
(2/2)
1 章 サーバセキュリティ概論
サーバセキュリティ Linux におけるネットワーク chkconfig によるサービスの設定 Kudzu
脅威の種類
侵入による脅威‒ 情報漏洩‒ 改ざん‒ バックドア‒ 踏み台
サービス妨害– DoS
待ち伏せによる脅威– トロイの木馬型– 盗聴– ソーシャルエンジニアリング
実際に起きた事例 (1)
楽器販売サイトからの情報流出‒ 楽器をインターネット上で通信販売している会
社のサーバから、過去に利用した利用者の情報が流出
‒ 流出規模は数万件‒ SQL インジェクションといわれる、 DB の操作
を不正に行う処理‒ 販売サイトのシステムにミスが存在‒ 流出したデータにはクレジットカードの情報も
存在
実際に起きた事例 (2)
DoS
企業ネットワークを機能させなくする‒ ある企業のネットワーク部門に連絡、膨大な顧
問料を要求‒ 断ると、その企業のサーバに対して、多くのア
クセスが発生。企業のサービス・ネットワークがダウン
‒ 攻撃元は、顧問料を要求している人間
代表的な対策 (1)
トロイの木馬‒ アンチウイルスのソフトウエアによる駆除
ソーシャルエンジニアリング‒ ワンタイムパスワード‒ セキュリティに対する教育‒ ハードウエアトークン
代表的な対策 (2)
DoS‒ ネットワークの監視
Broute Force Attack‒ ネットワークの監視‒ IDS
TCP/IP とネットワーク
Linux では、 TCP/IP をベースとしたネットワークが動作
lo のループバックのインターフェース ethX の主に NIC が対象となるインターフェ
ース
IP ネットワーキング 実習 (1)
IP アドレスを確認
ifconfig -a でインターフェース一覧表示
ifconfig eth0 で、特定インターフェースの設定内容の表示
IP ネットワーキング 実習 (2)
netstat -r でルーティングテーブル表示 隣の生徒に IP アドレスを交換 教員が IP アドレスを板書 ルータの IP アドレスを板書1.localhost に ping を打つ2.隣に ping を打つ3.教員マシンに ping を打つ4.ルータに ping を打つ
ポートオープンとその確認 (1)
TCP/IP の動作原理は、サーバの対象となるサービスのポートに対して、クライアントがアクセス
例 : HTTP は TCP/80 なので、 Web サーバの TCP/80 番へのアクセス
サーバは、常に対象となるサービスのポートをオープン状態で待機
lsof 等のコマンドで、待機状態を確認
ポートオープンとその確認 実習
netstat –a netstat –r netstat –p lsof
これらを順に入力し動作確認
サーバプログラムとは
サーバ上で、常時稼動しているプログラム
クライアントからのリクエストに応じて、サーバプログラムが応答し、レスポンスが応答
主要なサービスは、 1-1023=Well known port でポートオープン
サービスの起動と終了
service コマンドを利用して、起動/終了
service XXXX start
service XXXX stop
で起動/終了が可能
ランレベル
Linux が動作するときの、動作モードのことが「ランレベル」
ランレベルごとに、違った動作環境を設定済 ランレベルごとに動作するサービスを変更 ランレベルは 0-6, S の 8 段階 telinit X でランレベルを変更
kudzu とは
システム起動時に実行されるハードウエア認識ツール
新しいデバイスが加わった、既存のデバイスが取り出された、等の管理
起動時に新しいデバイスがあった場合、追加するかしないか等の判定
kudzu の設定
kuzduの設定ファイル-
/etc/sysconfig/hwconf
- ハードウエアの情報が記述されている
起動時のkudzuのメッセージを確認-
dmesgコマンド
1 章のまとめ
ネットワークにおける脅威 Linux のネットワーク機能 Linux におけるサーバ動作の原理 サーバ機能の提供 ランレベルとサーバの動作 kudzu の説明の機能
2 章 ネットワークセキュリティ
iptables- iptales の仕組み- テーブルとチェイン- ターゲット- ルールの設定- 実習
上級の設定
iptables とは
パケットフィルタのツール カーネルレベルに実装されている netfilter netfilter に対して制御のルールを指定する
のが iptables( コマンド ) アクセス制限によるファイアウォール パケット転送による NAT ルータ等が実現 パケットは、「チェイン」というところを通
過
iptables の仕組み 1
カーネルのモジュールとコマンドから成立
カーネルが受け取ったパケットを、カーネル内部で処理コマンドは、そのルールを与えるためのコマンド
ハードウエア
カーネル
ユー
ザラ
ンド プ
ログ
ラム
プログ
ラム
プログ
ラム
iptables モジュール(netfilter)
iptables の仕組み 2
ルールはチェインに対して設定
例 : iptables -A INPUT -i eth0 –s 192.168.10.0/24
-p tcp --dport 80 -j DROP
インターフェース eth0 から入ってくる (=INPUT チェインを通過する ) 、発信元アドレスが 192.168.10.0/24 で宛先ポートが TCP/80 であるパケットをDROP せよ、というルール
iptables の仕組み 3
否定に関する
例 : iptables –A INPUT ! –s 192.168.20.0/24 –j DROP
! は否定(〜ではない)を意味する。 従来の書式では、
iptables –A INPUT –s ! 192.168.20.0/24 –j DROP
というように、 ! の位置が違っていた。 まだ出回っている iptables の説明は、こ
の古い形式で書かれている場合が多い。
テーブルとは?
4つのテーブル「 filter 」「 nat 」「 mangle 」「 raw 」
それぞれのテーブルに機能が存在 例 : mangle ・・・パケットの改変 filter ・・・パケットのフィルタリング
それぞれのテーブルの中で利用できるチェイン
チェインとは?
チェインは、ルールの集まりでできている 元々組み込まれているチェインがある チェインは独自に設定し、チェインに対して
チェインを加えることができる チェインの中に記述されたルールは、ファー
ストマッチであるため、優先度の高いルールはチェインの中で前の方に書いておく必要がある
ターゲット
チェインに設定されたルールで、対象のパケットをターゲットに送る仕組み
ターゲット自身に機能があり、パケットを送ることで処理を
全部で 20以上あるが、有名なターゲットとして、 ACCEPT, DROP, REJECT, MASQUERADE 等が存在
例 : iptables -A INPUT -i eth0 -s 192.168.10.0/24 -p tcp --dport 80 -j DROP
対象のパケットを DROP ターゲットに送る(= 落とす)。
ルールの設定
チェイン XXX に対してルールを設定する
iptables -A XXX ルールの追加
iptables -D XXX ルールの削除
iptables -i ethX ルールを ethX からパケットが入力されるときに適用
iptables -s X.X.X.X 発信元 IP アドレスがX.X.X.X であるパケットが対象。 CIDR形式でも指定可能。
iptables -d XXX 送信先 IP アドレスが X.X.X.Xであるパケットが対象。 CIDR形式でも指定可能
実習 1 方針
SSH のアクセス制限を行います。
2 人でペアになってください。
相手の IP アドレスを聞いてください。
自分の IP アドレスを相手に伝えてください。
実習 2-1 アクセス制限
ssh 相手の IP アドレス-
アクセスできます。
実習 2-2 アクセス制限 コマンド一覧
iptables –nvL
iptables -A INPUT -i eth0 -s 相手の IP アドレス -j DROP
iptables –nvL
相手の IP アドレスを発信元 IP とするパケットで、 eth0 からパケットがくるものを、すべて DROP する。という意味。
実習 3-1 アクセス制限後
もう一度実行してください。 ssh 相手の IP アドレス・・・接続できないはずです。
実習 3-2 アクセス制限後 コマンド一覧
iptables –nvL iptables –F iptables –nvL
すべてのアクセス制限を解除します。
実習 4 カウンター確認する
実験 2〜3を再度行います。iptables –nvL
を入力しますが、実験 2-2 の終わりの出力と、実験 3-2 の終わりの出力を比較してください。
設定した条件にマッチした回数と、適用したパケットのバイト数が変わるはずです。
上級の設定
サーバの構成
あるサーバを想定し、そのサーバのファイアウォールをiptablesで実現
対象とするサーバの構成:-
Webサーバ-
リモートからSSHアクセスによる操作が可能
- Apache-httpd, sshdが動作
- IPアドレスは192.168.10.100
サーバの特徴 1
設定上の理念は 2 つA 「対象ホストが、ネットワーク的にどういう動きをする
か完全把握する必要がある」B 「獅子身中の虫」
A 「対象ホストが、ネットワーク的にどういう動きをするか完全把握する必要がある」
Apache-httpd が動作している⇒ TCP/80 がポートオープンsshd が動作している⇒ TCP/22 がポートオープン
他にオープンしているようであれば、それは停止→ lsof 等を使って、動いているプロセスと、ポートオープンの状況を調査
サーバの特徴 2
B 「獅子身中の虫」
iptables で設定できるファイアウォール/アクセス制限多くの場合 :
「外部から自ホストへのアクセス制限をかける」
それ以外に :
「自ホストから外部へのアクセス制限もかける」
万が一乗っ取り等が発生した場合、他ホストへのアタックの防止
iptables の設定 1
どちらの方針がよいか ?
1. 「全パケット通過で、特定のパケットだけ制限する。」 2. 「全パケットを制限し、特定のパケットだけ通す」
1. vs 2. ・・・もちろん 2. そのための A 「対象ホストが、ネットワーク的に・・・完全把握する」
実際の設定方法まず全チェインに対するルール削除と、余分なチェインの削除INPUT, OUTPUT のチェインのポリシーは「すべて通過させない」ループバックは全部通す。
iptables の設定 2
自ホスト TCP/80 へのアクセスと、その応答の通信を許可。 (HTTP)
自ホスト TCP/22 へのアクセスと、その応答の通信を許可。 (SSH)
自ホストから UDP/53 TCP/53 へのアクセスと、その応答の通信を許可。 (DNS)
iptables スクリプト表示
参考文献「習うより慣れろ iptables テンプレート集
」@IT 連載記事http://www.atmarkit.co.jp/flinux/index/
indexfiles/iptablesindex.html
2 章のまとめ
iptables の動作原理の説明
iptables のアクセス制限の実証
iptables で Web サーバの設定
3章 セキュアシェル
telnet サーバの構築
OpenSSH
sshd_config の設定
ブルートフォースアタック
telnet とは
TCP 23 番ポートで通信相手先の telnet サーバと通信 UNIX でリモートのマシンにログイン暗号化は(標準では)行われない セキュリティ的に怖いので、最近は利用頻度
が低い
telnet サーバとは
telnet のクライアントに対して応答
telnet の通信は、ログインだけではない
ルータや様々な機器が telnet の接続に応答
telnet コマンドとは UNIX系 OS の場合標準で利用可能
リモートマシンにも接続
telnet ホスト名 ポート番号で、ホスト名に対してポート番号で接続
手動 HTTP 、手動 SMTP の実現
telnet サーバの設定 ( 実習 )
yum install telnet-server
/etc/xinetd.d/telnet の設定 disable=yes ⇒ no に変更
service xinetd restart
telnet-server は xinetd で管理
OpenSSH
SSH とは 1
Secure SHell のこと。従来、 Remote SHell(rsh) というのがあり、リモートマシンのシェルを利用することが可能通信内容はすべて平文
SSH は、リモートへの接続をすべて暗号化し、 RSH と同等のことが実現
UNIX系 OS を中心に、リモートマシンへのログインは、現在 SSH が一般的
SSH とは 2
同等なことは、前述 RSHや telnet でも実現
通信内容がすべて平文でありアカウント認証時も平文
⇒セキュリティ的に NG
SSH を使うようになった。
SSH とは 3
外部からのホストのアクセスを、すべてSSH に限定
SSH のサーバプログラム( sshd)のセキュリティ情報をだけを注意し、他のサービスを利用しない
他のポートを閉じることも可能なので、セキュリティ的にも利点
SSH関連のコマンド 1
sftp‒ 通常の FTP サービスは、最近利用頻度が低下‒ プロトコルの仕様と、サーバのセキュリティ等
の理由‒ ファイルの転送は重要‒ 通信経路はできれば暗号化されていることが期
待
⇒sftp の利用
SSH関連のコマンド 2
sftp(続き)‒ FTP の通信中に暗号化を行う SFTP(≠FTP over
SSL)
‒ SSH をインストールすると、クライアントコマンド sftp
サーバプログラム sftp-server
がインストール‒ ポートも SSH と同じ TCP/22 番を利用するので
、ファイアウォールの設定も簡単‒ 「 SFTP は SSH のサブセットである」
SSH関連のコマンド 3
scp‒ リモートホスト間で、ファイルのコピーを行う
rcp というコマンドが過去に存在‒ rsh同様、セキュリティの面で難があったので
、利用頻度が減少‒ 通信内容が暗号化され、ファイルコピーの実行
コマンド例 : scp file-a host1:/tmp
file-a を host1 というホストの /tmp ディレクトリにコピー
SSH関連のコマンド 4
ssh の -L オプション( SSH トンネリング)‒ あるマシンに ssh をトンネリングモードで待機
。この ssh は 2 つのポートをオープン。
‒ 1 つは待機用( host1 の port1)。もう 1 つは別マシン( host2)のポート( port2)に接続。
‒ すると、 host1 の port1 に接続すると、それがそのまま host2 の port2 に接続。
SSH関連のコマンド 5
ssh の -L オプション( SSH トンネリング) 2(続き)
‒ 環境により直接 host2 の port2 に接続できないとき、 host1 を経由させることによって接続が可能
‒ これが SSH のトンネリングモード
host1 host2
port1 port2ssh –L によるトンネリング
sshd_config の設定
様々なパラメータの紹介 1
Port
- ポート番号を設定する。 Protocol
- 利用するプロトコル。 2,1 と記述することで、 SSH2 を優先し、次に SSH1
PermitRootLogin
- SSH での接続の際に root でログインすることを許可
様々なパラメータの紹介 2
MaxAuthTries
- ログイン名とパスワードが一致しなかったときに、何回までリトライを許すか?という設定。あ多いと、ブルートフォースアタックに対してぜい弱
PubkeyAuthentication
- 事前に公開鍵を渡しておき、それを利用して認証する=パスワードを聞かれることが無くなる
RhostsRSAAuthentication
- rhosts を認証のときに利用するかしないか、の設定
様々なパラメータの紹介 3
HostbasedAuthentication
- /etc/ssh/ssh_known_hosts に公開鍵を設定。登録されたホストからのログインを許可- ホストが認証の対象
PasswordAuthentication
- SSH の接続の際に、ログイン名・パスワードでのログインを許可- 交換したキーの情報に依存せず
ChallengeResponseAuthentication
- チャレンジレスポンスの認証方式を許可するかの設定
公開鍵暗号方式
鍵 A, B のルール
- 「 A で閉めた(=暗号化した)データは、 Bでしかあけられ(復号化でき)ない。」
- 「 Bで閉めた(=暗号化した)データは、 Aでしかあけられ(復号化でき)ない。」
A,B のどちらかを公開鍵といい、残りを秘密鍵公開鍵は一般に公開、秘密鍵は外部に非公開
SSH の公開鍵と秘密鍵
authorized_key に公開鍵保存する- 2名一組で、お互いの IP アドレスを交換- root でログインにチャレンジ- 公開鍵/秘密鍵のペアを作成- 相手に公開鍵を渡す- ログイン名・パスワードの入力無しでログイ
ンができる事を確認
ブルートフォースアタック
ブルートフォースアタック 1
ログイン名とパスワードの組み合わせを、たて続けに送信
アカウント奪取を“力技”で実行
どのサーバ・サービスでも対象例:Web のサービスにおける、アカウントの
ログインとパスワード
ブルートフォースアタック 2
パスワードの生成方法よくある「パスワードの決め方」ルール‒ 辞書に載っている単語は利用しない‒ 簡単な文字列の羅列( abcdef)は利用しない‒ アルファベット(大文字小文字)・記号・数値
等を混ぜて作成‒ ログイン名/パスワードを同じにするのは利用
しない
⇒ブルートフォースアタックの時に、耐久性を上げる為の忠告
パスワードの設定方法(続き)- root のように、アカウントが存在しているこ
とがわかっていると、パスワードを順に変えてアタック
- アカウントを総当りにするより、対象になるデータ件数は減るため、見つかるまでの“のべ時間”が減り、危険
ブルートフォースアタック 3
ログ(抜粋)logname= uid=0 euid=0 tty=ssh ruser= rhost=YYYY user=root
Oct 22 23:02:17 XXXXXX sshd[6078]: Failed password for root from YYYY port 36657 ssh2
logname= uid=0 euid=0 tty=ssh ruser= rhost=YYYY user=root
Oct 22 23:02:20 XXXXXX sshd[6082]: Failed password for root from YYYY port 37060 ssh2
logname= uid=0 euid=0 tty=ssh ruser= rhost=YYYY user=root
Oct 22 23:02:27 XXXXXX sshd[6090]: Failed password for root from YYYY port 37791 ssh2
- root というユーザに対して、同じ IP から連続にしてログインしようとしていて、失敗
- 様々なパスワードを送信されている事が確認
ブルートフォースアタック 4
ログはこのようになります(抜粋)logname= uid=0 euid=0 tty=ssh ruser= rhost=YYYY
Oct 20 22:09:49 XXXXXX sshd[5314]: Failed password for invalid user abe from ZZZZ port 57556 ssh2
logname= uid=0 euid=0 tty=ssh ruser= rhost=YYYY
Oct 20 22:09:50 XXXXXX sshd[5318]: Failed password for invalid user adabas from ZZZZ port 57779 ssh2
logname= uid=0 euid=0 tty=ssh ruser= rhost=YYYY
Oct 20 22:10:00 XXXXXX sshd[5322]: Failed password for invalid user adam from ZZZZ port 57962 ssh2
同じホストから、 a で始まるアカウント(abe, adabas, adam…) でログインを試行
SSH に対するブルートフォースアタックの対策 1
SSH のサーバにブルートフォースアタックを検出する方法は無い
一般的には、 2 通り‒ Linux のファイアウォールを設定す
る、 iptables を利用するタイプ‒ SSH に対するアクセスログをスキャンし、同一ホストからの大量のログインミスを発見、そのホストからのアクセスを禁止。ログを解析するタイプ。
SSH に対するブルートフォースアタックの対策 2
iptables を利用するタイプ 2(続き)
- iptables には、 recent というモジュールがある。
「最近**秒以内に~の条件が**回発生した」⇒単位時間あたりの条件適用回数をカウントできるモジュール
SSH に対するブルートフォースアタックの対策 3
iptables を利用するタイプ 3 (続き)
recent モジュールを用いて
「最近**分以内に、 ssh宛てのパケットでNEW フラグがたったパケットを**回以上確認した場合、発信元の IP からのパケットを**秒遮断する」
という設定をする。
SSH に対するブルートフォースアタックの対策 4
iptables を利用するタイプ 4 (続き)
利点:指定回数以上を間違えた場合、即その段階で遮
断することができる。
難点:正式なユーザでも、「たまたま」指定回数以上
を間違えると、アクセスが禁止される。
SSH に対するブルートフォースアタックの対策 5
ログを利用するタイプ 1
- 定期的にログ解析ツールを動かす。- 対象のログは、認証結果を出力するログ。- 「何時何分にアカウント**がログインをし
た」- 「何時何分にアカウント**のアクセスがあ
ったが認証に失敗した」
SSH に対するブルートフォースアタックの対策 6
ログを利用するタイプ 2(続き)
- ブルートフォースアタックは、大量のログイン失敗の情報が発生
⇒ログの内容から、ブルートフォースアタックの検出
SSH に対するブルートフォースアタックの対策 7
ログを利用するタイプ 3 (続き)
利点 :
ログの解析なので、 iptables の複雑な方法の理解が不要
難点 :
ログのフォーマットにより、検出できる場合とできない場合が存在。利用するプログラムにもよる。
3章のまとめ
telnet の動作原理
ssh の動作原理
ssh で公開鍵/秘密鍵を交換したログイン
ssh でのブルートフォースアタックと、その防ぎ方
4章 セキュア OS 概論
セキュア OS の種類 セキュリティアップデート パッケージの管理と利点 chroot/jail 環境
セキュア OS
セキュリティを強化した OS明確な定義は無い
‒ MAC(Mandatory Access Control, 強制アクセス制御 ) を兼ね備えている
‒ root ではなく、最小特権をもつ複数ユーザによる管理
root は危険‒ すべての権限が root で操作可能‒ root が乗っ取られるとアウト
セキュリティホール情報の集め方
IPA 情報セキュリティ情報http://www.ipa.go.jp/security/
JP/CERT 注意喚起http://www.jpcert.or.jp/
のようなところから情報を収集
パッケージの管理と利点 1
パッケージとは? アプリケーションを実行するの必要なファイ
ルを提供 一括インストールできる機構 パッケージ管理機構により、依存性を解決配布元が動作保証(することがある)
パッケージの管理と利点 2
ディストリビューション大きく分けて、 2系統に分かれる- RedHat系列・・・ RedHat Enterprise Linux,
Fedora, CentOS
- Debian系列・・・ Debian, Ubuntu, KNOPPIX
ディストリビューションとパッケージ- RedHat系列・・・ .rpm形式のパッケージ- Debian系列・・・ .deb形式のパッケージ
パッケージの管理と利点 3
パッケージとパッケージツリーの管理 パッケージツリーとは、パッケージの依存関係の情報
パッケージのインストールは、 CD/DVD からの他にネットワークからファイルを取り寄せインストール
ツリー管理コマンドと、インストールするコマンドは異なる
rpm/yum ・・・ RedHat系 dpkg/apt-get・・・ Debian系
実習 : パッケージ管理
CD/DVD を利用するときは、メディアをマウント ネットワークを利用するときは、導通確認 プロキシが必要であるときは、以下の設定
export http_proxy=http:// プロキシ情報
CentOS では、 yum を利用しパッケージファイルの取り寄せyum install パッケージ名yum remove パッケージ名yum check-update ・・・パッケージツリー情報更新
chroot/jail 環境とは 1
プログラムのアクセスを、特定ディレクトリ以下に抑える技術
/usr/var/tmp/home
/chroot /dir-a
Jail 環境とは 2
原理は、 UNIX のプロセスの機能 プロセスが到達できる、最上位のディレクト
リを指定 通常は /(ルート)だが、任意のディレクト
リにする事が可能 動作範囲が抑えられた状態が、いかにも牢獄
のよう・・・ Jail(牢獄)環境と呼ぶ
Jail 環境の利点 1
シェルの実習環境 不特定多数の一般ユーザに、ログイン環境を提供
通常だと /etc 等、その OS 上の設定までみられる可能性
/var, /home 等に動作環境を作成 Jail 環境には、 OS の設定等を見せないよう
に構築
Jail 環境の利点 2
サーバ運用環境 サーバの動作環境を Jail 環境で構築 1 つの Jail 環境が攻撃されても、他の Jail 環
境には影響が無いメモリ・ CPU ・ HDD は共有可能 一番簡単な「仮想化」
実習 : Jail 環境の構築
/tmp/jailed に Jail 環境を構築する /tmp/jailed に必要なファイルをコピー chroot コマンドでルートディレクトリを指
定 対象のディレクトリ以上より上にアクセスで
きない事を確認
4章のまとめ
セキュア OS セキュリティホール情報の集め方 パッケージの利用と利点 chroot/jail 環境について chroot/jail 環境の構築
5章 SELinux の仕組みと機能 (1)
root の危険性 SELinux とは SELinux の機能の構成強制アクセス制御 TE ドメイン RBAC セキュリティコンテキスト
SELinux とは
SELinux は、カーネルに独自拡張を加えたOS
セキュア OS に分類 アメリカの国家安全保障局 (NSA) が中心に開発
GPL で配布 カーネル 2.6.0 にマージ
root権限の存在
root ・・・ UNIX系 OS での UID 0 番の特殊なユーザ
すべてのアクセス権において、無視・・・「なんでもあり」
セキュアな OS において、 root の存在が好ましくない
理由は「 root権限が奪取されたら、すべてのことができてしまう」ことによる
任意アクセス制御( DAC)
アクセス権は、ファイル・ディレクトリに存在 それらのアクセス権を設定するのは、“ユーザ” - 「各ユーザが“(各自が)任意に”アクセス権
を設定・管理できる」 この仕組みを DAC(Discretionalry Access
Control) という・・・セキュリティ管理者がアクセス権
を設定したい・・・しかし「 root の存在」が問題
SELinux の動作
SELinux の働き
カーネル カーネル
ファイル等のリソース ファイル等のリソース
プロセス
アクセス権の確認
アクセス権の確認
Linux Security Module
プロセス
従来のアクセス SELinux 環境でのアクセス
機能構成図
最小特権 RBAC
TE
ドメイン遷移
強制アクセス制御 (MAC)
監査ログ (AVC)
セキュア OS の必要項目
強制アクセス制御
「セキュリティ ポリシ ファイル」に、アクセスについての記述
設定は、ユーザや ファイル・ディレクトリのオーナではなく、 Role単位
ポリシファイルを管理するのが、セキュリティ管理者
セキュリティ管理者の考えの元に、運用
TE(Type Enforcement)1
様々なプロセスとリソースに対して、ラベルを割り当て
プロセスの事を“サブジェクト” リソースの事を“オブジェクト” プロセスに割り当てたラベルは“ドメイン” リソースに割り当てたラベルを“タイプ” 「様々なリソース」には次のもの
‒ ファイルやディレクトリ‒ 通信ポート等のデバイス
TE(Type Enforcement)2
オブジェクトには、その種類ごとにオブジェクトクラスが存在
オブジェクトクラスには、アクセス権限が存在
・・・アクセスベクタ TE ・・・ドメイン(プロセス)がオブジェ
クトに対して、どんな権限があるかの定義
ドメイン遷移
プロセスに対してラベルを付けたものが“ドメイン”
アクセス対象のファイル・ディレクトリにつけたラベルが“タイプ” (前述)
プロセスが別プロセスを起動したとき、原則は同じドメインを割り当て
必要に応じて、別プロセスに別ドメインを割り当てる必要あり・・・ドメイン遷移
RBAC
すべてのユーザに対して、“役割”を割り当て
役割は Role(ロール)
ロールに対して、アクセス制限
これが RBAC(Role Based Access Control)
セキュリティコンテキスト
プロセスやオブジェクトが属している、セキュリティの属性
ユーザ・ロール・タイプが定義 プロセスの場合、ユーザ・ロール・ドメイン
が属性として存在 リソース(オブジェクト)の場合、ユーザ・
ロール・タイプが属性として存在
5章のまとめ
SELinux の機能について説明
SELinux は Linux Security Module というroot でも機能するアクセス制限機能の元で動作
SELinux を理解する上で必要な用語である、 TE, RBAC, セキュリティコンテキスト等を説明
6章 SELinux の仕組みと機能 (2)
SELinux の動作モードの説明
SELinux で守れない種類の脅威
TOMOYO Linux の紹介
SELinux の動作モード
enforcing, permissive, disabled の 3つのモードが存在
RedHat/CentOS Linux では、インストール時に設定が可能
標準でインストールを行う場合、 enforcingの状態に設定
SELinux の動作モードの設定
SELinux の動作モードの設定箇所は以下の 2点
インストール時に設定 インストール後コマンドにて設定する
‒ setenforce [ Enforcing | Permissive | 1 | 0 ]
1, 0 はそれぞれ Enforcing, Permissive
動作モードの確認と変更
確認を行う方法‒ getenforce コマンドで応答を確認‒ cat /etc/selinux/config で config ファイルの中を
確認
動作モードの変更‒ setenforce [ Enforcing | Permissive | 1 | 0 ] で変更
‒ ただし、 Enforcing と Permissive の間でのみ切り替え
‒ /etc/selinux/config ファイルを書き換え、直接指定し
‒ 再起動
SELinux の弱点 1
root アカウント root のアカウントが奪取される可能性 root が実行するプロセスの動きは制限する
ことが可能 root が属するドメインの権限の範囲内で、
設定を変更することが可能 定期的に root のパスワードを入れ替えたり
、ネットワークからのアクセス制限を実行
SELinux の弱点 2
ネットワークでの攻撃外部ネットワークからの不正攻撃(それで乗っ取られたプロセスの挙動を制限する
ことはできるが、乗っ取り自体を防ぐことはできない)
SPAM の受信 CSRF, XSS 等 Web アプリケーション上での
セキュリティホール
TOMOYO Linux とは
NTT データが開発し、 GPL で配布しているセキュア OS
標準でインストールされていないので、カーネルの追加モジュールとして実装
「使いこなせるセキュア OS 」という発想‒ 従来のセキュア OS は、設定が困難
http://tomoyo.sourceforge.jp
TOMOYO Linux の特徴
「学習」を行う・・・最大のポイント
セキュア OS で一番難しい設定が、ポリシーの設定
収集したアクセス履歴の中から、必要なポリシーを自動的に生成
動作モード (SELinux の Enforcing, Permissive 等 ) に、学習を行うモードが存在
6章のまとめ
SELinux の動作モードの説明Enforcing, Permissive
SELinux で守れない種類の脅威
TOMOYO Linux の紹介 「学習を行う」事が最大の特徴
7章 SELinux 構築演習
SELinux のインストール– インストール– SELinux の状態の確認– SELinux の有効化/無効化
SELinux関連のコマンド‑ セキュリティコンテキスト関連のコマンド‑ アクセス制御関連のコマンド‑ ロール関連のコマンド
avc ログ
SELinux のインストール
標準ではインストール済みなので、操作は必要無い
SELinux の状態の確認
sestatus ・・・動作状態とポリシー情報を表示
seinfo ・・・現在のポリシーの詳細な情報
SELinux の有効化/無効化
getenforce で動作確認‒ disableだった場合は、 /etc/selinux/config で
SELINUX=permissive にして再起動‒ 再度 getenforce で状態を確認
setenforce 1 で SELinux を有効化
SELinux関連のコマンド
セキュリティコンテキスト関連のコマンドps --context ・・・プロセスのコンテキスト
を表示id –context ・・・ログインシェルの動作ドメ
インを表示ls --context ・・・ファイルのコンテキストを
表示
アクセス制御関連のコマンド
sesearch
- ポリシーに定義されている内容を調査
chcon
- ファイルコンテキストを変更
fixfiles
- ファイルコンテキストを再設定
ロール関連のコマンド
newrole
- ロールの変更 - パッケージ policycoreutils-newrole が必
要
avc ログとは
ポリシールールに関する違反が発生すると、 avc ログに出力
SELinux のモードは、 enforcing, permissive のときに出力
ポリシールール違反が発生した理由、またはポリシールールの動作確認等で利用
CentOS では /var/log/audit/audit.log
avc ログのフォーマット
ログには次の内容が含まれるs
context=アクセスしたプロセスのドメインコンテキスト
tcontext=アクセス対象のセキュリティコンテキスト
tclass=アクセス対象のオブジェクトクラス
その他、プロセスidや、実行したプロセスを記録
avc ログの解析
avc ログを元に、ポリシーを作成
audit2allow というコマンド - audit.log を元にポリシーを作成
7章のまとめ
SELinux の設定で利用するコマンドの利用
セキュリティコンテキスト等の表示
avc ログの解析
avc ログからのポリシーの作成
8章 Web 環境におけるセキュリティ
Apache-HTTPD のセキュリティ– Apache-HTTPD のインストール– Apache-HTTPD の実行権限– httpd.conf の設定– ネットワークのアクセス権限
CGI のプログラムと出力 フォームデータの取り扱い 入力値評価
Apache-HTTPD のセキュリティ
Apache-HTTPD のインストール
パッケージによるインストール‒ 非常に有名・多く利用されているので、各ディ
ストリビューションはパッケージで用意
ソースコードからビルド‒ 機能追加のモジュール形式として static と DSO形式が存在
‒ ディストリビューションによる配布では、 DSO形式が多数
Apache-HTTPD の実行権限
親プロセスと子プロセスで動作親プロセスは、リクエストを子プロセスに振り分け、子プロセスが応答
親プロセスは root 、子プロセスが一般ユーザで動作
子プロセスは、必ず一般ユーザ権限で実行 コンテンツは、 apacheやwww-dataユーザ権限では保存“しない”
‒ 通常は /var/www/httpdや /var/www に保存
httpd.conf の設定
ServerRoot‒ /etc/httpd が標準‒ httpd の設定ファイルツリーのトップを示す
User, Group‒ apache, apache が標準‒ httpd の子プロセスが動作するユーザ権限
DocumentRoot‒ /var/www/httpd が標準‒ コンテンツをおくトップディレクトリを指定
ネットワークのアクセス権限
アクセス制御<Directory /var/www/http/xxx>
order deny, allow
denyfrom all
allow from .example.com
</Directory>
deny, allow の順でパターンマッチ.example.com からのアクセス以外、すべて
応答拒否
CGI のプログラムと出力
静的コンテンツ=常に同じ内容を応答 動的コンテンツ=入力に応じて応答が変化 CGI ・・・外部プログラムを起動し、動的コ
ンテンツを作成
クライアント /ブラウザ
Web サーバ /Apache
外部プログラム
この部分が CGI
フォームデータの取り扱い 1
フォームにより値を入力 インタラクティブなページを作成 フォームによるデータ入力を扱える HTTP のメソッドは 2 つ (GET/POST)
パラメータの渡しかたが、 GET/POST で異なる‒ GET ・・・ URL の終わりに値の羅列‒ POST ・・・ HTTP の通信上に値を羅列
フォームデータの取り扱い 2
GET の動作を見てみよう‒ Google で何か検索‒ 検索結果を URL で表示‒ 検索結果も HP である、という考え
POST の動作を見てみよう‒ POST のサイトに Wireshark でパケットキャプ
チャ
入力値評価 1
入力する値が、想定したものかどうか検証する。
例:生“年”月日を西暦 4桁ではなく、昭和・平成**年で入力
- 住所の欄に名前を入力
入力値が、こちらの想定したものかどうかを検証
例 : 郵便番号 3桁 -4桁の数値
- 携帯電話番号 : 080 or 090 で始まる、 3桁 -4桁 -4桁の番号
入力値評価 2
RADIOボタンのとき、値は複数の中から 1つ選択
入力値評価は「必要である」前述 GET/POST 、どちらでも値を偽装する
ことは可能 もし、「複数の中から 1 つ」を前提にシステ
ムを設計すると、トラブル発生文字列パターンのマッチングには、正規表現
を使うといい
8章のまとめ
Apache-httpd のセキュリティについて Apache-httpd の動作環境について Apache-httpd の設定 フォームデータの取り扱い フォームデータの入力値検証の重要性
9章 Web 環境におけるセキュリティの実務
Web アプリケーション周りで発生するセキュリティホール‒ SQL インジェクション‒ XSS
‒ CSRF
前述セキュリティホールの発生原因と、その対策(方法)
セキュリティ対策
SQL インジェクション
SQL インジェクションは、「期待した入力値ではなく、 SQL の制御コードを入力され、期待していない SQL が動作」
Web アプリケーション等で、受け付けた値に SQL の制御コードが存在
既存の SQL コードと連携し、期待していない動作の SQL文が実現・実行
SQL とフォームの値
Web アプリケーションにおける、フォームのパラメータの処理
フォームによりパラメータが入力 書式が無いデータは、自由に入力 書式があるデータも、パラメータ操作により
入力が自由( Radioボタンの GET)
SQL インジェクションの発生メカニズム
t_person に name列という文字列が含まれる列があったとする。
okada という文字を含む行を検索する SQL
select * from t_person where name like 'okada';
$input_data という文字列変数があり、それに含まれた文字列を含む行を検索するときは?
"select * from t_person where name like '" . $input_data . "';"
SQL インジェクションの防止方法
入力値評価を厳密化‒ 書式のあるデータは、その書式に従ったフォー
マットかを繰り返し検証‒ 入力値の中に制御コード(今回の場合‘)が入っ
ていないか検証‒ ’ がある場合は、’ -> \’という「’は文字である
」というエスケープ処理
DB 操作フレームワークを利用する。‒ Java-JDBC(PreparedStatement)
‒ PHP-PDO(bindParam)
‒ Perl-DBI(bind_param)
XSS とは
ブラウザ上で動作するスクリプト言語(主にJavaScript)を利用
JavaScript ・・・ブラウザに効果を与えることができるスクリプト言語
HP 表示を行う際に、利用者に気づかせずスクリプトを動作
動作内容により、 Web サイトにアタックをかけたり、 Cookie 情報を盗用
これを XSS(Cross Site Scripting)
XSS の発生メカニズム
JavaScript の文法・・・ <script type="text/javascript">……</script>
スクリプトがブラウザに読み込み
気づかないうちに、スクリプトが動作
JavaScript の内容によっては、危険な攻撃が可能
XSS の発生メカニズム ( 例 )
他のサイトに攻撃を仕掛けるスクリプトだったと仮定
1.悪意のあるユーザ
一般の
閲覧者
2.
3.
4. 攻撃対象のサイト
XSS の防止方法
<script> というタグが認識されてしまうことが、すべての原因
入力データに <script> 等、タグ情報を入力させない
出力時に、タグの情報をすべて実体参照文字に変更‒ < ・・・ < 、 > ・・・ > 等の変換
効果を含んだ文字入力(<b> 等)をしても、出力時にエスケープされてしまい、機能を限定
CSRF とは
リンクの先に特別なアクションを設定 そのリンクをクリックした瞬間、そのアクシ
ョンが動作気づかないうちに、そのアクションが実行
‒ ヤフオクの評価を下げる(未遂)‒ 「ぼくはまちちゃん」事件
ブラウザに含まれる、環境 (Cookie ・ログイン済みの状態)を利用しながら攻撃が可能
CSRF の発生メカニズム
攻撃対象のアクションが GETメソッドのときは、 URL自体がアクション
攻撃対象のアクションが POSTメソッドのときは、 POSTメソッドが動作するJavaScript が含まれた HP を作成し、そこにアクセス
認証を必要とするサイトで、ログインしたままのときは、 Cookie が備わっているので、認証がそのまま通過
CSRF の発生メカニズム ( 例 )1
通常はウイザード画面のように処理が進む(A. B. C.)⇒ ⇒
A B C
CSRF の発生メカニズム ( 例 )2
通常はウイザード画面のように処理が進む
A B
D
C
CSRF の発生メカニズム ( 例 )3
通常はウイザード画面のように処理が進む
A B
D
C
E
CSRF の防止方法
過去にログインした Cookie が利用できる・・・ログイン状態でできる“重要な”アクションの前、再度認証を要求
リンクによるアタックではないことを保証=前のページからの遷移である事を保証‒ hidden タグを使って、前ページからの遷移であ
る確認を行う‒ リファラーを確認し、前のページの URL を確認‒ CAPTCHA(後述)を利用し、ユーザが目で見
ていることを確認
クロールツールについて
プログラムで自動的に巡回する(クロールツール) データを POST することでフォームの利用も可能自動巡回による攻撃
‒ Blog に対してメッセージを自動で書き込むことも可能(ブログスパム)
‒ 認証機構にブルートフォースアタック
対策‒ 遷移に JavaScript が用いられていると、遷移を行えな
い場合が多い‒ 遷移に JavaScript を利用
クロールツールの対策
CAPTCHA クライアントが画面を見ているという保証
=クロールツールのブロック画像自動認識をさせないように、曲がった文字列を表示
なぞなぞ・クイズを解かせる CAPTCHA も存在
視覚に障害を持つ人のケア‒ 色覚障害で、画像の文字がよく見えない、等
実習
XSS を発生させるホームページ 「名前を表示する」という簡単なプログラムを
作成
名前を入力し、通常の動作がする事を確認
JavaScript を含んだ文字列を入力し動作確認
もし、これが攻撃用の JavaScript であったら?
9章のまとめ
Web のセキュリティ対策について学習 SQL インジェクション、 XSS 、 CSRF につ
いて学習 それぞれの発生原因と対策方法に着いて解説 実際に XSS を発生
10章 ログ管理システムの仕組み (1)
第 10章 ~第 12 章でログについて説明第 12 章が実習です。 10,11 章は説明のみログの管理機構についての説明 syslog syslog-ng swatch
等の動作原理の解説
syslog とは 1
ログ-
システムの動作の記録(ログ=航海日誌)
- システムの挙動をログから判断/解析する
例: メールのログには、メールを送受信したことが記録される
ロギングシステム-
ログをとり、それらを管理するシステム
syslogはロギングシステムである
syslog とは 2
syslog はクライアントサーバ形式のロギングシステム
クライアントサーバ形式なので、「ログサーバ (syslog サーバ ) 」の構築が可能
一般に 日時 ホスト名 (IP アドレス ) 情報 の順で出力ホスト名を記述するのは、ログサーバを作成
した場合、ログを送ったホストを判定するために必要
syslog の動作原理
セレクタとアクション- セレクタには「ファシリティ」と「プライオリティ」が存在
ファシリティ・・・ログの分類 プライオリティ・・・ログの優先度
アクション・・・保存するログの位置、も他のホストに送る場合の設定、パイプで区切ったファイルへ渡す、などの指示
syslog の設定
/etc/syslog.conf で設定 ログサーバへ送る場合は、前述 action で説明した方法を利用
例:cron.* /var/log/cron
cron ファシリティは /var/log/cron ファイルにログを出力
cron.* @server-b
cron ファシリティは server-b にログを送付
syslog-ng
syslog-NewGeneration が名前の由来 syslog に機能追加
‒ フィルタリング‒ 柔軟性の高い設定‒ 信頼性の高い処理‒ データベースへの出力‒ ログサーバへの通信を暗号化
swatch とは
syslog 等のログの内容を監視することが可能
常に複数の OS で出力されている複数のログを監視することは困難
swatch ・・・ログの監視ツール ログに吐き出されたメッセージを解析条件にマッチしたものがあれば、イベントを
フック
swatch の動作原理
対象ログファイルの監視 設定ファイルは ~/.swatchrc
Perl で書かれているため、いくつかモジュールが必要
Date::Calc, Date::Parse, File::Tail, Time:HiRes
swatch の設定 1
パターンの記述.swatchrc に watchfor / パターン /
アクション :
watchfor / パターン /,/ パターン /
アクション :
の繰り返しを記述
swatch の設定 2
アクションの例 - mail=... ...(メールアドレス)に送信 - bell ベルを鳴らす - continue 処理を継続 - echo ターミナルに文字列出力 - pipe コマンド 出力をパイプ経由でコマ
ンドを実行
10章のまとめ
syslog の動作原理 syslog の設定ファイルの記述方法 syslog-ng の動作原理 swatch の動作原理 swatch の設定ファイルの記述方法
11 章 ログ管理システムの仕組み (2)
ログの管理機構についての説明 logrotate logwatch
の動作原理の解説
logrotate とは
logが増えてくると管理が困難1
回/1日、1回/1週、1回/1月等の単位でログを循環
xxx.log ⇒ xxx.log.1
---次の循環------------------------
xxx.log.1 ⇒ xxx.log.2
xxx.log ⇒ xxx.log.1
この循環作業を行うのが logrotate
logrotate の動作原理
logrotate の設定ファイル /etc/logrotate.conf
/etc/logrotate.d
logrotate.d は設定ファイルを置くディレクトリ
パッケージの追加/削除が行いやすいように、独立したファイルが設定ファイルとして存在
プログラムが設定ファイルを読み込むときに、ディレクトリ内のすべてのファイルを参照
logrotate の設定
設定できる項目-
対象ログファイル
- 更新タイミング(daily, weekly, monthly)
- ファイルのサイズ(minsize)
- ファイルの所有権(create)
- 保存する過去の世代(rotate)
その他-
更新時に実行するスクリプト(postrotate)
logwatch とは
ログは、様々な種類で様々なファイルへ出力
ログ全部の監視は困難
logwatch は、それらのログを「まとめる」
まとめたログは、ファイルに出力したりメールで送ったりすることが可能
logwatch の動作原理
/etc/logwatch/conf/logwatch.conf が設定ファイル
オリジナルは /usr/share/logwatch/default.conf/logwatch.conf
/etc/logwatch/conf/* のファイルを、オリジナルの設定に重ねて設定
ログファイルを直接管理する機能ではないので、 cron 等で指定、定時実行を指示
logwatch の設定
LogDir = /var/log ログの保存ディレクトリ
MailTo = usera 結果をメールするユーザ Detail = Low 報告の精度 Archive = Yes Range = yesterday 昨日のログファイル
をチェック
等の設定が可能
11 章のまとめ
logrotate の原理を学習 logwatch の原理を学習
12 章 ログ管理システムの構築実務
syslog の動作確認 syslog サーバの構築 syslog-ng の動作確認 swatch の動作確認 logwatch の動作確認 logrotate の動作確認
実習
本章では実習がメイン OS の設定は、ノートの通り
ログの動作
Apache-httpdサーバの動作確認-
service httpd start (サーバの動作開始)
- tail –f /var/log/httpd/access_log(ログの更新確認)
- ブラウザを起動し、http://localhostにアクセス
アクセスがあり、ログが更新されていることを確認
syslog の学習
この節の流れ Apache-httpd のログの出力を、 syslog に変更- Apache-httpd のログを syslog に向ける
- syslog で Apache-httpd を受信するに設定
ローカルホストでの syslog を、リモート環境で動作- 2 人 1 組で作業をするので、相手となる人のマシ
ンの IP アドレスを聞いておいてください
syslog の設定 1
Apache-httpd の設定‒ エラーのログは syslog に流すことができる。‒ アクセスログは、 syslog に流す為には細工が必
要
( logger コマンド)
syslog の設定‒ syslog.conf で設定‒ ファシリティは local5( access_log) と
local6(error_log) を利用
syslog の設定 1
Apache-httpd の設定‒ エラーのログは syslog に流すことができる。‒ アクセスログは、 syslog に流す為には細工が必
要
( logger コマンド)
syslog の設定‒ syslog.conf で設定‒ ファシリティは local5( access_log) と
local6(error_log) を利用
syslog の設定 2
2名 1 組になり、 syslog サーバを構築 マスターのマシンとサーバのマシンに役割分担
マスターのマシン側は、 Apache-httpd のログを syslog経由でサーバのマシンへ送信
サーバのマシン側は、ネットワーク経由でログ情報を受けとり、ファイルへ出力
syslog-ng の動作確認
インストール-
syslog-ngはCentOSのyumリポジトリには存在しない
動作確認-
作業内容は、Apache-httpdとsyslogと同一
- error_logは操作せず、access_logのみ操作
- syslog-ng.confの設定が、syslogと違う
swatch の動作確認 1
インストール-
リポジトリには存在していない
- Perlのスクリプトで、Perlのモジュールが必要
- PECLを利用しインストール
- gccがインストールされていることを確認
swatch の動作確認 2
設定ファイル/root/.swatchrc に設定を記述設定内容は、 ssh でのログインに失敗すると
ベルが鳴る
動作確認ssh localhost
で、ランダムなログイン名/パスワードを入力ログインに“わざと失敗”
logwatch の動作確認
インストール-
yum install logwatch
- CentOSはインストール済みのことが主流
動作確認 - --serviceオプションで、特定サービスのlogwatchの結果を得ることが可能
- 設定ファイルの方は、メールが必要なので、ここでは設定しない
logrotate の動作確認
既存のログを、 logrotate を使って更新 対象のログは、 Apache-httpd のログ Apache-httpd のログは、(標準の設定では) 1週間たたないと更新が発生しない
logrotate は最終更新日時の記録を持っているので、それを操作し、更新
12 章のまとめ
syslog サーバの構築 syslog-ng の設定・動作確認 swatch の設定・動作確認 logwatch の設定・動作確認 logrotate の設定・動作確認