OSS OSセキュリティ実務 - IPA 独立行政法人 情報処理推進機構

Download Report

Transcript OSS OSセキュリティ実務 - IPA 独立行政法人 情報処理推進機構

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 host2 port1 ssh –L による トンネリング 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 カーネル ファイル等のリソース

機能構成図 セキュア OS の 必要項目 最小特権 TE 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が標準 ‒ コンテンツをおくトップディレクトリを指定

ネットワークのアクセス権限  アクセス制御 order deny, allow deny allow from all from .example.com

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の文法・・・  スクリプトがブラウザに読み込み  気づかないうちに、スクリプトが動作  JavaScriptの内容によっては、危険な攻撃が可 能

XSSの発生メカニズム(例)  他のサイトに攻撃を仕掛けるスクリプトだったと 仮定 1.

悪意のあ るユーザ 2.

3.

一般の 閲覧者 4.

攻撃対象のサイト

XSSの防止方法 