- Скрипт-вирусы linux
- СКРИПТ-ВИРУСЫ LINUX
- Обоснование реальности угрозы новых видов атак на программные системы специального назначения со стороны внутреннего нарушителя. В настоящее время важной задачей в защите систем специального назначения является обеспечение безопасности подобных систем от внутреннего нарушителя. Если для борьбы с внешним нарушителем разработчики программных средств защиты уже накопили достаточный опыт, то вопросы противостояния внутреннему нарушителю в настоящее время изучены недостаточно.
- Троянский пингвин: Делаем вирус для Linux
- Дисклеймер
- И что мы, собственно, будем делать?
- Что такое deb-пакет?
- Сначала был демон
- Модифицируем deb-пакет
- Проблемы с postinstall
- Собираем воедино
Скрипт-вирусы linux
СКРИПТ-ВИРУСЫ LINUX
Обоснование реальности угрозы новых видов атак на программные системы специального назначения со стороны внутреннего нарушителя. В настоящее время важной задачей в защите систем специального назначения является обеспечение безопасности подобных систем от внутреннего нарушителя. Если для борьбы с внешним нарушителем разработчики программных средств защиты уже накопили достаточный опыт, то вопросы противостояния внутреннему нарушителю в настоящее время изучены недостаточно.
Антивирусные продукты в большинстве своем ориентированы на отражение атак злоумышленников извне и не рассчитаны на то, что атака может последовать со стороны доверенного для системы пользователя. Безусловно, антивирусные системы могут предотвратить ряд атак (но не все), которые, по сути, идентичны аналогичным атакам потенциальных внешних нарушителей, но это не основная задача существующих антивирусных программ, так как изначально они разрабатывались для отражения внешних атак. При этом внутренний пользователь даже с ограниченным доступом может нанести не меньший, а в ряде случаев даже больший вред, чем потенциальный внешний противник.
Вопрос обеспечения безопасности подобных систем сводится к административным и программным методам защиты. Административные методы защиты должны минимизировать возможность получения доступа внутреннего злоумышленника к критически важным объектам защищаемой системы. Программные методы защиты должны минимизировать возможности злоумышленника в том случае, если он получает подобный минимально допустимый административными правилами доступ.
На основе анализа существующих административных мер, ограничивающих возможности внутреннего злоумышленника можно сделать следующие выводы. Пользователь, работающий в системе специального назначения и имеющий низкий уровень доверия, как правило, лишен возможности устанавливать собственные программные средства, тем более средства, которые не являются доверенными. Терминал подобного пользователя не имеет возможности поддерживать работу с внешними носителями, что исключает попадание в систему скомпилированных вредоносных программ. Также системы специального назначения в большинстве своем лишены возможности выхода в сеть Интернет. По крайней мере, такой возможности лишены пользователи с низким уровнем доверия, что делает невозможным скачивание вредоносных программ извне. Подобная ситуация оставляет практически единственный способ проникновения вредоносных программ в систему с терминала внутреннего пользователя – использование создаваемых в короткое время вручную непосредственно на атакуемой системе скрипт-вирусов.
В настоящее время разработчиками антивирусных программ все большее внимание уделяется защите тех компонентов, атаки на которые фиксируются чаще. Компоненты систем, атаки на которые зафиксированы не были, не защищаются. Об уязвимостях некоторых компонентов принято умалчивать, чтобы создать в коммерческих целях псевдо защищенный образ программного продукта.
Тема атак скрипт-вирусов для командных интерпретаторов на ОС семейства UNIX в настоящее время поднимается редко. Существование скрипт-вирусов рядом экспертов в области компьютерной вирусологии отрицается как факт. Существуют утверждения, что подобные вирусы являются гипотетической угрозой безопасности.
Скрипт-вирусы – это вирусы, создаваемые на интерпретируемых языках программирования. У современных создателей антивирусных систем накоплен богатый опыт борьбы с вирусами, написанными на исполняемых языках программирования. Опыт борьбы со скрипт-вирусами под ОС семейства UNIX отсутствует. Причиной этому можно назвать нежелание вкладывать усилия и финансы в исследование нового вида вирусов, которые не столь распространены.
При этом ОС типа UNIX являются основными для использования на объектах, где надежность системы является критичной.
Скрипт-вирусы недооцениваются по причине ошибочного мнения, что эти вирусы не могут получить в системе привилегированных прав, а значит, не способны причинить существенный вред. Данное заблуждение связано с заявлениями антивирусных экспертов, которые большую часть времени работают с вирусами, написанными на языке Assembler. Подобные вирусы используют уязвимости системы (переполнение буфера и т. п.) для того, чтобы получить привилегированные права. В арсенале скриптовых языков нет механизмов, которые позволили бы воспользоваться такими уязвимостями. Однако точка зрения, что любые вирусы должны распространяться, используя уже известные механизмы, приводят к заблуждению, что скрипт-вирусы являются безобидными, так как не могут повысить свои права в системе.
Еще одной важной причиной, почему защита от атак с использованием скрипт-вирусов не обеспечивается в полной мере, является недооценка разработчиками антивирусных систем того факта, что вирусы могут использовать в своей деятельности не только внешние, но и внутренние злоумышленники. Последние, как правило, ограничены в своих возможностях использованием исключительно скрипт-вирусов.
Интерпретатор и компилятор. Преимущества вирусов на интерпретируемых языках. Скрипт-вирусы на языке Shell . Скрипт-вирусы создаются на так называемых интерпретируемых или, что то же самое, скриптовых языках. Кратко рассмотрим, чем отличаются интерпретируемые языки программирования от компилируемых.
Скорость выполнения программ в режиме интерпретации ниже, чем у компилированного кода, так как при каждом запуске интерпретируемой программы необходимо заново переводить текст программы, написанной программистом, в машинный код. При этом если одна и та же команда будет выполняться в программе многократно, то интерпретатор будет выполнять эту команду так, как будто встретил ее впервые. Вследствие этого программы, в которых требуется осуществлять большой объём вычислений, будут выполняться медленно. Кроме того, если необходимо перенести и выполнить команду на другом компьютере, то надо убедиться в том, что на нем также установлен интерпретатор. Тем не менее, данный недостаток интерпретируемых программ одновременно является их огромным преимуществом.
Скрипт-программа может быть перенесена на компьютер с отличающейся ОС в большинстве случаев без существенных изменений. При этом необходимо выполнение только одного условия: на компьютере должен быть установлен необходимый интерпретатор.
Простота отладки и гибкость являются причиной того, что интерпретируемые языки часто применяются администраторами для написания служебных скриптов для взаимодействия с ОС, а также для разработки web-приложений. К интерпретируемым языкам программирования относится, например, командный язык shell.
Преимуществами скрипт-вирусов являются те же самые преимущества, которые отличают программы, написанные на интерпретируемых языках программирования. Большинство скрипт-вирусов не зависят от версии ОС, а также от той версии ПО, которое установлено на компьютере. Все, что необходимо скрипт-вирусу, – интерпретатор.
В случае, когда вирус представляет собой компилируемую программу, существует возможность того, что это программа даже не сможет быть запущена под ОС, которая имеет отличную архитектуру или, например, не имеет необходимых для исполнения программы библиотек. Запуск такой программы закончится неудачно, а, значит, опытный пользователь или администратор может с легкостью обнаружить тот факт, что на машине была запущена вредоносная программа. Скрипт-вирусы не имеют зависимости от версии ОС, кроме того, в их распоряжении имеется огромное количество приемов, которые позволяют скрыть аварийное завершение работы вирусного кода.
Еще одно преимущество скрипт-вирусов заключается в том, что они могут быть относительно небольшого размера. Для написания кода троянской программы необходимо всего лишь несколько строчек скрипта. Данное свойство скрипт-вирусов позволяет им, будучи встроенными в код скрипта-жертвы, оставаться незаметными для системных администраторов.
Относительная простота скриптовых языков в сочетании с их широкими возможностями, а также простотой отладки, позволяют с легкостью создавать достаточно опасные вирусы даже не самым опытным пользователям.
В диссертации рассматривается класс скрипт-вирусов – скрипт-вирусы на командном языке Shell. Этот язык используется пользователями и администраторами для взаимодействия с операционной системой. Когда пользователи отдают команды операционной системе типа UNIX, они делают это, как правило, используя интерпретатор команд. Каждый вызов интерпретатора осуществляет считывание команды со стандартного устройства ввода и ее выполнение. Зачастую последовательность команд записывают в файл, который при необходимости запускается на исполнение пользователем или администратором. Скрипт-вирусы на командном языке Shell представляют собой как раз такие файлы с наборами вредоносных команд.
Приводятся результаты исследования механизмов функционирования скрипт-вирусов командных интерпретаторов ОС семейства UNIX. При этом выделяются три класса базовых функциональных возможностей РПВ:
Анализируются и классифицируются возможные приемы, которыми могут воспользоваться создатели скрипт-вирусов.
Источник
Троянский пингвин: Делаем вирус для Linux
Нет, я не собираюсь рассказывать, как написать своего шифровальщика-вымогателя, майнера или эксплуатировать супер-новую уязвимость, как вы могли подумать. И тем более я не горю желанием поднимать холивар «Linux безопаснее Windows?(да)». Моей целью было написание простого вируса для linux, некого, так сказать, «Just for Fun», единственной функцией которого является распространение своей копии. О том, что у меня получилось, я расскажу в этой статье. В конце я приведу ссылку на GitHub с исходниками.
Дисклеймер
Данная статья написана в ознакомительных целях. Автор ни в коем случае не призывает читателей к нарушению законодательства РФ. Пожалуйста, не повторяйте действия, описанные в данной статье, предварительно не ознакомившись с главой 28 УК РФ.
И что мы, собственно, будем делать?
Самым простым в реализации механизмом распространения вируса для меня показалось распространение через модифицированные deb/rpm пакеты. Пакеты формата deb и rpm сейчас являются наиболее популярным средством распространения по для Linux. Я остановил свой выбор на формате deb, так как количество пользователей Debian-based дистрибутивов преобладает над пользователями Red Hat и ее «последователей».
Еще необходимо, чтобы вирус автоматически запускался, и через каждый определенный период времени сканировал компьютер в поисках deb-пакетов. Для удобства отладки я выбрал период равный 10 минутам.
Что такое deb-пакет?
Deb-пакет представляет из себя архив формата .ar, который не использует сжатие. Внутри архива еще три файла: debian-bynary, control.tar и data.tar
debian.binary — текстовый файл, содержащий версию формата deb-пакета, на данный момент там всегда пишут «2.0».
control.tar — архив с файлами, содержащими информацию о пакете (например — обязательный файл control) и пакеты, необходимые для установки пакета (например — скрипты preinst, postinst, prerm и postrm, запускаемые до/после установки/удаления пакета). Может быть сжат с помощью gzip или xz, в таком случае к имени архива добавляется расширение .gz или .xz соответственно.
data.tar — архив с директориями, содержащими устанавливаемые файлы. Директории представлены деревом, в виде которого они должны извлечься в корень файловой системы. Может быть сжат с помощью gzip, bzip2, lzma, xz.
Нам необходимо обратить внимание на файл control из архива control.tar. Этот файл содержит информацию о пакете, такую как автор, описание, версию, приоритет пакета в системе и т. д. Меня интересует поле depends, в котором указаны зависимости (пакеты, без которых по из данного пакета не может работать). В это поле наш вирус будет дописывать fakeroot и dpkg — утилиты, которые понадобятся при модификации других пакетов на зараженном компьютере.
Для сборки deb-пакета создается корневая директория пакета. В нее кладутся директории с устанавливаемыми файлами и директория DEBIAN, содержащую служебные файлы, среди которых control и скрипты для установки/удаления. Затем выполняется команда fakeroot dpkg-deb —build ./path.
Сначала был демон
На момент написания вируса я еще плохо представлял, что такое Cron, и поэтому пошел путем написания собственного демона для systemd. Я создал файл trojan_penguin.service, который будет помещаться в директорию /lib/systemd/system, и добавил в нее следующее:
ExecStart=/usr/bin/trojan_penguin.sh — тут я указал путь к файлу (к будущему вирусу), который должен запускаться при старте системы.
Type=fork — это строка показывает, что процесс должен ответвиться от родительского процесса.
Я не видел необходимости в PID-файле, по этому я не стал его добавлять.
В мануалах по написанию своего демона фалы .service предлагается размещать в директориях /usr/lib/systemd/system/ или /etc/systemd/system/. Но я в своей убунте нашел директорию /lib/systemd/system. (у меня туда попал apache2.service). Может быть кто-нибудь в комментариях напишет, для чего нужна эта директория, и чем она отличается от двух других.
Файл /usr/bin/trojan_penguin.sh у меня получился таким:
Мы ищем deb-пакеты в разделе /home (а где их еще искать то?), пути к найденным файлам записываем в переменную list. Потом просто перебираем все строки из line и для каждого файла запускаем скрипт tp_infect.sh, который заразит этот файл. Когда я писал вирус, скрипты находились в отдельной директории, и для удобства я создал переменную debug, в которой я прописал путь к этой папке.
Демон готов, осталось научиться его запускать при старте системы. Для этого я написал скрипт postinstall. Он будет запускаться сразу после установки зараженного пакета и указывать, чтобы наш вирус запускался вместе с системой. Разместил я его в директории «/usr/bin/», чтобы от туда копировать его в заражаемые пакеты.
Модифицируем deb-пакет
Как я писал выше, архивы, содержащиеся в deb-пакете могут иметь разные разрешения. Я не стал заморачиваться, и рассмотрел только тот случай, когда архивы сжаты с помощью .xz. Файл /usr/bin/tp_infect.sh, отвечающий за модификацию, получил такое содержимое:
Проблемы с postinstall
Все бы хорошо, но теперь у нас проблема. А что если в пакете уже есть postinstal? Оригинальный postinstal может быть написан на разных языках (python, bash. ), может это даже бинарник. Это не позволят нам просто взять и дописать свой postinstall в него. Я решил эту проблему следующим образом:
Добавил в скрипт tp_infect.sh такую вещь:
А в postinstal вот это:
Одну проблему я решил, но появилась другая. Наш вирус будет модифицировать пакет, даже если он уже заражен. При модификации вирус увидит, что в пакете есть postinstal (который на самом деле наш), переместит его в /usr/bin/, тем самым перезаписав оригинал. Чтобы этого избежать, я добавил проверку в «tp_infect.sh», модифицировали мы этот файл или нет:
Собираем воедино
Вирус готов. Вот ссылка на GitHub, как и обещал. Этот вирус можно собрать в отдельный deb-пакет (запустите makedeb.sh) из репозитория. Чтобы внедрить вирус в какой-либо пакет, достаточно выполнить команду:
В репозитории есть две копии скрипта postinst
DEBIAN/postinst — эта копия выполняется только при установке пустого пакета с вирусом. Я его закомментировал, чтобы вирус не запускался после установки, а модивиццировал пакеты только по команде.
usr/bin/postinst — это копия вставляется в заражаемые пакеты.
А вывод очевиден и без этой статьи: не стоит скачивать и запускать программы из непроверенных источников.
Ради любопытства, я отправил deb-пакет с вирусом на VirusTotal для анализа. На момент написания статьи ни один антивирус не задетектировал его. Вот ссылка на отчет. Интересно, сколько должно пройти времени, и сколько хостов нужно заразить этим вирусом, чтобы антивирусы обратили на него внимание?
Источник