Release fan ControlFlag 1.0, in ark foar it identifisearjen fan flaters yn C-koade

Intel hat de earste grutte frijlitting fan it ControlFlag 1.0-ark publisearre, wêrtroch jo flaters en anomalies yn boarnekoade kinne identifisearje mei in masine-learsysteem oplaat op in grutte hoemannichte besteande koade. Oars as tradisjonele statyske analysatoren, jildt ControlFlag gjin klearebare regels, wêryn't it lestich is om foar alle mooglike opsjes te foarsjen, mar is basearre op statistiken oer it brûken fan ferskate taalkonstruksjes yn in grut tal besteande projekten. De ControlFlag-koade is skreaun yn C++ en is iepen boarne ûnder de MIT-lisinsje.

It systeem wurdt trainearre troch it bouwen fan in statistysk model fan 'e besteande koade-array fan iepenboarne-projekten publisearre yn GitHub en ferlykbere iepenbiere repositories. Op it trainingsstadium bepaalt it systeem typyske patroanen foar it bouwen fan struktueren yn 'e koade en bout in syntaktyske beam fan ferbiningen tusken dizze patroanen, dy't de stream fan koade-útfiering yn it programma reflektearje. As gefolch, in referinsje beslútfoarmjende beam wurdt foarme dy't kombinearret de ûntwikkeling ûnderfining fan alle analysearre boarne koades. De koade ûnder beoardieling ûndergiet in ferlykber proses foar it identifisearjen fan patroanen dy't wurde kontrolearre tsjin in referinsjebeslútbeam. Grutte ferskillen mei oanbuorjende tûken jouwe oan op de oanwêzigens fan in anomaly yn it patroan dat kontrolearre wurdt.

Release fan ControlFlag 1.0, in ark foar it identifisearjen fan flaters yn C-koade

As foarbyld fan de mooglikheden fan ControlFlag analysearren de ûntwikkelders de boarnekoades fan 'e OpenSSL- en cURL-projekten:

  • Anomale konstruksjes "(s1 == NULL) ∧ (s2 == NULL)" en "(s1 == NULL) | (s2 == NULL)" , dy't net oerienkomme mei it meast brûkte patroan "(s1 == NULL) || (s2 == NULL)". De koade identifisearre ek anomalies yn 'e útdrukkingen "(-2 == rv)" (de minus wie in typflater) en "BIO_puts (bp, ":") <= 0)" (yn 'e kontekst fan it kontrolearjen fan de suksesfolle foltôging fan' e funksje soe it "== 0" wêze moatten).
  • Yn cURL waard in flater ûntdutsen dy't net ûntdutsen waard troch statyske analysatoren by it brûken fan it struktuerelemint "s->keepon", dat in numerike type hie, mar waard fergelike mei de Booleaanske wearde TRUE.

Under de funksjes fan 'e ControlFlag 1.0-ferzje is d'r folsleine stipe foar standert sjabloanen foar de C-taal en de mooglikheid om anomalies te ûntdekken yn betingsten "as"-útdrukkingen. Bygelyks, by it analysearjen fan it koadefragmint "as (x = 7) y = x;" It systeem sil bepale dat de útspraak "as" meastentiids de "fariabele == nûmer" konstruksje brûkt om numerike wearden te fergelykjen, dus it is heul wierskynlik dat de "fariabele = getal" yn 'e "as"-ekspresje wurdt feroarsake troch in typflater. De kit befettet in skript wêrmei jo besteande C-taalrepositories op GitHub kinne downloade en se brûke om it model te bouwen. Ready-made modellen binne ek beskikber, wêrtroch jo de koade daliks kinne begjinne te kontrolearjen.

Boarne: opennet.ru

Add a comment