Autor Thema: Microsoft exkommuniziert memcpy()  (Gelesen 435 mal)

0 Mitglieder und 1 Gast betrachten dieses Thema.

Offline SiLæncer

  • Cheff-Cubie
  • *****
  • Beiträge: 191383
  • Ohne Input kein Output
    • DVB-Cube
Microsoft exkommuniziert memcpy()
« am: 20 Mai, 2009, 06:33 »
Im Rahmen des Security Development Lifecycle (SDL) hat Microsoft bereits Kopierfunktionen wie strcpy(), strncat() und gets() geächtet, die die Größe der zu beschreibenden Speicherbereiche nicht überprüfen und somit in der Vergangenheit sehr häufig zu sicherheitskritischen Pufferüberläufen führten. Jetzt soll memcpy() das gleiche Schicksal ereilen.

Wie ihr Name nahelegt, dient die C-Funktion zum Kopieren von einem Speicherbereich in einen anderen. Microsoft rät aus Sicherheitsgründen bereits seit einiger Zeit von ihrem Einsatz ab. Jetzt heißt es jedoch, dass aus dieser Empfehlung noch in diesem Jahr ein hartes Verbot werden soll. Im selben Topf sollen dann auch CopyMemory() und RtlCopyMemory() landen.

Derartige Vorschriften werden in Redmond automatisiert überwacht. Das bedeutet konkret, dass Microsofts Entwickler keinen Code mehr ins Versionsverwaltungssystem einchecken können, der die inkriminierten Funktionen aufruft – auch wenn dies ausreichend abgesichert wurde. Als Ersatz schlägt Microsoft die Funktion memcpy_s() vor, die als zusätzlichen Parameter die Größe des Zielpuffers entgegennimmt und auch überprüft, ob die Zahl der zu schreibenden Bytes diese übersteigt.

Doch ganz so eindeutig, wie Microsoft es scheinen lassen will, liegt der Fall diesmal nicht. Anders als bereits geächtete Funktionen wie strcpy(), die keinerlei Längenparameter vorsehen, muss der Entwickler bei memcpy() bereits die Zahl der zu schreibenden Bytes angeben: memcpy(dst, src, len); Bei der Ersatzfunktion kommt die Größe des Zielbereichs hinzu, sodass ein Aufruf idealerweise so aussähe:

memcpy_s(dst, sizeof(dst), src, sizeof(src));

Das könnte sich jedoch als Wunschdenken erweisen. Wahrscheinlicher sei es, dass Entwickler, die sich nicht um Sicherheit kümmern, die Sperre im Zweifelsfall umgehen, indem sie aus memcpy(a,b,c) einfach memcpy(a,c,b,c) machen, prophezeit der auf Code Reviews spezialisierte Sicherheitsexperte Felix von Leitner. Das brächte dann überhaupt nichts. Und für die Entwickler, die sich um die Sicherheit ihrer Programme ohnehin Gedanken machen, sei memcpy() bereits hinreichend sicher. "Man kriegt Bugs nicht weg, indem man gefährliche APIs verbietet", kritisiert von Leitner Microsofts Ansatz.

Ein weiteres Problem, das Microsoft aber wahrscheinlich wenig kümmert, ist die Tatsache, dass die Ersatzfunktion nicht standardisiert ist. So gibt es memcpy_s() beispielsweise in der unter anderem auf Linux-Systemen eingesetzten C-Bibliothek glibc nicht. Damit legt man Software-Entwicklern, die plattformunabhängig entwickeln oder Windows-Programme auf andere Plattformen portieren wollen, einen weiteren Stein in den Weg.

Quelle : www.heise.de

Arbeits.- Testrechner :

Intel® Core™ i7-6700 (4 x 3.40 GHz / 4.00 GHz)
16 GB (2 x 8 GB) DDR4 SDRAM 2133 MHz
250 GB SSD Samsung 750 EVO / 1 TB HDD
ZOTAC Geforce GTX 1080TI AMPExtreme Core Edition 11GB GDDR5
MSI Z170A PC Mate Mainboard
DVD-Brenner Laufwerk
Microsoft Windows 10 Home 64Bit

TT S2 3200 ( BDA Treiber 5.0.1.8 ) + Terratec Cinergy 1200 C ( BDA Treiber 4.8.3.1.8 )