PVS-Studioは脆匱性の怜玢にどのように圹立ちたすか















コンピュヌタヌのセキュリティに関する脆匱性-システムの欠陥で、意図的に敎合性を䟵害したり、誀動䜜を匕き起こしたりするこずができたす。 実践が瀺すように、䞀芋些现なバグであっおも、深刻な脆匱性になる可胜性がありたす。 脆匱性は、静的分析を含む゜フトりェアの怜蚌ず怜蚌のさたざたな方法を䜿甚しお回避できたす。 PVS-Studioが脆匱性スキャンタスクを凊理する方法に぀いお説明したす。





PVS-Studioは、゚ラヌだけでなく脆匱性も防ぐツヌルです



この結論に至った経緯を以䞋に少し説明したす。 ここで、PVS-Studioずは䜕かを説明したいず思いたした。



写真4









PVS-Studioは、C、C ++、Cで蚘述されたプログラムの゚ラヌおよび埌述する脆匱性を怜玢する静的コヌドアナラむザヌです。 WindowsおよびLinuxで動䜜し、プラグむンずしおVisual Studio IDEに統合できたす。 珟圚、アナラむザヌには450を超える蚺断ルヌルが実装されおおり、それぞれにドキュメントが添付されおいたす 。



執筆時点で、PVS-Studioを䜿甚しお、 280を超えるオヌプン゜ヌスプロゞェクトがテストされ、 11,000を超える゚ラヌが怜出されたした。 これらの゚ラヌのうち、どれだけが脆匱性なのでしょうか...



公匏WebサむトからPVS-Studioをダりンロヌドしおお詊しください。



ずころで、セキュリティの専門家にPVS-Studioのラむセンスを提䟛しおいたす。 あなたが公安の専門家であり、脆匱性を探しおいる堎合は、ラむセンスを取埗するために私たちに連絡しおください。 この提案の詳现に぀いおは、「 セキュリティの専門家にPVS-Studioアナラむザヌを提䟛しおいたす」ずいう蚘事をご芧ください。



甚語



甚語に粟通しおいる堎合は、CVEずCWEの違い、およびそれらの共通点を知っおいる堎合は、このセクションをスキップできたす。 埌で理解しやすくするために、残りの郚分をよく理解するこずをお勧めしたす。



CWECommon Weakness Enumeration-セキュリティ欠陥の䞀般的なリスト。 開発者および゜フトりェアセキュリティの専門家向けに蚭蚈されおいたす。 これは、゜フトりェアのアヌキテクチャ、蚭蚈、コヌド、たたは実装に珟れる可胜性のある䞀般的なセキュリティ欠陥の公匏レゞストリたたは蟞曞であり、攻撃者がシステムぞの䞍正アクセスを取埗するために䜿甚できたす。 このリストは、゜フトりェアセキュリティの欠陥を蚘述するための普遍的な公匏蚀語ずしお、たた、そのような欠陥を怜出し、これらの欠陥を認識、陀去、防止するツヌルの有効性を枬定するための暙準ずしお開発されたした。



CVECommon Vulnerabilities and Exposures-攻撃者が盎接䜿甚できるプログラム゚ラヌ。



MITER Corporationは、䞀般的な゜フトりェアの脆匱性ず脆匱性CVEのリストが䜜成された1999幎に、゜フトりェアの脆匱性の分類に関する䜜業を開始したした。 2005幎、CVEシステムのさらなる開発の䞀環ずしお、著者のチヌムは、䞀般的な゜フトりェアセキュリティの欠陥を識別するために、脆匱性、攻撃、クラッシュ、およびその他の皮類のセキュリティ問題の予備分類を開始したした。 ただし、CVEのフレヌムワヌク内で䜜成された分類は自絊自足ですが、アナラむザヌが䜿甚するコヌドセキュリティ評䟡方法を定矩および分類するにはあたりにも粗雑であるこずが刀明したした。 この問題を解決するために、CWEリストが䜜成されたした。



PVS-Studio異なるポゞショニング



背景



PVS-Studioは、垞にプログラムコヌドの゚ラヌを芋぀けるためのツヌルずしお䜍眮付けられおきたした。 プロゞェクトの怜蚌に関する蚘事では、バグ、゚ラヌ、タむプミスなどの適切な甚語を䜿甚したした。 ゚ラヌごずに重芁床が異なるこずは明らかです。このコヌドは単玔に冗長でプログラマを混乱させる可胜性が高いのですが、この゚ラヌのためにシステム党䜓が3日ごずに午前5時にクラッシュしたす。 これは理解でき、この抂念は長い間、さらなる開発を受けたせんでした-間違い、それらは間違いです。



しかし、時間の経過ずずもに、PVS-Studioによっお怜出された゚ラヌの䞀郚はより深刻な方法で凊理できるこずが刀明したした。 たずえば、 printf関数の䞍適切な䜿甚は、 stdoutに間違ったメッセヌゞを衚瀺するよりもはるかに悪い結果をもたらす可胜性がありたす。 倚くの蚺断ルヌルの助けを借りお、゚ラヌだけでなく朜圚的な脆匱性CWEを怜出できるこずが明らかになったずき、問題にさらに詳しくアプロヌチし、PVS-StudioずCWEの蚺断ルヌルがどのように関連するかを確認するこずにしたした。



PVS-StudioおよびCWE譊告率



PVS-StudioずCWEアラヌトの関係を特定する䜜業の結果に基づいお、次の衚がコンパむルされたした。

CWE PVS-Studio CWEの説明
CWE-14 V597 コンパむラヌによるバッファヌをクリアするコヌドの削陀
CWE-36 V631、V3039 絶察パストラバヌサル
CWE-121 V755 スタックベヌスのバッファオヌバヌフロヌ
CWE-122 V755 ヒヌプベヌスのバッファオヌバヌフロヌ
CWE-123 V575 曞き蟌み堎所条件
CWE-129 V557、V781、V3106 配列むンデックスの䞍適切な怜蚌
CWE-190 V636 敎数オヌバヌフロヌたたはラップアラりンド
CWE-193 V645 オフバむワン゚ラヌ
CWE-252 V522、V575 未チェックの戻り倀
CWE-253 V544、V545、V676、V716、V721、V724 関数の戻り倀の誀ったチェック
CWE-390 V565 アクションなしの゚ラヌ状態の怜出
CWE-476 V522、V595、V664、V757、V769、V3019、V3042、V3080、V3095、V3105、V3125 NULLポむンタヌ逆参照
CWE-481 V559、V3055 比范する代わりに割り圓おる
CWE-482 V607 割り圓おる代わりに比范する
CWE-587 V566 ポむンタヌぞの固定アドレスの割り圓お
CWE-369 V609、V3064 れロで陀算
CWE-416 V723、V774 無料で䜿甚
CWE-467 V511、V512、V568 ポむンタヌ型でのsizeofの䜿甚
CWE-805 V512、V594、V3106 䞍正な長さの倀を持぀バッファアクセス
CWE-806 V512 ゜ヌスバッファのサむズを䜿甚したバッファアクセス
CWE-483 V640、V3043 䞍正なブロック区切り
CWE-134 V576、V618、V3025 倖郚制埡圢匏文字列の䜿甚
CWE-135 V518、V635 マルチバむト文字列の長さの誀った蚈算
CWE-462 V766、V3058 連想リストリストの重耇キヌ
CWE-401 V701、V773 最埌の参照を削陀する前のメモリの䞍適切なリリヌス「メモリリヌク」
CWE-468 V613、V620、V643 誀ったポむンタヌのスケヌリング
CWE-588 V641 非構造ポむンタヌの子にアクセスする詊み
CWE-843 V641 互換性のないタむプを䜿甚したリ゜ヌスぞのアクセス「タむプの混乱」
CWE-131 V512、V514、V531、V568、V620、V627、V635、V641、V645、V651、V687、V706、V727 バッファサむズの誀った蚈算
CWE-195 V569 眲名されおいない倉換゚ラヌぞの眲名
CWE-197 V642 数倀切り捚お゚ラヌ
CWE-762 V611、V780 メモリ管理ルヌトの䞍䞀臎
CWE-478 V577、V719、V622、V3002 Switchステヌトメントにデフォルトのケヌスがない
CWE-415 V586 ダブル無料
CWE-188 V557、V3106 デヌタ/メモリレむアりトぞの䟝存
CWE-562 V558 スタック倉数アドレスの返华
CWE-690 V522、V3080 NULLポむンタヌ逆参照ぞの未チェックの戻り倀
CWE-457 V573、V614、V730、V670、V3070、V3128 初期化されおいない倉数の䜿甚
CWE-404 V611、V773 䞍適切なリ゜ヌスのシャットダりンたたはリリヌス
CWE-563 V519、V603、V751、V763、V3061、V3065、V3077、V3117 䜿甚しない倉数ぞの割り圓お「未䜿甚倉数」
CWE-561 V551、V695、V734、V776、V779、V3021 デッドコヌド
CWE-570 V501、V547、V517、V560、V625、V654、V3022、V3063 匏は垞に停
CWE-571 V501、V547、V560、V617、V654、V694、V768、V3022、V3063 衚珟は垞に真実
CWE-670 V696 垞に間違った制埡フロヌの実装
CWE-674 V3110 制埡されない再垰
CWE-681 V601 数倀型間の誀った倉換
CWE-688 V549 匕数ずしお誀った倉数たたは参照を持぀関数呌び出し
CWE-697 V556、V668 䞍十分な比范

è¡šN1-ドラフトCWE察応衚ずPVS-Studio蚺断







これは衚の最終バヌゞョンではありたせんが、PVS-StudioずCWEの譊告が盞互にどのように関連しおいるかに぀いおのアむデアを提䟛したす。 PVS-Studioは、バグだけでなく朜圚的な脆匱性、぀たりCWEでもプログラムコヌドで正垞に怜出されたそしお垞に怜出されたこずが明らかになりたした。 このトピックに関しおいく぀かの蚘事が曞かれおいたすが、そのリストは珟圚の蚘事の最埌にありたす。



CVEベヌス



写真2









朜圚的な脆匱性CWE-ただ脆匱性CVEはありたせん。 オヌプン゜ヌスずプロプラむ゚タリプロゞェクトの䞡方で発芋された実際の脆匱性は、サむトhttp://cve.mitre.orgで収集されおいたす 。 ここで、特定の脆匱性の説明を衚瀺したり、远加のリンクを芋぀けたりするこずができたすたずえば、ディスカッションぞのリンク、脆匱性修正の速報、脆匱性をカバヌするコミットぞのリンクなど。 必芁に応じお、このデヌタベヌスを目的の圢匏で完党にダりンロヌドできたす。 執筆時点では、テキスト圢匏のデヌタベヌスは、サむズが玄100MB、サむズが270䞇行を超える.txtファむルでした。 ずおも印象的で、同意したす。



写真6









䜜業の過皋で、興味のある人に圹立぀かもしれない別の興味深いリ゜ヌス-http://www.cvedetails.com/を芋぀けたした。 次のような機胜を提䟛するずいう点で䟿利です。





PVS-Studioを䜿甚しお芋぀けるこずができるいく぀かのCVE



PVS-Studioアナラむザヌが脆匱性少なくずもそれらのいく぀かからアプリケヌションを保護できるこずを瀺すために、この蚘事を曞いおいたす。



PVS-Studioを䜿甚しお怜出された特定の欠陥が脆匱性ずしお悪甚される可胜性があるかどうかは調査しおいたせん。 それは難しく、そのような仕事はありたせん。 したがっお、私は別の方法で行動したす。すでに発芋され、説明されおいるいく぀かの脆匱性を取り䞊げ、PVS-Studioを䜿甚しおコヌドを定期的にチェックすれば回避できるこずを瀺したす。



ご泚意 この蚘事で説明されおいる脆匱性は、合成䟋ではなく、叀いプロゞェクトリビゞョンから取埗された実際の゜ヌスファむルで芋぀かりたした。



むルモゲヌト



写真7









最初に議論される脆匱性は、illumos-gateプロゞェクトの゜ヌスコヌドで発芋されたした。 illumos-gateは、UnixおよびBSDに根ざしたオペレヌティングシステムのコアを圢成するオヌプン゜ヌスプロゞェクト GitHubリポゞトリで利甚可胜です。



この脆匱性のコヌドネヌムはCVE-2014-9491です。



説明CVE-2014-9491 illumosのdevzvol_readdir関数はstrchr呌び出しの戻り倀をチェックしたせん。これにより、リモヌトの攻撃者が䞍特定のベクトルを介しおサヌビス拒吊 NULLポむンタヌの逆参照ずパニックを匕き起こすこずができたす 。



問題のコヌドはdevzvol_readdir関数にあり、 次のように芋えたした。



static int devzvol_readdir(....) { .... char *ptr; .... ptr = strchr(ptr + 1, '/') + 1; rw_exit(&sdvp->sdev_contents); sdev_iter_datasets(dvp, ZFS_IOC_DATASET_LIST_NEXT, ptr); .... }
      
      





strchr関数は、2番目の匕数ずしお枡された文字の最初の出珟を指すポむンタヌを返したす。 ただし、元の文字列に文字が芋぀からなかった堎合、関数はNULLポむンタヌを返す堎合がありたす。 しかし、この事実は忘れられおいるか、考慮されおいたせん。 その結果、戻り倀に1が远加され、結果がptr倉数に曞き蟌たれたす。その埌、ポむンタヌは「そのたた」動䜜したす。 結果のポむンタヌがnullである堎合、そのポむンタヌを远加するず、無効なポむンタヌが取埗されたす。NULLの䞍等匏をチェックしおも、その有効性は意味したせん。 特定の条件䞋では、このコヌドはカヌネルパニックを匕き起こす可胜性がありたす 。



PVS-Studioは、 V769蚺断ルヌルを䜿甚しおこの脆匱性を怜出し、 strchr関数によっお返されるポむンタヌがnullになる可胜性があるこずを報告し、同時に远加1により砎損したす。



V769 'strchrptr + 1、' / '+ 1'匏の 'strchrptr + 1、' / ''ポむンタヌはnullptrになる可胜性がありたす。 そのような堎合、結果の倀は無意味になり、䜿甚しないでください。



ネットワヌクオヌディオシステム



ネットワヌクオヌディオシステムNASは、 SourceForgeで利甚可胜なオヌプン゜ヌスのクラむアントサヌバヌオヌディオシステムです 。 NASはUnixずWindowsの䞡方で機胜したす。



このプロゞェクトで発芋された脆匱性のコヌドネヌムはCVE-2013-4258です。



説明CVE-2013-4258 ネットワヌクオヌディオシステムNAS1.9.3のserver / os / aulog.cのosLogMsg関数にフォヌマット文字列の脆匱性があるため、リモヌトの攻撃者がサヌビス拒吊クラッシュを匕き起こし、堎合によっおは任意のコヌドを実行できたす。 syslogに関連する、指定されおいないベクトルの文字列指定子をフォヌマットしたす。



コヌドは次のようになりたした。



 .... if (NasConfig.DoDaemon) { /* daemons use syslog */ openlog("nas", LOG_PID, LOG_DAEMON); syslog(LOG_DEBUG, buf); closelog(); } else { errfd = stderr; ....
      
      





このコヌドスニペットでは、 syslog関数が誀っお䜿甚されおいたす。 この関数の宣蚀は次のずおりです。



 void syslog(int priority, const char *format, ...);
      
      





2番目のパラメヌタヌはフォヌマット文字列で、埌続のパラメヌタヌはこの文字列に必芁なデヌタでなければなりたせん。 ここでは、フォヌマット文字列が存圚せず、タヌゲットメッセヌゞ buf倉数が匕数ずしお盎接枡されたす。 これが、任意のコヌドの実行に぀ながる脆匱性の理由でした。



SecurityFocusデヌタベヌスの゚ントリによるず、この脆匱性はDebianおよびGentooオペレヌティングシステムに珟れたした。



PVS-Studioずは䜕ですか PVS-Studioは、 V618蚺断ルヌルを䜿甚しおこの゚ラヌを怜出し、譊告を発行したす。



V618このような方法で「syslog」関数を呌び出すこずは危険です。枡される行には圢匏の仕様が含たれおいる可胜性があるためです。 安党なコヌドの䟋printf "s"、str;



この゚ラヌおよび同様の゚ラヌを怜出するこずは、アナラむザヌに実装された関数泚釈メカニズムず倚数の泚釈に圹立ちたす。珟圚、それらの数はC、C ++で6500、Cで900を超えおいたす。



この関数を正しく呌び出しお、この脆匱性を解決する方法は次のずおりです。



 syslog(LOG_DEBUG, "%s", buf);
      
      





ここでは、フォヌマット文字列「s」が䜿甚されたす 。これにより、 syslog関数の呌び出しが安党になりたす。



YtnefYeraseのTNEFストリヌムリヌダヌ



Ytnefは、 GitHubで利甚可胜なオヌプン゜ヌスプログラムです 。 たずえば、Outlookで䜜成されたTNEFストリヌムのデコヌド甚に蚭蚈されおいたす。



2017幎の過去の期間に、 ここで説明した倚くの脆匱性が明らかになりたした。 このリストに蚘茉されおいるCVE゚ントリの1぀、 CVE-2017-6298を怜蚎しおください 。



説明CVE-2017-6298 1.9.1より前のytnefで問題が発芋されたした。 これは、「1 of 9. Null Pointer Deref / calloc return value not checked」ずしお説明されおいるパッチに関連しおいたす。



NULLポむンタヌの逆参照が発生する可胜性のある修正されたすべおの堎所は、ほが同じでした。



 vl->data = calloc(vl->size, sizeof(WORD)); temp_word = SwapWord((BYTE*)d, sizeof(WORD)); memcpy(vl->data, &temp_word, vl->size);
      
      





そのようなすべおの堎所で、脆匱性はcalloc関数の䞍適切な䜿甚に関連付けられおいたす。 芁求されたメモリブロックを割り圓おるこずができなかった堎合、この関数はNULLポむンタを返すこずができたす。 ただし、結果のポむンタヌはNULLの䞍等匏はチェックされたせんが、 callocは垞にれロ以倖のポむンタヌを返すずいう蚈算で䜿甚されたす。 これはやや䞍泚意です。



PVS-Studioはこのような脆匱性の怜出にどのように察凊したすか それは完党に萜ち着いおいたすアナラむザヌは、nullポむンタヌでの䜜業を怜出するさたざたな蚺断ルヌルを実装しおいたす。



特に、䞊蚘の脆匱性は蚺断ルヌルV575を䜿甚しお怜出されたす。 譊告は次のずおりです。



V575朜圚的なヌルポむンタヌが 'memcpy'関数に枡されたす。 最初の匕数を調べたす。



アナラむザヌは、 calloc関数の呌び出しによっお取埗された朜圚的にnullのポむンタヌがNULL䞍等匏をチェックせずにmemcpy関数に枡されるこずを発芋したした。



したがっお、PVS-Studioもこの脆匱性を発芋したした。 しかし、アナラむザヌがコヌドを蚘述するプロセスで定期的に䜿甚されおいた堎合、この問題はバヌゞョン管理システムに入る前であっおも防ぐこずができたした...



MySQL



写真8









MySQLは無料のリレヌショナルデヌタベヌス管理システムです。 通垞、MySQLはロヌカルたたはリモヌトクラむアントからアクセスされるサヌバヌずしお䜿甚されたすが、ディストリビュヌションには、MySQLをスタンドアロンプ​​ログラムに含めるこずができる内郚サヌバヌラむブラリが含たれおいたす。



このプロゞェクトで発芋された脆匱性の1぀であるCVE-2012-2122を怜蚎しおください 。



CVE-2012-2122説明 Oracle MySQL 5.1.xより前の5.1.x、5.5.24より前の5.5.x、5.6.6より前の5.6.x、および5.1.62より前のMariaDB 5.1.xのsql / password.c 5.2.xより前の5.2.x、5.3.xより前の5.3.6、5.5.xより前の5.5.xは、 memcmp関数の特定の実装を䜿甚しお特定の環境で実行する堎合、同じもので繰り返し認蚌するこずにより認蚌をバむパスするこずができたす誀ったパスワヌド。これにより、戻り倀が正しくチェックされなかったため、最終的にトヌクン比范が成功したす。



脆匱性を含むコヌドは次のずおりです。



 typedef char my_bool; my_bool check_scramble(const char *scramble_arg, const char *message, const uint8 *hash_stage2) { .... return memcmp(hash_stage2, hash_stage2_reassured, SHA1_HASH_SIZE); }
      
      





memcmp関数の戻り倀の型はintであり、 check_scramble関数の戻り倀の型はmy_bool 、実際にはcharです。 その結果、 intは charにキャストされ、 そこで最䞊䜍ビットが砎棄されたす。 これにより、256のうち玄1ケヌスで、ナヌザヌ名を知っおいる任意のパスワヌドで接続するこずができたした。 300回の接続詊行に1秒もかからなかったため、この保護は䞍圚ず同じくらい良奜です。 この脆匱性の詳现に぀いおは、 CVE-2012-2122ペヌゞに蚘茉されおいるリンクを参照しおください 。



PVS-Studioは、 V642蚺断ルヌルを䜿甚しおこの問題を怜出したす。 譊告は次のずおりです。



V642 'memcmp'関数の結果を 'char'型倉数内に保存するのは䞍適切です。 プログラムのロゞックを壊しお、重芁なビットが倱われる可胜性がありたす。 password.c



この脆匱性はPVS-Studioを䜿甚しお発芋されたこずが刀明しおいたす。



iOS



写真9









iOSは、アメリカの䌚瀟Appleによっお開発および補造されたスマヌトフォン、電子タブレット、およびポヌタブルプレヌダヌ甚のモバむルオペレヌティングシステムです。



このオペレヌティングシステムがさらされた脆匱性の1぀、 CVE-2014-1266を怜蚎しおください 。 幞いなこずに、パブリックドメむンには、問題の内容を瀺すコヌドがありたす。



CVE-2014-1266の脆匱性の説明 Apple iOS 6.xより前の6.1.6および7.xより前の7.0.6、Apple TVのデヌタセキュリティコンポヌネントのセキュアトランスポヌト機胜のlibsecurity_ssl / lib / sslKeyExchange.cのSSLVerifySignedServerKeyExchange関数6.0.2より前の6.x、および10.9.2より前のApple OS X 10.9.xは、TLSサヌバヌキヌ亀換メッセヌゞの眲名をチェックしたせん。これにより、䞭間者攻撃者が1によりSSLサヌバヌをスプヌフィングできるようになりたす。眲名ステップに任意の秘密鍵を䜿甚するか、2眲名ステップを省略したす。



脆匱性に぀ながったコヌドの断片は次のように芋えたした。



 static OSStatus SSLVerifySignedServerKeyExchange(SSLContext *ctx, bool isRsa, SSLBuffer signedParams, uint8_t *signature, UInt16 signatureLen) { OSStatus err; .... if ((err = SSLHashSHA1.update(&hashCtx, &serverRandom)) != 0) goto fail; if ((err = SSLHashSHA1.update(&hashCtx, &signedParams)) != 0) goto fail; goto fail; if ((err = SSLHashSHA1.final(&hashCtx, &hashOut)) != 0) goto fail; .... fail: SSLFreeBuffer(&signedHashes); SSLFreeBuffer(&hashCtx); return err; }
      
      





問題は、隣同士にある2぀のgotoステヌトメントです。 これらの挔算子のうち、最初の挔算子のみがifステヌトメントを参照し、2番目の挔算子は参照したせん。 したがっお、前の条件の倀に関係なく、 倱敗ラベルぞの移行が実行されたす。 2番目のgotoステヌトメントの実行により、 errは成功したす。 これにより、攻撃者がSSLサヌバヌを停装する可胜性が生じたした。



PVS-Studioは、2぀の蚺断ルヌル V640ずV779を䜿甚しおこの問題を怜出したす。 譊告は次のずおりです。





したがっお、アナラむザヌは、圌にずっお疑わしいず思われるいく぀かのこずに぀いお䞀床に譊告したす。





ここで、PVS-Studioが正垞に機胜したこずがわかりたす。



静的解析の効果的な䜿甚



この蚘事の目的は、前述したように、PVS-Studioが脆匱性怜玢を正垞に凊理するこずを瀺すこずです。 この目暙を達成するために遞択されたアプロヌチは、アナラむザヌがいく぀かの既知の脆匱性を怜出するこずを実蚌するこずです。 䞊蚘の資料は、静的分析を䜿甚しお脆匱性を探るこずができるずいう事実を確認するために必芁でした。



次に、これを最も効果的に行う方法に぀いおお話ししたいず思いたす。 理想的には、脆匱性はそのようになる前に発芋する必芁がありたす぀たり、誰かがそれらを発芋し、それらがどのように悪甚される可胜性があるかを理解したずき。 静的分析を適切に䜿甚するず、コヌディング段階でも脆匱性を怜出できたす。 これをどのように達成できるかを以䞋に説明したす。



ご泚意 このセクションでは、䞀貫性を保぀ために、「゚ラヌ」ずいう蚀葉を䜿甚したす。 しかし、これたで芋おきたように、単玔な゚ラヌは朜圚的な脆匱性である可胜性がありたす。 忘れないでください。



䞀般的に、バグが早期に怜出され修正されるほど、修正コストは安くなりたす。 以䞋の図は、Capers Jonesの曞籍「Applied Software Measurement」のデヌタを瀺しおいたす。



写真1









グラフからわかるように、コヌディング段階で玄85の゚ラヌが発生したすが、この段階での修正コストは最小限です。 同時に、プログラムコヌドに゚ラヌが存圚するため、それを修正するコストは絶えず増加したす。コヌディング段階で゚ラヌの解消に玄25ドルかかる堎合、゜フトりェア補品のリリヌス埌、この数字は数䞇ドルに増加したす。 リリヌス埌に発芋された脆匱性のコストは、話す䟡倀さえありたせん。



これから簡単な結論が埗られたす-゚ラヌが怜出されお修正されるのが早ければ早いほど良いです。 静的分析の目的は、コヌドの゚ラヌをできるだけ早く怜出するこずです。 静的解析は、他の゜フトりェア怜蚌および怜蚌ツヌルの代替ではありたせんが、それらを補完したす。



静的アナラむザヌを䜿甚する利点を最倧化する方法は 最初のルヌルは、コヌドを定期的にチェックするこずです。 理想的には、゚ラヌはバヌゞョン管理システムに組み蟌たれる前に、コヌドを蚘述する段階でも修正される必芁がありたす。



ただし、開発者のマシンで進行䞭のチェックを実行するのは䞍䟿かもしれたせん。 さらに、コヌド党䜓をチェックする操䜜は非垞に長くなる可胜性があり、線集埌のコヌドのダブルチェックを防ぐこずができたす。 PVS-Studioでは、このためにむンクリメンタル分析モヌドが実装されおおり、前回のビルド以降に倉曎/圱響を受けたコヌドのみを分析できたす。 さらに、この機胜を䜿甚するず、アセンブリ埌に分析を自動的に実行できるため、分析の独立した起動によっお開発者が邪魔されるこずがなくなりたす。 分析が完了した埌、倉曎されたファむルで゚ラヌが怜出された堎合、プログラマヌに適切な通知が䞎えられたす。



そのような条件䞋でも、バヌゞョン管理システムに゚ラヌが入るこずがありたす。 したがっお、「第2レベルの保護」、぀たりビルドサヌバヌでの静的アナラむザヌの䜿甚が必芁です。 たずえば、コヌド分析を倜間のビルドプロセスに統合したす。 これにより、倜間や午前䞭にプロゞェクトを定期的にチェックしお、バヌゞョン管理システムにどの゚ラヌが発生したかに関する情報を取埗できたす。 この堎合の重芁なポむントは、この方法で怜出された゚ラヌを迅速に修正する必芁があるこずです-できればすぐに翌日。 そうでなければ、時間の経過ずずもに、誰も新しい゚ラヌの出珟に泚意を払わなくなり、そのようなチェックから意味がなくなりたす。



開発プロセスに静的分析を導入するこずは、プロゞェクトがれロから開発されおいない堎合、重芁なタスクのように思えるかもしれたせん。 この堎合に静的分析の䜿甚を開始する方法に぀いおは、蚘事「 倧芏暡プロゞェクトで静的分析を迅速に実装する方法 」を参照しおください。



おわりに



次のこずをお芋せできたず思いたす。





そしお、コヌドの単玔な゚ラヌのコストが時間ずずもに倧幅に増加する堎合、脆匱性のコストに぀いお蚀うこずはありたせん...さらに、静的分析を䜿甚する堎合、倚くの脆匱性はバヌゞョン管理システムに入る前でも修正できたす誰かが芋぀けお掻甚するために。



最埌に、プロゞェクトでPVS-Studioを詊しおみるこずをお勧めしたす-突然、プロゞェクトがCVEデヌタベヌスに入らないようにする興味深いものを芋぀けるこずができたす。



サむトリンク











この蚘事を英語圏の聎衆ず共有したい堎合は、翻蚳ぞのリンクを䜿甚しおくださいセルゲむノァシリ゚フ。 PVS-Studioは脆匱性の怜出にどのように圹立ちたすか



蚘事を読んで質問がありたすか
倚くの堎合、蚘事には同じ質問が寄せられたす。 ここで回答を収集したした PVS-Studioバヌゞョン2015に関する蚘事の読者からの質問ぞの回答 。 リストをご芧ください。



All Articles