Расшифровка (для внутреннего пользования):
В настоящее время существует много статических анализаторов Java, как свободно распространяемых, так и коммерческих. Некоторые из них являются анализаторами общего назначения, некоторые – заточены специально для поиска уязвимостей в веб-приложениях. Мы бы хотели посмотреть, как и те и другие справляются с анализом реальных сложных веб-приложений. Фактически, мы хотим научиться сопоставлять статическому анализатору вектор его возможностей.
Трудность состоит в том, что качество решения многих задач статического анализа прямо пропорционально квалификации оператора. Например, когда для обнаружения определенного класса уязвимостей (или, в общем, неких свойств программы) оператор должен специальным образом аннотировать исходный код. Таким образом, возможности анализатора можно разделить на два класса – настраиваемые и нет. Ненастраиваемые возможности - это те возможности, на которые не может повлиять оператор. К примеру, умеет ли анализатор обрабатывать reflections в Java или двумерные массивы – это ненастраиваемая возможность анализатора.
Общая цель, которая стоит перед нами – это научиться сравнивать ненастраиваемые возможности, плюс получить представление о настраиваемых возможностях анализаторов, степени их изощренности, простоты использования и качества получаемого результата. Соответственно, для сравнения ненастраиваемых возможностей надо создать набор функциональных тестов и обосновать его.
Задачи, решаемые статическим анализатором, делятся на два вида: задачи по переводу исходного кода во внутреннее представление и задачи по анализу внутреннего представления (например, применение моделей уязвимостей). Есть мнение, что ненастраиваемые возможности – это возможности по переводу исходного кода во внутреннее представление. А весь дальнейший анализ уже зависит от оператора.
Scope of View: анализаторы Java, которые я скажу. Пока в списке Rational AppScan Build Edition, FindBugs, PMD, если получится достать Fortify SCA и Klocwork Truepath/Desktop.
Ожидаемый результат:
• набор функциональных тестов для статических анализаторов Java и его обоснование;
• результат прогона анализаторов на нем и интерпретация результатов;
• описание возможностей статических анализаторов по обнаружению уязвимостей в веб-приложениях.
Соответственно, в ходе работы потребуется определить все «грабли», которые встречаются статическому Java-анализатору на этапе перевода кода во внутреннее представление (циклы, динамическая память/указатели/сложные структуры данных, наследование и динамические методы, reflection, нити и т.д.). Эта информация как раз и ляжет в основу набора функциональных тестов.
Цель. Возможность обоснованного сравнения ненастраиваемых возможностей статических анализаторов Java. Описание возможностей статических анализаторов по обнаружению уязвимостей в веб-приложениях.
План работы.
- Theoretical Track первого семестра.
a. Структуры данных для статического анализа (AST, CFG, DFG) и алгоритмы их построения.
b. Задачи статического анализа, решаемые на этих структурах.
c. Модели уязвимостей, используемых при статическом анализе. - Practical Track первого семестра.
a. Научиться применять анализаторы из списка к real world веб-приложениям (их можно взять для начала из проекта NIST SATE), а так же к специальным функциональным тестам из http://suif.stanford.edu/~livshits/securibench/.
b. Описать опыт применения статических анализаторов (что декларируется в документации, а что есть на самом деле).
c. Сделать предположение о моделях уязвимостей, используемых анализаторами, сделать вывод относительно классов обнаруживаемых уязвимостей. - Второй семестр
a. Спроектировать набор функциональных тестов и обосновать проект.
b. Реализовать набор функциональных тестов и прогнать на нем статические анализаторы.
c. Проинтерпретировать результаты.
d. Написать текст курсовой.
1. Introduction to Compilers. http://www.cs.cornell.edu/courses/cs412 ... edule.html
2. Мучник. “Advanced Compiler Construction”.
3. Публикации проекта SATE.
4. Публикации проекта SAMATE в части статических анализаторов.