Release av ControlFlag 1.0, ett verktyg för att identifiera fel i C-kod

Intel har publicerat den första stora utgåvan av verktyget ControlFlag 1.0, som låter dig identifiera fel och anomalier i källkoden med hjälp av ett maskininlärningssystem som tränats på en stor mängd befintlig kod. Till skillnad från traditionella statiska analysatorer tillämpar ControlFlag inte färdiga regler, där det är svårt att tillhandahålla alla möjliga alternativ, utan baseras på statistik över användningen av olika språkkonstruktioner i ett stort antal befintliga projekt. ControlFlag-koden är skriven i C++ och är öppen källkod under MIT-licensen.

Systemet tränas genom att bygga en statistisk modell av den befintliga kodarrayen av projekt med öppen källkod publicerade i GitHub och liknande offentliga arkiv. På träningsstadiet bestämmer systemet typiska mönster för att konstruera strukturer i koden och bygger ett syntaktiskt träd av kopplingar mellan dessa mönster, vilket återspeglar flödet av kodexekvering i programmet. Som ett resultat bildas ett referensbeslutsträd som kombinerar utvecklingserfarenheten för alla analyserade källkoder. Koden som granskas genomgår en liknande process för att identifiera mönster som kontrolleras mot ett referensbeslutsträd. Stora avvikelser med närliggande grenar indikerar förekomsten av en anomali i mönstret som kontrolleras.

Release av ControlFlag 1.0, ett verktyg för att identifiera fel i C-kod

Som ett exempel på ControlFlags möjligheter analyserade utvecklarna källkoderna för OpenSSL- och cURL-projekten:

  • Anomala konstruktioner “(s1 == NULL) ∧ (s2 == NULL)” och “(s1 == NULL) | (s2 == NULL)" , som inte matchar det vanliga mönstret "(s1 == NULL) || (s2 == NULL)". Koden identifierade också anomalier i uttrycken "(-2 == rv)" (minus var ett stavfel) och "BIO_puts(bp, ":") <= 0)" (i samband med att kontrollera att funktionen borde det ha varit "== 0").
  • I cURL upptäcktes ett fel som inte upptäcktes av statiska analysatorer vid användning av strukturelementet "s->keepon", som hade en numerisk typ, men som jämfördes med det booleska värdet TRUE.

Bland funktionerna i ControlFlag 1.0-versionen finns det fullt stöd för standardmallar för C-språket och möjligheten att upptäcka anomalier i villkorliga "om"-uttryck. Till exempel, när man analyserar kodfragmentet "if (x = 7) y = x;" Systemet kommer att avgöra att "if"-satsen vanligtvis använder konstruktionen "variable == number" för att jämföra numeriska värden, så det är mycket troligt att "variable = number" i "if"-uttrycket orsakas av ett stavfel. Satsen innehåller ett skript som låter dig ladda ner befintliga C-språkförråd på GitHub och använda dem för att bygga modellen. Färdiga modeller finns också tillgängliga, så att du omedelbart kan börja kontrollera koden.

Källa: opennet.ru

Lägg en kommentar