Аннотация
ВВЕДЕНИЕ 7
ГЛАВА 1. СРЕДСТВА И МОДЕЛИ ЗАЩИТЫ ЧУВСТВИТЕЛЬНЫХ ДАННЫХ. 9
1.1 Средства защиты чувствительных данных 9
1.2 Модели защищенных систем 19
1.3 Постановка задачи 24
1.4 Выводы по разделу 24
ГЛАВА 2. МОДЕЛЬ ЗАЩИТЫ ПРИЛОЖЕНИЯ НА ELECTRON ПРИ
РАСПРЕДЕЛЕННОМ ВЫПОЛНЕНИИ КОДА 26
2.1 Построение Electron приложения 26
2.2 Модель защиты системы 27
2.3 Выводы по разделу 29
ГЛАВА 3. ПРОГРАММНАЯ РЕАЛИЗАЦИЯ 30
3.1. Поиск небезопасных источников ввода и критических каналов вывода 30
3.2. Разметка кода пользователя 31
3.3 Пример работы программы 34
3.4 Выводы по разделу 36
ЗАКЛЮЧЕНИЕ 37
БИБЛИОГРАФИЧЕСКИЙ СПИСОК 38
ПРИЛОЖЕНИЕ 1. ОПИСАНИЕ ПРОГРАММЫ 40
ПРИЛОЖЕНИЕ 2. РУКОВОДСТВО ПОЛЬЗОВАТЕЛЯ 41
ПРИЛОЖЕНИЕ 3. СПИСОК ИСТОЧНИКОВ И КАНАЛОВ ВЫВОДА 43
ПРИЛОЖЕНИЕ 4. ИСХОДНЫЙ ТЕКСТ ПРОГРАММЫ 44
JavaScript — это язык программирования, который дает возможность реализовывать сложное поведение веб-страницы. Веб-страница не только отображает статическое содержимое, но и своевременно отображает обновление контента, выводит интерактивные карты, 2D/3D анимацию, прокручивает видео и т.д. Преимущества этого языка подтверждает высокий процент использования компаниями для разработки не только браузерных веб-приложений, в настоящее время он используется для создания десктопных приложений под различные платформы - Windows, Mac и т.п. Данная возможность используется благодаря созданию таких сред выполнения кода на JavaScript как Node.js.
Node.js представляет среду выполнения кода на JavaScript, которая построена на основе движка JavaScript Chrome V8, который позволяет транслировать вызовы на языке JavaScript в машинный код. Node.js прежде всего предназначен для создания серверных приложений на языке JavaScript. Но в рамках данной работы интересует возможность кроссплатформенной разработки десктопных приложений. Самые распространенные приложения, написанные с помощью Node.js - это мессенджер Slack, а также такие популярные редакторы кода, как GitHub Atom и Visual Studio Code. Для создания десктопных приложений на базе Node.js и веб-технологий доступны два варианта: NW.js (ранее известный, как node-webkit) и Electron (ранее - Atom Shell)[1]. Оба этих фреймворка являются проектами с открытым исходным кодом и поддерживаются такими крупными компаниями, как Intel и GitHub. Принципиальным различием между ними является парадигма выполнения приложения. В NW.js точкой входа в приложение является веб-страница. Указывается URL основной страницы в файле package.json и она открывается как главное окно приложения. В Electron точка входа — это программа на NodeJS. NW.js загружает указанную HTML-страницу и эта страница получает доступ к контексту Node.js. Поэтому большинство приходит к мнению, что NW.js использует более браузеро-ориентированный подход. Electron, с другой стороны, имеет более NodeJS-ориентированный подход. Он запускает среду выполнения Node.js, которая получает возможность открывать окна, в которые можно затем загружать веб-страницы. В остальном, различия существенны только по отношению к разрабатываему ПО.
В рамках данной работы концепция этого фреймворка интересует как некое основание для создания приложений с распределенным выполнением кода.
В работе предлагается решение задачи автоматизированного поиска возможных недоверенного источника данных, всевозможных точек модификации чувствительной пользовательской информации, а также создание модуля разметки кода пользователя. Недоверенные источники данных - это, в первую очередь узкое место, поскольку злоумышленники могут реализовать такой достаточно распространенный тип уязвимости как Cross Site Scripting (далее - XSS) [2;29], который дает возможность передать и выполнить сторонний JavaScript-код в среде выполнения кода от имени пользователя. Специфика такого типа уязвимостей заключается в возможности реализации ошибки в коде на клиентской стороне приложения, интерактивного интерфейса взаимодействия с пользователем.
Влияние на контекст выполнения JS-кода может произойти из-за небезопасного использования кода страницы, выполняющей визуализацию интерфейса взаимодействия с программой пользователей со своими методами и свойствами. К таким методам относятся вызовы, предназначенные для модификации содержимого страницы в интерактивном режиме (например, document.write) или для выполнения JS-кода на лету (например, eval).
Целью данной работы является разработка автоматизированной разметки исходного кода пользователя согласно клиент-серверной архитектуре на платформе Electron.
В работе было реализовано средство для автоматизированного поиска возможных небезопасных источников данных и критических каналов вывода, создан модуль разметки кода пользователя.
В начале работы был проведен анализ анализаторов кода и средств языков, которые исследуют веб-приложения в контексте защиты чувствительных данных. Ведущие коммерческие статические анализаторы умеют строить представления веб-приложений, в которых отражены межмодульные зависимости. Соответственно, применение анализа кода на грязные данные к такому представлению дает хороший результат - средство добавляет возможность обнаруживать межмодульные уязвимости. Но Taint-анализ предназначен только для обнаружения уязвимостей, возникающих из-за некорректной обработки пользовательских данных. При этом данный тип уязвимостей имеет целый ряд ограничений, из-за которых мультиязычные анализаторы, реализующие её поиск, заведомо не могут иметь 100% эффективность. К тому же большинство из них не являются приложениями с открытым кодом, нельзя сказать с полной уверенностью, что они учитывают особенности отдельных языков из представленных.
Далее был произведен обзор широко применяющихся в настоящее время методов защиты информации и моделей информационной защищенности. Приведены концептуальные основы и особенности работы политики Белла- ЛаПадулы и моделей невыводимости и невмешательства. А также сделан вывод о том, что рассмотрение защиты чувствительной информации при распределенном выполнении кода, построенная на основе изложенных в работе моделей в отдельности нецелесообразно. И анализ и обеспечение ее безопасности необходимо проводить в соответствии с некоторым смешением представленных моделей.
В ходе работы был рассмотрен принцип создания десктопных приложений на базе Electron, фреймворка, в рамках которого предложена математическая модель защиты чувствительной информации при распределенном выполнении кода. Дальнейшее применение предложенной модели позволило определить области программы пользователя, требующие защиту и определить средство защиты на каждом участке, где существуют возможные пути проникновения в систему. В основу модели положены: концептуальные основы и особенности работы политики Белла-ЛаПадулы и моделей невыводимости и невмешательства.
В работе описан перечень потенциальных небезопасных методов и свойств DOM API, а также фреймфорка Electron, и приведен пример работы реализации их поиска в приложении, созданном с помощью Node.js и Electron. Также согласно разработанной модели защиты системы реализована разметка кода пользователя. Проанализировано реальное приложение на Electron, и сделан вывод о найденных уязвимостях.
1. Balzarotti, D. Multi-module vulnerability analysis of web-based applications / Davide Balzarotti, Marco Cova, Viktoria V. Felmetsger, Giovanni Vigna — CCS '07 Proceedings of the 14th ACM conference on Computer and communications security, 2007. — С. 25-35
2. Andrew Powell-Morse, Ruby Exception Handling: SecurityError, [Электронный
ресурс]. — Режим доступа: https://airbrake.io/blog/ruby-exception-
handling/securityerror, свободный — Дата обращения 28.12.2016
3. D Foy, B. Mastering Perl / Brian D Foy — O'Reilly Media, 2009. — С. 32-36.
4. Robert, K. CGI Programming with Perl / Kirrily Robert, Paul Fenwick, Jacinta Richardson — O'Reilly Media, 2012. — С. 206-209.
5. HP Fortify Static Code Analyzer Custom Rules Guide — Hewlett- Packard Development Company, 2014. — С. 19-22.
6. Девянин П.Н. Модели безопасности компьютерных систем: Учеб. пособие / П.Н. Девянин. - М.: Изд.центр «Академия», 2005. - 144 с.
7. Гайдамакин Н.А. Разграничение доступа к информации в компьютерных системах / Н.А. Гайдамакин - Екатеринбург: изд-во Урал. Ун-та, 2003. - 328 с.
8. Зегжда Д.П., Ивашко А.М. Основы безопасности информационных систем / Д.П. Зегжда, А.М. Ивашко - М.:Горячая линия - Телеком, 2000. - 452с.
9. Хоффман, Дж. Современные методы защиты информации / Дж. Хоффман - М.: Сов. радио, 1980. - 264 с.
10. Jasim, M. Building Cross-Platform Desktop Applications with Electron / Muhammed Jasim - Paperback - April 28, 2017.
11. Построение Electron приложения. Введение, [Электронный ресурс]. — Режим доступа: https://canonium.com/articles/electron-desktop-app-introduction, свободный — Дата обращения 21.11.2017.
12. Хэррон, Д. «Node.js. Разработка серверных веб-приложений в JavaScript»: Пер. с англ. Слинкина А.А. / Дэвид Хэррон - М.: ДМК Пресс, 2012. - 144 с.
13. Крейн, Д. Ajax в действии / Дейв Крейн, Эрик Паскарелло, Даррен Джеймс. - Диалектика, 2006 г. - 649 с.
14. Три полных пэ. Python, PHP или Perl? Выбираем последнюю букву в слове "LAMP" [Электронный ресурс]: журн. Хакер. - Электрон. журн. - режим доступа к журн.: https://xakep.ru/pdf/xa/127
15. Mikowski M., Powell J. Single Page Web Applications. Manning, 2014....29