Inhaltsverzeichnis
2. Die Gefahren eines Pufferunterlaufs
3. Beispielcode
3.1 Fehlercode
3.2 修复代码
Heim Betrieb und Instandhaltung Sicherheit Was bedeutet Pufferunterlauf in C/C++-Programmen?

Was bedeutet Pufferunterlauf in C/C++-Programmen?

May 29, 2023 pm 12:22 PM
c语言 c++

1, Pufferunterlauf

In diesem Artikel wird eine andere Pufferüberlaufsituation beschrieben, nämlich der Pufferunterlauf. Der Pufferüberlauf wurde im vorherigen Thema analysiert (siehe Problem 7). Die gleichen Gründe gelten für Pufferunterläufe, daher werden die Faktoren, die zu Pufferüberläufen führen, in diesem Artikel nicht wiederholt. Vereinfacht ausgedrückt bezieht sich Pufferunterlauf auf die Situation, in der der Puffer der nächsten Ebene überschrieben wird, wenn die Fülldaten überlaufen. In diesem Artikel werden die Gefahren eines Pufferunterlaufs, seine Anzeichen im Quellcode und die Behebung des Problems beschrieben.

2. Die Gefahren eines Pufferunterlaufs

In C/C++-Programmen ist Pufferunterlauf eine schwerwiegende Art von Sicherheitslücke, die zu Programmabstürzen oder der Ausführung von Schadcode führen kann. Von Januar bis Oktober 2018 waren insgesamt 494 Informationen zu CVE-Schwachstellen betroffen. Einige der Schwachstellen sind wie folgt:

CVE Schwachstellenübersicht
CVE-2018-1000001 Libc Realpath Buffer Underflow Schwachstelle, die. Schwachstelle Die Stabilität wird durch die GNU-C-Bibliothek verursacht Der vom Systemaufruf getcwd() zurückgegebene relative Pfad wird nicht korrekt verarbeitet. Andere Bibliotheken sind wahrscheinlich ebenfalls davon betroffen. Auf betroffenen Systemen können Root-Rechte über die SUID-Binärdatei erlangt werden.
CVE-2018-1000637 zutils ist ein Dienstprogramm zur komprimierten Dateiverarbeitung. Das Programm unterstützt Komprimierung/Dekomprimierung, Vergleich komprimierter Dateien und Überprüfung der Integrität komprimierter Dateien. zcat ist eines der Dekomprimierungsdienstprogramme. In zcat besteht in Versionen vor Zutils 1.8-pre2 eine Pufferüberlauf-Schwachstelle. Ein Angreifer könnte diese Sicherheitslücke ausnutzen, um einen Denial-of-Service auszulösen oder beliebigen Code mithilfe einer speziell gestalteten komprimierten Datei auszuführen.
CVE-2018-5388 strongSwan 5.6.3 und frühere Versionen weisen eine Pufferunterlauf-Schwachstelle in der Implementierung auf, die ein Angreifer ausnutzen kann, um Ressourcen zu erschöpfen und einen Denial-of-Service auszulösen.

3. Beispielcode

Das Beispiel stammt aus der Samate Juliet Test Suite für C/C++ v1.3 (https://samate.nist.gov/SARD/testsuite.php), Quelldateiname: CWE121_Stack_Based_Buffer_Overflow__CWE193_char_alloca_cpy_01 .c.

3.1 Fehlercode

C/C++ 程序中的缓冲区下溢指的是什么

Im obigen Beispielcode wird dem Zeiger data in Zeile 36 ein Wert zugewiesen. Durch die Zuweisung Operation. Es ist ersichtlich, dass der Zeiger data auf dataBadBuffer zeigt. wenn Zeile 41 strcpy() verwendet. Beim Durchführen einer Speicherkopie ist die Länge des Quellpuffers größer als die Länge des Zielpuffers, was zu einem Überlauf führt. und der Überlaufteil überschreitet die untere Grenze von dataBadBuffer, was zu Pufferunterlaufproblemen führt. data 进行赋值,通过赋值操作可以看出指针 data 指向 dataBadBuffer,当第41行使用 strcpy() 进行内存拷贝时,源缓冲区长度大于目的缓冲区长度从而产生溢出,溢出部分超出了 dataBadBuffer 的下边界,导致缓冲区下溢问题。

使用360代码卫士对上述示例代码进行检测,可以检出“缓冲区下溢”缺陷,显示等级为高。如图1所示:

C/C++ 程序中的缓冲区下溢指的是什么

图1:缓冲区下溢检测示例

3.2 修复代码

C/C++ 程序中的缓冲区下溢指的是什么

在上述修复代码中,Samate 给出的修复方式为:在第37行对指针 data 进行赋值,将 data指向 dataGoodBuffer,此时 data 的长度与 source 一致,当第42行使用 strcpy()

Verwenden Sie 360 ​​​​Code Guard, um den obigen Beispielcode zu erkennen. Sie können den Fehler „Pufferunterlauf“ erkennen und die Anzeigeebene ist hoch. Wie in Abbildung 1 gezeigt:

Pufferunterlauf in C/C++-Programmen Was bewirkt das? bedeuten

C/C++ 程序中的缓冲区下溢指的是什么Abbildung 1: Beispiel für die Pufferunterlauferkennung

3.2 Reparaturcode

Was bedeutet Pufferunterlauf in C/C++-Programmen?

Im obigen Reparaturcode lautet die von Samate angegebene Reparaturmethode: in Zeile 37 des ZeigersDaten für die Zuweisung, verweisen Sie Daten auf dataGoodBuffer, zu diesem Zeitpunkt ist die Länge der <code class="prettyprint code-in-text Prettyprinted">Daten dieselbe wie die der Quelle code> ist konsistent. Wenn Zeile 42 <code class="prettyprint code-in-text Prettyprinted">strcpy() verwendet, um einen Kopiervorgang auszuführen, haben der Quellpuffer und der Zielpuffer die gleiche Länge, wodurch vermieden wird Problem mit Pufferunterlauf behoben. Dieses Problem kann auch durch andere Methoden wie z. B. Grenzüberprüfungen vermieden werden.

Verwenden Sie 360 ​​​​Code Guard, um den reparierten Code zu erkennen, und Sie können sehen, dass der Fehler „Pufferunterlauf“ nicht mehr besteht. Wie in Abbildung 2 dargestellt:

Abbildung 2: Erkennungsergebnisse nach der Reparatur

🎜4. So vermeiden Sie einen Pufferunterlauf🎜🎜🎜Um einen Pufferunterlauf zu vermeiden, müssen Sie auf die folgenden Punkte achten: 🎜🎜🎜 ( 1) Vermeiden Sie die Verwendung unsicherer Speichermanipulationsfunktionen. 🎜🎜🎜 (2) Bei Speicheroperationsfunktionen, die einen klaren Hinweis auf den Rückgabewert haben, sollte der Rückgabewert der Funktion effektiv beurteilt werden, um festzustellen, ob die Operation erfolgreich ist. 🎜🎜(3) Beim Füllen von Daten in den Puffer muss eine Grenzüberprüfung durchgeführt werden. 🎜🎜

Das obige ist der detaillierte Inhalt vonWas bedeutet Pufferunterlauf in C/C++-Programmen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

Video Face Swap

Video Face Swap

Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

C Sprachdatenstruktur: Datenrepräsentation und Betrieb von Bäumen und Grafiken C Sprachdatenstruktur: Datenrepräsentation und Betrieb von Bäumen und Grafiken Apr 04, 2025 am 11:18 AM

C Sprachdatenstruktur: Die Datenrepräsentation des Baumes und des Diagramms ist eine hierarchische Datenstruktur, die aus Knoten besteht. Jeder Knoten enthält ein Datenelement und einen Zeiger auf seine untergeordneten Knoten. Der binäre Baum ist eine besondere Art von Baum. Jeder Knoten hat höchstens zwei Kinderknoten. Die Daten repräsentieren structTreenode {intdata; structTreenode*links; structTreenode*rechts;}; Die Operation erstellt einen Baumtraversalbaum (Vorbereitung, in Ordnung und späterer Reihenfolge) Suchbauminsertion-Knoten Lösches Knotendiagramm ist eine Sammlung von Datenstrukturen, wobei Elemente Scheitelpunkte sind, und sie können durch Kanten mit richtigen oder ungerechten Daten miteinander verbunden werden, die Nachbarn darstellen.

Die Wahrheit hinter dem Problem der C -Sprachdatei Die Wahrheit hinter dem Problem der C -Sprachdatei Apr 04, 2025 am 11:24 AM

Die Wahrheit über Probleme mit der Dateibetrieb: Dateiöffnung fehlgeschlagen: unzureichende Berechtigungen, falsche Pfade und Datei besetzt. Das Schreiben von Daten fehlgeschlagen: Der Puffer ist voll, die Datei ist nicht beschreibbar und der Speicherplatz ist nicht ausreichend. Andere FAQs: Langsame Dateitraversal, falsche Textdateicodierung und Binärdatei -Leser -Fehler.

C Sprach -Multithread -Programmierung: Ein Anfängerleitfaden und Fehlerbehebung C Sprach -Multithread -Programmierung: Ein Anfängerleitfaden und Fehlerbehebung Apr 04, 2025 am 10:15 AM

C Sprachmultithreading -Programmierhandbuch: Erstellen von Threads: Verwenden Sie die Funktion pThread_create (), um Thread -ID, Eigenschaften und Threadfunktionen anzugeben. Threadsynchronisation: Verhindern Sie den Datenwettbewerb durch Mutexes, Semaphoren und bedingte Variablen. Praktischer Fall: Verwenden Sie Multi-Threading, um die Fibonacci-Nummer zu berechnen, mehrere Threads Aufgaben zuzuweisen und die Ergebnisse zu synchronisieren. Fehlerbehebung: Lösen Sie Probleme wie Programmabstürze, Thread -Stop -Antworten und Leistungs Engpässe.

C Sprachdatenstruktur: Die Schlüsselrolle von Datenstrukturen in der künstlichen Intelligenz C Sprachdatenstruktur: Die Schlüsselrolle von Datenstrukturen in der künstlichen Intelligenz Apr 04, 2025 am 10:45 AM

C Sprachdatenstruktur: Überblick über die Schlüsselrolle der Datenstruktur in der künstlichen Intelligenz im Bereich der künstlichen Intelligenz sind Datenstrukturen für die Verarbeitung großer Datenmengen von entscheidender Bedeutung. Datenstrukturen bieten eine effektive Möglichkeit, Daten zu organisieren und zu verwalten, Algorithmen zu optimieren und die Programmeffizienz zu verbessern. Gemeinsame Datenstrukturen, die häufig verwendete Datenstrukturen in der C -Sprache sind: Arrays: Eine Reihe von nacheinander gespeicherten Datenelementen mit demselben Typ. Struktur: Ein Datentyp, der verschiedene Arten von Daten zusammen organisiert und ihnen einen Namen gibt. Linked List: Eine lineare Datenstruktur, in der Datenelemente durch Zeiger miteinander verbunden werden. Stack: Datenstruktur, die dem LEST-In-First-Out-Prinzip (LIFO) folgt. Warteschlange: Datenstruktur, die dem First-In-First-Out-Prinzip (FIFO) folgt. Praktischer Fall: Die benachbarte Tabelle in der Graphentheorie ist künstliche Intelligenz

Fehlerbehebungstipps für die Verarbeitung von Dateien in der C -Sprache Fehlerbehebungstipps für die Verarbeitung von Dateien in der C -Sprache Apr 04, 2025 am 11:15 AM

Fehlerbehebungstipps für C -Sprachverarbeitungsdateien Wenn Dateien in der C -Sprache verarbeitet werden, können Sie auf verschiedene Probleme stoßen. Das Folgende sind häufig zu Problemen und entsprechende Lösungen: Problem 1: Der Dateicode kann nicht geöffnet werden: Datei*fp = fopen ("myFile.txt", "r"); if (fp == null) {// Datei Öffnen fehlgeschlagen} Grund} Grund: Dateipfad -Fehler -Datei nicht vorhandener Datei -Read -Lösung vorhanden. Charbuffer [100]; size_tread_bytes = fread (Puffer, 1, Siz

Wie Debian Readdir sich in andere Tools integriert Wie Debian Readdir sich in andere Tools integriert Apr 13, 2025 am 09:42 AM

Die Readdir -Funktion im Debian -System ist ein Systemaufruf, der zum Lesen des Verzeichnisgehalts verwendet wird und häufig in der C -Programmierung verwendet wird. In diesem Artikel wird erläutert, wie Readdir in andere Tools integriert wird, um seine Funktionalität zu verbessern. Methode 1: Kombinieren Sie C -Sprachprogramm und Pipeline zuerst ein C -Programm, um die Funktion der Readdir aufzurufen und das Ergebnis auszugeben:#include#include#includeIntmain (intargc, char*argv []) {Dir*Dir; structDirent*Eintrag; if (argc! = 2) {{

C- und Systemprogrammierung: Steuerung und Hardware-Interaktion mit niedriger Ebene C- und Systemprogrammierung: Steuerung und Hardware-Interaktion mit niedriger Ebene Apr 06, 2025 am 12:06 AM

C eignet sich für die Systemprogrammierung und Hardware-Interaktion, da es Steuerfunktionen in der Nähe von Hardware und leistungsstarke Funktionen der objektorientierten Programmierung bietet. 1) C über Merkmale auf niedrigem Niveau wie Zeiger, Speicherverwaltung und Bitbetrieb können effizienter Betrieb auf Systemebene erreicht werden. 2) Die Hardware -Interaktion wird über Geräte -Treiber implementiert, und C kann diese Treiber so schreiben, dass sie mit Hardware -Geräten über die Kommunikation umgehen.

C Sprachdateioperation: Wie liest ich Dateien? C Sprachdateioperation: Wie liest ich Dateien? Apr 04, 2025 am 10:42 AM

C -Sprachdateioperation: Die Dateieinführungsdateiverarbeitung ist ein entscheidender Bestandteil der C -Sprachprogrammierung, mit der Programme mit externen Speichergeräten wie Festplatten und Flash -Laufwerken interagieren können. In diesem Artikel wird untersucht, wie Dateien in der C -Sprache gelesen werden. Schritte zum Lesen einer Datei zum Öffnen der Datei: Verwenden Sie die FOPEN -Funktion, um die Datei zu öffnen. Diese Funktion erfordert zwei Parameter: Dateiname und offener Modus. Überprüfen Sie, ob die Datei geöffnet ist: Überprüfen Sie, ob der von der FOPEN -Funktion zurückgegebene Zeiger null ist. Wenn NULL, kann die Datei nicht geöffnet werden. Datei lesen: Verwenden Sie die Fread -Funktion, um Daten aus der Datei zum Puffer zu lesen. Diese Funktion erfordert vier Parameter: Pufferadresse, Größe der Pufferelementgröße, Anzahl der zu gelesenen Elemente und Dateizeiger. Schließen Sie die Datei: Verwenden Sie f

See all articles