Rumah  >  Artikel  >  Operasi dan penyelenggaraan  >  Bagaimana untuk melaksanakan analisis kelemahan yang disebabkan oleh penggunaan selepas keluaran program C++

Bagaimana untuk melaksanakan analisis kelemahan yang disebabkan oleh penggunaan selepas keluaran program C++

WBOY
WBOYke hadapan
2023-05-12 17:37:061502semak imbas

1. Gunakan selepas keluaran

Apabila memori yang diperuntukkan secara dinamik dilepaskan, kandungan memori tidak pasti dan mungkin kekal utuh dan boleh diakses, kerana apabila ia semula- Ia adalah keputusan pengurus memori untuk memperuntukkan atau mengagihkan blok memori yang dibebaskan, tetapi juga mungkin kandungan memori telah diubah, menyebabkan tingkah laku program yang tidak dijangka. Oleh itu, apabila ingatan dilepaskan, ia dijamin tidak akan ditulis atau dibaca lagi.

2. Bahaya penggunaan selepas bebas

Masalah yang disebabkan oleh pengurusan memori yang tidak betul adalah kelemahan biasa dalam program C/C++. Penggunaan selepas percuma boleh membawa kepada potensi risiko yang boleh dieksploitasi, termasuk penamatan program yang tidak normal, pelaksanaan kod sewenang-wenangnya dan serangan penafian perkhidmatan. Dari Januari hingga November 2018, terdapat sejumlah 134 maklumat kerentanan yang berkaitan dengannya dalam CVE. Beberapa kelemahan adalah seperti berikut:

CVE 漏洞概述
CVE-2018-1000051  Artifex Mupdf 版本的 fz_keep_key_storable 中存在一个释放后使用漏洞,可导致拒绝服务或代码执行问题。通过诱骗受害者打开一个特殊构造的 PDF 文件,该漏洞即可遭利用。
CVE-2018-17474 谷歌 Chrome 浏览器70.0.3538.67 之前版本 Blink 引擎的 HTMLImportsController 中存在一个释放后使用漏洞,很有可能导致远程攻击者通过一个特殊构造的 HTML 页面利用堆损坏问题。
CVE-2018-15924 Adobe Acrobat 和 Reader 2018.011.20063及之前版本、2017.011.30102 及之前版本、2015.006.30452 及之前版本中存在释放后使用漏洞。远程攻击者可利用该漏洞执行任意代码。

3 Kod sampel

Sampel datang daripada Samate Juliet TestSuite untuk C/C++ v1.3 (https: //samate.nist .gov/SARD/testsuite.php), nama fail sumber: CWE416_Use_After_Free__malloc_free_char_01.c.

3.1 Kod Kecacatan

Bagaimana untuk melaksanakan analisis kelemahan yang disebabkan oleh penggunaan selepas keluaran program C++

Gunakan 360 ​​Code Guard untuk mengesan kod sampel di atas, anda boleh mengesan "guna selepas release" defect , tahap paparan adalah tinggi. Seperti yang ditunjukkan dalam Rajah 1:

Bagaimana untuk melaksanakan analisis kelemahan yang disebabkan oleh penggunaan selepas keluaran program C++

Rajah 1: Gunakan selepas contoh pengesanan pelepasan

3.2 Kod pembaikan

Bagaimana untuk melaksanakan analisis kelemahan yang disebabkan oleh penggunaan selepas keluaran program C++

Dalam kod pembaikan di atas, kaedah pembaikan yang diberikan oleh Samate ialah: gunakan malloc() pada baris 30 untuk peruntukan memori, dan gunakan free() pada baris 36 untuk keluaran Selepas keluaran Tiada operasi lain dilakukan pada ingatan ini.

Gunakan 360 ​​Code Guard untuk mengesan kod yang dibaiki, dan anda boleh melihat bahawa tiada kecacatan "penggunaan selepas pelepasan". Seperti yang ditunjukkan dalam Rajah 2:

Bagaimana untuk melaksanakan analisis kelemahan yang disebabkan oleh penggunaan selepas keluaran program C++

Rajah 2: Hasil pengesanan selepas pembaikan

4 Cara mengelak daripada menggunakan

Untuk mengelakkan penggunaan selepas pelepasan, anda perlu memberi perhatian kepada perkara -perkara berikut:

(1) Pastikan untuk menetapkan penunjuk null apabila melepaskan memori ini. menggunakan struktur data berbilang atau kompleks, Tetapi beberapa masalah boleh dielakkan pada tahap tertentu.

(2) Apabila memperuntukkan atau melepaskan memori dalam pernyataan gelung, anda perlu mengesahkan dengan teliti sama ada terdapat masalah.

(3) Gunakan alat analisis statik kod sumber untuk pengesanan automatik, yang boleh menemui isu penggunaan selepas keluaran dalam kod sumber dengan berkesan.

Atas ialah kandungan terperinci Bagaimana untuk melaksanakan analisis kelemahan yang disebabkan oleh penggunaan selepas keluaran program C++. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:yisu.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam