Udgivelse af ControlFlag 1.0, et værktøj til at identificere fejl i C-kode

Intel har udgivet den første større udgivelse af ControlFlag 1.0-værktøjet, som giver dig mulighed for at identificere fejl og anomalier i kildekoden ved hjælp af et maskinlæringssystem, der er trænet på en stor mængde eksisterende kode. I modsætning til traditionelle statiske analysatorer anvender ControlFlag ikke færdige regler, hvor det er svært at give alle mulige muligheder, men er baseret på statistik over brugen af ​​forskellige sprogkonstruktioner i en lang række eksisterende projekter. ControlFlag-koden er skrevet i C++ og er open source under MIT-licensen.

Systemet trænes ved at bygge en statistisk model af den eksisterende kodearray af open source-projekter udgivet i GitHub og lignende offentlige repositories. På træningsstadiet bestemmer systemet typiske mønstre til at konstruere strukturer i koden og opbygger et syntaktisk træ af forbindelser mellem disse mønstre, hvilket afspejler strømmen af ​​kodeeksekvering i programmet. Som følge heraf dannes et referencebeslutningstræ, der kombinerer udviklingserfaringen fra alle analyserede kildekoder. Koden under revision gennemgår en lignende proces med at identificere mønstre, der kontrolleres mod et referencebeslutningstræ. Store uoverensstemmelser med tilstødende grene indikerer tilstedeværelsen af ​​en anomali i det mønster, der kontrolleres.

Udgivelse af ControlFlag 1.0, et værktøj til at identificere fejl i C-kode

Som et eksempel på ControlFlags muligheder analyserede udviklerne kildekoderne til OpenSSL- og cURL-projekterne:

  • Anomale konstruktioner "(s1 == NULL) ∧ (s2 == NULL)" og "(s1 == NULL) | (s2 == NULL)" , som ikke matcher det almindeligt anvendte mønster "(s1 == NULL) || (s2 == NULL)". Koden identificerede også uregelmæssigheder i udtrykkene "(-2 == rv)" (minus var en tastefejl) og "BIO_puts(bp, ":") <= 0)" (i forbindelse med kontrol af den vellykkede gennemførelse af funktion skulle det have været "== 0").
  • I cURL blev der opdaget en fejl, som ikke blev opdaget af statiske analysatorer ved brug af strukturelementet "s->keepon", som havde en numerisk type, men blev sammenlignet med den boolske værdi TRUE.

Blandt funktionerne i ControlFlag 1.0-versionen er der fuld understøttelse af standardskabeloner til C-sproget og muligheden for at detektere anomalier i betingede "hvis"-udtryk. For eksempel, når man analyserer kodefragmentet "if (x = 7) y = x;" Systemet vil bestemme, at "hvis"-sætningen normalt bruger "variabel == tal"-konstruktionen til at sammenligne numeriske værdier, så det er højst sandsynligt, at "variabel = tal" i "hvis"-udtrykket er forårsaget af en tastefejl. Sættet indeholder et script, der giver dig mulighed for at downloade eksisterende C-sprogdepoter på GitHub og bruge dem til at bygge modellen. Færdige modeller er også tilgængelige, så du straks kan begynde at tjekke koden.

Kilde: opennet.ru

Tilføj en kommentar