Google Hacking Google検索オプションによるサイト脆弱性のハッキング
Google HackingはGoogle検索オプションの高度な検索クエリを利用したハッキングです。
本来はサイトの脆弱性が無いかどうかセキュリティ担当者が調べるためにあります。
攻撃者に検索される前に自身で検索して機密ファイルはインデックスされないようにブロックしておくべきです。
Google Hacking:本記事のポイント
・Google検索オプションにより、キーワード以外の様々な情報を検索する事ができる
・インデックスの中には公開してはいけない構成ファイル(脆弱性)も存在する
・本来Google検索オプションはこの脆弱性を調べて修正するためにある
・脆弱性を持つサイトを検索して攻撃を試みる悪意ある第三者がいる
・この攻撃者よりも先に定期的に使用して管理サイトの脆弱性を発見する事
Google Hackingとは
グーグルハッキングは、グーグルドーキング(Google Dorking)とも呼ばれる高度な検索機能の事です。
Google検索はサイトやテキスト・画像・ビデオ・ニュースなど、普段ユーザーが調べものをするツールとしては何の文句もないものです(SEO順位はともかく)。
ところが、ことサイバー攻撃を担う攻撃者にとってGoogle検索は、その性能と情報収集能力の高さゆえに便利なハッキングツールとなっているのです。
Google検索で直接ハッキングをするのではない
では誰がどのようにしてGoogle検索でWEBサイトをハッキングするというのでしょうか?
攻撃者はGoogleを使用してサイトを直接ハッキングする訳ではありません。
ハッキングできそうなWEBサイト先をGoogleで検索する事ができるという事です。
検索の仕方
簡単に検索の方法をご紹介しましょう。
上の様に検索ボックスに文字列を入れて検索します。
WEBページではなく構成ファイルを検索する
任意の文章やタイトルが書いてあるWEBページ自体を検索するのではありません。
サーバー内の公開ディレクトリに入った「構成ファイル」を検索するイメージです。
この時ファイルの名前などはわかりませんが、制作の仕様として生成されやすい名前や拡張子などを予測して検索します。
構成ファイルがインデックスされてしまっていると危険
ぼかしていますので見にくいかも知れませんが、ヒットすれば上記の様にリストで表示URLがわかります。
URLがわかるという事は構成ファイルの中身を見られてしまうという事になりますね。
世界中のWEBサイトに対して一気に同じルール検索を掛ける事ができますし、ある特定のWEBサイトに限定した調査もできます。
インデックスし過ぎるGoogle
WEBサイト内の機密情報も含めた全ての情報は、Googleの持つ非常に優れたWEBクロール機能により巡回・インデックス登録されます。
極端に言えば何もかもを高い精度で「インデックスし過ぎる」のですね。
インデックスし過ぎるというのは、WEB管理者が公開するつもりの無い情報(例えばユーザー名、パスワード、設定ファイルなど)も制限が無ければクロール対象に含んでいるという事です。
WEBサイトの弱点まで露出してしまう
中にはWEBサイトが持つ脆弱性およびそのエラーの状態についても、インデックスしてしまうのです。
これは逆に言えばそれだけ、管理者の意図しない情報がインターネットの世界に対して多数露出したままである事を示唆しています。
ユーザーにさえ見えなければ良いという管理者の考え方を改める必要がありますね。
Google検索オプションとは
そもそもWEB上には星の数ほどのWEBサイト・WEBページが存在します。
その中からあなたにの目的に一番マッチするページを探すというのは実はとても大変な作業なのですね。
情報を求めて検索したはものの、結局欲しい情報が見つからない事もよくあります。
※もちろん検索の仕方にも寄ると思います
こんな時にGoogleの検索オプション(Googleの検索エンジンで使うことができる検索コマンド)を活用すると、効率よく検索をする事ができます。
単にキーワードを指定するだけではなく、それ以外の条件を絞った検索をすればさらに限定された候補の中から目的とする情報を見つけることができるのです。
Google検索オプション
本来は検索ボックスに専門的な検索文字列を入れる事で検索ができます。
しかし検索ボックスに入れる様々な条件式を知らなくても、下記ページを使えばもっと簡単に多彩な検索を掛ける事が可能です。
URL:Google検索オプション
Google Hackingの本来の目的
脆弱性を持つWEBサイトの診断に使われる
Google Hackingとは本来、検索オプション機能を使用して管理者がWEBサーバーおよびWEBアプリケーションの脆弱性を見つけるために使われるべきものです。
特定リソースをブロックする指示を出さない限り、GoogleはWEBサイトに存在する全ての情報がインデックス登録する性質があります。
それにより特定ルールの脆弱性があるWEBサイトはそれ特有の状態がインデックスされています。
それが出ているかどうかを検索チェック事で、見落としていたセキュリティ上の欠陥を修復する事ができるのです。
第三者よりも先に見つける
検索方法(高度な検索文字列)さえ分かっていれば、論理的には世界中の誰もがその脆弱性情報も発見できるのです。
この機能は本来、セキュリティ担当者が第三者よりも先に脆弱性を発見するために重宝されるべきものなのです。
例えば自社のサイトを色々な角度からオプション検索して、脆弱性がないかどうかを検証するために使われます。
Google Hacking を使う場合の注意
気軽に試さないで
ここで注意をして欲しい事項があります。
これより紹介する検索機能はインターネット上で公開されている方法であり、Googleより合法的な使用を目的として提供されている一般的な機能です。
そして悪意ある攻撃者がこの方法を利用している事もまた事実です。
本記事を読んでこの種類の検索クエリを実行した場合、あなたが今そのPCで(IPで)その検索をした事をGoogleは確実に探知します。
無作為に調査をすると要注意人物に?
Googleの検索エンジンなのですから「主」に知られるのは当たり前ですよね。
つまりあなたはこの機能を使った瞬間に「悪意ある人かどうか」品定めされる側になります。
このGoogle Hackingが起きるのは、WEBサイト管理者が知らずのうちにWEBの機密情報を公開したままにしているのが事の原因です。
しかしさらけ出しているからと言ってその情報を無断調査・悪用しても良いという事にはなりません。
ですのでこの検索クエリで無作為にサイトを検索していると、サイバー犯罪者としてマークされる場合がある事に注意して下さい。
善良な目的の元に利用を
ちょっと脅しっぽくなりましたが、利用する際は以下のコンセプトのもとに実行してくださいね。
・あなた自身の研究のためである事
・WEBサイトの脆弱性を防ぐ方法を模索している事
・善意でのみ使用する事
ハッキングによく使われる検索文字列
Googleの検索エンジンには、独自のクエリ言語が組み込まれています。
クエリ実行で取得できる情報例
・バックアップファイル
・ログイン情報
・データベース情報
・メーリングリストファイル
・WEBサイトの持つ脆弱性(エラーページ)
・etc
最もよく使われる検索クエリ文字列とその機能を見てみましょう。
検索クエリ文字列
文字列 | 用途 | 使い方例 |
---|---|---|
site: | 指定ドメインの全てのインデックスされたURL | site:securitylpeg.com |
link: | 指定URLへのリンクがあるWEBページのリスト | link:google.com |
cache: | GoogleにキャッシュされたWEBページ | cache:securitylpeg.com |
inurl: | urlの中に1つのキーワードを含むもの | inurl:admin |
intitle: | タイトル内に含まれるキーワードを検索 | intitle:security |
inanchor: | リンクで使用されているリンクテキスト | inanchor:"設定" |
intext: | テキスト内に特定の文字または文字列を含むページ | intext:"username" |
filetype: | 任意の種類のファイル拡張子を検索 | filetype: jpg |
演算子(ワイルドカード)
文字列 | 用途 | 使い方例 |
---|---|---|
* | 指定位置の全ての単語を含むページ | * .com |
| or OR | 両方の単語を含む全てのページ | "security" "howto"は両方いずれかを含む |
+ or AND | 複数単語の条件を満たすページ | security + trails |
– or NOT | 指定単語を含まないページ | security -trails テキストに「security」を含むページを表示しつつ「trails」という単語を含むページは表示しない |
ここに書いてある情報はクエリに使用する文字です。
しかしこれだけでは、まだ機密情報が検索できたりはしませんよね。
専門家はルールを知っている
セキュリティ担当者(攻撃者)は、例えば「Aという脆弱性があるサイトは「・・・・・」という文字がページタイトルに表示される」という事を知っているのです。
そのテキストで検索した時にヒットすれば、実際にそのエラーが表示されているサイトの存在がわかるのです。
そこに対してどのような攻撃をするかは攻撃者次第となり、また別のお話になります。
発見されやすい脆弱性サイト・ファイルの例
ログファイル
ログファイルは、どのWEBサイトでも機密情報が発見されやすいファイルの一つです。
エラーログ、アクセスログ、およびその他アプリケーションのログなどが、WEBサイトの公開ディレクトリ内でよく発見されます。
ログには実行中のPHPのバージョンや、CMSまたはフレームワークの重要なシステムパスが記載されている事が多いのです。
本来はログファイルはrobots.txtなどでアクセスブロックをしておかなければならないファイルですが、それを怠っているのですね。
ログファイルの検索の例
ログファイルを検索する場合、allintextとfiletypeの2つの検索文字を組み合わせる事で実現ができます。
allintext:username filetype:log
これによりユーザー名を含んだ全ての.logファイルの検索結果が表示されます。
時にはDB(データベース)サーバーからのSQLエラーログが表示されている重要な情報を含むログが発見される場合もあるのです。
Wordpressの重要ファイル
Wordpressは人気のCMSであるが故に各構成ファイルが共通しているので、ファイル位置が把握されやすいデメリットがあります。
特にwp-config.phpは、DBへの接続情報が記載されている重要なファイルです。
この中身を見られてしまうとサイトを乗っ取られてしまうのです。
誰もが気軽に使えるオープンソースのシステムであり、同時に世界一攻撃を受けやすいCMSと言えますね。
検索事例
intext:define('AUTH_KEY', ' wp-config.php filetype:txt
wp-config.php の中身がテキストとして出力されて、AUTH_KEYの部分が記載されているWEBサイトを検索できる。
inurl:wp-config-backup.txt
wp-config.phpのバックアップファイルが、txtファイルとしてアップされているWEBサイトを検索できる
"plugins/wp-db-backup/wp-db-backup.php"
pluginsの中にあるDBデータのバックアップファイルが保存・公開されているWEBサイトを検索できる。
オープンになっているFTPサーバーを検索
GoogleはHTTPベースのサーバーのインデックスを作成するだけでなく、開いているFTPサーバーのインデックスも作成します。
intitle:"index of" inurl:ftp
上の形で検索すると、パブリックFTPサーバーを探索できるようになります。
SSH秘密鍵
SSH秘密鍵は、SSHプロトコルで交換される情報を復号化するために使用されるパスワードです。
一般的なセキュリティルールとして、秘密鍵は常にリモートSSHサーバーへのアクセスに使用されるシステムに残しておく必要があります。
intitle:index.of id_rsa -id_rsa.pub
上のように検索すると、GoogleによってインデックスされたSSH秘密鍵のファイルを見つけることができます。
WindowsでPUTTYなどのSSHクライアントを使用している人がいると思います。このプログラムは常にSSH接続のユーザー名をログに記録する仕様になっています。
この場合以下の検索文字列を使用して、PUTTYログからSSHユーザー名を取得する事ができる場合があります。
filetype:log username putty
メーリングリスト
Google Hackingによりメーリングリストのファイルを簡単に見つけることができます。
次の様に検索すると、多数のメールアドレスが含まれている可能性があるExcelファイルが検索できます。
filetype:xls inurl:"email.xls"
Googleのキャッシュデータにアクセス
GoogleがインデックスしているWEBページの検索結果リストにはそれぞれ「キャッシュ」が表示されますよね。
このキャッシュを保存しているのはGoogleのサーバーです。インデックスデータを格納している訳ですね。
攻撃者はターゲットとなるWEBサイトのサーバーに直接アクセスはせず、Googleサーバーのキャッシュ情報からアクセスします。
キャッシュを通して行った攻撃のログが記録されたサーバーはGoogleのサーバーであり、攻撃元を隠す事ができる点があります。
いわゆる自分のIPを偽装するプロキシの一つとしてGoogleを利用する手段ですね。
Google Hackingを防ぐ対策:脆弱性を修正する
Googleハッキングは、攻撃者がWEBサイトが持つ潜在的な脆弱性や設定ミスを発見する偵察部隊の役割をします。
ですのでWEBサイト・アプリケーションの脆弱性と設定ミスをテスト・修正をしていけば、検索にヒットしなくなりますので悪用される事がありません。
しかしGoogle検索で発見されるであろう脆弱性を手作業で一つ一つ改善していくのは手間と時間が掛かります。
そのため、WEBの脆弱性を自動スキャンするツールを利用する事が近道でしょう。
ツールによる脆弱性診断
Googleハッキングツール
URL:Googleハッキングツール
ハッキングツールに自社サイトのURLを入れれば様々な脆弱性等の可能性を診断してくれます。
1件1件試していくよりも断然早く診断できますよね。
脆弱性スキャンは定期的におこなう事
自分のWEBサイトに対してが一度だけでなく定期的にHackingクエリを実行して確認をするべきです。
一回やれば終了ではありません。発見される新しい脆弱性があればそれに応じて検索される文字列も巧妙になっていくためです。
Exploit Database
「Exploit Database」で、頻繁に使われる最新の検索クエリリストを調べる事ができます。
URL:Exploit Database「Google Hacking Database」
脅威を確認したら
機密コンテンツが公開されている事が判明したら、まずはGoogle Search Consoleを使用して削除をリクエストしてください。
これにより検索結果に表示されなくなります。
その上で同時WEBサイトルートディレクトリにあるrobots.txtファイルを使用して、対象コンテンツへのアクセスをブロックします。
Google Hackingを防ぐ対策:robots.txt設定
Google Hackingを防ぐもう一つの方法は、robots.txtファイルを使用する事です。
これにより、インデックス登録コンテンツ範囲から指定コンテンツを隔離する事ができます。
ユーザーとパスワードの認証、およびIPベースの制限を使用してプライベートエリアを保護しましょう。
さらに機密情報(ユーザー、パスワード、クレジットカード、電子メール、アドレス、IPアドレス、電話番号など)は暗号化するべきです。
robots.txtの設定・書き方はこちらをご覧ください。
robot.txtブロック実例
全コンテンツのブロック
User-agent: * Disallow: /
上記の様にすると全コンテンツをブロックします。
特定領域のブロック
特定のディレクトリをWebクロールから除外するようにブロックすることもできます。
/admin領域がありそれを保護する必要がある場合は次のコードを内部に配置するだけです。
User-agent: * Disallow: /admin/
これにより、admin内部の全てが保護されます。
特定ファイルのみアクセスを制限する場合
User-agent: * Disallow: /private/file.html
動的URLへのアクセスを制限する場合
User-agent: * Disallow: /*?
上記でパラメータ「?」の付くURLを制限する事ができます。
特定のファイル拡張子へのアクセスを制限する場合
User-agent: * Disallow: /*.php$/
この場合.phpファイルへのアクセスは全て拒否されます。
まとめ
Google Hackingのポイントをおさらいします。
・Google検索オプションにより、キーワード以外の様々な情報を検索する事ができる
・インデックスの中には公開してはいけない構成ファイル(脆弱性)も存在する
・本来Google検索オプションはこの脆弱性を調べて修正するためにある
・脆弱性を持つサイトを検索して攻撃を試みる悪意ある第三者がいる
・この攻撃者よりも先に定期的に使用して管理サイトの脆弱性を発見する事
このGoogle検索オプションをうまく使えばWEBサイトを健全に保つ事ができますし、サイバー攻撃の対象になる事もありません。
あくまで悪意の元にではなく、セキュリティ対策の観点でGoogle Hackingを使う様にして欲しいです。