私は、ASHマルチメディア研究会で、3年前からLinuxでサーバを運用しています。
当初、セキュリティには興味がなく、バックアップがあるからいいだろうと考え、何の対策もせずにサーバを運用開始してしまいました。
そのため、クラッカーに侵入され踏み台にされてしまいました。
そして、米国国防総省や、米国海軍から警告メールが来てしまいました!
セキュリティをちゃんとしていないと、何もしていないのに、加害者にされてしまいます。
自分の身は、自分で守るしかありません。
そこで、セキュリティの重要さを知り、自分達で勉強し、フリーソフトを使って対策をしました。
今では、このような私でも、なんとか、運用しています。
DoS(Denial of Service)アタックと呼ばれます。
標的の機器(サーバやルータ、クライアントのマシンなど)をハングアップさせたり、ネットワークのトラフィックを増大させたりなどしてネットワークの機能を麻痺させます。
IPアドレスを指定して、OSをハングアップさせるコマンドなどがあります。
ホームページ領域乗っ取り・掲示板荒らしなど、サイトのオーナーが提供するサービスを正常に実行できなくします。
また、CPUやディスクなどのリソースを消費したり、ネットワークに負荷を与えることにより、サービス能力を低下させられることもあります。
不正侵入により、root権限を奪取されると、すべてのファイルを削除されたり、機密データを書き換えられたり、どんなことでもされてしまいます。
同一内容のメールを多数送り付けたり、大容量のメールを送りつけたりして標的者のメールボックスを溢れさせ、正常にメール受信できなくします。
サーバが対応していないと、OSがハングアップすることもあります。
ネズミ講の勧誘・広告など無駄、あるいは意味のない内容のメール。メール受信のアクセス費用・時間が浪費されます。 数によってはメール爆弾同様の効果を引き起こします。
インターネットでは、いくつものサーバを経由してデータが転送されるため、その途中のサーバやネットワークで、こっそりデータの中身を見ることも、できてしまいます。
また、そのデータの内容を書き換えることもできてしまうため、データの改ざんや、なりすましをすることもできてしまいます。
不正な手段で、他人の通信データを参照することです。
他人の通信データの内容を書き換えることです。
他人になりすまし、その人のように振る舞うことです。
踏み台とは、サーバソフト及びOSのバグによるセキュリティホールを悪用したり、盗難IDなどの不正なアカウントを利用してサーバにログインすることです。
他サイトへの攻撃の踏み台、機密情報への不正アクセスなどが行われます。
踏み台にされると、何もしていないのに、加害者にされてしまい、クレームの対応などに追われることになります。
また、信用を損なうなどの被害が発生します。
他サイトへの攻撃・SPAMメールの中継など。攻撃された側からは、踏み台にされたサイトが攻撃したように見えます。
踏み台とは、不正侵入され、他サイトへの侵入や攻撃などのために利用されることです。
攻撃された側からは、踏み台にされたサイトが攻撃したように見えるため、クレームの対応などに追われることになります。
プロキシの設定によっては、第三者によって、匿名アクセスするために利用されることがあります。
SPAMメールの発信者として、ブラックリストに登録されたりして、信用を失ったり、クレーム対応に追われることになります。
セキュリティを堅くすると、それだけ使い勝手が悪くなってしまいます。つまり、安全性と利便性は、相反するものなのです。ですから、何が必要で、何が必要でないかを明確にすることが重要です。
セキュリティの設定は、基本的にすべて禁止し、必要なものだけを許可するようにします。
提供するサービスは、必要最低限とするべきですから、必要なサービスを明確にします。
サービスを提供する対象者は、限られた人にだけとするべきです。
セキュリティの設定を考える場合、サービスの種類とアクセス方向を考える必要があります。
アクセス方向とは、内から外へのアクセスか、外から内へのアクセスかということです。一般的に、内から外へのアクセスよりも、外から内へのアクセスの方が危険度が高いです。
ただし、内から外へのアクセスも、内部犯行の場合や、踏み台にされた場合などを考えると、必要最小限とすべきです。
アクセス制限は、1台のマシンだけでも対応できるセキュリティ対策ですので、必ず実行しましょう。
不要なサービスを停止したり、ルータやサーバのフィルタ機能を利用してアクセス制限を実施します。 inetdの設定を変更することにより、不要なサービスを起動しないようにします。 fingerなどは、内部の情報が漏れるので、できるだけ停止しましょう。 それから、ユーザやパスワードによる認証を行わずに通信する、UDP系のNFSやRPC(rsh)は、できるだけサービスを停止するべきです。
また、特定のユーザに対してのみサービスを提供する場合は、ポート番号を変更し、デフォルトのポートを閉じてしまう方法があります。 デフォルトのポート番号から変更することで、そのポート番号を知っている人しか、アクセスできないようにすることができます。 さらに、パスワードと同じく、ポート番号を定期的に変更するのも有効です。 ただし、ポート番号を指定できない一部のクライアントソフトでは、動作しなくなる場合がありますので、注意が必要です。
パケットフィルタリングとは、サービスの種類(ポート番号)と、アクセス先とアクセス元(IPアドレス)によってアクセスを制限する機能です。 フィルタリングでは、パケットのヘッダ部でのみチェックするため、パケットの内容は一切チェックしません。 ほとんどのルータには、このフィルタリング機能が付いています。 また、Linuxでは、tcp_wrapper が、デフォルトでインストールされています。 しかし、デフォルトではアクセス制限がかかっていない場合が多いので、設定する必要があります。
rootなどの管理者ユーザは、ネットワークから直接ログインできないようにします。
ファイアウォールとは、ローカルのネットワークをインターネットなど他のネットワークを経由した攻撃から防ぐ目的で設置する、文字通り「防火壁」です。
専用のハードウェアなどもありますが、高価なものが多いのが難点です(最近では安価なものも出てきてはいます)。
しかし、Linuxとフリーソフトを用いてファイアウォールを構築することもできます。
フリーソフトでも、一定レベルの安全性を求めることは十分に可能です。
ファイアウォールを構築するには、インターネットとローカルネットを論理的に切り離し、直接アクセスを出来なくする必要があります。
ゲートウェイマシンとは、複数のLANボードを入れ、内部ネットワークと外部ネットワークを接続するマシンのことです。
そして、ゲートウェイ・マシンにファイアウォールを構築して、セキュリティ上問題のあるデータを食いとめます。
そして、ゲートウェイ・マシンを使って、外部のインターネットと通信するには、必要なサービスのデータを中継する必要があります。 中継とは、グローバルなIPアドレスとローカルなIPアドレスを対応させて、書き換えて通信することです。 ゲートウェイを使って、中継する方法には、以下の種類があります。
ゲートウェイ上で、パケットレベルのフィルタリングを行い、データを中継するのが、サーキットレベルゲートウェイです。
サーキットレベルゲートウェイでは、フィルタリングと同じく、サービスの種類(ポート番号)と、アクセス先とアクセス元(IPアドレス)によってアクセスを制限します。パケットのヘッダ部でのみチェックするため、パケットの内容は一切チェックしません。
ASHでは、サーキットレベルゲートウェイとして、SOCKS5を使用しています。
SOCKS5とは、米NEC社で開発されたもので、TCP/IPレベルでデータの中継を行うものです。
ICQなどのツールをファイアウォール越しに動作させる場合などに必要になります。
また、VPN(Virtual Private Network)という機能で、インターネット越しに、仮想的なプライベートネットワークを構築することも可能です。
ゲートウェイ上で、アプリケーションレベルのフィルタリングを行い、データを中継するのが、アプリケーションレベルゲートウェイです。
アプリケーションレベルゲートウェイでは、ftpやpopやtelnetなどのコマンドを認識し、不正なコマンドは中継しないようにすることができます。
ただし、アプリケーション毎にきめ細かい制御ができる反面、中継ソフトが各アプリケーションに対応している必要があります。
ASHでは、アプリケーションレベルゲートウェイとして、DeleGateを使用しています。
Delegateは電総研が開発した多機能プロキシです。
ローカルネットからインターネットにアクセスするためのプロキシサーバー機能と、ローカルネットのデータをインターネットに公開するためのマウント機能があります。
対応しているプロトコルには、HTTP, Gopher, Whois, FTP, Telnet, NNTP, SMTP, POPなどがあり、TCP/IPのほとんどの中継処理をこれで行うことが可能です。
また、httpデータのキャッシュ機能や、各アクセスに対してアクセス制限機能や、ログの採取機能などがあります。
メールの中継は、双方向に対して同じポート番号で中継する必要があるため、専用のアプリケーションを使います。
ASHでは、メールの中継には、ゲートウェイのsendmailを使用して、転送しています。
データに対する脅威を防ぐためには、第三者に見られても内容が分からないようにし、改ざんされたかのチェックをし、また、相手が本当に目的の相手なのかを確かめなければなりません。
第三者に見られても内容が分からないようにするためには、通信データの暗号化という方法があります。この暗号化には、共通鍵暗号方式(暗号化と復号化に共通の鍵を使う方式)と、公開鍵暗号方式(暗号化と復号化に別々の鍵を使う方式)があります。
通信データの書き換えが行われていないか調べるためには、メッセージ認証を使って、通信データは途中で改ざんされていないかを調べる方法があります。メッセージ認証には、ハッシュ関数などを使います。また、デジタル署名を付けることにより、認証する方法もあります。
相手が本当に目的の相手なのかを確かめるためには、認証局の署名付き証明書を相手に送り、確認してもらう方式があります。つまり、自分の身元を信頼できる第三者に保証してもらうことで認証を行うわけです。認証局の署名付き証明書とは、自分の公開鍵等の情報を認証局の秘密鍵で暗号化したものを使ったりします。
暗号化は、盗聴を防ぐことができます。
メッセージ認証は、データの改ざんを防ぐことができます。
認証局による認証やデジタル署名によって、なりすましを防ぐことができます。
SSHは、Secure SHellといって、telnet、ftpの代わりとして利用できる暗号化ツールです。 rsh、rcpなどの、R系のコマンドと操作は同じです。
SSLとは、Secure Sockets Layerの略で、Webサーバとブラウザ間を安全に通信するため、Netscape社が提唱した通信手段(プロトコル)です。
機能としては、データの暗号化通信、通信相手を特定するための認証、通信データの書き換えが行われていないか調べるメッセージ認証の3つがあります。
現在、Netscape NavigatorやInternet Explorerなどに 実装されていますが、HTTPプロトコルのみ対象しているのではないので、TELNETやFTPなど他のプロトコルにも実装することが可能です。
SSLを利用して、Webデータを暗号化して転送する場合、一般にhttpsポート(443)を使用し、httpsサーバを立ち上げる必要があります。
ApacheなどのフリーのWebサーバでhttpsサーバを立ち上げるには、openSSLや、SSLeayなどのアプリケーションと、Apache+SSLのパッチが必要となります。
URLは、https://www.server.name/ のようになります。
PGPは、Pretty Good Privacyの略で、メールなどのデータの暗号化をするためのツールです。
PGPの暗号化では、公開キーと秘密キーがセットになっています。公開キーで暗号化したデータは、対応する秘密キーでしか解読できません。また、秘密キーで暗号化したデータは、対応する公開キーでしか解読できません。
ですから、暗号化して通信したい人は、ホームページ上で公開キーを公開するか、メールなどで公開キーを送り、その公開キーで暗号化するように依頼することで、暗号化して通信することができます。また、自分の作成したドキュメントを秘密キーにより暗号化し、公開キーと共に公開することで、そのドキュメントが改ざんされていないことを証明することもできます。
公開キーは、ホームページに公開したり、メールに添付しても問題はありません。
もし、改ざんされた場合は、解読できなくなるだけです。
MD5は、メッセージダイジェスト関数、または、ハッシュ関数と言い、データを要約したチェックサムのようなものです。 メッセージダイジェスト関数は、暗号化とは異なり、データのチェックにしか使えませんが、非常に高速であるという特徴があります。
バックアップ
ログのローテート
ログのチェック、チェックの自動化
セキュリティ情報の収集
コンピュータにとって、最も重要なのはデータです。サーバーとして運用する場合、その重要性はさらに高まります。そこで、重要なデータは2重に持っておき、主データに欠損などの障害があった場合でも、即座に副データでそれを補っていくことが必要になります。
その他には、ユーザー毎のログイン履歴を抽出して定期的にユーザーに送付し、ログイン履歴の確認をとることが挙げられます。
パスワードが盗難され、本人以外の誰かがログインしている可能性があるからです。
ログのチェックによって、以下のことを調べる必要があります。
ユーザ登録時に、そのユーザのアクセス権や、提供するサービス、アクセス範囲などを制限する必要があります。
また、登録したユーザに対する教育も必要となります。
簡単なパスワードを付けない、パスワードを人に知られないようにするなどの、基本的なことから教育する必要があります。
ホスト登録時に、そのホストへのアクセス範囲などを制限する必要があります。
セキュリティホールが発見された場合には、カーネルやアプリケーションのバージョンアップをする必要があります。
ただし、コストがかかる上に、機能のデグレードなどの危険性があるため、慎重な対応と十分なテストが必要があります。
そのため、ディストリビューションの対応を待つのも一つの方法です。
セキュリティのアウトソーシングも一つの方法でしょう。
障害対応には、決まった対応方法はないため、スキルが必要です。
ただし、いつでも、サービスの部分停止や、重要データの削除をできるようにする必要があります。
機密データは、盗まれるぐらいなら、捨てた方がいい場合も多いです。
最悪、ネットワークケーブルを物理的にはずすことも必要でしょう。
これは、クラッカーに対して、最強の方法でもあります。
また、情報収集だけは行なう必要があります。
障害が発生した場合の関係者への報告方法なども決めておくべきです。
セキュリティ上の問題が発生した場合は、JPCERTやIPAや警察庁などへの連絡することも必要です。
JP/CERT |
http://www.jpcert.or.jp/ |
IPA |
http://www.ipa.go.jp/SECURITY/index-j.html |
警察庁 |
http://www.npa.go.jp/ |