ModSecurityのCRSの更新について考える

セキュリティ

少し前にコメントでCRS(Core Rule Set)の更新について記載してほしいとの要望をいただきましたので、記事にしていきます。

私自身にModSecurityの運用経験はないので、末端セキュリティエンジニアの理想を記載する形になりますのであらかじめご了承ください。

また、この記事を書き始めたのは結構前になるのですが、色々調べたりしていたら公開が遅くなりましたことをお詫び申し上げます。

CRSの更新の前に

ただ更新するのであれば、OWASPのGitのリポジトリが以下のとおり公開されていますので、それを定期的にpullすれば良いかと思います。

しかし、闇雲にやっていても良い効果が得られないばかりかサイトがまともに動かなくなる可能性もあるので、まずは自分の持ち物(サイト構成)を把握しましょう。

以下を最低限として把握することをお勧めします。(他にもある際はご教示くださいませ。)

・OSの種類とバージョン
・Webサーバの種類とバージョン
・アプリケーションサーバの種類とバージョン
・DBの種類とバージョン
・フレームワークの種類とバージョン(CMS等も含む)

もちろん上記の中でWebサイトの構成によっては使用していない場合もあります。

例えば企業HPであれば、DBを使用していないところもあるかと思います。
※静的画面がメインである等

その場合はCRSとして、SQLインジェクションをセットする必要はないかと思います。

そういった観点から、まずは最初にWebサイトの構成を基に必要となるルールを取り決めます。

最初からしっかり検討した上で導入することで運用コストを削減することが可能になると考えています。

脆弱性への対応

自分のサイト構成を把握する理由としては脆弱性が公開された際にすぐに対応するためです。

例えば私のこのサイトの場合、プラグインやWordPressそのもののバージョンアップが出た場合は即バージョンアップを行います。

それはこのサイトが一時的にストップすることに私自身への経済的影響はないからです。(ビジネスインパクト分析:BIAに近いですね。)

しかし企業が運用しているサイトではそうはいきません。

特にそれがメインビジネスのサイト(Webアプリケーション)であった場合は、一時間程の中断でも大きな影響を及ぼす可能性もあります。

そのため、影響を考慮しない事には即時にアップデートは実施することが難しいです。

そこで、アップデートによるサイト(Webアプリケーション)への影響が判明するまではまずはWAFで攻撃を防ぐことを考えると思いますが、WAF業者が提供している製品のWAFであれば、すぐに対応してくれるかもしれません。
※それでも時間的に1日程度はかかる可能性があります。

しかしModSecurityを運用する場合は自分でCRSを作成する必要があります。

そのために、脆弱性情報の収集やPoC等の検証を行う必要が出てくる可能性があります。
※攻撃のパターンを知らないとCRSの作成ができないため

情報収集の方法(私のやり方)

まずは以下のように公式サイトで脆弱性情報を収集します。(以下はあくまで一例です。)

・Apache
https://httpd.apache.org/
・Apache Struts
Welcome to the Apache Struts project

上記のようなサイトから最新バージョンが出たら、リリースノートを確認して脆弱性への対応を行っているのか確認します。

そこで脆弱性への対応でかつ、やばそうな脆弱性であればアップデートの準備と脆弱性情報(PoC)を含むを収集します。

PoC関係は中国のサイトがかなり速いので、今回のS2-057等の場合であれば私自身数、時間張り付いて検索して、PoCが出ていたら検証しての繰り返しでした。
※ツイッター等でセキュリティの著名人の該当の脆弱性に対するつぶやきを追うのも良いかと思います。

そして検証ができたら、その脆弱性に対応するCRSを記載して一時対応します。

ここはあくまで一時対応である事を念頭においてください。

「WAFで防げるからアップデートしないでいいや!」といった運用はお勧めしません。ちゃんとアップデートの影響を考慮し、問題を解決できたタイミングですぐにアップデートをするようにしてください。

CRSの作成については以下が参考になるかと思います。(そのうちCRSの作成も記事にしたいな)

hashdos攻撃をmod_securityで防御する(CentOS+yum編)
このエントリでは、hashdos対策としてのmod_securityの導入と設定の方法を説明します。CentOS環境でyumによりApacheを導入しているサイトに対して、yumによりmod_securityを導入するというシナリオで説明します。 はじめに 既に 当ブログで報...
ModSecurityのルール設定を読めるようになりたい! - Qiita
(の9日目です。 昨日は@nyakomeさんの「[Selenideでテストコードを書いてみた...

まとめ

CSRの更新について記事にしてみました。

見直してみると大変だな・・・みたいに感じることが多く、導入する人が少なくなるんじゃないかと不安になります。
※これだったら製品買った方がいいやとか思わず、やってみることも大事かと・・・

WAFの運用だけではなく、セキュリティ全般が非常に煩わしいと感じる人も多いと思います。

私自身脆弱性診断をやっている際に、これを指摘しても直すの大変だろうな~とか思ったりもします。

少しでも煩わしさを軽減するためにも、まずは事前準備の段階で対応できる個所は対応することをお勧めします。

今勉強中のCISMの参考書にもセキュリティの考慮は要件定義段階からちゃんと行うようにすることと記載が度々あります。

後から考えると実装に負荷が増え、コストが増加する可能性もあるのでまずは最初からしっかり対策を行える環境にすることを推奨します。

不明点やこういったこともやって欲しいとの要望があれば、お問い合わせページやコメント、ツイッターからでも結構ですので、気軽にご連絡ください。

コメント