検索
ホームページ運用・保守安全性C言語の汚染されたメモリ割り当て関数の例の分析

1. 汚染されたメモリ割り当て

C 言語のメモリ割り当て関数には、malloc()kmalloc smalloc があります。 ()xmalloc()realloc()calloc()GlobalAlloc() HeapAlloc () など。例として malloc() を取り上げます。malloc() 関数のプロトタイプは次のとおりです。

extern void*malloc ( unsignedintnum_bytes);

malloc() この関数は、num_bytes バイトのメモリを割り当て、このメモリへのポインタを返します。メモリ割り当て長の整数が汚染されている可能性のある信頼できないソースから取得されたものである場合、外部入力データが効果的に判断されないと、メモリ割り当てが非常に大きくなる可能性があります。汚染されている可能性がある信頼できないソースには、コマンド ライン パラメーター、構成ファイル、ネットワーク通信、データベース、環境変数、レジストリ値、およびアプリケーション外部からのその他の入力が含まれます。

2. 汚染されたメモリ割り当ての害

非常に大きな整数値を渡すなど、メモリ割り当て関数の長さパラメータとして汚染されたデータを直接使用します。プログラムはそれに応じて大量のメモリを割り当て、その結果、システムに膨大なメモリ オーバーヘッドが発生し、さらにはサービス妨害攻撃につながることもあります。

CVE には関連する脆弱性情報もいくつかあります。2018 年 1 月から 2019 年 3 月までに、CVE には関連する脆弱性情報が 4 件ありました。脆弱性情報は次のとおりです。

##CVE概要CVE-2018-6869ZZIPlib バージョン 0.13.68 の zzip/zip.c ファイルの「__zzip_parse_root_directory」関数にセキュリティ上の脆弱性があります。リモートの攻撃者がこの脆弱性を悪用し、特別に細工された zip ファイルを使用してサービス妨害 (制御されないメモリ割り当てとクラッシュ) を引き起こす可能性があります。 CVE-2018-5783PoDoFo の Base/PdfVecObjects.h ファイルの「PoDoFo::PdfVecObjects::Reserve」関数にセキュリティ上の脆弱性があります。 0.9.5バージョン。リモートの攻撃者がこの脆弱性を悪用し、特別に細工された PDF ファイルを使用してサービス妨害 (制御されないメモリ割り当て) を引き起こす可能性があります。 CVE-2018-5296PoDoFo バージョン 0.9 の Base/PdfParser.cpp ファイルの「PdfParser::ReadXRefSubsection」関数にセキュリティ上の脆弱性があります。 5. この脆弱性は、プログラムがメモリの割り当てを制御しないという事実に起因します。リモートの攻撃者がこの脆弱性を悪用し、特別に細工された PDF ファイルを使用してサービス妨害を引き起こす可能性があります。


3. サンプル コード

このセクションで使用される例は、CWE-789: Uncontrolled Memory Allocation (http://cwe.mitre.org/data/) を参照しています。 Definitions/789 .html) を参照し、例の GetUntrustedInt() 関数を定義します。

3.1 欠陥コード

C言語の汚染されたメモリ割り当て関数の例の分析

上記のコード例では、9 行目で malloc() が使用されています。この関数は長さ totBytes バイトのメモリ割り当てを実行します。パスをトレースするとわかるように、totBytessize*sizeof(char); によって計算されます。 6 行目 結果が割り当てられます。size の値は、7 行目の scanf() 関数を使用して取得されたユーザー キーボード入力です。これは汚染されたデータ ソースであり、結果として次のようになります。メモリ割り当ての長さ totBytes が汚染されており、「汚染されたメモリ割り当て」問題が発生しています。

360 コード ガードを使用して上記のサンプル コードを検出すると、「汚染されたメモリ割り当て」の欠陥を検出でき、表示レベルが高くなります。図 1 に示すように:


C言語の汚染されたメモリ割り当て関数の例の分析

図 1: 汚染されたメモリ割り当ての検出例

3.2 修復コード

C言語の汚染されたメモリ割り当て関数の例の分析

上記の修復コードでは、totBytes のソースは汚染されたデータですが、10 行目では totBytes が修正されていません。実質的に制限されるため、汚染されたメモリ割り当てが回避されます。

360 Code Guard を使用して修復されたコードを検出すると、「汚染されたメモリ割り当て」欠陥がないことがわかります。図 2 に示すように:


C言語の汚染されたメモリ割り当て関数の例の分析

図 2: 修復後の検出結果

4. 汚染されたメモリ割り当てを回避する方法

(1) 汚染されたデータをメモリ割り当て関数の長さパラメータとして直接使用することを避け、それが避けられない場合は、汚染されたデータを効果的に制限する必要があります。

(2) ソースコードの静的解析ツールを使用すると、このような問題を効果的に発見できます。

以上がC言語の汚染されたメモリ割り当て関数の例の分析の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。

WebStorm Mac版

WebStorm Mac版

便利なJavaScript開発ツール

SublimeText3 Linux 新バージョン

SublimeText3 Linux 新バージョン

SublimeText3 Linux 最新バージョン

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。