Смартсорсинг.ру

Сообщество руководителей ИТ-компаний, ИТ-подразделений и сервисных центров

Статьи в блогах Вопросы и ответы Темы в лентах Пользователи Компании Лента заказов Курс по ITSM

Фигаро тут – Фигаро там! Концепция «мигающего вируса» на сайте.

Фигаро тут – Фигаро там! Концепция «мигающего вируса» на сайте.

В опубликованной чуть более года назад статье мы уже говорили о том как злоумышленник может эксплуатировать попавший в его руки доступ к сайту, однако почему-то тогда нам в голову не пришла ещё одна довольно простая концепция – фильтр по времени.

 

На прошлой неделе один коллега по цеху принёс нам сайт клиента на Joomla и попросил помочь с вирусом. Первое что мы увидели – классическая картинка зараженного сайта в Яндексе вроде такой (сайт на картинке взят для примера и не имеет ничего общего с нашим случаем):
 
 
 
 
Спустя несколько часов было получено подтверждение от Google.Adwords, который заблокировал рекламную кампанию из-за вируса на сайте.
Однако при проверке сайта вредоносный код сходу обнаружить не удалось. Не ругался и антивирус.
Первое предположение было конечно, что просто для моего браузера/ОС у злоумышленника нет эксплоита, и поэтому он не пытается меня атаковать, поставив проверку где-то в JavaScropt/PHP/.htaccess.
Однако детальная проверка показала, что в настоящий момент на сайте вредоносного атакующего кода вроде бы и нет. Есть странная конструкция в виде массы точек с запятой (;;;;;;;;;;;;;;;;) в конце каждого JS файла, которой не было в файлах из бекапа годичной давности. Однако кода, который бы осуществлял подстановку вместо неё «полезной нагрузки» сходу найти не удалось.
Зато удалось найти массу простейших бекдоров и даже панель шелла.
Ещё несколько файлов вызвали подозрение и были помечены для последующего исследования. В пользу легитимности данных файлов говорило то, что в старом бекапе они были ровно в том же виде, что и сейчас. Скорее всего это были просто файлы CMS.
 


На этом этапе мы хотели бы передать огромный привет всем любителям Joomla!
Порядка 160 файлов JS библиотек! Рекордсмен – почти 13.000 строк кода или более 300Кб «живого веса»!!! Во всём этом разнообразии не то что бекдор, шелл или зловредный код – полноценную Операционную Систему можно спрятать!!!
 




 
Для локализации проблемы и упрощения поиска мы попросили знакомого запросить через Яндекс.Вебмастер данные о том какой именно код был признан зловредным.
К сожалению прежде чем мы успели проанализировать детально код всех подозрительных файлов (это немалые ресурсы, а мы и так работали на голом энтузизаме, так что нужно было подтверждение от заказчика, что он готов к оплате наших расходов) или техподдержка Яндекса сообщила бы о причинах блокировки, Яндекс неожиданно сообщил, что на сайте больше нет зловредного кода и он возвращается в поиск!
Хозяин сайта естественно сказал «спасибо, извините за беспокойство, всё само прошло» и от дальнейших услуг отказался (так что мы не удалили даже найденные бекдоры, не то что определили проблему).



Однако у нас появилась пара теорий на счёт происшедшего, а так же дополнение к нашей прошлогодней статье.



  1. Возможно, на сайте на момент нашего исследования действительно не было «вредоносного кода». «Полезная нагрузка» (будем так дальше его называть) могла загружаться через бекдор на некоторое непродолжительное время, после чего так же могла удаляться. Наиболее вероятной целью атаки (судя по первичной информации от Яндекса о вирусе) являлись именно JS библиотеки. Однако в силу каких-то обстоятельств (например ошибки кода) при удалении кода злоумышленником он удалялся не целиком. Оставалась точка с запятой. После нескольких итераций таких символов на сайте накопилось изрядно.
  2. «Полезная Нагрузка» действительно могла загружаться заменой строки из ;;;;;;;; в конце JS файла «на лету». Осуществляющий замену код мог быть в не до конца изученных файлах более года или мог загружаться на сайт периодически по сценарию пункта 1.


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


Однако важно то, что данный случай заставил нас задуматься о возможности осуществления фильтра эксплуатации не по признакам пользователей (или не только по ним), но по времени атаки!
Благодаря тому же Яндекс.Вебмастеру теперь владельцы сайтов значительно раньше узнают о заражении и предпринимают меры (хоть и запоздалые), поэтому редко популярный сайт остаётся заражённым на протяжении нескольких месяцев или лет (что было едва ли не «нормой» ещё недавно). Если владелец такого ресурса обращается к нам, то исправление ситуации занимает от нескольких часов, до нескольких дней (или недель в самых сложных случаях). Учитывая «инкубационный период» это означает около месяца для злоумышленника активной работы.
Не лучше ли небольшими наскоками эксплуатировать сайт на протяжении нескольких лет по несколько дней (или 1-2 недели) в месяц?
Как показывает наш случай – это очень эффективная стратегия, ведь владельцы сайта абсолютно не заинтересованы сейчас в избавлении от нелегитимного кода, даже не задумываясь над тем, что однажды он может быть использовать не только против случайных посетителей их сайта, но и против них самих!
 
 
P.S. Если тема не безразличная - рекомендую заглянуть на наш семинар 6 июня. Хотя и очень короткий, но очень важный доклад будет посвящён информационной безопасности.

Комментарии (17)

  • Аватар

    [shveik2014], 16 мая 2013, 16:43

    0
    И вот такой отчёт вы заказчику отдаёте? Там же ничего не понятно...
    • Аватар

      Задойный Алексей [lexnekr], 16 мая 2013, 17:24

      0

      Нет, что вы! Клиент получает полноценный отчёт на нормальном русском языке. Все подобные особенности мы готовы предоставить в виде приложения (при необходимости), но по умолчанию они клиенту не предоставляются, поскольку не нужны. Они нужны нам.

       

      Данный конкретный отчёт - очень сырая промежуточная версия. Он был составлен после предварительного анализа (т.е. после ручного сравнения всех файлов бекапа и и нынешнего состояния сайта + поверхностного ознакомления с содержимым подозрительных или новых файлов). Образец для сравнения был бекап более чем годичной давности, но и его мы не считали "100% чистым".

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

      Поскольку после этого проект был остановлен "спасибо всё хорошо, все свободны", то отчёт не был дополнен исследованием подозрительных файлов. Поэтому я и приложил его к статье "как есть" для полноты картины.

       

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

      • Аватар

        [shveik2014], 16 мая 2013, 17:40

        0

        спасибо!

        лучше выложите сюда образец.

        Не все могут прийти на семинар. Да и не все хотят.

        • Аватар

          Задойный Алексей [lexnekr], 17 мая 2013, 09:11

          0

          Готовим цикл статей о расследованиях конкретных инцидентов. К каждому из них будет приложен отчёт.

          Поскольку те инциденты были расследованы до конца, то отчёты там полноценные.

           

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

  • Аватар

    Walter Andrew [andrew.a.walter], 17 мая 2013, 17:44

    1

    Вполне понимаю  ваше ироничное отношение к "дджумлаводам", но тем не менее - платформа изучена, поддержка и развитие на высоте. Поэтому пользуемся с удовольствием.

     

    А вот проблема, поднятая вами - прямо в точку! Изводит уже 4-й месяц. Именно вот такая "мигалка" (на Джумке 1.5 проявляется).

    С интересом буду следить, если решите дальше исследовать проблему.

    • Аватар

      Задойный Алексей [lexnekr], 20 мая 2013, 09:28

      0

      Андрей, это не ирония. Это именно обозначение проблемы.

      Я не против бесплатных движков как таковых, хотя в последние года прихожу к мысли, что это мало реалистичная затея. Разве что какой-то крупный вендор профинансирует зачем-то (как с Редхат Линуксом).

       

      Касательно исследований - на том конкретном проекте исследования проводиться не будут. Как я написал клиент считает, что "всё само починилось". Если злоумышленник будет достаточно умён, то рецидив заметят не скоро.

       

      Ваш конкретный случай готов рассмотреть, дать рекомендации. Но нужно понимать, что поскольку движок для меня "не родной", потребуется ваша помощь. Условия могу предложить те же, что недавно предложил на форуме для Битриксоидов - http://dev.1c-bitrix.ru/community/forums/forum14/topic53924/

      • Аватар

        Walter Andrew [andrew.a.walter], 20 мая 2013, 16:51

        0

        Ну я считать, что всё само починилось точно не буду, т.к. в чудеса не верю.

        Условия вполне вменяемые и приятные. :)

         

        Насколько я понял, это была прямо волна нападения на джумла-сайты старых версий (особенно 1.5).
        У меня три штуки выкосило сначала, даже зарубленные ниже плинтуса права доступа не помогли.

        Причём онлайн-проверялки, типа safeweb.norton.com и Dr.Web-овский онлайн-сканер говорят, что всё в порядке (ну после развёртывания из резервной копии, конечно). И буквально через несколько часов от Яндекса прилетала блокировка сайта...

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

        Но один сайт всё-ещё на 1.5 (хотя ведёт себя тихо). Да и остальным доверия нет...

         

        • Аватар

          Задойный Алексей [lexnekr], 21 мая 2013, 09:38

          0

          предлагаю решать вопрос в личной переписке - было бы оперативнее =)

          Моя почта - a@coffeediz.ru

           

          Из рекомендаций, которые могут быть полезны всем, а не только вам:

          1. Если есть подозрения - необходим карантин. Следует физически разделить сайты (по разным хостинг-аккаунтам или разным веб-серверам с разными пользователями, если живёте в рамках виртуального сервера. Если в рамках выделенного - тоже самое, но ещё лучше по разным виртуалкам разнести. Во время карантина используйте максимально сложные, уникальные логины/пароли ко всему (фтп, админка) и уменьшите их количество (ограничьте доступ пользователей, которые могут "месяц потерпеть без редактирования сайта"). Ни в коем случае не храните не передавайте реквизиты доступа в явном виде. Храните их в зашифрованном архиве (а пароль от архива передавайте аналоговым способом, например, на бумажке). Используйте шифрование (https для админки, sftp вместо ftp). Режим максимальной паранойи.
          2. Самостоятельно просканируйте сайт "Айболитом" - http://www.revisium.com/ai/ (он даёт много ложных срабатываний и некоторые хитрые угрозы может не засечь, но в целом инструмент очень хороший).
          3. Если есть резервная копия, которая вряд ли была заражена (например проблемы начались 4 месяца назад, а у вас есть полугодичный-годичный бекап), которая относительно консистентна, то произведите побайтовое сравнение всех файлов. Не можете или не умеете - давайте попробую я. В некоторых случаях опять же обращусь к вам же, поскольку я не жумловод. Естественно число различий должно быть разумным, поскольку иначе я могу закопатсья на несколько дней (так и происходит детальный анализ на практике в самых сложных случаях), что в нашем случае не желательно.

           

          Ну и конечно покажите пациента, укажите что именно написал яндекс. Если вредоносный код яндекс до сих пор детектирует - напишите через Яндекс.Вебмастер просьбу указать какой участок кода признан вредоносным и почему (объясните, что это упростит работу по лечению сайта).

          • Аватар

            Митрофанов Сергей Генадьевич [SergeyMitrifanov], 23 мая 2013, 10:57

            0
            А если бекапа нет и айболит ничего не находит?
            • Аватар

              Задойный Алексей [lexnekr], 23 мая 2013, 11:45

              0

              Изучать код.

              Есть вероятность, что у злоумышленника просто есть доступ и "полезная нагрузка "моргает", как описано в статье.

              Тогда вам пригодится пункт 1, описанный выше.

               

              Ну а дальше просто брать и изучать исходники. + ставить файрволл и мониторить все подключения.

              Очень тяжело, кропотливо, без гарантии на успех.

              Сами вряд ли справитесь - обращайтесь к специалистам по ИБ (возможно даже к кому-нибудь посерьёзнее нас, мы ведь в первую очередь веб студия, а не безопасники).

               

              Альтернативный вариант - собрать всё заново в изолированной среде "как полагается". И дальше соблюдать правила гигиены.

              • Аватар

                Митрофанов Сергей Генадьевич [SergeyMitrifanov], 23 мая 2013, 13:56

                0

                А как именно искать этот код? По каким признакам?

                Если уж его не нашёл специальный софт (айблолит, антивирус касперского)

                • Аватар

                  Задойный Алексей [lexnekr], 23 мая 2013, 15:39

                  0

                  Если бы было возможно сформулировать какие-то формальные признаки - их бы уже давно использовали в соответсвующем инстурменте.

                   

                  • Ищите то, что выглядит подозрительно
                  • То, что находится не на месте (JS код в php или CSS, php код в файлах с расширением картинок, и т.п.)
                  • То, чему не положено быть (папка с кешем внутри папки с компонентами админки, например)

                   

                  Признаки офусцированного кода или шифрования айболит проверяет хорошо, так что если он ничего не нашёл, вы скорее всего тоже не найдёте, но если вдруг наткнётесь - будьте внимательны!

                   

                  Вообще это тот случай, где самолечение уже вряд ли приведёт к выздоровлению - обратитесь к специалисту. Специалисты такой код ищут "по наитию", полагаясь на интуицию. Ну и конечно всевозможные мониторы и сканеры активности помогают ))))

  • Аватар

    Задойный Алексей [lexnekr], 20 мая 2013, 09:55

    0

    Забавно. Пост попал в категорию "IT услуги" в рассылке.

    Хотя в данном случае мне казалось я не об услуге говорю, а об области рисков.