Defending against counterfeit object-oriented programming
Autor: | Bernad, Matthias |
---|---|
Jazyk: | angličtina |
Rok vydání: | 2023 |
Předmět: | |
DOI: | 10.34726/hss.2023.110663 |
Popis: | Auch im Jahr 2023 gehören C und C++ zu den am häufigsten verwendeten Programmiersprachen in der Software-Entwicklung. Fehlende Speichersicherheit, gepaart mit hoher Beliebtheit, machen Programme, die in C und C++ geschrieben sind, zu einem lukrativen Ziel für Angreifende. Selbst nach jahrzehntelanger Forschung, besteht nach wie vor ein Wettrüsten zwischen Angreifenden und Verteidigenden. Ein Angriff namens COOP hat sich als besonders widerstandsfähig gegenüber einer Vielzahl von Verteidigungen, die das Wiederverwenden von Programmteilen verhindern sollen, erwiesen. Da COOP spezielle C++ Semantik angreift, sind allgemeine Verteidigungen, die diese C++ Mechanismen nicht berücksichtigen, nicht in der Lage COOP Angriffe zu verhindern. In dieser Arbeit präsentiere ich Hobbit, eine Verteidigung gegen COOP. Hobbit verhindert sowohl das Manipulieren von bestehenden virtuellen Funktionstabellen-Zeigern, als auch das Einschleusen von gefälschten virtuellen Funktionstabellen-Zeigern. Da COOP auf dem Erstellen und Verändern von virtuellen Funktionstabellen-Zeigern aufbaut, verhindert Hobbit somit diese Angriffe. Hobbit garantiert die Integrität von virtuellen Funktionstabellen-Zeigern, indem es Signaturen während der regulären Objekt-Erstellung berechnet und speichert. Um die Angriffsfläche von sogenannten „Replay”-Angriffen zu verringern, bettet Hobbit spezielle Laufzeiteigenschaften von geschützten Objekten in Signaturen ein. Hobbit instrumentiert virtuelle Funktionen mit Signatur-Überprüfungen um Änderungen an virtuellen Funktionstabellen-Zeigern, sowie gefälschte Objekte zu erkennen. Wir implementieren einen Prototypen basierend auf clang, dem C++ Frontend von LLVM. Wir evaluieren die Laufzeit-Einbußen unseres Prototypen anhand der SPEC CPU 2017 Benchmark-Suite und stellen eine geometrisch durchschnittliche Laufzeitverschlechterung zwischen ∼ 14.88% und ∼ 106.12% über alle C++ Benchmarks fest. Diese Laufzeitverschlechterung ist abhängig von der gewählten Hashing-Strategie. Schlussendlich evaluieren wir die Sicherheitseigenschaften von Hobbit und stellen fest, dass Hobbit COOP-Angriffe effektiv verhindert. Still, in the year 2023, C and C++ belong to the most-used programming languages for developing software. The lack of memory safety, combined with a high adoption rate, makes programs written in C and C++ an attractive target for attackers. And so, even after decades of research, the arms race between attackers and defenders continues. An attack called COOP has proven to be particularly resistant to a range of code-reuse defenses. COOP exploits C++ semantics and, thus, is able to bypass defenses that do not consider C++. In this thesis, we present Hobbit, a principled defense against COOP. Hobbit prevents one of COOP’s core primitives, the ability to manipulate existing, or inject new virtual table pointers. Hobbit guarantees the integrity of virtual table pointers by computing signatures during object creation. To limit the attack surface of replay attacks, Hobbit’s signatures include run-time properties of the protected objects. Hobbit instruments virtual functions with signature verification checks to detect modifications of virtual table pointers and fake objects. We implement a prototype based on clang, a C++ frontend for LLVM. We benchmarked our prototype with the SPEC CPU 2017 benchmark suite and measured a geometric mean run-time overhead between ∼ 14.88% and ∼ 106.12% over all C++ benchmarks, depending on the hashing strategy. We analyse Hobbit’s security properties and find that it is effective in preventing COOP attacks. |
Databáze: | OpenAIRE |
Externí odkaz: |