Вирмейкинг в среде Linux — HackZona.Ru

Вирмейкинг в среде Linux

Вирмейкинг в среде Linux

Тип статьи:
Со старой ХакЗоны.
Источник:
Данная статья исследует возможные пути написания вирусов, запускающихся под операционной системой типа Linux (не ограничиваясь конкретным дистрибутивом). Поскольку здесь нет ни одной строчки кода, раздел «операционные системы» для этой статьи подходит лучше, чем «программирование».

Возможно ли это?
Более чем. То, что число вирусов под Linux мало по сравнению с числом вирусов для Windows свидетельствует только о низком интересе вирмейкеров к этой платформе. Представьте себе, что Linux стало использовать хотя бы 10% пользователей. Тогда число вирусов непременно возросло бы. Более того, Linux на данный момент более чем подвержен возможным вирусным эпидемиям, в связи с отсутствием в нем адекватного антивирусного софта (те антивирусы, которые ставятся на файловые сервера и сканируют exe'шники, естественно, не считаем).

И зачем оно надо?
Популярность Linux повышается. Не исключено, что следующий, кого вы захотите взломать, будет использовать именно эту ОС. Наиболее результативным приемом заражения компьютера является прогруз жертве троянца. Ситуация усугубляется тем, что большинство пользователей, переходящих на Linux еще не так хорошо в ней разбираются, и верят своим «друзьям», которые говорят: «В Linux нет вирусов».

Разоблачение мифов
1.«Ваши вирусы только компиляцией распространяются». Широко известное заблуждение. Возникает оно из-за того, что большая часть программ в мире *nix распространяется в исходниках и тянет за собой зависимости. Что мешает написать вирус без использования лишних зависимостей от сторонних библиотек и распространять бинарик? Абсолютно ничего.
2.«Без root'а вирусы ничего не могут». Да, они не могут без рута заражать программы, расположенные в /usr/bin, но могут проделывать любые действия, разрешенные пользователю, от чьего имени они запущены. Например, удалять данные или биндить 31337-tcp порт, рассылать спам, выступать в роли socks/proxy для хэккера (если фаерволл настроен неправильно, либо вообще не настроен). Кроме того, в вирус можно встроить связку сплоитов для ядра, или для сервисов, работающих под root, и стать рутом. Дальше сдержит только наличие ограничений для суперпользователя, которые точно мало кто устанавливает.
3.«Linux система с более совершенными настройками прав пользователей. Вирусы просто не получат прав на запуск». Во-первых, вирус будет заноситься не сам по себе, а через эксплуатацию какого-либо бага в софте, например в firefox. Однажды запущенный таким образом вирус способен установить себе все нужные права, а при наличии root бит suid, и спокойно запускаться из какого-нибудь скрипта инициализации, типа ~/.profile

Примерный алгоритм работы простого вируса под Linux

1 Итак, сначала нужно определить, как вирус будет получать управление. Сделать это можно разными средствами. Можно эксплуатировать уязвимость в каком-нибудь софте, а можно впаривать запуск средствами соц. инженерии. Для простоты, положим что вирус должен выполняться только под архитектурой x86.

2 На втором этапе вирус должен убедиться, что он установлен на диск компьютера жертвы и при перезапуске получит управление вновь. Для этого надо записать его тело в файл формата ELF и добавить команду на его запуск в какой-нибудь скрипт инициализации. Если вирус впаривался вручную, то он, скорее всего, уже записан на диск, нужно только внести изменения в один (или несколько) скриптов. Подойдут любые скрипты, получающие управление при загрузке системы, либо при входе пользователя в систему.

3 Просканировать локальную систему на присутствие возможно уязвимых сервисов, а также попробовать использовать эксплоит повышения прав для ядра. Если получаем root, то дело в шоколаде (за исключением случая, когда права самого суперпользователя ограничены, но так делают только самые настоящие параноики).

4 Сделать несколько резервных копий своего тела, реализованных в виде бэкдора. Многие дистрибутивы Linux часто выпускают обновления, поэтому записи в одном скрипте может оказаться недостаточно при обновлении скриптов запись может удалиться и наш вирус больше не будет получать управление при запуске. Идеальный вариант хранить бэкдор в виде головки-распаковщика + сжатого и зашифрованного тела. Не забыть проставить нужным файлам права на запуск!

5 Здесь уже можно переходить к выполнению полезной нагрузки.

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

Пути обмана пользователя и ручного запуска вируса
Возьму, для примера, среду GNOME. В первую очередь следует обратить внимание на меню приложений, которое можно пропатчить модификацией файлов, лежащих в ~/.config/menus
Например, можно подменить запуск конкретного приложения запуском вируса. Чтобы пользователь не заметил подмены, нужно следом запустить запрашиваемое приложение.

Также следует обратить внимание на gconf, и, в частности, на ветку /desktop/applications
Там можно задать «любимые программы» типа браузеров, почтовых агентов, календаря и т.д. Меняем программу на своего зверя, и точно так же как и в предыдущем случае запускаем запрошенное приложение, не забыв передать ему все нужные аргументы.

Для того, чтобы просматривать трафик всех приложений, работающих через gtk+ (например firefox, xchat), необязательно устанавливать снифер. Достаточно установить свой прокси-сервер в gconf: /system/proxy. Только пусть ваш прокси работает круглосуточно, иначе подозрения возникнут даже у самого неопытного пользователя. И на всякий случай добавляйте заголовок X_HTTP_FORWARDED_FROM с ip-адресом владельца, чтобы избежать лишних подозрений. С SOCKS все обстоит несколько сложнее, зато через него может работать больше программ.

Распространение вирусов в исходниках
В данном случае подразумевается совсем не то, о чем вы подумали. Эта техника уже давно известна: взламывается сервер с репозитариями, загружается зараженный пакет, подменяется checksum и вуаля. От последствий заражения спасает только быстрая реакция админов хранилища.

Но это одна сторона медали. Что мешает автору программы хитро запрятать в ней уязвимость, особенно если в программе минимум 100 тысяч строк кода? Отсутствие бэкдоров в «открытых исходниках» можно подтвердить только после изучения каждой строчки по отдельности, и всей программы в целом. Вы наверняка так или иначе используете свободное ПО, утверждая что в нем нет «шпионских закладок». А вы в них заглядывали? Много ли вы в них увидели понятного сразу? Наличие исходников только помогает в реверс-инженерии тем, кто не владеет искусством дизассемблирования, но не избавляет от самой необходимости анализа. По сути, даже такая простая и известная всем вещь как buffer overflow уже может выступать в роли «закладки».

Заражение файлов
В Linux заражение системных файлов, таких как ядро и драйверы не так эффективно, как может показаться. В отличие от Windows, ядро и системные компоненты Linux обновляются чаще, а значит зараженный файл рано или поздно будет перезаписан. Перехватывать перезапись также непросто. Поэтому выбирать нужно такие программы, которые почти не обновляются, или обновляются достаточно редко: ls, find, grep, gcc, ld, awk и т.д, но в то же время к ним происходят частые обращения.

Здесь есть еще одна тонкость: можно не модифицировать существующие утилиты, а просто записать свою псевдоутилиту, скажем, в /home/username/.utilites, выставить себе права на выполнение и отредактировать PATH, поставив свой путь на первое место. Точка в имени папки нужна, чтобы сделать её «скрытой» в nautilus. (тем не менее, она будет показана по команде ls -a).

Заключение
В этой статье были описаны самые простые способы заражения вирусами и троянами систем типа Linux. На самом деле они не заканчиваются этим списком, а только начинаются. Помните: то, что под Linux мало вирусов, не заслуга платформы, а следствие её непопулярности в роли объекта вирмейкеров.
Нравится
Не нравится

5 комментариев

21:44
хорошо расписал, действительно, если-бы линукс привлек соответствующих умельцев, то не сколько бы он не удержался.
12:09
Вирмеры просто не хотят трогать пингвина.:-) и правильно делают.
23:18
Придется ставить на Ubuntu файрвол для порядка.
19:00
Значит нужен фаервол, и грузить проги только с оффициальных репозитариев, а заодно написать прогу которая будет просматривать скрипты инициализации фиксируя все изменения и создавая файлы откатов.
21:04
У вирмейкеров нет правил :/
А не трогают, потому что выгода не окупает затрат (менее 1% юзеров)