SlideShare a Scribd company logo
Безопасность
Drupal сайтов


 Фиделин Евгений, DrupalCamp Lviv 2012
Для чего взламывают сайты?
● Сервер:
  ○ Получение доступа к закрытой информации на сайте
    (логины, пароли, email, ...)
  ○ Использование ресурсов сервера в своих целях
    (spam-рассылка, баннеры, редиректы, вредоносный
    код, ...)


● Посетитель сайта:
  ○ Получение доступа к конфиденциальным данным
    посетителя (фишинг паролей, данных кредитных
    карт)
  ○ Использование ресурсов компьютера посетителя в
    своих целях (установка троянов, вирусов, ...)
Что нужно знать о безопасности?
● Обеспечение безопасности - это постоянный
  процесс, а не разовые меры.
● За безопасность отвечают все, кто имеет
  доступ к сайту.
● Нужно следить за безопасностью не только
  Drupal, а всего ПО на сервере.
● Поиск уязвимостей, их исправление и
  публикация - это хорошая практика.
ТОП-10 уязвимостей сайтов (owasp.org)
     Насколько Drupal сайты им подвержены
                                                    Drupal   Cервер Модуль
A1    SQL-injections                          7%                      X
A2    Cross-site scripting (XSS)              48%     X               X
A3    Broken Authentication and
                                              3%                      X
      Session Management
A4    Insecure Direct Object References       8%                      X
A5    Cross Site Request Forgery (CSRF)       10%                     X
A6    Security Misconfiguration               12%     X        X      X
A7    Failure to Restrict URL Access          8%                      X
A8    Unvalidated Redirects and Forwards       ~                      X
A9    Insecure Cryptographic Storage           ~                      X
A10 Insufficient Transport Layer Protection    ~      X        X      X
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();
A2. Cross-site scripting
     Самая распространенная уязвимость

Не позволяйте размещать опасный код.
1.   Валидируйте введенные данные
2.   Защититесь от SQL-injection
3.   Определяйте тип данных
4.   Фильтруйте вывод данных в зависимости от их типа




                                       Created by Greg Knaddison http://crackingdrupal.com
A2. Cross-site scripting
Фильтруем данные перед выводом




                      Created by Greg Knaddison, Gabor Hojtsy http://drupalscout.com
A2. Cross-site scripting
Устойчивая уязвимость. Шаг 1




                           Created by Ben Jeavons http://drupalscout.com
A2. Cross-site scripting
Устойчивая уязвимость. Шаг 2




                           Created by Ben Jeavons http://drupalscout.com
A2. Cross-site scripting
Устойчивая уязвимость. Шаг 3




                           Created by Ben Jeavons http://drupalscout.com
A3. Broken Authentication and
 Session Management
Drupal по-умолчанию защищен:
● Авторизационные cookie не могут изменяться
  посетителями на стороне клиента
● Авторизационные cookie не содержат логина,
  пароля, а только ID сессии.
● Сессии и cookie пользователя уничтожаются
  и создаются заново при логине и логауте.
● Сookie имеют уникальные имена для каждого
  сайта и доступны только в пределах домена
A4. Insecure Direct Object References
 A7. Failure to Restrict URL Access
Drupal имеет мощную систему проверки доступа
к любой странице и даже элементу страницы:
● 'access callback' в hook_menu()
● user_access('administer nodes', $account);
● node_access('edit', $node, $account);
● $select->addtag('node_access');
● Form API
  ○ проверяет данные на валидность.
  ○ позволяет указать доступ для каждого поля
    $form['f']['#access'] = TRUE;
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'))
A6. Security Misconfiguration
 Шаг 1. Настройки Drupal

● Установите сложный пароль для админов.
● Проверьте, кто имеет доступ к правам
  "administer ..."
● Правильно настройте форматы ввода
  доступные обычным пользователям.
● Не используйте формат ввода PHP!
● Проверьте, какие типы файлов могут
  загружать пользователи.
● Используйте CAPTCHA.
● Отключите вывод сообщений об ошибках.
● Удалите devel и все неиспользуемые модули.
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
A6. Security Misconfiguration
 Шаг 3. Настройки сервера

● Проверьте права на запись файлов.
● Проверьте, что сервер не выдает список
  файлов в папке.
● Закройте доступ к phpMyAdmin.
● Закройте доступ к бекапам БД.
● Не используйте FTP - только SFTP или SSH.
● Не используйте root пользователя в MySQL.
● Убедитесь что ОС, PHP, сервер и др. имеют
  актуальные версии.
● Вы уверены в безопасности ваших соседей?
A8. Unvalidated Redirects and
  Forwards
Что будет, если разместить следующий код?
http://example.com/redirect?destination=evil.com


Как делать правильно?
● Drupal позволяет делать редиректы только на
  локальные URL через GET параметр
  destination.
● Для безопасного редиректа используйте
  drupal_goto() и $form['#redirect']
A9. Insecure Cryptographic Storage
Drupal имеет надежную систему хранения
секретных данных:
● Используется Portable PHP password для
  создания хешей паролей с солью
  user_hash_password().
● При установке Drupal создает уникальный
  приватный ключ, который нужно
  использовать при шифровании данных
  drupal_get_private_key().
● Механизм генерации паролей может быть
  расширен модулями.
A10. Insufficient Transport Layer
 Protection
Используйте HTTPS для защиты особо важных
данных:
● Drupal поддерживает работу через HTTPS
● Используйте модуль Secure pages для
  защиты определенных страниц.
  ○ http://drupal.org/project/securepages
● Используйте валидный SSL-сертификат
Безопасен ли 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
Что нужно делать разработчику
● Подпишитесь на рассылку 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
Спасибо за внимание!
Есть вопросы?

   Не откладывайте решение проблем
с безопасностью - "потом" будет поздно.



             Фиделин Евгений
             eugene.fidelin@gmail.com
             Skype: eugene.fidelin
             facebook.com/eugene.fidelin

More Related Content

PDF
Е. Фиделин Безопасность Drupal сайтов
PPTX
Application security? Firewall it!
PPT
Безопасность веб-приложений. Так ли опасна виртуальная угроза?
PPTX
PHDays 2012: Future Now
PPT
Информационная безопасность и web-приложения
PPTX
Тестирование на проникновение в сетях Microsoft
PDF
Максим Кочкин (Wamba)
PPTX
Тестирование на проникновение в сетях Microsoft (v.2)
Е. Фиделин Безопасность Drupal сайтов
Application security? Firewall it!
Безопасность веб-приложений. Так ли опасна виртуальная угроза?
PHDays 2012: Future Now
Информационная безопасность и web-приложения
Тестирование на проникновение в сетях Microsoft
Максим Кочкин (Wamba)
Тестирование на проникновение в сетях Microsoft (v.2)

What's hot (20)

PPTX
История из жизни. Демонстрация работы реального злоумышленника на примере ата...
PDF
Pt devteev-risspa
PPTX
Атаки на web-приложения. Основы
PPTX
Услуги PT для банков
PPTX
Как взламывают сети государственных учреждений
PPTX
Истории из жизни. Как взламывают сети крупных организаций.
PPTX
Типовые проблемы безопасности банковских систем
PPTX
Безопасность сессий в веб-приложениях
PPT
Введение в тему безопасности веб-приложений
PPT
Анализ защищенности Web-приложений, выявление уязвимостей в реальных условиях
PPTX
Целевые атаки: прицелься первым
KEY
Securing Rails Applications
PPTX
Типовые уязвимости систем ДБО
PDF
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
PPTX
разработка безопасного кода
PPTX
Демонстрация атаки на ДБО
PPTX
Безопасность сессий в веб-приложениях: практическое применение
PDF
Risspa domxss
PPTX
Тестирование уязвимостей веб приложений
PDF
Почему хакеры выбирают WordPress. WordCamp 2017, Moscow.
История из жизни. Демонстрация работы реального злоумышленника на примере ата...
Pt devteev-risspa
Атаки на web-приложения. Основы
Услуги PT для банков
Как взламывают сети государственных учреждений
Истории из жизни. Как взламывают сети крупных организаций.
Типовые проблемы безопасности банковских систем
Безопасность сессий в веб-приложениях
Введение в тему безопасности веб-приложений
Анализ защищенности Web-приложений, выявление уязвимостей в реальных условиях
Целевые атаки: прицелься первым
Securing Rails Applications
Типовые уязвимости систем ДБО
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
разработка безопасного кода
Демонстрация атаки на ДБО
Безопасность сессий в веб-приложениях: практическое применение
Risspa domxss
Тестирование уязвимостей веб приложений
Почему хакеры выбирают WordPress. WordCamp 2017, Moscow.
Ad

Viewers also liked (9)

PPT
Работа с материалами (nodes) в Drupal 7
PPT
Работа с Views в Drupal 7
PPT
Фичи н-н-нада? Или почему стоит использовать модуль Features.
PDF
UX-Vision for the next TYPO3 CMS
PPTX
1С-Битрикс: Интерактивная карта объектов
PPTX
«1С-Битрикс: Управление сайтом» 15.5
PPT
Обгони конкурентов: лучшие технологии борьбы за покупателя в Интернете
PDF
Новинки «1С-Битрикс: Управление сайтом» 16.5
PPTX
Современные технологии сайтостроения для решения бизнес-задач
Работа с материалами (nodes) в Drupal 7
Работа с Views в Drupal 7
Фичи н-н-нада? Или почему стоит использовать модуль Features.
UX-Vision for the next TYPO3 CMS
1С-Битрикс: Интерактивная карта объектов
«1С-Битрикс: Управление сайтом» 15.5
Обгони конкурентов: лучшие технологии борьбы за покупателя в Интернете
Новинки «1С-Битрикс: Управление сайтом» 16.5
Современные технологии сайтостроения для решения бизнес-задач
Ad

Similar to Безопасность Drupal сайтов (20)

KEY
Безопасность веб-приложений: starter edition
PDF
Web application security (RIT 2014, rus)
PPT
PPTX
Информационная безопасность в аспекте веб-разработки
PDF
OWASP: безопасное программирование на PHP.
PDF
Как мануальный тестировщик может базово протестировать безопасность, Евгений ...
PPTX
SQADays19 - 50 Слайдов для повышения безопасности вашего сервиса
PDF
Как мануальный тестировщик может базово протестировать безопасность, Евгений ...
PDF
ЄВГЕНІЙ ТОЛЧИНСКИЙ «Як manual QA може протестувати проект з боку security» QA...
PPT
Безопасность CMS
PPTX
Security testing
PPT
Drupal Paranoia
PPT
Drupal Paranoia
ODP
Drupal Paranoia
PPTX
Svyatoslav Login
PPTX
безопасность
PPT
Web осень 2012 лекция 11
PPTX
Информационная безопасность в веб - основы
PPTX
А не поговорить ли нам о XSS!
PPT
DUMP-2012 - Веб-разработка - "Что мы знаем о производительности и безопасност...
Безопасность веб-приложений: starter edition
Web application security (RIT 2014, rus)
Информационная безопасность в аспекте веб-разработки
OWASP: безопасное программирование на PHP.
Как мануальный тестировщик может базово протестировать безопасность, Евгений ...
SQADays19 - 50 Слайдов для повышения безопасности вашего сервиса
Как мануальный тестировщик может базово протестировать безопасность, Евгений ...
ЄВГЕНІЙ ТОЛЧИНСКИЙ «Як manual QA може протестувати проект з боку security» QA...
Безопасность CMS
Security testing
Drupal Paranoia
Drupal Paranoia
Drupal Paranoia
Svyatoslav Login
безопасность
Web осень 2012 лекция 11
Информационная безопасность в веб - основы
А не поговорить ли нам о XSS!
DUMP-2012 - Веб-разработка - "Что мы знаем о производительности и безопасност...

More from Eugene Fidelin (11)

PDF
Marko.js - Unsung Hero of Scalable Web Frameworks (DevDays 2025)
PDF
Testing: do more with less (JSNation 2024)
PDF
Testing: Do More With Less (AdvancedJS 2024)
PDF
Node.js BFFs - our way to the better/micro frontends
PDF
Housekeeping the platform at scale
PPTX
Node.js BFFs: our way to better/micro frontends
PDF
AngularJS in practice
PDF
Redis persistence in practice
PDF
Разработка и deploy Drupal сайтов с помощью Features.
PPT
Работа с полями (fields) в Drupal 7
ODP
Работа с БД в Drupal 7
Marko.js - Unsung Hero of Scalable Web Frameworks (DevDays 2025)
Testing: do more with less (JSNation 2024)
Testing: Do More With Less (AdvancedJS 2024)
Node.js BFFs - our way to the better/micro frontends
Housekeeping the platform at scale
Node.js BFFs: our way to better/micro frontends
AngularJS in practice
Redis persistence in practice
Разработка и deploy Drupal сайтов с помощью Features.
Работа с полями (fields) в Drupal 7
Работа с БД в Drupal 7

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

  • 1. Безопасность Drupal сайтов Фиделин Евгений, DrupalCamp Lviv 2012
  • 2. Для чего взламывают сайты? ● Сервер: ○ Получение доступа к закрытой информации на сайте (логины, пароли, email, ...) ○ Использование ресурсов сервера в своих целях (spam-рассылка, баннеры, редиректы, вредоносный код, ...) ● Посетитель сайта: ○ Получение доступа к конфиденциальным данным посетителя (фишинг паролей, данных кредитных карт) ○ Использование ресурсов компьютера посетителя в своих целях (установка троянов, вирусов, ...)
  • 3. Что нужно знать о безопасности? ● Обеспечение безопасности - это постоянный процесс, а не разовые меры. ● За безопасность отвечают все, кто имеет доступ к сайту. ● Нужно следить за безопасностью не только Drupal, а всего ПО на сервере. ● Поиск уязвимостей, их исправление и публикация - это хорошая практика.
  • 4. ТОП-10 уязвимостей сайтов (owasp.org) Насколько Drupal сайты им подвержены Drupal Cервер Модуль A1 SQL-injections 7% X A2 Cross-site scripting (XSS) 48% X X A3 Broken Authentication and 3% X Session Management A4 Insecure Direct Object References 8% X A5 Cross Site Request Forgery (CSRF) 10% X A6 Security Misconfiguration 12% X X X A7 Failure to Restrict URL Access 8% X A8 Unvalidated Redirects and Forwards ~ X A9 Insecure Cryptographic Storage ~ X A10 Insufficient Transport Layer Protection ~ X X X
  • 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. A2. Cross-site scripting Самая распространенная уязвимость Не позволяйте размещать опасный код. 1. Валидируйте введенные данные 2. Защититесь от SQL-injection 3. Определяйте тип данных 4. Фильтруйте вывод данных в зависимости от их типа Created by Greg Knaddison http://crackingdrupal.com
  • 7. A2. Cross-site scripting Фильтруем данные перед выводом Created by Greg Knaddison, Gabor Hojtsy http://drupalscout.com
  • 8. A2. Cross-site scripting Устойчивая уязвимость. Шаг 1 Created by Ben Jeavons http://drupalscout.com
  • 9. A2. Cross-site scripting Устойчивая уязвимость. Шаг 2 Created by Ben Jeavons http://drupalscout.com
  • 10. A2. Cross-site scripting Устойчивая уязвимость. Шаг 3 Created by Ben Jeavons http://drupalscout.com
  • 11. A3. Broken Authentication and Session Management Drupal по-умолчанию защищен: ● Авторизационные cookie не могут изменяться посетителями на стороне клиента ● Авторизационные cookie не содержат логина, пароля, а только ID сессии. ● Сессии и cookie пользователя уничтожаются и создаются заново при логине и логауте. ● Сookie имеют уникальные имена для каждого сайта и доступны только в пределах домена
  • 12. A4. Insecure Direct Object References A7. Failure to Restrict URL Access Drupal имеет мощную систему проверки доступа к любой странице и даже элементу страницы: ● '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. 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. A6. Security Misconfiguration Шаг 1. Настройки Drupal ● Установите сложный пароль для админов. ● Проверьте, кто имеет доступ к правам "administer ..." ● Правильно настройте форматы ввода доступные обычным пользователям. ● Не используйте формат ввода PHP! ● Проверьте, какие типы файлов могут загружать пользователи. ● Используйте CAPTCHA. ● Отключите вывод сообщений об ошибках. ● Удалите devel и все неиспользуемые модули.
  • 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. A6. Security Misconfiguration Шаг 3. Настройки сервера ● Проверьте права на запись файлов. ● Проверьте, что сервер не выдает список файлов в папке. ● Закройте доступ к phpMyAdmin. ● Закройте доступ к бекапам БД. ● Не используйте FTP - только SFTP или SSH. ● Не используйте root пользователя в MySQL. ● Убедитесь что ОС, PHP, сервер и др. имеют актуальные версии. ● Вы уверены в безопасности ваших соседей?
  • 17. A8. Unvalidated Redirects and Forwards Что будет, если разместить следующий код? http://example.com/redirect?destination=evil.com Как делать правильно? ● Drupal позволяет делать редиректы только на локальные URL через GET параметр destination. ● Для безопасного редиректа используйте drupal_goto() и $form['#redirect']
  • 18. A9. Insecure Cryptographic Storage Drupal имеет надежную систему хранения секретных данных: ● Используется Portable PHP password для создания хешей паролей с солью user_hash_password(). ● При установке Drupal создает уникальный приватный ключ, который нужно использовать при шифровании данных drupal_get_private_key(). ● Механизм генерации паролей может быть расширен модулями.
  • 19. A10. Insufficient Transport Layer Protection Используйте HTTPS для защиты особо важных данных: ● Drupal поддерживает работу через HTTPS ● Используйте модуль Secure pages для защиты определенных страниц. ○ http://drupal.org/project/securepages ● Используйте валидный SSL-сертификат
  • 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. Что нужно делать разработчику ● Подпишитесь на рассылку 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. Спасибо за внимание! Есть вопросы? Не откладывайте решение проблем с безопасностью - "потом" будет поздно. Фиделин Евгений eugene.fidelin@gmail.com Skype: eugene.fidelin facebook.com/eugene.fidelin