ControlFlag 1.0 чыгарылышы, C кодундагы каталарды аныктоо үчүн курал

Intel ControlFlag 1.0 куралынын биринчи негизги чыгарылышын чыгарды, ал сизге иштеп жаткан коддун чоң көлөмү боюнча үйрөтүлгөн машинаны үйрөнүү тутумунун жардамы менен баштапкы коддогу каталарды жана аномалияларды аныктоого мүмкүндүк берет. Салттуу статикалык анализаторлордон айырмаланып, ControlFlag даяр эрежелерди колдонбойт, мында бардык мүмкүн болгон варианттарды берүү кыйын, бирок көп сандагы иштеп жаткан долбоорлордо ар кандай тилдик конструкцияларды колдонуу статистикасына негизделген. ControlFlag коду C++ тилинде жазылган жана MIT лицензиясы боюнча ачык булак болуп саналат.

Система GitHub жана ушуга окшош коомдук репозиторийлерде жарыяланган ачык булактуу долбоорлордун учурдагы коддук массивинин статистикалык моделин түзүү аркылуу үйрөтүлөт. Окутуу стадиясында система коддогу структураларды куруунун типтүү үлгүлөрүн аныктайт жана программадагы коддун аткарылышын чагылдырган бул калыптардын ортосундагы байланыштардын синтаксистик дарагын курат. Натыйжада, бардык талданган баштапкы коддордун иштеп чыгуу тажрыйбасын бириктирген маалымдама чечимдерди кабыл алуу дарагы түзүлөт. Каралып жаткан код үлгүлөрдү аныктоонун окшош процессинен өтөт, алар шилтеме чечим дарагына каршы текшерилет. Коңшу бутактар ​​менен чоң айырмачылыктар текшерилип жаткан үлгүдө аномалиянын бар экенин көрсөтүп турат.

ControlFlag 1.0 чыгарылышы, C кодундагы каталарды аныктоо үчүн курал

ControlFlag мүмкүнчүлүктөрүнүн мисалы катары, иштеп чыгуучулар OpenSSL жана cURL долбоорлорунун баштапкы коддорун талдоого алышкан:

  • Аномалдуу конструкциялар “(s1 == NULL) ∧ (s2 == NULL)” жана “(s1 == NULL) | (s2 == NULL)" , көбүнчө колдонулган үлгүгө дал келбейт "(s1 == NULL) || (s2 == NULL)". Код ошондой эле "(-2 == rv)" (минус ката болгон) жана "BIO_puts(bp, ":") <= 0)" (ийгиликтүү аяктаганын текшерүү контекстинде) аномалияларды аныктады. функциясы "== 0" болушу керек).
  • cURLде сандык түргө ээ болгон “s->keepon” структуралык элементин колдонууда статикалык анализаторлор тарабынан аныкталбаган, бирок TRUE логикалык мааниси менен салыштырылган ката табылган.

ControlFlag 1.0 версиясынын өзгөчөлүктөрүнүн арасында Си тилинин стандарттык шаблондорун толук колдоо жана шарттуу “if” туюнтмаларында аномалияларды аныктоо мүмкүнчүлүгү бар. Мисалы, код фрагментин талдоодо “if (x = 7) y = x;” Система "эгер" оператору адатта сандык маанилерди салыштыруу үчүн "өзгөрмө == сан" конструкциясын колдоноорун аныктайт, андыктан "эгерде" туюнтмасындагы "өзгөрмө = сан" тамганын катасынан улам келип чыгышы ыктымал. Комплект GitHubдагы С тилинин бар репозиторийлерин жүктөп алып, аларды моделди куруу үчүн колдонууга мүмкүндүк берген скриптти камтыйт. Даяр моделдер да бар, алар дароо кодду текшерүүнү баштоого мүмкүндүк берет.

Source: opennet.ru

Комментарий кошуу