top of page

セキュリティ検査を回避する技術

正しいプロトコルの動作って何?という質問を投げかけた場合、RFCで定義されている内容を答えると思います。OSやアプリケーションソフトメーカーはRFCで定義されている内容に基づいて開発しますが、RFCにもはっきりしない定義、つまり実装する側に依存する表現もあります。

具体的には RFCのMustとShouldの表現です。「Must」は仕様として強く要求していますが、「Should」の場合推奨している意味合いの表現のため、必ずしもその動作を実装するとは限りません。実装しなくてもRFCを満たしていることになります。また「May」で表現される箇所はオプションとして解釈されています。

そのため、ある特定のプロトコルの動作がOSによって異なることもあります。この差をうまく利用してセキュリティ機器の検査を回避させる技術がEvasion/Insertionと呼びます。回避のさせ方によって呼び名が変わるだけで根本的な原理は同じです。

それでは具体的な例で代表的なEvasionの例をご紹介します。

下の絵のようにパケット1、2、3と送信するとします。セキュリティ装置では2を無視するようにパケットを操作し、Linuxサーバではすべてのパケットを受信させて検査を回避させることをEvasionと呼びます。Evasionの場合、セキュリティ装置で無視した2番のパケットに悪意のあるコンテンツが含まれている場合、検査されていないため悪意のあるコンテンツを認識できず通過してしまいます。


ではなぜこのようなことがおこなるのか?

それはパケットを扱う処理の仕方が異なるからです。 一つの例が、フラグメント化を利用したものがあります。 フラグメント化とはMTU(Maximum Transfer Unit)のサイズより大きいパケットを送信する場合に、パケットを分割し、宛先ホストでパケットを再構成させるためのパケットの処理方法になります。 フラグメント化されたパケットの到着が遅れる場合、どのくらい宛先ホストで待つかは各OSによってデフォルト値が異なる。OSのフラグメントタイマーの設定値とIDS/IPS側のフラグメントタイマーの設定値が異なる場合、この回避技術が有効になります。

パケット1、2、3、4から構成されるデータがあるとします。2、3には既知の悪意のあるデータが含まれているとします。2、3が検査できないようにサーバに転送することができればサーバを攻撃することができます。


下の絵はフラグメントタイマーの違いを利用したEvasionの流れになります。 例えばセキュリティデバイスのフラグメントタイマーが20秒、サーバ側のフラグメントタイマーが60秒の場合、20秒前まではセキュリティデバイス、サーバ共にパケット1、2を保持します。


20秒以降に3、4を送信することでサーバだけパケットの再構成ができます。


次の2つのどちらかが、セキュリティデバイス側で対応できていればこの攻撃は通用しません。

  1. フラグメントタイマーを保護対象のサーバと合わせること。

  2. セキュリティデバイス側でパケットが再構成されるまでサーバに転送しないこと。

2番目のパケットを再構成後サーバに転送する場合は、インライン(セキュリティデバイスを通過する)構成で配置することが重要になります。IPS/IDSの場合はアウトラインでTAP・SPANモードで構成することもありますので、設計上考慮することも必要です。

bottom of page