ホームページ >運用・保守 >安全性 >C++プログラムリリース後の使用による脆弱性解析の実施方法

C++プログラムリリース後の使用による脆弱性解析の実施方法

WBOY
WBOY転載
2023-05-12 17:37:061576ブラウズ

1. 解放後の使用

動的に割り当てられたメモリが解放されると、メモリの内容は不確実であり、再取得されると、メモリ マネージャは、解放されたメモリ ブロックを割り当てるか割り当て解除するかを決定しますが、そのメモリの内容が変更され、予期しないプログラム動作が発生する可能性があります。したがって、メモリが解放されると、メモリへの書き込みや読み取りが行われなくなることが保証されます。

2. リリース後の使用の危険

不適切なメモリ管理によって引き起こされる問題は、C/C プログラムの一般的な脆弱性です。解放後に使用すると、プログラムの異常終了、任意のコードの実行、サービス拒否攻撃など、悪用可能なリスクが生じる可能性があります。 2018 年 1 月から 11 月までに、CVE に関連する脆弱性情報は合計 134 件ありました。脆弱性の一部は次のとおりです。

#CVE脆弱性の概要CVE-2018-1000051 Artifex Mupdf バージョンの fz_keep_key_storable には、サービス拒否やコード実行の問題を引き起こす可能性のある use-after-free の脆弱性が存在します。この脆弱性は、被害者をだまして特別に細工された PDF ファイルを開かせることで悪用される可能性があります。 CVE-2018-17474Google Chrome 70.0.3538.67 より前のバージョンの Blink エンジンの HTMLImportsController に use-after-free の脆弱性があります。リモート攻撃につながる可能性がある 作成者は、特別に構築された HTML ページを通じてヒープ破損の問題を悪用します。 CVE-2018-15924Adobe Acrobat および Reader 2018.011.20063 以前のバージョン、2017.011.30102 以前のバージョン、2015.006.30452 以前のバージョンにリリースが存在します。バージョン 脆弱性のその後の使用。リモートの攻撃者がこの脆弱性を悪用して任意のコードを実行する可能性があります。

3. サンプル コード

この例は、Samate Juliet TestSuite for C/C v1.3 (https:// samate .nist.gov/SARD/testsuite.php)、ソースファイル名: CWE416_Use_After_Free__malloc_free_char_01.c。

3.1 欠陥コード

C++プログラムリリース後の使用による脆弱性解析の実施方法

360 Code Guardを使用して上記サンプルコードを検出すると、「以降の使用」を検出できます。 「リリース」不具合、表示レベルが高いです。図 1 に示すように:

C++プログラムリリース後の使用による脆弱性解析の実施方法

図 1: リリース検出後の使用例

3.2 修復コード

C++プログラムリリース後の使用による脆弱性解析の実施方法

上記の修復コードでは、Samate が指定した修復方法は、メモリ割り当てには 30 行目の malloc() を使用し、解放には 36 行目の free() を使用します。はこのメモリ上で実行されます。

360 Code Guard を使用して修復されたコードを検出すると、「リリース後の使用」の欠陥がないことがわかります。図 2:

C++プログラムリリース後の使用による脆弱性解析の実施方法# 図 2: 修復後の検出結果

4、リリース後の使用を回避する方法

## に示すように ##解放後の使用を避けるためには、以下の点に注意する必要があります:

(1) メモリ解放時には必ずnullポインタを設定してください。複数または複雑なデータ構造を利用する場合、ただし、いくつかの問題はある程度回避できます。

(2) ループ文内でメモリの確保や解放を行う場合は、問題がないか十分に確認する必要があります。

(3) 自動検出にはソース コードの静的分析ツールを使用します。これにより、ソース コード内のリリース後の使用法の問題を効果的に検出できます。

以上がC++プログラムリリース後の使用による脆弱性解析の実施方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はyisu.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。