• О проекте
  • Услуги
  • Заказать услугу
  • Новости
  • Блог
  • Глоссарий
  • Контакты
  • Новости

    Хакеры атакуют защищенные приложения через бреши в языках программирования

    На событии Black Hat Europe, прошедшем на прошлой неделе, представили результаты исследования скрытых угроз в интерпретируемых языках программирования. Выяснилось, что именно они приводят к взлому защищенных приложений.

    Специалисты ИБ хорошо знают, что в любом защищенном приложении могут содержаться скрытые уязвимости, а причиной их существования являются «пробелы» в безопасности языка программирования, на котором приложение написано. Для изменения поведения программ киберпреступники часто пользуются уязвимостями самого языка. Из этого следует, что такие приложения на самом деле защищены ровно на столько, насколько это позволяет лежащий в основе язык программирования.

    Под интерпретируемыми принято понимать языки, код программы в которых исполняется при помощи интерпретатора (специальной программы). Языки такого типа отличаются от компилируемых, ведь в последних код программы для выполнения ЦП преобразовывается в машинный код.

    Исследователи с помощью фаззинга протестировали 5 популярных языков, в список вошли Ruby, JavaScript, Python, PHP и Perl. При помощи фаззинга можно обнаружить повреждение памяти, зависание, переполнение буфера, проблемы с шифрованием, экстренное завершение работы и прочие дефекты. Ряд проблем возникает зачастую не из-за недостаточной оптимизации кода, а из-за брешей в безопасности языков.

    Фаззингом принято считать технику тестирования ПО, которая заключается в передаче на вход приложению неожиданных, случайных либо заведомо неправильных данных. Фаззинг чаще всего выполняется в полуавтоматическом или автоматическом режиме. Суть проверки состоит в том, что разработчик никогда не знает, какую информацию будет использовать его протокол или приложение, поэтому важно проверить максимальное количество разнообразных вариантов. Если говорить о программных интерфейсах, на вход которых передают данные, то это: сетевые порты, файлы и API.

    В рамках исследования применялся фаззер XDiFF, разработанный специально для тестирования принципа работы и структуры языков программирования.

    Экспертам удалось выяснить следующее:

    1. Функция typemaps в Perl дает возможность выполнить код, как eval();
    2. Выполнение команд операционной системы возможно при помощи незадокументированных переменных локальной среды и методов в Python;
    3. На функции, которая не была разработана для удаленного выполнения кода, JRuby делает обратное, то есть выполняет код удаленно;
    4. Для выполнения команд в удаленном режиме может применяться константа PHP;
    5. NodeJS передает сообщения об ошибке, которые частично раскрывают содержимое файлов.