text

システムの脆弱性の調査

ペネトレーションテストの基礎


1.ペネトレーションテストとは − 侵入前調査

コンピュータやネットワークのセキュリティ上の弱点を発見するテスト手法の一つで、システムを実際に攻撃して侵入を試みる手法。

実際の擬似攻撃(=ペネトレーションテスト)では、侵入できるか否かの確認だけではなく、

 ・どのような情報が取得できるのか
 ・Dos攻撃を受けた際の耐久レベル
 ・実際に侵入された場合にはどこまで汚染が広がるのか
 ・etc

といった調査を行い、調査の結果はレポートにまとめて結果報告、現状の報告、改善提案などを報告会で行う。

セキュリティ対策用のソフトを導入しても、設定が十分に施されていなかったり、間違った設定が施されているなどの理由で新たなセキュリティホールが見つかって攻撃手法が開発される場合がある。そこで、現在では多くのセキュリティ事業者が侵入テストサービスを提供しており、定期的にテストをすることによりシステムの安全を保つことができる。

余談ではあるが・・・
2002年にスタートした「住民基本台帳ネットワーク」においても、安全性確認のため侵入テストが行われた。長野県が独自に行なったテストでは「脆弱性あり」との結果が出たが、総務省が行なったテストでは「脆弱性は発見されなかった」という結果が出ており、見解が対立している。

2.ペネトレーションテストの実施方法

ペネトレーションテストは上記で述べたように、擬似的に侵入して調査する場合もある。裏を返してしまえば、ペネトレーションテストではなく、実際の不正アクセスする際にも活用できる技法、と言及できる。モラルを持った思慮分別に富んだ行動を心がけて欲しい。

大まかにペネトレーションテストは下記の工程を踏まえると実際の不正アクセスに近いテストが可能となる。

2-1.地道な調査 − ソーシャルエンジニアリング

ペネトレーションテストにしろ実際の不正アクセスにしろ、いきなりリモートのコンピュータからハッキングを仕掛けてくることはない。事前に、綿密な調査が執り行われるのだ。それが、『地道な作業』というもので基本的に『ソーシャルエンジニアリング』と呼ばれる手法。ひとことで表現すると、相手をうまく騙して本人しか知り得ない機密情報を引き出す。いわゆる『口頭欺術』というものがベースとなっている。

ソーシャルエンジニアリングが使われた事例を分析すると、幾つかのパターンが存在している。プロの詐欺師は、状況に応じて複数のパターンを組み合わせて相手を騙す。情報を盗まれないためには、個別の攻撃パターンを理解することが有効な防衛手段となりうる。

例えば、ユーザーのパスワードを引き出す方法として以下の手法が有名だ。

「当社の個人情報が流出したので、至急下記URLにアクセスし、○月○日までにパスワードの変更をお願い致します」

これは、フィッシング詐欺で使われる最も簡単なメールの一文だ。この文を読んで「こんなメールにだまされない」と思うだろう。だが、この一文にはソーシャルエンジニアリングで使われるパターンを見ることができる。

メールドロップ
メールアドレスに金融機関や利用しているオンラインショップを想起させるよく似たメールアドレス。
応用例として、会社のシステム管理者を思わせるメールアドレスや差し出し人名(=System Administrator)が記載されている。

ハリーアップ
期間を限定してメールを読んだ人を急かせる。
メールのタイトルが<至急!>とか<緊急>といった単語で始まるとより効果が高まる。

近年では、『AntivirusPro』というSpyWareをインストールさせる際にこの手法が用いられた。

プロの詐欺師はこのようなパターンを複数組み合わることで、相手の信頼を獲得し、必要な情報を引き出すのである。
それではソーシャルエンジニアリングで用いられる攻撃パターンを分類し、特徴を説明しよう。

■ネームドロップ

権威に弱い人間というのは意外と多い。相手がこのようなタイプだった場合詐欺師は、経営者や内部監査人、客先の担当者と偽って情報を引き出そうとする。組織で定められたルールがあっても、上司が例外処理を認めることの多い企業や情報管理が徹底されていない企業は、ネームドロップに対する防御が弱い傾向にある。また、この方法は情報を囲い込んでいるタイプにも効果があると言われている。特に、次に説明するハリーアップと組み合わされることが多い。

■ハリーアップ

相手に回答期限を迫って、考える時間を与えさせない方法。近年では「振り込み詐欺」がこの手法の典型で第三者に助言を求める時間的な余裕を与えない。その結果、限定された情報の中から結論を導き、必要な情報を引き出す。詐欺師にとっても必要な情報を短時間で入手できるメリットがあるが、本当に時間がない場合は、急ぎすぎて、失敗する可能性も高くなると言われる。

■フレンドシップ

ネームドロップは権威のある人間になりすます方法だが、フレンドシップは同僚や仲間であると偽り、情報を入手する。同僚のふりをすることで、相手が心を許し善意から情報を提供することを狙っている。ネームドロップの効果がない相手に使われる場合が多い。

例えば、アクセスポイントの電話番号、内線番号、支店コードといった情報は通常PCに記憶させ、自分で記憶していることはあまりない。そのため「誤って消した」と偽っても不審がられることが比較的少ない。また、情報を伝えた者は善意から行っているので、記憶に残らないという傾向もある。身内意識の強い部署は意識して注意すべきだ。

■ロングタイム

ハリーアップとは対照的に、話を長引かせることで相手に早く電話を切らせたい、という気分を高めて情報を引き出す。自分が電話を切れない立場にある場合には特に注意してほしい。

この手法を使う詐欺師は、入手したい情報を伝えれば電話を切ることができる、という雰囲気に巧みに誘導する。対応に疲れ、電話を切りたくなったころに「最後の質問」を投げかけられると、人は心が緩み、重要な情報を提供してしまうものだ(=ラストクエスチョン)。詐欺師にとっては時間がかかる手法となるため、あらかじめ話の内容を特に念入りに準備していることが多い。

■テクニカルワード

ハリーアップとは対照的に、話を長引かせることで相手に早く電話を切らせたい、という気分を高めて情報を引き出す。自分が電話を切れない立場にある場合には特に注意が必要だ。

この手法では専門用語を多く盛り込んで話をする。これを単独で使用することはなく、仲間意識を高める手段として使うことも多い。ここから「フレンドシップ」へと展開させたり、「ロングタイム」を実現させる手段となる。特に情報システムには、固有のシステム名や専門用語が多く使われている。固有のシステム名などを挙げて話をされると、普通の人なら電話の相手を身内であると誤解してしまう。

■バッファオーバーフロー

相手に対して多くの情報を詰め込み、理解の範囲を超えさせて情報を引き出す方法。相手が特定の分野に詳しくない場合は、専門用語を多用するとその人が会話の内容を理解できなくなってしまう。日本語で説明できる内容を、あえて英語の略称を使うことで理解を困難するといった方法が典型的なものだ。

テクニカルワードのところでも言及したが、とかく情報システムには英語を使った専門用語の略称が多く存在している。一般の社員に、RAS(リモートアクセスサーバ)、トークン(ワンタイムパスワードの生成装置)などIT特有の言葉を多用して話すと混乱してしまうことが多い。

■ギブアンドテイク

相手の欲しがる情報を先に与えて、情報を交換する手法。まず詐欺師は相手が欲しがっている情報は何かを聞き出し、その情報を先に教えてしまう。相手は感謝の気持ちも手伝って、貸しを返そうとする。そんな心理的な状況を作り出し、情報を引き出そうとする。

仮に、伝えてはいけない情報を教えてしまったことに気付いて、その事実を意識的に隠そうと振る舞うと、反対にその事実をネタに、より機密性の高い情報を引き出そうとする場合もある。

■ラストワン

連続で単純な質問をして相手を油断させ、最後の質問で目的となる情報を入手する方法だ。ロングタイムとも似ているが、ロングタイムは時間をかけて行う一方で、ラストワンではあまり時間をかけない。

例えば、公的な調査やアンケートと称して、事務的に単純な質問を次々と出していく。相手も単純な質問なので次々回答し、最後に肝心な質問をされても気付かずに答えてしまう傾向にある。

2-2.地道な調査 − トラッシング(ゴミ箱あさり)

ハッカーを扱った映画などでも見かけることもあり、ソーシャルエンジニアリングと聞いて多くの方が最初に想像した手法ではないだろうか。名前のとおり、ゴミ箱(=紙ゴミ)から情報を収集するという方法だ。清掃業者のアルバイトになったり、従業員や清掃業者になりすまして建物に侵入する。
これは、実際にハッキングを仕掛ける人間が行う必要はない。清掃業者のおばちゃんと友達になって、日給よりも高めの『お小遣い』を渡して”○○階の紙ゴミだけを持ってきて欲しいんだ”と頼むと、案外簡単に手に入るものだ。

『ゴミ箱あさり、なんて不潔でやりたくない』と思うかもしれないが、紙ゴミならば不潔ではない。ゴミあさりによって電子メールの内容を印刷した紙、非公開の設計図などがトラッシングによって収集されていたという例がある。また、紙ゴミと一緒に電子媒体(フロッピーディスク、CD-R、など)が含まれていることがおおく、暗号化されていない営業顧客データや計画書が多数発見されている。トラッシングによる情報収集は現在でも通用する、有効な情報収集手段といえる。

『当社は紙ゴミはすべてシュレッダで裁断して廃棄しています』とトラッシング対策を謳っているところもあるだろう。実際、大手企業ならばたいていシュレッダによる裁断処理が行われている。世間では、シュレッダで裁断すれば安全、と盲信しているところがある。
シュレッダで裁断された紙片をジグゾーパズルの要領で復元することは実際に可能だ。2ミリ×5ミリ大の大きさに裁断された紙片をA4の大きさに復元するのに大人が根詰めて行えば1人でも3日もあればできてしまう。慣れている人ならば、その半分くらいの時間で済む。

対策としては、情報の書き込まれている事が多い紙ゴミなどはすぐに廃棄処分しないで、一定期間プールする。それも、期間毎に分類しておくと良いだろう。
例えば、各部署ごとに3週間紙ゴミをプールし、1週間単位で分類しておく。廃棄の時に一度にまとめて捨てるのではなく、1週目・2週目・3週目をゴミをブレンドし通常の1回分の廃棄量だけ捨てていく。この際、他部署のゴミとブレンドするとより効果が高まる。この方法で廃棄した紙ゴミならば上記のジグゾーパズル方式のデータ復元が非常に難しくなる。

紙ゴミだけでなく、不燃ゴミとしてHDDが捨てられることもある。
HDDの場合、さすがに機密情報が入っていることは認識しているところが多く、ディスクをフォーマットしてから廃棄している企業が多くなった。
HDDのフォーマット処理について、誤解している人が多い。ディスクのフォーマットをすれば、確かにそのディスクはデータが消えて読み込めなくなっているように見える。通常のオペレーションでは、消去したデータを読み出すことはできない。しかし、市販のデータ復元ソフトを用いることによってディスクフォーマットによって消去したはずのデータが再び読み出せるようになる。物理フォーマットをしても、同様に読み出すことができる。情報漏洩対策として、市販のデータ復元ソフトで復元できないようにデータを消去するデータシュレッダソフトというものがあるが、単価が高額のためどこの企業でも導入でいるというわけではない。

市販ソフトで復元できないお手軽な、データ消去方法を下記で紹介する。

■物理的破壊

ハンマーで叩いたり、床にたたきつけたりして物理的に壊す。
騒音が気になる場合は、電子レンジでチンすると同様に破壊することができる。

■ダミーデータの書き込み

例えば、Windows用のHDDならば、別のOS(=Linux、BSD、MacOSX・・・、etc)をインストールする。その後、再度Windowsをインストールして1週間程度機密情報が入らない程度に使ってから、再度パーテーションの解放及びフォーマットして廃棄する。
OSが異なればファイルシステムの違いからフォーマット形態が異なる。新規インストールしたOSで上書きして基のデータを書き潰しているので市販のデータ復元ソフトではデータの復元はできなくなる。この段階では、OSによって書き込まないHDD領域があるので、確実に基データが書き潰れたとは言えない。そこで、再度Windowsをインストールした後、適当に使うことで適度にダミーデータで書き潰したことになる。廃棄する前に、ディスクパーテーションの解放とフォーマットを行うのは偽装である。ゴミあさりで回収したHDDからデータを復元してもダミーデータしかない、ということになる。

このように廃棄したゴミからデータが復元されることを前提にゴミを廃棄することが好ましい。

2−3.地道な調査 − 管理者買収

ソーシャルエンジニアリングの方法の1つなのだが、ターゲットに協力者を作るという方法。外向けのセキュリティが堅牢でも内向きのセキュリティは案外脆弱なものとなっているのが通例だ。
企業のセキュリティ問題のうち最も危険な存在が不満を持つ社員だ。同じ職場で働く同僚がIDやパスワードの管理がズサンであれば、簡単に入手できる立場にいるのだ。より、危険な存在となるのが、システム管理者となる。

労働基準法の対象外と言わんばかりの勤務は当たり前、その割には給料が思いの外安い。少しでも、システムの調子が悪ければ自分のことは棚上げにして鬼の首でも取ったかのように、クレームの雨あられ。仕事に不満が出ないわけがない過酷な労働環境だ。

このような、お疲れ気味のシステム管理者につけ込む方法が『管理者買収』だ。
最も、近年ではあからさまな買収には乗ってこない。そこで、簡単なアルバイトと称してパスワードやキータイプを記録するスパイウェアやボットネットのプログラムを会社で使用している管理者のパソコンで実行させる。正常な判断のできる人間ならば、この手のソーシャルエンジニアリングにのらないものだが、会社に不満があったりすると容易にのってくる。
また、ボットネットやスパイウェアの実行であることは伏せておいて、自作プログラムのテストと言っておくと、自分が買収されているという認識はなくなるので快く協力してくれたりする。

2−4.コンピュータを使用した調査 − 脆弱性調査

ようやく、コンピュータを使用しての工学的な技術公使による調査となる。多くの方が想像するサーバーやネットワークに対してのペネトレーションテストやハッキングの作業部分だ。

■システムで稼働しているサービスの調査

『ペネトレーションテストの実施』で詳細は述べるが、調査対象となるシステム(=サーバー、ネットワーク)でどのようなネットワークサービスが稼働しているのかを調査する。例えば、対象のサーバー上でWebサーバーが稼働しているか、SSHが稼働してリモートログオンが可能な状態かを調査する。

■ユーザーリストの作成

調査対象のサーバーで利用できるユーザーアカウントを調査し、使用しているパスワードが脆弱なものであるかを調査する。
例えば、ユーザー名とパスワードが同じだったり、パスワードがユーザー名から推測できるかを実際にログインを試みて調査する。

■サーバーの設定ミスを調査

サーバーやネットワークが正常に稼働していると見落とされがちなポイントだ。
正常にサーバーアプリが動いているからと言って設定が正しいわけではない。動作を目で見るだけでは分からない、設定ミスによるセキュリティの脆弱性を洗い出す作業

3.ペネトレーションテストの実施 - 概要編

実際のペネトレーションテストがどのようにして行われているのかを、下記のスタンダードなネットワーク図を用いて説明する。

ペネトレーションを行う場合、上図のような配置で行う。「Audit PC」という名前が振られているのがツールがインストールされている調査用PCでペネトレーションテストを行う人間が持ち込むPC。それ以外は調査対象となる。

検査のパターンを大まかに説明すると

■外部ペネトレーション

上図の『Audit PC 1』を用いて外部ネットワークからインターネット経由でRouter、Firewall、Server 1, 2に対してペネトレーションテストを行う。

目的

インターネット経由からRouter、FirewallおよびFirewallに守られている筈のDMZ領域内のServer 1, 2に対して検査を実施する。
外部からのアタックを想定したもので、Firewall自体のセキュリティレベル、フィルタリング状態は適切か否か、Firewallを挟んだ状態でDMZ内にあるサーバに対してどのような攻撃、情報取得が行えるか、ということを検査し可能な場合は大きな被害を与えない程度に実際の侵入行為を行う。一番スタンダードなペネトレーションと言えます。

■内部ペネトレーション

DMZに設置された『Audit PC 2』を用いてRouter、Firewall、(DMZ内の)Server 1, 2に対してペネトレーションテストを行う。

目的

DMZ領域内から検査を行うためFirewallに守られていない状態となる。直接サーバーにアクセスしてServer 1, 2のセキュリティレベルを検査する。
Firewallでのパケットフィルタリングが行われていないため検査対象の様々なポートと通信できるため『外部ペネトレーション』と比べ侵入できる可能性が大幅にアップする。
普段どれだけFirewallの恩恵を受けているのかを実感することが出来る。

このペネトレーションでは上記の『外部ペネトレーション』で行ったFirewallに対しても検査を行う。
外部から行っているのにDMZからも再度行うのか。
『外部ペネトレーション』はインターネット経由からどのようなフィルタリング状況かを検査するのに対して『内部ストレーション』はDMZからインターネット、DMZからLANへのフィルタリング状況を検査する。通常、DMZからLANへの通信は行えないように設定されているものなのだが、それが適切に行われているかということを第三者的に検査し、確認を行うことに意味がある。

■LAN内ペネトレーション

『Audit PC 3』でLAN内からFirewall、Server3, 4「Client 1, 2に対してペネトレーションテストを行う。

目的

LAN内からLAN内に設置された外部公開されていないサーバ(DBサーバやファイルサーバなど)や内部の人間が使用しているクライアントPCに対して検査を行う。
外部公開されていないサーバに対しては一般のクライアントPCと同じ条件で接続しどのような攻撃が有効、またはどのような情報を取得できるかということを検査する。
クライアントPCに対しても同様に行う。Firewallに関してはLAN内からDMZ、LAN内からインターネットに対してどのようなフィルタリング状況かを確認する。
『外部ペネトレーション』、『内部ストレーション』、『LAN内ペネトレーション』はいずれもFirewallに関して検査を行うが、それぞれ別の通信元、通信先となっている。

この『LAN内ペネトレーション』は内部犯行やウイルスなどの悪意のあるプログラムの攻撃を想定して行う。

4.ペネトレーションテストの実施 − 実践編

ここでは、実際の『外部ペネトレーション』、『内部ストレーション』、『LAN内ペネトレーション』で共通する調査作業を解説していく。実際に、3種類のペネトレーションテストを実施する際には上記で述べたように調査用端末(=Audit PC)の設置場所や調査対象を適宜変更して実施していただきたい。

4−1.システムの調査 − nmapで稼動しているサービスを調べてみよう!

■nmapとは

nmap(=Network Mapper)とは、オープンソースのネットワークセキュリティツールである。
本ツールはネットワーク上のサーバーが、どの様なサービスを提供しているか、対象のネットワーク上でどのサービスをどのサーバーが提供しているのかをリモートネットワーク越しでの調査の実施を可能にするツールだ。

サーバーやネットワーク上でどのサービスを提供しているかを調べることが、なぜセキュリティの確保につながるのか?

多くの場合、使っう必要のないサーバーアプリがソフトが稼動して不要なサービスが知らぬ間に提供されていることがある。近年、急速に普及したFedora Core系のLinuxでは初期インストール状態で実に様々なネットワークサービスが稼動していたりする。管理者が意図しないサービスの提供は不正アクセス者に悪用されるなど、セキュリティリスクを高める要因となっている。また、不正アクセス者がサーバー上でトロイの木馬などを実行し、管理者の意図しないうちに不正アクセスを助長するようなサービスを稼動させてる可能性も十分考慮される。
管理対象のサーバーやネットワークでどのようなサービスが提供されているのかを調査することがツールによって実施可能ならばいち早く上記のようなセキュリティ侵害を発見することができ、深刻なセキュリティリスクからの回避をすることを可能とする。

ネットワーク管理のための技術や道具はネットワークの安定したサービス供給には必要不可欠だが、技術の適用目的を変えると、ネットワークやシステムへの攻撃手法となることを、十分に理解しておこう。

■nmapによる走査の実行

nmapの実行時にオプションを指定することで対象への調査方法を細かく指定することが出来る。今回は、基本的なペネトレーションテストで使用するオプションを紹介しておく。

# nmap -sT -P0IP -A -O -oN ./log ターゲットのIPアドレス

 -sT ・・・ TCPフルコネクトスキャン

おもなものにTCP Connect() HalfOpen等がある。その他にも、TCPスタックを利用した特殊なスキャンがあるが、それらは後述する。
各ポートに対して、実際にTCP接続をおこない接続の可否によってポートの開閉状況を調べる手法。
スリーウェイハンドシェイクを完了させるTCP Connect()スキャンの他に、スリーウェイハンドシェイクの途中で終了(SYN+ACKを受信後、RSTパケットを送出する)させるhalfopen(Synスキャン・ステルススキャン)等がある。

halfopenでスキャンする場合は、『-sT』ではなく、『-sS』とオプションを指定する。

通常、これらの手法による結果の差異は無いが、特殊なNW機器を挟んで(FW,LB)スキャニングした場合等はこの限りでは無い。
Halfopenは接続を完了しない為、ログに残りにくいというメリットがある。(ただし、フィルタリングソフト・ファイアウォール等のログにはまず残るので注意!)
TCPスキャンの場合、応答結果は大きく下の3つに分けられる。

OPEN

対象に対してTCPコネクションが確立できたことを示す。
接続できた場合は、検査対象上でそのポートを利用するサービスが起動していると考えられる。
ポートスキャナの種類によっては、接続時にprobe文字列を送出し、バナー情報などを取得する機能を持ったものもある。
提供サービス以外のポートが外部からopen(接続可能)である事は推奨されない。またnmapの場合はopenと表示された場合も、実際に検査対象がopenであるとは限らないので注意が必要である。

CLOSED

対象に対してTCPコネクションが確立できなかったことを示す。
通常提供していないポートへの接続要求がきた場合、検査対象は接続不能を示す為にRSTフラグがONになったパケットを送出する。
RSTパケットを受信した場合、対象ホストの該当ポートでサービスを提供していない事がわかるが、これもまた必ずしも確実な情報では無いことに注意。
(ファイアウォールやパケットフィルタリングソフトがセッションを切るため等にRSTパケットを送出している可能性もある。送出されたRSTパケットが、本当に検査対象から送出されたかどうかの判断は難しい)

余談であるが、 外部からの未提供ポートへの接続要求に対して、正直にRSTパケットを返すのは『端末の存在』を示すことになる。
不要な接続(パケット)に対しては原則、ホストや通信機器は応答しない事が推奨される。
その為に、外部からの未提供ポートへのパケットをフィルタリングし、また応答パケット自体も外部ネットワークに出て行かないように設定しておく。

FILTERED

対象に対してTCPコネクションの応答がなかったことを示す。
応答要求パケット、もしくは応答パケットが途中でフィルタリングされている場合、該当のアドレスにホストが存在しない場合等に出力される。
検査対象のNWやマシン負荷が高くて応答がなかった(=遅延)時にNW上でのパケット損失などによっても起こる場合がある。
フィルタリングを適切におこなっている場合は、提供サービス以外はこのような状況になっているはず。

 -P0 ・・・ ホストアップを無視する

nmapは特に指定をおこなわない限り、まずはじめにホストが本当に存在するかを(ICMPとAckScan)を用いて判断する。
『-P0』オプションを指定しない場合は、ホストアップの結果が『応答なし』(=ICMPエコーに反応しない)の場合はそこで走査を終了させてしまう。
これを回避するには、『-P0』オプションを用いるとICMPエコーの応答を返さないものは無視して引き続き走査を継続してくれる。

 -A ・・・ バナーチェック

サーバー上で稼動しているサーバーアプリの情報を返す。

 -O ・・・ OSの推測

対象のサーバーはどのOS(=Windows2003,FedraCore 4.0、FreeBSD6.0、・・・etc)で稼動しているかを推測して表示する。

 -oN ・・・ LOGファイルの指定

nmapの走査結果をLOGファイルに書き出したいときに用いる。

■応用例 − 任意のサービスのみを調べる

nmapですべてのPortを走査するのはかなりの時間を要する。
そこで、走査対象のサービスが既に決まっていてそれが有効か否かを調べたいのであれば以下のようにオプションを指定してnmapを実行するとよい。下記の例では、ターゲット上でPort80番(=Webサーバー)が稼動しているか否かのみを走査している。

# nmap -sT -P0 -p 80 ターゲットのIPアドレス

また、調査対象の単一のサーバーではなく、特定のネットワーク(例: 10.0.1.0/24)ならば以下のようにnmapのオプションを指定すると、一度に走査することができる。

# nmap -sT -P0 -p 80 10.0.1.0/24

実行結果で

80/tcp filterd http

となっていれば、該当のホストでは80番ポートはファイアウォールでブロックされていることを意味する。

80/tcp closed http

となっていれば、該当のホストではWebサーバーは起動していないことを示す。

80/tcp open http

となっていれば、該当のホストではwebサーバーが有効になっておりアクセスできることを示す。

Interested port 80 (10.0.1.***)

となっていた場合はDNSには該当のホストのwebサーバーとして登録されているが、走査した当時にはWebサーバーが稼動していないことを示す。

■ターゲットのホストが見つかったら

# nmap -sT -p 80 -A 該当ホストのIP

上記のコマンド入力によりどのようなOSとWeb関連のサービスが稼動しているかが判明する。入力したコマンドラインの結果が返ってきたら、実際にそのホストに対してWebブラウザでアクセスしてどのようなWebサービスが実行されているのかをGUIベースで確認する。

コマンドラインやツールで調査を行った後には必ず、GUIベースでの確認を調査対象へ行うこと。

4−2.ユーザーリストの作成 − ホストに登録されているアカウントを集めよう!

■メールサーバーにユーザーアカウントの問い合わせ

ターゲットのホスト上でメールサーバー(=SMTP)が稼動している場合には以下のようにコマンドを入力して、サーバー上のユーザーアカウントを調査する。

# telnet ターゲットホストのIP 25
Trying xxx.xxx.xxx.xxx(=ターゲットホストのIP)...
Connected to mail.xxxx.xxx(=ターゲットホスト名).
Escape character is '^]'.
220 mail.xxxx.xxx(=ターゲットホスト名) ESMTP Postfix
helo mail  <- メールサーバーに挨拶
250 mail.xxxx.xxx(=ターゲットホスト名)

mail from: hoge@example.com <- メールアドレスを宣言
ダメな場合は

mail from: <hoge@example.com>
と宣言。

250 2.1.0 Ok  <- コマンドの成功を意味する。

rcpt to: <hackerhehehe>  <- < >の中に存在しそうなアカウントを見当をつけて入力
250 2.1.5 Ok  <- アカウントがある場合はこのメッセージが応答
アカウントが存在しない場合は以下のようなメッセージが帰ってくる。


550 5.1.1 : Recipient address rejected: User unknown in local recipient table

上記のようにして地道にホスト上に存在するユーザ−アカウントを調査し、ユーザーリストを作成する。

■Webサーバーにユーザーアカウントの問い合わせ

Browserソフトのアドレス欄に以下のように入力する。

http://ターゲットホストのIP/~root

すると、下記のキャプチャ図のような結果が表示される。

これは、Apache1.3系に典型的に見られるサーバーの初期設定の脆弱性。
『/~ユーザーアカウント』とアドレス欄に入力することで、Webサーバーにそのユーザーアカウントが登録されていれば、『403 Forbidden』というエラーメッセージを返す。該当のユーザアカウントがなければ『404 Not Found』というエラーを返す。

ヒジョーに地味な方法だが、サーバーに登録されているユーザーアカウントを探し出し、ユーザーリストを作成するには非常に有効な手法と断言できる。

4−3.パスワードの脆弱性調査 − John The Ripperでパスワードを解析してみよう!

■John The Ripperとは

John the Ripperはパスワードを復元するツール。パスワードは基本的に暗号化されて元のパスワードとは別の文字列として保存されているが、暗号化されたパスワードの文字列を解析することで、元のパスワードを判明させることが出来る。

UNIXで使われるDESやMD5、Windowsログオンに使用するNTMLなどさまざまな種類の暗号方式に対応している。解析されやすいパスワードを設定している場合にはJohn the Ripperが簡単に暴いてしまうので、パスワードが簡単に他人に破られないか否かを調べることができる。

■John The Ripperをつかってパスワード解析に挑戦

早速、パスワードの解析・・・といきたいところだが、その前にやっておくことがある。
解析するためのデータファイルの作成が必要となってくる。最近のディストリビューションはシャドウパスワードになっているので,passwdファイルだけではパスワード解析が出来ない。unshadowというコマンドを使ってパスワードファイルとシャドウパスワードファイルを結合する。また、シャドウパスワードのファイルはrootしか読めないので忘れずにrootになっておくことが必要だ。

# unshadow /etc/passwd /etc/shadow > passwdfile

パスワード解析は、コマンドラインから以下のようなコマンドを発行する。

# john passwdfile
Loaded 6 passwords with 6 different salts (FreeBSD MD5 [32/32])
Ichiro (suzuki)  <- これがパスワードの解析結果だ。

上記の方法はブルーとフォースアタックと呼ばれる解析方法で、総当りであらゆるパターンのパスワードを1件ずつ試していっている。時間はとてもかかるが、確実にパスワードの解析が出来る。

パスワードの文字列の収められた辞書ファイルと照合することで、パスワード解析の時間が大幅に短縮される。ただし、辞書ファイルの中に該当のパスワードがなければ解析に失敗する。

# john -w:辞書ファイル パスワードファイル

Loaded 5 passwords with 5 different salts (FreeBSD MD5 [32/32])
hacker (hehehe) 

このようにして、脆弱なパスワードを調べることが出来る。

かつては、大学のシステム管理者(=root)は、定期的にシステムのパスワードファイルに対して『John The Ripper』による辞書攻撃を行って脆弱なパスワードを洗い出していった。脆弱なパスワードを設定している学生には新たに堅牢なパスワードを設定するように促していったものだ。

John The Ripperは"/etc/passwd"や"/etc/shadow"といったファイルの入手が必要となる。調査対象となるシステムへ既にrootでログインできていないとならない。
外部ネットワークからツールやExploitを用いる場合は、未だこれらのファイルを入手できていないことが前提のため、ペネトレーションテストでは有効な手段ではない。

4−4.パスワードの脆弱性調査 − hydraでパスワードを調べよう

パスワードの解析は、ハッキングの常套手段であると同時にサーバーの脆弱性調査(=ペネトレーションテスト)の一環として行うテストとしても非常に一般的。
ユーザーや管理者がパスワードに簡単なパスワード(=ユーザー名や組織名から想起される単語)を使っていないか等を調べるパスワードの脆弱性調査に代表される。

一般的なペネトレーションテストではパスワードの脆弱性調査では、SSHやTELNET、POP3、FTPといった開いているポートに対してツールを使って攻撃を試みる。この攻撃には、予め専用の辞書ファイルを用意してそれぞれパスワードに該当する者がないのか試していく『辞書攻撃』とパスワードを次々と生成して総当たりで試していく『ブルートフォース攻撃』の2つが主にある。

今回は、Hydraというネットワーク経由でパスワードクラックをするソフトHydraを使って対象のホストに対して辞書攻撃を行っていく。

■調査前の準備

用意した辞書に含まれるキーワードで順番にターゲットホストへと接続を試みてクラックを行う。
前段階の準備として必要な事は以下の3点

調査を行うポートの選別

調査対象のターゲットホストがどのようなサービスを実行している(=ポートを開けている)かNmapで調査を行う。
実際の調査方法に関しては、『4−1.システムの調査 − nmapで稼動しているサービスを調べてみよう!』を参考にしていただきたい。

調査対象のユーザーアカウントの特定

調査対象のターゲットホストが実際に登録しているアカウントに対してのみ辞書攻撃を行う方が成功率が高くなり効率的だ。また、調査時に掛かるシステムへの負荷も少なくなり、実際の攻撃の場合では管理者に気づかれにくくなる。ターゲットホストに実際に登録されているユーザーアカウントの調査方法については『4−2.ユーザーリストの作成 − ホストに登録されているアカウントを集めよう!』を参考にして欲しい。
ユーザーアカウントの見つけ方のコツとして、企業や製品名、サービス名など様々な関連すると考えられる情報で探すと良いだろう。

辞書ファイルの作成

言うまでもないが、辞書攻撃によるパスワード攻撃の成功の可否は使用する辞書のできに掛かっている。案外見落としがちだが、辞書にはターゲットホストに登録されているユーザーアカウント名、企業、製品名、サービス名といったキーワードも含めておくべきだ。アカウント名とパスワードが同じJoeアカウントがあるかもしれないからだ。また、企業名や主要製品名をパスワードに設定している場合もある。

小生の経験では企業名を初期パスワードとして一律で設定していたりすることは多い。企業の上位役職者に年配の方が多く、機械オンチだったりすると初期パスワードのまま変更せずに使い続けるケースはあまりにも多い。
また、代表の問い合わせ先メールでは複数の担当者で共有して使用するため、覚えやすいパスワードとして企業名を設定していることも多い。

■Hydraの起動

HydraはXwindow上で使えるGUI版を使うものとする。ターミナルから『xhydra』と入力することで、以下のような画面が出現する。

[Target]タブでは、調査対象に関する情報を指定する。
特定のターゲットホストを調査対象にするのであれば[Single Target]を指定して、ターゲットホストのIPアドレスを入力する。ドメイン名/ホスト名を一切省略しないでFQDNを指定しても良いが、ターゲットがロードバランサを導入している場合は処理に失敗してしまう事があるのでIPアドレスを直接指定した方が確実だ。
複数のホストを同時に調査対象とするのであれば[Target List]を指定して、予め用意しておいたターゲットホストのIPアドレスの一覧(=テキストファイル)を指定する。

次にプロトコルの指定だが、ドロップダウンボタンからCISCOやFTP、・・・SSHなど用意されているので該当するものを指定する。

[Output Options]には実行時にどのような出力をさせるのかを指定できる。
例えば、実際に攻撃しているキーワードを表示させたいときは[Show attempt]にチェックを入れる。

[Password]タブでは、様々な形式でユーザーIDやパスワードを指定することができる。

あらかじめ作成しておいたユーザーリストや辞書ファイルについてもここで指定する。
[Username List]にユーザーリスト(=テキストファイル形式)を指定し、[Password List]に辞書ファイル(=テキストファイル形式)を指定してやればよい。

[Try login as Password]にチェックを入れるとユーザーIDとパスワードが同じJoeアカウントを探し出すことも可能だ。また、[Try empty Password]にチェックを入れておくと、ログインIDのみでパスワードなしのケースも試すことができる。ただし、SSHではパスワードなしの接続は仕様上接続は拒否されるので意味はない。

[Turning]タブでは、同時に実行する数とタイムアウトの設定、Proxyの有無について設定することができる。
例えば、上記の[Target]タブにある[Show attempts]をチェックした状態で簡単な調査を行い、どれくらい同時に接続できているのかを確認する。もし、[Number of tasks]に設定した数よりも同時に接続される数が少ないのであれば[Number of tasks]の数を表示された数に設定する。このようにすることで接続を受け付けているタスク数を知ることができ、有効に調査を実施することができる。ただし、この数を大きくしすぎると過負荷になり調査対象のターゲットホストが不安定になったりダウンしたりすることになる。用法・容量は適切に。

[Start]タブの[Start]ボタンをクリックすることで調査が始まる。

自社内や組織内で使用されているサーバーの安易なパスワードをこのようにしてチェックすることができる。
今回は紹介しなかったがHydraはCISCOやFTPなど他の多くのプロトコルにも対応しているが、使い方は今回紹介した方法と大きな違いはない。

SSH2のように鍵交換を行っているサーバーに対してはHydraは有効ではない。また、ネットワークを介した手法であるため異常に時間を要するしログもかなり残ってしまう。

4−5.システムの脆弱性の調査 − Nessusでシステムの弱点を探してみよう!

■Nessusとは

サーバーの各種セキュリティを調査するツールで主に、フリーの脆弱性スキャナとして認知されている。
フリーウェアとはいえ機能は豊富で、プロがペネトレーションテストで使うほどの本格的なソフトウェアだ。また、日々脆弱性の検出パターンも更新され、調査結果の詳細なレポートもはき出してくれるスグレものだ。

Nessusはペネトレーションだけでなく、ハッカーもターゲットへの侵入前の調査でも一般的に使用されるツールだ。
サーバーやネットワークのセキュリティに気を遣うのであるなら、少なくともNessusのセキュリティチェックで問題点のクリアはしたいところだ。
だが、システムの脆弱性は発見されるもので今日まで脆弱性のなかったものが明日発見されることもあるので、油断は禁物だ。

■Nessusの初期設定

(1)Nessusアカウントの作成

Nessus起動のために、幾分か初期設定をする必要がある。
ターミナル画面に以下のように入力し初期設定を行ってみよう。
最後にCtrl + Dでアカウント作成コマンドから抜けよう。

# nessus-adduser
Using /var/tmp as a temporary file holder

Add a new nessusd user
----------------------


Login : <- nessusと入力
Authentication (pass/cert) [pass] :
Login password : <- nessusと入力
Login password (again) : <- nessusと入力

User rules
----------
nessusd has a rules system which allows you to restrict the hosts
that nessus has the right to test. For instance, you may want
him to be able to scan his own host only.

Please see the nessus-adduser(8) man page for the rules syntax

Enter the rules for this user, and hit ctrl-D once you are done :
(the user can have an empty rules set)

^D

Login : nessus
Password : ***********
DN :
Rules :



Is that ok ? (y/n) [y]  <- yと入力
user added.

ここでは、Nessus起動用のアカウント(=nessus)を作成している。
nessusはPostfixやApacheのようにデーモン起動をする必要があるため起動専用のアカウントが必要となる。

(2)Nessusの公開鍵の作成

では、Nessusを動かすためにサーバーの証明書を作成する。
Terminalから下記のようにコマンドを実行して、画面に表示される質問にはそのままEnterキーで応答しよう。

# nessus-mkcert
/sw/var/nessus/CA created
/sw/com/nessus/CA created

-------------------------------------------------------------------------------
Creation of the Nessus SSL Certificate
-------------------------------------------------------------------------------

This script will now ask you the relevant information to create the SSL
certificate of Nessus. Note that this information will *NOT* be sent to
anybody (everything stays local), but anyone with the ability to connect to your
Nessus daemon will be able to retrieve this information.


CA certificate life time in days [1460]:
Server certificate life time in days [365]:
Your country (two letter code) [FR]: JP
Your state or province name [none]:
Your location (e.g. town) [Paris]:
Your organization [Nessus Users United]:

上記の6項目は何も入力しないで、空Enterでかまわない。

-------------------------------------------------------------------------------
Creation of the Nessus SSL Certificate
-------------------------------------------------------------------------------

Congratulations. Your server certificate was properly created.

/sw/etc/nessus/nessusd.conf updated

The following files were created :

. Certification authority :
Certificate = /sw/com/nessus/CA/cacert.pem
Private key = /sw/var/nessus/CA/cakey.pem

. Nessus Server :
Certificate = /sw/com/nessus/CA/servercert.pem
Private key = /sw/var/nessus/CA/serverkey.pem

Press [ENTER] to exit

最後にEnterキーをたたくことで、CAキーが作成された。

■Nessusの実行

(1) nessusのデーモン起動

ターミナルから以下のコマンドを実行

# nessusd
Loading the plugins... 153 (out of 1088) <-Loading the pluginsが1088になるまで待つ。

Pluginsを読み込み終えると、以下のように表示される。

Loading the plugins... 663 (out of 1088)byte_func.inc: No such file or directory
Loading the plugins... 867 (out of 1088)smb_hotfixes.inc: No such file or directory

------------------------------------------------------------------------------
You are running a version of Nessus which is not configured to receive
a full plugin feed. As a result, your security audits will produce incomplete
results.

To obtain a complete plugin feed, you need to register your Nessus scanner
at the following URL :

http://www.nessus.org/register/

------------------------------------------------------------------------------

Loading the plugins... 969 (out of 1088)smb_hotfixes.inc: No such file or directory
All plugins loaded

このように表示されると、nessusのpluginsはすべて読み終わり起動の準備ができたことを示す。

(2)Nessusのクライアントを起動

X-windowのターミナルから以下のようにコマンドを入力

(X Windowから)

# nessus

nessusのSetup画面が出現し、GUIで操作できるようになる。

(3)NessusのSetup

[Nessusd Host]

new session set upの枠では以下のように操作

Login : nessus
Password : nessus

と入力し、ほかの項目は値を変更せずに[Login]ボタンをクリック。

[SSL Setup]の画面が表示される。
ここは、真ん中の項目を選択し[OK]ボタンをクリック

直後、warning画面が表示されるが、気にしないでOKボタンをクリック。
Nessusのセットアップ完了。

(4)Nessusの操作

[Plugins]タブをクリック
Plugins Selectionの項目では[Enable All]をクリックし、使えるPluginsはすべて使えるようにしておく。

[Target]タブをクリック
Target(s) : にペンテストを実施したいホストのIPを入力。
また、調査対象がサーバーマシン単体ではなく、特定のネットワークであった場合は、Targetのネットワーク範囲を指定することによって実施することができる。


(例) 10.0.1.1-10.0.1.254のネットワークに対して行う場合。

Target(s) : 10.0.1.0/24 と指定する。

[Start the scan]を実施。

[Scanning network from localhost]という画面が立ち上がり、Targetホストの脆弱性調査を始める。 [Portscan : ]と[Checks]のインジケータがフルになるまで調査は実施される。

(5) 脆弱性レポートの表示

Nessusのスキャンが終わると、脆弱性レポートが表示される。

レポートに表示された項目を読み込んでしっかりとセキュリティ対策を行うこと。

[Save report]をクリックし、保存先を指定。
[Save options]で[Report file format]の指定で[HTML with Pies and Graphics]を指定。
ファイル名をつけて[OK]ボタンをクリック
Browserソフトでレポートフォルダのindex.htmlを開くと、レポートを読むことができる。
Nessusレポートのフォーマットは業界の標準的なものに統一されている。
実際、セキュリティ診断を外部に委託した場合2ー3万円程度のサービスだとNessusがはき出したレポートをそのまま提出してくることが多い。

外部委託によるペネトレーションテストに2-5万程度かけるくらいならば、自前で行った方が安上がりだったりする。

■Nessusのpluginsのアップデート

Nessusのpluginsのアップデートは至って簡単。Nessusサーバー上で以下のコマンドを実行すればアップデートができる。

一旦、nessusを終了させる。

www.nessus.orgにアクセスして、Registrationを行う。登録したメールアドレス宛にactivationコードが付属しているので、ターミナルに以下のコマンドを入力

# nessus-fetch --register 899A-0A9F-E5FC-BF10-D51A
Your activation code has been registered properly - thank you.
Now fetching the newest plugin set from plugins.nessus.org...
Your Nessus installation is now up-to-date.
Make sure to call regularly use the command 'nessus-update-plugins' to stay up-to-date
To automate the update process, please visit

と表示されたら、nessusのインストールされている端末のterminalから以下のコマンドを実施。

# nessus-update-plugins

セキュリティ診断を行う前にアップデートを行っておくと最新のセキュリティホールが検出されやすくなります。

Updateの後に再びnessusサーバーを起動すると

# nessusd
Loading the Nessus plugins...smb_func.inc: No such file or directory
Loading the plugins... 408 (out of 1150)smb_func.inc: No such file or directory
All plugins loaded

と表示された。 最初の起動では1088だったpluginsが1150に増えている。 pluginsのアップデートが行われた証拠。

4−6.システムの脆弱性の調査 − NiktoでWebサーバーを検査しよう!

■Niktoとは

Nikto とは、Perl で記述されたWebサーバ向けのセキュリティスキャナだ。
実際に業務でサーバーを構築したり、趣味や学習のために自宅ネットワークでWebサーバーを構築している貴殿たちにも覚えがあると思うが、とりあえずデフォルトの設定で稼動させている、ということはないだろうか。最近のサーバー類はソースコードからコンパイルした場合でも初期設定でとりあえずは動くようにコンフィグファイルが記述されている。しかし、セキュリティ上の脆弱性につながるような余計な設定まで書かれているのも事実だ。『コンフィグファイルの記述なんてわからないし、とりあえずサーバーとして稼動するからいいではないか』という安易な考えが、将来のセキュリティ侵害につながることをよく認識しておこう。

サーバーの設定がセキュリティ上好ましいものかをイチイチ検証するのは何気に煩わしい。そんなときには、Webサーバ向けのセキュリティスキャナを使用してみたらいかがだろう。このツールを使うことで、Webサーバの設定ミスや、古いバージョンの場合に見つかるような既知の脆弱性をレポートに吐き出してくれる。簡単に侵入されてしまったり、あるいは情報漏洩を起こしかねないような欠陥を簡単に見つけることができる。

ただし、Nikto は実際の攻撃コードに近いテストパターンを使ってWebサーバに連続してアクセスするため、実際に稼動しているシステムに対して利用する際にはあらかじめシステム管理者がNiktoの使用を了解していないと実際の攻撃と誤解される恐れがある。攻撃コードと見分けを付けづらいアクセスログが大量に記録されるため、何者かが攻撃を行っているか、あるいは攻撃を行うための調査をしているのではないかとシステム管理者に疑い持たせるのに十分な証拠を残すので、よく注意をしよう。
Niktoを使用してWebサーバーのセキュリティ監査を行う際には予めシステム管理者の了解を取っておく必要がある。本来の使い方では、システム管理者が自分のシステムの安全性をチェックするか、Webシステムの開発者が納品前に安全性をチェックするための道具なので用法・容量は適切に。

Niktoで報告される脆弱性は既知のセキュリティホールだったりセキュリティ上問題となる設定ミスだったりするが、設ミスとして報告されるものの中には運用上必要な設定が「あまり推奨されない」として報告されるものもあるので注意しよう。

■Niktoの実行

(1)pluginのアップデート

Scan imtensとプラグインは頻繁にアップデートされる。より正確なテスト結果を求めるのならば、使用する前にアップデートをかけておくことが得策だ。

アップデートは以下のようにコマンドをたたく。

# perl nikto.pl -update

+ Local 'realms.db' (ver 1.003) is NEWER than remote (ver 1.002).
+ Retrieving 'server_msgs.db'
+ Retrieving 'scan_database.db'
+ www.cirt.net message: Version 1.32 has many bug fixes. If you see any problems
, or enhancements, please report them. Thanks.

(2)Niktoのスキャン

基本的に以下のようなコマンドを実行すれば、対象ホストに対してNiktoによるスキャンを実行できる。

# nikto -h (対象のホスト名またはIP) -p 80

ペネトレーションテストでは基本的なスキャンではなく、下記のようにオプションを工夫してより細かい調査をすることが求められる。

# nikto -C all -g -h (ターゲットホストのIP) -o (レポート結果ファイル)

よく勘違いをされることだが、niktoはWebサーバの脆弱性検査ツールでWebアプリケーション個別の脆弱性検査は全く行わない。
Webサーバーの脆弱性が発見されなくとも、Webアプリケーションに既知の脆弱性が存在すれば攻撃者はこれを利用してシステムに侵入することができる。Webサーバーと併せてWebアプリケーションの脆弱性調査を忘れずに行うことが重要だ。

番外編 − Googleの正しい(?)使い方

インターネットでWebサーフィン(=古い?)をする際に、必ずといっても過言ではないほど、Web検索エンジンを使う。
この記事を読んでいる貴殿の中にはWebブラウザのスタートアップにWeb検索エンジンのサイトを登録されている方も多いはずだ。Web検索エンジンには『Yahoo』、『goo』、『Live Search』、『Google』等、豊富にあり人それぞれ好みに併せて使っていることかと思う。ちなみに、本サイトを検索エンジンで調べて訪問した人は『Live Search』,『Yahoo』、『Google』を使用しているようだ。

現在ではすっかり有名になったGoogleは非常に強力な検索エンジンを備えている。Googleの発表によれば80億以上のWeb公開データを網羅している。
80億ページの中には一般非公開のコンテンツやシステムの設定ミスで結果として公開されてしまっている、他人に見せたくないページも含まれていることは往々にしてある。

世間では一般的に認知されていないが、単純なキーワード検索以外により細かな検索のできる検索オプションが豊富に取りそろえられている。検索キーワードと検索オプションをうまく組み合わせることにより、非常に有用な情報を見つけ出すことだって可能だ。
検索オプション1つ1つは非常に単純だが幾つか組み合わせることにより、Webページの設定ミスや一般非公開の情報、更にはWebアプリケーションの脆弱性まで見つけ出すことが可能な、Hacker御用達のツールといっても過言ではない。

(1)検索キーワードを工夫して色々な情報をGetしよう!

Googleの検索方法で一番簡単な方法が、関連する複数のキーワードを単語を検索欄に入れる方法だ。

(検索例)

サーバー構築 方法 UNIX

これはスペースで区切ったキーワードでデータベースをAND条件で検索を欠けることを意味している。キーワードの順番で検索の優先順位が決まるので検索結果に大きな差が出てくるのでどのような順番にするのかは幾分かコツが必要になってくる。

■" "でくくる

たとえば『Hacking tools』と検索したい場合、この検索条件では『Hacking』と『tools』というキーワードとして認識されてしまう。これでは『Hacking tools』以外の余計な項目が検索されてしまう。
このような場合は""でくくることで、1フレーズのキーワードとして認識するようになる。

(検索例)

"Hacking tools"

■−記号で不要な単語をはじく

自分の求める検索結果に絶対に含まれないキーワードが事前に分かっている場合、除外したいキーワードの前に『ー』を負荷することによってそのキーワードを除外した検索結果を表示されることができる。

(検索例)

オンラインソフト -win

■+で検索に加えたい条件を加える

Googleにはその仕様上『ストップ語句』という検索キーワードから自動的に排除するキーワードというものがある。
googleで検索していて『○×△は一般的すぎる言葉のため、検索には使用されていません』といったように、Googleから警告メッセージが返されてしまうことがある。どうしてもそのキーワードで検索したい時には『+』をキーワードの前に負荷すると良い。

(検索例)

+○×△

■"site:"で指定したドメイン内のみを検索する

Googleでの検索である特定のサイトの情報だけ欲しい場合というのはないだろうか。例えば、MSの製品についてマイクロソフトドメインのサイトからのみ情報を検索したい場合だ。この場合、『site:ドメイン』という演算子を用いる。

(検索例)

"Windows 2003 Server" site:microsoft.com

Googleには検索オプションが上記以外にも多数用意されている。以下にその代表的なものを示すので、適宜利用されてみるとよいだろう。

■Googleの代表的検索オプション

* ・・・ ワイルドカード。『""』でくくる時に任意の文字列指定になる。
(例) "Today is *"

intitle ・・・ Webページのタイトルだけに限定して検索。
(例) intilte:"criterion"

inurl ・・・ WebページのURLだけに限定して検索。
(例) intilte:"criterion.sc"

intext ・・・ Webページの本文だけに限定して検索。
(例) intext:"にわかネットワークエンジニアのサブノート"

link ・・・ 指定されたURLにリンクしているページを検索『http://』の入力の必要はない。
(例) link:www.criterion.sc

filetype ・・・ ファイル名の拡張子を対象に検索
(例) site:ocn.ne.jp filetype:xls

phonebook ・・・ 電話番号を検索。ただし、日本国内の番号は検索できない。
(例) phonebook:Steave Jobs

(2)外部に見せたくないサイトの情報を探してみよう

本セクションではGoogleのシンプルかつ強力な検索機能を利用して脆弱性のあるページを検索するものとする。そのときの、検索キーワードやオプションをどのように指定していくかを以下に紹介する。上記で解説していない検索オプションについてはその都度解決を行っていく。

検索キーワードやオプションを工夫しても目的のページを検索結果の最上位に持ってくることはかなり難しい。この場合、検索条件を出来る限り絞り込んで検索結果をシラミつぶしに調査していくことが必須となりうる。また、検索結果によっては驚くべくものもあるだろう。

本セクションのポイントとしては、脆弱性のあるページを検索する前にどのようなページが脆弱性があるかを事前に分析しておくことを勧める。それだけでなく、脆弱性のあるページに含まれるフレーズを探し出すことも場合によっては必要になるかもしれない。以下に、いくつかの例を示すので脆弱性のあるページの検索についての雰囲気をつかんでいただけると幸いである。

■丸見えのディレクトリを探してみる

検索例

Name Last modified Size Description Parent Directory intitle:"index of" intitle:"data"

ディレクトリにindex.htmlファイルが設置されていないために、ディレクトリが丸見えになっているページを探し出す。簡単な検索条件で探し出せる半面、難しい点が『intitle:"index of"』のみで検索すると関係のないページばかりが検索結果に表示されてなかなか目的のページにたどり着かない。上記の例ではほかも文字列を負荷して検索精度を上げている。

■掲示板のデータのあるディレクトリを探してみる

検索例

Name Last modified Size Description Parent intitle:"index of" intitle:"data" intitle:bbs

見てわかるとおり、上記の検索条件の一部を変形させた。上記の検索条件では直接ディレクトリの一覧が見えているページのタイトルにはディレクトリ名が来ることが確認されたので、『intitle:data』と『intitle:bbs』を足すことによってディレクトリの中に『data』と『bbs』という文字列が入っているページを探し出すようにした。掲示板のデータを探し出すことが有益か無益かの判断は利用者にお任せすることとする。

■掲示板のdatファイルのあるディレクトリを探してみる

検索例

bbs.dat inurl:"cgi-bin" intitle:"index of"

『bbs.dat』という文字列が検索条件に含まれるが、今回のキモは『cgi-bin』という本来は直接見れないように設定してあるページを探し出すことにある。
Googleハックのテクニックを応用しての監査はこのような本来公開するはずのないフォルダを実際には公開してしまっていないか、と探し出すことにある。

(3)一般非公開な情報をGetしよう!

■ファイルタイプを指定してCSVファイルを検索してみる

検索例

filetype:csv adress site:jp

2005年4月から施行された個人情報保護法にともなってどの程度の個人情報がGoogleから引き出せるかの検証テストにはもってこいの検索条件だ。
まずは『filetype:csv』でCSV形式のファイルを検索すると同時に、『site:jp』とすることでjpドメインのサイトを検索対象に指定することが出来る。

■ファイルタイプを指定してxlsファイルを検索してみる

検索例

filetype:xls adress site:jp

上記のファイルタイプをxlsに変更しただけ。CSVファイルのときとは異なり、多くの検索結果が現れたことと思う。
他のファイルタイプと比較してもxlsは非常に多い。どうやら日本人はExel形式のファイルでデータを作りこむ傾向が強いようだ。

■ファイルタイプを指定してPDFファイルを検索してみる

検索例

filetype:pdf adress site:jp

上記のファイルタイプをpdfに変更しただけ。Excelファイルよりもさらに多くの検索結果が現れたことと思う。最近では、報告者や申請書がPDFファイルで作成したものを使用しているからだろうか。
検索キーワードに『adress』という文字列が含まれているので、文章中に『adress』を含むものを探し出しているが、他の文字列と差し替えることによって興味深い検索結果が得られるかもしれない。

■ファイルタイプを指定して門外不出のPDFファイルを検索してみる

検索例

部外秘 filetype:pdf site:jp

上記の検索キーワードを少し変えてみた。
『部外秘』というキーワードを付け加えて検索すると、何気にたくさん出てくる。多くの場合は、申請用紙の雛形で機密事項に該当する情報は記されてはいないが根気よく探していくと、思わぬ機密情報にめぐり合えるかもしれない。
またキーワードの『部外秘』を『社外秘』に差し替えるとまた一味違った検索結果が得られる。

■mailto:のタブを用いてメールアドレスを探してみる。

検索例

"mailto:" ".jp"

これは今までの検索とは一味違った検索だ。
『"mailto:"』と『".jp"』を検索文字列に指定してみた。これは、".jp"ドメインのWebサイトから"mailto:"のHTMLタグを検索してくる。結果、".jp"ドメインのWebサイトに記載されているメールアドレスの含まれるページを検索結果一覧に表示させる。
検索対象のドメインを工夫すれば、インターネットで公開されているターゲットのメールアドレス情報を取得することも可能だ。

■エラーメッセージの一部を用いて特定のWebサーバーを探し出す

検索例

"Server: Microsoft-IIS/5.0"

Webサーバーをはじめ、サーバーの中には特定のベンダの特定のバージョンにのみ存在する脆弱性というものがある。例えば、Windows2000サーバーに標準で付属しているIISバージョン5.0というWebサーバーには多くの脆弱性があり、それに特化したexploitツールも多数公開されている。

この検索では『Server: Microsoft-IIS/5.0』というキーワードを検索することによって、インターネットに公開されているMicrosoftのWebサーバーIISのVer.5.0を探し出す。

通常は表示されない部分についてもGoogle検索で探し出すことが出来る。ミドルウェアの脆弱点を検索するにはこのような文字列を検索キーワードに含めることが必要となる。

(4)秘密の情報をGetしよう!

■インターネットに公開されているリモートデスクトップを探してみよう

検索例

intitle:"Remote Desktop Web Connection" "Type the name of the remote computer you want to use,"

MicrosoftのRemoteDeskTopというサービスを利用している場合は、かなり多い。その中でも、Web経由で利用できるようにしている場合もそれなりに多い。
上記の検索キーワードを指定することでRemoteDeskTopのログオン画面をかなり多く見つけ出すことが出来る。あとは、適当なIDをパスワードを入力してリモートでログインできるか否かの確認が出来ればよい。

この検索方法は使用しているキーワードの数が多いため検索ボタンをクリックすると、エラーメッセージが上がってくるかもしれない。Googleでは検索文字列は10語までと制約されているため、そのようなエラーが起こる。うまく、検索結果を表示させるためには検索キーワードの出現順位を工夫することが必要となる。

■意図せずに公開されてしまっているネットワーク監視状況を探そう

検索例

intitle:"Big Brother - Status" inurl:bb

ネットワーク監視用のソフトウェアで『Big Brother』という製品がある。これはLAMP(=Linux Apache MySQL PHP)という管理形式の典型で、Webサーバーからネットワークの監視が出来るツールだ。このツールは直感的に分かりやすい非常によいツールなのだが、この監視画面がWeb経由で第三者から見えてしまうのであれば、そのネットワークにとって多大なる脅威となりうる。

ネットワークやシステムの管理ツールの画面に同じような理由で外部のネットワークからアクセスできるか否かを事前に調査しておくことは非常に重要なこととなりえる。

■Nessusのレポートを探してみよう

検索例

"Nessus Scan Report" -"192.168." -"172.1." -"10."

Nessusというのは上記でも述べているようにサーバーの脆弱性調査ツールである。このツールが実施した調査結果はhtml形式で出力される。
Nessusの調査結果というのは基本的にそのサーバーの脆弱性結果であるので、基本的にWebに公開する必要はないはずだ。しかし、上記のように検索キーワードを指定すると何故か多数のNessus調査結果の表示されているWebサイトを探し出すことが出来る。

■ルーターの設定画面を探してみる

検索例

inurl:tech-support inurl:show Cisco

ネットワーク機器にアクセスするということは、該当の機器が管理しているネットワークを自らの管理下に納めるということを意味している。
最近のネットワーク機器の中には汎用性と運用のしやすさからWebコンソールを備えているものも多くある。一般的な例を挙げるとオフィス向け製品ではネットワークプリンタの場合、最近のものならばWebコンソールから設定を行う。ルーターやスイッチなどについては主要メーカーの多くの製品はコンソール画面からコマンドラインによる設定を行う。対して、個人利用用途のブロードバンドルーターは現在ではほとんどの製品が操作の容易さからWebコンソールを採用している。

メーカーの初期設定では、インターネット経由でネットワーク機器のWebコンソールにアクセスできてしまう。管理画面にアクセスするための認証パスワードを変更することなく初期状態だと、第三者にアクセスされる危険性が増すので注意が必要だ。

■C言語によるexploitコードの検索

検索例

"#include " "Usage" exploit

現在、インターネットには様々なツールやそのソースコードが広く公開されている。
今回取り上げたペネトレーションテストで使用するシステムの調査ツール(=Audit Tools)も例外ではない。システムの適切なセキュリティレベルでの運用にはこれらのツールは欠かせない、いわば管理者必須の道具ともいえよう。だがその反面、まったく逆の目的で使用すれば非常に強力なハッキングツールとなりうる。

実際に1990年代後半以降、システム管理ツールがパソコン雑誌などで『ハッキングツール』として紹介されたことで、セキュリティ侵害事件がうなぎのぼりに増加した。

専門家が管理ツールをハッキングツールとして使用した場合、かなりの高確率でセキュリティを突破してくるがその反面手法が体系化されているため、有効な対策を講じやすい。
対して、システムやネットワークについて専門知識を持たない素人がハッキングツールを使用した場合、正規の使い方を知らないだけに、どのような攻撃手法となってシステムを攻撃してくるのかが、まったく予想できない。
システムについての知識のない者が、ツールを使用した程度でセキュリティを突破されることに驚くかもしれないが、最近の管理ツールは非常に多機能・高機能のものがオープンソースのツールとして公開されているため、素人によるセキュリティ侵害事件は後を絶たない。

Exploitsというのはシステムの脆弱性を利用してセキュリティ突破を可能にする。ペネトレーションに使用すれば、より詳細なテストを実施することを可能にするが、ハッキングツールとして利用すればセキュリティ上の脅威になりうる。作成者もそのことをよく理解しており、安易にWebに公開することはしない。そのためなかなか目的のExploitsを見つけ出すことは難しい。

上記のような検索条件を指定すると、Exploitsのソースコードを探し出すことが出来る。多くのScript Kiddyにとってソースコードのコンパイルは敷居が高いらしく、ツールをアプリケーション形式で公開した場合のような積極的な不正利用は見受けられない。そのような背景があるからなのか、Exploitsはソースコード形式ならば比較的容易に目的のツールを入手しやすい。

ソースコード形式の配布の利点としては、利用者が自分の作業環境に応じてソースコードの改変が自由に出来る。そのため、プラットフォーム間の移植性に優れ、不具合の修正がボランティアベースで短期間に行われるという点にある。

■Unixにおけるpasswdファイルの検索

検索例

intitle:"index of..etc" passwd

インターネットに公開されているサーバーの約8割程度はUNIX及びそのクローンOSで稼動している。
ライセンス料が無料であることや、セキュリティ面での頑強さが主な理由であるが、管理者の過信から重大なセキュリティホールを生み出すことは多い。

セキュリティ的にもっとも頑強なサーバーは、何もサービスを提供していないサーバーだが、これではサーバーの意味がない。サーバーを公開する限りはWebやMailのように何らかのサービスを提供するものだ。

サーバー構築に躍起になって、サービスを1つ稼動させるごとに脆弱性が出来るということを忘れてしまっていることがある。適切な運用を行えば、必ずしも脆弱性につながるわけではないがその分多くの脅威にさらされることに相違はない。

典型的な例として、あるサービスを稼動させるためにサーバーの設定を変更することが挙げられる。よくわからないが、サーバーのセキュリティ関連の設定を変更することで目的のサーバーデーモンが動くようになった。実は、その設定変更のためにパスワードファイルがWebアクセス経由で不特定多数のヒトに見えるようになってしまった。

信じがたいことだが、実際にインターネットで公開されているサーバーにはそんなサーバーがかなり存在する。上記の検索条件をGoogleに指定することでそんなサーバーを探し出すことが可能になる。

■クレジットカードの情報を探してみよう

検索例
creditcardを検索ボックスにいれ『イメージ検索』をする。

最後に、クレジットカードの情報を探す方法を紹介する。
この方法だけ他と異なってGoogleの画像検索機能で探す。

いかにGoogleでもクレジットカードの情報までは検索できるわけがない、と思うだろうが、そうではないのが現実だ。
今回使用したイメージ検索を使用すると、予想に反して多くのクレジットカードの写真が表示される。検索結果で表示される写真の中には名義人、有効期限、クレジット番号が鮮明に写っているものもある。

上記の操作で得た情報をどのように使うかは当方は一切関知しない。また、如何なる被害が出ても一切責任を追わないものとする。