Intel on avaldanud esimese olulise ControlFlag 1.0 tööriista versiooni, mis vĂ”imaldab tuvastada vigu ja anomaaliaid lĂ€htekoodides, kasutades masinĂ”ppesĂŒsteemi, mis on treenitud suure hulga olemasoleva koodi pĂ”hjal. Erinevalt traditsioonilistest staatilistest analĂŒsaatoritest ei kasuta ControlFlag valmis reegleid, kus on keeruline ette nĂ€ha kĂ”iki vĂ”imalikke variante, vaid toetub statistikale, mis pĂ”hineb erinevate keelekonstruktsioonide kasutamisel paljude olemasolevate projektide seas. ControlFlagi kood on kirjutatud C++ keeles ja avalik MIT litsentsi alusel.
SĂŒsteem Ă”pib, ehitades statistilise mudeli olemasoleva avatud projektide koodide hulgast, mis on avaldatud GitHubis ja sarnastes avalikes hoidlates. Ăppefaasis mÀÀrab sĂŒsteem tĂŒĂŒpilised konstruktsioonide mustrid koodis ja loob sĂŒntaktilise puu nende mustrite vahel, mis peegeldab koodi tĂ€itmise voogu programmis. Tulemusena kujuneb vĂ€lja otsuste tegemise ehtne puu, mis ĂŒhendab kĂ”ikide analĂŒĂŒsitud lĂ€htekoodide arenduskogemuse. Kontrollitava koodi puhul viiakse lĂ€bi sarnane mustrite mÀÀramise protsess, mida vĂ”rreldakse ehtsa otsuste tegemise puuga. Suured lahknevused naaberharudega viitavad kontrollitava mustri anomaaliale.

ControlFlag'i vĂ”imaluste nĂ€itamiseks viidi lĂ€bi lĂ€htekoodide analĂŒĂŒs OpenSSL ja cURL projektidest:
- OpenSSL-is tuvastati anomaalsed konstruktsioonid â(s1 == NULL) â§ (s2 == NULL)â ja â(s1 == NULL) | (s2 == NULL)â, mis ei vasta tavaliselt kasutatavale mustrile â(s1 == NULL) || (s2 == NULL)â. Koodis tuvastati samuti anomaaliad vĂ€ljendites â(-2 == rv)â (miinus oli trĂŒkiviga) ja âBIO_puts(bp, ':') <= 0)â (funktsiooni eduka lĂ”petamise kontrollimisel oleks pidanud olema â== 0â).
- cURL-is tuvastati staatiliste analĂŒsaatorite poolt mööda lastud viga struktuuri elemendi âs->keeponâ kasutamisel, mis oli arvutuslik tĂŒĂŒp, kuid vĂ”rreldud boolean vÀÀrtusega TRUE.
ControlFlag 1.0 versiooni eripĂ€radena toome esile tĂ€ieliku toe C keele tĂŒĂŒpparameetritele ja vĂ”imaluse tuvastada anomaaliaid âifâ tingimustes. NĂ€iteks, kui analĂŒĂŒsida koodilĂ”iku âif (x = 7) y = x;â, tuvastab sĂŒsteem, et tavaliselt kasutatakse âifâ operaatori jaoks numbriliste vÀÀrtuste vĂ”rdlemiseks konstruktsiooni âmuutuja == numberâ. Seega on suure tĂ”enĂ€osusega, et âmuutuja = numberâ vĂ€ljendis âifâ on kirjutusviga. Pakett sisaldab skripti, millega saab laadida GitHubis C keeles olevaid skeeme ja kasutada neid mudeli loomiseks. Samuti on saadaval juba valmis mudelid, mis vĂ”imaldavad kohe alustada koodi kontrollimist.
Allikas: opennet.ru
