Google avaldas GWPSan, tööriista rakenduste käitamise ajal vigu tuvastamiseks

Google on avaldanud GWPSan tööriista lähtekoodid, mis on mõeldud rakenduste täitmise ajal vigade tuvastamiseks, mis on koostatud architektuuridele x86-64 ja ARM64. GWPSan koosneb jagatavast raamatukogust, mis sidub rakenduse käivitamise ajal LD_PRELOAD abil ning kasutab programmi töö analüüsimiseks Linuxi tuumasolevaid stopimis- ja protsesside proovimise mehhanisme (PERF_TYPE_BREAKPOINT). Kood on kirjutatud C++ keeles ning levitatakse Apache 2.0 litsentsi alusel.

GWPSan on kujundatud moodulraamistikuks, mis toetab erinevate veaklasside detektorite moodulite ühendamist. GWPSan viib läbi dünaamilist analüüsi, mis aktiveeritakse signaalihaldurite kaudu, mis võimaldab rakenduskoodi muutmist vältida. Enamik detektoreid vajab rakenduse koostamist teatud kompilaatori lipudega, mis lisavad vajalikud metaandmed. Vajalik on vähemalt Clang 18 ja Linuxi südamik 6.4.

Praegu on saadaval kolm detektorit:

  • UAR (After-return usage) — tuvastab vead, mis on põhjustatud objekti kasutamisest virnas pärast funktsioonist väljumist, kus see objekt määrati. Kaitse toimub funktsiooni sisendi ja väljundi punktide interceptide kaudu — sisse minnes asendatakse virn koopiaga, et seda funktsiooni täitmise ajal kasutada, ja väljudes nareturnitakse vana virna seisund.
  • TSan (Thread Sanitizer) — tuvastab lõngade vahelisi võistlusi (data-race), mis tekivad, kui erinevad samaaegselt töötavad lõngad saavad lugeda või muuta jagatud mälu piirkondi, kasutamata seejuures sünkroniseerimise primitiive. Kaitse põhineb riistvaraliste peatamispunktide kasutamisel, mis on seotud jagatud mälupiirkondadega. Kui peatamispunkt aktiveerub, peatab käivituv töötleja lühikeseks ajaks lõnga täitmise mälule juurdepääsu hetkel ja kontrollib, kas teise lõnga peatamispunkt on aktiveeritud.
  • LMSan (Lightweight Memory Sanitizer) — tuvastab mittealgatatud andmete kasutamise mälus. Detektor on märgitud kui eksperimentaalne ja mitte soovitatav kasutada.

GWPSan analüüsib programmi täitmiscode'i, kasutades DynamoRIO raamistikku masinkoodi dekodeerimiseks abstraktseteks ISA juhisteks, mida seejärel täidetakse emulatsiooni abil. Ajavahemiku signaalide kaudu kutsutakse välja ühtne töötleja, mis iga kutsungiga täidab teatud osa analüüsitavast voost. Teatud juhiste täitmise ajal, avastades probleeme, käivitub juhistele spetsiifiline probleemide detektor, näiteks mäluaadressidega tegelevate juhiste puhul käivitub seisu konkurentsi detektor.

Allikas: opennet.ru

Osta usaldusväärne veebihosting DDoS kaitsega, VPS VDS serverid 🔥 Osta usaldusväärne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster