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.
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 及之前版本中存在释放后使用漏洞。远程攻击者可利用该漏洞执行任意代码。 |
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.
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:
Rajah 1: Gunakan selepas contoh pengesanan pelepasan
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:
Rajah 2: Hasil pengesanan selepas pembaikan
(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!