
連載:止められない基幹業務サーバの管理対策
第1回 不要なサービスの停止こそ管理の第一歩
三井物産GTI (現:三井物産セキュアディレクション株式会社)
木村 靖
2003/5/22
サーバ管理者の多くは、自分の運用するサーバに対して、第一にサービスが停止しないこと、そして第二に不正侵入されないことを願うだろう。特にここ数年は、不正侵入の事例が多く報告されていることから、いま一度サーバのセキュリティを見直し(再点検し)たいと思っている読者も中にはいると思う。
そうした場合、OSのリプレースから行い、セキュリティを考慮した設定を行うのが望ましい。しかし実際は、顧客などにサービスを提供したり基幹サーバとして24時間フル稼働している以上、そうやすやすと止めるわけにはいかないのが現実だ。もちろんサーバの冗長化を行っていればその問題はクリアされるが、ほとんどの場合、予算などの関係ですべてのサーバがそのような構成を取ることはできないだろう。
本連載では、現行動作しているUNIXサーバを対象に、稼働サービスの停止を最小限に抑えつつ、セキュリティを向上・維持するための一連の設定やツールを紹介する。
第1回の今回は、「不要なサービスの停止」について説明する。
| ※ご注意 本稿の内容を検証する場合は、必ず影響を及ぼさない限られた環境下で行って下さい。また、本稿を利用した行為による問題に関しましては、筆者および株式会社アットマーク・アイティは一切責任を負いかねます。ご了承ください。 |
|
セキュアなサーバへの第一歩 |
セキュアなサーバにするための第一歩として、最初にやっておきたいのが不要なサービスを停止することだ。このことは、サーバへの侵入の可能性を減らすためにもぜひ見直しておきたい項目の1つだ。
外部からの不要なサービスへのアクセスは、上位のルータやファイアウォールでブロックしているから大丈夫、と考える読者もいると思う。しかし、内部の別のサーバが侵入され、踏台として悪用されたときのことを考えるとどうだろうか……。その場合、いくら上位でブロックしようが関係なくアクセスされるため、不要なサービス経由で更なる侵入を許す恐れがある。もちろん、不要なサービスを提供するソフトウェアが、常に安全なバージョンで維持されていれば侵入されることはほとんどない。
しかしながら不要なサービスを起動することで、損はしても得をすることはまずないので、あれこれ考えるよりは、さっさと停止してしまう方がよいだろう。
|
現状を確認する |
最初に、現時点で起動しているサービスの確認から行う。UNIXでは実行プロセスと待機ポートの状態から知ることができる。
●実行プロセスの確認 (ps)
サーバ上でどのようなサービスが実行されているのかを知るためには、実行中のプロセスの状態を確認すればよい。プロセスの状態を確認する方法として、UNIXでは古くからpsコマンドが知られている。
psコマンドで指定するオプションは、UNIXの系統によって異なる。BSD系なら-aと-x、System V系なら-eと-fを併せて指定するとよい*1。両方とも出力される内容はほぼ同じだ。
| *1 UNIX互換OSであるLinuxの場合はちょっと特殊で、両方の形式に対応している |
・BSD系の場合
% ps -ax |
| -a:ほかのユーザーのプロセスも表示 -x:制御端末(tty)のないプロセス*2も表示 |
| *2 例えばinetd、Apache(httpd)、BIND(named)などのデーモンサービス |
・System V系の場合
% ps -ef |
| -e:すべてのプロセスを表示 -f:すべての情報を表示 |
例:実行中のすべてのプロセスを表示
% ps -ef……途中省略……rpc 522 1 0 May10 ? 00:00:00 portmap
|
出力結果の一番右の CMD(BSD psはCOMMAND)部分より、サーバ上で実際にどういったサービス(コマンド)が実行されているのかを特定できる。
なお、途中で切れているCMDの出力を知りたい場合は、-w(132行で表示)か-ww(すべて表示)オプションを指定すればよい。
% ps -efww | grep xinetd
|
上記例のpsコマンドの出力結果より、以下のサービスが稼働中であることが分かる。これらの中から、実際に不要となるサービスを特定し、停止する。
| プロセス名 | 不要となる条件 |
| portmap | RPCサービスを提供しない場合 |
| rpc.statd | NFSサービスを提供しない場合 |
| sshd | リモートログインを行わない場合 |
| xinetd | xinetdにより行えるアクセス制御などのインターネットサービスを行わない場合 |
| sendmail | メール受信を行わない場合 |
| cannaserver | 日本語かな漢字変換を行わない場合 |
| httpd | HTTPサービスを提供しない場合 |
●待機ポートの確認 (netstat)
稼働中のサービス(プロセス)の中でも、特に外部からのアクセスが可能なものについては十分な確認が必要となる。UNIXの多くは、netstatコマンドの-aオプションにより、サーバ上で待機中(listen)のTCP/UDPポートを確認できる。
% netstat -an |
| -a:すべてのソケットの状態を表示 -n:IPアドレスやポートを数字で表示 |
多くの情報が表示されるので、lessやmoreコマンドを使って画面をスクロールさせると見やすいだろう。
% netstat -an | less |
例:すべてのソケットの状態を表示
% netstat -an ……省略…… |
Protoのtcpの行のStateがLISTENであることや、udpの行のLocal Addressの部分が待機中のポートであることを示している。
例:待機中のTCPのみ表示
% netstat -an | grep "^tcp" | grep
LISTEN |
出力結果より、対象サーバ上で次のポートが待機中であることが分かる。これらの中から不要なサービスが利用している待機ポートを見つけ出す。
|
ポート番号
|
プロトコル
|
使用サービス(プロセス)
|
使用目的
|
| 22 |
tcp | OpenSSH (sshd) | リモートメンテナンス |
| 25 | tcp | Sendmail (sendmail) | メール受信 |
| 80 | tcp | Apache (httpd) | HTTPサービス |
| 111 | tcp、udp | portmap | RPCポートマップ |
| 443 | tcp | Apache (httpd) | Webサービス |
| 5680 | tcp | Canna (cannaserver) | 日本語かな漢字変換 |
| 32768 | tcp、udp | status (rpc.statd) | NFSサービス |
待機ポートで使用しているサービスの調べ方は、「連載 不正侵入の手口と対策」の“バナーチェックを行う”を参考にしてほしい。
●待機ポートとプロセスを同時に確認 (lsof, socklist, sockstat)
先述のpsとnetstatの両者を組み合わせたのが、lsof、socklist、sockstatといったコマンドだ。これらはpsやnetstatと異なり、OSに標準インストールされていない、あるいはOS固有になるため利用は制限されるが、運用上とても便利なので紹介しておく。
・lsofコマンド
lsof(LiSt Open File)コマンドの-iオプションを使って、実行プロセスが使用している待機ポートの確認を行える。このコマンドは、Linuxを始めそのほかのUNIXでも利用可能なので、インストールされていない場合はソースコード(パッケージ)を入手してインストールしておくとよいだろう。
# lsof -i -n -P |
| -i:ネットワークソケットファイルを表示。引数を指定しない場合は、すべてが対象となる -n:IPアドレスからホスト名への変換を抑止する -P:ポート番号からサービス名への変換を抑止する |
指定したオプションの-nと-Pは、netstatの-nと同義だと思ってよい。また、 -iオプションを指定する場合は、root権限が必要になる。
例:実行コマンドと使用している待機ポートをすべて表示
# lsof -i -n -P……
省略 …… |
出力結果より、例えばsshdは22/tcp、sendmailは25/tcpのポートを使用していることが分かる。
例:待機ポートの中で、25/tcpのみを表示する
# lsof -i tcp:25 -n -P
|
例:待機ポートの中で、1から1024までのTCP、UDPポートを表示する
# lsof -i :1-1024 -n -P |
例:プロセスID 522のコマンドに関する情報を表示
# lsof -p 522 -n -P
|
・socklist
socklistは多くのLinuxディストリビューションに含まれるPerlスクリプトで、lsofの簡易版といってもよい。オプションも特になく、root権限で単にコマンドを実行するだけだ。
# socklist
|
・sockstat
sockstatはFreeBSDに含まれるPerlスクリプトで、FreeBSD 3.1から提供されている。-lオプションを指定して、実行中のコマンドと使用している待機ポートの確認が行える。
% sockstat -l
|
| 「不要なサービスを特定する」 |
| 「連載:止められない基幹業務サーバの管理対策」 |
| index | |
| 第1回 不要なサービスの停止こそ管理の第一歩 | |
| セキュアなサーバへの第一歩 現状を確認する |
|
|
不要なサービスを特定する 不要なサービスを停止する |
|
| 第2回 ソフトウェアの現状確認とアップグレード | |
| 第3回 サービスをセキュアにするための利用制限 | |
| 第4回 スーパーユーザーの特権を制限する | |
| 第5回 管理者権限を制限するためのsuとsudoの基本 | |
| 第6回 特権ユーザーの安全性向上を行うsudoの設定例 | |
| 第7回 UNIXサーバの運用管理で欠かせないログ管理 | |
| 関連記事 | |
| 連載:Webアプリケーションに潜むセキュリティホール | |
| 特集:クロスサイトスクリプティング対策の基本 | |
| 連載:インシデントレスポンスはじめの一歩〜rootkitを検出するために |
- クラウド利用の根本にある1つの“問い” (2010/9/6)
いまだ定石のないクラウドセキュリティ。このコラムでは、さまざまな立場のプレイヤーがリレー形式で“クラウドセキュリティ”を語ります - Webを見るだけで――ここまできたiPhoneの脅威 (2010/8/26)
スマートフォンも常にアップデートを――iPhoneだって例外ではありません。iOSへの攻撃例を動画で解説します - 日本的なリスク回避策と、それに代わる技術 (2010/8/20)
持ち運べるデバイスには、さまざまなリスクがある。そのリスク回避の歴史と、回避のための技術動向を3回にわたり解説する - “感染後をケアするエンジン”の必要性 (2010/8/11)
ウイルスを検知する4つのエンジンの裏で、ひっそりと働くエンジンがある。エンジニアはなぜ、その製作に取り組んだのか
|
|
スキルアップ/キャリアアップ(JOB@IT)
スポンサーからのお知らせ
- - PR -
- - PR -
お勧め求人情報








