mysql:10864
From: "zen kishimoto" <"zen kishimoto" <zen@xxxxxxxxxx>>
Date: Wed, 2 Feb 2005 10:10:07 -0800
Subject: [mysql 10864] Windows上でMySQL サーバーをセキュアーにする方法
Windows上でMySQL サーバーをセキュアーにする方法 http://dev.mysql.com/tech-resources/articles/securing_mysql_windows.html Mike Hillyer著 2005年2月1日 1. 初めに 2. ステップ 1: 最近のNTベースのWindowsにMySQLをインストール 3. ステップ 2: MySQLをNTFS ファイルシステムにインストール 4. ステップ 3: MySQLを他のサービスのないコンピュータにインストール 5. ステップ 4: MySQLの最新のプロダクション版をインストール 6. ステップ 5: MySQLのユーザー・アカウントをセキュアーにする 7. ステップ 6: TCP/IP アクセスをオフ * ステップ 6.1: Named Pipeの使用 * ステップ 6.2: Shared Memoryの使用 8. ステップ 7: TCP/IP アドレスのバインド 9. ステップ 8: サーバーをファイアーウオールで守る 10. ステップ 9: MySQLのサービスをルート以外のユーザで実行 11. ステップ 10: データ・フォルダーを暗号化 12. ステップ 11: 必要最小限のの特権を与える 13. ステップ 12: ルート・ユーザの名前を変更 14. 結論 初めに 2005年1月の最後にForbotと呼ばれるワームのようなマルウエア(malware) がインターネットに流され、拡大しました。これは正しくコンフィギュアーされて いないMySQLのインストレーションを探し、その弱みを利用して Windows のコンピュータに侵入します。 Forbotは他のコンピュータを感染 させ続けるための信号を受ける必要がないという点ではワームでは ありません。Forbotとそのコントロールするものとの交信が なくなるとbotの拡大は止まります。forbotに関する詳細記事は http://dev.mysql.com/tech-resources/articles/security_alert.html. ForbotがMySQLの弱みを利用していないことに注目してください。 将来の感染に備えてMySQLにパッチをあてる必要はありません。Forbotは ルートパスワードがないか、簡単に破られるようなパスワード でインストールされたMySQLを利用します。Forbotが破ること ができるMySQLのパスワードは例えば、abcd1234や 654321です。 (そういったパスワードのリストは www3.ca.com/securityadvisor/virusinfo/virus.aspx?id=41547を参照). MySQL ABはデフォルトのMySQLのインストレーションが出来る だけセキュアーであることを保障するプロセスを開発するのに 貢献します。カスタマーに対して技術アラートやアップデート を迅速に伝達します。しかし、今MySQLサーバー をセキュアーにする方法が幾つかあります。 この記事の意図は管理者がWindows上のMySQLのインストレーション をセキュアーにするステップを示すことです。ここで述べられて いるプロセスはWindowsのユーザ用ですが、ここでの要点はLinux やUnixのユーザに対しても有用です。ForbotはWindowsコンピュータ を対象にしていますが、将来この攻撃の亜流がLinuxやUnixのユーザに も及ぶこともあり得ます。 ステップ 1: 最新のNTベースのWindowsにMySQLをインストール Windows 2000, Windows XPとWindows サーバーServer 2003を 含む最近のNTベースのは前の版のWindows 95, Windows 98や Windows MEに比べてもっとセキュアーであり安定しています。 OSが最新のサービスパックやパッチを導入すること。 ステップ 2: MySQLをNTFS ファイルシステムにインストール NTFSは前のFAT32よりもっとセキュアーなファイルシステムです。 NTFSはアクセス・コントロール、大きいファイルとデータの暗号化 をサポートします。NTFSのFAT32に対する利点は http://www.ntfs.com/ntfs_vs_fat.htmを参照。 ステップ 3: MySQLを他のサービスのないコンピュータにインストール 実ビジネスではMySQLはMySQLのサーバー用に設置されたサーバー コンピュータにインストールされるべきです。必要とされないサービス は全て取り除き、必要のないアプリも実行されるべきではありません。 これはサーバーの安定性を増加するだけではなくて、MySQLへのリソース を増しますし、サードパーティのアプリがセキュリティの問題に なることも防止します。アドミ以外のログインもつくるべきでは ありません。 ステップ 4: MySQLを最新のプロダクション版のインストール この記事の段階ではMySQL 4.1.9 は最新のプロダクション版です。 新しいWindows インストラーがMySQL 4.1.5 でリリースされMySQL のインストレーションを容易にします。全てのユーザは4.1版に アップグレードすることをお勧めします。セキュリティのバグ 修理は前の版のMySQLにもポートされますが、最新版のMySQLL を使用することで、最も安定してセキュアーの環境を保障できます。 MySQL 5.0などのプロダクション版前のソフトをプロダクション用に 使用するのは好ましくありません。それは全てのバグが発見されて 修理されているという保障がないため、安定性を欠きセキュリティ レベルも減少するかもしれないからです。 ステップ 5: MySQLのユーザー・アカウントをセキュアーにする インストレーションのプロセスの最中に、プロンプトがあれば ルートパスワードを提供してください。更にルートパスワード が容易に推測されないようなもので文字、番号とシンボル から成り立っていることを確認してください。パスワードは最低 6文字で辞書にある言葉を含まず、文字は大文字と小文字を 含むべきです。 1つの方法は簡単に覚えられる語句を見つけます。そして それぞれの言葉の最初の文字を取り、他のシンボルと組み合わせて パスワードにします。例えば、「To be, or not to be: that is the question!」 という一節があるとします。これを利用して「2b,On2b:Titq!」 というパスワードになります。このパスワードはかなり強固で (少なくとも私がこれをこの記事で例に引くまでは)覚えやすいです。 将来のワームがこのテクニックを使って攻撃しないように あまり有名でない一節を使うことをお勧めします。 その他「Root May Only Connect from Localhost」と書いた箱に チェックマークを入れて、「 Create An Anonymous Account」 の箱のチェックマークを外してください。こうすることで、 MySQLのインストレーションのセキュリティを大幅に増大します。 既存のMySQLのインストレーションをもっとセキュアーに したい方は以下の方法で手動でanonymousアカウントを削除してください。 Enter password: ***** Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 1 to server version: 4.1.9-nt Type 'help;' or '\h' for help. Type '\c' to clear the buffer. mysql> use mysql; Database changed mysql> DELETE FROM user WHERE user = ''; Query OK, 2 rows affected (0.03 sec) mysql> FLUSH PRIVILEGES; Query OK, 0 rows affected (0.05 sec) mysql> その他ルートのアカウントは次のコマンドでlocalhostから のログインに限定できます。 Enter password: ***** Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 1 to server version: 4.1.9-nt Type 'help;' or '\h' for help. Type '\c' to clear the buffer. mysql> use mysql; Database changed mysql> DELETE FROM user WHERE user = 'root' AND host = '%'; Query OK, 2 rows affected (0.03 sec) mysql> FLUSH PRIVILEGES; Query OK, 0 rows affected (0.05 sec) mysql> これでlocalhostから接続できる1つのルートユーザだけとなります。 次をhostファイルに追加してください。(大抵は C:\WINDOWS\system32\drivers\etc\hostsにあります): 127.0.0.1 localhost これを入れておけばlocalhostの値を探せないときに ログイン・エラーを防げます。 ステップ 6: TCP/IP アクセスをオフ デフォルトで MySQLサーバーはどのホストからでもTCP/IPを使って 接続させます。(しかしもちろん、ホストの名前とIPアドレス によっては接続を拒否するかもしれません。)多くの場合 TCP/IPによる接続は必要ありません。そのためリモートから MySQLのサーバに接続することを防ぐためオフにすることも できます。MySQLをローカルに開発のために使用しているか ウエブサーバと共に使用しているのであれば、TCP/IPのネットワーク はオフにすべきです。 TCP/IP ネットワークをオフにするには、インストレーションの 際にDetailed Configuration オプションを選択して、Enable TCP/IP Networking オプションをチェックしないでください。 (以下をフォローすればサーバーを再びコンフィギュアーできます。 MySQL Configuration Wizard located at Start > Programs > MySQL > MySQL Server 4.1 > MySQL Server Instance Config Wizard). 古い版の MySQL のユーザは以下の行をMySQLサーバのコンフィギュレーション ファイルの[mysqld] セクションに追加してください。 skip-networking enable-named-pipes こうすればTCP/IP接続をオフにしてnamed pipesをオンに できます。 これが出来るためにはMySQLがNTベースのWindowsのコンピュータに インストールされている必要があり、mysqld-nt.exe サーバー のバイナリを使用します。コンフィギュレーション・ファイルの場所は MySQLの版によって違います。以下のどれかをみてください。 * C:\my.cnf * C:\Windows\my.ini ステップ 6.1: Named Pipeの使用 named pipeのサポートでサーバーが立ち上がって場合、以下の コマンドで接続できます。 C:\>mysql -h . -u root -p これはnamed pipeを使ってサーバーに接続します。 最近の(4.1以降)のサーバーだとコマンドラインに-h を 使用する他に--protocol=pipeオプション も使用できます。 C:\>mysql --protocol=pipe -u root -p それぞれのクライアント・ツールとAPIはnamed pipeで接続する際 は異なったシンタクスを必要とするかも知れません。それぞれの ツールとAPIに関してはnamed pipeで接続する際はマニュアルを参照してください。 ステップ 6.2: Shared Memoryの使用 named pipesのほかに MySQL 4.1はshared memoryによる 接続もサポートします。 shared memoryをオンにするためには 次の行をMySQLサーバーのコンフィギュレーション・ファイル の[mysqld] セクションに追加してください。 shared-memory MySQL Configuration Wizard にはshared memoryをコンフィギュアーする オプションがありません。そのため手動で追加となります。 MySQL Configuration Wizardのユーザは C:\Program Files\MySQL\MySQL Server 4.1\my.ini. にあるmy.iniを参照してください。 shared memoryでサーバーに接続するには次のようにしてください。 C:\>mysql --protocol=memory -u root -p ステップ 7: TCP/IP アドレスのバインド サーバーlocalhostからのリクエストしか必要ない場合でも TCP/IPのネットワークをオフにできない場合があります。1つの 例はnamed pipeやshared memoryでの接続をサポートしない ツールを使用するときです。そのような場合は以下をサーバー コンフィギュレーションの[mysqld]セクションに追加します。 bind-address=127.0.0.1 こうすればMySQLサーバーはlocalhostからだけのリクエスト に答えるようになり、コンピュータのネットワーク・インターフェース からのリクエストを無視します。 ステップ 8: サーバーをファイアーウオールで守る ハッカーからの第一の守備はファイアーウオールです。どのような 場合でもMySQLのサーバーはインターネットへ直接アクセスすべきで はありません。 サーバーがLANを介してクライアントによって アクセスされている場合はLAN上のほかのコンピュータから のアクセスを許しますが、それでもそのLANはポート3306 をブロックするファイアーウオールでインターネットから 分離されるべきです。 最低でもソフトのファイアーウオールをMySQLのサーバーに 設置すべきです。そのファイアーウオールはローカル のネットやその他の信頼できるIPアドレスから の接続のみを許します。理想的にはMySQLのサーバーと インターネットの間にはハードの ファイアーウオールを 設置すべきですが。 しかしこれはMySQLにリモートでアクセスできないというわけでは ありません。SSHのポート・フォワーディングを使用してMySQL のトラフィックをトンネルしてファイアーウオールを通り抜ける ことができます。SSH トンネルの記事は以下にあります。 http://www.vbmysql.com/articles/security/gui-tunnel.html ステップ 9: MySQLのサービスをルート以外のユーザで実行 デフォルトではMySQLサーバーのサービスは特権を持った ローカルのシステムユーザとして実行されます。 MySQL は その能力を制限するために制限されたユーザとして 実行することができます。これはセキュリティが破られたMySQLが 更に害をなすのを制限するためでもあります。 最初に強固なパスワードを持つmysqlというアカウントを 作成してください。Windows Control PanelのAdministrative Tools セクションの中のServicesウインドウを使ってサービスを 停止してください。サービスリストのなかのMySQLの項目を 右クリックしてください。そしてドロップ・ダウンメニューから ストップのオプションを選んでください。 サービス・ウインドウを最小化してC:\Program Files\MySQL\MySQL Server 4.1に あるMySQLディレクトリをブラウズしてください。 このフォルダーとその中身のパーミッションを変更してMySQLユーザだけ がアクセスできるようにしてください。フォルダーを右クリックして ドロップ・ダウンメニューからプロパティのオプションを選択して ください。Securityタブを選択してください。(もしなければ、Windowsの インストレーションは簡単なファイル・シェアリングを使用しています。 ToolsメニューからFolder Optionsオプションを選択して、View タブ へ移動してください。 Advanced Settingウインドウの底まで スクロールしてください。そして、Use simple file sharing boxを のチェックは外してください。): 最初は既存のユーザにはデイレトリーのツリーの上層部から受け継いだ 様々なパーミッションを持っています。これはAdvancedボタンをクリック しInherit from parent... boxのボックスをチェックしないことで 除去できます。プロンプトが出れば、Removeボタンをクリックして存在 するパーミションを除去します。 ユーザリストの下のAdd... buttonをクリックし mysqlユーザをMySQLインストレーションフォルダーにアクセスできる ユーザのリストに加えます。(そのパーミションは空の はずです。先ほど存在するパーミッションを全部除去しましたから。) mysql のユーザ名を入れてCheck Names ボタンをクリックしてください。 正しいパスとユーザ名を挿入します。そして、OKボタンをクリックします。 パーミションリストのFull Controlオプションリストをチェックしてフォルダーへ の完全アクセスを与えます。 Apply をクリックしてパーミションを与えます。その上貴方自信のユーザ アカウントへも同様のパーミションを与えます。そうしておけば後で コンフィギュレーション・ファイルを変更してユーザを変更することなく myisamchkなどのツールを使用できます。 一旦ディレクトリーのパーミションがセットされると、サービスリストに戻り、 MySQLサービスの項目を右クリックして、Log Onタブを選択してください。 This Account のラジオ・ボタン選び前に作成したmysqlのユーザの 情報を記入します。OK をクリックしてセッティングを有効にします。 それからサービスリストのMySQLサービスを右クリックしてStartオプションを 選択します。MySQL サービスがスタートして権限限定のユーザとして 実行します。 ステップ 10: データ・フォルダーを暗号化 MySQLデータベースに重要な情報を格納するユーザは、MySQLの データのディレクトリーを暗号化できます。暗号化はサーバー が実行中でなく、mysqlユーザとしてログインしているとき になされるべきです。プライベート鍵を損失した場合はデータへ のアクセスは出来なくなります。暗号化するとデータが 暗号化と解読のために性能が悪くなります。データと 性能の劣化を考えるとどうしても必要な時以外は、使用すること をお勧めできません。その際でも経験を積んだユーザに 限ります。 データの暗号化と最良の事例はここを参照ください。 http://support.microsoft.com/default.aspx?scid=kb;EN-US;q223316. ファイルはmysql Windows のユーザのために暗号化されます。外部の アプリケーションのmyisamchkなどはmysqlユーザとして ログインしなければこのデータファイルにアクセス出来ません。 ステップ 11: 必要最小限のの特権を与える 新しいユーザを作成して特権を与える時、大抵の場合はデータベースに 対して全ての特権を与えるか全ての特権をグローバルに与える 方が簡単です。ですが、これは避けるべきです。特権を与える場合 必要最小限に限るべきです。特権はデーターベースごとに 与えるべきです。そしてホストの名前には%は避けるべきです。 ユーザが192.168.1.0のネットワーク内で接続する 必要であれば、特権を「username'@'192.168.1.%」に与えます。 出来るだけ、権限を抑えて必要に応じて新たな特権を与えて いきます。 例えばクエリとデータを処理する「fictional」のデータベース用に 新しいユーザを作成する時は、以下のようにします。 mysql> GRANT SELECT, INSERT, UPDATE, DELETE ON fictional.* TO 'bob'@'192.168.1.%'; ステップ 12: ルート・ユーザの名前を変更 ルートのユーザの名前は「root」である必要はありません。大抵 のハッカーは「root」アカウントを狙ってきます。ですから、[root] アカウントがなければ防ぐことができます。ルート・ユーザのアカウント を変更するには次のコマンドを使ってください。 Enter password: ***** Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 1 to server version: 4.1.9-nt Type 'help;' or '\h' for help. Type '\c' to clear the buffer. mysql> USE mysql; Database changed mysql> UPDATE user SET user='bob' WHERE user='root'; Query OK, 1 row affected (0.19 sec) Rows matched: 1 Changed: 1 Warnings: 0 mysql> FLUSH PRIVILEGES; Query OK, 0 rows affected (0.23 sec) もちろんどの様な他の名前を使っても構いません。しかし、自分の名前を使うのは 良くないでしょう。というのも、ハッカーは自分の名前であれば それがルートの特権を持ったユーザだと思うからです。 結論 簡単な2−3のステップを踏めばWindows上のMySQLとそのデータを 悪意を持ったユーザから守ることが出来ます。 大切なステップ はデフォルトのユーザのアカウントのセキュリティを正しく 設定し、外部からのアクセスを制限し、強固なパスワードを 使用することです。更にサーバーのセキュリティを増加しようと いう人はMySQLを権限の低いユーザとして実行し、ルートの名前を 変えて、MySQLのデータのディレクトリーを暗号化すればよいのです。 Forbotのマルウエアは将来形を変えて出現する可能性が非常に高いです。 しかし、十分な準備と簡単ではあるがベストのセキュリティ・プラクティス があれば、新たな攻撃を防ぐことが可能でMySQLのサーバーを守ることが できます。 --------------------- Zen Kishimoto zen@xxxxxxxxxx IP Devices, Inc. (408) 567-9391 2175 De La Cruz Blvd., Suite 10 (801) 720-8847 (FAX) Santa Clara, CA 95050
-> 10864 2005-02-03 03:10 ["zen kishimoto" <zen] Windows上でMySQL サーバーをセキュアーにする方法 10865 2005-02-03 11:28 ┗[take_tk <CQK01016@xx] 「attacker」を「ハッカー(偉大なプログラマ)」と訳さないでくださいませ。 10866 2005-02-03 11:40 ┣["zen kishimoto" <zen] 10867 2005-02-03 11:49 ┃┗[Tomohiro 'Tomo-p' KA] 10868 2005-02-03 12:42 ┃ ┗[森下 克徳 <mokkosan] Re: 「attacker」を「ハッカー(偉大なプログ 10869 2005-02-03 12:49 ┗[Shinji Sato <subscri] Re: 「attacker」を「ハッカー(偉大なプログ 10870 2005-02-03 12:54 ┣[Shinji Sato <subscri] 10871 2005-02-03 13:03 ┣[Masakazu Nakano <n-m] 10873 2005-02-03 14:30 ┃┗[take_tk <CQK01016@xx] 10874 2005-02-04 00:23 ┃ ┗[Masakazu Nakano <n-m] 10872 2005-02-03 13:05 ┗[FUJII Hiroyuki <hfuj]