Безопасность в ASP.NET приложениях ДокладчикMicrosoft
Основа безопасности Web-приложений АутентификацияАвторизацияАудит Сохраннении конфиденциальности Доступность
Что надо знать о безопасности Web-приложений Что защищать Архитектура Web-приложений и сервисов Устройство платформы ASP.NET Инфраструктура (IIS) От чего защищать Основные виды атак на Web-приложения Как защищать Методы защиты
Безопасность и разработка Анализ требований Проектирование Кодирование Ревью архитектуры Ревью кода Тестирование Развертывание Сопровождение Ревью развертывания Part II. Threat modeling and Designing Secure Web Applications Part III. Building Secure Web Applications Part V. Accessing your security Part IV. Securing your Network, Host and Application Improving Web Application Security: Threats and Countermeasures
Методы нападения Исследование и оценка Проникновение Повышение привелегий Сохранение доступа (после проникновения) Отказ в обслуживании
Принципы безопасности Уменьшение опасной области Наименьшие привилегии Не доверять вводу пользователя Проверка на ранней стадии Безопасно обрабатывать сбои Защита наиболее слабого звена Безопасность по умолчанию Запретить неиспользуемое
Архитектура Web-приложений Бизнес-логика База Данных Сервисы Уровень представления Web-сервис «Тонкий» клиент«Толстый» клиент HTTPSOAP
ASP.NET Internet Information Services 5.0 inetinfo.exe Web-приложение Изолированный/Смешанный режим dllhost.exe Web-приложение Internet Information Services 6.0 inetinfo.exe Пул приложений w3p.exe Приложение Windows Server 2000 Windows Server 2003
ASP.NET Взаимодействие IIS и ASP.NET IIS Клиент Старт ASP.NET приложения Access Denied Права пользователя Access Granted IP адрес и домен? Аутентификация? Нет Да Нет Да ASP.NET имперсонация? Нет Проверка доступа? (NTFS) Нет Права процесса Да
Что предоставляет IIS АутентификацияAnonymousBasic Windows Integrated СертификатАвторизацияNTFS Ограничение по домену и IP-адресу Изоляция приложений (App pool) SSL
Что предоставляет ASP.NET АутентификацияFormsPassport Windows (IIS) Собственный вариант АвторизацияURLРоли Доступ к коду Изоляция приложений (AppDomain)
Безопасность доступа к коду Использование web.config
Процесс Взаимодействие с базой данных СоединениеПараметры Бизнес-логика База Данных Сервисы Поток
Бизнес-логика Проверка параметров АудитИсключения Наименьшие привилегии Бизнес-логика Уровень представления Web-сервис
Взаимодействие с клиентом SSLАутентификация Не доверять клиенту! Бизнес-логика Уровень представления Web-сервис «Тонкий» клиент«Толстый» клиент HTTPSOAP
Два типа атак Уровня системы Уязвимость Web-серверов Переполнение буфера (Code Red/Nimda) Как бороться: Установка обновлений! Уровня приложения Уязвимость в коде Как бороться: Безопасный код!
SQL Параметры Нефильтрованным ввод/вывод Поля форм Строки запросов Могут вызвать серьезные проблемы
Public Sub OnLogon(ByVal Src As Object, ByVal E As EventArgs) Dim conn As New _ SqlConnection("server=(local);database=formsdb;uid=sa;pwd;") Dim query As String = _ String.Format("SELECT count(*) FROM userinfo WHERE _ username='{0}' AND password='{1}'", _ txtUser.Text, txtPassword.Text) Dim cmd As New SqlCommand(query, conn) conn.Open() Dim rdr As SqlDataReader = cmd.ExecuteReader() Try If rdr.HasRows() Then IssueAuthenticationTicket() Else TryAgain() End If Finally rdr.Close() conn.Close() End Try End Sub Пример
Хакер: Username: hacked' or '1' = 1 Password: hacked' or '1' = 1 SELECT count(*) FROM userinfo WHERE username = hacked' or '1' = '1' and password = hacked' or '1' = '1' Что не так? Ожидается: Username: dima Password: SELECT count(*) FROM userinfo WHERE username=dima and password=123456
Демонстрация SQL параметры Демонстрация SQL параметры
Защита Правило #1: Проверка ввода Правило #2: Хранимые процедуры Параметризированный SQL - OK Правило #3: Никогда (НИКОГДА!) не использовать sa
Кросс-сайт скриптинг (XSS) Нефильтрованный ввод отображаемый на странице Поля форм Строки запросов
Как XSS работает … Запрос содержит JavaScript который перенаправляет на другую страницу и передает туда cookie URL указывает на атакуемый сайт
Демонстрация Кросс-сайт скриптинг Демонстрация Кросс-сайт скриптинг
Как бороться Правило #1: Проверка ввода Ограничение диапазона значений,, и т.п.,, и т.п. Правило #2: HTML-кодировать ввод " " -> "<script>" Server.HtmlEncode ASP.NET 1.1 встроенная ValidateRequest=true
Повышение привилегий Если процесс имеет высокие привилегии Если удалось попасть на сайт Например, используя переполнение буфера Если выполняется зловредный код
Демонстрация Повышение привилегий в ASP.NET Демонстрация Повышение привилегий в ASP.NET
Web-приложения Основные рекомендации Проверка ввода на стороне сервера Учетная запись для доступа к ресурсам Защита имени пользователя/пароля Корректная обработка ошибок и сбоев Уровень модульности авторизации User & Web элементы управления в разных сборках Код доступа к ресурсам в отдельных сборках
Будущее Веб-приложения Membership API Login, LoginStatus, LoginView, PasswordRecovery Role Manager Веб-сервисы Web Services Enhancement 2.0 (WSE 2.0) Реализация WS-Security Indigo Доступ к данным в Yukon CLR внутри сервера БД Политика паролей
Ресурсы OpenHack us/dnnetsec/html/openhack.asp us/dnnetsec/html/openhack.asp us/dnnetsec/html/openhack.asphttp://msdn.microsoft.com/security/