Intel avas ControlFlag masinĂ”ppe sĂŒsteemi koodi, et tuvastada koodivead

Intel avas vĂ€lja ControlFlag teadusprojekti, mille eesmĂ€rk on arendada vĂ€lja masinĂ”ppe sĂŒsteem koodi kvaliteedi parandamiseks. Projekti raames loodud tööriist vĂ”imaldab tuvastada erinevaid vigu ja anomaaliaid kĂ”rgema taseme keeles, nagu C/C++, pĂ”hinedes suurel hulgal olemasolevast koodist treenitud mudelile. SĂŒsteem sobib erinevat tĂŒĂŒpi probleemide mÀÀramiseks koodis, alates trĂŒkivigade ja vale andmetĂŒĂŒbi kombinatsioonide tuvastamisest kuni NULL vÀÀrtuse kontrollide ja mĂ€lu probleemide leidmiseni. ControlFlag kood on kirjutatud C++ keeles ja on avatud MIT litsentsi alusel.

SĂŒsteem Ă”pib iseseisvalt, ehitades statistilisi mudeleid olemasolevatest avatud projektide koodidest, mis on avaldatud GitHubis ja sarnastes avalikes hoidlates. Koolitusprotsessis tuvastab sĂŒsteem tĂŒĂŒpilised koodistruktuuride mustrid ja koostab sĂŒntaktilise puu ĂŒhendustes nende mustrite vahel, peegeldades koodi teostamise voogu programmis. LĂ”pptulemusena moodustub viimase otsuse puu, mis kogub kĂ”ikide analĂŒĂŒsitud lĂ€htekoodide arenduse kogemused.

Kontrollitava koodi puhul toimub sarnane protsess mustrite tuvastamiseks, mida vĂ”rreldakse viimase otsuse puuga. Suured lahknevused kĂ”rvalharudest osutavad kontrollitava mustri anomaaliale. SĂŒsteem vĂ”imaldab mitte ainult tuvastada mustris viga, vaid ka pakkuda parandusi. NĂ€iteks OpenSSL koodis tuvastati konstruktsioon „(s1 == NULL) ∧ (s2 == NULL)“, mida ilmnes sĂŒntaktilises puus vaid 8 korda, samas kui lĂ€him haru vÀÀrtusega „(s1 == NULL) || (s2 == NULL)“ ilmnes umbes 7000 korda. SĂŒsteem tuvastas ka anomaalia „(s1 == NULL) | (s2 == NULL)“, mis ilmnes puus 32 korda.

Intel avas ControlFlag masinĂ”ppe sĂŒsteemi koodi, et tuvastada koodivead

Koodi lĂ”igu "if (x = 7) y = x;" analĂŒĂŒsimisel tuvastas sĂŒsteem, et tavaliselt kasutatakse "if"-lause numbriliste vÀÀrtuste vĂ”rdlemiseks konstruktsiooni "muutuja == number", seega on tĂ”enĂ€oliselt "muutuja = number" kasutamine "if"-vĂ€ites trĂŒkiveast tingitud. Sellise vea oleks kinni pĂŒĂŒdnud ka traditsioonilised staatilised analĂŒsaatorid, kuid erinevalt neist ei kasuta ControlFlag valmisreegleid, milles on keeruline ette nĂ€ha kĂ”iki vĂ”imalikke variatsioone, vaid tugineb statistikale, mis hĂ”lmab erinevate konstruktsioonide kasutamist suures hulgas projektides.

Eksperimendi raames leidis ControlFlag utiliidi cURL lĂ€htekoodis, mis on tihti toodud kvaliteetse ja kontrollitud koodina, staatiliste analĂŒsaatorite poolt tĂ€helepanuta jÀÀnud vea struktuuri elementi "s->keepon", mis oli numbrilise tĂŒĂŒbiga, kuid vĂ”rreldud loogilise vÀÀrtusega TRUE. OpenSSL koodis, peale eelpoolmainitud probleemi "(s1 == NULL) ∧ (s2 == NULL)", tuvastati samuti anomaaliaid vĂ€ljendites "(-2 == rv)" (miinus oli trĂŒkiviga) ja "BIO_puts(bp, ":")".

Allikas: opennet.ru

Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid | ProHoster