Intel-ek ControlFlag 1.0 tresnaren lehen bertsio nagusia argitaratu du, iturburu-kodean akatsak eta anomaliak identifikatzea ahalbidetzen duena, lehendik dagoen kode kopuru handi batean trebatutako ikaskuntza automatikoko sistema bat erabiliz. Analizatzaile estatiko tradizionalek ez bezala, ControlFlag-ek ez ditu prest egindako arauak aplikatzen, zeinetan zaila baita aukera posible guztiak eskaintzea, baina lehendik dauden proiektu ugaritan hainbat hizkuntza-eraikuntzaren erabilerari buruzko estatistiketan oinarritzen da. ControlFlag kodea C++-n idatzita dago eta kode irekian dago MIT lizentziapean.
GitHub-en eta antzeko biltegi publikoetan argitaratutako kode irekiko proiektuen lehendik dagoen kode-matrizearen eredu estatistiko bat eraikiz trebatzen da sistema. Prestakuntza-etapan, sistemak kodean egiturak eraikitzeko eredu tipikoak zehazten ditu eta eredu horien arteko konexioen zuhaitz sintaktiko bat eraikitzen du, programan kodearen exekuzio-fluxua islatuz. Ondorioz, aztertutako iturburu-kode guztien garapen-esperientzia batzen duen erreferentziazko erabakiak hartzeko zuhaitza eratzen da. Berrikusten ari den kodeak erreferentziazko erabaki-zuhaitz batekin egiaztatzen diren ereduak identifikatzeko antzeko prozesu bat jasaten du. Alboko adarrekiko desadostasun handiek egiaztatzen ari den ereduan anomalia bat dagoela adierazten dute.
ControlFlag-en gaitasunen adibide gisa, garatzaileek OpenSSL eta cURL proiektuen iturburu-kodeak aztertu zituzten:
- Eraikuntza anomaliak β(s1 == NULL) β§ (s2 == NULL)β eta β(s1 == NULL) | (s2 == NULL)" , normalean erabiltzen den ereduarekin bat ez datozenak "(s1 == NULL) || (s2 == NULL)". Kodeak anomaliak ere identifikatu zituen "(-2 == rv)" (minusak akatsa izan zen) eta "BIO_puts(bp, ":") <= 0)" esamoldeetan (gutxienez amaitu izana egiaztatzeko testuinguruan). funtzioa "== 0") izan behar zuen.
- cURL-en, analizatzaile estatikoek detektatu ez zuten errore bat aurkitu zen "s->keepon" egitura-elementua erabiltzean, zenbakizko mota zuena, baina TRUE balio boolearrarekin alderatu zen.
ControlFlag 1.0 bertsioaren ezaugarrien artean, C hizkuntzarako txantiloi estandarentzako laguntza osoa dago eta baldintzazko "baldin" adierazpenetan anomaliak detektatzeko gaitasuna. Esate baterako, kode zatia aztertzean βif (x = 7) y = x;β Sistemak zehaztuko du "baldin" adierazpenak normalean "aldagaia == zenbakia" eraikuntza erabiltzen duela zenbakizko balioak alderatzeko, beraz, oso litekeena da "bada" esapideko "aldagaia = zenbakia" akats baten ondorioz egotea. Kitak GitHub-en dauden C hizkuntzaren biltegiak deskargatzeko eta eredua eraikitzeko erabiltzeko aukera ematen duen script bat dakar. Prestatutako ereduak ere eskuragarri daude, kodea egiaztatzen berehala hasteko.
Iturria: opennet.ru