PHPが持つ脆弱性とは?種類と具体的な対策方法を紹介

 2017.03.27 Secure Enterpriseポータル

今回はWebサイト開発言語として広く利用されている、PHPの脆弱性に焦点を当てたいと思います。これまで数多くの脆弱性が発見されてきたPHPですが、一体どのような危険性があるのか?

PHPが持つ脆弱性の種類と、具体的な対策方法についても紹介していくので、現在Webサイト開発に従事していたり、Web担当者として運営に携わっている方はぜひ参考にしてください。

PHPとは

Webサイト開発に良く使用されるPHPは、HTML(Web開発用マークアップ言語)に埋め込むことができるスクリプト言語(プログラミング言語の一種)です。

Webサイト開発において使用されるスクリプト言語はPHP以外にもJavaScriptがあります。2つのスクリプト言語の違い、コードが実行される場所にあります。

JavaScriptはのコードはクライアント側(Webサイトを閲覧しているブラウザ)で実行されます。クライアントがコードを受け取りその場で実行されるので、ユーザーはどのようなコードが書かれているのかを確認することができるのです(右クリック「ページのソースを表示」を選択)。

対してPHPはクライアント側でコードが実行されます。従ってクライアント側はそのコードを受け取ることができず、どのようなコードが書かれているか見ることもできません。

PHPを利用するためには、PHPがインストールされたサーバが必要であり、最初からインストールされているレンタルサーバサービスも存在します。

PHPが持つ脆弱性

PHPは広く利用されているスクリプト言語故に、サイバー攻撃のターゲットになりやすい傾向にあります。また、比較的多くの脆弱性が発見されているスクリプト言語ですが、どういった危険性があるのでしょう?

SQLインジェクション

Webサーバのデータベース操作に用いられるプログラミング言語のSQLは、悪用されると不正にデータを盗み取られたり、Webサーバを遠隔コントロールされてしまうという危険性があります。

攻撃者は内部ネットワークへの侵入を試みたり、偽装メールでユーザーを騙したりする必要はありません。入力フォームが設置されているWebページにて不正SQL文を入力するだけで、簡単にサイバー攻撃を実行できてしまうのです。

このためか、Webサイトに対するサイバー攻撃事件の中でも発生件数が多く、全ての運営者にとって対策が必要なサイバー攻撃です。

OSコマンドインジェクション

SQLインジェクションに類似したサイバー攻撃で、Webページの入力フォームに対し不正なOS命令文を入力することで、サーバを不正に操作することができます。

自社に対してサイバー攻撃が実行されるだけでなく、ボットを設置され他サイトへの攻撃の踏み台とされることもあるので、十分な対策が必要です。

クロスサイトスクリプティング

クロスサイトスクリプティングとは、動的に生成されるWebページにおいて実行されるサイバー攻撃です。攻撃者はHTMLやPHPなどをWebサイトへ直接組み込むことで、運営者が意図しないページへの誘導や、偽装ページにて個人情報などを搾取されてしまいます。

また、攻撃者はユーザーのクッキー情報を閲覧できてしまうため、不正ログインなどの被害が起きることも少なくありません。

ディレクトリトラバーサル

データベース内へのファイルアクセスにおいて、簡易的なディレクトリを指定していると、容易に不正アクセスを許してしまいます。こうした脆弱性を突いたサイバー攻撃がディレクトリトラサーバルです。

基本的な対策で防御できるものの、忘れがちなことも多く、情報漏えいや不正ログインなどのサイバー攻撃を許してしまう可能性があります。

クロスサイトリクエストフォージェリ

攻撃者は予め攻撃用Webページを準備し、そこにユーザーを誘導します。ユーザーが攻撃用Webページにアクセスしてしまうと、予め用意されていた不正リクエストが対象サーバに送信されます。

対象サーバは受け取ったリクエストを処理し、ユーザーが意図しない処理が行われてしまうのです。

このサイバー攻撃で主な被害を受けるのはユーザー側です。例えばSNSでユーザーが意図しない発言が投稿されたりします。

情報漏えいなどはもちろん、こうしたサイバー攻撃もWebサイトの信頼性を大きく低下させてしまうので、十分な注意が必要です。

PHP脆弱性への対策方法とは?

PHPで発生する脆弱性に対し、どのような対策を取ればいいのか?ここでは4つの対策方法を紹介します。

都度最新バージョンへアップデートする

最も基本的な対策方法と言えばアップデート対応です。PHPは定期的にセキュリティパッチの配布がされており、都度発生した脆弱性に対応しています。従って、最新バージョンが発表されてから即座にアップデートすることが大切です。

古いバージョンのままだと脆弱性を放置しセキュリティリスクを高めているのと同じです。アップデート大対応を後回しにせず、都度迅速なアップデートを行いましょう。

管理ページへのアクセス権限を設定する

内部不正による情報漏えいなども考慮して、管理ページへのアクセス権限を設定することも重要です。特にWordPressなどのCMS(コンテンツ管理システム)に侵入されると、PHPの脆弱性を簡単に突かれてしまいます。

そうなると秘密裏に大量の個人情報を搾取することも可能なので、十分に注意しましょう。

脆弱性診断を定期的に行う

適切な脆弱性対策を行うためには、まず脆弱性の有無を確かめる必要があります。特にPHPなど脆弱性が多く発見されている場所では、しっかりと対応しているつもりが、脆弱性がまだ残っているという可能性もあるのです。

従って定期的な脆弱性診断で、自社システムのセキュリティ性を常に確認する必要があります。

各通信レイヤー毎に防御可能な対策を講じる

ご存知の通りWebサイトは「物理レイヤ」「通信レイヤー」「アプリケーションレイヤー」「コンテンツレイヤー」と大きく4つのレイヤーで構成されています。それぞれの通信レイヤー毎に防御する対策は異なります。

中でもWebサイトの前面に配置することでWebサイトやWebアプリケーションに対する攻撃を防ぐ、WAF(Web Application Firewall)は、ここ数年で急速に注目が高まっているサイバー攻撃対策ソリューションのひとつです。

WAF(Web Application Firewall)とは?

ネットワークやサーバを防御する対策としてF/W(ファイアウォール)、IPS(IDS)が代表的ですが、中でもWebアプリケーションに特化したファイアウォールがWAFになります。

すでにご紹介したPHPへの代表的な攻撃パターンである「SQLインジェクション」「OSコマンドインジェクション「パラメータ改ざん」などの対策としてもっとも効果的で、通常のF/WやIPSでは検知が難しい攻撃に対してもWAFを設置することで、対処が可能となります。

まとめ

いかがでしょうか?PHPはWebサイト構築において欠かせないスクリプト言語ですが、脆弱性も多く発見されているので利用する際は十分な注意が必要です。アップデート対応など基本的な脆弱性対策を取るだけでなく、攻撃されることを前提として対策も踏まえ、不正侵入や情報漏えいを許さない対策を取っていただきたいと思います。

今では手軽に行えるWebサイトの脆弱性診断も提供されていますし、シマンテックが提供するクラウド型WAFでは、簡単な設定切り替えで現在のサイトに対して本番同様の環境に対して無料トライアルで検証を行うことが可能です。

是非、この機会に様々なサービスを検討されてはいかがでしょうか。