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/i ptablesindex.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 port1 ssh –Lによる トンネリング host2 port2 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の働き 従来のアクセス SELinux環境での アクセス プロセス プロセス アクセス権の確認 アクセス権の確認 Linux Security Module カーネル カーネル ファイル等のリソース ファイル等のリソース 機能構成図 TE 最小特権 セキュアOSの 必要項目 RBAC ドメイン遷移 強制アクセス制御(MAC) 監査ログ(AVC) 強制アクセス制御 「セキュリティ ポリシ ファイル」に、アクセスにつ いての記述 設定は、ユーザやファイル・ディレクトリのオーナ ではなく、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ログのフォーマット ログには次の内容が含まれる scontext=アクセスしたプロセスのドメインコンテキスト 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 deny from 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の設定・動作確認
© Copyright 2024 ExpyDoc