Utgivelse av ControlFlag 1.0, et verktøy for å identifisere feil i C-kode

Intel har publisert den første store utgivelsen av ControlFlag 1.0-verktøyet, som lar deg identifisere feil og anomalier i kildekoden ved å bruke et maskinlæringssystem som er trent på en stor mengde eksisterende kode. I motsetning til tradisjonelle statiske analysatorer, bruker ikke ControlFlag ferdige regler, der det er vanskelig å gi alle mulige alternativer, men er basert på statistikk om bruk av ulike språkkonstruksjoner i et stort antall eksisterende prosjekter. ControlFlag-koden er skrevet i C++ og er åpen kildekode under MIT-lisensen.

Systemet trenes opp ved å bygge en statistisk modell av den eksisterende kodearrayen av åpen kildekode-prosjekter publisert i GitHub og lignende offentlige depoter. På treningsstadiet bestemmer systemet typiske mønstre for å konstruere strukturer i koden og bygger et syntaktisk tre av forbindelser mellom disse mønstrene, noe som gjenspeiler flyten av kodeutførelse i programmet. Som et resultat dannes et referansebeslutningstre som kombinerer utviklingserfaringen til alle analyserte kildekoder. Koden som vurderes gjennomgår en lignende prosess for å identifisere mønstre som kontrolleres mot et referansebeslutningstre. Store avvik med nærliggende grener indikerer tilstedeværelsen av en anomali i mønsteret som kontrolleres.

Utgivelse av ControlFlag 1.0, et verktøy for å identifisere feil i C-kode

Som et eksempel på ControlFlags muligheter analyserte utviklerne kildekodene til OpenSSL- og cURL-prosjektene:

  • Anomale konstruksjoner “(s1 == NULL) ∧ (s2 == NULL)” og “(s1 == NULL) | (s2 == NULL)" , som ikke samsvarer med det ofte brukte mønsteret "(s1 == NULL) || (s2 == NULL)". Koden identifiserte også uregelmessigheter i uttrykkene "(-2 == rv)" (minus var en skrivefeil) og "BIO_puts(bp, ":") <= 0)" (i forbindelse med å kontrollere vellykket gjennomføring av funksjonen skulle den ha vært "== 0").
  • I cURL ble det oppdaget en feil som ikke ble oppdaget av statiske analysatorer ved bruk av strukturelementet “s->keepon”, som hadde en numerisk type, men som ble sammenlignet med den boolske verdien TRUE.

Blant funksjonene til ControlFlag 1.0-versjonen er det full støtte for standardmaler for C-språket og muligheten til å oppdage anomalier i betingede "hvis"-uttrykk. For eksempel, når du analyserer kodefragmentet "if (x = 7) y = x;" Systemet vil bestemme at "if"-setningen vanligvis bruker "variabel == tall"-konstruksjonen for å sammenligne numeriske verdier, så det er høyst sannsynlig at "variabel = tall" i "if"-uttrykket er forårsaket av en skrivefeil. Settet inneholder et skript som lar deg laste ned eksisterende C-språkrepositorier på GitHub og bruke dem til å bygge modellen. Ferdige modeller er også tilgjengelige, slik at du umiddelbart kan begynne å sjekke koden.

Kilde: opennet.ru

Legg til en kommentar