В тестах 50 популярных веб-приложений, написанных с использованием Ruby on Rails, система обнаружила 23 ранее недиагностированных недостатка безопасности, и на анализ любой данной программы потребовалось не более 64 секунд.Исследователи представят свои результаты на Международной конференции по разработке программного обеспечения в мае.По словам Дэниела Джексона, профессора кафедры электротехники и компьютерных наук, новая система использует метод, называемый статическим анализом, который пытается описать в очень общем виде, как данные проходят через программу.
«Классический пример этого — если вы хотите провести абстрактный анализ программы, которая манипулирует целыми числами, вы можете разделить целые числа на положительные целые числа, отрицательные целые числа и ноль», — объясняет Джексон. Затем статический анализ будет оценивать каждую операцию в программе в соответствии с ее влиянием на знаки целых чисел.
Добавление двух положительных результатов дает положительный результат; добавление двух отрицаний дает отрицательный результат; умножение двух отрицаний дает положительный результат; и так далее.«Проблема в том, что это не может быть полностью точным, потому что вы теряете информацию», — говорит Джексон. «Если вы сложите положительное и отрицательное целое число, вы не знаете, будет ли ответ положительным, отрицательным или нулевым. Большая часть работы по статическому анализу сосредоточена на попытках сделать анализ более масштабируемым и точным, чтобы преодолеть такие виды проблемы."
Однако с веб-приложениями цена за точность непомерно высока, говорит Джексон. «Анализируемая программа просто огромна», — говорит он. «Даже если вы написали небольшую программу, она стоит на огромном здании из библиотек, надстроек и фреймворков. Поэтому, если вы посмотрите на что-то вроде веб-приложения, написанного на таком языке, как Ruby on Rails, если вы попытаетесь выполнить обычную статическую анализ, вы обычно попадаете в это огромное болото. И это делает его действительно невозможным на практике ».Это огромное здание библиотек, однако, также дало Джексону и его бывшему студенту Джозефу Ниа, который закончил Массачусетский технологический институт прошлой весной и сейчас работает постдоком в Калифорнийском университете в Беркли, способ сделать статический анализ программ, написанных на Ruby on Rails практичен.
Библиотека — это сборник кода, который программисты склонны использовать снова и снова. Вместо того, чтобы переписывать одни и те же функции для каждой новой программы, программист может просто импортировать их из библиотеки.Ruby on Rails — или Rails, как его называют для краткости — имеет особенность определения даже самых основных операций в библиотеках. Каждое добавление, каждое присвоение определенного значения переменной импортирует код из библиотеки.
Почти переписал эти библиотеки так, чтобы операции, определенные в них, описывали их собственное поведение на логическом языке. Это превращает интерпретатор Rails, который преобразует высокоуровневые программы Rails в машиночитаемый код, в инструмент статического анализа.
В библиотеках Near запуск программы Rails через интерпретатор дает формальное построчное описание того, как программа обрабатывает данные.В своей докторской работе Ниа использовал этот общий механизм для создания трех различных отладчиков для приложений Ruby on Rails, каждый из которых требовал разной степени участия программиста.
В статье, описанной в новой статье, которую исследователи называют Space, оцениваются процедуры доступа к данным программы.Почти идентифицировал семь различных способов, которыми веб-приложения обычно управляют доступом к данным. Некоторые данные общедоступны, некоторые доступны только для пользователей, которые в настоящее время вошли в систему, некоторые являются частными для отдельных пользователей, некоторые пользователи — администраторы — имеют доступ к отдельным аспектам всех данных и так далее.
Для каждого из этих шаблонов доступа к данным Near разработала простую логическую модель, которая описывает, какие операции пользователь может выполнять с какими данными и при каких обстоятельствах. На основе описаний, созданных взломанными библиотеками, Space может автоматически определить, соответствует ли программа этим моделям.
Если этого не произойдет, скорее всего, это проблема безопасности.Использование Space требует, чтобы кто-то, имеющий доступ к коду приложения, определил, какие программные переменные и функции соответствуют каким аспектам моделей Near. Но это не является обременительным требованием: Ниа смог отобразить соответствия для всех 50 проверенных им приложений.
И это сопоставление должно быть даже проще для программиста, вовлеченного в разработку приложения с самого начала, вместо того, чтобы приходить к нему извне, как это сделал Near.
