悪意ある攻撃を受けたときの対処法

# DDoS攻撃とは

DDoS攻撃とは、ネットワーク層あるいはアプリケーション層でオリジンサーバのリソースを圧倒することにより、通常のトラフィックを妨害しようとする悪意のある攻撃です。

![](https://dev-to-uploads.s3.amazonaws.com/i/sn7ph2gttj5l8ar4z093.png)

# 具体的にどのような攻撃

今年第一四半期（１月から３月末まで）のトレンドとして、[クラウドフレアの記事によると](https://blog.cloudflare.com/network-layer-ddos-attack-trends-for-q1-2020/)、コンパクトな攻撃が多く見られました。
攻撃の規模は11Gbps程度が平均的でした。
大規模な攻撃が完全に消えたわけではないですが、去年に比べて大幅に減少する一方です。
攻撃元が分散されるというよりも、特定の地域から集中されていることが多く見られました。
また、攻撃の継続時間が比較的に短くなり、半分以上の攻撃の事例が、30分から１時間までしか継続しませんでした。
つまり、最近の攻撃が小規模かつ、ローカライズ化され、短期間で断続的なものが多い特徴を持っていると言えます。
今後もこのような攻撃が主流になってくることが予想されます。

今回の記事は、クラウドフレアを利用し、いかに攻撃を未然に防ぐか、および攻撃を受けてしまった時の対処法をご紹介します。
クラウドフレアを利用すると、ダッシュボードのアナリティクスをご覧になれますので、ご利用の既存のサーバ側監視ツールと合わせて、トラフィックの状況を常時監視することを推奨します。

![](https://dev-to-uploads.s3.amazonaws.com/i/xk9rpesyc0jicozvskkl.png)

表示されている例のように、キャッシュされていないトラフィックが急激に増加したことから、トラフィックがオリジンサーバに届いていることがわかります。
よって、この期間中、多量なパケットがオリジンサーバに送信され、処理しきれていない場合、オリジンサーバのメモリ使用率およびCPU使用率が圧服し、パフォーマンスの劣化に発展しつつ、場合によってサービス停止につながる恐れもあります。
最終的にサービスの停止がDDoS攻撃が行われる主な目標です。

特に新型コロナウィルスが流行っている現状、インターネットに頼っているサービスが多くなってきます。
インターネットがなければ生活できない人たち、また、ビジネスが成り立たない会社がたくさんあります。
DDoS攻撃によりオンラインサービス停止に展開された場合、平均的に１分あたり5,600ドル程度の経済的障害が発生すると言われています。
ところで、攻撃を行うにあったって、かかるコストがいくらかご存知ですか。
ブラック市場にDDoS攻撃のサービスプロバイダーが５分間の攻撃サービスを行う代わりに500円程度要求する広告が珍しくありません。
それに加えて、オープンソースの攻撃ツールもたくさん出回っていることから、ゼロコストでそこそこ大規模なDDoS攻撃を簡単に発信することが可能になった時代です。

そのため、いかにより早く、より安く、より正確に攻撃に対処することがカギになってきます。

# クラウドフレアの利点

![](https://dev-to-uploads.s3.amazonaws.com/i/5wad0mu8uwh6ntqkkj4q.png)

クラウドフレアには、様々なツールが存在し、攻撃の対処が比較的簡単に実現できます。
クラウドフレアの利点は、数多くのネットワークプロバイダとの相互接続（ピアリング関係およびトランジット関係）により、他のCDNプロバイダーよりもネットワーク容量が比較的大きいと言われています。
また、エニーキャストネットワークという、グローバルに分散されたアーキテクチャーを採用されていることから、他社が採用しているスクラッビングセンターよりも、攻撃に対応する速度が早くなるという利点があります。
スクラッビングセンターはレガシーのDDoS攻撃対処法ですが、BGPのルーティングプロトコルを利用し、攻撃を受けてしまった時にオリジンサーバへのネットワーク経路を変更することで、全てのトラフィックをネットワーク容量が比較的大きいデータセンタに送る手法です。
ネットワークのルートを変更するのに時間がかかるだけでなく、大きなデータセンターの物理的な数が限られていますので、海外にトラフィックが送られる可能性が高いです。
よって、日本から接続すると、Webサイトの表示速度が遅く感じてしまいます。

クラウドフレアは日々攻撃を受けることに慣れているから、長年にわたって重ねてきた経験と蓄積された知識により、誤検知が少なく、攻撃に対するレスポンス速度が改善されています。
具体的に、巨大な量のトラフィックを日々クラウドフレア網にプロキシされているから、不正なIPアドレスを自動的に[IPレピュテーションシステム](https://support.cloudflare.com/hc/en-us/articles/200170056-Understanding-the-クラウドフレア-Security-Level)というデータベースに管理されています。また、機械学習やヒューリスティックなど最新の技術を取り入れることで、[ボット対策機能](https://www.cloudflare.com/products/bot-management/)が誕生し、検知の精度が改善されます。
これらのソリューションを利用し、攻撃を未然に防ぐことが可能になります。

# クラウドフレアのツール

![](https://dev-to-uploads.s3.amazonaws.com/i/sjhe6708rgydbkzujlc6.png)

今回は、様々な機能の中から、この５つを選択してご紹介します。

その前に、トラフィックをクラウドフレアにプロキシさせることが前提であり、ドメインをクラウドフレアに追加するときに最初にやっておくべきことです。
また、[クラウドフレアのIPアドレス範囲](https://www.cloudflare.com/ips/)をオリジンサーバもしくはホスティングプロバイダーのファイアウォールのホワイトリスに追加し、それ以外のIPアドレスを拒否することが推奨されます。

# アンダーアタックモード

![](https://dev-to-uploads.s3.amazonaws.com/i/s70jxkrpxyzxayno4wmy.gif)

攻撃を受けてしまった時に、一番簡単に適用できるソリューションはアンダーアタックモードです。

このボタンを押下すると、全てのHTTP/HTTPSリクエストに対して、Javascriptのチャレンジが適用されます。ブラウザがJavascriptを実行し、数学的問題を５秒以内に解くことができればチャレンジを通過し、一定期間記憶されます。
リクエスト元があくまで正規のブラウザであることを検証するための手法です。

注意していただきたいことは、この機能が万能ではないので、ヘッドレスブラウザなどJavascriptを実行できるボットなどがチャレンジをバイパスすることがありえます。
そして、APIや一部のモバイルアプリに向いていないソリューションです。

# レートリミット

![](https://dev-to-uploads.s3.amazonaws.com/i/m8ptta8h2tvp1wqmgt2u.gif)

APIなど動的な多量リクエストを制限するには、レートリミットが効果的です。適用範囲がURL単位やルートドメイン、また、ワイルドカードを指定すると、より広い範囲でプロテクションを適用できます。

設定方法について、まずは、サーバのアクセスログより、頻繁にアクセスされるURLを特定してください。
攻撃中にサーバ停止などによってログを確認できないこともあります。その場合、クラウドフレアログをご確認いただけます。
クラウドフレアログはエンタープライスプラン向けのみのため、それ以外のプランご利用の方はクラウドフレアサポートに連絡することで、攻撃を狙ったURL一覧を入手してください。ただし、この場合、入手できるログはサンプルデータセットから取り出されたものなので、総トラフィックの１％程度のみです。

URLの特定さえできれば、レートリミット設定自体が楽です。
まず、URLパターンを指定して、そのURLに対して接続数の閾値を設定します。
閾値は、秒単位、分単位および時間単位の設定が可能ですが、上述の通り、最近の攻撃が短期的で断続的であることから、分単位が妥当であると思われます。
閾値の計算式について、[クラウドフレアのKB](https://support.cloudflare.com/hc/en-us/articles/115001635128-Configuring-Cloudflare-Rate-Limiting#o8KwUgkUml3Y7bAapvXjP)をご参照ください。ポイントとしては、トラフィックのベースラインを知ることから始めます。
そのため、定期的にトラフィックの状況を監視することが重要であり、クリスマスセールなどイベント開催時にトラフィックの増加が予想される場合、一時的変化に対応できるよう、その都度閾値を変更することを推奨します。

次に、接続元IPアドレスに対してアクションを設定します。設定できるアクションはブロック、Captchaチャレンジ、Javascriptチャレンジ、およびシムレーション（ログ記録のみ）です。
ブロックのアクションに対して更に接続元IPアドレスを拒否する期限も設定できます。最初に説明した通り、最近の攻撃のほとんどが、継続時間が30分〜1時間程度のため、ブロック期間を1時間に設定することが十分でしょう。

本機能が有償ではありますが、個人的に、DDoS攻撃を未然に防ぐために一番効果的なものだと思いますので、ぜひ使っていただきたいです。
実際、[ボット対策機能](https://support.cloudflare.com/hc/en-us/articles/360027519452-Understanding-Cloudflare-Bot-Management)の次に便利な機能ですが、残念ながら現時点ボット対策機能がエンタープライスプラン向けのみのため、今回説明対象外としました。

# IPアクセスルール

![](https://dev-to-uploads.s3.amazonaws.com/i/u03tlp57jo1nco8617xw.gif)

次に紹介させていただく機能は、IPアクセスルールです。

こちらはTCP/IPスタックのより低い層でプロテクションを提供する機能です。
適用対象はIPアドレスもしくはIPアドレスの範囲（CIDR形式）、ネットワーク識別子番号（AS番号）およびIPの位置情報に基づくアクセス元国です。

また、指定できるアクションはブロック、Captchaチャレンジ、JavaScriptチャレンジ、ホワイトリストです。
適用範囲がドメイン単位もしくは組織アカウント単位ですが、組織アカウントを選択すると、アカウント配下に追加されている全てのドメインに対して展開されます。

この機能には、長所短所があります。

メリットの一部：
- IPアクセスルールは、[序盤に実行されるプロセス](https://developers.cloudflare.com/firewall/cf-firewall-rules/order-priority/)のため、ホワイトリストが設定できる唯一の方法です。ホワイトリストは、全てのクラウドフレアのセキュリティー機能を迂回することになりますので、信用できるIPアドレス（例えば、自組織のスタティックIPアドレス）に限ってご利用ください。

デメリットの一部：
- レートリミットのように閾値を設定できません。接続を拒否・許可するの2択のみです。
- URL単位で指定できません。URL単位で制御したい場合、[ゾーンロックダウンルール](https://support.cloudflare.com/hc/en-us/articles/115001595131-Understanding-Cloudflare-Zone-Lockdown)もしくはファイアウォールルールをご利用ください。
- IPアドレス範囲が決まったレンジでしか指定できません。IPv4なら/16と/24のみ、IPv6ならば/64、/48と/32のみです。より細かくIPアドレスの範囲を指定するには、ファイアウォールルールをご利用ください。
- ネガティブのロジックが指定できません。例えば、「日本以外の国を拒否したい」場合、ファイアウォールルールを利用した方が楽に設定できます。

# ファイアウォールルール

![](https://dev-to-uploads.s3.amazonaws.com/i/4nymbaruugw2hb3f7x16.gif)

次に、ファイアウォールルールについてお話しします。

ネットワークの低い層で動作するIPアクセスルールに比べて、ファイアウォールルールはTCP/IPスタックの上位層で動作するHTTP/HTTPSアプリケーションに対して攻撃から保護します。
IPアクセスルールより遥かに柔軟性が高く、使い勝手がいい機能です。

URL単位の指定ができるだけではなく、正規表現の指定も可能です。
いくつかの使用事例をご紹介します。
- 特定のURLに対して検索エンジンから検索できないようにします。「Robots.txt」の代わりにご利用できます。
- 「X-Forwarded-For」のヘッダーの存在を確認することにより、プロキシサーバを使っているユーザをブロックします。TORブラウザを利用するユーザもブロックできます。このようなツールを使った攻撃ベクターが多いため、入り口でブロックすることが効果的です。
- 攻撃を受けた際に、アクセスログなどからユーザーエージェントに特定の文字列が存在することが特定できれば、それをブロックすることができます。クラウドフレアの既存の機能であるユーザーエージェントブロックルールと似ていますが、ファイアウォールルールを利用すると、より多くの条件と組み合わせることができます。
- 特定のリファラー(他のサイトからの接続)を制御します。特にDDoS攻撃の特徴の一つは、リファラーが存在しないことが多いので、リファラーのヘッダーが存在しない接続をチャレンジするルールが作れます。
- IPアクセスルールで実現が困難であるURL単位もしくは国単位での制限が容易になります。
- URL単位で特定のクラウドフレアセキュリティー機能を迂回します。WAFやレートリミット機能などによる誤検知がある場合、ドメイン単位で機能を無効化するより、URL単位で機能を無効化ルールを設定いただけます。クラウドフレアの[ページルール](https://support.cloudflare.com/hc/ja/articles/218411427-Cloudflare%E3%81%AE%E3%83%9A%E3%83%BC%E3%82%B8%E3%83%AB%E3%83%BC%E3%83%AB%E3%82%92%E7%90%86%E8%A7%A3%E3%81%97%E3%81%9F%E4%B8%8A%E3%81%A7%E8%A8%AD%E5%AE%9A%E3%81%99%E3%82%8B-%E3%83%9A%E3%83%BC%E3%82%B8%E3%83%AB%E3%83%BC%E3%83%AB%E3%83%81%E3%83%A5%E3%83%BC%E3%83%88%E3%83%AA%E3%82%A2%E3%83%AB-)と同様な機能です。

このように、様々な条件を組み合わせることで、より柔軟なポリシーの策定が実現されますので、攻撃を受けた際に欠かせない武器の一つです。

# 自動化ルール

![](https://dev-to-uploads.s3.amazonaws.com/i/rq02e5fxc78wd8yvdbqs.jpg)

最後に、GatebotとDosDという自動化システムについてお話しします。
今回紹介しましたツールの中でも唯一設定が不要なツールです。

Gatebotはクラウドフレアの従来型システムであり、主に静的ルールが採用されます。総トラフィックのサンプルのログをクラウドフレアの中央サーバに短期間保存され、トラフィック量を常に監視します。
トラフィックの総量が１秒あたり数万程度のボリュームが検知された場合に、攻撃を受けた特定のデータセンターにGatebotのルールが自動的に適用され、トラフィック量が最も多いIPアドレスがブロックされます。

![](https://dev-to-uploads.s3.amazonaws.com/i/rtfpi0h97z5zp4ajdckb.png)

去年末頃から、DosDと呼ばれる自動化システムが導入されました。
DosDは、Gatebotと異なり一定の閾値を利用しないため、より動的なルールの展開が可能になります。
具体的に、オリジンサーバからHTTP500番代のエラーが毎秒150程度のエラーが検知され、エラーレートが平均値より最低５倍増加、トラフィックレベルが平均値より最低５倍増加などの条件がトリガーとなり、いつものトラフィック量と大きく変動する場合に攻撃が発生しているとみなされます。

Gatebotともう一つの違いは、中央型システムではなく、分散型システムのアーキテクチャーを採用しているため、クラウドフレアの200以上のデータセンターに同時に稼働し、各データセンターがそれぞれトラフィックの量を監視します。
そのため、特定の地域から集中される攻撃に対してより素早く対応することができるようになり、攻撃を検知してからブロックするまでの平均時間が約3秒以内に短縮できます。
他のCDNプロバイダーが採用するスクラッビングセンターのソリューションと比べて、クラウドフレアの自動化システムがほぼ即時にDDoS攻撃に対応できると言えます。

# 最後に

- 前提として、トラフィックが直接オリジンサーバに接続できないようにし、全てのトラフィックが必ずクラウドフレアにプロキシーされるようにします。また、キャッシュ率を上げることにより、多量なトラフィックがエッジ側に吸収されます。
- WebアプリケーションではないメールサーバやゲームサーバなどのTCP/UDPアプリケーションに対して攻撃から保護するには、クラウドフレアのSpectrum機能を利用しトラフィックをプロキシーします。
- サーバのアクセスログやクラウドフレアのアナリティクスダッシュボードなど、あらゆるのネットワーク監視ツールをみて異常なトラフィックが発生していることを確認します。
- 通常トラフィックのベースラインを理解することが大事です。例えば、webサイトのコンテンツが日本語のみの場合、海外からのトラフィックが国内のトラフィックより圧倒的に多ければ、明らかに異常であると判断できるので、あらかじめ日本以外の国からの接続を制限することを推奨します。
同様に、特定のAS番号からの接続も制限できます。例えば、AWSやGoogle Cloud、Microsoft Azureなど様々なクラウドサービスプロバイダーからwebサイトに接続する比率が多ければ、それがボットである確率が高いので、そのようなトラフィックを想定しなければ、あらかじめ制限しておくといいでしょう。
- もし攻撃者から攻撃の予告やランサムノートなどメールや掲示板の書き込みで発見した場合、即時にクラウドフレアサポートに連絡して適切なアドバイスを求めてください。
逆に、クリスマスやバレンタインなどイベント開催によって、webサイトへの接続が急激に上昇する見込みがある場合、イベント開始日時の数日前にクラウドフレアサポートに連絡するといいでしょう。正規のトラフィックがあやまって攻撃とみなされないよう、適切な処置を前を持って適用しておくことをお勧めします。