コーダーがセキュリティを制する:共有&学習シリーズ - 無制限のファイルアップロード

「無制限のファイルアップロード」という問題は、それ自体が攻撃というわけではありません。しかし、攻撃者がアプリケーションやネットワークリソースに容易にアクセスできる状態を作り出してしまう、よくある脆弱性です。これは、濡れた服を着たまま寒い場所を歩き回るようなものだと考えてください。それだけで必ず病気になるわけではありませんが、抵抗力が低下し、どんなウイルスであっても容易に身体の防御を突破されてしまう状態になります。
サイバーセキュリティにおいて、攻撃者は無制限のファイルアップロードを許可しているアプリケーションやプログラムを即座に悪用します。その結果は壊滅的なものになりかねません。巧妙な攻撃者は、この無制限のアクセス権を悪用して悪意のあるファイルをアップロードしたり、認証情報を盗むためのスクリプトを仕込んだり、アプリケーションの権限を悪用してネットワークの深部へ攻撃を仕掛けたりします。比較的未熟な攻撃者であっても、このような無防備なアクセス権を利用してサービス拒否攻撃(DoS攻撃)を行ったり、アプリケーションをクラッシュさせたりすることが可能です。
幸いなことに、「無制限のファイルアップロード」という問題を克服し、攻撃者の侵入を阻止する方法はいくつも存在します。そのために、本稿では以下の3つの重要な側面について解説します。
- 仕組み
- なぜこれほど危険なのか
- どのように防御策を講じるべきか
攻撃者はどのようにして無制限のファイルアップロードを悪用するのか?
Webサイトで一般ユーザーによるファイルアップロードを許可する理由は数多くあります。例えば、企業が採用活動の一環として履歴書のアップロードを求める場合や、銀行がローンや新規口座開設の申し込みに必要な書類を自宅からアップロードできるようにする場合などです。また、観光サイトやSNSでは、ユーザーが写真を共有するためにアップロードを許可することもあります。
ファイルアップロードを許可する正当な理由はたくさんあります。そしてデフォルトでは、ほとんどの新しいアプリケーションは、制限なしにどのような種類のファイルでもアップロードできるようになっているのが一般的です。問題は、攻撃者がそのアップロードに制限が設けられていないことに気づいたときに始まります。
アップロードに制限がないと、サイトは3種類の攻撃にさらされることになります。最も単純なものから挙げると、悪意のあるユーザーが、何百ギガバイトもの情報を含む圧縮アーカイブのような巨大なファイルをアップロードするケースです。これは帯域幅を圧迫するだけでなく、アプリケーションに割り当てられたストレージ領域を過負荷状態に陥らせます。
次に深刻なのは、ウイルスやランサムウェアのような悪意のあるファイルをアップロードするケースです。これは、吸血鬼を家に招き入れなければならないという古い迷信に似ています。「誰でも自由に入れます」という看板を掲げることは、無制限のファイルアップロードを許可することと同じです。何がドアをくぐってくるのかを制御できなくなるため、すべての訪問者(ファイル)が安全であるとは限らないと覚悟しておくべきです。中には怪物のようなファイルが紛れ込んでいるかもしれません。
最後に、熟練した攻撃者は、無制限のアップロードを利用してネットワークへの足がかりを作り、より深い攻撃を仕掛けます。アップロードできるものに制限がないため、攻撃者は独自のWebシェルを送り込むことができます。その後、そのシェルにコマンドを送信すれば、アプリケーションと同じ権限レベルでサーバー上でコマンドが実行されます。
なぜ無制限のファイルアクセスはこれほど危険なのか?
無制限のファイルアクセスを許可した状態でアプリケーションを公開することは、直ちに危険というわけではありませんが、サイバーセキュリティの防御壁に穴を開け、攻撃者を組織に招き入れているようなものです。遅かれ早かれ、誰かがその穴を突いてくるでしょう。
最も基本的なレベルでは、攻撃者は高度なスキルを持っていなくても大混乱を引き起こすことができます。単に非常に大きなファイルを圧縮してアップロードするだけで、正当なユーザーに対するサービスを拒否するのに十分な場合があります。時間の経過とともに、アプリケーションのプログラミングやネットワーク構成によっては、アプリケーション全体やサイト全体をクラッシュさせることさえ可能です。
Having unrestricted file access also might open a hole through network firewalls and other protections. It won't matter if you have a scanner looking at your incoming e-mail or your employee web browsing activity if you have created a path for attackers to upload malware directly to your core network. The malware might crash the application or even the server it's running on, though that is probably the best possible outcome. In a worst-case scenario, a truly malicious program like ransomware can use the compromised server to spread out to the entire network.
より熟練した攻撃者は、無制限のファイルアクセスを悪用する際、それほど目立つようなことはしません。代わりに、その脆弱性を利用してアプリケーションを侵害し、それを足がかりにしてネットワークの深部へとゆっくりと侵入し、検知を回避しようとします。これは、Webシェルやその他の実行ファイル(.exeなど)をアップロードし、それが配置された後に直接コマンドを送信することで実行されます。ユーザーがシェルを通じて実行するものは、通常、そのアプリケーションに設定された権限レベルでサーバーによって実行されます。サーバーから見れば、それらのコマンドはアプリケーションから送られてきたものと見なされるため、それ以上チェックや精査が行われることはほとんどありません。
これらすべての理由から、無制限のファイルアクセスの脆弱性は、ネットワークにおいて最も危険なものの一つとなっています。問題が発生するかどうかではなく、いつ発生するかが問題なのです。
無制限のファイルアクセスの脆弱性を排除するにはどうすればよいか?
では、無制限のファイルアップロード問題に どう対処すべきでしょうか。最も簡単な方法は、アップロード可能なファイルの種類に制限を設けることです。例えば、Wordファイルやテキストファイルのみ受け付ける、あるいは画像共有サイトであれば.jpgや.gifのみ許可するといった情報をユーザーに提示します。バックエンドでは、許可するファイル拡張子のホワイトリストを作成し、それ以外をすべて拒否する設定が必要です。また、ファイル名の最大長にも制限を設けるべきです。実行コマンドを誘発する恐れのある特殊文字が含まれている場合も、同様に拒否する必要があります。
ファイルの種類や命名規則に加え、各ファイルの最大サイズも制限する必要があります。最大サイズは、アプリケーションが収集するファイルの種類に応じて、妥当かつ適切な値に設定してください。例えば、Wordファイルなら10MB程度、画像ファイルなら50MB程度といった上限が考えられます。最小サイズのルールを設定することも可能ですが、これはユーザーが特定のフォームに入力してアップロードする場合など、想定されるファイルのサイズ範囲が明確な場合に限られます。
攻撃者は、ファイルの種類やサイズの制限をすり抜ける巧妙な方法を見つけるかもしれません。その対策として、収集したファイルは実行権限のないプライベートディレクトリに保存するようにしてください。さらにセキュリティを強化するには、システム側でファイル名をランダムな文字列にリネームする方法が有効です。これにより、ネットワーク外部の不正なユーザーがアップロードしたファイルの場所を特定し、ネットワークの偵察に利用することを防げます。ただしその場合、ランダムなファイル名と元のファイル名を紐付けるテーブルを作成・管理する必要があります。
最後に、アップロードによってネットワークに到達したすべてのファイルは、組織が導入している防御プログラムでマルウェアやウイルススキャンを行う必要があります。これで全てを防げるわけではありませんが、ファイルアップロードを介して侵入しようとする一般的な悪意のあるファイルの90%以上を検知できる可能性がある、重要なセキュリティ層となります。
無制限のファイルアップロード問題への対策
バックエンドに複数のセキュリティ層を構築すれば、無制限のファイルアップロード問題は解消されます。ファイルアップロードに制限を設けることで「無制限」という状態そのものを排除するのです。これにより、安全なファイルのみが許可され、悪意のあるプログラムや脅威は排除されます。
詳細については、OWASPのUnrestricted File Upload Prevention Cheat Sheet(無制限のファイルアップロード防止チートシート)をご覧ください。この状況がネットワークで許容された場合に発生する一般的な問題がまとめられています。また、サイバーセキュリティチームを究極のサイバー戦士へと育成するSecure Code Warriorプラットフォームの無料ショーケースで、学んだ防御知識を試すことも可能です。この脆弱性やその他の脅威への対策について詳しくは、Secure Code Warriorブログをご覧ください。
この脆弱性に今すぐ挑戦する準備はできましたか?戦場へ向かい、スキルを試してみましょう:
AI主導の開発をリリース前にガバナンスする
AIを活用したリスク測定、コミット時のセキュアコーディングポリシーの強制、そしてSDLC全体を通じたセキュアなデリバリーの加速を実現します。
他のブログ記事を見る
セキュアコーディング、AIガバナンス、ソフトウェアリスク管理に関する専門的なコンテンツをご覧ください。
%252520%252520(3).avif)
Supercharged Security Awareness: How Tournaments are Inspiring Developers at Erste Group
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse varius enim in eros elementum tristique. Duis cursus, mi quis viverra ornare, eros dolor interdum nulla, ut commodo diam libero vitae erat. Aenean faucibus nibh et justo cursus id rutrum lorem imperdiet. Nunc ut sem vitae risus tristique posuere.

Security as culture: How Blue Prism cultivates world-class secure developers
Learn how Blue Prism, the global leader in intelligent automation for the enterprise, used Secure Code Warrior's agile learning platform to create a security-first culture with their developers, achieve their business goals, and ship secure code at speed
AIを活用した開発をリリース前にセキュアに
開発者のリスクを可視化し、ポリシーを適用することで、ソフトウェア開発ライフサイクル全体における脆弱性を未然に防ぎます。



.avif)