LINUX.ORG.RU
ФорумAdmin

взломали виртуалку. Майнят биткоины...

 , , ,


0

3

Стыдно даже. Функционал достался по наследству, есть openvz на нём виртуалка под клиентский сайт. В один прекрасный день, сервак умирал, load average об этом сигнализировал. Порылся на виртуалке, поудалял «вроде» все левые файлы, перезалил из бекапа сайт. Но спустя время этот майнер нарисовался вновь:

apache   10377  4.8  1.1 762152  3112 ?        Sl   11:39  16:01 /tmp/php4Ry4iN_mnomrkarxoug4hhf -c 4 -M stratum+tcp:/
Многие советую «обнови php,apache» и прочее, но это не вариант. Сайт старый, написан под PHP 5.6.14, если обновлят сайт не завёдтся, придётся править весь конфиг сайта, а это уж простите не моя работа а клиента, но ему как это обычно бывает «всё пофигу» в iptables:
 iptables -L -n
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
DROP       all  --  39.51.30.78          0.0.0.0/0           
DROP       all  --  78.24.217.84         0.0.0.0/0           
DROP       all  --  194.28.85.186        0.0.0.0/0           
ACCEPT     all  --  127.0.0.1            0.0.0.0/0           
ACCEPT     icmp --  0.0.0.0/0            0.0.0.0/0           
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:21 
ACCEPT     udp  --  0.0.0.0/0            0.0.0.0/0           udp dpt:21 
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:80 
LOGGING    all  --  0.0.0.0/0            0.0.0.0/0           

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         
До этого как то открывал порты в процессах был :
./conf.php -p52345 (рондомно указан порт)
найти этот файл на серваке не удалось. Как раз подловил его на tcpdump
OPTIONS sip:100@IP.IP.IP.IP SIP/2.0
    Via: SIP/2.0/UDP 199.48.164.165:5123;branch=z9hG4bK-3130910242;rport
    Content-Length: 0
    From: "sipvicious"<sip:100@1.1.1.1>;tag=6439616134323837313363340131393638323237373837
    Accept: application/sdp
    User-Agent: friendly-scanner
    To: "sipvicious"<sip:100@1.1.1.1>
    Contact: sip:100@199.48.164.165:5123
    CSeq: 1 OPTIONS
    Call-ID: 282014724106766425816426
    Max-Forwards: 70
10:30:57.102601 IP (tos 0xc0, ttl 64, id 33596, offset 0, flags [none], proto ICMP (1), length 473)
    IP.IP.IP.IP > 199.48.164.165: ICMP IP.IP.IP.IP udp port sip unreachable, length 453
    IP (tos 0x0, ttl 51, id 60280, offset 0, flags [DF], proto UDP (17), length 445)
    199.48.164.165.5123 > IP.IP.IP.IP.sip: [udp sum ok] SIP, length: 417
    OPTIONS sip:100@IP.IP.IP.IP SIP/2.0
    Via: SIP/2.0/UDP 199.48.164.165:5123;branch=z9hG4bK-3130910242;rport
    Content-Length: 0
    From: "sipvicious"<sip:100@1.1.1.1>;tag=6439616134323837313363340131393638323237373837
    Accept: application/sdp
    User-Agent: friendly-scanner
    To: "sipvicious"<sip:100@1.1.1.1>
    Contact: sip:100@199.48.164.165:5123
    CSeq: 1 OPTIONS
    Call-ID: 282014724106766425816426
    Max-Forwards: 70
Даже не знаю как с этим засранцем бороться, в ввиду своей не прокачености в этом деле. Может что посоветуете, куда рыть, где искать, как закрывать. Если нужна будет доп инфа предоставлю. Спс p.s. пароли менял не однократно.



Последнее исправление: whitedevil (всего исправлений: 2)

но ему как это обычно бывает «всё пофигу»

нафига заморачиваться вообще, если клиенту сайт не нужен?

geek ★★★
()

PHP 5.6 еще пока поддерживается, так что в пределах этой ветки можно обновления ставить.

А сайт то на движке каком нибудь? Поди в нем и дыра.

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

Насколько я в этом разбираюсь:

* @version             $Id: LICENSES.php 14401 2010-01-26 14:10:00Z louis $
 * @package             Joomla
 * @copyright   Copyright (C) 2005 - 2010 Open Source Matters. All rights reserved.

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

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

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

катастрофа, не то слово.

        /** @var string Product */
        var $PRODUCT    = 'Joomla!';
        /** @var int Main Release Level */
        var $RELEASE    = '1.5';
        /** @var string Development Status */
        var $DEV_STATUS = 'Stable';
        /** @var int Sub Release Level */

Проще сдаться?

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

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

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

Если ядро не новое, то сие действо бесполезно. Ибо есть /lib/ld-linux.so

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

Если скажешь как это сделать внутри виртуалки OpenVZ то сделаю. less /etc/fstab

none    /dev/pts        devpts  rw,gid=5,mode=620       0       0
none    /dev/shm        tmpfs   defaults                0       0
df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/simfs       25G  9.8G   16G  39% /
none            128M  4.0K  128M   1% /dev
none            128M     0  128M   0% /dev/shm
mount
/dev/simfs on / type simfs (rw,relatime)
proc on /proc type proc (rw,relatime)
sysfs on /sys type sysfs (rw,relatime)
none on /dev type devtmpfs (rw,relatime,mode=755)
none on /dev/pts type devpts (rw,relatime,gid=5,mode=620,ptmxmode=000)
none on /dev/shm type tmpfs (rw,relatime)
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw,relatime)

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

Будут хранить скрипт вместо бинарного файла, этому noexec не мешает

anonymous
()

передай каталог с сайтом пользователю рут и позволь другим читать:

chown -R root:root /path/to/site
chmod -R 644 /path/to/site

затем вручную почисть все подозрительные файлы

r0ck3r ★★★★★
()

php

Вот в этом и проблема. Выкидывай это говно и ставь что-нить на джанго.

-c 4 -M stratum+tcp:/

А дальше? Алсо, если там нормальный пул можешь накатать абузу, они обычно банять ботоводов.

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

С этими permission сайт не работает. Я уже перестал «чистить» просто удаляю директорию сайта, и заливаю бекап годовой давности.

whitedevil
() автор топика
Ответ на: комментарий от KillTheCat
apache   10377  4.8  1.1 762152  3112 ?        Sl   11:39  16:01 /tmp/php4Ry4iN_mnomrkarxoug4hhf -c 4 -M stratum+tcp://48JWnKGUz2fghGwLZNbV8Yiyrg9toGekR9zr5D7gUFKR26csnzTEzFuU7u3uVW7oeBDxjXjUyumx55HUMYFP73Bk
whitedevil
() автор топика
Ответ на: комментарий от whitedevil

Заблочь в iptables соединения на все исходящие порты, кроме нужных. В том числе отвалится пул к которому майнер стучится

anonymous
()

Для апача есть замечательный модуль mod_apparmor, который настраивается за пять минут и делает подобные ситуации невозможными, насколько дырявая CMS не стояла бы.
Почему его почти никто не использует?

gasinvein ★★★
()

Попробуйте обновить Joomla

И объясните заказчику, что пользоваться с таким древним движком — подобно выставлению одного охранника патрулировать поле в 1 км². Лично я сталкивался с древней Joomla, которая была завирусована до такой степени, что там на сайт накидали вирусов, после чего сайт не открывался на большинстве браузеров с сообщением «этот сайт атакует компьютеры». Объясните клиенту такие риски.

Northsoft ★★
()

Заверни сайт в докер readly only образ,
раз в 1 час/10 часов/сутки по крону перебилдивай
образ с сайтом и автоматически запускай чистый
только что сбилденный образ.
Всё, проблема решена малой кровью.

theanonymous
()

Обновление php и apache(если они не совсем уж старых и уязвимых версий), вам ничего не даст. Вломали вас скорее всего через дырявые скрипты, в таком случае смена паролей и обновлении apache/php проблему не решит.

lucentcode ★★★★★
()

/root/bin/antiminer.sh

#!/bin/bash

LOG=~/antiminer.log
DATE="$(date +%F\ %T)"

MSG(){
    echo "${DATE}       ${*}" >> "${LOG}"
}

LA_SRC=($(cat /proc/loadavg))
IFS="."
LA=(${LA_SRC[0]})
unset IFS

[[ "${LA[0]}" -gt "5" ]] || exit 0

PS=($(ps --no-headers --sort=-pcpu -Ao pid,%cpu,command | head -n 1))
PID="${PS[0]}"
FILE="${PS[2]}"

MSG "la:        ${LA_SRC[0]}"
MSG "cpu:       ${PS[1]}"
MSG "${PS[*]}"
cp "${FILE}" ~/
kill -9 "${PID}"
rm "${FILE}"

/etc/cron.d/antiminer

* *  *  *  *  root      /root/bin/antiminer.sh

Может убить чего нибудь не то...

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

Сайт случаем не для статической инфы? Если так я бы wget'ом скачал html'ки с ресурсами и хостил статику nginx'ом.

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

Клиенту главное что бы работал, а остальное его не интересует.

Сообщить клиенту, что он, фактически, предоставляет анонимайзер для доступа в сеть. И если случится что-то посерьёзнее, чем майнинг, крайним будет он, так как его известили про опасность ситуации. Хотя... Вероятно, и тебе достанется. Так что извещай, день-два на реакцию, и, при повторении ситуации, отключай.

AS ★★★★★
()
Последнее исправление: AS (всего исправлений: 1)

Как вариант просто переопределить домены майнинга в /etc/hosts на 127.0.0.1 (или куда ещё)? Т.е. побанить то куда данные шлёт.

NaiLi ★★
()

Жумла? Вырубать сайт, стягивать базу, ресурсы, локально обновлять, и заливать уже сделаный.

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

Если не 100500 денег платят, откажись от такого клиента. Нервы дороже.

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

А нуда, «сервер» тоже естественно нулевый.

mandala ★★★★★
()

Ну вроде ночь пережили спокойно, вчера пофиксил session.php как советовали на сайте Joomla, закрыл в iptalbes порты. посмотрим что будет дальше.

whitedevil
() автор топика

Логи для поиска дыры, легаси в изолированный контейнер.

Deleted
()
Ответ на: комментарий от whitedevil
apache   12034  4.8  1.1 762152  3116 ?        Sl   12:16   4:10 /tmp/php1rlVtW_mnomrkarxoug4hhf -c 4 -M stratum+tcp://48JWnKGUz2fghGwLZNbV8Yiyrg9toGekR9zr5D7gUFKR26csnzTEzFuU7u3uVW7oeBDxjXjUyumx55HUMYFP73Bk

Он снова здесь...

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

в cron рута поставь ежесекундный kill -9 на любой процесс в командной строке которого есть stratum+tcp и rm -rf по маске из /tmp всего, чего там быть не должно Ограничь по максимуму права юзера apache. В частности, запись в /tmp и другие директории. Идеально, если права на запись останутся только на файлы с логами. Но лучше обнови все, а если есть самописный говнокод в исходниках сайта - проверь на инъекции. Поскольку накатывание бэкапа - это даунтайм, то время на эксперимент «какую максимальную версию php and co. можно безболезненно поставить» у тебя заведомо есть

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

Я сделал проще, удалил виртуалку.Создал новую с новым ip,понял dns. повесил сайт на fixed Joomla (надеюсь дыр меньше). обновил php, погуглил,поправил конфиг сайта и вроде завелось. Клиенту выставил счёт за работы.

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

Наверное самое правильное решение. Но я бы сначала уточнил у клиента, нужен ли сайт вообще.

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