カテゴリー別アーカイブ: WordPress

IP Geo Block

WordPressプラグイン脆弱性 – 攻撃ベクタの分析と対策

「セキュリティ」のタグが付いたプラグイン は、公式サイトに1000個程もあり、その中から「1本」を選び出すのは至難の業でだと思います。

そもそも「セキュリティ対策」と一口に言ってもその範囲は広いわけで、健康管理に例えるなら「予防」や「診断」、「治療」とったカテゴリがあるワケで、さらに「予防」的なものには、

  • 「定期的にバックアップをとっておきましょう」的な「定期検診」系
  • 「常に最新版にアップデートしておきましょう」的な「うがい励行」系
  • 「パーミッションやパスワードを強化しましょう」的な「体力増強」系
  • 「2要素認証やファイアウォールを導入しましょう」的な「マスク着用」系

とまぁ色々あるワケです(ヘタクソな例えでスミマセン)。

一方、WPScan の脆弱性データベース には、プラグインやテーマが毎月10個ほど、続々と登録され続けています。

そこで私が最近こだわっているのが「未知の脆弱性という病巣を抱えたプラグインやテーマへの攻撃」を防御する「免疫力強化」系(!?)です。

ということで、IP Geo Block の現状の防御力を調べ、今後の開発の方向性を見定めるために、プラグインの脆弱性データベース から最新の50個を順に拾い、「攻撃ベクタ」という観点で分析を実施してみました(ものすごく骨の折れる作業でした 😉 )。

自分でも予想外の結果だったので、ここに公開します!

続きを読む

wp-adminへのゼロデイ攻撃を防ぐ機能を追加 – IP Geo Block更新告知

2014年12月、NTTコミュニケーションズが「Zero day Attack Protection(仮称)」を開発、今年4月からのサービス開始を発表しましたが、我が WordPress プラグイン IP Geo Block も独自の仕組みにより一部の ゼロデイ攻撃 を防御する機能を追加しましたので、その告知とバグ出しの協力願いをしたいと思います 🙂 。

続きを読む

SucuriによるWordPress脆弱性の統計

プラグイン作者必読!実例に学ぶ脆弱なWordPressプラグインの作り方、又はwp-adminを守る理由

セキュリティ・コンサルティング Sucuri2014年11月の記事 によると、WordPress プラグインの3大脆弱性は、SQL インジェクション(SQLi)、クロス・サイト・スクリプティング(XSS)、ファイル・インクルージョン(FI)とのことです。

冒頭のグラフ は最新の分析結果で、この事実を裏付けています。プラグイン開発の チュートリアル手引き には、脆弱性を作り込まないためのポイントが上手にまとめられているのに、なぜ無くならないのでしょうか?

「ヒトが作るものだから、バグがあって当然」と言ってしまえばそれまでですが、 Sucuri のブログ を読み漁っていると、こと脆弱性に関する限り、 WordPress に特有の「思い込み」や「見過ごし」といった、ヒトの心理的・認知的な盲点が原因の多くを占めているんじゃないかと思えてきます。

だから単に PHP のセキュリティ How To ではなく、私が公開している唯一のプラグイン の機能設計と脆弱性を作り込まない実装のために勉強したたこと − 実際に攻撃を試し脆弱性を追跡して見えてきたこと − を中心にまとめてみたいと思います。ただし具体的な攻撃方法は、元記事以上に詳しくは触れません、あしからず 😉 。

続きを読む

プラグインなしから発想するWordPressセキュリティ – IP Geo Blockの更新告知

昨年末、一晩で15000余りの パスワード辞書によるクラッキング を受けました。その時のログを分析してみて改めて思ったのは、「これだけランダムで長けりゃ大丈夫」的なパスワードも、「漏れたら終わり」って事です。

「ランダムで長いパスワード」をアカウント毎に頻繁に変えるのは面倒なワケで、長い間変えずに使い続けと、漏洩時のリスクが極めて高くなるってことだと思います。

おっと、何も パスワードの定期変更は必要か の議論へ乱入しようというワケじゃありません。

IPアドレスのジオロケーション情報を元に海外からの投稿を弾くスパム対策プラグイン IP Geo Block に、wp-login.phpwp-admin/admin.phpxmlrpc.php へのアクセスを遮断するセキュリティ機能、さらにはログを記録する機能を追加したので、その告知が本記事の主題です 😉 。

続きを読む

MaxMindジオロケーションDBの自動更新を装備、IP Geo Blockの更新告知

このところ海外からのスパムを弾く拙作の WordPress プラグイン IP Geo Block の機能アップにかなりの時間を割いています。

最初のバージョンで IP アドレスから国が引ける API をネット越しに叩き、次いでサーバー負荷の低減を狙って キャッシュを実装した ワケですが、ここ最近、無料 RESTful API のサービス中止が相次いだため、急ぎ安定した MaxMind無料 GeoLite データベース を使えるようにする必要があった次第です。

プログラミングは嫌いな方ではないですが、スパムやら bot 対策は何も新しいものを生みません。一所懸命に作り込んでも空しさが拭えないので、せめてココで告知させて下さい 😉 。

2014年10月13日 追記

今回のバージョンアップではオプションテーブルの更新が必要なのですが、自動更新では更新処理が働きません。対応策が見つかるまではお手数ですが、更新後に一旦
「停止」し、再度「有効化」していただくよう、お願いします m_(..)_m。

続きを読む

スパムの連続投稿によく効くキャッシュを装備したIP Geo Blockの更新告知

ここ数日間、本サイトではスパムの連投が流行っています 😡 。

こいつらに貴重なサーバー資源を食われるのは1ミリたりとも許せないワケで、かつては日本以外の IP アドレスを .htaccess に手作業で書き込んでいましたが、あまりにも量が多く、馬鹿げているので止めました。

そんなワケで作ったのが、海外からの投稿を Akismet の起動前に弾く IP Geo Block というプラグインなんですが、スパムは激減するものの、IP アドレスの検索に少々時間がかかるのが気になる点でした。

で、この度、一度検索した IP アドレスをキャッシュに保持する機構を付けたところ、思いの外、効果があったので、バージョン 1.1.0 として告知したいと思います 🙂 。

続きを読む

Sample Site

GradeAの先行くWordPress高速化 – 必ず結果の出る実践的HTTPリクエスト削減法

WordPress は、プラグインで手軽に機能が拡張できる反面、あちこちに css や js が散乱し、放っておくとベスト・プラクティスからは程遠い状態になりがちです。

もちろんこういった問題の解決を図るプラグインも多数リリースされていますが、ページ単位の処理なので、サイト全体の構成を通して最適にはなりません。

そこで第1部「サイト高速化の「戦略」と「戦術」- GradeAのその先へ」、第2部「サイトに適したリソース配置とasync/defer完全マスター – レンダリング優先のグッド・プラクティス」では、数あるベスト・プラクティスの全体を俯瞰し、個々の Tips やテクニックからは見え難い、最適化の考え方や道筋を提案しました。

その総仕上げとして今回は、WordPress サイトを例題に、必ず結果の出る HTTP リクエストの削減方法を提案したいと思います。

続きを読む

IP Geo Block

海外からの投稿を弾くスパム対策用WordPressプラグインをリリースします

スパム投稿を選別して弾くプラグインは、Akismet はもちろん、CAPTCHA を使うタイプ、日本語を含まない投稿を禁止するタイプ、ロボット投稿の裏をかく隠しフィールドを備えたタイプなどなど、数多くあります。

それぞれに一長一短がある中で、投稿者の国を選別するプラグインがあっても良いんじゃない? ということで、これまた一長一短のあるプラグイン IP Geo Block を作りました。島国ニッポンならではの割り切りができる人なら、お試しください 😀 。

続きを読む

フツーここまでやらない、キャッシュヒット率100%で運用するWordPress高速化

プリロード導入前後の平均表示時間の推移

キャッシュ系プラグインを入れて速くなった気がしていても、Google Analytics の「サイト速度」が思ったほど速くなってない、なんて言う経験はないですか?

今年の4月に発覚した WP Super CacheW3 Total Cache の、心底ヤバイ 脆弱性騒動 も乗り切り、懲りもせずタイトルの様なことを試しています 😉 。

特に共有サーバーで運営しているよいこの皆さんは、絶対にマネしちゃイケナイ、本サイトのヒミツを暴露しちゃいますネ 😉 。

続きを読む

初歩からわかるWordPressのnonceでAjaxをセキュアに実装する方法

一般的な nonceNnumber used ONCEWeblio 英和辞典 によると、ナンス 又は ノンス と発音)は、Web サイト、特にデータベースに不可逆な変化を引き起こす、意図しない、あるいは重複したリクエストから Web サイトを保護するための、セキュリティが目的のワンタイム・トークンです。

WordPress の nonce は、管理画面に対する CSRF 攻撃英語版 Wikipedia によると、シーサーフ と発音)対策として広く知られているかと思いますが、意外にも Ajax との組み合わせを解説した日本語記事が見当たらなかったので、「いまさら」の共有です。

本記事では、単に Ajax の Tips 的な実装方法だけではなく、CSRF 攻撃の原理や対策についても少しだけ触れたいと思います。またその上で、Ajax に nonce が必要なパターンについて言及します。

さらに、WordPress 3.5 から導入された新しいフィルターフックの使い道を探ってみたいと思います。

続きを読む