PHPサイトがハッキングされた?考えられる原因となるPHPの脆弱性13選
PHPは現在、ほぼすべての人気CMSの背骨とも言える存在です。シンプルさとライセンスフリーという特性により、PHPは動的なWebサイト開発において最も選ばれている言語です。しかし一方で、コーディング規範の甘さが原因で、PHPサイトへの不正侵入は比較的容易になってしまいました。インターネット上には「カスタムPHPサイトがハッキングされた」「PHPサイトがリダイレクトハッキングに遭った」といったユーザーの相談スレッドがあふれています。これがPHP自体の悪評につながっていますが、実はPHP自身には何の落ち度もありません。
では、PHPに責任がないとすれば、PHPサイトがリダイレクトハッキングされる原因は何なのでしょうか。本記事では、PHPサイトを危険にさらすセキュリティ上の欠陥と、その対策方法について詳しく解説します。
ハッキングされたカスタムPHPサイト:実際の事例
多くのサイトオーナーは開発部分だけに注力し、セキュリティ面をおろそかにしがちです。そのため、PHPで構築されたサイトがハッキングされても、開発費しか支払っていない以上、頼るべき相手がいません。困窮したユーザーはオンラインフォーラムで助けを求めたり、このような記事を読んで対処法を探したりすることになります。以下はそのような相談の実際の例です。
ハッキングされたカスタムPHPサイト:主な症状
- フィッシングページがサイト上に出現し、ユーザーに機密情報の入力を促している。
- サイト内のリンクをクリックすると別ドメインへ飛ばされる。設定ミス、またはPHPサイトへのリダイレクトハッキングが原因の可能性がある。
- アドブロッカーが、暗号資産マイニング目的の要素を検出してブロックしている。
- 不明なPHPファイルマネージャーが出現し、悪意のある広告が表示される。
- PHPファイルに未知のコードが挿入され、リダイレクトやフィッシングサイトへのバックリンクが生成されている。
- カスタムPHPサイトに意味不明な文字列(gibberish)が表示される。日本語キーワードハッキングや製薬系ハックなどが原因の可能性がある。
- サードパーティのホスティング利用時に、アカウント停止の警告メッセージが表示される。
- マルウェアスパムなどを理由にGoogleなどの検索エンジンのブラックリストに登録され、警告メッセージが表示される。
- phpMyAdminに見覚えのない新しいデータベース管理者アカウントが存在する。
- 自社ドメインから送信したメールがスパム判定されている。
- 予期しないエラーが頻発し、サイトが極端に遅くなったり応答しなくなったりする。
ハッキングされたカスタムPHPサイト:13の原因
サーバーの設定ミス
1. 脆弱なファイル権限
ファイル権限は、特定のユーザー種別に対して特定のPHPファイルの編集権限を付与する仕組みです。PHPファイルの権限が正しく設定されていないと、攻撃者にマルウェアスパムなどを注入される恐れがあります。
2. 初期状態のままの弱いパスワード
脆弱または使い回しのパスワードの使用は、カスタムPHPサイトがハッキングされる典型的な原因です。攻撃者は専用辞書を使って可能な限りのパスワードの組み合わせを試行します。FTPへの総当たり攻撃(ブルートフォース)やcPanelへのブルートフォースといった攻撃経路を通じて管理画面へのアクセスに成功すると、攻撃者はPHPマルウェアやバックドアをアップロードできるようになります。
関連記事 – WordPressのバックドアを削除する方法
3. ディレクトリインデックスが有効になっている
ディレクトリインデックスを有効にすると、攻撃者が機密性の高いPHPファイルの中身を読める可能性があります。これによりサーバーに関する重要な情報が漏洩し、その情報をもとにカスタムPHPサイトへのサイバー攻撃が仕掛けられます。
4. 不要な開放ポート
開放ポートもカスタムPHPサイトのハッキング要因になります。さらに、攻撃者は開放ポートを通じてサイトのバックエンドサービスを調査(フィンガープリンティング)できます。得られた情報を利用して、エクスプロイトによってバックエンドサービスや開放ポートそのものを突破される恐れがあります。
5. 低品質なホスティング
一般的に、格安のPHPホスティングにはセキュリティ面での大きな代償が伴います。低品質なホスティング事業者は、サービス価格を下げるためにセキュリティ運用を削減しています。そのため、こうしたサーバー上で感染が広まり始めると、直接狙われていなくても、同一サーバー上の複数のサイト(あなたのPHPサイトを含む)が被害を受ける可能性があります。
脆弱なPHPコード
6. SQLインジェクション(SQLi)
PHPにおけるSQLインジェクションは、主にユーザー入力のサニタイズ(無害化)不足が原因です。コーディング品質の低さゆえに、未処理の入力がそのままデータベースサーバーに渡されて実行されます。カスタムPHPページでSQLiを引き起こす主な原因は以下の通りです。
- 空白文字に対するフィルタリングの欠如
- 文字列の区切りに引用符を使用していること
- 認可されていないユーザー入力をデータベースに渡していること
- Unicodeエンコーディングの不適切な実装
- コードとデータの混在
- 誤った型操作
7. クロスサイトスクリプティング(XSS)
XSSはSQLインジェクションに次いで、カスタムPHPサイトがハッキングされる頻度の高い原因です。この2つの攻撃はWeb上であまりに蔓延しているため、毎年OWASP Top 10にランクインしています。XSSもユーザー入力のサニタイズ不足が発端となります。PHPサイト全般におけるXSS攻撃は、主に次の3種類に分類されます。
- 格納型XSS(Stored XSS): Web管理者に特定のリンクをクリックさせることで悪意あるスクリプトを読み込ませ、Cookieを盗むタイプ。
- 反射型XSS(Reflected XSS): 比較的高度な脅威で、フォーラムや掲示板を持つPHPサイトでよく見られます。悪意あるコードがサーバー上に保存され、ユーザーが該当ページを訪れるたびに実行されます。
- DOMベースXSS: 上記2種類のいずれかに分類されることもありますが、検出が非常に難しく、コード監査後でも見逃されることがあります。
XSSに脆弱なサイトは、PHPサイトへのリダイレクトハッキングや管理者Cookie窃盗の標的になりやすい傾向があります。
8. クロスサイトリクエストフォージェリ(CSRF)
CSRF攻撃は、PHPサイトのユーザーに意図しない操作を実行させることを狙います。カスタムPHPサイトでユーザー登録を許可している場合、CSRFによって任意のアカウント削除などの操作が実行される可能性があります。攻撃者からその影響は直接的には見えませんが、CSRFによってユーザーが失われ、サイトのトラフィック低下につながることがあります。
9. ローカルファイルインクルージョン(LFI)
ファイルインクルージョン脆弱性は、攻撃者が「www」ルートディレクトリの外にあるファイルへアクセスできる場合に発生します。主な原因は、ファイル名をパラメータとして受け取る不適切にコーディングされたスクリプトです。この脆弱性により、攻撃者はサイトの設定ファイルや機密性の高いパスワードファイルを読み取れます。取得した情報をもとに管理者権限でログインされ、PHPサイトの乗っ取りに至るのです。
PHPのゼロデイ脆弱性
10. バグを抱えたプラグインやテーマ
不適切にコーディングされたPHPのプラグインやテーマは、サーバー上に直接存在し、悪用されるのを待つ脆弱性そのものです。攻撃者がバグのあるプラグインを集中的に狙い、PHPサイトへの大規模攻撃を実行した事例も存在します。PHPサイトがハッキングされた場合、その原因は不適切にコーディングされたプラグインかテーマである可能性が高いと言えます。
11. 改ざんされたPHPパッケージ
PHPのライブラリやパッケージ自体が脆弱なケースもあります。これは他の言語でも起こり得ることです。近年では、PHPのパッケージマネージャーPEARが攻撃者によって改ざんされました。攻撃者は正当なパッケージを自身の注入コードに差し替え、疑いを持たないユーザーにダウンロードさせました。このパッケージは、PHPで書かれた無料ライブラリを検索・ダウンロードする目的で利用されていたものです。こうした事例は稀ですが、ゼロデイ脆弱性によるカスタムPHPサイトのハッキングの可能性を完全に無視することはできません。
ソーシャルエンジニアリング攻撃
12. フィッシング
あなたのサイトの管理者は最近、「ナイジェリアの王子」からのメールを受け取っていませんか?この種の攻撃は、Web管理者を欺いてPHPサイトの機密情報を吐き出させ、サイトの乗っ取りにつなげるよう設計されています。フィッシングメールをドメイン側で確実にフィルタリングしましょう。
13. テイルゲーティング
テイルゲーティングはフィッシング攻撃の変種の一つです。攻撃者はまず権限の低いユーザーアカウントを侵害し、それを足がかりに権限を昇格させます。この手法はセキュリティ研究者のケーススタディでも確認されており、検知回避のために頻用されています。テイルゲーティングの結果は、情報窃取からPHPサイトの完全な乗っ取りまで多岐にわたります。
カスタムPHPサイトがハッキングされましたか?チャットウィジェットからご連絡いただければ、ハッキングされたPHPサイトの復旧をお手伝いいたします。
ハッキングされたカスタムPHPサイト:サイトを守るための対策
適切なファイル権限を設定する
PHPには、ファイル権限を確認するための3つの関数が用意されています。
- is_readable(): ユーザーがPHPファイルの読み取りを許可されている場合にtrueを返す関数。
- is_writable(): ユーザーがPHPファイルへの書き込みを許可されている場合にtrueを返す関数。
- is_executable(): ユーザーがPHPファイルの実行を許可されている場合にtrueを返す関数。
また、PHPのchmod()関数を使えばファイル権限を変更できます。ファイル名と権限を指定するだけで、「chmod($RandomFile, 0644);」のように記述します。下の画像には、ファイル権限の一覧とそれぞれの意味をまとめています。なお、PHPインタープリターに入力が8進数であることを伝えるため、権限の前に必ず「0」を付けてください。
強固なパスワードを設定する
カスタムPHPサイトのパスワードが安全であることを確認しましょう。数字・英字・記号をバランスよく組み合わせることが大切です。さらに、パスワードを設定する前に、Rockyou.txtなどの有名なパスワード辞書を確認し、設定予定のパスワードが含まれていないかチェックすることをおすすめします。Linuxユーザーであれば、Grepコマンドが巨大なファイルの検索に役立ちます。「grep -i '* YourNewpass *' rockyou.txt」のように実行するだけです。また、強力で長くランダムなパスワードを自動生成できるオンラインツールを活用するのも有効です。
ディレクトリインデックスを無効化する
特定のディレクトリのインデックス表示を無効にするには、そのディレクトリの.htaccessファイル(.htaccessがなければ新規作成)に次の1行を追加します。
Options -Indexes
セキュリティ対策済みのホスティングを選ぶ
ホスティングサービスを選ぶ際は、Astraが統合ホスティングパートナーと連携して提供しているようなファイアウォールやセキュリティソリューションが含まれているかを確認してください。加えて、サブネットワークによって同一サーバー上の他サイトから自分のサイトが隔離されていることも重要なポイントです。
PHPコード監査を実施する
カスタムPHPサイトの構築後に、ゼロから作り直すのは現実的ではありません。だからこそ、コード監査こそが、攻撃者に先んじてPHPサイトの脆弱性を発見する最良の手段です。Astraは、サイトのセキュリティを監査・テストする熟練ハッカーのコミュニティを擁しています。コード監査だけでなく、万一ハッキング被害に遭った際のクリーンアップもサポートします。
Astraのデモを今すぐ体験しよう!
-
Site Web Codeigniter または Laravel pirate? Codeigniter と Laravel の修正コードの脆弱性
Laravel と Codeigniter は、フレームワークとして PHP を使用し、Web サイトの作成者として使用します。自然界のオープン ソース デ ドゥ フレームワークが人気を博しています。 Cependant, les utilisateurs doivent comprendre que le déploiement de sites utilisant ces frameworks ne les rend pasûrs. Ce sont les pratiques de développement sécurisées qui comptent. L’injection SQL
-
ウェブサイトのバックドアを見つけて削除する方法|検出から再発防止まで徹底解説
実際のところ、バックドアは開発者がサイトへ正当にアクセスするための手段として利用されることもあります。しかし、作成したのが開発者であれハッカーであれ、バックドアは常にサイトのセキュリティにおける潜在的な脅威となるのです。 ウェブサイトのバックドアを検出するには? 一般に、ウェブサイトのバックドア検出は決して簡単な作業ではありません。バックドアは正常なファイルやデータベースの間に極めて巧妙に隠されているからです。ほとんどのバックドアは正規のコードと見分けがつかない形で記述されており、まさにその性質によって管理者の注意を巧みにかわすのです。 ここからさらに踏み込み、実際にどのような種類のバックド