ソフトウェアセキュリティテスト


ソフトウェア セキュリティは広範かつ複雑なテーマであり、すべての新しいソフトウェアには、既知のパターンのすべてに当てはまらない新たなセキュリティ上の欠陥が存在する可能性があります。セキュリティ上の欠陥により、考えられるすべての種類の攻撃から保護することは現実的ではありません。ソフトウェア セキュリティ テストでは、一連の適切な原則を使用して、安全でないソフトウェアが起動されたり、安全でないソフトウェアが攻撃されたりするのを防ぐことが非常に重要です。

1. ソフトウェアセキュリティテストの基本概念

ソフトウェア セキュリティ テストには、プログラム、ネットワーク、データベースのセキュリティ テストが含まれます。システムセキュリティ指標の違いに応じて、テスト戦略も異なります。

1. ユーザープログラムのセキュリティテストで考慮すべき問題は次のとおりです。

① システム内の異なるユーザー権限を明確に区別します。

② システム内でユーザーの競合が発生するかどうか。

③ ユーザー権限の変更によりシステムに混乱が生じないか。

④ ユーザーのログインパスワードが可視かつ再現可能かどうか。

⑤ 絶対的な方法でシステムにログインできるかどうか(ユーザーがログインした後にリンクをコピーし、直接システムに入る)。

⑥ ユーザーがシステムを終了した後、すべての認証マークが削除されているか、およびパスワードを入力せずに戻るボタンを使用してシステムに入ることができるかどうか。

2. システム ネットワーク セキュリティのテストで考慮すべき問題には、次のものが含まれます。

① 講じられた保護措置が正しく組み立てられているかどうか、および関連するシステム パッチが適用されているかどうかをテストします。

② 不正な攻撃をシミュレートして、保護システムが強力であるかどうかを確認します。

③ 成熟したネットワーク脆弱性検査ツールを使用して、システム関連の脆弱性を検査します。

④ さまざまなトロイの木馬検査ツールを使用して、システムのトロイの木馬の状況を確認します。

⑤ さまざまなアンチチートツールを使用して、システム内のプログラムの各グループのクライアントチートの抜け穴をチェックします。

3. データベースのセキュリティに関する考慮事項:

① システムデータが機密であるかどうか(たとえば、銀行システムの場合、これは特に重要であり、一般的な Web サイトにはそれほど高い要件はありません)。

② システムデータの完全性。

③ システムデータの管理性。

④ システムデータの独立性。

⑤ システムデータのバックアップ・リストア機能(データのバックアップが完了しているか、リストアが可能か、リストアが完了できるか)。

2. ソフトウェアセキュリティテストにおける考慮事項

1. 最も弱い部分を保護する

攻撃者が最も脆弱な領域を悪用しようとすることが多いことは驚くことではないかもしれません。システムのすべての部分に同じ労力を費やしたとしても、システムの最も改善が必要な部分で問題が見つかる可能性が高くなります。この直感は広く適用できるため、セキュリティ テストでは最も弱い部分のテストに重点を置く必要があります。

適切なリスク分析を実行し、最も弱いリンクのセキュリティ テストを実施すれば、システムの最も弱いコンポーネントと思われるコンポーネントを特定し、最も深刻なリスクを排除することが非常に簡単になります。これは、システムの重要な部分です。ソフトウェアのセキュリティテスト。

2. 多層防御能力の有無

多層防御の背後にある考え方は、複数の防御戦略を使用してソフトウェアをテストし、少なくとも 1 つの防御層がハッカーによる完全な侵害を防ぐことです。「最も弱いリンクを保護する」という原則は、コンポーネントに重複しないセキュリティ機能がある場合に適用されます。冗長セキュリティ対策に関しては、提供される全体的な保護は、単一のコンポーネントによって提供される保護よりもはるかに強力であり、多層防御機能のテストはソフトウェア セキュリティ テストが従うべき原則です。

3. 障害を防ぐための対策はありますか?

デジタルの世界にはたくさんの例が現れます。安全でないレガシー ソフトウェアをサポートする必要があるために、問題が発生することがよくあります。たとえば、ソフトウェアの元のバージョンが非常に「単純」で、暗号化をまったく使用していないとします。現在、ソフトウェアはこの問題を解決したいと考えていますが、大規模なユーザーベースを確立しています。さらに、このソフトウェアは、おそらく長期間アップグレードされない多くのサーバーをデプロイしました。新しい、よりスマートなクライアントとサーバーは、新しいプロトコルで更新されていない古いクライアントと相互運用する必要があります。このソフトウェアは年配のユーザーにアップグレードを強制しようとしていますが、いずれにしても本当に迷惑になるほど年配のユーザーがユーザーベースの大部分を占めるとは予想されていません。どうすればよいでしょうか? クライアントとサーバーが相互に受信した最初のメッセージを検査し、そこから何が起こったのかを判断します。古いソフトウェアと「通信」している場合、暗号化は実行されていません。

残念ながら、高度なハッカーがネットワークを通過する際にデータを改ざんすることで、2 つの新しいクライアントにお互いを古いクライアントだと思わせることができます。さらに悪いことに、完全な (双方向の) 下位互換性をサポートしても、依然として問題は解決されません。

この問題に対するより良い解決策は、最初から強制アップグレード スキームを設計し、サーバーがサポートしなくなったことをクライアントに検出させることです。クライアントがパッチを安全に取得できた場合、パッチはアップグレードされます。それ以外の場合は、新しいコピーを手動で取得する必要があることがユーザーに通知されます。ただし、最初からこのソリューションを使用する準備をしておくと、早期採用者は気分を害するでしょう。

講じられた保護対策が適切に組み立てられているかどうか、および関連するシステム パッチが適用されているかどうかをテストすることが非常に重要です。4. 最小特権の原則 最小特権の原則は、操作を実行するために必要な最小限のアクセス権のみを与えることを規定しており、講じられた
  保護対策が適切に組み立てられているか、関連するシステムパッチが適用されているかをテストすることが非常に重要です。

4. 最低限の特権

最小特権の原則では、操作の実行に必要な最小限のアクセスのみが許可され、使用に必要な最小限の時間のみアクセスが許可されるようにします。

ソフトウェアが特定の部分へのアクセスを許可する場合、一般に、そのアクセスに関連付けられた権限を悪用するリスクがあります。たとえば、あなたが休暇に行き、友人に家の鍵を渡して、ペットに餌をあげたり、郵便物を受け取ったりできるようにするとします。あなたはその友人を信頼しているかもしれませんが、その友人があなたの家でパーティーを開いたり、あなたの許可なしにあなたが嫌がることをしたりする可能性は常にあります。

プログラマは、あるデータ オブジェクトにアクセスしたいが、そのオブジェクトからの読み取りのみを行いたい場合があります。ただし、何らかの理由で、プログラマが実際には必要以上の権限を必要とすることがよくあります。通常、プログラマはプログラミングを簡単にしようとします。

最小特権の原則は、ソフトウェアによって設定されたアクセス権構造が「すべてのアクセスまたはまったくアクセスしない」ではない場合に非常に効果的です。

5. 別離

パーティショニングの背後にある基本的な考え方は、システムをできるだけ多くの独立したユニットに分割すれば、システムに与えられる可能性のある損害の量を最小限に抑えることができるということです。

通常、攻撃者がコード内のバッファ オーバーフローを悪用すると、ディスクへの生の書き込みが行われ、カーネルが存在するメモリ内のデータがランダムに変更されます。彼がそうすることを妨げる保護メカニズムはありません。したがって、システムを適度に分離することが非常に重要であり、ソフトウェアは、絶対に消去できないローカル ディスク上のログ ファイルを直接サポートする必要があります。

攻撃者が侵入すると、正確な監査情報を維持できなくなります。

適切に分離すればシステムの管理は容易になりますが、各機能が分離してしまうとシステムの管理が困難になります。

3. セキュリティテストの主な目的は、ソフトウェア自体のプログラム設計における潜在的な安全上の問題を発見し、アプリケーションプログラムの不正侵入を防止する能力をチェックすることです。セキュリティ指標が異なれば、テスト戦略も異なります。同じ原則であれば、ソフトウェアのセキュリティを証明するために、以下の手順に従います。 セキュリティは、ソフトウェア セキュリティ テスト作業仕様の実装およびソフトウェア セキュリティ テスト作業の開発に役立ちます。

セキュリティ テストでは、不法侵入を防ぐシステムの能力をチェックします。セキュリティテスト中、テスターは不法侵入者を装い、さまざまな方法を使って防衛線を突破しようとしました。例えば、①パスワードを傍受または解読しようとする、②カスタムメイドのソフトウェアを使用してシステムの保護機構を破壊する、③意図的にシステム障害を引き起こし、復旧中に不正侵入を試みる、④非機密情報を閲覧して必要な情報を導き出そうとする、などです。データなど。理論的には、十分な時間とリソースがあれば、アクセスできないシステムは存在しません。したがって、システムのセキュリティ設計の原則は、不正侵入のコストが保護される情報の価値を超えるようにすることです。現時点では、不法侵入者には何の利益もありません。

セキュリティテストは、システムに統合された保護メカニズムが実際にシステムを不正な侵入から保護できるかどうかを検証するために使用されます。よく言われるように、「システムのセキュリティは、もちろん、正面からの攻撃に耐えることができなければなりませんが、側面や背後からの攻撃にも耐えることができなければなりません。」

セキュリティ テスト中、テスターはシステムを攻撃しようとする個人の役割を果たします。テスターは、外部手段を通じてシステム パスワードの取得を試みたり、あらゆる防御を打ち破ってシステムを攻撃できるクライアント ソフトウェアを使用したり、他の人がアクセスできないようにシステムを「制圧」したり、システムの回復中にシステムに侵入したりすることができます。非機密データを参照することで、システムに入るキーなどを見つけることができます。

十分な時間とリソースがあれば、適切なセキュリティ テストを行えば、最終的には確実にシステムに侵入できます。システム設計者の仕事は、システムを破壊することで支払われる代償が、システムを破壊した後に得られる情報の価値よりも大きくなるようにシステムを設計することです。

ネットワーク セキュリティ学習リソースの共有:
ゼロベースのエントリ

ネットワーク セキュリティに触れたことのない学生のために、詳細な学習と成長のロードマップを用意しました。これは最も科学的で体系的な学習ルートであると言え、誰もがこの大まかな方向に従うことに問題はありません。


———————————————
著作権表示: この記事は CSDN ブロガー「中年猿人」のオリジナル記事です。CC 4.0 BY-SA 著作権規約に従い、原本を添付してください。ソースリンクとこのステートメント。
元のリンク: https://blog.csdn.net/2301_76161259/article/details/129561319

おすすめ

転載: blog.csdn.net/huzia/article/details/130283233
おすすめ