日本SELinuxユーザ会2007/8/3セキュアOSを実務で使うことに食指が動かない理由は、もしかしたら「キラーアプリの不在」なのではないだろうか。本連載では「日本のセキュアOSを支える5つのプロジェクト」でも取り上げられている、セキュアOSのキラーアプリになりうる可能性を秘めた日本発の拡張機能「SE-PostgreSQL」を紹介する。(編集部)SE-PostgreSQLが目指すもの情報システムのセキュリティを確保するうえで、アクセス制御はその中核となる技術です。身近なところでは、ファイルの所有者とパーミッションによるアクセス制御はその典型例ですし、データベースに対してはSQLのGRANT/REVOKE構文を用いてアクセス制御リスト(ACL)を設定することができます。これらの機能は各コンポーネントが独立に提供しているために、互いのアクセス制御ポリシーの一貫性を保証することができません。OS上のユーザー権限と、そのユーザーがデータベースにログインした際のデータベースユーザー権限には、一般的には何の関係もありません。システムに格納されている「情報」を不正なアクセスから保護するという視点で考えると、アクセス制御ポリシーが「情報」の格納方法、すなわちファイルシステム上に保持されているのか、それともデータベース上に保持されているのかという違いに影響されるのは好ましいことではありません。本連載でご紹介する「SE-PostgreSQL」は、OS(SELinux)の機能を利用してデータベースにアクセス制御を行う、PostgreSQLのセキュリティ拡張機能です。SE-PostgreSQLは、SELinuxがファイルやソケットなどOS管理下のリソースに対して実施しているのと同様に、テーブルやカラムなどのデータベースオブジェクトに対してSELinuxセキュリティポリシーに基づいたアクセス制御を行っています。このアクセス制御は既存のPostgreSQLのものとは独立に実施され、双方の許可がなければクライアントはデータベースオブジェクトにアクセスすることはできません。この関係は、ファイルシステム上での伝統的UNIXアクセス制御とSELinuxの強制アクセス制御の関係に類似しています。加えてSE-PostgreSQLは、行レベル/列レベルを含む「細粒度アクセス制御」と、データベースの特権ユーザーであっても回避不可能な「強制アクセス制御」という特長も有しています。リファレンスモニタの考え方をデータベースにも適用するSE-PostgreSQLの説明の前に、そのベースとなっているSELinuxのアクセス制御方式について触れておきたいと思います。一言でいえばSELinuxとは、Linuxカーネルに対するリファレンスモニタの実装です。リファレンスモニタとは、システム管理下のリソースに対する外部のソフトウェアからのアクセス要求を許可すべきか、それとも禁止すべきかの意思決定を行うモジュールで、セキュリティ分野では長い歴史のある概念です。enough)という3つの条件を満たしている必要があります。Linuxカーネルに対する唯一のアクセス要求の方法は、システムコールの発行です。SELinuxはシステムコールの実行をフックし、セキュリティポリシーがそれを許可しているかどうか検証を行います。これはすべてのユーザーにとって回避不可能で、root権限を持つユーザーに対しても例外なく実施されます。カーネルの一部として静的にビルドされたSELinuxは改ざん不可能であり、そのコード規模は1万行程度ですが、全部で800万行の規模があるLinuxカーネルと比較すると、十分に小さく検証可能なレベルであるといえるでしょう。SE-PostgreSQLは、リファレンスモニタの考え方をデータベース管理システム(PostgreSQL)に適用したものです。外部のソフトウェアがテーブルやカラムなど、データベース管理システムの管理下のリソースにアクセスするにはSQLを使用します。SE-PostgreSQLはすべてのSQLの実行をフックし、カーネルのSELinuxに問い合わせてセキュリティポリシーがそれを許可しているか否か検証を行います。このプロセスは、SELinuxがシステムコールに対して行っているものと同じです。アプリケーション自身がリファレンスモニタの機能を実装することで、SELinuxの適用範囲はカーネルだけでなく、ユーザー空間にも広がりつつあります。Windowのオブジェクトに対するアクセス制御を行うXACE/SELinuxがあり、これはすでにXorgの正式な機能として統合されています。全てのSQLクエリーがセキュリティポリシーによる検査を受けるSE-PostgreSQLを使ってみようそれでは、実際にSE-PostgreSQLをインストールして使ってみましょう。7システムへ導入することを前提にして解説します。SE-PostgreSQLのインストールに必要なのは、SE-PostgreSQL自身のRPMパッケージと、SE-PostgreSQL対応のセキュリティポリシーです。6システム用のRPMパッケージを提供しており、これらはSE-PostgreSQLプロジェクトのサイトからすべてダウンロードすることができます。最初に、インストールに必要な以下の3つのRPMパッケージの最新版を入手してください。sepostgresqlselinux-policyselinux-policy-targeted続いて、この3つのRPMパッケージをインストールします。-U(アップデート)を使用します。[100%]【注】Fedora標準のpostgresqlおよびpostgresql-libsパッケージも必要です。未導入であれば、これらのパッケージをFedoraのミラーなどから取得してインストールしてください。これらのパッケージには、psqlコマンドやlibpq.so.5ライブラリが含まれています。インストールしたSE-PostgreSQL対応版のセキュリティポリシーが、パッケージの自動更新によって標準のセキュリティポリシーに置き換えられることを避けるため、yumの設定ファイル(/etc/yum.conf)に以下の1行を追加します。「exclude=<パッケージ名>」の設定は、指定したパッケージを自動更新の対象から除外します。exclude=selinux-policy*次に、SE-PostgreSQLの初期設定を行います。SE-PostgreSQLは/var/lib/sepgsql以下にデータベースを配置しますので、このディレクトリを初期化する必要があります。以下のとおり「initdb」オプションでSE-PostgreSQLの起動スクリプトを実行してください。SE-PostgreSQLはデータベースオブジェクトのセキュリティ属性を格納するために、ディスク上のデータベースフォーマットを変更しています。従って、PostgreSQLのデータベースファイルとは互換性がないことに注意してください。]/var/lib/sepgsqlディレクトリの初期化が完了すると、SE-PostgreSQLサーバプロセスを起動することができます。ブート時の自動立ち上げを有効にする場合、chkconfigの実行も忘れないようにしてください。onこれでSE-PostgreSQLを起動できましたが、データベースを操作できるようにするにはもう少し作業が必要です。SE-PostgreSQLの初期化プロセスはデータベースの特権ユーザー“sepgsql”を作成します。これ以外のデータベースユーザーを作成するためには、一度sepgsqlユーザーになってcreateuserコマンドを利用するのがよいでしょう。ROLE【注】SE-PostgreSQLのデータベースユーザーの概念やデータベース認証の方法はPostgreSQLと変わりません。詳しい情報についてはPostgreSQLのドキュメントを参照してください。日本PostgreSQLユーザ会が翻訳版を公開しています。10が備える多彩なセキュリティ対策機能を丸ごと理解するには、5つのスタックに分けて順に押さえていくことが早道だ。連載第1回は、Windows起動前の「デバイスの保護」とHyper-Vを用いたセキュリティ構成について紹介する。WannaCryがホンダやマクドにも。(2017/7/11)2017年6月のセキュリティクラスタでは、「WannaCry」の残り火にやられたホンダや亜種に感染したマクドナルドに注目が集まった他、ランサムウェアを作成して配布した中学3年生、ランサムウェアに降伏してしまった韓国のホスティング企業など、5月に引き続きランサムウェアの話題が席巻していました。(2017/7/5)人員リソースや予算の限られた中堅・中小企業にとって、大企業で導入されがちな、過剰に高機能で管理負荷の高いセキュリティ対策を施すのは現実的ではない。Threat)対策の観点から考える。