Безопасность Drupal сайтов

7,536 views

Published on

Как сделать свой Drupal сайт более устойчивым к взлому. Обзор самых популярных атак и уязвимостей и советы как с ними бороться.

Published in: Technology
2 Comments
1 Like
Statistics
Notes
No Downloads
Views
Total views
7,536
On SlideShare
0
From Embeds
0
Number of Embeds
2,472
Actions
Shares
0
Downloads
40
Comments
2
Likes
1
Embeds 0
No embeds

No notes for slide

Безопасность Drupal сайтов

  1. 1. БезопасностьDrupal сайтов Фиделин Евгений, DrupalCamp Lviv 2012
  2. 2. Для чего взламывают сайты?● Сервер: ○ Получение доступа к закрытой информации на сайте (логины, пароли, email, ...) ○ Использование ресурсов сервера в своих целях (spam-рассылка, баннеры, редиректы, вредоносный код, ...)● Посетитель сайта: ○ Получение доступа к конфиденциальным данным посетителя (фишинг паролей, данных кредитных карт) ○ Использование ресурсов компьютера посетителя в своих целях (установка троянов, вирусов, ...)
  3. 3. Что нужно знать о безопасности?● Обеспечение безопасности - это постоянный процесс, а не разовые меры.● За безопасность отвечают все, кто имеет доступ к сайту.● Нужно следить за безопасностью не только Drupal, а всего ПО на сервере.● Поиск уязвимостей, их исправление и публикация - это хорошая практика.
  4. 4. ТОП-10 уязвимостей сайтов (owasp.org) Насколько Drupal сайты им подвержены Drupal Cервер МодульA1 SQL-injections 7% XA2 Cross-site scripting (XSS) 48% X XA3 Broken Authentication and 3% X Session ManagementA4 Insecure Direct Object References 8% XA5 Cross Site Request Forgery (CSRF) 10% XA6 Security Misconfiguration 12% X X XA7 Failure to Restrict URL Access 8% XA8 Unvalidated Redirects and Forwards ~ XA9 Insecure Cryptographic Storage ~ XA10 Insufficient Transport Layer Protection ~ X X X
  5. 5. A1. SQL-injectionНебезопасный код:db_query(SELECT nid FROM node WHERE user = . $_GET[user]);А что будет здесь?http://www.example.com/page?user=1;DELETE FROM users;В чем ошибка?● Нет фильтрации аргументов ● Нет псевдонимов таблицПравильные варианты:db_query(SELECT nid FROM {node} WHERE user = :user, array(:user => $_GET[user]);db_select(node, n)->fields(n, array(nid)) ->condition(uid, $_GET[user])->execute();
  6. 6. A2. Cross-site scripting Самая распространенная уязвимостьНе позволяйте размещать опасный код.1. Валидируйте введенные данные2. Защититесь от SQL-injection3. Определяйте тип данных4. Фильтруйте вывод данных в зависимости от их типа Created by Greg Knaddison http://crackingdrupal.com
  7. 7. A2. Cross-site scriptingФильтруем данные перед выводом Created by Greg Knaddison, Gabor Hojtsy http://drupalscout.com
  8. 8. A2. Cross-site scriptingУстойчивая уязвимость. Шаг 1 Created by Ben Jeavons http://drupalscout.com
  9. 9. A2. Cross-site scriptingУстойчивая уязвимость. Шаг 2 Created by Ben Jeavons http://drupalscout.com
  10. 10. A2. Cross-site scriptingУстойчивая уязвимость. Шаг 3 Created by Ben Jeavons http://drupalscout.com
  11. 11. A3. Broken Authentication and Session ManagementDrupal по-умолчанию защищен:● Авторизационные cookie не могут изменяться посетителями на стороне клиента● Авторизационные cookie не содержат логина, пароля, а только ID сессии.● Сессии и cookie пользователя уничтожаются и создаются заново при логине и логауте.● Сookie имеют уникальные имена для каждого сайта и доступны только в пределах домена
  12. 12. A4. Insecure Direct Object References A7. Failure to Restrict URL AccessDrupal имеет мощную систему проверки доступак любой странице и даже элементу страницы:● access callback в hook_menu()● user_access(administer nodes, $account);● node_access(edit, $node, $account);● $select->addtag(node_access);● Form API ○ проверяет данные на валидность. ○ позволяет указать доступ для каждого поля $form[f][#access] = TRUE;
  13. 13. A5. Cross Site Request Forgery (CSRF)Что будет, если разместить следующий код?<img src="user/logout" /><img src="node/10/delete" />Как защититься?● Для форм использовать Form API ○ Автоматически добавляет уникальный form_id и проверяет его валидность.● Для ссылок и AJAX без Form API использовать токены ○ при запросе добавлять query => array(token => drupal_get_token(my_id) ○ при обработке проверять if (drupal_valid_token($_GET[token], my_id))
  14. 14. A6. Security Misconfiguration Шаг 1. Настройки Drupal● Установите сложный пароль для админов.● Проверьте, кто имеет доступ к правам "administer ..."● Правильно настройте форматы ввода доступные обычным пользователям.● Не используйте формат ввода PHP!● Проверьте, какие типы файлов могут загружать пользователи.● Используйте CAPTCHA.● Отключите вывод сообщений об ошибках.● Удалите devel и все неиспользуемые модули.
  15. 15. A6. Security Misconfiguration Шаг 2. Дополнительные модули● Security review - проверка основных настроек ○ http://drupal.org/project/security_review● Hacked - проверка на изменение в исходных кодах модулей и тем ○ http://drupal.org/project/hacked● Coder и Secure code review - проверка модулей на качество кода и основные уязвимости. ○ http://drupal.org/project/coder ○ http://drupal.org/project/secure_code_review
  16. 16. A6. Security Misconfiguration Шаг 3. Настройки сервера● Проверьте права на запись файлов.● Проверьте, что сервер не выдает список файлов в папке.● Закройте доступ к phpMyAdmin.● Закройте доступ к бекапам БД.● Не используйте FTP - только SFTP или SSH.● Не используйте root пользователя в MySQL.● Убедитесь что ОС, PHP, сервер и др. имеют актуальные версии.● Вы уверены в безопасности ваших соседей?
  17. 17. A8. Unvalidated Redirects and ForwardsЧто будет, если разместить следующий код?http://example.com/redirect?destination=evil.comКак делать правильно?● Drupal позволяет делать редиректы только на локальные URL через GET параметр destination.● Для безопасного редиректа используйте drupal_goto() и $form[#redirect]
  18. 18. A9. Insecure Cryptographic StorageDrupal имеет надежную систему хранениясекретных данных:● Используется Portable PHP password для создания хешей паролей с солью user_hash_password().● При установке Drupal создает уникальный приватный ключ, который нужно использовать при шифровании данных drupal_get_private_key().● Механизм генерации паролей может быть расширен модулями.
  19. 19. A10. Insufficient Transport Layer ProtectionИспользуйте HTTPS для защиты особо важныхданных:● Drupal поддерживает работу через HTTPS● Используйте модуль Secure pages для защиты определенных страниц. ○ http://drupal.org/project/securepages● Используйте валидный SSL-сертификат
  20. 20. Безопасен ли Drupal? Да! Но люди совершают ошибки● Налаженный процесс поиска и исправления уязвимостей, в котором участвуют: ○ Security team ○ Сертифицированные организации ○ Каждый разработчик (http://drupal.org/node/101494)● Документация по обеспечению безопасности сайта: ○ http://drupal.org/security/secure-configuration● Модули, повышающие безопасность: ○ http://drupalscout.com/knowledge-base/contributed- modules-securing-your-drupal-site
  21. 21. Что нужно делать разработчику● Подпишитесь на рассылку Drupal security announcements● Регулярно обновляйте модули и ядро Drupal● Проводите код-ревью модулей на предмет уязвимостей: ○ http://drupal.org/security/writing-secure-code ○ http://drupalscout.com/knowledge-base ○ http://crackingdrupal.com/blog ○ https://www.owasp.org/images/0/0f/OWASP_T10_- _2010_rc1.pdf
  22. 22. Спасибо за внимание!Есть вопросы? Не откладывайте решение проблемс безопасностью - "потом" будет поздно. Фиделин Евгений eugene.fidelin@gmail.com Skype: eugene.fidelin facebook.com/eugene.fidelin

×