PHPは他のプログラミング言語と比較して、学習難易度が低いのが特徴です。そのためWebアプリケーションの開発言語として広く利用されています。PHPを使用して構築されたシステムのセキュリティ対策として、WAF(Webアプリケーションファイアウォール)の導入を検討されるケースも少なくないと思います。本記事では、PHPで構築されたシステムへのサイバー攻撃を、WAFで防御する場合に注意すべき点に注目して解説していきます。
WAF(web application firewall)を導入するとPHPが動かないことがある?
WAFの動作によって、一般的なPHPの動作が影響を受けるという問題が起きているようです。PHPで構築されたシステムがレンタルサーバー上などで稼働している場合、レンタルサーバー側のアップデートによってWAFが動作してWebアプリケーションが正常に動作しなくなった、などのケースが確認されています。
参考例①:PHPやCGIでプログラムの記述変更をしたところ403errorが表示されます
※引用元:参考例① GMOペパボ社「LOLIPOP」
参考例② GMOペパボ社「ヘテムル」
それぞれの参考例では、WAF機能を無効にして403エラー(Webサイト閲覧禁止)を回避する方法が書かれています。このように、WAFが意図しないタイミングで導入されたためにPHPの動作に影響が出る場合については注意が必要です。
なぜWAFはPHPをブロックするのか
PHPの大きな特徴として、HTML内にPHPコードを埋め込むと動的なWebページを生成できます。よって埋め込みコード部分を悪用したサイバー攻撃を仕掛けることが可能となります。セキュリティの強化だけを考えれば、コード埋め込みをすべてブロックすればコード埋め込みからのサイバー攻撃はすべて無効化できます。前述したような初期設定でPHPコード埋め込みをブロックしているWAFも存在するようです。
PHPコード埋め込みの例
<html> <head> <title>test</title> </head> <body> <?php echo ‘<p>php test</p>’; ?> </body> </html> |
上記のようなテキストを拡張子phpで保存(例:test.php)し、サーバーに配置してアクセスするとphpタグで囲まれた部分のPHPコードが実行されます。
例えばCMS(Contents Management System、コンテンツ管理システム)として広く利用されているWordPressでは、テンプレートがPHPで構築されています。設定画面でテンプレートを変更して保存した場合に、PHPコード埋め込みが保存内容に含まれていると埋め込みコードがリクエストとしてWordPressサーバーに送信されます。このとき、WordPressサーバーがWAFで防御されていると「保存処理がWAFでブロックされて設定変更できない」、といったケースがあります。
プログラミングとPHPの埋め込みコードの知識があれば、動的なWebページを比較的容易に作成できる場合があります。しかしセキュリティの観点からはサイバー攻撃の標的になりうる(=WAFのブロック対象となりうる)という点を理解しておきましょう。
PHPでWAFを有効活用する方法
HTMLにPHPコードが埋め込まれているWebアプリケーションやWordPressのようなCMSテンプレートに対してWAFを活用するケースでご説明します。リクエスト時にPHPコードが含まれた状態で送信されるケースが多いため、防御ルールを細かく設定できるWAFの導入を検討するとよいでしょう。
PHPコード埋め込みの防御ルールだけ、通信許可に変更可能なWAFを導入するのです。そうすればシステムの改修を極力抑えながら、セキュリティ対策を適用できます。埋め込み可能なコードと不可能なコードのルールをカスタマイズ設定できるWAFであれば、さらに柔軟なセキュリティ対策を実現できます。
一方で、サーバーサイドのロジックにのみPHPが使用されているなど、埋め込みコードを使用しない場合があります。コード埋め込みを行う場合と比較して、WAFがWebアプリケーションへのアクセスをブロックするケースは少なくなると思われます。防御ルールを大幅にカスタマイズしなくてもWAFを導入できる場合があるので、レンタルサーバーなどのWAFが利用可能な状況であれば初期設定に時間を使うことなく、WAFのセキュリティを適用できる可能性があります。このような方法で、 PHPシステムでWAFを有効活用してみましょう。
まとめ
PHPはコード埋め込みなどにみられる動的Webページのテンプレート言語としての一面があります。悪意がないユーザーが悪意のない操作(WordPressのテンプレート更新作業など)を行った場合でも、WAFにサイバー攻撃として検知されてしまうケースが多いと思われます。場合によっては、システムを使用するためにWAFを無効にしなければならないケースもあるでしょう。このような点に注意して運用していきましょう。
システムを動かすためにWAFの検知・ブロック機能が使用できない点を考慮すると、PHPとWAFの相性がいいとは必ずしも言えない部分があるかもしれません。ただし、WAFには防御ルールが細かくカスタマイズ可能なものもあり、PHPコード埋め込みに対応した防御ルールのカスタマイズを適用すれば共存も可能です。相性のよしあしはWAFの仕様で大きく変わってくるといえます。
サイバー攻撃からシステムを守るのがWAFの役割です。また、WAFはシステムを守るだけでなく、防御対象となるWebアプリケーションに行われているサイバー攻撃を可視化できます。サイバー攻撃の手口も日々進化し続けており、Web上のすべてのコンテンツは常にサイバー攻撃のリスクにさらされているため、対応策の検討は喫緊の課題といえます。
もしお使いのシステムにWAFが導入されていないのであれば、システム自体に強固なセキュリティ対策が施されていない限り、無防備な状態で稼働していることになります。システム自体に強固なセキュリティ対策が施されていたとしても、常に進化し続けるサイバー攻撃に対応してシステムをメンテナンスし続けていくのは現実的とはいえません。WAF導入により、システムを改修しなくても最新のセキュリティ対策でのシステム保護が容易に可能となります。
システムで使用されているPHPの用途(コード埋め込み、サーバーサイドロジック等)を把握したうえでWAFの選定を行えば、WAF導入によるセキュリティ対策は充分に可能です。PHPを使用しているからWAFが効果的に使えないと思われている方は今一度、お使いのシステムでPHPがどのように使われているか、導入可能なWAFはないかを検討してみてはいかがでしょうか。
当サイトでは、サイバー攻撃を防ぐためのWAFに興味がある方へ、参考になるダウンロード資料をご用意しております。「サイバー攻撃可視化ツールPrimeWAF 基本ガイドブック」は、WAF選定時に抑えるべき機能やポイントがわかる資料になっています。ぜひ資料をダウンロードください。