企業システムのセキュリティ管理運用と保守は、企業の情報技術システムとデータの侵入防止と漏洩防止作業を含み、すべてのCSOとCOOにとって重大な関心事である基本的な作業です。基本的なことではありますが、ひとたび対策が施されないと、企業に重大なデータ、経済的損失、評判の失墜をもたらすことになります。本稿では、企業システムのセキュリティ管理のために、非常に実用的で効果的な10のシステム強化策を提供し、より良い企業のシステム管理者を支援することができます事前に可能なリスクや脆弱性のシステムを発見し、対処するために、事前に企業システムの安全な運用を確保するように。
1、実行パスから". "を削除します。
スーパーユーザーモードでは、実行されるコマンドがユーザーの望むものであることを、ユーザーが明確にしなければなりません。次のシナリオを考えてみましょう。ユーザーがスーパーユーザーとしてログインし、ユーザーのパス変数が
.usr/bin:/usr/sbin:/bin:/sbin.
ユーザーはlsディレクトリに以下のコマンドを含むスクリプトを作成します。
/usr/bin/ksh/usr/bin/ksh
cp /usr/bin/ksh /tmp
chown root:bin /tmp/ksh
chmod 6755 /tmp/ksh
rm -f ls
/bin/ls $*
今、ユーザーAから電話があり、ホーム・ディレクトリに不明なファイルがあるとの問題が報告されました。スーパー管理者であるそのユーザーは、cd コマンドを使って自分のディレクトリに入り、ls -l コマンドを実行してチェックします。突然、ユーザーが知らないうちに、ユーザーAはシェルスクリプトを実行し、ユーザーのスーパーユーザー権限を得ることができるようになりました!
これはよくあることですが、避けるのは簡単です。ユーザーのパスに「.がない場合、ユーザはホームディレクトリにある ls という名前のスクリプトを見ても実行しません。
2.リスク回避スクリプト
/usr/bin/ksh/usr/bin/ksh
日付 > ログ
find . -mtime +7 -ls -exec rm -rf {} ˶; >> log 2>&1
行しかなく、そのうち2行しかコマンドを実行しませんが、セキュリティーホールがいくつもあります。
パスは指定しません。
日付のフルパスは表示されません。
ルックアップのフルパスが表示されません。
rmのフルパスが表示されません。
エラーチェックを行います。
カタログの正しさを検証するものではありません。
別のスクリプトがこれらの問題をどのように解決しているか、もう一度見てみましょう。
/usr/bin/ksh/usr/bin/ksh
cd /ディレクトリ exit -1
PATH=/usr/bin; export PATH
/usr/bin/date > log
>> ログ 2>&1
2行目のcd /directory exit -1は、kshにcdコマンドを使って/ディレクトリに入ろうとするよう指示します。コマンドが失敗した場合は、スクリプトを終了して-1コードを返す必要があります。Kshコマンドでは、これは「前のコマンドが失敗した場合」を意味し、&&は「前のコマンドが成功した場合」を意味します。追加の例として、touch /testfile echo Could not touch というコマンドを使って、/testfile という名前のファイルを作成します。ファイルが作成できない場合は、「Could not touch」と画面に表示されます。コマンド touch
/testfile && echo Created file で /testfile ファイルを作成し、touch コマンドが成功すれば、画面には「Created file」とだけ表示されます。ユーザがチェックする条件によって、&&を使うか&&を使うかが決まります。
スクリプトを実行し続けると、ユーザーは/ディレクトリに移動します。これで、ユーザーはユーザーのパスを明示的に指定できるようになり、ユーザーがフルパスを忘れた場合は、システム検索コマンドを使用してロックすることができます。この方法の例は、この小さなスクリプトにはありませんが、特に長く複雑なスクリプトを書くときには、慣れておくと良い習慣です。ユーザーがフルパスを指定し忘れた場合、ユーザーのスクリプトがトロイの木馬を呼び出す可能性は非常に小さくなります。
次に、ユーザは/usr/bin/dateというフルネームでdateを起動します。ユーザは、/usr/bin/findと/usr/bin/rmを完全に指定することもできます。このアクションを実行することで、ユーザは、トロイの木馬プログラムをユーザのシステムに挿入し、ユーザが気づかないうちに実行しようとすることを、より困難にすることができます。結局のところ、/usr/bin ファイルを変更するのに十分な権限を持っているのであれば、やりたいことを何でもできる権限を持っているのでしょう。
脚本を書く際には、しばしばこのような簡単なルールに従う必要があります。
必ずパスを指定してください。
各アプリケーションで使用されるフルパスを常に指定します。
特にrmコマンドのような潜在的に破壊的なコマンドを実行する場合は、常にエラーチェックを実行してください。
3.無視しがちな計画的タスクに目を光らせること
ユーザは、ユーザのシステムでどのジョブが無人で実行されているか知っていますか?システムがインストールされると、多くのオペレーティングシステムは、ユーザのために自動的にインストールと設定を行う様々な自動タスクを提供します。その他のジョブは、定期的に実行されるアプリケーションによって追加されます。
ユーザーのシステムを把握するためには、ユーザーがどのようなプログラムを実行しているかを明確に理解する必要があります。定期的に、ユーザーのスケジュールタスクリストファイルでどのプログラムが実行されているかを監査してください。多くのシステムは/var/spool/cronにスケジュールタスクファイルを保存しています。いくつかのスケジュールタスクデーモンは、cron.dディレクトリと同様に、時間毎、週毎、月毎、年毎のスケジュールタスクのファイルをさらにサポートしています。ユーザーのスケジュールタスクデーモンの正確な機能を調べるには、man cronコマンドを使用してください。
各ディレクトリのすべてのファイルをチェックします。ユーザーのスケジュールタスクデーモンがサポートしている場合、スケジュールタスクをロックし、それを使用する必要があるユーザーIDのみが利用できるようにします。実行中の各ファイルと実行時間を記録してください。スケジュールされた計画がユーザーにとって不明確な場合、そのファイルが何であるか、ユーザーがそれを必要とするかどうかを正確に判断するために調査してください。ユーザーが必要ないと感じているものを実行している場合、ユーザーに連絡し、理由を尋ね、それに応じて対処してください。
ユーザーのスケジュールされたジョブを継続的に追跡し、変更がないか定期的にチェックしてください。ユーザが何か変更されたことに気づいたら、その理由を調査して特定します。ユーザのシステムが何をしているかを追跡することは、ユーザのシステムを安全に保つための重要なステップです。
4.すべてのデーモンのログを記録します。
デーモンが最初の情報を記録しない場合、ログを記録しても意味がないことはよく知られています。デフォルトでは、ログを作成するデーモンと作成しないデーモンがあります。ユーザーがユーザーのシステムを監査する場合、ユーザーのデーモンが情報をログに記録していることを確認します。
どのようなパブリックデーモンでも、ログを記録するように設定する必要があり、ログを保存する必要があります。ユーザーのログサーバーによって収集されたログを見るために、ユーザーのサービスのいくつかにアクセスしてみてください。もしそうでなければ、そのサービスのオンライン取扱説明書を読み、ロギングを有効にするために必要なアクションを見つけてください。それを起動し、再度サービスを使用してみてください。すべてのログが記録され、保存されていることを確認するまで、ユーザーのすべてのサービスをチェックし続けます。
5.CISスキャンの実行
インターネット・セキュリティ・センターは、システム・セキュリティ・ベンチマーク・ツールを作成しました。www.cisecurity.org下载这个工具 から入手可能で、ユーザーは自分のローカル・システムを監査し、分析結果を報告することができます。このツールは、良い結果と悪い結果をスキャンし、スキャン終了時に総合ランキングを表示します。このスキャン・ツールは、Solaris、HP-UX、Linux、Windows、Ciscoルーターで利用可能です。
CISベンチマークの一番良いところは、彼らが与える説明です。レポートは単に「ユーザーが持っているもの、どれが悪いか」を述べるのではなく、なぜ悪いのか、その深い理由をユーザーに伝え、「悪いもの」を無効にするか、そのままにしておくか、ユーザーが自分で決められるようになっています。"悪いもの "を無効にするか、そのままにしておくか。ベンチマークツールは、ユーザーが考えもしなかったような多くのことをチェックし、ユーザーにシステムの詳細なレポートを与えるかもしれません。
これは、ユーザーのサーバーを健全に保つために定期的に実行することができる優れた情報セキュリティツールです。このツールの継続的な開発と変更に目を光らせるとともに、インターネット・セキュリティ・センターのウェブサイトをご覧ください。
6.操作中のスーパーユーザー権限の使用を避けること
サーバ上で実行されるサービスの多くは、その機能を実行するためにスーパーユーザ権限を必要としません。通常、これらのサービスはデータディレクトリの読み書き以上の特別な権限を必要としません。しかし、Unixのセキュリティ対策では、スーパーユーザ権限で実行されるオープンTCP/IPポートは1024未満でなければならないと規定されており、ほとんどの注目すべきポートが1024未満であるという事実と相まって、ユーザのデーモンはそのポートをスーパーユーザ権限でオープンしなければならないことを意味します。
このジレンマにはいくつかの解決策があります。まず、すべてのサービスを実行しないのが最も安全です。デーモンが実行されていないのであれば、スーパーユーザーとして実行する必要はありません。しかし、これはいつもうまくいくとは限りません。場合によっては、デーモンの実行サービスも提供する必要があります。この場合、デーモンを実行する専用のユーザーIDを作成し、できるだけ厳密に制御します。書き込み可能なディレクトリへの書き込みにのみこのIDを使用し、このIDに特に高いパーミッションを与えないでください。これで、攻撃者が脆弱性を悪用してユーザのサーバを攻撃し、ユーザのデーモンを侵害した場合、攻撃者は非特権アカウントへのアクセスを獲得し、スーパーユーザ権限を獲得するためにさらなる作業を行う必要があります。
7.高特権ファイルのスキャンと処理
すべてのシステムには、Set User ID(SUID)と Set Group ID(SGID)ファイルがあります。これらのファイルは、個々のユーザーIDやグループIDではなく、特定のユーザーやグループを使用してアプリケーション、スクリプト、デーモンを実行するために使用できます。topコマンドは、プロセス情報のためにカーネル空間をスキャンできるように、より高い権限で実行するコマンドの良い例です。ほとんどのユーザーはデフォルトの権限ではこの情報を読むことができないため、top はより高い権限で実行する必要があります。
多くのオペレーティングシステムでは、通常、ユーザーのシステムマウントファイルのコマンドを使用して、特定のディスクが SUID および SGID をサポートしないことをユーザーが指定できます。Solaris では、ユーザーは /etc/vfstab で nosuid コマンドを指定します。たとえば、nosuid コマンドを使用してディスク c2t0d0s3 に /users をマウントするには、ユーザーは次のコマンドを入力します。
この /users インストールは起動し、SUID および SGID アプリケーションを無効にします。アプリケーションは実行されますが、SUID および SGID ビットは無視されます。すべてのファイルシステムで SUID と SGID を無効にすることは、セキュリティ上の良い習慣です。
ただし、ユーザーは定期的にシステムをスキャンして、存在するすべての SUID プロセスと SGID プロセスのリストを取得する必要があります。SUID を検索するコマンドは -perms +4000 で、SGID を検索するコマンドは -perms +2000 です。サーバー全体のすべての SUID ファイルをスキャンするには、このコマンドを実行します。
# find / -type f -perms +4000 -ls
このコマンドは、各ファイルのSUIDビット設定を一覧表示します。このコマンドは、各ファイルのSUIDビット設定を一覧表示します。SUIDとSGIDが本当に必要なすべての出力とファイルをダブルチェックして確認し、そうでないものはためらわずに消去してください。
8.オープンポートの制御
ユーザがユーザのシステムを外部に公開する前に、ユーザはどのポートが開いていて接続を許可しているかを知る必要があります。ポートの中には、ユーザが知らないうちに開いているものがあるので、それを使ってユーザがサーバにアクセスする前に、ユーザがポートを閉じておく必要があります。ユーザのシステムが公開されていることをユーザに知らせるツールがあります。
Netstat ツールは、トラブルシューティングに使用できます。Netstat は、ネットワーク・ポート、ルーティング・テーブル、ネットワーク接続情報など、ユーザのネットワーク情報を表示するシンプルなツールです。これは、/etc/services がユーザーのシステム上で継続的に更新されていることを確認する良い理由です。netstat の機能を発見するには、ユーザーのシステムで man コマンドを使用してください。
これは簡単な例で説明します。
# ネットスタット
ローカルアドレス リモートアドレス Swind Send-Q Rwind Recv-Q State
server.smtp 192.168.3.4 6144 0 65700 0 CONNECTED
この例では、誰かがIPアドレス192.168.3.4からユーザーのサーバーのSMTPサービスに接続します。ユーザーはSMTPを実行すべきでしょうか。この人はサーバーへの接続を許可されるべきですか?主要な脆弱性に注意してください。ユーザーはリモート接続を開いており、少なくともTCP Wrappersセキュリティメカニズムで保護する必要があります。ユーザはそれを無効にすべきですか?
# netstat -a | more
UDP: IPv4
ローカルアドレス リモートアドレス 状態
localhost.ntp アイドル
TCP: IPv4
ローカルアドレス リモートアドレス Swind Send-Q Rwind Recv-Q State
*.telnet *.* 0 0 24576 0 listen
netstat を習得するために時間をかけることをお勧めします。使い方を覚えれば、ネットワークに関する豊富な情報を得ることができ、誰が、どの時間に、自分のシステムに接続しているかを明確に把握することができます。
もうひとつの便利なユーティリティは lsof ユーティリティです。最初は、どのプロセスがファイルを開いているかを表示する単純なツールでしたが、今ではポートやチャネル、その他の通信を表示するように進化しています。ユーザーが lsof ユーティリティをインストールしたら、試してみてください。lsof を実行するだけで、システム上で開いているすべてのファイルとポートが表示されます。lsof | grep TCP コマンドを実行すると、システム上の TCP プロトコルへのすべてのオープンな接続が表示されます。このツールは非常に強力で、ユーザーがファイルシステムをアンマウントする必要があり、ファイルシステムがビジー状態であることを報告している場合にも役立ちます。
9.集中ログサーバーの使用
ユーザーが複数のサーバーの保守を担当している場合、各サーバーのログをチェックするのは面倒です。このため、専用サーバーを設置して、他のすべてのサーバーのログメッセージを収集します。ユーザーのログを統合することで、ユーザーは1つのサーバーをスキャンするだけでよくなり、ユーザーの時間を大幅に節約できます。これはまた、ユーザのサーバが侵害された後の良いアーカイブファイルでもあります。
高速なCPUと多くの空きディスクスペースを使用するコアログサーバを作成します。syslogd以外の他のすべてのポートとサービスをシャットダウンしてください。おそらく、TCPでラップされたSSHデーモンを使って、ユーザーのワークステーションへのリモートアクセスを制限する以外は、このシステムが危険にさらされる可能性は最小です。それから、syslogdがリモートシステムからメッセージを受信できることを確認してください。これは、メッセージプロビジョニングサーバからメッセージプロビジョニングサーバに行くのとは違います。デフォルトでメッセージを受信するサーバーもあり、ユーザーはそれをオフにする必要があるかもしれません。
古いログやフォームファイルをアーカイブするシステムを作りましょう。ユーザのログが証拠として使用されることがある場合、ユーザはログが変更されていないことを証明できる必要があり、ユーザはログがどのように作成されたかを示す必要があります。ユーザーは、1週間以上のタイムスタンプ付きログをすべてzip圧縮し、CDなどの読み取り専用メディアにコピーすることをお勧めします。
ログを受信するサーバーができたら、そのサーバーを指すように別のサーバーを起動する必要があります。etc/syslog.confを編集し、ユーザがコピーしたい情報を決定します。最低でも、最高レベルの緊急度、緊急ステータス、重要情報、重要ステータス、警告情報、およびユーザーが有用と思うその他の情報をコピーする必要があります。ユーザーがコピーしたい情報が分かったら、以下のような/etc/syslog.confコマンド行を1つ以上追加します。
この例では、すべての最高度の緊急ステータス、緊急ステータス、重要情報、重要ステータス、警告、および異常が発生したログメッセージがリモートサーバーに送信されます。重要な注意点:ユーザは、同時にリモートサーバにログをアーカイブさせることができます。syslog.confは一致するエントリをすべてスキャンします - syslogdデーモンは最初のエントリを見つけただけでは停止しません。
10.ソフトウェアを最新の状態に保つこと
どんなソフトウェアにも脆弱性はあります。ほとんどのベンダーはコードを監査し、発見された脆弱性をすべて取り除きますが、中にはどうしても外部に漏れてしまうものもあります。これらの脆弱性を見つけようと多くの時間を費やす人もいます。ある人はベンダーに報告し、またある人は個人的に悪用します。
実際には、発見された脆弱性を修正するためにパッチが適用されることがあります。その脆弱性が深刻なものであったり、外界で悪用攻撃が知られていたりしない限り、これらのパッチのリリースが大々的にアナウンスされることは通常ありません。どのパッチがユーザーにとって適切で、ソフトウェアベンダーからダウンロードできるかを時々確認するのは、ユーザーの責任です。
HP-UXにはソフトウェア・アップデート管理ソフトウェア、Solarisにはpatchdiagとpatchpro、AIXにはSMITなどがあります。HP-UXにはソフトウェア・アップデート管理ソフトウェアがあり、Solarisにはpatchdiagとpatchproがあり、AIXにはSMITがあります。少なくとも月に一度は、ユーザー診断ツールを実行して、ユーザーのシステムがアップデート可能なパッチを確認し、それらをインストールする必要があるかどうかを判断してください。毎週日曜日の午後、少なくとも1時間はシステムメンテナンスに充てる時間を確保し、その時間を使ってパッチのインストールやその他の必要なメンテナンスを行ってください。
ユーザは、インストールされている各アプリケーションのバグフィックスやセキュリティパッチがリリースされたかどうかを確認するために、頻繁にウェブサイトをチェックする習慣をつけるべきです。先に作成したアプリケーションのリストを使用して、ユーザが利用可能なパッチがあるかどうかを判断してください。ユーザがパッチを更新したら、ユーザのリスト情報を更新することを忘れないでください。