ネットワークセキュリティ
 Computer >> コンピューター >  >> ネットワーキング >> ネットワークセキュリティ

PHPサイトがハッキングされた?原因となる13のPHP脆弱性と対策を徹底解説

PHPサイトがハッキングされる理由 ― PHPの脆弱性とその修正方法

PHPは、今日普及しているほぼすべての人気CMSの中核を支える存在です。シンプルさとライセンスフリーである点から、動的ウェブサイト開発においてPHPは第一の選択肢となっています。しかし一方で、コーディング規約の不備により、PHPサイトへの侵入は比較的容易になってしまっているのが実情です。インターネット上には「カスタムPHPサイトがハッキングされた」「PHPサイトが不正リダイレクトされる」といった相談スレッドがあふれており、本来は無関係であるはずのPHP自体に悪いイメージが定着してしまう一因となっています。

では、PHPに責任がないとすれば、PHPサイトの不正リダイレクト(リダイレクトハック)の原因は何なのでしょうか。本記事では、PHPサイトを危険にさらすセキュリティ上の欠陥と、その具体的な予防策について詳しく解説します。

カスタムPHPサイトがハッキングされた実例

多くのサイト運営者は開発面ばかりに注力し、セキュリティ面をおろそかにしがちです。そのため、PHPで構築したサイトがハッキングされても、開発費用しか払っていないため頼る先がなく、オンラインフォーラムで助けを求めたり、本記事のような解説記事を読み漁ったりすることになります。以下は、そのような実際の事例の一部です。

PHPサイトがハッキングされた?原因となる13のPHP脆弱性と対策を徹底解説 PHPサイトがハッキングされた?原因となる13のPHP脆弱性と対策を徹底解説 PHPサイトがハッキングされた?原因となる13のPHP脆弱性と対策を徹底解説

カスタムPHPサイトがハッキングされた際の主な症状

  • PHPサイト上にフィッシングページが出現し、ユーザーを騙して機密情報を入力させようとする。
  • サイト内の特定のリンクをクリックすると、別ドメインへ飛ばされる。これは設定ミスまたはPHPサイトへのリダイレクトハックが原因である可能性が高い。
  • アドブロッカーが、サイト内の一部要素を「暗号通貨マイニング」として検出・ブロックする。
  • 見覚えのないPHPファイルマネージャーがサイトに出現し、悪意ある広告が表示されるようになる。
  • PHPファイルに不明なコードが追記され、不正リダイレクトや怪しいサイトへのバックリンクが生成されている。
  • カスタムPHPサイトに意味不明な文字列(ギブリッシュ)が表示される。日本語キーワードハックやファーマハックなどが原因の可能性がある。
  • サードパーティ製ホスティング利用中に、アカウント停止を警告するメッセージが表示される。
  • マルウェアやスパムなどを理由に、Googleなどの検索エンジンからブラックリスト登録されたという警告がサイトに表示される。
  • phpMyAdminに見覚えのない新しいデータベース管理者アカウントが存在する。
  • 自社PHPサイトのドメインから送信したメールがスパムとして判定される。
  • サイト上に予期しないエラーメッセージが表示され、PHPサイトが極端に遅くなったり応答しなくなったりする。

カスタムPHPサイトがハッキングされる13の原因

PHPサイトがハッキングされた?原因となる13のPHP脆弱性と対策を徹底解説

サーバーの設定ミス

1. 不適切なファイルパーミッション

ファイルパーミッションは、特定のPHPファイルをどの種類のユーザーが変更できるかを決める仕組みです。PHPファイルのパーミッションが適切に設定されていないと、攻撃者がPHPファイルにマルウェアやスパムコードなどを注入できてしまいます。

2. デフォルトパスワード・弱いパスワード

弱いパスワードや使い回しのパスワードは、カスタムPHPサイトがハッキングされる最も一般的な原因の一つです。攻撃者はカスタマイズされた辞書を使って、考えられるすべてのパスワードの組み合わせを総当たりで試します。一度突破されると、攻撃経路(FTPへのブルートフォース攻撃かcPanelへのブルートフォース攻撃か)に応じて、カスタムPHPサイトの管理画面へのアクセスを奪取されます。その後、攻撃者はPHPマルウェアやバックドアをアップロードできるのです。

関連記事:WordPressのバックドアを削除する方法

3. ディレクトリインデックスが有効になっている

ディレクトリインデックスが有効になっていると、攻撃者が機密性の高いPHPファイルを読み取れる可能性があります。これによりサーバーに関する機密情報が漏洩し、攻撃者はその情報を利用してカスタムPHPサイトへのサイバー攻撃を実行できます。

4. 開放されたポート

開放ポートも、カスタムPHPサイトがハッキングされる原因となり得ます。さらに、攻撃者は開放ポートを利用してPHPサイトのバックエンドサービスのフィンガープリント(構成情報)を取得できます。この情報をもとに、攻撃者はバックエンドサービスそのものか、開放ポート自体をエクスプロイトによって侵害します。

5. 低品質なホスティング

一般に、格安のPHPホスティングにはセキュリティ面で大きな代償が伴います。低品質なホスティング業者は、サービスを安く提供するためにセキュリティ運用を削減しています。そのため、こうしたサーバー上で感染が広まり始めると、直接標的にされていなくても、あなたのPHPサイトを含む複数のサイトが侵害される恐れがあります。

脆弱なPHPコード

6. PHPにおけるSQLインジェクション

PHPにおけるSQLインジェクションは、主にユーザー入力のサニタイズ(無害化)不足が原因で発生します。コーディング規約の不備により、無害化されていない入力がそのままデータベースサーバーに渡され、実行されてしまうのです。カスタムPHPページでSQLi(SQLインジェクション)が発生する主な要因は以下の通りです。

  • 空白文字に対するフィルタリング不足
  • 引用符による文字列の区切り方の問題
  • 無害化されていないユーザー入力をデータベースへ直接渡している
  • Unicodeエンコーディングの不適切な実装
  • コードとデータの混在
  • 型処理の不備

7. PHPにおけるクロスサイトスクリプティング(XSS)

XSSは、SQLインジェクションに次いでカスタムPHPサイトのハッキングでよく見られる原因です。この2つの攻撃はあまりにも蔓延しているため、毎年OWASP Top 10にランクインしています。XSSもまたユーザー入力のサニタイズ不足が原因です。PHPサイト全般において、XSS攻撃は主に次の3種類に分類されます。

  • 持続型XSS(Stored XSS): 管理者に特定のリンクをクリックさせることで、Cookieを盗む悪意あるスクリプトを読み込ませるタイプのXSSです。
  • 反射型XSS(Reflected XSS): 非常に深刻なタイプで、フォーラムや掲示板を持つPHPサイトでよく見られます。このタイプの悪意あるコードはサーバー上に保存され、ユーザーがそのPHPページを訪れるたびに実行されます。
  • DOMベースXSS: 上記2種類のいずれかに該当しますが、検出が非常に難しく、コード監査でも見逃されることがあります。

XSSに脆弱なサイトは、PHPサイトへの不正リダイレクトや管理者Cookieの窃取の標的になりやすい傾向があります。

8. PHPにおけるクロスサイトリクエストフォージェリ(CSRF)

CSRF攻撃は、PHPサイトのユーザーを騙して意図しない操作を実行させることを目的とした攻撃です。カスタムPHPサイトでユーザー登録を許可している場合、CSRFによって任意のアカウントを削除されたり、その他の操作を勝手に行われたりする恐れがあります。攻撃者には操作結果が直接見えないものの、CSRFによってPHPサイトのユーザーアカウントが削除され、サイトへのトラフィック減少につながることもあります。

9. PHPにおけるローカルファイルインクルージョン(LFI)

ファイルインクルージョン脆弱性は、攻撃者がルートのwwwディレクトリ外のファイルにアクセスできる場合に発生します。主な原因は、ファイル名をパラメータとして受け取る不適切にコーディングされたスクリプトです。この脆弱性により、攻撃者はカスタムPHPサイトの機密性の高い設定ファイルやパスワードファイルを読み取れます。そこから得られた情報を使って管理者権限でログインされ、結果としてPHPサイトがハッキングされることになります。

PHPのゼロデイ脆弱性

10. バグを抱えたプラグインやテーマ

不適切にコーディングされたPHPのプラグインやテーマは、サーバー上で悪用されるのを待つ脆弱性そのものです。攻撃者がバグのあるプラグインを狙ってPHPサイトへ大規模攻撃を仕掛けた事例も実際に存在します。もしPHPサイトがハッキングされたなら、原因はコード品質の低いプラグインかテーマである可能性が高いでしょう。

11. 侵害されたPHPパッケージ

PHPのライブラリやパッケージ自体が脆弱である可能性もあります。これは他の言語でも起こり得ることです。近年では、PHPのPEARパッケージマネージャーが攻撃者によって侵害され、正規のパッケージが悪意あるコードが注入されたものに差し替えられ、疑いを持たないユーザーにダウンロードされた事件がありました。このパッケージは、PHPで書かれたフリーのライブラリを検索・ダウンロードするために各サイトで利用されていました。こうした事例は稀ですが、ゼロデイ脆弱性によるカスタムPHPサイトのハッキングの可能性は完全には否定できません。

ソーシャルエンジニアリング攻撃

12. フィッシング

カスタムPHPサイトの管理者のもとに、最近「ナイジェリアの王子」からのメールは届いていませんか?この種の攻撃は、ウェブ管理者を騙してPHPサイトの機密情報を漏洩させ、ハッキングにつなげることを目的としています。フィッシングから身を守るためには、PHPサイトのドメイン宛てのメールを必ずフィルタリングしましょう。

13. テイルゲーティング(権限昇格攻撃)

テイルゲーティングは、フィッシング攻撃の亜種の一つです。この攻撃では、攻撃者はまず低権限のユーザーアカウントを侵害し、それを足がかりに権限を昇格させます。弊社の調査担当者のケーススタディでも確認されており、検知回避のために頻繁に使われる手法です。テイルゲーティングの被害は、情報窃取からPHPサイト全体の乗っ取りまで多岐にわたります。

カスタムPHPサイトを守るためのセキュリティ対策

PHPサイトがハッキングされた?原因となる13のPHP脆弱性と対策を徹底解説

正しいパーミッションを設定する

PHPには、ファイルパーミッションを確認するための以下の3つの関数が用意されています。

  1. is_readable(): ユーザーがPHPファイルの読み取りを許可されている場合にtrueを返します。
  2. is_writable(): ユーザーがPHPファイルへの書き込みを許可されている場合にtrueを返します。
  3. is_executable(): ユーザーがPHPファイルの実行を許可されている場合にtrueを返します。

同様に、PHPのchmod()関数を使えばファイルパーミッションを編集できます。ファイル名とパーミッション値を指定するだけで、「chmod($RandomFile, 0644);」のように記述します。下の画像は、ファイルパーミッションの一覧とそれぞれの意味をまとめたものです。なお、パーミッション値の前に必ず「0」を付けて、PHPインタプリタに入力が8進数であることを伝えてください。

PHPサイトがハッキングされた?原因となる13のPHP脆弱性と対策を徹底解説

安全なパスワードを設定する

カスタムPHPサイトのパスワードが安全なものであることを確認しましょう。数字・英字・記号をうまく組み合わせたパスワードにしてください。また、パスワードを設定する前に、Rockyou.txtなどの有名なパスワード辞書をチェックし、設定しようとしているパスワードが含まれていないか確認するのも予防策として有効です。Linuxユーザーであれば、Grepコマンドを使えば大きなファイル内も簡単に検索できます。「grep -i '*YourNewpass*' rockyou.txt」のように実行するだけです。さらに、新しいパスワードを作る手間を省きたい場合は、安全で長くランダムなパスワードを生成できるオンラインツールを活用するのもよいでしょう。

ディレクトリインデックスを無効化する

特定のディレクトリでインデックスを無効にするには、そのディレクトリの.htaccessファイル(.htaccessが存在しない場合は新規作成)に以下のコードを追加します。

Options -Indexes

信頼できる安全なホスティングを選ぶ

ホスティングサービスを選ぶ際は、Astra Securityが統合ホスティングパートナーと連携して提供しているような、ファイアウォールやセキュリティソリューションが含まれているかを確認しましょう。さらに、サブネット化によって、同じサーバー上で稼働する他のサイトから自分のサイトを分離できることも確認してください。

PHPコード監査を実施する

カスタムPHPサイトを一度構築した後で、ゼロから作り直すのは経済的に現実的ではありません。だからこそ、コード監査こそが、攻撃者に先んじてPHPサイトの脆弱性を発見する最良の手段となります。Astra Securityには、サイトのセキュリティ監査とペネトレーションテストを担当する優れたハッカーのコミュニティがあります。

  1. PHPバックドアとは?Webサイトへの感染経路と検出・駆除対策を徹底解説

    毎日10万件以上のWebサイトがハッキング被害に遭っていると言われています。しかも、一度侵害されたサイトは、再び攻撃を受ける確率が40%に達するとされます。その背景にあるのが、ハッカーが仕掛けていく「PHPバックドア」と呼ばれる悪意あるコードです。このマルウェアは除去が非常に難しく、管理パネルを完全にリセットしても、サイトの奥深くに潜伏し続けることがあります。「バックドア(裏口)」という名前の通り、認証を回避してサイトへ侵入するための隠し通路となるものです。現在、WordPressやMagentoなど多くの人気CMSがサーバーサイドスクリプト言語「PHP」で動作しており、Web上の80%以上の

  2. PHPリダイレクトハックとは?被害の仕組みと5ステップの対処・駆除方法を徹底解説

    自社のPHPサイトが、ユーザーを悪意のあるウェブサイトへ勝手にリダイレクトしていませんか?それは「PHPリダイレクトハック」の被害かもしれません。PHPリダイレクトハックは、PHPで構築されたサイトに対して最も多く実行されている攻撃手法の一つです。このハックでは、訪問者がアダルトコンテンツや偽ブランド品販売サイトなど、さまざまな悪質なサイトへ強制的に誘導されます。攻撃者の多くは、広告収入やインプレッション数を不正に稼ぐことを目的としています。 しかし、こうした悪意あるサイトの多くは、あなたのユーザーにも深刻な被害をもたらします。フィッシングによって個人情報や機密情報を盗まれたり、有害な広告をク