Drupal 10を安全に保つ5つの方法
Sushnigdha Tripathy
2022年8月23日
0 分で読めますDrupalは、主要企業や政府機関がミッションクリティカルなアプリケーションに利用する、人気のコンテンツ管理システム(CMS)です。開発者コミュニティの支援、堅牢なセキュリティ、多言語サポート、WCAGガイドラインへの準拠、そして容易な連携を備え、Drupalは多くの組織に選ばれるCMSとなっています。
2022年12月にリリース予定のDrupal 10には、魅力的な新機能が数多く搭載されています。主な変更点は、自動アップデートシステムの導入、コアでの一部jQuery使用箇所の標準JavaScriptへの置き換え、サードパーティ依存関係のアップグレード(CKEditor 5、Symphonyバージョン6、PHP 8.1)、およびHAL、QuickEdit、Aggregator、RDF、Activity Trackerなど一部コアモジュールの削除です。これらのアップグレードにより、Webサイトのパフォーマンスが向上し、優れたユーザー体験を提供できます。
Drupal 9からDrupal 10への移行は、バージョン8から9への移行と同様にスムーズに進むと予想されています。しかし、セキュリティへの警戒を緩めるわけにはいきません。Drupal 10のCMSも、悪意ある攻撃者の攻撃対象になり得るからです。この記事では、Drupal 10のセキュリティを強化するためのベストプラクティスを5つご紹介します。
1. 脆弱性を常に把握する
Drupalサイトを保護するうえで重要なのは、Snyk Vulnerability DatabaseでDrupalの既知の脆弱性を追跡し、最新のDrupalセキュリティアドバイザリを確認して、潜在的な脆弱性に先手を打つことです。確認する方法はいくつかあります。
Drupalのセキュリティチームは、毎週セキュリティアドバイザリを公開しています。セキュリティ関連の最新情報を把握するには、ログインしてメールニュースレターに登録する、DrupalのSlackグループに参加する、またはRSSフィードをフォローしましょう。
DrupalにはEvents Loggerビューアが組み込まれており、サイトを定期的に監視して不審なアクティビティを検出できます。
Drupal APIの一部であるupdate managerは、新しいアップデートを定期的に確認し、通知します。最新のセキュリティアップデートを受け取るには、Manage administrative menuにメールアドレスを追加して設定できます。
Drushを使えば、時間のかかる作業を自動化し、セキュリティアップデートをすばやく適用できます。たとえば、DrupalのUIからセキュリティアップデートを適用するには、ログインしてモジュールを探し、設定変更をインポートするなどの作業が必要です。Drushなら、同じ操作を1つのコマンドで実行できるため、セキュリティアップデートを定期的に適用しやすくなります。
2. クロスサイトスクリプティング(XSS)攻撃を理解する
Snyk Vulnerability Databaseによると、Drupalの脆弱性は多くありません。しかし、20年間に報告された脆弱性のうち、かなりの割合をクロスサイトスクリプティング(XSS)攻撃が占めています。XSSはJavaScriptの脆弱性で、攻撃者がJavaScriptやHTMLを介してクライアント側のスクリプトに悪意あるコードを挿入します。
危険に気づかないWebアプリケーションのユーザーは、悪意あるコードを実行するよう仕向けられます。ユーザーのブラウザーでコードが実行されると、攻撃者はセッショントークンを盗み、ユーザーになりすまして、本来ユーザーだけが行える操作(プライベートシステムへのアクセスなど)を実行できます。
XSS攻撃には、反射型、格納型、DOMベースの3種類があります。
反射型(非永続型)XSS
反射型XSSは最も単純なXSS攻撃で、WebアプリケーションからユーザーのブラウザーへXSSペイロードが反射されます。この攻撃は非永続型であるため、ペイロードはWebサイトに保存されません。代わりに、URLの末尾にスクリプトが埋め込まれます。ユーザーがそのURLをクリックすると、悪意あるペイロードが実行されます。
格納型(永続型)XSS
格納型攻撃は、クライアント側に対する攻撃の中で最も危険です。攻撃者が標的のデータベースにペイロードを挿入すると発生します。データ検証が行われない場合、ペイロードはWebサイトに永続的に保存されます。ユーザーが影響を受けたWebページを開くと、ブラウザーで意図せずペイロードを実行してしまいます。
DOMベースのXSS
Document Object Model(DOM)攻撃はクライアント側の攻撃であり、攻撃ペイロードはサーバーに送信されません。サーバーログに記録されないため、検出が困難です。
XSS攻撃がどのように発生するか見てみましょう。
スポーツ用品のECサイトを例に考えてみましょう。ユーザーが入力したデータを、次のようなURLパラメーターで受け取る検索機能があります。
上記のアプリケーションでは、検索されたテニスラケットの詳細が表示されます。
見てのとおり、入力値の検証がありません。そのため、ハッカーはURLを変更して、次のような悪意あるスクリプトを挿入できます。
ユーザーがハッカーのURLにアクセスすると、悪意あるスクリプトがブラウザーで実行され、次のような応答が返されます。
XSS攻撃を効果的に防ぐには、次の対策が必要です。
コンテンツセキュリティポリシー(CSP)を導入し、XSS攻撃を検出して無効化する。
HTMLタグをエスケープするフレームワークを使用する。
すべてを記録するログ管理システムを導入する。
OWASPのセキュリティベストプラクティスに従う。
HTMLの制御文字を、コンテキストに応じたエンコードに変換する。
ユーザー入力から取得した生のHTMLをレンダリングしない。
Web脆弱性スキャナーでデータベースを定期的にスキャンする。
3. 常にHTTPSを使用する
HTTPプロトコルはデータを平文で送信するため、攻撃者はHTTPを使用するDrupalサイトの脆弱性を悪用し、ファーミング、フィッシング、中間者(MITM)攻撃を実行できます。通信する2者間の接続を保護するため、常にHTTPSを使用しましょう。そのためには、Webサイトのトラフィックを暗号化する安全なプロトコルであるSSL証明書が必要です。
SSL証明書は、公開鍵暗号方式と共通鍵暗号方式を使って通信を暗号化し、安全性を高めます。そのため、データが傍受されたとしても、内容は判読できない状態になっており、ハッカーに悪用されることはありません。
4. 最小権限の原則を適用する
組織で特権アカウントが使われているのは珍しいことではありません。しかし、特権アカウントは悪意ある攻撃者にシステムから情報を持ち出され、甚大な被害を受ける機会を増やします。そのため、最小権限の原則(POLP)を常に適用し、ユーザーがタスクを完了するために必要なリソースだけにアクセス権を制限しましょう。
POLPを適用するとは、必要なタスクを完了するために必要最小限の権限だけをユーザーに割り当て、それ以上は付与しないことです。Drupalサイトやインフラストラクチャ、データベース、リソースへのアクセスを制限すれば、組織の内外にいる攻撃者が不正にアクセスする可能性を低減できます。POLPを実装する主な方法は、特定の権限を定義したロールを割り当てることです。
Drupalでは、コンテンツの閲覧や編集権限を持つロールをユーザーに割り当てます。「Permissions」ページで権限を詳細に定義できます。Drupalでの権限設定は簡単です。まずAdminパネルにアクセスし、PeopleメニューをクリックしてからPermissionsをクリックし、ロールに応じてユーザーにアクセス権を付与します。
Drupalの権限は、次のカテゴリーに分類されます。
匿名ユーザー
匿名ユーザーのロールは、ログインしていないすべてのユーザーに適用されます。通常、ユーザーに付与されるのは読み取り専用の権限で、アクセス範囲は最も制限されています。
認証済みユーザー
認証済みユーザーとは、ログインしているユーザーです。通常、匿名ユーザーより多くの権限を持ち、ユーザー名またはメールアドレスとパスワードによるログインシステムで本人確認が行われます。
管理者
管理者(rootユーザー)はroot権限を持ち、システムに広範な変更を加えることができます。Drupalサイトにroot管理者としてアクセスするときは、細心の注意が必要です。わずかなミスでも、Webサイトに深刻な被害をもたらす可能性があります。
RBACによるアクセス制御
前述の権限に加えて、Drupalではロールベースのアクセス制御(RBAC)を採用しています。RBACにより、DrupalはPOLPを徹底し、ユーザーがサイト上で閲覧・実行できる内容を制御します。必要な情報だけに基づいてロールごとにアクセス権を付与することで、信頼できる担当者だけがビジネス上重要なデータにアクセスできるようにします。
5. Drupalのセキュリティモジュールで保護を強化する
モジュールとは、Drupalサイトに新しい属性を追加し、機能を拡張するJavaScriptファイルとPHPファイルの集合体です。Drupalにはサイトのセキュリティを向上させるさまざまなモジュールが用意されています。以下に例を挙げます。
Login Securityモジュール
Login Securityモジュールは、不正なログイン試行の回数を制限する重要なDrupalモジュールです。特定のIPアドレスを一時的または恒久的にブロックすることもできます。さらに、総当たり攻撃やその他の望ましくないアクティビティが発生したときに通知するよう、Drupal管理者が設定できます。
Security Review
Security Reviewモジュールは、サイトに攻撃者が悪用できる脆弱性を生む、軽微な開発上のミスがないかを確認します。このモジュール自体が変更を加えることはありませんが、攻撃者が悪用可能な脆弱性を示すセキュリティテストを実行します。レポートを受け取ったら、指摘箇所を確認してサイトの保護を強化できます。
Security Kit
Security Kit(SecKit)モジュールには、クリックジャッキング、クロスサイトスクリプティング、クロスサイトリクエストフォージェリなど、一般的なWebの脆弱性を特定するための複数の機能があります。また、HTTPレスポンスヘッダーの設定を支援し、MITM攻撃を防ぎます。
Password policyモジュール
Password policyモジュールは、特定のロールに対するパスワードポリシーの設定を支援するコントリビュートモジュールです。サイト管理者はさまざまな種類のパスワードポリシーを定義でき、それぞれにパスワード変更時に満たすべき制約(サブモジュール)を設定できます。制約には次のものがあります。
大文字
小文字
遅延
英字/数字(英数字)
文字数
句読点
ユーザー名
数字の配置
二要素認証モジュール
二要素認証(2FA)は、Drupalサイトにセキュリティ層を追加し、有効な認証情報を持つユーザーだけがアクセスできるようにします。TFAモジュールでは、SMSで届くコード、時間ベースのワンタイムパスワード、事前生成されたコードなど、複数の2FA方式を選択できます。
Drupal CMSを安全に保つ
Drupalは30サイトに1つが利用する人気と信頼性の高いWebサイトソリューションです。では、Drupalのセキュリティを支えているのは何でしょうか。
DrupalはOWASPのセキュリティ標準に準拠し、堅牢で細かなアクセス制御を備えています。また、Drupalセキュリティチームが綿密に監視する、安全なコードベースを提供しています。これらを総合すると、Drupalは非常に安全性の高いCMSと言えます。しかし、脆弱性が存在しないという意味ではありません。
CMSとしてDrupalを使用する際は、Web攻撃について十分に理解し、Webサイトを保護するベストプラクティスを実践する必要があります。ここで紹介した5つのセキュリティ対策に加え、Webサイトのセキュリティスキャンや脆弱性スキャンを実施し、Drupalサイトを安全に稼働させ続けましょう。
Capture the Flagを始めよう
オンデマンドのバーチャル入門ワークショップを見て、Capture the Flagの課題の解き方を学びましょう。



