Дмитрий Козлов / Александр Мищенко, 3 курс, dbms-sem

На этом форуме публикуются и уточняются постановки задач студентам, а также отслеживается ход их выполнения

Модератор: staff

Закрыто
Бычков Иван
Аспирант
Сообщения: 179
Зарегистрирован: 23 сен 2008 01:19 pm

Дмитрий Козлов / Александр Мищенко, 3 курс, dbms-sem

Сообщение Бычков Иван »

Тема работы

Статический анализ безопасности web-приложений, построенных с помощью скриптовых языков, на уровне байт-кода.

Актуальность

В курсовых работах Г. Климова уже исследовалась тематика анализа безопасности web-приложений, построенных с помощью скриптовых языков. Этот анализ проводился на уровне исходного кода с построением AST, CFG, Call Graph, что получилось очень трудоемко. В тоже время работы в University of Maryland по анализу Java-программ показали, что на уровне байт-кода проводить анализ существенно проще, так как там очень небольшой ассемблер и стековая машина. В данной работе делается попытка создания анализатора байт-кода для языка Python с целью обнаружения уязвимостей web-приложений.

Цель работы

Есть два варианта: задача-минимум и задача-максимум. Минимум: построить анализатор байт-кода Python, который осуществляет вывод типов. Максимум: сделать анализ не только типов, но и анализ безопасности (например, taint-анализ).

План работы

1. Изучить литературу по анализу программ, сделать доклад по этой теме и написать краткое описание для текста курсовой.
2. Сделать обзор существующих анализаторов исходного кода/байт-кода приложений на Pyhton.
3. Сделать реализацию, используя результаты обзора.
4. Провести экспериментальное исследование и апробацию на реальных web-приложениях.


Ожидаемые результаты
1. Обзор.
2. Реализация.
3. Результаты экспериментального исследования.
Александр Мищенко
Выпускник
Сообщения: 1
Зарегистрирован: 09 сен 2008 12:21 am

Сообщение Александр Мищенко »

Отчет о научной работе за 5-й семестр

Мищенко Александр Игоревич, группа № 322
научные руководители: Козлов Д.Д., Коннов И.В.

Статический анализ программ на языке python и определение типов переменных

Для решения этой задачи необходимо решить следующие подзадачи:
  • 1.Изучить bytecode языка python;
    2.Исследовать уже существующие алгоритмы статического анализа программ, написанных на сильно-типизированных языках
    3.Разработать метод определения типов переменных для программ, написанных на языке python
    4.Разработать и реализовать требуемый анализатор.
Обоснование актуальности задачи

Определение типов переменных для программ на языке python необходим:
  • 1.Для реализации возможности автодополнения;
    2.Для последующего статического анализа.
Что сделано
  • 1.Прочитаны первые 8 глав “Advanced Compiler Design and Implementation”, после этого было решено, что только читать – не особо интересно, и надо реализовывать начальные этапы;
    2.Реализован модуль, который выполняет построение CFG (control flow graph) для кода на языке python – происходит анализ функций как независимых компонент:
    Анализируются инструкции байт-кода, а именно:
    • 1.выделяются линейные участки кода(вершины графа)
      2.проставляются связи(ребра) по обычным переходам
      3.добавляются ребра, соответствующие явным выбросам исключений с помощью raise и/или возможным выбросам исключений внутри каждого из вызовов функций.
    3.Вывод построенного CFG возможен в двух формах:
    • 1.в виде графа, в вершинах которого полная информация о линейном участке кода,
      2.в вершинах только номер линейного участка, а в соответствующем текстовом файле полная информация о линейных участках.
    Визуализация графа происходит с помощью модуля pygraphiz.
Проблемы
  • 1.Не разбирался еще с:
    • 1.конструкция with и контекстные менеджеры;
      2.yield (=> все генераторы) – трудность заключается в том, что в данном случае появляется фактически несколько точек входа в функцию и каждая в идеале имеет свой начальный контекст(восстановление состояния).
    2.Cовсем непонятно, как можно предсказывать исключения, которые выбрасываются интерпретатором в случае какой-либо ошибки, например, деление на 0 или нехватка памяти.
Литература
  • 1.http://docs.python.org/
    2.Steven Muchnick, “Advanced Compiler Design and Implementation”, Morgan Kaufmann, 1997;
    3.Flemming Nielson, Hanne Riis Nielson, Chris Hankin, “Principles of Program Analysis”, Springer, 2005;
    4.Michael I. Schwartzbach, “Lecture Notes on Static Analysis”.
Закрыто