Joomlaサイトがハッキングされスパムメールを送信している?主な原因と直し方を徹底解説
Joomlaは、活発なコミュニティサポートに支えられた非常に堅牢なCMSです。カスタマイズ性が高く、個人ブログから政府関連サイトまで、さまざまな規模のサイトがJoomla上で運用されています。90以上の言語をサポートしている点も、世界的な人気の理由の一つです。しかしその一方で、人気があるからこそスパマーやハッカーの格好の標的にもなりやすくなっています。実際、Joomla公式コミュニティフォーラムには「自分のJoomlaサイトがハッキングされ、スパムメールを大量に送信してしまった」という相談が頻繁に投稿されています。被害件数が非常に多いため、この種の攻撃は決して特殊なケースではありません。送信されるスパムメールには、バイアグラなどの医薬品広告が含まれていることが多いのも特徴です。
Joomlaがハッキングされスパム送信している兆候
スパムメール攻撃の発覚には、通常 数時間から数日かかります。これは、メールがネットワーク上に伝播するのに時間がかかるためです。そのため、多くの場合はユーザーからの通報によって初めて気づくことになります。ただし、送信前にオンラインサービスを使ってスパム判定をチェックしている場合、管理者が先に通知を受け取ることもあります。こうしたサービスでは、ドメインがスパムブラックリストに登録されていることが判明する場合があります。また、一部のオンラインセキュリティソリューションなら、脅威を事前に検知して通知してくれることもあります。
場合によっては、スパム攻撃によって帯域幅が圧迫されることもあります。その際は、ISP(インターネットプロバイダ)から「スパムメールが大量に外へ流出している」と通知されるケースがあります。インターネット上にはスパムリストを管理するサービスが多数存在しており、Joomlaサイトがハッキングされてスパムを送信している状態になると、サーバーのIPアドレスがブラックリストに登録されます。一度どこかのサービスに登録されると、その情報は他のブラックリストにも波及していきます。やがてGoogleなどの検索エンジンもあなたのサイトをスパムとしてマークし、訪問者には次のような警告ページが表示されることになります。
サイトから大量のスパムメールが配信されていることが確認されたため、Googleがこのサイトを攻撃ページとして登録した例です。このページは、ユーザーに対してサイトへのアクセスを控えるよう警告します。もし自サイトにこれらの症状が見られる場合は、Joomlaがハッキングされスパムを送信している可能性があります。
Joomlaハッキング・スパム送信の実例
「Joomlaがハッキングされスパムを送信する」という問題はかなり広範囲に発生しており、コミュニティフォーラムには多数の被害報告が寄せられています。中には、駆除したのに再感染してしまうケースもあります。以下は、Joomlaコミュニティフォーラムに投稿された実例の一部です。
Joomlaがハッキングされスパム送信される原因
SQLインジェクション
Joomlaのデータベースは、攻撃者の格好のターゲットです。SQLインジェクションはWeb上で非常に一般的な攻撃手法であり、OWASP Top 10の脆弱性リストにも名を連ねています。攻撃者がデータベースを掌握すると、SQL文を使って会員登録用のメールアドレスが保存されているテーブルを特定できます。リストを入手した攻撃者は、それを使って大量のユーザーへスパムを送りつけるのです。したがって、データベースを安全に保つことは極めて重要です。
一例として、JoomlaにはJimtawlという拡張機能があります。Web上でラジオ局を運営できるコンポーネントですが、このコンポーネントにSQLインジェクション(SQLi)の脆弱性が発見されました。脆弱だったのはidパラメータで、攻撃URLは次のような形になります。
https://localhost/[PATH]/index.php?option=com_jimtawl&view=user&task=user.edit&id=[SQL]
このコンポーネントはユーザー入力を適切にサニタイズしていなかったため、SQLiが可能でした。idの後ろにSQL文を追記することで、攻撃者はデータベースの内容を読み取れます。たとえば、データベースのバージョンとユーザー名を表示させるには、次のようなクエリを実行します。
' AND EXTRACTVALUE(66,CONCAT(0x5c,(SELECT (ELT(66=66,1))),CONCAT_WS(0x203a20,USER(),DATABASE(),VERSION())))-- VerAyari
先頭のアポストロフィで前のステートメントの入力を終了させ、続くOR句によって次のSQL文が実行されます。この文により、ユーザー名とデータベースのバージョンが取得されます。この脆弱性のエクスプロイトコードはすでに公開されており、攻撃者は自動化ツールを使って攻撃を高速化することもできます。ここからさらに、データベース内に保存されているすべてのメールアドレスを検索される恐れがあります。
さらに、サイトがスタックベースSQLiに脆弱な場合、攻撃者はコマンドを実行できる可能性もあります。これらのコマンドはローカルサーバー上で動作するデータベースサービス経由で実行され、結果的にJoomlaのスパム送信問題につながります。つまり、スパムはローカルのSMTPサーバーそのものから送信されることもあるのです。スパム送信だけでなく、攻撃者は入手したデータベース情報を利用して、サイトへのさらなる攻撃を行うこともあります。
脆弱な認証情報
攻撃者がSMTPサーバーのログインに対してブルートフォース攻撃(総当たり攻撃)を仕掛けた可能性もあります。デフォルトのパスワードや弱いパスワードを使用していると、サイトはこの種の攻撃に対して無防備になります。SMTPサーバーが攻撃者の手に落ちれば、Joomlaサイトがハッキングされてスパムを送信する状態に陥りかねません。
開放されたポート
開放ポートも、攻撃者にサイトへの侵入経路を与えてしまいます。SMTPのデフォルトポートは25番ですが、スパマーの標的になりやすいため使用は避けるべきです。ISP側でこのポートをブロックしている場合もあります。587番ポートの方が優れた選択肢です。TLS暗号化をサポートしているためです。25番ポートはマルウェアやスパムの主要な標的であり、開放されたポートを突かれることでスパム送信被害につながります。25番ポートをインターネットに露出させると、大量の受信スパムを招く結果にもなりかねません。
悪意あるスクリプトのアップロード
攻撃者は一般的に、前述のような既知の手法でサーバーを攻略します。その後、スパム送信を効率化するために自動化を導入します。PHPスクリプトはこの目的に非常に適しており、SMTPサーバーや、場合によってはMXサーバーへの接続に使われます。典型的なスクリプトは次のようなコードを含んでいます。
明らかにコード難読化のテクニックが使われていますが、このスクリプトをデコードすると、おおよそ次のような内容になります。
コードを見ると分かるように、スクリプトはeval()構造を使用しています。この命令は入力文字列をPHPコードとして処理します。安全なコーディングの観点からは、eval()の使用は避けるべきとされています。攻撃者がサーバー上で任意のコードを実行できてしまうためです。さらに、eval()を使うとコードをデータベース内に保存することも可能で、後から実行されてスパム送信につながります。これらのスクリプトは、次の2つの方法で大量スパムを送信します。
- MTAキュー経由のスパム:MTA(Message Transfer Agent)は、Joomlaサイトから受信者へメールを配送する役割を担います。悪用スクリプトはMTAキューに大量のスパムメールを注入することがあり、「MTA Queue is too large!(MTAキューが大きすぎます)」といった警告が表示されることがあります。一定の上限に達すると、ISPによってメール送信がブロックされることもあります。そこでスクリプトは、MXサーバーへ直接接続する方式を採ることがあります。
- ダイレクトto MXスパム:Direct to MX方式では、ISPを仲介せずにメールを送信できます。Direct to MX自体は、メールを受信者のMail eXchangeサーバーへ直接届ける正当なサービスです。これによりメールはISPのSMTPサーバーを経由しません。スクリプトはこの仕組みを悪用して、スパムを受信者へ直接注入します。これはMTAキューでの検知を回避するためです。
共用ウェブスペース
安価なレンタルサーバーが、結果的に高くつくことはよくあります。複数のサイトが同じスペースを共有していると、感染は瞬く間に広がります。つまり、Joomlaのスパム送信問題は、同じサーバー上の別サイトからの感染が原因である可能性もあるのです。この場合、どのサイトがスパムを生成しているのかを特定するのが非常に困難になります。
Joomlaのスパム送信被害後のサーバー復旧について専門家の支援が必要ですか?チャットウィジェットからご連絡ください。今すぐスパムメール問題を解決できます。
スパムメールを「受け取る」ケース
登録スパム
ここまでは「送信してしまう」ケースを扱ってきましたが、サイト自身がスパムの標的になる場合もあります。大量の偽会員登録がサイトに集中するのです。Joomlaには、フォームが無効化されていてもメールを送信できてしまう脆弱性がありました。原因はcom_contactというコンポーネントの脆弱性で、CVE-2018-17859として登録されています。これを悪用すると、攻撃者は大量のスパムメールを送信できてしまいます。適切なチェック機能がなければ、ボットが登録テーブルを勝手に埋め尽くし、最終的には正規の登録とボットによる登録の区別がほぼ不可能になってしまいます。
さらに、新規登録のたびに通知を受け取る設定にしているサイトでは、登録スパムによって大量の通知が発生します。通知が一定の上限に達すると、プロバイダはそれをスパムと判断し、アカウントをブロックして新着通知を停止してしまうことがあります。登録時だけでなく、サイトが攻撃を受けているときにも通知が発生するため、通知上限を超えると同様の流れでブロックされます。
配達不能レポート(NDR)スパム
SMTPプロトコルの仕様上、「From」フィールドと「To」フィールドは誰でも改ざん可能です。スパマーは日常的にこれを悪用し、「From」欄にあなたのドメインを設定します。典型的な手順は次のとおりです。
- ステップ1: ボットが存在しない偽のメールアドレスのリストを生成します。
- ステップ2: あなたのメールアドレス(admin@wsxdn.com)が「From」欄の送信者として設定されます。
- ステップ3: ボットが存在しないアカウント宛にメールを送信します。
- ステップ4: メール配信が失敗します。
- ステップ5: 配達不能レポート(NDR)メールがあなたのアカウント(admin@wsxdn.com)に返送され、膨大な量のスパムメールが殺到します。
Joomlaのスパムメールを止める方法:具体的な対策
受信スパムへの対策
Sender Policy Framework(SPF)の導入
SMTPプロトコルには限界があり、「From」欄で他人に自分のドメインを使われることを技術的に完全に防ぐことはできません。しかし、対策はあります。メールサーバーに対して「どのIPアドレスが自分のドメインの代理としてメール送信を許可されているか」を通知すればよいのです。これを実現するのがSPFで、DNS TXTレコードの一種です。SPFを設定する手順は以下のとおりです。
- まずDNS管理ページにアクセスします。
- レコードセクションを開き、追加をクリックしてメニューからTXTを選択します。
- 以下の項目を入力します。
- Host: ホスト名を指定します。たとえば@を入力すると、レコードがドメイン名に直接マッピングされます。
- TXT Value: 設定したい値を入力します。
- 最後に保存をクリックします。
最終的には、YourDomain.com. IN TXT "v=spf1 mx ip4:123.123.123.123 -all" のようなレコードになります。
これは「YourDomain.comの正当なメール送信元は2つだけ。ひとつはMail Exchangeサーバー(MXサーバーはあなたのメールの受信ドメインを定義する)、もうひとつは123.123.123.123のサーバー」という意味です。それ以外のメールはすべてスパムとして扱われます。ただし注意点として、robots.txtと同様にSPFはあくまで「規約」であり、従うメールサーバーもあれば従わないものもあります。
Astraのセキュリティ専門家に今すぐ相談して、マルウェアを即座に駆除しましょう。強力なファイアウォールがXSS、LFI、RFI、SQLインジェクション、悪質なボット、自動脆弱性スキャナーなど80種類以上の脅威からサイトを守ります。今すぐJoomlaサイトを防御。
送信スパムへの対策
スパムスクリプトの特定と削除
ステップ1: まず、スパムを生成しているスクリプトを特定する必要があります。管理者権限(SUDO)でメールサーバーにログインしてください。
ステップ2: スクリプトによる送信メールを記録するため、PHP.iniファイルに mail.add_x_header = On が設定されていることを確認します。完了したら、メールキューを調査します。
ステップ3: mailqコマンドを実行します。このコマンドでキュー内のすべてのメールが一覧表示されます。ここから、送信元を追跡したいメールのIDを控えておきましょう。
ステップ4: 次に「grep」と「postcat」コマンドが役立ちます。以下のコマンドを実行します:postcat -q <mailqで取得したID> | grep X-PHP-Originating-Script
ステップ5: コマンドの出力は X-PHP-Originating-Script: 45:SPAMmailer.php のような形になります。「45」はSPAMmailer.phpスクリプトのUIDです。これでスパム送信スクリプトの特定と、サーバー上でのローカルIDの確認に成功しました。スクリプトを削除し、環境をクリーンアップしましょう。
なお、ステップ4で何も出力されない場合は、アカウント自体が侵害されている可能性が高いです。Joomlaのスパム送信を防ぐため、すぐに安全なパスワードへ変更してください。
その他の予防策
- Googleにブラックリスト登録されている場合は、サイトをクリーンアップして審査を申請しましょう。
- 特段の必要がない限り、ダイレクトto MX接続をブロックします。
- SMTPに25番ポートを使わず、代わりに587番ポートを利用しましょう。
- 専用VPSホスティングの利用を検討してください。共用環境と比べて、スパム送信感染が広がるリスクを減らせます。
- フォルダの読み取り・書き込み・実行権限を賢く管理しましょう。スパム送信スクリプトがアップロードされても、コード実行を防げる可能性があります。
- 評判の良い拡張機能のみをインストールし、不明な拡張機能や非正規(ヌル)版は避けましょう。
- SMTPサーバーの認証試行回数に上限を設けると、ブルートフォース攻撃を防げます。
- とにかく、こまめにアップデートしましょう!
まとめ
Joomlaがハッキングされてスパムを送信する状態は、サイトの評判に深刻なダメージを与えます。最善の予防策はセキュリティソリューションの導入です。現在、ファイアウォールやIDS(侵入検知システム)を備えたセキュリティソリューションが多数提供されており、Astraのようなソリューションは高い拡張性を持ち、個人ブログから大企業まで幅広いニーズに対応できます。
-
URLブラックリストとは?原因と解除方法を徹底解説
「ウェブサイトは24時間365日休みなくあなたを宣伝してくれる。それができる従業員はいない」――ポール・クックソン(Paul Cookson) まさにその通りです。ウェブサイトはいわばデジタルポートフォリオであり、あなた自身、組織、製品やサービス、そして事業のあらゆる側面を、インターネットという巨大な仮想空間の中で表現する「企業の顔」とも言える存在です。もしURLがGoogle、Bing、Norton Safe Webなどの検索エンジンやセキュリティ機関によってブラックリストに登録されてしまったら、それはウェブサイトのオンラインプレゼンスにとって深刻な打撃となります。 ウェブを閲覧していると、
-
スパム・フィッシングメールの見分け方|被害を防ぐ5つのチェックポイント
メールは、ビジネスや公式なやり取りにおいて欠かせない通信手段です。自分のメールアドレス宛に届くメールは、正規の情報や安全な添付ファイルを含むものとして扱われがちですが、知らない相手から頻繁にメールが届くようであれば、それはスパムやフィッシングの可能性があります。 アメリカでは毎年数百万件ものスパム・フィッシング被害が報告されており、その数は年々増加し続けています。インターネット上でメールアドレスを使用しているのであれば、スパムやフィッシングメールを見分ける方法を知っておくことが重要です。これらの迷惑メールは、サイバーセキュリティ上の脅威となるだけでなく、金銭的な被害をもたらすこともあります。