Abstract-Control-Flow Integrity (CFI) är en viktig säkerhetsfastighet som måste upprätthållas för att förhindra kapningsattacker. Den senaste tidens attacker har visat att befintliga CFI-skydd för COTS-binärer är alltför släpphänta och sårbara för sofistikerade kodåteranvändande attacker. Redovisning av kontrollflödesbegränsningar som införts på högre semantiknivåer är avgörande för att öka CFI-precisionen. I detta dokument strävar vi efter att ge ett strängare skydd för virtuella funktionssamtal i COTS C++ binärer genom att återvinna C++ nivå semantik. För att uppnå detta mål återvinner vi C++ semantik, inklusive Vtables och virtuella callites. Med den extraherade C++ semantiken konstruerar vi en bra CFI-policy och förbättrar policyprecisionen ytterligare genom att ta fram två filter, nämligen "Nested Call Filter" och "Calling Convention Filter". Vi implementerar en prototyp system kallas vfGuard, och utvärdera dess noggrannhet, precision, effektivitet, täckning och prestanda overhead mot en test uppsättning inklusive komplexa C++ binära moduler som används av Internet Explorer. Våra experiment visar en runtime overhead på 18,3% per modul. På SpiderMonkey, en öppen källkod JavaScript motor som används av Firefox, vfGuard genererade 199 samtalsmål per virtuell callsite - inom samma storleksordning som de som genereras från en källkod baserad lösning. De riktlinjer som konstruerats av vfGuard är sunda och av högre precision jämfört med toppmoderna binära CFI-lösningar.
Detta beslut träder i kraft dagen efter det att det har offentliggjorts i Europeiska unionens officiella tidning. Ref föreslog en CFI-policy för virtuella funktionssamtal i C++ binärer.
vfGuard: Strict Protection for Virtual Function Calls in COTS C++ Binaries
{'venue': 'NDSS', 'journal': None, 'mag_field_of_study': ['Computer Science']}