KARTz.RU
кушаешь морковь – встанет вновь и вновь

О любви

Февраль 09th, 2012

Это правдивая история из жизни, которую будет интересно почитать как беспечным, так и очень осторожным.

Краткая предистория. Ко мне обратился товарищ, у которого яндекс кричал об опасности, так как вместо жумлосайта показывались голые задницы, но только если туда перейти с поисковиков. Беглый просмотр html-кода в браузере ничего не дал, и я полез смотреть файлы на сервер по фтп.

Во всех пхп файлах была проверялка рефёрера с переадресатором. То есть было сделано так, чтобы хозяин сайта ничего не замечал (по крайней мере, некоторое время). Вредоносный код был удалён самодельным антивирусом, сайт перенесён на нескомпрометированный сервер и запущен. Юмор ситуации был в том, что антивирус тоже был написан на пхп и первым делом удалил вредонос из себя.

Ещё одна сложность состояла в том, что сайт ранее находился на «Омском» хостинге, куда доступ был только по фтп и только иногда. Выкачивать заражённые файлы пришлось по одному, а для слива базы пришлось подсматривать параметры доступа в конфиге жумлы и писать на коленке свой дампер на пхп.

Второй звоночек прозвенел через несколько дней, когда я узнал пароль от админки сайта. 111111 ШЕСТЬ БЛЯТЬ ЕД??Н??Ц. Это означало, что приключения капитана Врунгеля на этом только начинались.

Третий звоночек уже не прозвенел, а звучно колотил в набат, когда выяснилось, что каждый файл всех моих 80 сайтов на сервере был заражён голыми жопами с торчащими из них негрочленами…

Первым делом я уронил апач, так как сразу понял, что заражение происходит через какой-то пхп-скрипт, выполнядщийся от имени веб-сервера. Хотя нет, первым делом я вспомнил маму и папу (или папу и папу) этого вирусописателя; впрочем, и его самого; выпадением волос и выплыванием глаз он явно не отделается…

Так вот, вторым делом я уронил апач, затем проверил ps -e и на всякий случай уронил мускуль. После этого полез в логи. Потом посмотрел дату модификации файлов, и вуаля – вот они, 3 POST-запросика. Почему 3 – непонятно. ??сточника запроса просканировал по портам – на нём прокся. Но самое важное – теперь я знал, какой скрипт выполнялся, что могло помочь оценить ситуацию и найти оптимальный путь решения.

…Но не помогло. Вредоносный скрипт просто выполнял через eval() данные из POST-запроса. Узнать, какой код выполнялся, не представлялось возможным, не считая возможности вскрытия черепной коробки того, кто его написал.

Лечить гору файлов было бесполезно и неэффективно, поэтому я быстренько восстановил их из бэкапов. Проебался больше недели. Восстанавливал в первый раз. Плюс ещё сколько времени потратил на их создание (создавал и выкачивал регулярно руками). Какое счастье, что я параноик и иногда вскакиваю среди ночи, чтобы создавать резервные копии всего, до чего дотянутся руки.

Много времени потребовалось на инспектирование прав доступа к файлам, и я до сих пор злюсь на сотрудников, которые для упрощения тупо ставят chmod 0777 на всё подряд. ?? при этом гордо заявляют «я не админ, а дизайнер, думать о безопасности не должен и вообще могу оставлять дверь открытой, если так будет удобно«.

Права на php файлы были присвоены рутом и выставлены в выставил 444, на остальные 644, на директории 0755


find -type f | xargs -I '{}' chmod 0655 '{}'
find -type f | grep .php | xargs -I '{}' chmod 0444 '{}'
find -type f | grep .php | xargs -I '{}' chown root '{}'
find -type d | xargs -I '{}' chmod 0755 '{}'

Знаю, что код неоптимальный, но мне проще запомнить 3 команды и способ их соеденить, чем много ключей одной команды. Код немного допилен, изначально он вызвал глобальную проблему с директориями, содержащими php в имени.

На все виртхосты была добавлена строчка


php_admin_value open_basedir "[вписать webrootroot]:/tmp"

:/tmp нужен пыху для аплоада файлов. если нет аплоада - убиралось и это.

В директории с картинками (а также инклюдами, статикой и прочим) добавил такой .htaccess (лишние пробелы убрать)


AddType text/plain .php .phtml .php4 .php5
< LIMIT POST >
order deny,allow
deny from all
< /LIMIT >

Это исключало вызов php через http-запросы там и запрещало метод POST. Действительно, зачем что-то посылать картинке?

Запретил в php.ini некоторые опасные, как я считаю, функции. Многие криворукие сайты сразу поломались. Долго разбирался с проблемными местами, но их было столько, что пришлось вернуть всё назад.

Переименовал директорию administrator в жумле. Получил нерабочий сайт. Пошукал форумы, там все активно ололокали, но так и не смогли объяснить, зачем при запросе главной страницы сайта инклюдить половину админки.

Выяснилось, что замена виртуального пути к админке реализуется через какой-то там модуль, который все качают с непонятного файлообменника без смс, залогов и поручителей.

Жумла - это вообще нечто за гранью добра и зла. Я тоже люблю говнокод, когда его немного - он понятен. Но жумла - это какая-то квинтессенция исполняемого говнокода, шаблонов оформления, картинок, жаваскриптов и прочей хушеры, старательно перемешаная по всем директориям так, что отделить код от оформления и лицо сайта от админки без отказа всей системы нельзя никак.

Очень осторожно запустил апач и начал наблюдать. Был вариант ставить nginx+fcgi, но это скорее усложнило бы задачу, а не решило её. Особенно с учётом каши с правами, разобрать которую за разумное время не представлялось возможным. Очень понравился метод одного школьника-вебмастера архивировать сайты под виндой в ZIP (вообще без сохранения прав доступа). Также не все знают, что такое дамп базы.

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

Проблемный сайт я, разумеется, не стал запускать, так как он опять оказался весь заражён (причём, сайт с жопами был уже другой), и, кроме того, ты был как минимум один засевший веб-шелл. Также оставалось непонятно, какой именно код был выполнен, какой ущерб он нанёс и нет ли в больном сайте других дыр.

Был сформирован другой сайт по этому адресу из кэша поисковика (у меня своя поисковая система), то есть совсем без элементов вредоносного кода исходного сайта. Пара картинок провалилось из кэша, но эта мера помогла сайту не выпасть из индекса.

Более того, на место веб-шелла была положена закладка, которая "записывала все ходы", включая переданные POST-данные. ?? сегодня эта закладка сработала. Я ждал почти 2 недели. Это говорит о том, что больных сайтов просто гора, раз они делают им "прививки порнографии" так нечасто.

Так вот, сегодня поймал код червя. Написал простую сохранялку, меня опять атаковали (ура!), получил образец вредоносного кода. Кстати, опять 3 запроса подряд. Опять с зарубежного компа с установленной проксёй. Видимо, вирусный ботнет. В коде ничего особенного нашёл, кривой пхп-код, тщательно отформатированый, даже комменты не почистили. Просто замена одной строки на другую, причём через регулярки, хотя никаких регулярок в строках нет. Хунта, одним словом. Думается, глаза у этого пидараса вытекут прямо на уроке чистописания.

После этого проблемный сайт был повторно проверен, почищен и запущен в песочнице на другом серсере, пароль к админке заменен, ведётся наблюдение. Все вредоносы, разумеется, удалены.

Капитан Вурнгель на финишной прямой. Что можно посоветовать:
- не держать все яйца в одной корзине
- вебмастеров, которые просят поставить права 0777, бить по рукам
- использовать хорошие пароли
- иметь тщательно проработанную систему пользователей и прав доступа с самого начала
- регулярно делать резервные копии, такие, которые можно реально восстановить
- не пользоваться ftp, так как он передаёт пароли открытым текстом
- не посылать пароли в открытом виде по незищищённым каналам связи
- (подсказывают) с осторожностью использовать шаблоны, так как они содержат выполняемый код
- стараться избегать таких дикобразов, как жумла
- защищать сервер до того, как грянет гром
- при встрече взломщика или заказчика взлома не ограничивать себя
- ... (этот список нравоучений можно продолжать вечно)

Какой главный вывод поста? Кругом дохера мудаков. В таких условиях почему-то есть люди, которые держат пароли из шести единиц от сайта, который приносит нормальные деньги. Есть люди, которые не делают резервнее копии диплома, который писали год. Есть люди, которые совсем не следят за безопасностью почты, на которую завязано всё. Есть люди, которые не удаляют ботненские трояны со своей заросшей червями винды и участвуют в атаках. Есть люди, которые качают непонятные кряки с файлообменников и запускают, даже не проверив антивирусом.

?? такие люди не просто есть - их большинство. ?? пока они удивляются "почему мы так плохо живём", я удивляюсь, как они ещё не сдохли. Необязательно быть параноиком, но элементарные правила цифровой гигиены должны быть так же понятны и привычны, как подтирание задницы, застёгивание кармана с кошельком в переполненном и тщательное мытьё фруктов, привезённых из дружественного таждикистона в грузовине для навоза.


Filed under: Без рубрики | Метки: , , ,
Февраль 09th, 2012 00:40:53

Похожие посты:
1 comment

admin
24/02/2012

Сегодня нашёл в больном сайте ещё 5 закладок, которые торчали за уши.

Сколько их ещё – хз.

Leave a Reply