Защита сайта

будем писать о защите сайтовПост не совсем в тему на этом блоге, но кому-нибудь он может помочь, поэтому и публикую его тут.

DataLifeEngine (DLE) это популярная CMS, с которой работает довольно много людей. Но у не есть один небольшой недостаток – за DLE е создатели хотят денег… Поэтому многие пользователи, не имея возможности/желания оплатить лицензию качают нуленные (ломанные) версии движка. И иногда так случается, что в этих архивах спрятаны бекдоры, используя которые, их авторы могут получить полный контроль над вашим сайтом.

Пишу я об этом не просто так – как оказалось, минимум два моих сайта, созданных на этой CMS, были взломаны подобным способом (да, я использую nulled версии… ). Нужно заметить, что взломщик не стал ничего ломать на сайтах, а просто сделал себе возможность размещать на моих сайтах свои ссылки (возможно, и не свои, а ссылки бирж).

А начиналось все так – год-два назад на одном своем сайте (догадайтесь, на каком двигле? ), на морде я обнаружил пару внешних ссылок, которых там быть не должно было (ссылки были спрятаны – синий шрифт на синем фоне). Тогда я восстановил сайт из бекапа (ссылки пропали), сменил пароли на админку и ftp и на этом успокоился (сайт не торгует в биржах, поэтому количество внешних ссылок почти никогда не смотрю).

Пару месяцев назад на другом сайте (хостинги у них разные), торгующем в сэйпе, все проданные ссылки упали в error, полез разбираться, смотрю – а у меня в шаблоне main.tpl какой-то лишний тег стоит ({lb} вроде бы). Убрал его, почистил index.php из корня сайта (он тоже был изменен), удалил файл сапы links.db и ссылки снова появились на сайте. После этого сменил пароли и ушел спокойно спать. Но на следующее утро опять та же картина – все ссылки в error`e, индексный файл и файл шаблона опять так же модифицированы… Причем, под одним ftp доступом на этом хостинге был доступен ещ один сайт, торгующий в сэйп, и у него все ссылки были в статусе ок… После пары дней ненапряженных раздумий, переписки с саппортом хостинга и поисков в интернет, был сделан вывод, что для взлома сайта используется бекдор, спрятанный в одном из файлов движка, причем используется он роботом (почти в одинаковое время, как я потом заметил, изменялись файлы сайта). Тогда я был очень занят и сильно морочится этим не было ни времени, ни желания, поэтому я просто раз в день восстанавливал файлы сайта, а поиск бекдора был отложен на неопределенное время…

Прошел месяц, а может и два, и тут на первом сайте из этого поста возникла необходимость смены шаблона, был поставлен новый шаблон, но на следующий день он волшебным образом превратился в старый (то есть, был заменен весь html код в файле main.tpl нового шаблона на код старого, и сайт выглядел просто ужасно)! И опять появились те самые две лишние внешние ссылки на морде.

Именно тогда я решил заняться решением этой проблемы вплотную. И вот что было выяснено – бекдоры обычно кладут в папку engine движка DLE, они могут быть отдельным файлом, или находится в каком-то файле движка, могут быть в любой папке. Но, что бы воспользоваться бекдором, файлу, в котором он находится, должно быть разрешено выполнять php код по обращению пользователей (как то невнятно объясняю, но я и сам не силен в теории). В DLE уже есть защита от этого (которая, в принципе, легко убирается злоумышленниками ещ до того, как нуленная версия движка ушла в паблик) – если в файле htaccess какой-либо папки есть инструкции:

Order allow,deny
Deny from all

то обращения пользователей к любым файлам из этой папки будут блокироваться, использовать их сможет только ваш сервер/движок. Так же, если в файле DLE есть строки

if (! defined ( ‘DATALIFEENGINE’ )) {
die ( «Hacking attempt!» );
}

то они действуют аналогичным образом – не разрешают прямое обращение к содержащему их файлу.

То есть, в принципе можно довольно легко решить проблему, не вникая как и что сломано – положить в папку engine htaccess с нужным нам содержимым и вс, враг не пройдет. Но, тогда перестают работать некоторые функции движка (генерация капчи, rss – больше пока не нашел). Значит, нам нужно разрешить прямое обращение к некоторым файлам. В общем, на втором сайте в папке engine я сделал такой файл htaccess:

Order allow,deny
Deny from all

Order allow,deny
allow from all

(запретил прямой доступ к файлам, содержащим php код и разрешил доступ к фалу, выдающему rss)

А в папке engine/modules файл получился таким (разрешил доступ к файлу с капчей):

Order allow,deny
Deny from all

Order allow,deny
allow from all

И о чудо! Файлы сайта перестали модифицировать без моего ведома!

Воодушевленный успехом, я разместил эти два htaccess`a на первом сайте из этого поста, но там ни капча, ни РСС работать не стали… Видимо, другие настройки сервера, или у меня руки кривоваты… В общем, там пришлось искать бекдор. Оказалось, что он находится в файле initme.php (файл не от движка, в нем много всего закодированного в base64). В итоге, я запретил в htaccess доступ только к этому файлу (если его просто удалить, то выскакивает ошибка, а чистить все файлы, которые могут к нему обращаться, мне просто лень:) ):

Order deny,allow
deny from all

Сайт из второго примера пока ещ не прошел проверку временем, возможно, придется ставить дополнительную защиту.

На этом хочу закончить, надеюсь, что кому то пригодится мой опыт в борьбе со взломом сайтов на DLE.

А у вас взламывали сайты? Как вы с этим боролись?

UPD 02/12/2011 11:42 В комментах подсказали наилучший выход, о котором я забыл упомянуть – покупайте лицензию, и ставьте оригинальную сборку DLE и будем вам счастье!

Добавить комментарий

Related Post