ブログ

セキュアコーディングでは阻止できない 3 つの攻撃

ロリ・マクヴィッティ サムネイル
ロリ・マクヴィッティ
2019年7月15日公開

アプリやデータの漏洩に関わる侵害に関しては、ほとんどの場合、開発者が非難されます。 多くの場合、これが正しい方向です。 インジェクション攻撃やスタックベースのエクスプロイトは、ほとんどの場合、安全でないコードが原因で発生します。 通常は、セキュリティ ルール ゼロに違反したためです。

しかし、すべての違反を開発者のせいにすることはできません。 実際のところ、開発者が完全に安全なコードを作成できたとしても、他の多くの攻撃から保護するためにはアプリケーション サービスが必要です。

これは、アプリケーション セキュリティがスタックであるためです。 単純に「セキュアコード化」して排除することができないプロトコルやネットワーク原理を悪用する攻撃があります。 セキュリティをさらに複雑にしているのは、悪意のあるリクエストと正当なリクエストを区別する可視性がないため、これらの攻撃がアプリケーションによって検出されないことが多いことです。

特に、開発者が対処する責任を負わないべき攻撃が 3 つあります。 代わりに、これらの攻撃は、可視性とコンテキストを利用して攻撃を阻止するのに役立つ上流に展開されたアプリケーション サービスによって最も効果的に検出および軽減されます。

ボリューム型 DDoS

ボリューム型という用語を使用して、従来の分散型サービス拒否攻撃を説明し、ネットワークの過負荷に基づく攻撃と、スタックを上方に移動してアプリケーション層を攻撃する攻撃を区別します。 これらは異なる種類の攻撃であるため、両方を防御できる必要がありますが、その方法には非常に異なる解決策が必要です。

ボリューム攻撃は単なる電撃攻撃です。 大量のトラフィックが特定のサービスに向けられ、リクエストを処理しているデバイス、インフラストラクチャ、ソフトウェアを圧倒する意図があります。 ここで適用される原則は、ハードウェアかソフトウェアか、オンプレミスかクラウドかを問わず、すべてのデバイスには限られたリソースがあるということです。 したがって、十分な数のリクエストを送信すると、デバイスが過負荷になり、その背後にあるすべてのものへのアクセスがシャットダウンされる可能性があります。

開発者がこの攻撃を効果的に防ぐことができない理由は、アプリケーションがネットワークの管理にプラットフォームとホスト オペレーティング システムに依存しているためです。 ボリューム型 DDoS 攻撃は、そのネットワーク スタックをターゲットにし、共有リソースを大量に消費するため、アプリケーションは攻撃を受けていると判断するために要求をほとんど処理できなくなります。

セキュアコーディングではこれを防ぐことはできません。これは脆弱性による悪用ではありません。 そして、それは実際にはシステムのどの部分のコードにも問題があるわけではありません。 ハードウェアが存在しないふりをどれだけ努力しても、リソースはハードウェアから発生し、限られているというのが現実です。

ボリューム型 DDoS 攻撃は、アプリケーションの上流にある大容量、高パフォーマンスのアプリケーション サービスによって最も効果的に検出され、軽減されます。 攻撃元に近いほど良いです。

エクスプロイトがなければ、安全なコーディングソリューションはありません。

レイヤー 7 DDoS

スタックをアプリケーション層まで移動すると、レイヤー 7 (または HTTP) DDoS と呼ばれる悪質な形式のサービス拒否が見つかります。 これらの攻撃は、脆弱性や安全でないコーディングによるものではなく、エクスプロイトであるため、非常に腹立たしいものです。 これらの攻撃は、HTTP の性質とそれを実装するシステムによって発生します。

一般的に、レイヤー 7 DDoS 攻撃には、低速と高速の 2 種類があります。 低速レイヤー 7 DDoS は、ネットワーク接続が非常に悪いように見せかけ、正当な要求からの応答をゆっくりと吸い上げることでリソースを消費します。 Web アプリは接続ベースであるため、リソースが消費され、それらの接続を維持するためのリソースも限られています。 十分な数のクライアントに接続し、正当なリクエストを送信して応答をゆっくりと受け取ることで、攻撃者はアプリケーション リソースを拘束することができます。 これにより、正当なクライアントが接続することがほぼ不可能になり、事実上、サービス拒否攻撃が実行されることになります。

この攻撃は特に悪質で、ネットワーク速度と受信速度を比較しない限り、検出が困難です。 つまり、アップストリームのアプリケーション サービスはクライアントのネットワーク特性を把握できるため、クライアントの受信速度が故意に遅いのか、実際にネットワークの問題があるのかをより正確に判断できます。  こうした種類の攻撃を阻止するには、正当性を判断することが重要です。

基本的に、これらの攻撃はプロトコル層 (HTTP) を悪用するもので、安全なコーディングで対処することはできません。

脆弱性がなければ、安全なコーディングソリューションはありません。

クレデンシャルスタッフィング

最後に重要なのが、クレデンシャルスタッフィングです。 過去数年間に侵入によって公開された認証情報の数が信じられないほど多いため、この攻撃は防御すべき重要な攻撃となっています。

クレデンシャル スタッフィング攻撃は、既存のユーザー名/パスワード ダンプの膨大なプールを利用するブルート フォースの原理に基づいているため、通常はボットやツールに依存します。 クレデンシャルスタッフィング攻撃が手動で実行されることはほとんどありません。 クレデンシャルスタッフィング攻撃が成功するのは、安全でないコーディングの結果ではありません*。  攻撃者は、パスワードの使用法が不適切であることと、進行中の攻撃を認識できないこと以外、何かを悪用しようとしているわけではありません。

これらの攻撃を検出するには、クライアントが有効な人間ではないことを判断できる必要があります。 したがって、一種の逆チューリングテストでは、課題を提示し、これらの自動システムが回答できない方法で CAPTCHA を使用する必要があります。

どれだけ安全なコーディングをしても、この攻撃の成功を防ぐことはできません。 パスワードの使用法を改善し、攻撃の試みを検出することが、インターネット上で増加しつつあるこの脅威に屈しないための最善の方法です。

悪用可能なコードがなければ、安全なコーディング ソリューションはありません。

*安全でないコーディングにより、クレデンシャルスタッフィング攻撃が発生する可能性があります。 結局のところ、コードベースの脆弱性が原因で、攻撃に利用できる資格情報の膨大なリストが生成され、かなりの数の侵害が発生しています。

差別化して検出し防御する

攻撃を防ぐためにセキュアコーディングを使用できる場合と使用できない場合を認識することが重要です。 これは重要なことです。なぜなら、攻撃が成功するたびに開発者を責め続けるわけにはいかないからです。 セキュリティにはシステムレベルの思考が必要です。防御する必要がある攻撃の種類は複数あるため、複数のソリューションが必要です。

近い将来、ほとんどの組織が受けることになるさまざまな攻撃に対して効果的かつ確実に防御するためには、差別化を図ることが重要です。 (1)安全でないコーディングによるエクスプロイトではない場合、または(2)可視性の欠如により不可能である場合、開発者に攻撃からの防御を強制しようとして時間を無駄にしないでください。

攻撃元や攻撃対象領域が何であっても、適切な場所で適切なセキュリティを提供するサービス システムから、戦略的にセキュリティに取り組む必要があります。

安全にお過ごしください。