Владислав Кабак | Omegicus CIO

NebKa

География

На бумаге из конопли был написан первый проект Декларации Независимости, а из волокон соткан первый американский флаг.


читать далее »

Космос

Космос содержит примерно 50 миллиардов галактик.


читать далее »

Козочка из лампочек и папье-маше.

Сувенир, символ 2015 года, от мастерицы relapinka. Высота козочки с рожками 18-19 см. Огромное спасибо автору за чудесную работу и мастер-класс! Для работы понадобится:Две пузатые лампочки, проволока, скотч бумажный и готовое папье-маше Для росписи акриловые краски. Рецепт папье-маше: Нам нужна бумага



читать далее »

Анекдот

Молодых девушек в подъезде не было, и бабушкам на лавочке приходилось называть проституткой дворника Митрича


читать далее »

Совет:

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


читать далее »

Кардиган с косами



читать далее »

Анекдот

Приходит Иванов к Петрову и спрашивает: - Как у тебя корова 100 литров в день дает? Петров говорит: - Все дело в ласке. Захожу к ней и ласково говорю: что у нас сегодня, молоко или говядина?


читать далее »

Дерево Счастья Эйва из бисера своими руками

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



читать далее »

Летающий лазер впервые сбил жидкостную баллистическую ракету

Успехом завершились испытания американского противоракетного лазера воздушного базирования Airborne Laser, состоявшиеся сегодня в 07:44 по московскому времени. Летящий недалеко от побережья Калифорнии самолёт обнаружил специально выпущенную баллистическую ракету и сжёг её лучом ещё на разгонном участке траектории.


читать далее »

Человек

Состав плазмы крови напоминает состав воды доисторических праморей, в которых зародилась жизнь.


читать далее »

Шьем вешалки и полотенца к Новому году. Отличная идея!

Весьма забавная идея от мастерицы Ulla из Финляндии. Автор предлагает нам сшить полотенца с Новогодними вешалками. Мне нравится, что поделка несет в себе не только праздничный атрибут, но и практическое применение) Полотенца-платьица сказочных эльфов - съемные.



читать далее »

Декоративные пасхальные яйца: оформление и идеи

Для украшения пасхального стола можно использовать не только обычные окрашенные разными способами яйца, но и декоративные. Задекорировать можно натуральные яйца (вернее - пустую яичную скорлупу), либо использовать муляжи из дерева, пластика, пенопласта и других  подходящих материалов.



читать далее »

Животные

У кальмаров, как и у некоторых других головоногих (осьминогов и каракатиц), три сердца. Главное из них бьется 30-36 раз в минуту и гонит кровь по телу, а два других, дополнительных, проталкивают ее через жабры.


читать далее »

Мишка Тедди своими руками (спицы)

Познакомьтесь, это Мишка Тедди. Этот мягкий толстячок просто неотразим! А ещё он у нас большой модник, так что работа вам предстоит не скучная. Связать этого медвежонка очень легко! От носа и до кончиков лап он выполняется простой



читать далее »

Мой совет:

Запах масляной краски в квартире быстрее исчезнет, если в нескольких местах поставить тарелки с солью.


читать далее »

Анекдот

Вы еще не воспользовались нашей новой услугой, а мы уже сняли с вас деньги. МТС: на шаг впереди!


читать далее »

Как из старой ржавой кастрюли сделать стильный горшок для цветов

Слова автора Евгении из Омска: Всем солнечные приветы )) ***** Сегодня я наконец-то опубликую свой МК по превращению старой списанной кастрюли  в дизайнерский горшок для цветка ) Фотографии лежали с прошлого лета.  И все откладывалось время их публикации, т. к.



читать далее »

Анекдот

- Морковка или жизнь! - кричал заяц, угрожая Снеговику феном.


читать далее »

Аисты из пластиковых бутылок для дачи

Давайте вместе сделаем вашу дачу более креативной и интересной. Сегодня мы научимся делать аистов из подручных материалов. Для изготовления аиста нам нужно: Две пластиковые канистры по 5 литров прочная проволока и пластиковые трубки для ног белая сетка для


читать далее »

Яркий и красивый танец супругов

  Яркий и красивый танец супругов, вот так танцуют счастливые супруги -  Кеона и Мариэль Мадрид.  



читать далее »

Дракончик новогодний (Мастер класс, Бумаготворчество)

Изготовлено на сайте:http://hobbyndom.ru/archives/mk-kak-sdelat-drakonchika В этом мастер классе я покажу как сделать дракончика. Так как этот новый год ,будет годом черного дракона, то делать мы будем тоже черного дракончика. Для этого нам понадобятся: Газеты, малярный скотч, проволока, салфетки бумажные, готовая


читать далее »

Анекдот

Витя понял, что у него не все в порядке, когда медсестры начали фотографироваться с его манту.


читать далее »

Где хранить творческие безделушки...

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



читать далее »

Поделки из макарон: делаем игрушечную посуду

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



читать далее »

Животные

Акула единственная рыба, которая может моргать обеими глазами


читать далее »

Анекдот

Бабушка с дедушкой очень любили играть в прятки. Утром бабушка прятала самогон, а если дедушка его находил, то вечером уже пряталась бабушка.


читать далее »

Как сделать браслет в стиле Шанель

Чтобы нам ни говорили модные журналы, что бы нам ни писали в разных блогах про современные тенденции моды – классика в моде всегда. Маленькое черное платье Шанель должна иметь в своем гардеробе каждая уважающая себя



читать далее »

Вязаное белое пальто

 



читать далее »

Сумка своими руками. Мастер класс

  Сшить такую ​​сумку несложно. Кроме обычных швейных потребностей вам потребуется: Две различные ткани - однотонную и с рисунком (при ширине ткани 120 см  будет достаточно  каждого вида по полметра) Для уплотнения дна и стенок сумки использован дублерин



читать далее »

Как сделать ячейки для рассады

Выращивание растений – великолепное занятие. Благодаря ему наши предки получили все те сельскохозяйственные культуры, которые составляют ежедневный рацион. Да и просто наблюдать, как появляется новая жизнь – умиротворительное занятие. Лично я люблю цветы, и никогда не протестую,



читать далее »

МЫЛО С МАКОМВЫМИ ЗЕРНАМИ

Состав: - мыльная основа и оливковое масло, - отдушка манго или любая на Ваше усмотрение, - пищевой краситель (на Ваше усмотрение), - зерна мака. Я сделала мыло двухцветным и добавила масло ши. Зерна мака очищают верхние слои кожи и обогащают клетки


читать далее »

Декор джинсов (подборка)

Подборка джинсов с красивым декором. Красивая вышивка, стразы, бусины и др. Источник: http://secondstreet.ru/blog/diy_djinsi/dekor-dzhinsov-podborka.html



читать далее »

Человек

Общий вес бактерий, живущих в организме человека, составляет 2 килограмма.


читать далее »

Мангалы и барбекю для дачи своими руками

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



читать далее »

Животные

Самые длинные уши относительно тела у обитающего в Монголии и Китае длинноухого тушканчика: сам он длиной всего 9 сантиметров, а уши – целых 5 сантиметров, то есть больше половины длины тела.


читать далее »

Природа

Австралия и Антарктида 50 млн. лет назад были соединены.


читать далее »

Серьги из бисера своими руками

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



читать далее »

Мой совет:

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


читать далее »

Летняя сумка своими руками из маек

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



читать далее »

Вяжем красивый окат рукава. Мастер-класс

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



читать далее »

Мастер-класс по квиллингу: Пушистые цветочки

В этом мастер-классе, я опишу последовательность выполнения большого пушистого цветочка с моей Летней композиции Автор: Трохова Оксана.  Блог Завитушки от Ксюшки 1. Нам потребуются полосочки шириной 2см, шаблон для вырезания лепестков, ножницы, клей, инструмент для квиллинга 2. Вырезаем двенадцать больших



читать далее »

Джутовая филигрань. Панно с ПАВЛИНОМ

Мастер-класс от автора Оль.гуньчик  Нам понадобится:клей Титангорячий клейшпагаткамушки марблзкартон трехслойныйножницыи шаблон Вырезаем картон по размеру шаблона... А вот и шаблон. Затем я его обклеила всего скотчем (т.к. работа больше чем файл))) и в четырех местах приклеила шаблон к



читать далее »

ЗЕФИРАНТЕС ИЗ БИСЕРА

    источник: http://barrellab.ru/



читать далее »

Мобильный кухонный столик своими руками

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



читать далее »

Обшиваем кабашон бисером. Очень красиво)

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


читать далее »

ДЕКОР НА ПАСХУ ИЗ ЯИЧНЫХ ЛОТКОВ



читать далее »

Jake Weidmann — Мастер Пенмэн.

В наше время редко, кто может похвастаться каллиграфическим почерком, в школах уже давно нет уроков чистописания, редко кто пишет письма от руки, в основном все делается на компьютере. Тем более удивительно, что человек, о котором



читать далее »

Как сшить эксцентричную брошь

Эта брошь может украсить даже самое простое, ничем не примечательное платье или наряд.   Нам понадобится: Много, подходящих друг к другу по цветовой гамме, мужские галстуки (минимум 7 шт). Ножницы. Вспарыватель. Швейная машинка. застежка на брошь (может подойти даже булавка). Первое – распарываем



читать далее »

Мой совет:

Мыть мясорубку гораздо легче, если в конце пропустить сырой картофель.


читать далее »

Животные

Самый большой головной мозг у финвала (сельдяного кита), его масса составляет 6-7 килограммов. Для сравнения: масса головного мозга индийского слона 4-5 килограммов, человека - 1,4 килограмма, лошади - 500 граммов, гориллы - 430 граммов, коровы


читать далее »

Человек

Химическое соединение, ответственное за экстаз любви (фенилэтиламин) присутствует в шоколаде.


читать далее »

Космос

Планетой с самым длинным годом еще недавно считали Плутон, обращающийся вокруг Солнца за 248 земных лет. После лишения Плутона статуса планеты его место в данном отношении занял Нептун, продолжительность года на котором составляет 165 земных


читать далее »

Квиллинг. Подставка для пасхальных яиц.

Идея для вдохновения от чешской мастерицы Илона Szczеsna



читать далее »

Красиво оформляем край при вязании. Крючок

 



читать далее »

Мой совет:

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


читать далее »

Альбом для фотографий своими руками.

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



читать далее »

Анекдот

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


читать далее »

Наука

Сам по себе лед не скользкий. При возникновении давления на лед он тает и покрывается тонким слоем воды. Именно этот слой заставляет скользить людей или вещи.


читать далее »

Схема юбки крючком

Вертикальный узор юбки.  



читать далее »

Не хотите завинтажить свои кресла и стулья?

  ИСТОЧНИК фотографий http://creativehomeexpressions.blogspot.com



читать далее »

Внешний вид и привычки

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


читать далее »

Цветок звездочка из лент.

Мастер-класс Елены Крат.  В этом фото мастер-классе я покажу, как сделать цветок звездочка из лент. Фото 1. Загибаем ленточку. Фото 2. Заворачиваем краешек не много внутрь. Фото 4. Загибаем второй край. Фото 5. Заворачиваем краешек не много внутрь и соединяем сторону отмеченные



читать далее »

Сколько нужно спать, чтобы долго жить?

Исследование зависимости продолжительности жизни человека от продолжительности сна провели японские физиологи. В течение десяти лет опросив 100 тысяч взрослых жителей Японии и последив затем за их продолжительностью жизни, они пришли к выводу, что живут дольше


читать далее »

Букет сирени из холодного фарфора - самоотвердевающейся полимерной глины.

Мастер-класс от Калиничевой Елены  Для мастер-класса вам понадобятся:  ·         Самоотвердевающейся полимерная глина гладкая (например, Modena Clay, Modern Clay, Fleur и т.д.) ·         Маникюрные ножницы с прямыми и закругленными концами. ·         Основной стек. ·         Стек с маленьким шариком. ·         Круглогубцы. ·         Молд листа



читать далее »
Здесь пока пусто

Unauthorized.

Вирусы в мире UNIX

2011.10.08

Вирусы в мире UNIX

Автор: (c)Крис Касперски ака мыщъх

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

Оперативная обстановка

Первые вирусы, поражающие ELF-файлы (основной формат исполняемых файлов под UNIX), были зарегистрированы в конце девяностых, а теперь их популяция насчитывает свыше полусотни представителей (см. коллекцию вирусов на http://vx.netlux.org). Антивирусная Энциклопедия Евгения Касперского (см. http://www.viruslist.com/viruslist.html?id=3166) сообщает лишь о четырнадцати из них, что наводит на серьезные размышления о качестве AVP и добросовестности его создателей.

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

Файловые вирусы уже неактуальны и отсутствие крупных эпидемий наглядно подтверждает этот факт. Тем не менее, накопленные методики внедрения отнюдь не стали бесполезными - без них жизнь троянов и систем удаленного администрирования была бы весьма недолгой. Захватить управление атакуемым компьютером и заполучить права root'а - все равно, что бросить зернышко на раскаленный асфальт. Хакер должен укорениться в системе, цепляясь за все исполняемые файлы, что встретятся ему на пути, но и тогда он не может быть ни в чем уверен, поскольку существует такое понятие как резервное копирование, позволяющее восстановить пораженную систему, как бы глубоко вирус не был внедрен.

Считается, что вирусы, внедряющиеся в исходные тексты, более живучи, однако в действительности это не так. Исходные тексты требуются небольшому числу пользователей, а девелоперы активно используют системы контроля версий, отслеживающих целостность программного кода и позволяющих делать многоуровневый "откат". Было зарегистрировано несколько попыток заражения исходных текстов операционной системы Linux и сервера Apache, однако все они с треском провалились.

То же самое относится и к вирусам, обитающим в интерпретируемых скриптах, таких, например, как sh, perl, php и др. В UNIX скрипты вездесущи и их модификация по умолчанию разрешена, что создает благоприятные условия для размножения вирусов. Если бы пользователи обменивались скриптами, юниксоидный мир погрузился бы в эпоху ранней MS-DOS, когда новые вирусы выходили едва ли не каждый день, а так - вирусы остаются внутри пораженного компьютера, не в силах вырваться наружу.

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

Вирусный разгул под UNIX

Рисунок 1. Вирусный разгул под UNIX.

Язык разработки

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

А что насчет Си? С эстетической точки зрения - это чудовищный выбор и вирусописатели старой школы вас за него не простят. С другой стороны, будучи низкоуровневым системно-ориентированным языком, Си неплохо походит для разработки вирусов, хотя от знания ассемблера все равно не освобождает.

К коду, генерируемому компилятором, предъявляются следующие требования: он должен быть полностью перемещаемым (т.е. независимым от базового адреса загрузки), не модифицировать никакие ячейки памяти, за исключением стекового пространства, и не использовать стандартные механизмы импорта функций, либо подключая все необходимые библиотеки самостоятельно, либо обращаясь в native-API. Этим требованиям удовлетворяет подавляющее большинство компиляторов, однако от программиста тоже кое-что потребуется.

Не объявляйте главную функцию программы как main - встретив такую, линкер внедрит в файл start-up код, который вирусу на хрен не нужен! Не используйте глобальных или статических переменных - компилятор принудительно размещает их в сегменте данных, но у вирусного кода не может быть сегмента данных! Даже если вирус захочет воспользоваться сегментом пораженной программы, он будет должен, во-первых, самостоятельно определить адрес его "хвоста", а во-вторых, растянуть сегмент до необходимых размера. Все это тривиально реализуется на ассемблере, но для компилятора оказывается чересчур сложной задачей. Храните все данные только в локальных переменных, задавая строковые константы в числовом виде. Если вы напишете char x[] = "hello, world", коварный компилятор сбросит "hello, world" в сегмент данных, а затем динамическую ссылку на него скопирует в локальную переменную x. Делайте так: x[0]='h', x[1]='e', x[2]='l'... или преобразуйте char в int и осуществляйте присвоение двойными словами, не забывая о том, что младший байт должен располагаться по наименьшему адресу, что разворачивает строку задом наперед.

Не используйте никаких библиотечных функций, если только вы не уверены, что они полностью удовлетворяют всем вышеперечисленным требованиям. Системные функции обычно вызываются через интерфейс native-API, также известный под именем sys-call (в Linux-подобных системах за это отвечает прерывание INT 80h, другие системы обычно используют дальний вызов по селектору семь, смещение ноль). Поскольку системные вызовы варьируются от одной системы к другой, это ограничивает среду обитания вируса и при желании он может прибегнуть к внедрению в таблицу импорта.

Откомпилировав полученный файл, вы получите объективник и ругательство компилятора по поводу отсутствия main. Остается только слинковать его в двоичный 32/64-разрядный файл. Естественно, внедрять его в жертву придется вручную, т.к. системный загрузчик откажется обрабатывать такой файл.

Средства анализа, отладки и плагиата

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

Если исходные тексты вируса отсутствуют (кривые дизассемблерные листинги, выдаваемые за божественное откровение, мы в расчет не берем), препарировать двоичный код вируса приходится самостоятельно. Тут-то нас и поджидает одна большая проблема. Дизассемблер всех времен и народов - IDA PRO - не приспособлен для работы с ELF-вирусами, поскольку отказывается загружать файлы с искаженным section header'ом (а большинство вирусов никак не корректируют его после заражения!). Других достойных дизассемблеров, переваривающих ELF-формат, мне обнаружить так и не удалось (а самому писать лень). За неимением лучших идей, приходится трахаться с HEX-редакторами (например, тем же HIEW'ом), разбираясь со служебными структурами файла вручную.

С отладчиками дело обстоит еще хуже. Фактически под UNIX существует всего один более или менее самостоятельный отладчик прикладного уровня - gdb (GNU Debugger), являющийся фундаментом для большинства остальных. Простейшие антиотладочные приемы, нарытые в хакерских мануалах времен первой молодости MS-DOS, пускают gdb вразнос или позволяют вирусу вырваться из-под его контроля, поэтому отлаживать вирусный код на рабочей машине категорически недопустимо и лучше использовать для этой цели эмулятор - такой, например, как BOCHS. Особенно предпочтительны эмуляторы, содержащие интегрированный отладчик, обойти который вирусу будет очень тяжело, а в идеале вообще невозможно (BOCHS такой отладчик содержит). Кстати говоря, совершенно необязательно для исследования ELF-вирусов устанавливать UNIX. Эмулятора для этих целей будет более чем достаточно.

Отладка вирусного кода

Рисунок 2. Отладка вирусного кода на интегрированном отладчике эмулятора BOCHS, запущенного под управлением Windows 2000.

Исследование вирусов под UNIX с помощью дизассемблера

Рисунок 3. Исследование вирусов под UNIX с помощью дизассемблера iceix.

Кривое зеркало или как антивирусы стали плохой идеей

Антивирусные программы, в том виде, в котором они есть сейчас, категорически не справляются со своей задачей, да и не могут с ней справиться в принципе. Это не означает, что они полностью бесполезны, но надеяться на их помощь было бы, по меньшей мере, неразумно. Как уже отмечалось выше, в настоящий момент жизнеспособных UNIX-вирусов практически нет. И стало быть, антивирусным сканерам сканировать особо и нечего. Эвристические анализаторы так и не вышли из ясельной группы детского сада и к реальной эксплуатации в промышленных масштабах явно не готовы.

Ситуация усугубляется тем, что в скриптовых вирусах крайне трудно выделить устойчивую сигнатуру - такую, чтобы не встречалась в "честных" программах и выдерживала хотя бы простейшие мутации, отнюдь не претендующие на полиморфизм. Антивирус Касперского ловит многие из существующих скриптовых вирусов, но... как-то странно он их ловит. Во-первых, вирусы обнаруживаются не во всех файлах, а во-вторых, простейшее переформатирование зараженного файла приводит к тому, что вирус остается незамеченным.

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

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

Структура ELF-файлов

Структура ELF-файлов (сокращение от Execution & Linkable Format) имеет много общих черт с PE (Portable Execution) - основным исполняемым форматом платформы Window 9x и NT, а потому концепции их заражения весьма схожи, хотя и реализуются различным образом.

С высоты птичьего полета ELF-файл состоит из ELF-заголовка (ELF-header), описывающего основные особенности поведения файла, заголовка программной таблицы (program header table) и одного или нескольких сегментов (segment), содержащих код, инициализированные/неинициализированные данные и прочие структуры (см. рис. 4). Каждый сегмент представляет собой непрерывную область памяти со своими атрибутами доступа (кодовый сегмент обычно доступен только на исполнение, сегменты данных как минимум доступны на чтение, а при необходимости еще и на запись). Пусть слово "сегмент" не вводит вас в заблуждение, ничего общего с сегментной моделью памяти тут нет. Большинство 32-битных реализаций UNIX'а помещают все сегменты ELF-файла в один 4-гигабайтный "процессорный" сегмент. В памяти все ELF-сегменты должны выравниваться по величине страницы (на x86 равной 4 Кб), но непосредственно в самом ELF-файле хранятся в невыровненном виде, вплотную прижимаясь друг к другу. Сам ELF-заголовок и program header в первый сегмент не входят (ну, формально не входят), но совместно грузятся в память, при этом начало сегмента следует непосредственно за концом program header'а и по границе страницы не выравнивается!

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

Сегменты естественным образом делятся на секции. Типичный кодовый сегмент состоит из секций .init (процедуры инициализации), .plt (секция связок), .text (основой код программы) и .finit (процедуры финализации), атрибуты которых описываются в section header'e. Загрузчик операционной системы ничего не знает о секциях, игнорируя их атрибуты и загружая весь сегмент целиком. Тем не менее, для сохранения работоспособности зараженного файла под отладчиком вирус должен корректировать оба заголовка сразу как program header, так и section header.

ELF Header
        Program header table
        Segment 1
        Segment 2
        Section header table (optional)

Рисунок 4. Структура исполняемого ELF-файла.

Основные структуры ELF-файла задаются в файле /usr/include/elf.h и выглядят следующим образом:

typedef struct
{
        unsigned char e_ident[EI_NIDENT]; /* идентифкатор ELF-файла: 7F 45 4C           */
        Elf32_Half    e_type;             /* тип файла                                  */
        Elf32_Half    e_machine;          /* архитектура                                */
        Elf32_Word    e_version;          /* версия объективного файла                  */
        Elf32_Addr    e_entry;            /* виртуальный адрес точки входа              */
        Elf32_Off     e_phoff;            /* физическое смещение program header в файле */
        Elf32_Off     e_shoff;            /* физическое смещение section header в файле */
        Elf32_Word    e_flags;            /* флаги                                      */
        Elf32_Half    e_ehsize;           /* размер ELF-заголовка в байтах              */
        Elf32_Half    e_phentsize;        /* размер элемента program header'а в байтах  */
        Elf32_Half    e_phnum;            /* кол-во элементов в program header'e        */
        Elf32_Half    e_shentsize;        /* размер элемента section header'а в байтах  */
        Elf32_Half    e_shnum;            /* кол-во элементов в section header'e        */
        Elf32_Half    e_shstrndx;         /* индекс string table в section header'e     */
} Elf32_Ehdr;

Листинг 1. Структура ELF-заголовка.

typedef struct
{
        Elf32_Word    p_type;             /* тип сегмента                               */
        Elf32_Off     p_offset;           /* физическое смещение сегмента в файле       */
        Elf32_Addr    p_vaddr;            /* виртуальный адрес начала сегмента          */
        Elf32_Addr    p_paddr;            /* физические адрес сегмента                  */
        Elf32_Word    p_filesz;           /* физические размер сегмента в файле         */
        Elf32_Word    p_memsz;            /* размер сегмента в памяти                   */
        Elf32_Word    p_flags;            /* флаги                                      */
        Elf32_Word    p_align;            /* кратность выравнивания                     */
} Elf32_Phdr;

Листинг 2. Структура program segment header'a.

typedef struct
{
        Elf32_Word    sh_name;            /* имя секции (tbl-index)                     */
        Elf32_Word    sh_type;            /* тип секции                                 */
        Elf32_Word    sh_flags;           /* флаги секции                               */
        Elf32_Addr    sh_addr;            /* виртуальный адрес начала секции            */
        Elf32_Off     sh_offset;          /* физическое смещение секции в файле         */
        Elf32_Word    sh_size;            /* размер секции в байтах                     */
        Elf32_Word    sh_link;            /* связка с другой секций                     */
        Elf32_Word    sh_info;            /* дополнительная информация о секции         */
        Elf32_Word    sh_addralign;       /* кратность выравнивая секции                */
        Elf32_Word    sh_entsize;         /* размер вложенного элемента если есть       */
} Elf32_Shdr;

Листинг 3. Структура Section header'a.

За более подробной информацией обращайтесь к оригинальной спецификации на ELF-файл "Executable and Linkable Format - Portable Format Specification", составленной, естественно, на английском языке.

Методы заражения

Простейший и наиболее универсальный метод заражения сводится к поглощению оригинального файла вирусом. Вирус просто дописывает оригинальный файл к своему телу как оверлей, а для передачи управления жертве проделывает обратный процесс: пропускает первые virus_size байт своего тела (что обычно осуществляется функцией seek), считывает оставшийся хвост и записывает его во временный файл. Присваивает атрибут исполняемого и делает ему exec, предварительно расщепив материнский процесс функцией fork. После завершения работы файла-жертвы вирус удаляет временный файл с диска.

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

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

Приблизительный алгоритм внедрения в конец ELF-файла выглядит следующим образом:

  • Вирус открывает файл и, считывая его заголовок, убеждается, что это действительно ELF;

  • Просматривая Program Header Table, вирус отыскивает последний сегмент с атрибутом PL_LOAD;

  • Найденный сегмент "распахивается" до конца файла и увеличивается на величину, равную размеру тела вируса, что осуществляется путем синхронной коррекции полей p_filez и p_memz;

  • Вирус дописывает себя в конец заражаемого файла;

  • Для перехвата управления вирус корректирует точку входа в файл (e_entry), либо же внедряет в истинную точку входа jmp на свое тело (впрочем, методика перехвата управления - тема отдельного большого разговора).

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

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

  • Вирус открывает файл и, считывая его заголовок, убеждается, что это действительно ELF;

  • Просматривая program header table, вирус находит сегмент с атрибутом PL_LOAD и (PAGE_SIZE % p_filesz) >= virus_size; если же такого сегмента нет, вирус отказывается от заражения;

  • Поля p_filez (размер на диске) и p_memsz (размер в памяти) соответствующего сегмента увеличиваются на длину тела вируса;

  • Поле p_offset и факультативно sh_offset всех последующих сегментов/секций увеличивается на длину тела вируса;

  • Поле e_phoff и факультативно e_shoff ELF-заголовка увеличивается на величину тела вируса;

  • Вирус внедряет себя в конец выбранного сегмента;

  • Для перехвата управления вирус корректирует точку входа в файл (e_entry), либо же внедряет в истинную точку входа jmp на свое тело;

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

Смотрите:

Name      Start    End      Align Base Type Class 32 es   ss   ds   fs   gs
.init     080480AC 080480B7 dword 0001 publ CODE  Y  FFFF FFFF 0005 FFFF FFFF
.text     080480B8 08053ABB dword 0002 publ CODE  Y  FFFF FFFF 0005 FFFF FFFF
.fini     08053ABC 08053AC2 dword 0003 publ CODE  Y  FFFF FFFF 0005 FFFF FFFF
.rodata   08053AE0 08055460 32byt 0004 publ CONST Y  FFFF FFFF 0005 FFFF FFFF
.data     08056460 08057530 32byt 0005 publ DATA  Y  FFFF FFFF 0005 FFFF FFFF

Рисунок 5. Структура файла echo из комплекта поставки FreeBSD 4.5, между секциями .finit и .rodata расположено всего лишь 1Eh байт данных, что недостаточно для размещения даже крошечного вируса.

Name      Start    End      Align Base Type Class 32 es   ss   ds   fs   gs
.init     08000A10 08000A18 para  0001 publ CODE  Y  FFFF FFFF 0006 FFFF FFFF
.plt      08000A18 08000CE8 dword 0002 publ CODE  Y  FFFF FFFF 0006 FFFF FFFF
.text     08000CF0 08004180 para  0003 publ CODE  Y  FFFF FFFF 0006 FFFF FFFF
.fini     08004180 08004188 para  0004 publ CODE  Y  FFFF FFFF 0006 FFFF FFFF
.rodata   08004188 08005250 dword 0005 publ CONST Y  FFFF FFFF 0006 FFFF FFFF
.data     08006250 08006264 dword 0006 publ DATA  Y  FFFF FFFF 0006 FFFF FFFF

Рисунок 6. Структура файла ls из комплекта поставки RedHat 5.0, между секциями .rodata и .data расположено 1000h байт, что с лихвой достаточно для размещения даже высокотехнологичного вируса.

Общая структура и стратегия вируса

Конкретная структура вирусного кода зависит от фантазии его разработчика и выглядит приблизительно также, как и в Windows-вирусах. Обычно в начале вируса находится расшифровщик, за ним расположен модуль поиска подходящих жертв, инжектор вирусного кода и процедура передачи управления файлу-носителю.

Для большинства ELF-вирусов характерна следующая последовательность системных вызовов: sys_open (mov eax, 05h/int 80h) открывает файл; sys_lseek (mov eax,13h) перемещает файловый указатель на нужное место; old_mmap (mov eax, 5Ah/int 80h) проецирует файл в память; sys_unmap (mov eax, 5Bh/int 80h) удаляет образ из памяти, записывая на диск все изменения, а sys_close (mov eax, 06/int 80h) закрывает сам файл (см. рис. 1)

Типичная структура вирусного кода

Рисунок 7. Типичная структура вирусного кода.

Техника проецирования (или выражаясь забугорной технологией, "mapping"), значительно упрощает работу с файлами большого объема. Теперь уже не нужно выделять буфер, копируя туда файл по кускам и всю черную работу можно переложить на плечи операционной системы, сосредоточив свои усилия непосредственно на процессе заражения. Правда, при заражении файла протяженностью в несколько гигабайт (например, самораспаковывающегося дистрибутива какого-то программного продукта), вирусу придется либо просматривать файл через "окно", проецируя в 4-гигабайтное адресное пространство различные его части, либо попросту отказаться от заражения, выбрав файл поприличнее. Подавляющее большинство вирусов именно так и поступают.

Перехват управления путем модификации таблицы импорта

Классический механизм импорта внешних функций из/в ELF-файлов в общем виде выглядит так: на первом этапе вызова импортируемой функции из секции .text вызывается "переходник", расположенный в секции .plt (Procedure Linkable Table) и ссылающийся в свою очередь на указатель функции printf, расположенный в секции .got ("Global Offset Tables"), ассоциированной с таблицей строк, содержащей имена вызываемых функций (или их хеши).

Ниже приведена схема вызова функции printf утилитой ls, позаимствованной из комплекта поставки Red Hat 5.0:

.text:08000E2D                 call       _printf
...
.plt:08000A58 _printf          proc near
.plt:08000A58
.plt:08000A58                  jmp        ds:off_800628C
.plt:08000A58 _printf          endp
...
.got:0800628C off_800628C      dd offset printf
...
extern:8006580 extrn printf:near ; weak
...
0000065B:  FF 00 6C 69-62 63 2E 73-6F 2E 35 00-73 74 70 63  y libc.so.5 stpc
0000066B:  70 79 00 73-74 72 63 70-79 00 69 6F-63 74 6C 00  py strcpy ioctl
0000067B:  70 72 69 6E-74 66 00 73-74 72 65 72-72 6F 72 00  printf strerror

Листинг 5. Схема вызова функции printf утилитой ls.

В какое место этой цепочки может внедриться вирус? Ну, прежде всего он может создать подложную таблицу строк, перехватывая вызовы всех интересующих его функций. Чаще всего заражению подвергается функция printf/fprintf/sprintf (поскольку без этой функции не обходится практически ни одна программа) и функции файлового ввода/вывода, что автоматически обеспечивает прозрачный механизм поиска новых жертв для заражения.

Вирусы-спутники создают специальную библиотеку-перехватчик во всех заражаемых файлах. Поскольку IDA Pro при дизассемблировании ELF-файлов не отображает имя импортируемой библиотеки, заподозрить что-то неладное в этой ситуации нелегко. К счастью, HEX-редакторы еще никто не отменял. Другие же вирусы склонны манипулировать полями глобальной таблицы смещений, переустанавливая их на свое тело.

Ссылки по теме

  • bochs
    Качественный эмулятор ПК с интегрированным отладчиком внутри. Хорошо подходит для экспериментов с вирусами непосредственно на вашей рабочей машине без риска уничтожения информации. Бесплатен, распространяется с исходными текстами: http://bochs.sourceforge.net;

  • Executable and Linkable Format - Portable Format Specification
    "Родная" спецификация на ELF-формат. Настоятельно рекомендуется к изучению всем вирусописателям, пробующим свои силы на платформе UNIX: www.ibiblio.org/pub/historic-linux/ftp-archives/sunsite.unc.edu/Nov-06-1994/GCC/ELF.doc.tar.gz;

  • The Linux Virus Writing And Detection HOWTO
    Пошаговое руководство по проектированию и реализации вирусов под Linux с кучей готовых примеров (на английском языке): http://www.creangel.com/papers/writingvirusinlinux.pdf;

  • "Unix viruses" от Silvio Cesare
    Статья, описывающая основные принципы функционирования UNIX-вирусов и способы их детектирования (на английском языке): http://vx.netlux.org/lib/vsc02.html;

  • Linux VIRUSES - ELF FILE FORMAT Marius Van Oers
    Блестящий обзор современных UNIX-вирусов и анализ используемых ими методик внедрения в ELF-файлы (на английском языке): www.nai.com/common/media/vil/pdf/mvanvoers_VB_conf%25202000.pdf&e=747;

Заключение

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

Чем больше народу перейдет на UNIX, тем больше среди них окажется хакеров и вирусописателей и тогда с UNIX произойдет то же, что в свое время произошло с MS-DOS. Будут ли эти вирусы добродушными или злобными - это зависит от вас.

Примечания

  • Некоторые администраторы полагают, что под UNIX вирусов нет. Вирусы же придерживаются иного мнения;

  • Некоторые пользователи, в желании почувствовать себя богом, подолгу работают в системе на уровне root. Вирусы любят таких пользователей;

  • Малочисленность вирусов в мире UNIX компенсируется отсутствием нормальных антивирусов;

  • Осел и IRC - вот основные источники для пополнения вашей коллекции вирусов;

  • Открытость ELF-формата вкупе с доступностью исходных текстов системного загрузчика значительно упрощает конструирование вирусов под UNIX;

  • Создание вирусов не преследуется по закону. По закону преследуется создание вредоносных программ;

  • Из десятка возможных методов внедрения в ELF-файлы вирусописателям удалось освоить лишь два-три, так что на отсутствие творческого простора жаловаться не приходится;

  • UNIX- и Windows-вирусы строятся по одним и тем же принципам, причем UNIX-вирусы даже проще;

  • Антивирусная Энциклопедия Касперского содержит большое кол-во фактических ошибок в описании UNIX-вирусов;

  • Многие UNIX-вирусы зависят от версии операционной системы, поэтому всякий исследователь вынужден держать на своей машине зоопарк осей;

  • Огромная коллекция UNIX-вирусов на http://vx.netlux.org.
https://nebka.ru/?uid=1&post=20947