ソフトウェアアプリケーションの脆弱性制御

コードの欠陥



IT業界は、人類の歴史の中で最も急速に成長している業界であり、ラジオ、テレビ、電話に先行しています。 変化のダイナミズムは、現代の教育システムには、資格のあるIT担当者(プログラマー、建築家、アナリスト)を訓練する時間がないという事実につながります。 そのような専門家の能力に対する要件は、学習する時間よりも速く成長しています。 したがって、この市場では常に人員が不足しており、その結果、ITチームの作業の結果に欠陥があることがよくあります。 今日、最も有名なメーカーのソフトウェア製品でさえ不完全であることが多いことは驚くことではありません。 私たちはそれを当たり前のことと考え、開発者が私たちに提供するソフトウェアを使って作業します。 また、他のIT専門家と同様に、不利益を減らすために最善を尽くしています。



上級管理職の仕事は、チームを選択するだけでなく、予算に収まる能力です。 多くの場合、彼らは非の打ちどころのない資格を持つ専門家を雇うことを許可しません。 このような状況では、実行者の平均レベルの能力でさえ、市場で同様の指標を超える結果を得ることができるような実装のための作業条件とプロセスを作成する必要があります。 したがって、競争上の優位性が達成されます。



ソフトウェアにはどのような欠陥が存在し、それらはすべて同じですか? この質問にはさまざまな方法で答えることができ、分類のさまざまな理論を構築できます。 ここでは、情報セキュリティ要件に従ってソフトウェア品質を改善するプロセスにおける管理の違いの観点から、ソフトウェアの欠陥をクラスに分類します。



最も一般的な欠陥は、コード開発時のプログラマーのエラーです。 多くの場合、それらの外観の理由は、作業中の時間の不足または注意の喪失です。 たとえば、プログラマーは、特定の条件下でいくつかのアクションを実行しなければならないコードを開発し、他のすべての場合では他のアクションを実行します。 プログラマーは、ソフトウェア実行の90%のケースで実行されるコードの開発に多大な注意を払っています。 代替手段の処理に関しては、疲れ、注意が散漫になり、特定のコードフラグメントの実行を決定するオペレーターなどのいくつかの重要な側面は、メインフラグメントが満たされる条件が失われた場合にのみ失われます。



プログラムコードのエラーの別の特徴的な原因は、変更の導入です。 開発者は、プログラムの別の部分の機能に影響を与える可能性があるコードの一部を変更します。 その後、変換が想定されていなかったその機能が変更されます。



通常、このようなエラーは、テスト段階で開発者自身または特別なテスターグループによって検出されます。 このようなエラーを検出するために、技術仕様、回帰テスト、および高品質のソースデータのセットを記述してプログラム実行シナリオの大部分を検証できるその他の方法のテストセットを開発するさまざまな理論と成功したプラクティスがあります。



開発者よりも情報セキュリティの専門家に関心があるその他の欠陥は脆弱性です。 脆弱性-ソフトウェアアプリケーションの管理への不正アクセスを得るために悪意のあるユーザーによって悪用される可能性のある開発者の間違い。 脆弱性とは、必要な機能に関して正しいアクションを実行するコードのことですが、その実行には副作用があり、その存在は多くの場合プログラマーにはわかりません。 このようなコードの断片の存在は、エラーの場合のように、疲労、不注意、または開発者によるテストのための十分な時間の不足の結果ではありません。 多くの場合、脆弱性の原因は、意図した機能を実装するために使用する言語構成体の副次的な機能に関するプログラマの無知です。



脆弱性は、コード分析の分野の専門家によって識別されます。専門家は、さまざまな言語構造に副作用が存在することを認識しています。 また、特別な侵入テストで情報セキュリティ要件のソフトウェアをテストした結果、多くの脆弱性が検出されます。 ただし、それらを検出するより効果的な方法は、専門家が特別なツールを使用して実行する半自動静的コード分析です。



検出機能の点で最も不快な欠陥は、宣言されていないソフトウェア機能(NDV)です。 宣言されていない機能は、機能と情報セキュリティの両方の点で正しいコードであるため、自動化された方法を使用して検出することは困難です。 ただし、このコードは、顧客が意図していない機能を実装しています-開発者が自分の目的で導入したものです。 通常、NDVはブックマークと秘密の入り口(裏口)に分かれています。



ブックマークは、特定の条件が発生したときに実行され、開発者が考えたアクションを実行する機能です。 多くの場合、ブックマークはソフトウェアを暗黙的に操作するために使用されます。 最も有名なブックマークのケースの1つは、City Bank開発者の話です。 プログラマーは、顧客の預金の利息を計算する際に算術演算の結果を切り上げるときに生じる違いをどう処理するかを知りませんでしたし、自分の口座に蓄積するよりも良いものを思いつきませんでした。



シークレットエントリは、プログラマが技術的なタスクで指定されたルールをバイパスしてソフトウェアを制御できるようにするコードです。 多くの場合、秘密の入力には、顧客によるソフトウェアアプリケーションの操作中にエラーのリモート診断を実行できるようにするために開発されたソフトウェアが格納されています。



宣言されていない機能は、そのようなコードが正しいため、自動的に完全に検出することはできません。 情報セキュリティの分野の専門家は、手動コード分析またはソフトウェアツールを使用して、NDVの構築に特徴的なソースコード内の言語構造のパターンを検出することにより、このような欠陥を見つけます。



プログラムコードの欠陥はどこから来ますか?



通常、プログラムコードのエラーと脆弱性は、テクノロジが変化しているという事実だけでなく、開発者がそれらに適応する時間がないだけでなく、ソフトウェア開発プロセスの不正確な構築が原因で発生します。



多くの場合、ソフトウェア要件はITチームが管理するよりも速く変更されます。 1つの技術的なタスクが与えられ、それは建築家、デザイナーによって解決され、仕事に移されます。 しかし、その過程で、開発の顧客は理解しています。新しい市場の状況により、開発中のソフトウェアが他の機能を実行する必要があります。 ITチームの反対にもかかわらず、よく開発されたアーキテクチャを壊しながら、設計ドキュメントに変更が加えられ、多くの場合、コードに直接加えられます。



エラーと脆弱性の別の原因は、現代のIT業界で使用されている技術の複雑さです。



開発者は、自身がエラーや脆弱性を含んでいる可能性のあるテクノロジーを使用することを余儀なくされ、開発されたソフトウェアへの誤った実装の結果として新しいものの出現に貢献します。 現代のソフトウェア製品は多言語、クロスプラットフォームであり、それらを構成するコンポーネント間の接続は非常に広範囲であるため、プログラマーは自分の注目分野のすべての機能を維持できません。 さらに、ソフトウェアシステムは専門家のチームによって開発されているため、多くの場合、エラーと脆弱性は、さまざまな人々が責任を負うコンポーネントの接合部に隠れています。



コード内の宣言されていない機能の外観は、本質的に純粋に個人的なものであり、最新のソフトウェア開発テクノロジーの導入を通じて制御することは困難です。 クロスモニタリング開発のプラクティス(コードがメイン開発ブランチに入る前に、別のプログラマーがコードをチェックする必要があります)および他の組織的な手段はある程度成功します。 宣言されていない機能は、注文に応じて開発されたコードで検出できます。NDVが特別に導入された場所では、分析によってのみ可能です。



プログラムコードの欠陥の存在を制御することは可能ですか?



現在、ロシアの企業で運用されているすべてのソフトウェアは、カテゴリに分類できます。



独立して開発されたソフトウェアの欠陥。Microsoftが開発した信頼性のあるソフトウェア(Security Development Lifecycle、SDL)の開発を実装することにより、削減および制御することをお勧めします。 アプリケーションの必要条件の1つは、開発サイクルでのコード分析ツールの可用性です。 そのため、開発段階では、プログラマは静的コード分析用のツールを使用する必要があります。これにより、コードを記述しながら脆弱性を直接検出できます。 テスト段階では、回帰テストとランダムデータのテストに加えて、侵入テストを使用してソフトウェア製品をチェックできる動的コード分析用のツールを使用することをお勧めします。



現在、市場には、静的(「ホワイトボックス」メソッドを使用したソースコードを使用)および動的(「ブラックボックス」メソッドを使用したソースコードなし)の両方のコード分析用の機器システムがいくつかあります。 さらに、HPやIBMなどのメーカーの主要なコード分析ツールは、静的分析と動的分析を組み合わせて提供するため、動的分析の結果をソースコードにマッピングできます。 現在、HP Fortifyツールは、便利なインターフェイスと脆弱性検索ルールの優れたライブラリと組み合わせて、静的分析、動的分析、ハイブリッド分析を提供する最も効果的なコード分析ツールです。



ソフトウェアが注文に応じて開発されている場合は、受け入れ時に欠陥がないか確認する必要があります。 これは、機能と情報セキュリティ要件の観点からソフトウェア製品の品質を管理するために、内部チームが行うことができます。 検証は、独立した専門家の関与を伴うサードパーティにすることもできます。



欠陥の存在に関する情報はチェックに長い道のりを行くので、注文に応じて配信されるソフトウェアの脆弱性を制御することは困難です。 ただし、これは、そのようなソフトウェアをチェックする必要がないことを意味するものではなく、「Pig in A Poke」として悪用される必要があることを意味します。 境界セキュリティを適切に構成して、脆弱性監視を実行することをお勧めします。



ビジネスを成功させる鍵は、問題の効果的な解決策ではなく、問題の発生を防ぐことです。 積極的な管理は長い間世界を征服し、その有効性を理論だけでなく実際にも証明しています。 これらの原則に従って、情報セキュリティ要件についてソフトウェア製品を分析するための幅広いサービスを提供します。

  • NDVの検出;
  • 脆弱性の検出;
  • 特定された脆弱性を排除するための推奨事項の開発。
  • 開発者が特定された脆弱性を排除する一方で、保護のための推奨事項の開発。
  • 安全なコード(SDL)の完全な開発サイクルを構築します。


企業が運営するソフトウェアのプロアクティブな脆弱性管理は、サービング機能を実行するだけでなく、その競争上の優位性であると同時に、成功の秘secretです。



記事の著者: エカテリーナトロシナ



All Articles