Coders Conquer Security:シェア&ラーンシリーズ - 制限のないファイルアップロード

2019年1月10日発行
ジャープ・カラン・シン著
ケーススタディ

Coders Conquer Security:シェア&ラーンシリーズ - 制限のないファイルアップロード

2019年1月10日発行
ジャープ・カラン・シン著
リソースを見る
リソースを見る

Unrestricted File Uploads問題は、攻撃そのものではなく、攻撃者がアプリケーションやネットワークリソースに容易にアクセスできるような一般的な状況や状態のことを指します。これは、寒さの中で濡れた服を着て歩くようなものだと考えることができます。濡れた服を着ていても、それだけで病気になるわけではありませんが、日和見のウイルスが体の防御力を簡単に超えてしまうほど抵抗力が低下してしまいます。

サイバーセキュリティの分野では、無制限のファイルアップロードをサポートしているアプリケーションやプログラムがあると、攻撃者はすぐにそれを悪用します。そして、その結果は壊滅的なものになる可能性があります。巧妙な攻撃者は、その無制限のアクセスを利用して、悪意のあるファイルをアップロードしたり、認証情報を盗むためのスクリプトを設定したり、アプリケーション自身の権限を利用してネットワークに深い攻撃を仕掛けたりすることができます。比較的単純な攻撃者であっても、このような自由なアクセスを利用して、サービス拒否攻撃を行ったり、アプリケーションをクラッシュさせたりすることができます。

幸いなことに、「アップロード制限のないファイル」の問題を解決する方法はいくつかあり、攻撃者を阻止することができます。そのため、ここでは「アップロード制限のないファイル」の3つの重要な側面について説明します。

  • 仕組み
  • なぜ彼らは危険なのか
  • それを阻止するためには、どのような防御策を講じるべきか。

無制限のファイルアップロードを悪用した攻撃方法とは?

一般ユーザーがファイルをアップロードできるようにしたい理由はさまざまです。例えば、企業が人材を採用する際に、応募手続きの一環として履歴書をアップロードできるようにしたい場合。銀行では、ローンや新規口座開設などの重要な書類を自宅で記入してもらう。観光やソーシャルメディアのサイトでは、ユーザーが写真をアップロードして他の人と共有することができます。

ファイルのアップロードを許可する正当な理由はたくさんあります。そして、ほとんどの新しいアプリケーションは、デフォルトで、あらゆるタイプのファイルのアップロードを制限なしに許可するようになっています。問題は、潜在的な攻撃者が、アップロードに制限がないことに気付いたときに始まります。

アップロードに制限がないため、サイトは3つのタイプの攻撃を受けます。最も巧妙でないものとしては、悪意のあるユーザが、数百ギガバイトの情報を含むzip形式のアーカイブなどの巨大なファイルを単純にアップロードすることが挙げられます。これにより、帯域幅が制限されるだけでなく、アプリケーションに割り当てられた記憶領域がオーバーロードされます。

次の段階では、ウイルスやランサムウェアのような悪意のあるファイルをアップロードするユーザーが挙げられます。これは、吸血鬼を家に招き入れなければならないという、昔からある迷信のようなものです。誰でも自由に入れるというサインを出しておけば、ファイルのアップロードが無制限にできるのと同じです。ドアから何が入ってくるかはもうコントロールできませんし、すべての訪問者やファイルが良性のものではないことを想定すべきでしょう。中にはモンスターもいるかもしれません。

最後に、熟練した攻撃者は、無制限のアップロードを利用してネットワークへの足がかりを作り、より深い攻撃を行うことができます。誰かがアップロードできる内容には制限がないため、攻撃者はそのプロセスを通じて自分のウェブシェルを送信することができます。その後、自分のシェルにコマンドを送ることができ、そのコマンドはアプリケーションと同じ権限レベルでサーバ上で実行されます。

なぜファイルへのアクセスが制限されると危険なのか?

ファイルへのアクセスが制限されていないアプリケーションを導入することは、直ちに危険なことではありませんが、基本的には、サイバーセキュリティの防御に穴を開けて、誰かが組織を攻撃するのを誘うようなものです。遅かれ早かれ、誰かが反応するでしょう。

最も基本的なレベルでは、攻撃者は大惨事を引き起こすために多くのスキルを必要としません。非常に大きなファイルをZIP圧縮してアップロードするだけで、有効なユーザーのサービスを拒否することができます。時間が経てば、アプリケーションのプログラムやネットワークの状態によっては、アプリケーションやサイト全体がクラッシュする可能性もあります。

また、ファイルへのアクセスが無制限になると、ネットワークのファイアウォールやその他の保護機能に穴が開く可能性があります。攻撃者がマルウェアをコアネットワークに直接アップロードするための経路を作ってしまっては、受信メールや従業員のウェブ閲覧を監視するスキャナがあっても意味がありません。このマルウェアは、アプリケーションや、そのアプリケーションが動作しているサーバーをクラッシュさせるかもしれませんが、それはおそらく最良の結果です。最悪の場合、ランサムウェアのような真に悪質なプログラムは、侵害されたサーバを利用してネットワーク全体に拡散してしまいます。

より熟練した攻撃者であれば、ファイルへのアクセスが制限されていないアプリケーションを悪用しても、それほど目立つことはないでしょう。その代わりに、脆弱性を利用してアプリケーションを侵害し、それを利用してネットワークの奥深くに侵入し、ゆっくりと移動して検知されないようにします。これには、ウェブシェルやその他の.exeタイプのファイルをアップロードして、そのファイルに直接コマンドを送信する方法があります。ユーザーがシェルを介して実行するものは、通常、それをホストするアプリケーションに設定されているあらゆる許可レベルを使用して、サーバーによって実行されます。サーバーにとっては、これらのコマンドはアプリケーションから送られてきたものであり、それ以上のチェックや検査を受けることはありません。

これらのことから、無制限のファイルアクセスが可能な脆弱性は、ネットワーク上に存在する最も危険な脆弱性の一つと言えます。問題が発生するかどうかではなく、いつ問題が発生するかが問題となるでしょう。

ファイルアクセスが制限されていない」という脆弱性をなくすにはどうすればいいですか?

では、無制限のファイルアクセスの問題を解決するにはどうすればよいのでしょうか。最も簡単な方法は、アップロード可能なファイルの種類に制限を加えることです。例えば、Wordやテキストファイルしか受け付けないとか、画像共有サイトの場合は.jpや.gifしか受け付けないなど、必要に応じてユーザーに制限を伝えることができます。バックエンドでは、受け入れ可能なファイル拡張子のホワイトリストを作成し、それ以外のものは拒否する必要があります。また、ファイル名の最大長にも制限を設ける必要があります。また、ファイル名に特殊文字が含まれている場合は、実行可能なコマンドを起動しようとしている可能性があるため、同様に拒否する必要があります。

ファイルの種類や命名規則に加えて、各ファイルの最大サイズを制限したい場合もあります。最大サイズは、アプリケーションが収集するファイルの種類に応じた合理的で適切なものでなければなりません。例えば、Wordファイルの場合は10メガバイト程度、グラフィックファイルの場合は50メガバイト程度と、少し大きめのサイズを設定するとよいでしょう。最小ファイルサイズのルールを設定することも可能ですが、ユーザーが特定のフォームに記入してアップロードする場合など、想定されるファイルのサイズ範囲がよくわかっている場合に限られます。

攻撃者は、ファイルの種類やサイズの制限をかいくぐって、シェルやその他の悪意のあるプログラムを忍び込ませる巧妙な方法を見つけるかもしれません。そのため、収集したファイルは、実行権限のないプライベートなディレクトリに保存するようにしましょう。さらにセキュリティを高めるために、ファイルの名前をシステムがランダムな文字列に変更することができます。これにより、ネットワーク外からの不正なユーザーがアップロードされたファイルの場所を検索することを防ぎ、ネットワークへの偵察を行うことができるかもしれません。ただし、その場合には、ランダムなファイル名と元の指定を結びつけるテーブルを設定して管理する必要があるでしょう。

最後に、アップロードによってネットワークに到達したものは、組織がこれらのタスクのために使用しているあらゆる防御プログラムによって、マルウェアやウイルスをスキャンする必要があります。これにより、すべてを検出することはできないかもしれませんが、重要なセキュリティ層として、ファイルアップロード経由で侵入しようとする最も一般的な悪意のあるファイルの90%以上を検出することができます。

ファイルのアップロードが制限されていない問題を制限する

バックエンドにいくつかのセキュリティ層を設けると、無制限のファイルアップロードの問題は解消されます。基本的には、ファイルのアップロードに制限を設けることで問題を解消しているので、もはや無制限ではありません。良いファイルだけが内部に入り、吸血鬼やマルウェアはすべて野放しになります。

OWASP Unrestricted File UploadPrevention Cheat Sheetには、このような状況をネットワーク上で許してしまった場合の最も一般的な問題点がまとめられていますので、ぜひご覧ください。また、サイバーセキュリティチームを究極のサイバー戦士に育成するSecure Code Warrior プラットフォームの無料ショーケースで、新たに得た防御の知識を試すこともできます。この脆弱性やその他の脅威の対策について詳しく知りたい方は、Secure Code Warrior ブログをご覧ください。

今すぐにでもこの脆弱性に取り組む準備ができたと思いますか?戦場に赴き、自分のスキルを試してみましょう。

リソースを見る
リソースを見る

著者

Jaap Karan Singh

もっと知りたい?

セキュアコーディングに関する最新の知見をブログでご紹介しています。

当社の豊富なリソースライブラリは、安全なコーディングアップスキルに対する人間的なアプローチを強化することを目的としています。

ブログを見る
もっと知りたい?

開発者主導のセキュリティに関する最新の研究成果を入手する

ホワイトペーパーからウェビナーまで、開発者主導のセキュアコーディングを始めるために役立つリソースが満載のリソースライブラリです。今すぐご覧ください。

リソース・ハブ

Coders Conquer Security:シェア&ラーンシリーズ - 制限のないファイルアップロード

2019年1月10日発行
Jaap Karan Singh著

Unrestricted File Uploads問題は、攻撃そのものではなく、攻撃者がアプリケーションやネットワークリソースに容易にアクセスできるような一般的な状況や状態のことを指します。これは、寒さの中で濡れた服を着て歩くようなものだと考えることができます。濡れた服を着ていても、それだけで病気になるわけではありませんが、日和見のウイルスが体の防御力を簡単に超えてしまうほど抵抗力が低下してしまいます。

サイバーセキュリティの分野では、無制限のファイルアップロードをサポートしているアプリケーションやプログラムがあると、攻撃者はすぐにそれを悪用します。そして、その結果は壊滅的なものになる可能性があります。巧妙な攻撃者は、その無制限のアクセスを利用して、悪意のあるファイルをアップロードしたり、認証情報を盗むためのスクリプトを設定したり、アプリケーション自身の権限を利用してネットワークに深い攻撃を仕掛けたりすることができます。比較的単純な攻撃者であっても、このような自由なアクセスを利用して、サービス拒否攻撃を行ったり、アプリケーションをクラッシュさせたりすることができます。

幸いなことに、「アップロード制限のないファイル」の問題を解決する方法はいくつかあり、攻撃者を阻止することができます。そのため、ここでは「アップロード制限のないファイル」の3つの重要な側面について説明します。

  • 仕組み
  • なぜ彼らは危険なのか
  • それを阻止するためには、どのような防御策を講じるべきか。

無制限のファイルアップロードを悪用した攻撃方法とは?

一般ユーザーがファイルをアップロードできるようにしたい理由はさまざまです。例えば、企業が人材を採用する際に、応募手続きの一環として履歴書をアップロードできるようにしたい場合。銀行では、ローンや新規口座開設などの重要な書類を自宅で記入してもらう。観光やソーシャルメディアのサイトでは、ユーザーが写真をアップロードして他の人と共有することができます。

ファイルのアップロードを許可する正当な理由はたくさんあります。そして、ほとんどの新しいアプリケーションは、デフォルトで、あらゆるタイプのファイルのアップロードを制限なしに許可するようになっています。問題は、潜在的な攻撃者が、アップロードに制限がないことに気付いたときに始まります。

アップロードに制限がないため、サイトは3つのタイプの攻撃を受けます。最も巧妙でないものとしては、悪意のあるユーザが、数百ギガバイトの情報を含むzip形式のアーカイブなどの巨大なファイルを単純にアップロードすることが挙げられます。これにより、帯域幅が制限されるだけでなく、アプリケーションに割り当てられた記憶領域がオーバーロードされます。

次の段階では、ウイルスやランサムウェアのような悪意のあるファイルをアップロードするユーザーが挙げられます。これは、吸血鬼を家に招き入れなければならないという、昔からある迷信のようなものです。誰でも自由に入れるというサインを出しておけば、ファイルのアップロードが無制限にできるのと同じです。ドアから何が入ってくるかはもうコントロールできませんし、すべての訪問者やファイルが良性のものではないことを想定すべきでしょう。中にはモンスターもいるかもしれません。

最後に、熟練した攻撃者は、無制限のアップロードを利用してネットワークへの足がかりを作り、より深い攻撃を行うことができます。誰かがアップロードできる内容には制限がないため、攻撃者はそのプロセスを通じて自分のウェブシェルを送信することができます。その後、自分のシェルにコマンドを送ることができ、そのコマンドはアプリケーションと同じ権限レベルでサーバ上で実行されます。

なぜファイルへのアクセスが制限されると危険なのか?

ファイルへのアクセスが制限されていないアプリケーションを導入することは、直ちに危険なことではありませんが、基本的には、サイバーセキュリティの防御に穴を開けて、誰かが組織を攻撃するのを誘うようなものです。遅かれ早かれ、誰かが反応するでしょう。

最も基本的なレベルでは、攻撃者は大惨事を引き起こすために多くのスキルを必要としません。非常に大きなファイルをZIP圧縮してアップロードするだけで、有効なユーザーのサービスを拒否することができます。時間が経てば、アプリケーションのプログラムやネットワークの状態によっては、アプリケーションやサイト全体がクラッシュする可能性もあります。

また、ファイルへのアクセスが無制限になると、ネットワークのファイアウォールやその他の保護機能に穴が開く可能性があります。攻撃者がマルウェアをコアネットワークに直接アップロードするための経路を作ってしまっては、受信メールや従業員のウェブ閲覧を監視するスキャナがあっても意味がありません。このマルウェアは、アプリケーションや、そのアプリケーションが動作しているサーバーをクラッシュさせるかもしれませんが、それはおそらく最良の結果です。最悪の場合、ランサムウェアのような真に悪質なプログラムは、侵害されたサーバを利用してネットワーク全体に拡散してしまいます。

より熟練した攻撃者であれば、ファイルへのアクセスが制限されていないアプリケーションを悪用しても、それほど目立つことはないでしょう。その代わりに、脆弱性を利用してアプリケーションを侵害し、それを利用してネットワークの奥深くに侵入し、ゆっくりと移動して検知されないようにします。これには、ウェブシェルやその他の.exeタイプのファイルをアップロードして、そのファイルに直接コマンドを送信する方法があります。ユーザーがシェルを介して実行するものは、通常、それをホストするアプリケーションに設定されているあらゆる許可レベルを使用して、サーバーによって実行されます。サーバーにとっては、これらのコマンドはアプリケーションから送られてきたものであり、それ以上のチェックや検査を受けることはありません。

これらのことから、無制限のファイルアクセスが可能な脆弱性は、ネットワーク上に存在する最も危険な脆弱性の一つと言えます。問題が発生するかどうかではなく、いつ問題が発生するかが問題となるでしょう。

ファイルアクセスが制限されていない」という脆弱性をなくすにはどうすればいいですか?

では、無制限のファイルアクセスの問題を解決するにはどうすればよいのでしょうか。最も簡単な方法は、アップロード可能なファイルの種類に制限を加えることです。例えば、Wordやテキストファイルしか受け付けないとか、画像共有サイトの場合は.jpや.gifしか受け付けないなど、必要に応じてユーザーに制限を伝えることができます。バックエンドでは、受け入れ可能なファイル拡張子のホワイトリストを作成し、それ以外のものは拒否する必要があります。また、ファイル名の最大長にも制限を設ける必要があります。また、ファイル名に特殊文字が含まれている場合は、実行可能なコマンドを起動しようとしている可能性があるため、同様に拒否する必要があります。

ファイルの種類や命名規則に加えて、各ファイルの最大サイズを制限したい場合もあります。最大サイズは、アプリケーションが収集するファイルの種類に応じた合理的で適切なものでなければなりません。例えば、Wordファイルの場合は10メガバイト程度、グラフィックファイルの場合は50メガバイト程度と、少し大きめのサイズを設定するとよいでしょう。最小ファイルサイズのルールを設定することも可能ですが、ユーザーが特定のフォームに記入してアップロードする場合など、想定されるファイルのサイズ範囲がよくわかっている場合に限られます。

攻撃者は、ファイルの種類やサイズの制限をかいくぐって、シェルやその他の悪意のあるプログラムを忍び込ませる巧妙な方法を見つけるかもしれません。そのため、収集したファイルは、実行権限のないプライベートなディレクトリに保存するようにしましょう。さらにセキュリティを高めるために、ファイルの名前をシステムがランダムな文字列に変更することができます。これにより、ネットワーク外からの不正なユーザーがアップロードされたファイルの場所を検索することを防ぎ、ネットワークへの偵察を行うことができるかもしれません。ただし、その場合には、ランダムなファイル名と元の指定を結びつけるテーブルを設定して管理する必要があるでしょう。

最後に、アップロードによってネットワークに到達したものは、組織がこれらのタスクのために使用しているあらゆる防御プログラムによって、マルウェアやウイルスをスキャンする必要があります。これにより、すべてを検出することはできないかもしれませんが、重要なセキュリティ層として、ファイルアップロード経由で侵入しようとする最も一般的な悪意のあるファイルの90%以上を検出することができます。

ファイルのアップロードが制限されていない問題を制限する

バックエンドにいくつかのセキュリティ層を設けると、無制限のファイルアップロードの問題は解消されます。基本的には、ファイルのアップロードに制限を設けることで問題を解消しているので、もはや無制限ではありません。良いファイルだけが内部に入り、吸血鬼やマルウェアはすべて野放しになります。

OWASP Unrestricted File UploadPrevention Cheat Sheetには、このような状況をネットワーク上で許してしまった場合の最も一般的な問題点がまとめられていますので、ぜひご覧ください。また、サイバーセキュリティチームを究極のサイバー戦士に育成するSecure Code Warrior プラットフォームの無料ショーケースで、新たに得た防御の知識を試すこともできます。この脆弱性やその他の脅威の対策について詳しく知りたい方は、Secure Code Warrior ブログをご覧ください。

今すぐにでもこの脆弱性に取り組む準備ができたと思いますか?戦場に赴き、自分のスキルを試してみましょう。

弊社製品や関連するセキュアコーディングのトピックに関する情報をお送りする許可をお願いします。当社は、お客様の個人情報を細心の注意を払って取り扱い、マーケティング目的で他社に販売することは決してありません。

送信
フォームを送信するには、「Analytics」のCookieを有効にしてください。完了したら、再度無効にしてください。