======================================== Безопасность сайта — миф или реальность? ========================================
========= v1.0 rc 2 =========
Поводом для написания этой статьи послужила тотальная неграмотность комьюнити php-fusion7.ru в области безопасности. Зачастую рулит поговорка «Пока гром не грянет, мужик не перекрестится». Т.е., пока не зальют порно-скрипт с сотней-другой ссылок и не сдампят БД, веб-мастер (а скорее - уеб-мастер) не почешется. Статья направлена на небольшой ликбез, а также, возможно, она заставит кого-нибудь пересмотреть свое отношение к безопасности сайта. Ну и просто призадуматься. Заранее предупреждаю — по ходу статьи могут встретиться различные грубости, субъективные мнения, и т.д. Прошу реагировать адекватно :). В общем, запасаемся парочкой пива и вперед.
А кто скажет «многа букаф», отвечу - по ходу статьи в разных местах встретятся труЪ-средства для обеспечения безопасности сайтов на php - fusion, поэтому читать придется по-любому. :)
===================== О популярности и осях =====================
Есть закономерность — чем не популярнее приложение, тем активнее в нем ищутся баги и уязвимости, пишутся эксплойты, и т.д.
Всем известный FireFox на нынешнем этапе своего развития напоминает дуршлаг, в который еще и до кучи постреляли дробью из двустволки. Opera со своими 0,72% мирового рынка (в России и Скандинавии — до 30%) выглядит на фоне Лисы неприступной крепостью.
Дело тут вовсе не в закрытости / открытости исходного кода, как может показаться некоторым. Закрытые продукты Microsoft'a, и Windows в частности, это доказывают — каждый вторник мы читаем «бюллетени» и патчимся. Многие уязвимости попадают в паблик — дизассемблер еще никто не отменял.
Все это говорит о том, что баги есть, допустим, и в Опере, только она, как Неуловимый Джо из анекдота, никому не нужна. И в самом деле — много ли профита можно поиметь от найденного бага? Гораздо проще поискать косяки в популярных FF или IE.
Подводя итог сказанному — все определяется только популярностью софта. Открытость и закрытость ПО тут не при чем, вопреки мнению, что мол, в закрытом ПО искать баги труднее. Не спорю, труднее, но если надо будет — найдут и там. Примеры налицо — Windows & Linux, Opera & IE & FF... Первая — закрытая и популярная, вторая — открытая и популярная. В первой — железнодорожный состав дыр, в Линуксе же — пока тележка.
(Кстати, чуть отвлекусь: вопреки расхожему мнению, что в Линуксах вирей нет, это совсем не так. Вирусы, и трояны, и малвара — все там есть. Знатоки сейчас скажут: «Да, но у виря нет прав root!». Огорчу — существует немало способов получить эти прииллегии, и подобных атак, нацеленных на повышение прав, становится все больше и больше, хоть о них и замалчивается ;). Более того, термин «rootkit» пришел как-раз из мира Unix, потому как руткиты пришли в вниду оттуда.)
Изо всего вышесказанного веб-мастер может сделать такой вывод — неважно, какая ось крутится на серваке, главное — как быстро она обновляется. А вот браузер лучше выбрать малопопулярный, наподобие Хрома или Оперы. :)
================================== PHP + MySQL, или выбор быдлокодера ==================================
Что ни говори, а сейчас рулит именно такой боекомплект. А почему бы и нет? Кодить в PHP удобно, а MySQL обеспечивает великолепное быстродействие. Более того, вдвоем этот софт уживается просто на «ура» — в phpMyAdmin, допустим, встроено средство, описывающее «кликабельные» операции php-кодом, который затем легко скопипастить в свою разработку ;).
Наконец, самый решающий и определяющий фактор — хостинги. Связку php + MySQL + phpMyAdmin поддерживает любой хостинг, в какой не ткни (ну, кроме народ.ру :))), и что важно, любой бесплатный хостинг. А вот какой-нибудь Perl, Python в эстетской связке с Oracle / PostgreSQL на бесплатном найдешь вряд ли. Да и не на всяком платном, честно говоря.
Сложно сказать, кого надо жечь на костре, но, куда не плюнь, везде рулят Апач и ПХП и Мускулом. Внимательный читатель сделает вывод — за популярность приходится платить, и будет прав.
Начнем, пожалуй, с php.
Не надо говорить, что, мол, php — неотлаженнное говно, а все мужики сидят на Perl'e. Выбирать php заставляет жизнь — не у каждого можно заказать плагин / скриптик на Перле. А вот на php — запросто.
С другой стороны, php вот-вот захлебнется собственными дырами и багами. Приведу небольшую статистику: http://www.coelho.net/php_cve.html
Year PHP-related Total Ratio 2009/Q1 633 1706 37.1% 2008 1962 5634 34.8% 2007 2346 6517 36.0% 2006 2840 6603 43.0% 2005 1396 4928 28.3% 2004 490 2450 20.0% 2003 183 1515 12.0% 2002 240 2156 11.1% 2001 80 1677 4.7% 2000 20 1017 1.9%
Первая колонка - год, вторая — уязвимости в php, третья — общее число уязвимостей во всем софте, ну и четвертая — процентное соотношение. Как видим, за 2008 год в приложениях на php было обнаружено 1962 дыры (!), то есть, по 6 штук в день. Кому мало — поднимите руку и покиньте аудиторию.
Статистика говорит лишь об одном — о безалаберном отношении в программировании на php. Упомянутая легкость в программировании и освоении обернулась сотнями быдлокодеров и горами дырявых скриптов, что и написано по урлу http://www.coelho.net/php_cve.html Процент энтузиастов-самоучек, пишущих на php, высок как нигде больше, вот и результаты. Я не говорю, что все, кто кодит на php — быдлокодеры, нет. Просто их много :).
Более того, багов и ошибок хватает не только в приложениях а-ля Drupal, Joomla! или WordPress, но и в собственно самом php.
Если взглянуть на историю релизов от, например, 5.2.0 до 5.2.9, то кол-во ошибок и дыр будет исчисляться сотнями, а то и тысячами.
Например,
PHP 5.2.6 - 6 секурных, и более 120 прочих багов (http://www.php.net/releases/5_2_6.php) PHP 5.2.7 - 8 секурных, более 170 прочих багов (http://www.php.net/releases/5_2_7.php) PHP 5.2.8 - сам релиз был настолько бажным, что его отозвали (!) (epic fail) PHP 5.2.9 - 4 секурных, более 50-ти прочих ошибок (http://www.php.net/releases/5_2_9.php)
Любознательным рекомендую посмотреть PHP 5 ChangeLog (от Version 5.0.0 Beta 1 до Version 5.2.9) - http://www.php.net/ChangeLog-5.php По сути, в четвертой версии было то же самое (http://www.php.net/ChangeLog-4.php). В шестой же, вероятно, все будет еще хуже.
В MySQL ситуация ничуть не лучше.
5.0.75 - секурные, обычные ошибки (http://dev.mysql.com/doc/refman/5.0/en/releasenotes-cs-5-0-75.html) 5.0.77 - несколько секурных, десятки простых ошибок (http://dev.mysql.com/doc/refman/5.0/en/releasenotes-cs-5-0-77.html) 5.0.81 - 2 секурные, 3 краша, 100 ошибок (http://www.opennet.ru/opennews/art.shtml?num=21601) 5.0.82 - 20 ошибок (http://www.opennet.ru/opennews/art.shtml?num=21948)
Релизы версии 5.1 вообще нестабильные пока что (5.4 и 6.0.11 — вообще альфы). Вывод — сидеть надо на 5.0.хх.
============== Выбор хостинга ==============
Безопасность сайта начинается с компьютера админа сайта, т.е., вашего. Если там нет приличного антивиря и настроенного файрвола — пиши пропало. К этому вернемся позже, а вначале — о выборе хостинга.
От многих знакомых, да и по личному опыту сидения на ма3дайных бесплатных хостингах, убедился: Хороших, быстрых и бесплатных одновременно хостингов не существует.
Пока еще на плаву, допустим, 000webhost.com, но производительность его катится под откос. Раньше — трава была зеленей, бабы - моложе, а 000webhost - быстрее (т.к. мало пользователей было).
Затем о его православности услышали все, и хостинг умер. Нет, он еще работает, но БД там сыпется каждую минуту. Более того, ресурсы там кастрированы — попробуйте друг за другом пооткрывать на новых вкладках страницы - после 3-ей хостинг вас предупредит. :) Впрочем, о чем это я? :)
Итак, хостинг нужен. Какой-никакой платный всяко лучше бесплатного, да и нервишки сохраните в порядке. :) Разумеется, варианты вида «полный он лим за 30 рублй в месйацъ» сразу отсекаются, ибо хорошего там нет ничего. В лучшем случае получите трафика 50 метров в сутки, саппорт раз в месяц и стыренные скрипты :). Варианты типа www.vasya_pupkin_mega_hosting_best.narod.ru — тоже летят в топку.
Допустим, вы нашли хостинг, и думаете перевести бабло на личный счет, дабы оплатить тариф... Стоп! не спешите. Побродите по рунету, почитайте мнения об этом хостинге (впрочем, не особо доверяйте, ибо статьи зачастую заказные, а на форумах пишут казачки ;)).
А лучше — оплатить услугу только на месяцок-другой. Этого хватит, чтобы протестить скорость, саппорт и вообще, весь сервис.
Но главное для нас — админы на хостинге, т.е., установленный софт и его версии, и настройки софта.
Зачастую админу лень обновлять стафф (ось, апач, пэхапэ, мускулъ, phpmyOdmin etc) - ведь рейд в ВоВке может вайпнуться!. Поэтому на закономерные просьбы и вопросы клиентов он отвечает так: мол, "php 5.0.0 и MySQL 5.0.01 уже обкатаны за 4 года-то, зачем их обновлять новыми неоттестированными версиями"???
С такого хостинга сразу можете бежать, не оглядываясь. :) И не забудьте его урлик в блек-листы форумов запостить.
На хорошем хостинге должны стоять только последние версии, а именно:
Залатанные оси — в phpinfo.php смотрите не на версии, а на дату — Fri May 25 16:01:31 MSD 2009 (допустим) PHP 5.2.9 - тут тоже надо смотреть дату, May 21 2009 18:41:18 на текущий момент Zend Engine - Zend Optimizer (даты) Мускул 5.0.82 phpMyAdmin 2.11.9.4 (либо третья ветка) cPanel 11 - 11.24.4 (в случае наличия таковой) Apache 2.2.11 (с последними патчами)
Далее — желательно иметь доступ к php.ini , и выставить там:
display_errors = Off
Это существенно затруднит взлом «с нуля» (по сути - сделает его невозможным), т.к. поля в БД придется подбирать вручную (в случае SQL инжекции).
Опять же, если хостер не дает доступ к php.ini - бегите.
Кстати, если вы сидите на бесплатном хосте с поддержкой .htaccess , то сделайте следующее:
Создайте (Notepad++'om, например) файл .htaccess , и добавьте в него строчку
php_flag display_errors off
Эффект - тот же, т.е., ошибки не будут показываться.
====================== Защита домашней машины ======================
Как известно, автоматизация всего и вся не есть труЪ. Люди сохраняют пароли в IM-клиентах, браузерах, ftp-клиентах и т.д. Более того, зачастую пасс — один на все, что снижает защиту до нуля.
Как защитить домашнюю тачку? Вкратце, ибо нефих:
ставьте приличный антивирус, обновляйтесь тока из оф. серверов (не качайте базы со сторонних, левых сайтов! согласитесь, взломать, скажем, x-iweb.ru MeF'a (а у него есть антивирные базы) гораздо проще, нежели сайт NOD'a или Norton'a ?)
ставьте брандмауер (ака Файрволл ака сетевой экран) - must have Comodo Internet Security (антивирус при установке не ставьте - говно. сам файрволл рулид.)
ставьте нормальный прочий софт и обновляйте его по мере необходимости:
Opera (Браузер) (можете FF, но будьте готовы вечно скачивать костыли для залатывания десятков дырок) FileZilla (FTP) нормальный IM клиент вроде Miranda (QIP - троян, закрытый и бажный к тому же, и стучит куда не надо, як Chrome :))
Никогда не сохраняйте пароли (к сайту, к хостингу) в браузере, не юзайте жезл в Опере и аналогичную фичу во всех остальных браузерах, так как вытащить эти пароли сможет любой приличный трой спереть. Не создавайте профилей для сайтов в FileZille (либо в других клиентах FTP), по той же причине
Лучше ввести пароль ручками. (кейлоггеры тоже никто не отменял, правда, но пассы лучше не сохранять)
Пароли придумывайте разные:
на хостинг, на сПанель, на сайт, на ФТП, и проч.
не надо пассов в духе qwerty, 1234, zxcvbn, love, sex, etc ...
ТруЪ пароли — это примерно такие — (ясное дело, использовать их нельзя, т.к. они уже попали во все словарики для брута :)) минимум - 16 символов, юзать строчные/прописные/символы/цифры менять каждую неделю не сохранять в блокноте/браузере/прочем софте (в т.ч. - "для хранения паролей" - чушь все это)
j)9,t}~KfA*5m$AF RluRd|l7*k1%Up<: +,VaH#fPTyTSDG)d V/Ylx?%d,Q$!)hzc wp/+Z}(RwXk?F@@M @KT*=UWK)kF;7~%x b6he;*aJZ)pKsnHb
Суть ясна, полагаю. Кстати, если у вас cPanel 11, то она рулид - пассы генерит тока в путь.
Да, и еще - cPanel поддерживает безопасный ssl вход, + PGP ключи. Но это для параноиков.
И да, обновляйте винду / линя. :) Я понимаю, что у 100% присутствующих венда паленая, поэтому любое обновление - геморрой, но все же.
Последнее — качайте варез из проверенных источников. Перед установкой проверяйте на вирусы. Не запускайте на машине кейгены - только на виртуальной машине (или на тачке друга :)) шучу)
Вот в целом и все.
==================== Безопасность php-Fusion'a ====================
php-Fusion — CMS устаревшая и консервативная. В то время, как остальные пичкают своих монстров аджаксом и студенческими модулями, Коля идет по проторенной тропе.
php-Fusion на самом деле вовсе не php-Fusion, а скорее php-Anachronism. Но лично меня такое положение дел пока устраивает.
Вообще, идеальную безопасность могут обеспечить лишь собственная закрытая разработка, написанная с нуля либо на CMF. Пока таких позволить себе не можем, поэтому приходится выбирать готовые решения.
А чего выбирать, если все дыряво ?
Первое полугодие 2008-го года:
http://www.xakep.ru/post/47037/default.asp
И снова в лидерах по дырявости программного обеспечения фигурирует Joomla!. Данное ПО является CMS системой (системой управления содержанием сайтов), написанной на языке PHP и использующей в качестве хранилища базу данных MySQL. Популярность Joomla! вызвана тем, что данная CMS является свободным программным обеспечением, распространяющимся под лицензией GPL. Однако пользователям Joomla! стоит задуматься... 57 уязвимостей с эксплойтами за 6 месяцев – не слишком ли? Показатель-то больше, чем у MS Windows. Любопытно, что на втором месте расположилась CMS Mambo, по сути, являющаяся ответвлением Joomla!. Когда-то обе команды разработчиков работали над одним проектом, но позже разделились из-за несогласованности в экономических взглядах.
С третьего по пятое место расположились Wordpress, Xoops и PHP-Nuke (знакомые все лица :)). Drupal опустился на 6 место в рейтинге, тем самым поднявшись в глазах трудящихся.
Второе полугодие 2008-го года:
http://www.xakep.ru/post/44621/default.asp
В рейтинге Web приложений с наибольшим количеством уязвимостей также как и в первом полугодии лидирует Joomla!. Правда, число ошибок несколько ниже. На втором месте находится Drupal с 19 ошибками. Затем с большим отрывом следуют MyBB, Wordpress и Typo3. CMS Mambo в этот раз набрала всего 4 ошибки по сравнению с 26 в прошлом полугодии, что безусловно является положительным моментом для сторонников этого ПО.
Как видим, все популярные CMS-ки подвержены огласке. А наш неуловимый Джо Fusion рулит. ;) Выбор очевиден.
Другое дело, что плагины для Фьюжина надо либо писать самому/по заказу с нуля, либо ставить уже проверенные и обновляемые, а абы какие посылать лесом.
Советую прогуляться по milw0rm.com'y - узнаете о многих дырявых плагах.
(Более того, недавно была обнаружена XSS бага в «любимом» fusionBoard 4, автор ее не затыкает, а все пользователи сидят на бомбе :))
Кароче, все надо делать с умом.
P.S. Открою маленький секрет - уверен, мало кто знает ;). При установке php-Fusion ставьте свой, уникальный префикс таблиц, а не дефолтный _fusion. Допустим, _12625737638478, _skghjqwtrhjqth, _as87ah9786ah76afhshj076. (хеш md5, например, вместо имени ;))
Это поможет предотвратить мускулъ-инжекции даже в случае наличия эксплойта в паблике (!), т.к. хакер не будет знать имя таблицы. Разумеется, предварительно надо отключить показ ошибок (см. выше).
Считайте, вы в памперсах... :)
=================================================================== «Меня взломали памагите аааааааааааа!!!!!!!111111 что делать????77» ===================================================================
Во-первых, не паниковать.
Зайдите по FTP с помощью FileZilla, проверьте, какие файлы изменились в последнее время. Сравните со временем последних ваших изменений. Ну и замените последние измененные файлы (и, разумеется, сообщите о трабле остальному комьюнити)
Если перезаливка файлов не помогла, то придется перезаливать двигло целиком (сохраните config.php)
В случае, если у вас стоят php-Fusion + Power Fusion forum by MeF, то тоже ничего страшного. Подготовьте движок на локальной тачке (распакуйте fusion, затем PFF, замените файло), залейте на очищенный хост.
Проверяйте БД на наличие суперадминов.
Смените везде все пароли. Следите за дальнейшем развитием ситуации.
И не забывайте бекапиться. С готовым бекапом вам не надо собирать, яко гентушник, движек сайта заново.
Следите за правами на файлы (см. папки с 777 в реадме ко фьюжену, идет в архиве)
+ оттдуда же:
Вот некоторые полезные советы, позволяющие сохранить безопасность на вашем сайте:
Проверьте config.php он должен быть защищен от записи (права доступа CHMODed в 644).
Никогда не оставляйте setup.php на вашем сервере после установки PHP-Fusion.
Вводите разные пароли для доступа по FTP и для базы данных MySQL. (боян)
Никогда не разрешайте присоединять файлы на форуме с расширениями: php, html, exe, или любой тип текстового файла.
Вот примерно и все. Разумеется, я не специалист по безопасности, а статья — просто акумулированный опыт всего комьюнити, ну и личных знаний немного.
P.S. Статью можно обсудить в этой теме форума.
P.P.S. Можете выкладывать ее на своих сайтах, с условием сохранения авторства и обратных линков (без no_follow ;))
|
Вспомнилось: Дураков на земле мало, но они так грамотно расставлены, что встречаются на каждом углу.