Как написать вирус на php


Для начала небольшая история

Жил как-то один монах. Все него было нормально в его монашеской жизни, тихо и скромно молился он в своем монастыре, работал на послушаниях, периодически пил чай, заваривая крупные листья прямо в своей монашеской чашке. Да и много ли монаху нужно, и был у него покой и мир в душе. А вот однажды подарили ему ситечко для чая, чтобы чай заваривать не в чашке, а в ситечке, удобно ведь, чаинки по чашке не плавают, и на зуб не попадают. Все здорово, и ситечко хорошее, красивое и чай теперь заваривать удобно, да вот незадача, за ситечком нужно следить, после каждой заварки мыть его, давать ему просохнуть, где-то хранить между чаепитиями. Вот и появилась у монаха лишняя забота, отвлекающая его от монашеской жизни. Уж лучше без ситечка, спокойствия больше…

К чему это я. А к тому, что есть у меня хостинг на котором крутятся несколько веб-серверов. Все там хорошо, удобно, да вот только следить нужно за ними внимательно.

Однажды, холодным летом 2017 года, уехал я в отпуск. Сервера работают, все хорошо, так что можно расслабиться недельки две. Связь не очень, интернет сотовый, так что не слишком следил за всем этим хозяйством. Приезжаю, а сервера не работают. Что такое? Заглядываю системные сообщения, а там послание от провайдера. Мол выключили мы ваш сервер, поскольку нарушаете вы такой разэдакий соглашение, занимаетесь культивированием вирусов. Посмотрите внимательно, мол на вот этот список файлов и примите меры. Смотрю я, а там… Мама дорогая, кишат вирусы на всех серверах. Для начала прогнал Касперским, тот сказал, что заразу зовут Troyan.PHP.Agent. Лечить не смог, поудалял половину файлов, это мне не подойдет, значит нужно руками восстанавливать.

Как это выглядит? Во-первых, во всех каталогах, где были файлы
index.html теперь комплект
index.html.bak.bak
index.php

при этом на index.php стоит атрибут разрешения запуска. Что уже настораживает, обычно это не нужно.
в самом файле ссылки на запуск вируса такого вида


т.е. по алгоритму сначала запускается некий вирусный код, а затем уже старая страница. Причем этот код вкрапился не только в index.php, но еще в большое количество случайных файлов с расширением php, и еще добавил свои файлы с определенными именами, к примеру footer.php или rss.php где прячется тело вируса


Вирус даже имена старается давать какие-то осмысленные, типа нужные файлы. Кстати, интересно, лежат зараженные файлы с расширением ico, а не только php


Все в зашифрованном виде. в отдельные файлы тоже красиво добавился, с большим количеством пробелов, чтобы не видно было, если переносов строк
не делать. Заглядываем в редакторе, вроде все нормально


А вот только включим перенос строк и вот здесь оказывается еще много чего интересного


Также если посмотреть почтовый протокол, то там множество попыток отослать что-то на различных пользователей домена ispmail.ru. Благо хостер не
дает отслылать почту с сайта на левые адреса, так что протокол пестрит отшибками отправки.

Как лечить зараженный Troyan.PHP.Agent сайт? Если файлов много, то наиболее простой способ восстановиться из копии, если она конечно есть. Если копии нет, то придется лазить ручками по всем файлам и удалять вредоносный код. Благо сами файлы текстовые и это вопрос времени и усидчивости. Правда, если пропустить хоть один файл, то заражение будет повторным.

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

Затем просканировал каталоги по простому и переименовал обратно в html все, что вирус мне напортил, а сам код удалил.

rm index.php
mv index.html.bak.bak index.html
chmod ugo-x index.html

Теперь черед за отдельными файлами.
Ищем файлы с атрибутом разрешения запуска и выводим в протокол

find /home/ -name “*.php” -perm /a=x -print > text1.txt
С каждым придется разбираться отдельно. Возможно, некоторые нужны, но если в них будет вирусный код, его нужно чистить.

Ищем файлы, где меняются глобальные переменные, вирус в первую очередь делает это

grep -r ‘GLOBALS\[‘ /home/ > text2.txt


Здесь мы видим на фоне вполне читаемых текстов, какой-то подозрительный код в файле work.php. Глобальные переменные и сплошное шифрование, удаляем.

Поищем PHP с шифрованием кода

grep -r ‘php $ <“‘ /home/ >test2.txt

И всякие преобразования
grep -r ‘eval/’ /home/ >test.txt

И, к примеру, множество пробелов

grep -r ‘ ‘ /home/ > test3.txt


И еще напоследок разные варианты для поиска

поиск скриптов, где включаются файлы

grep -r “echo file_get_content” /home > text2.txt

grep -r “@include ” /home/ > text3.txt

поиск кодированной точки с запятой из текущего каталога и ниже, возможен вирус

Запрещаем запуск в каталоге загрузки

RemoveHandler .php .phtml .pl
AddType text/plain .php .phtml .pl .fcgi .fpl .phtml .shtml .php2 .php3 .php4 .php5 .asp .jsp
Options -ExecCGI
php_flag engine 0

В каталоге администрирования запрещаем админку для всех адресов, кроме нашего

Order Deny,Allow
Deny from all
Allow from ваш._.IP

Надеюсь, кому-нибудь поможет эта информация.



Хакерский мир можно условно разделить на три группы атакующих:

Может ли кто-то с хорошими навыками в программировании стать последним? Не думаю, что вы начнете создавать что-то, на подобии regin (ссылка) после посещения нескольких сессий DEFCON. С другой стороны, я считаю, что сотрудник ИБ должен освоить некоторые концепты, на которых строится вредоносное ПО.

Зачем ИБ-персоналу эти сомнительные навыки?

Знай своего врага. Как мы уже обсуждали в блоге Inside Out, нужно думать как нарушитель, чтобы его остановить. Я – специалист по информационной безопасности в Varonis и по моему опыту – вы будете сильнее в этом ремесле если будете понимать, какие ходы будет делать нарушитель. Поэтому я решил начать серию постов о деталях, которые лежат в основе вредоносного ПО и различных семействах хакерских утилит. После того, как вы поймете насколько просто создать не детектируемое ПО, вы, возможно, захотите пересмотреть политики безопасности на вашем предприятии. Теперь более подробно.

Кейлогер – это ПО или некое физическое устройство, которое может перехватывать и запоминать нажатия клавиш на скомпрометированной машине. Это можно представить как цифровую ловушку для каждого нажатия на клавиши клавиатуры.
Зачастую эту функцию внедряют в другое, более сложное ПО, например, троянов (Remote Access Trojans RATS), которые обеспечивают доставку перехваченных данных обратно, к атакующему. Также существуют аппаратные кейлогеры, но они менее распространены, т.к. требуют непосредственного физического доступа к машине.

Тем не менее создать базовые функции кейлогера достаточно легко запрограммировать. ПРЕДУПРЕЖДЕНИЕ. Если вы хотите попробовать что-то из ниже следующего, убедитесь, что у вас есть разрешения, и вы не несёте вреда существующей среде, а лучше всего делать это все на изолированной ВМ. Далее, данный код не будет оптимизирован, я всего лишь покажу вам строки кода, которые могут выполнить поставленную задачу, это не самый элегантный или оптимальный путь. Ну и наконец, я не буду рассказывать как сделать кейлогер стойким к перезагрузкам или пытаться сделать его абсолютно не обнаружимым благодаря особым техникам программирования, так же как и о защите от удаления, даже если его обнаружили.

Для подключения к клавиатуре вам всего лишь нужно использовать 2 строки на C#:

Вы можете изучить больше про фунцию GetAsyncKeyState на MSDN:

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

Что здесь происходит? Этот цикл будет опрашивать каждые 100 мс каждую из клавиш для определения ее состояния. Если одна из них нажата (или была нажата), сообщение об этом будет выведено на консоль. В реальной жизни эти данные буферизируются и отправляются злоумышленнику.

Умный кейлогер

Погодите, а есть ли смысл пытаться снимать всю подряд информацию со всех приложений?
Код выше тянет сырой ввод с клавиатуры с любого окна и поля ввода, на котором сейчас фокус. Если ваша цель – номера кредитных карт и пароли, то такой подход не очень эффективен. Для сценариев из реального мира, когда такие кейлогеры выполняются на сотнях или тысячах машин, последующий парсинг данных может стать очень долгим и по итогу потерять смысл, т.к. ценная для взломщика информация может к тому времени устареть.

Вторая версия кода:

Еще более умный кейлогер

Давайте предположим, что злоумышленник смог получить данные кодом, на подобии нашего. Так же предположим, что он достаточно амбициозен и смог заразить десятки или сотни тысяч машин. Результат: огромный файл с гигабайтами текста, в которых нужную информацию еще нужно найти. Самое время познакомиться с регулярными выражениями или regex. Это что-то на подобии мини языка для составления неких шаблонов и сканирования текста на соответствие заданным шаблонам. Вы можете узнать больше здесь.

Для упрощения, я сразу приведу готовые выражения, которые соответствуют именам логина и паролям:

Эти выражения здесь как подсказка тому, что можно сделать используя их. С помощью регулярных выражений можно искать (т найти!) любые конструкции, которые имеют определенный и неизменный формат, например, номера паспортов, кредитных карт, учетные записи и даже пароли.
Действительно, регулярные выражения не самый читаемый вид кода, но они одни из лучших друзей программиста, если есть задачи парсинга текста. В языках Java, C#, JavaScript и других популярных уже есть готовые функции, в которые вы можете передать обычные регулярные выражения.

Для C# это выглядит так:

Где первое выражение (re) будет соответствовать любой электронной почте, а второе (re2) любой цифро буквенной конструкции больше 6 символов.

Бесплатно и полностью не обнаружим

В своем примере я использовал Visual Studio – вы можете использовать свое любимое окружение – для создания такого кейлогера за 30 минут.
Если бы я был реальным злоумышленником, то я бы целился на какую-то реальную цель (банковские сайты, соцсети, тп) и видоизменил код для соответствия этим целям. Конечно, также, я запустил бы фишинговую кампанию с электронными письмами с нашей программой, под видом обычного счета или другого вложения.

Остался один вопрос: действительно такое ПО будет не обнаруживаемым для защитных программ?


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

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

В следующих статья я покажу, как сделать действительно не обнаружимую версию такого ПО.

Читайте также:

Пожалуйста, не занимайтесь самолечением!
При симпотмах заболевания - обратитесь к врачу.

Copyright © Иммунитет и инфекции