Скучна статия за проверка на OpenSSL
Не толкова отдавна в OpenSSL бе открита уязвимост, за която само мързеливите не говорят. Знам, че PVS-Studio не е в състояние да намери грешката, която води до тази уязвимост. Затова реших, че няма причина да напиша каквато и да е статия за OpenSSL. През последните дни имаше твърде много статии по тази тема. Получих обаче множество писма с молба да кажа дали PVS-Studio може да намери тази грешка. Отказах се и написах тази статия.

Проверка на OpenSSL
Накратко, уязвимостта, позволяваща достъп до данни на други хора, съществува в кода от около 2 години. През това време нито един анализатор на код не го е открил, въпреки че само мързеливият не е тествал тази библиотека.
Тествахме и OpenSSL. Ето бележка по тази тема: "Малко за OpenSSL". Открихме няколко неща, но изглежда нищо сериозно. Тези грешки вече са отстранени. Така че не беше напразно да проверя.
Не посочих дали проверихме OpenSSL, когато вече имаше грешка в Heartbleed или не. Във всеки случай знам, че PVS-Studio не може да открие такава грешка. По принцип е трудно да се открие. Проектът OpenSSL е прегледан и валидиран с различни инструменти и никой от тях не е намерил тази грешка. Например, не намерих грешка, лидер сред анализаторите на кодове на Coverity Scan. Бележки по този въпрос: „Сърдечно-кръвен и статичен анализ“, „Сърдечно-кръвен и статичен анализ (2)“.
Въпросът е, че такава грешка е много трудно да се намери чрез статичен анализ. Кодът е твърде объркващ. Трябва да вземете под внимание стойностите, съхранявани в паметта, трябва да разберете какво се крие зад явните преобразувания на типа и т.н. Дори на човек му е трудно да разбере какъв е проблемът. Тук статичните анализатори се провалят. Това не е недостатък в методологията за статичен анализ. Просто грешката е наистина трудна. Вероятно няма инструмент, който може да намери такъв дефект, ако преди това не е бил обучен да търси такива структури.
Моето лично мнение. Това е просто грешка, а не отметка. Инструментите за статичен анализ не могат да го открият, защото е сложен. Това е всичко.
Това можеше да завърши статията, но изобщо не би било интересно. Затова проверих OpenSSL отново, използвайки PVS-Studio. Не намерих нищо специално, но все пак, нека разгледаме някои части от кода.
Защо са толкова малко? Защото OpenSSL е качествен проект. Фактът, че в него е открита сериозна уязвимост, не означава, че кодът е ужасен. Мисля, че има много големи дупки в много приложения, те просто не се нуждаят от никого. Освен това проектът OpenSSL е валидиран с много инструменти.