ソフトウェア開発の抜け穴を回避する方法

データ侵害が多発すると、各組織の作成と維持のセキュリティソフトウェア製品は、ますます重要になってきています。ではないが、すべての攻撃は、露光面の攻撃を回避するために、ソフトウェアの脆弱性を切断することにより、少なくとも期待や予防、しかし、我々はできることができます。

この記事では、最も一般的なソフトウェアの脆弱性のいくつかを学びます、とそのメソッドを回避する方法。また、あなたは、ソフトウェアとデータのセキュリティを確保するために優れた一般的な方法のいくつかを使用する方法を学習します。

一般的なソフトウェアの脆弱性

2019年、MITRE.org CWE(共通脆弱列挙、一般的な欠陥リスト)発足25最も危険なソフトウェアエラーリスト、参照します。https://cwe.mitre.org/top25/archive/2019/2019_cwe_top25.html 。攻撃者は、さまざまな方法のすべての種類のですが、実際に一般的な攻撃の多様性を組み合わせるために、元の目的である。が、ここでは、一般的なソフトウェアの脆弱性の数に焦点を当てます。

バッファオーバーフロー(バッファオーバーフロー)

あなたのプログラムがバッファの範囲を超えて読み取りまたは書き込みしようとすると、バッファオーバーフローエラーが発生します。直接の危険がある:データカバレッジを引き起こす可能性があり、または追加のデータは、前のコードで発生するべきではありません。このため、バッファオーバーフローが変更プログラムフローにコードを実行する攻撃を引き起こし、さらにシステムの一部の機密データや原因崩壊を読み取ることができます。

バッファオーバーフローの脆弱性、などの典型的な例:

  • 無制限の種々の長さの入力受付
  • 有効なインデックスから配列の読み出し動作を許可

バッファオーバーフローの脆弱性は、通常、ソフトウェアとハ​​ードウェアアーキテクチャの設計、実装、運用フェーズで隠されています。C、C ++、およびアセンブリプログラムの中で最も一般的な脆弱性。もちろん、それはまた、メモリ管理のサポートを欠いた任意のプログラミング言語で表示されることがあります。

バッファオーバーフローの脆弱性に対する注意事項

JavaやPerlは言語のメカニズムなど抜け穴の危険を防止または軽減するために持っているような:上述したように、我々は次のような選択するようにしてください。C#などのプログラミング言語では、我々は、オプションのオーバーフロー保護を無効にしないでください。ネイティブコードの相互作用が予期しないエラーを発生しながら、そうであっても、これらのプログラミング言語は「免疫」の機能を持っている、また、動作環境に脆弱な可能性があります。

悪用されることから、バッファオーバーフローの脆弱性を防ぐために、あなたは機能や拡張のための入力を制限するために、コンパイラのようなVisual StudioまたはStackGuardとして使用することができます。同時に、あなたもアドレスがさらに困難に識別し、予測し、ひいてはそれが困難な攻撃者がこれらの特定のコンポーネントを使用できるようにすることであるように、ランダムにプログラムメモリの異なるコンポーネントに配置され、さまざまなツールを使用することができます。

また、確認正しくコードを作成するスペースをバッファ割り当て、入力のサイズを制限する方法および様々な機能を使用することを可能にします。

不適切な入力検証(不適切な入力確認)

私たちは、検証、検証や不適切なを取るために、ユーザの入力端子を受信できない場合は、それはいわゆる「不適切な入力確認を。」を生成します 検証は、プログラムの流れ、機密データへのアクセス、および既存の資源配分の乱用を変更することによって、攻撃者が悪意のあるコードを実行することはできませんとき。

不適切な認証記載の典型的な例:

  • 攻撃者は、隠されたフォームフィールドへのアクセスを得ることができないので、
  • 長さの検証のみ入力フィールドではなく、具体的な内容

不適切な検証はまた、ソフトウェアとハ​​ードウェアアーキテクチャの設計と実装の段階に隠されます。これは、任意のプログラミング言語や外部データを受信するシステムで発生する可能性があります。

不適切な検証の脆弱性に関する注意事項

当社は原則、任意のユーザーに「ゼロ・トラスト(ゼロ信託)」を採用し、彼らがこれまでに安全であることが証明されるまで、すべての入力が疑わしいであると仮定すべきです。同時に、我々は、入力のみ許容フォーマット情報が含まれていることを確認するためにホワイトリストのメカニズムを使用することができます。

このように、入力を検証する場合、その長さ、タイプのコンプライアンスを評価し、構文、およびロジック(すなわち:入力セマンティクスかどうか)。OWASP ESAPI検証API(https://owasp.org/www-project-enterprise-security-api/)と正規表現(正規表現、正規表現):次のような、完全に検証済みの完了を確実にするためのさまざまなツールを使用することができます。環境変数、クエリ、ファイル、データベース、およびAPIコール:これらのツールは、私たちは含めて、すべての入力ソースを検証することができます。

また、当社は、クライアントとサーバが適切なチェックを実行することを確認する必要があります。クライアント認証が表示されバイパスされないようにするために、我々は、操作するための潜在的な攻撃者を識別するために、サーバー側で入力をキャプチャするに焦点を当てる必要があります。同時に、必要な変換、または組み合わせ後のプログラムコードは、あなたがそれを再度入力していることを確認してください。

情報開示(情報露出)

データが意図的または意図せず情報漏洩として知られている潜在的な攻撃者に提供されます。機密データの開示に加えて、ソフトは、攻撃者によって悪用される可能性があります提供する、ハードウェア環境は、情報漏洩です。

情報漏洩の典型的な例は次のとおりです。

  • 誤ってファイルやプログラムの完全なパスにさらさ
  • プログラムエラーは、異常なメッセージは、ユーザ・データベース内の情報を露出しました

情報漏えいの脆弱性は、依然として、ソフトウェアとハ​​ードウェアアーキテクチャの設計と実装の段階で非表示になります。これは、より大きなエクステントにプログラミングの習慣に応じて、プログラミング言語とは何の関係もありません。

使用上の注意情報漏えいの脆弱性

情報の開示を防ぐために、あなたは明示的な信頼境界領域のためのプログラムのアーキテクチャを設計する必要があります(ます。https://www.microsoft.com/en-us/itshowcase/implementing-a-zero-trust-security- AT-マイクロソフトモデル)、機密情報を保護するために、アクセス制御を使用することによって、リミット「安全な」領域と様々なエンドポイント間の接続を保護します。

この脆弱性を回避するために、可能な限り、プログラムに誤った警告メッセージのすべての種類を確認するだけでなく、ユーザー情報を警告してコンテンツへの不必要な露出が含まれていてください。同時に、あなたはまた、URL内の機密情報通信パッケージのヘッドが表示されます(ヘッダー)のことを制限する必要があります。例えば:あなたはフルパス名だけでなく、APIキーを非表示にすることができます。

特権や不適切な認証(不適切な特権または認証)

適切に割り当て、トラックへの障害は、変更、またはユーザーの権限と資格情報を確認、それは特権や状況の不適切な認証を発生する可能性があります。このような脆弱性により、攻撃者は、特権を乱用するために限られたタスクを実行するだけでなく、制限されたデータへのアクセスを許可することができます。

特権または不適切な認証典型的な例は次のとおりです。

  • 一時的に右のタイムリーな回復は言うまでもありません
  • 唯一のブラックリストで権限を制限するには、ホワイトリストの代わりに
  • 管理者パスワードをリセットします。それは、次のような、より低い特権レベルが高い特権アカウントに影響を与えることができます
  • ログイン試行またはセッションのアイドル時間の数を制限

権限や認証の脆弱性は、まだソフトウェアとハ​​ードウェアのアーキテクチャ設計、実装、および運用フェーズで発生する可能性があります。また、特定のプログラミング言語に限定されるものではありません。

権限や認証の脆弱性に関する注意事項

あなたは、「最小特権」はと対話する対象ソフトウェアおよびシステム間のすべてのユーザーとサービスに適用されなければなりません。のみ特定のリソースとユーザーの本当に最低限必要な権限のタスクを完了する必要があるか、サービス操作します。私たちは、ユーザとエンティティの権利を制限するために、プログラムや環境全体のアクセス制御を使用する必要があります。

可能ならば、我々はまた、複数のロールに与えられた特権をすることができます。分離することにより、我々は効果的に「ユーザー」を弱める、とそのアクセス権限を悪用する攻撃者の能力を低下させることができます。また、あなたはまた、システムのバイパスへの攻撃を防ぎ、簡単にアクセスするためのメカニズムをチェックし、多要素認証を使用することができます。

優れた一般診療の脆弱性を減らします

超えて、ターゲットの特定の脆弱性への対策をとることに加えて、我々は一般的に露出面の脆弱性を減らすためにいくつかの一般的な対策を使用する必要があります。あなたは、次の側面から開始することができます:

脅威インテリジェンスから学びます

メッセージ:(OWASP又はNIST)およびデータベースの脆弱性からの連続モニタリングの使用(脆弱性データベース、参照:: HTTPS //vuln.whitesourcesoftware.com/)と独立した監視グループ。これらのリソースは、抜け穴後、あなたのための脆弱性に関するタイムリーな情報を提供することができ、そして現在の問題を解決したり、軽減する方法をお見せすることができます。したがって、あなたは実際の状況に応じて、正確にターゲットシステムとそのコンポーネントを修復することができます。

慎重に含まれる依存性

これらのライブラリを使用すると、フレームワークが見直され、信頼されていることを確認、必要な場合にのみ行います。いくつかの未知のツールは、お使いのソフトウェアで、独自の脆弱性にお届けします、そして潜在的なバックドアに攻撃者がアクセスを提供することができます。選択したライブラリやフレームワークを使用した場合も、必ずあなたがそれらの既知の脆弱性や欠陥だけでなく、利用可能な機能の完全な理解があることを確認してください。

脆弱性評価

盲目的に彼らのプログラムは「難攻不落」だった、タイムリーな評価を得ることができ、様々な抜け穴の遺産を確保するために、静的コードやダイナミックなランタイムをテストする(ランタイム)を介して、続けてくださいと思うことはありません。唯一の既存の開発環境に統合されたツールをテスト自動化され、あなたはすぐに可能な限り脆弱性を見つけることができます。したがって、あなたは彼があるため、時間の制約のためではなく、ヒューマンエラーのため、いくつかの重要なテストをスキップして、適切なテストを無視しないことを確認することができます。

概要

要約すると、無限ストリームにおけるソフトウェアの脆弱性、明らかに冷酷なことはできません。私たちは、原則とその実装にタイムリーな調整を行い、潜在的な脆弱性や問題点を発見し、解決することが可能な限り、製品のリリース前に可能な限り徹底的なテストを、行うために抜け穴を防ぐための対策を理解することによってそれを行うことができます。私はこの記事では、最も一般的な脆弱性の様々な前述しただけでなく、ソフトウェア開発の実践や方法が推奨されている、とあなたはを利用する攻撃の機会を減らすことができます願っています。

公開された37元の記事 ウォンの賞賛470 ビュー120 000 +

おすすめ

転載: blog.csdn.net/weixin_42784331/article/details/104436144