理想を言えば、すべてのソフトウェアに欠点や弱点がないに越したことはありません。また少なくともソフトウェア脆弱性が、その頻度、簡単さ、可能性、利用された場合のビジネス上および技術上のインパクト、および検出と修正に必要なツールとリソースによってきちんとランク付けされていることが望ましいでしょう。このようにすれば、開発者はどこにリソースを集中させたらよいか、およびいつをもってその作業が完了したと考えてよいかを正確に知ることができます。
この世界にはそのようなリストは存在しません。しかしリスクの高い一般的なソフトウェアの脆弱性は、OWASP (OWASP Top 10 2017およびOWASP Top 10 Mobileを含む)およびMITRE(CWE/SANS Top 25)やその他に記載されており、これらを手掛かりとすることはできます。これらのリストは、エンタープライズ・アプリケーションの大多数を占めるWebアプリやモバイル・アプリを含む様々なソフトウェア環境を網羅しています。脆弱性は、その脅威がどれだけ一般的であるか、検出と修正がどれだけ簡単であるか、およびその技術面とビジネス面における潜在的なインパクトなどの多くの基準で選択されています。
これらのソフトウェアの欠点のうちどれが2019年のあなたのビジネスに最も大きな脅威をもたらすかを断定することはできません。そしてまた、次回のデータ流失を起こす可能性が最も高いのはどれであるかを断言することもできません。そのかわりに、修正の労力に対するリターンが大きい一般的なソフトウェア脆弱性を10件選択しておきました。これらのアプリケーション・リスクはWebアプリやモバイル・アプリに広く浸透しており、その利用も簡単です。しかし、その多くは統計解析などの自動ツールで検出できます。人間による広範囲なコード・レビューの必要はありません。正しいガイダンスがあれば修正も少ない費用で行えます。つまり、これらの一般的なソフトウェア脆弱性は、攻撃者にとってだけでなく、アプリケーション・セキュリティのリソースが限られた開発者にとっても、低い場所に実った果実であるということができます。
以下に順不同で2019年 ソフトウェア脆弱性リストTop 10をご紹介します。
バッファ・オーバーフローは、最も広く知られた一般的なソフトウェア脆弱性です。小さすぎるメモリに大きすぎるものを入れようとすると、当然予想外の事態が発生します。広く使用されているWebアプリケーション言語(たとえばJava)は、この種の脆弱性に対する防御ができています。しかし多くのモバイル・アプリはバッファ・オーバーフローに対する脆弱性が広く知られた言語ファミリーであるCやC++で書かれています。バッファ・オーバーフローと不正確なバッファ・サイズ計算についてご参照ください。
別名「パス・トラバーサル」。このタイプの脆弱性が存在すると攻撃者にwebサイトとは関係ないファイルとディレクトリへのアクセスを許してしまいます。攻撃者はキャラクタ・シーケンス“../”(親ディレクトリを指す)の付いたファイル・リクエストやディレクトリ・リクエストを送ります(このため「ドットドットスラッシュ攻撃」とも呼ばれます)。この脆弱性は機密データの保管が安全でないなどの他の脆弱性と組み合わされると特に危険性が増します。パス・トラバーサルをご参照ください 。
接続が失われると顧客に一時的な恐怖をもたらします。しかし機密データの喪失は、顧客のその後の人生すべてにわたる恐怖をもたらします。そしてあなたのビジネスにも重大な影響を与えかねません。言われているとおり、転送中のデータを保護することは困難です。しかし、少なくとも留まっているデータ(保存されたデータ)のすべてに対して強力な暗号化を行うことはできます。セキュアでないデータ保存、不十分な暗号化方式、機密データの露出、暗号化の欠落、不適切またはリスクの高い暗号化方式をご参照ください。
現在では、まったくゼロからコードを書く人はいません。現代のすべてのコードには何らかの既存のコードが含まれています。それは自己完結型のモジュールであったり、他のコードベースから「借用した」スニペットであったり、その形式は様々です。しかし、コードの再利用は便利であると同時に脅威をもたらします。新しい脆弱性が次々に見つかっています。信頼されたコンポーネントでも悪意のある行為者に乗っ取られている場合があります。そして、自分のコードベースに何が含まれているかを知らないとトラッキングも修正もできません。既知の脆弱性を含んだコンポーネントの使用をご参照ください。
WebサービスとAPIの使用が爆発的に増えている一方で、APIのセキュリティはその成長に追いついていません。脅威を与える者が時としてセキュアでないサービスやAPIを通じて機密データに直接アクセスすることがあります。しかし組織は自身のモバイル・アプリにセキュアなWebサービスとAPI呼び出しを確実に実装することも求められています。そうでないと、これらのアプリケーションは攻撃者がシステムにアクセスするためのもう一つのインターフェースになってしまいます。不適切なプラットフォームの使用法をご参照。
ログファイル(例: webサーバー上のログファイル)へのアクセスを制御している場合は、すべてをロギングする方式がよいと思います。このようにすれば、攻撃を検出し事後にその範囲と潜在的なダメージを判定する際に有益です。しかしログファイルへのアクセスを制御できない場合もあります(例: ユーザー・デバイス上のログファイル)。その場合には「多いことはよいことだ」という考え方は必ずしも当てはまりません。脆弱性のトレースに役立つすべての情報は、攻撃者をも利する可能性があります。暗号化されていない場合、これはとくに当てはまります。不十分なロギングと外部機能をご参照。
クロスサイト・スクリプティングは、攻撃者のコードをwebサイトの閲覧者のブラウザ上で実行する一連の攻撃を指します。XSS攻撃はFAQやヘルプページなど、webページを表示しているモバイル・アプリでも行われます。これはOWASP Top 10 2017で第2位にリストされた問題であり、CWE/SANS Top 25では「Webアプリケーションにおいて、最も蔓延している強力で危険性の高いな脆弱性の1つである」と書かれています。
承認とは、ユーザーのポリシー、ロール、行う可能性のあるアクションの作成を意味します。アクセス制御は、ユーザーが不正な動作を実行できないようにするにはシステムはどうしたらよいかという問題です。認証の問題と同様に、アクセス制御の問題のいくつかは、他よりも検出が簡単です(例: 認証の欠落 vs. 定義が不十分なアクセス・リスト)。不適切なアクセス制御、安全でない認証、認証の欠落、不正な認証をご参照ください。
SQLインジェクションでは、攻撃者はデータベースに対して処理を行うタイプの入力(例: テキストボックスへの入力)として、コードを送信します。SQLインジェクションは、理解するのも利用するのも非常に簡単なこともあって、最も有名で一般的なソフトウェア脆弱性です。研究者やハッカーは、20年以上にわたってこれについての著作を発表してきましたが、それでもその高い流行は止まっていません。他のタイプのコード・インジェクションも長く続く問題であることが確認されています。SQLインジェクションとインジェクションをご参照ください。
これらの一般的なソフトウェア脆弱性のほとんどは、ある程度までほとんどのwebやモバイル開発の脅威になっています。しかしソフトウェアの問題のすべてが、すべての組織にとって、またチーム内の開発者すべてにとっての問題であるとはいえません。こうした点を考えると、あなたの組織またはあなた自身用にカスタマイズされた脆弱性Top 10リストを作るのが合理的です。
まずは、アプリケーション・セキュリティ・テスト・ツールを手掛かりにしてください。多くのAppSecツールは、実際に検出した脆弱性についてその頻度とタイプのトレンドを表示することができます。OWASP Top 10の内容のデータシートとCWE/SANS Top 25のコベリティ静的解析の内容を見れば、自動統計解析ツールで見つけられるのはどのタイプの脆弱性であるかがわかります。
脆弱性に関するその他の情報源は自社のアプリケーション・セキュリティ・チームです。彼らによく目にする傾向がある脆弱性はどれか、そのうち特に自動ツールが見つけられないものはどれかについて聞いてみてください。カスタマイズされたソフトウェア脅威のTop 10リストがあれば、自分自身とチームメンバーに対し、的を絞ったトレーニングやより良いツールを提供するための事例を構築することができます。無料のeBook、誰がOWASPを必要としているかにはさらに詳しい情報が掲載されています。