A Day In The Boy's Life -192ページ目

A Day In The Boy's Life

とあるエンジニアのとある1日のつぶやき。

昨今、個人情報漏洩やらサイト改ざんなどセキュリティ関連の話題を耳にしない日がないといっても言いぐらい多くなりましたが、サイト運営側にとってはその問題について特に気を使う領域になっています。


セキュリティと一言で言っても、様々な要因があってのセキュリティですので問題のないサイト作りというのは、なかなか容易なことではありません。

例えば、XSS(クロスサイト・スクリプティング)やSQLインジェクションは主にアプリ側に要因があったりしますし、アプリ側に問題がなくともミドルウェアに問題があり、サイト全体が脅威にさらされる事もあります。


今回紹介するNiktoは、そんなサイト上の様々な危険性を多角的にチェックしてくれるツールです。



Niktoとは?


Nikto (ニクトと読むらしい)は、オープンソースのセキュリティ診断ツールで、XSSなどのアプリ上に潜む問題から、ミドルウェアの設定など、多くのセキュリティ上問題となるであろう項目に対してチェックを行ってくれます。

Perlでかかれており、プラグインを独自に拡張する事も可能になっています。



Niktoの使い方


まずは、本家サイト からNiktoのソースをダウンロードし、サーバー上に展開します。

展開したディレクトリ内に、nikto.plファイルがありますので、それを実行するだけです。


実行するにあたっては、様々なオプションを指定することが出来ます。


# perl nikto.pl -h
Option host requires an argument
---------------------------------------------------------------------------
- Nikto 2.02/2.03 - cirt.net
+ ERROR: No host specified
-Cgidirs+ scan these CGI dirs: 'none', 'all', or values like "/cgi/ /cgi-a/"
-dbcheck check database and other key files for syntax errors (cannot be abbreviated)
-evasion+ ids evasion technique
-Format+ save file (-o) format
-host+ target host
-Help Extended help information
-id+ host authentication to use, format is userid:password
-mutate+ Guess additional file names
-output+ write output to this file
-port+ port to use (default 80)
-Display+ turn on/off display outputs
-ssl force ssl mode on port
-Single Single request mode
-timeout+ timeout (default 2 seconds)
-Tuning+ scan tuning
-update update databases and plugins from cirt.net (cannot be abbreviated)
-Version print plugin and database versions
-vhost+ virtual host (for Host header)
+ requires a value 

基本的な使い方としては、このような感じ。


# perl nikto.pl -host http://192.168.0.100 -o output.txt
---------------------------------------------------------------------------
- Nikto 2.02/2.03 - cirt.net
+ Target IP: 192.168.0.100
+ Target Hostname: 192.168.0.100
+ Target Port: 80
+ Start Time: 2008-07-12 17:12:54
---------------------------------------------------------------------------
+ Server: Apache/2.0.63 (Unix) mod_ssl/2.0.63 OpenSSL/0.9.7a mod_python/3.3.1 Python/2.4.4
- Allowed HTTP Methods: GET, HEAD, POST, OPTIONS, TRACE
+ OSVDB-877: HTTP method ('Allow' Header): 'TRACE' is typically only used for debugging and should be disabled. This message does not mean it is vulnerable to XST.
+ Apache/2.0.63 appears to be outdated (current is at least Apache/2.2.6). Apache 1.3.39 and 2.0.61 are also current.
+ mod_ssl/2.0.63 appears to be outdated (current is at least 2.8.30) (may depend on server version)
+ OpenSSL/0.9.7a appears to be outdated (current is at least 0.9.8g) (may depend on server version)
+ Python/2.4.4 appears to be outdated (current is at least 2.5.1)
+ mod_ssl/2.0.63 OpenSSL/0.9.7a mod_python/3.3.1 Python/2.4.4 - mod_ssl 2.8.7 and lower are vulnerable to a remote buffer overflow which may allow a remote shell (difficult to exploit). CAN-2002-0082.
+ OSVDB-3268: GET //icons/ : Directory indexing is enabled: /icons
+ OSVDB-3233: GET //icons/README : Apache default file found.
+ 4347 items checked: 9 item(s) reported on remote host
+ End Time: 2008-07-12 17:13:06 (12 seconds)
---------------------------------------------------------------------------
+ 1 host(s) tested

「-h」オプションの後ろに、チェックをかけたいサイト(必ず自分が管理するサーバーのみを対象とすること)、「-o」オプションの後ろに、レポートを保存したいファイル名を指定します。

その他のオプションもありますので、ヘルプを参照してみてください。



Niktoのレポートを読み解く


例えば、先ほど出力されたレポートを見てみると・・・


- Allowed HTTP Methods: GET, HEAD, POST, OPTIONS, TRACE
+ OSVDB-877: HTTP method ('Allow' Header): 'TRACE' is typically only used for debugging and should be disabled. This message does not mean it is vulnerable to XST.

「TRACE」のHTTPリクエストが許可されていますよ。これはデバッグの時だけ使うべきだから無効にしたほうがよいですよ。でも、これはXST(Cross Site Tracing)の攻撃が可能といっているわけじゃないからね。

という感じです。

Cross Site Tracingの危険性については、こちら(@鳩丸ぐろっさり (用語集)) に詳しく書かれています。


このTRACEメソッドのリクエストを受け付けなくする設定方法は、「ApacheでTRACEメソッドを受付けなくする 」を参考にしてみてください。


その他にも、


+ Apache/2.0.63 appears to be outdated (current is at least Apache/2.2.6). Apache 1.3.39 and 2.0.61 are also current.

※ Apacheの最新ソースのバージョンでチェックがかかるので、パッケージで管理している場合は、どうしても差が出てしまいますが。


+ OSVDB-3268: GET //icons/ : Directory indexing is enabled: /icons

通常であれば、必要ないはずなので設定ファイル(httpd.conf)を編集してディレクトリにアクセスできないように

しておきましょう。


+ OSVDB-3092: GET //manual/ : Web server manual found.

iconsディレクトリの対処と同様。


+ OSVDB-3092: GET /hoge/README.TXT : This might be interesting...
+ OSVDB-3092: GET /hoge/LICENSE.txt : License file found may identify site software.

恐らくファイル名を決め打ちしてチェックしているのだと思いますが、ライセンス関係のファイルに重要な情報が書かれている場合もありますので、そういうファイルは削除・移動するようにしておきましょう。


+ OSVDB-3233: GET //index.html.en : Apache default foreign language file found. All default files should be removed from the web server as they may give an attacker additional system information.

こちらも通常であれば不要なので、削除しておきましょう。


+ OSVDB-637: GET /~root - Enumeration of users is possible by requesting ~username (responds with 'Forbidden' for users, 'not found' for non-existent users).


ユーザーディレクトリは、Apacheの設定ファイルにて編集可能です。


<IfModule mod_userdir.c>
#
# UserDir is disabled by default since it can confirm the presence
# of a username on the system (depending on home directory
# permissions).
#
UserDir disable

有効にする理由がない限りは、アクセスできないようにしておきましょう。


+ OSVDB-397: HTTP method ('Allow' Header): 'PUT' method could allow clients to save files on the web server.
+ OSVDB-5646: HTTP method ('Allow' Header): 'DELETE' may allow clients to remove files on the web server.
+ OSVDB-0: HTTP method ('Allow' Header): 'CONNECT' may allow server to proxy client requests.
+ OSVDB-13431: HTTP method ('Allow' Header): 'PROPFIND' may indicate DAV/WebDAV is installed. This may be used to get directory listings if indexing is allowed but a default page exists.
+ OSVDB-425: HTTP method ('Allow' Header): 'PROPPATCH' indicates DAV/WebDAV is installed.
+ OSVDB-5647: HTTP method ('Allow' Header): 'MOVE' may allow clients to change file locations on the web server.

WebDAVを利用している場合、これらのHTTPリクエストを許可する場合がありますが、それ以外であれば特に必要ないはずなので、これらのHTTPリクエストは停止しておいた方がよいでしょう。


様々なセキュリティチェックを行ってくれますので、どのようなレポートが出るのか全て把握はしていませんが・・・。



サイトを構築してみたら、一度このようなツールでセキュリティ診断をしてみてもいいかもしれません。

くれぐれも自分が管理していないサイトに対しては使用しないこと。





電子メールは衰退するのか--取り巻く現状と生き残る道 @ CNET Japan


このブログでも過去に何回かこの手の話題を取り上げてきたんですが、Enterprise2.0元年といわれる(本当?)2008年を半年も過ぎてもなお、見えてきません。


が、一つだけはっきりしている事は、個人レベルでは既にメールからの脱却は大きく進んでいること、そしてこの手の話題の中心は、エンタープライズ分野においてであるという事です。

なぜかというのは簡単で、企業内のメール信者は個人レベルでのインターネットサービスの恩恵を受けていない人が多く、それに取って代わるような潮流を体験すらしていないからです。

体験した事のない人に、説明する事ほど難しい事はありません。


こういう風に、うるさくメールは死んだんだと叫んでいる私でさえ、会社に行けばメールを中心にコミュニケーションをとっています。

メール信者からメールが来るのだから。

だから、会社で使っているPCでOutlookが奇妙なビープ音をあげれば、取りあえずはメーラーの中身を確認するといった事はしています。


しかし、最近の変化としてある事は、一部ではWikiなどメール以外のコミュニケーション手段も取り入れており、それは若い世代を中心に受け入れられている事実もあるということです。

個人レベルで2.0系のツールを使う場合と、社内で2.0系のツールを使う場合として大きな違いがある事は、ネットへの接続性があると感じます。

どちらもネットにつながっている(一方はイントラネットですが)のですが、個人レベルでインターネットを楽しむ場合、それは常にあちら側を意識しています。

しかし、オフィスにいる場合の意識は、多くのドキュメントや書類作成に追われ、基本こちら側にあります。


個人レベルではあちら側とこちら側の隔たりはゼロに近いですが、オフィスにいる場合その距離は思ったよりも遠いのです。

この距離を埋める役割を果たすのが、今後しばらくの間はメールであろうと感じています。

どういうことかというと、例えば社内のWikiに情報を書き込んでもしばらくの間は誰もそれを見に来てはくれません。

デスクトップ内の状況に夢中で、意識があちら側にまで及びませんので。

って事は、いち早くその情報を関係者に伝えるためには、最も社内で浸透しているメールを介するというのが今のところ有効な手段となっています。


幾ら2.0系のツールといえど、メールと連携しているものが多いので、情報を書き込むとそれと同等の内容をメールでも送りつけることができたりします。

利用者はそのメールを受取って初めてあちら側に意識が移ります。

そして多くはその内容をメールで読もうとはしません。

なぜならメールで見るよりもWebで見たほうがはるかに見やすいからです。


このように、メールは単にユーザーにあちら側の情報が更新された事を通知するための機能しか利用されなくなる気がしています。

RSSリーダーでも同じ事はできますが、それは全てのメール信者が排除されない限り情報を一元管理できないため、一部煩わしさが残ってしまいます。残念な事に。


極端な話、こうなるとメール自身にさほど意味はありません。

先ほど言ったようにOutlookが奇妙なビープ音を鳴らしてくれるだけでよいのかもしれません。

メールの内容は見ずに、件名からWikiが通知したものだと判断できれば、すぐに社内のあちら側にアクセスするようになるかもしれません。


メールにとって代わるものはいまだ見えませんが、メールの生き残る道はそんなところではないかとも感じます。




ITは教室をどう変える? @ スラッシュドット・ジャパン


思えば、中3の時にPCの授業をやった記憶が。(かれこれ・・・じゅ・・15年前!?)

そのときはBasicの簡単なプログラムを組んで、たしかディスプレイ上に絵を書き表すという内容でした。

高校の時はPCの授業はありませんでしたが、今じゃ小学生の頃からPCの授業があると聞きますからね。

なんとも時代の変化を感じてしまいます。

(私が授業を受けたときはもちろんインターネットとかありませんでしたし、データの受け渡しは3.5インチのFDでしたが・・・)


もちろんPCは大人になるにつれ、必ず触れるデバイスですから子供の頃から授業をやるのは賛成です。

この記事にあるようにIMやGoogle Appsを使うというのはなんとも進んでいる授業だと感じますが、何よりもまずは子供たちにITリテラシーを身に付けてもらうことが重要かと感じます。


以前に書いた「当たり前時代の子供と携帯電話の付き合い方 」という記事の中で、(これは携帯の話ですが)福田総理が、子供が携帯を持つことを「ろくなことがない」と一蹴した記事を紹介しましたけど、PCも携帯も同じで子供たちにとって身近な存在となっており、それに触れることを排除する事の方が難しい状態になっています。


子供たちはろくにPCや携帯について、どういう利便性があって、どういった怖さがそこにあるのか、というのを大人から教えてもらう機会はほとんどないかと思います。

ですから、何も知らない子供たちは「ろくなことがない」使い方をしてしまう事もまた当たり前のことではないでしょうか。


私は子供がいませんが、インターネットの登場によって、子供たちの勉強方法も大きく様変わりしているのだろうと感じます。

昔なら、勉強の分からない事があったら、恐る恐る父親に聞いてみたりもしていましたが、今ではネットで検索した方が、時間を問わずより広範な知識を得る事ができます。

ここに問題があって、PCを使う子供とそうではない子供とでは、知識の吸収に差が出てきてしまうのではないでしょうか。


そういった情報格差が起きないよう、幼い頃から教育をするのであれば、国が教育指針をちゃんと作って一定のカリキュラムで子供たちに教育するべきだと感じます。