Внедрение 2 полная версия играть

Тирз.
Кап-кап-кап. Противный стук непрекращающейся капели, поначалу не казавшийся чем-то из ряда вон, постепенно ввинчивался в мозг и изрядно нервировал. Воспоминания о последних сутках постепенно возвращались, но пока лишь смутными отрывками.
Вот из-за кляксообразной тучи мелькнуло чёрное крыло. Странно, драконье чутьё молчит. Удар со спины: чьи-то когти стиснули загривок и рванули. Чешуя выдержала, но координация нарушилась. Небо несколько раз поменялось местами с землёй, в ноздри ударил запах горячего металла. Яростно взметнувшийся хвост, боевой техникой которого я владел весьма недурно, достал до противника и нанёс ощутимый урон: острый конец скользнул между чешуйками и пробил кожу. Зазубренные края (как у наконечника стрелы) захватили на обратном пути кусок плоти. Возмущённый рык достиг ушей одновременно с чувством свободы. Даже не стараясь выровняться, я продолжил кульбит, используя инерцию для ускорения.
И без того сумрачный день стремительно перетекал в преждевременную ночь.
«Ага, чёрный дракон пустил мглу. Интересно, сколько их?»
Отсутствие солнечного света ни одному дракону не было помехой, но это… Преследователи имели у себя в крыле серьёзный козырь. Но они не учли одного: непроглядная тьма меня давно не испугала, ведь старший братец регулярно устраивал подобные подлянки. Когда в процессе тренировок, а когда и просто так. Так что пускаем ультразвук и валим! Справа откликнулось что-то массивное, наверное, гора.
«Отличный вариант, обогну её…»
Кап-кап-кап. Сбитые в кровь пальцы с трудом слушаются приказов, тело слабеет, а холод всё ощутимее пробирается в кровь.
«Да, Оксу сейчас было бы значительно легче – белые драконы нечувствительны к низким температурам. Хотя, тогда не факт, что он так легко смог бы выдержать тот удар, ведь моя стальная чешуя, да ещё с серебряным компонентом имеет повышенную прочность. Да и ультразвук могут извлекать лишь среброчешуйные».
Пусть, у меня лишь четверть их крови, унаследованной от деда, после усердных тренировок я научился его извлекать. Мощностью тот особо не отличался, поэтому, как оружие его было использовать бесполезно, зато в таких вот пакостных ситуациях, когда зрение нейтрализовано, вполне себе хороший вариант ориентирования на местности.
Последнее, что я помнил, была струя белого пламени, доставшая, как я ни крутился, до левого крыла. Дальше противное чувство неконтролируемого падения и темнота. Очнулся уже в человеческой ипостаси, прикованный цепями к влажной стене в мрачном подземелье. Холодные камни абсолютно игнорировали штаны и натирали и морозили измученное тело. Лишь остатки тактильных ощущений говорили, что нагота иллюзорна.

Кабинет Халкона.
Отработанная годами стратегия дала в этот раз сбой. И без того хмурое лицо изрезали глубокие морщины.
«Да, не думал, что этот недолёток так силён!»
Хорошо, что он лично решил проконтролировать взятие младшего Исарно. Мгла не только не помешала стальному, наоборот, тот свободно сориентировался и практически ускользнул. Маскирующие амулеты скрыли присутствие нападавших, но молниеносные реакции жертвы говорили о его хорошей боевой подготовке. Атакующий синий оказался очень быстро ранен, причём настолько мастерски, что первый же удар вырвал у него кусок мяса. Отсутствие зрения, обычно дезориентирующее и делающее жертву лёгкой добычей, не то что не сбило с толку, но дало парню некоторые преимущества. Выскочи он со стороны раненого и вопрос поимки мог так и остаться вопросом.
- М-да, такой боец мне бы пригодился, - задумчиво произнёс начальник тайной разведки Императора Драконов. На десятый раз прокручивая бой, он поражался изворотливости и невероятной скорости.
Огненная атака пленного тоже была на уровне, благо, природные свойства медной чешуи позволяли выдержать и не такое пламя. Даже золотому пришлось бы попотеть, прежде чем он смог бы в нужной степени нагреть подобный панцирь, а у тех пламя самое жаркое. Именно поэтому клан золотых уже второе тысячелетие правил прочими видами. И именно благодаря своей шкуре Халкон достиг столь высокого положения при вспыльчивом и агрессивном правителе. Живой советник – полезный советник! Даже если на него спустили пар, он оставался невредим, разве что иногда… хорошо, что не смертельно.
И лишь подоспевший белый, самый молодой из их команды, чудом сумел попасть по вытворявшему головокружительные кульбиты стальному.
- Ничего, пара десятилетий под моим чутким руководством и ты станешь достойным помощником, - мечтательно протянул дракон, - если только дурь твоей бабки не заразна.

Ризола.
Стройная сероволосая женщина сидела у окна. В сумраке можно было подумать, что седина раньше положенного срока вступила в свои права, но это была лишь видимость. Волосы ещё не приобрели ту грубоватую структуру, что свойственна им в пожилом возрасте, всё дело было в масти второй ипостаси. Серебристая сталь. Светлее, чем у внука, ведь серебра в крови плескалось целая половина. Она и помогла ей в своё время достойно защититься от преследователей и скрыться почти невредимой.
Снег без устали укутывал землю пушистым одеялом. Некогда зелёные ёлки стояли белыми пирамидами, к стеклу прилипло несколько крупных снежинок. Прихотливые переплетения кристаллов завораживали своим совершенством. К одному из них прилипла капелька, сделав идеальный шестигранник ассиметричным и оттого ещё более уникальным. Тишина окутала этот мирок, будто ватой обернули. Кошачьи глаза золотисто-зелёного цвета тоскливо вглядывались в недалёкий сегодня горизонт. Чарующую красоту уединённой долины нарушали следы недавней схватки, что значительно проредили лес и лишь усиливали волнение в груди.
- Брр, как у тебя здесь холодно! – воскликнула вошедшая подруга. Громкий чих огласил комнату. - И пыльно!
- Да? – отстранённо отозвалась Ризола.
Красные драконы, к коим принадлежала Ру, особо тяжело переносили холод. Лишь вынужденное бегство от лап императорских ищеек, преследовавших всех недовольных текущим режимом, вынуждало жить её в предгорьях Алтая. Но она ни разу не пожалела о своём решении выйти замуж за человеческого мужчину, тем более, что наречённый из клана бронзовых оказался тем ещё негодяем. Нет, своих детей она понуждать не будет – кого выберут себе в пару, того и примет! Разве что с испытательными тестами…
- Ты когда в последний раз топила? – упрекнула она застывшую драконицу.
- Не помню, - равнодушие в голосе начинало пугать.
- Хватит хандрить! – красноволосая энергично разжигала дрова, - твой внук далеко не дурак, справится.
- Знаю, - хризолитовые глаза слегка оживились, - но методы Халкона я тоже знаю!
- А кто из нас с ними не сталкивался? – резонно ответила подруга.
- Поэтому и страшно, - бледные губы начали оттаивать – живительный огонь согревал выстуженный дом.

Тирз.
Кап-кап-кап. Звук теперь не просто раздражал, казалось, он бьёт по мозгу, минуя черепную коробку. Холод клетка за клеткой отвоёвывал территорию, начиная с обмороженной руки. Немеющее тело почти потеряло чувствительность. Наконец, я провалился в тревожный сон, где продолжил биться с невидимыми врагами, что скользкими тенями вихрились вокруг. Молниеносные выпады хвостом, которым я научился у среднего брата, Окса, пробивали лишь пустоту. Каждый раз противник опережал меня: доля секунды, пара миллиметров, ловкий разворот незримой стеной вставали между нами. Впрочем, никому из них пока не удалось прикоснуться даже к кончику моего крыла. От очередной попытки ухватить призрачный хвост меня отвлекло золотистое марево, пробивавшееся сквозь окружающую муть. Как ни странно, тени больше не беспокоили уставшее тело, напротив, с возмущённым шипением расползались, пока не сгинули совсем. Точёная фигурка лёгкой порхающей походкой приблизилась к ящеру и заключила в тёплые объятия. Сияние, исходившее от незнакомки, прогрела змея до самого сердца, а нежный поцелуй вывернул ипостась.
- Любимый, - прошептала в уже человеческие губы голубоглазая девушка. От неё умопомрачительно пахло топлёным молоком, а уста дарили пряный вкус мёда.
Я непонимающе вгляделся в милое личико, силясь понять, отчего оно кажется мне знакомым.
- А если так, - лукаво усмехнулась красавица и углубила поцелуй. Кровь энергично устремилась по большому и малому кругам и добралась, наконец, до подтормаживающего мозга.
- Светляк! – радость вернувшейся памяти заглушила нытьё измученного тела. Даже замороженная конечность послушно обвилась вокруг тонкой талии и слегка согрелась.
Некоторое время нам было совершенно не до разговоров, впрочем, как ни до чего вообще за пределами нашего личного микрокосмоса…
С трудом оторвавшись друг от дружки, мы, наконец, перевели дыхание и счастливо улыбнулись.
- Вспомнил? – взъерошила мои и без того растрёпанные волосы начинающая ведьма.
- Да, прости, - голова виновато опустилась.
- Да уж, - изящная ручка скользнула на небритую щёку, - сильно тебя потрепало.
- Если честно, я так и не понял, кто на меня напал, - глаза жадно впитывали каждый нюанс моей поразительной девочки. – Пока я сижу в каком-то подземелье и никого не видел.
- Ты летел ко двору? – уточнила Светлана.
- Да, собирался втираться в доверие к Халкону, да вот, не долетел, - саркастичная улыбка сопроводила чёрную иронию относительно своих поползновений.
- Держись, - сжала моё плечо девушка, - ради меня, ради нас.
- Конечно, - уверил свою почти невесту, - для этого всё и началось.
Меня пронзило острое сожаление, что она до сих пор осталась «почти». В самом деле, кто в здравом уме согласится совершить обряд единения дракона и ведьмы? Все сторонники межрасовых союзов либо перебиты, либо живут в строжайшей тайне и безо всяких ритуалов. В принципе, она предлагала что-то в этом роде, вроде как там, откуда она родом брак перестал быть обязательным. Но здесь-то нет! И оставить ей роль обычной любовницы… низко, не достойно её. И ведь надо-то всего лишь благословение родителей и обряд фиолетового дракона, ибо только они умели переплетать энергии пар, создавая нерушимые узы. Благодаря последнему между супругами образовывалась психологическая связь, они чувствовали друг друга, слышали мысли, а со временем приходила способность обмена энергией. Помнится, мама как-то помогла папе с регенерацией после особо «удачной» тренировки с другом детства. Хотя… можно обойтись одним фиолетовым, ведь бабуля не перестала быть старейшей рода, и её слово повесомее отцовского будет.
Мягкое журчание до боли знакомой песни, что когда-то вытянула меня, уже стоявшего на пороге Грани, а позже излечившая нашу общую подругу, потекло из нежных губ. Тело мгновенно отозвалось внутренней вибрацией, отвлекая от размышлений, и приготовилось впитывать исцеляющую силу. Но воспоминание о тяжёлом истощении любимой после такой волшбы резко отрезвило расслабившуюся плоть и побудило остановить самопожертвование: рука закрыла источник живительного звука. Решительно убрав всё ещё ослабленную конечность, из-под которой выглядывали разве что глаза, а остальное утопало в мозолистой ладони, она отрицательно мотнула головой и отказалась прерывать действо.
Холод окончательно отпустил левую руку, всё тело окутала восхитительная лёгкость, а волосы слегка вздыбились от искрящихся змеек, юркавших под кожей. Звук постепенно угасал, пока моя девочка не растворилась уже в белёсой дымке.
- Вот и повидались, - огорчённо прошептал я, - даже во сне умудрилась наколдовать.
И провалился в нормальный здоровый сон.

Светлана.
Вся эта нервотрёпка с допросами, обыском комнаты Данилы и началом учебного процесса здорово выматывала. К счастью, преподавателей дёргали не меньше, чем студентов, порой прямо посреди занятия вызывая на допрос. Не сказать, чтобы это вызывало особый восторг – сдавать-то в конце семестра придётся материал по полной программе, но образовавшееся свободное время дало возможность с практически полным резервом настроиться на Тирза. Ночью сил после откачки напарника от «беседы» с дознавателем на разговоры с кем-либо ещё меня банально не хватило. Надеюсь, дракон сейчас спит, а если нет, ну, попытка не пытка. Процесс соединения сознаний дошёл до полного автоматизма, даже концентрационные травки оказались без надобности, и я смогла, наконец, связаться с любимым.
«Боже, что с ним происходит?»
Втрое меньше своих истинных размеров, весь измученный, но отчаянно сражающийся до последнего, он бился в звериной ипостаси с какими-то мутными личностями, причём в прямом смысле этого слова. Странные, не имеющие чёткого контура драконоподобные тени, вызывавшие безотчётную дрожь, подло нападали на мою зазнобу с разных сторон одновременно. Несмотря на уменьшенный вид, тот успешно отвечал, уворачивался и даже умудрялся атаковать. Нежность к отважному ящеру наполнила сердце до краёв и полилась дальше, успешно преодолевая физический порог тела. Судя по всему, в этом состоянии он в принципе был достаточно условным. Энергия проникала в окружающую муть и даже умудрилась спугнуть тех мерзких гадов, что теперь рассеивались шипящими дымками. Надо же, как я, оказывается, умею! Не теряя времени даром, поспешила к своему неутомимому бойцу.
«Надо же, он не узнал меня!»
Я грозно шикнула на начавшую поднимать голову панику и растворилась в круговороте поцелуя.
«А что, в прошлый раз подействовало! Что может быть лучше отработанной практики?»
Сработало. Пока Тирз рассказывал о своих незапланированных приключениях, я со всё нарастающей тревогой всматривалась в потерявшие свою насыщенную бирюзу глаза, теперь они выглядели, как разбавленная морская вода. Сильное, загоревшее тело казалось усохшим и каким-то неправильным, как будто тень окутала кожу и добавила ей серый оттенок.
«Не нравится мне всё это», - параллельно с высказанными словами поддержки, крутилась тревожная мысль. «Надо что-то делать. Нельзя оставлять его в таком состоянии неизвестно где неизвестно с кем!»
Колдовать после единственного семестра обучения я умела совсем немного, и ничего толкового из того, что могло бы здесь помочь, не знала. Обращаться в одиночку к музыкальной магии было откровенно страшно, мы втроём-то довольно тяжело отходили после исцеления. Впрочем, здесь же не смертельная рана, да и выбора особого нет.
«Что ж, кто не рискует, тот потом всю жизнь сожалеет! Пусть не полностью, но хоть немного подлатаю».
И завела когда-то записанную в этнографической экспедиции песню 1. Дабы компенсировать отсутствие двух голосов, что пробивали верхний и нижний миры, я гуляла из партии в партию, стараясь по максимуму охватить диапазон песни. Что касается гармонической тональности, то соединить мажор и минор в одном горле не представлялось никакой возможности.
«Ладно, будем петь в мажоре, в конце концов, здесь никто не умирает».
Силы таяли, как неплотно сбитый сахар, тот, что продавался в новомодных коробочках. Не то, что в далёком СССР, когда об неровный комок можно было зуб сломать. Тот растворялся медленно и печально даже в кипятке.
«Эх, вот бы и мой резерв был таким же крепким»!
Милый лик подёрнулся молочной дымкой, чей-то встревоженный голос звал какую-то Светлану. Странное покачивание, противный вкус восстанавливающего зелья, мерзкий скрип входящей в вену иглы и мерно капающая глюкоза в кровь безалаберной девицы.

Тирз.
Протяжный скрип давно не смазывавшихся петель возвестил о прибытии долгожданного гостя. Поверьте, когда сидишь в безвестности в холодных каменных застенках, любому будешь рад. Я продолжал лежать в позе дохлой крысы, старательно изображая измождение. После визита моей ненаглядной кровь так и бурлила, хотелось ринуться в бой и гвоздить вошедшего направо – нале… то есть, дать достойный отпор противнику. Но я затолкал подальше свои инстинкты и выжидал.
Позвякивая чем-то металлическим, дракон, его суть я учуял, когда он ещё за дверью топтался, молчаливо застыл в паре метров от меня.
«Благоразумно», - не смог не оценить его предусмотрительность. Подойди он немного ближе, и длины цепи вполне хватило бы для атаки.
- Хм, - эхо гулко дохмыкивало за незнакомцем.
Я максимально медленно и томно открыл веки. Оглядев печально знакомую физиономию того самого хмыря, к кому летел втираться в доверие, чуть не дёрнулся от неожиданности. Намеренно расслабленные мышцы не успели среагировать на нервный импульс, а потом я успел взять себя в крылья.
Молчание затягивалось. Наконец, Халкон подошёл ко мне вплотную и присел на корточки, холодное лезвие одного из метательных кинжалов, свисавших со специального пояса, коснулась ярёмной ямки.
- Ну что, долетался, птенчик? - последнее слово прозвучало особо снисходительно.
Я надсадно раскашлялся, дабы убедить собеседника в моём плачевном состоянии. Чуть не напоролся при этом на нож, к счастью, вовремя отдёрнутый.
- Что ж тебе дома не сиделось? – усталый вздох.
- Пить, - сипло прохрипело в ответ.
- Ну-ну, не так быстро, малец, - жёсткая усмешка заняла своё привычное место.
Кашель повторился аж с каким-то присвистом, ведь мне действительно дико хотелось пить, так что, так или иначе, но ему пришлось отцепить фляжку и влить пару глотков родниковой воды. А то диалог как-то не налаживался.
- Спасибо, - решил начать более тесное знакомство с вежливости.
- Не за что, - ухмылка добротой не отличалась, - куда направляемся?
- Ко двору, - я решил ещё разок кашлянуть напоследок, но уже не так надрывно, чтобы не перегнуть палку.
- Надо же, - бровь удивлённо приподнялась, изломившись в районе старого шрама, с коим не справилась даже хвалёная драконья регенерация. Хвала чешуе, хоть глаз зрячим остался.
Заинтересовавшись продолжением, он вновь позволил мне попить.
- Я тут разобрался с парочкой ведьм, - я решил пойти ва-банк, - по-свойски, так сказать.
Вторая бровь присоединилась к первой, сердце радостно встрепенулось в предвкушении. Да, давно не слышал таких интересных новостей глава службы безопасности.
- Что ж так? – плохо скрывая ликование, подтолкнул собеседник.
- Да одна из них возомнила себя великим драконоборцем, - впрыснем немного яду в голос, - с перспективой омолодиться за мой счёт.
- Хм, как неосмотрительно с её стороны, - ему всё больше нравился этот молодой Исарно.
- Подружка так, под горячую руку попалась, - небрежно прибавил к основной информации.
- И как она на тебя вышла? - вспомнил свою суровую роль допроситель.
- Да я как-то случайно мимо её города пролетал, вот и обратил на себя внимание.
- Любой дракон с младых когтей знает, что контакты с людьми запрещены, - в воспитательных целях пожурил Халк.
- Знаю, - покаянно опустил голову, - но одна девица так сладко пахла…
Я метко попал в застарелую рану былой влюблённости советника. Да, информация тоже оружие, просто методика использования особая.
- Тем более, - ещё строже отрезал медный.
- Да ладно, - проворчал я, - побаловался бы немного да прикопал, а ещё лучше в воду, тут уж по ситуации.
- Хм, - в который раз прозвучало в камере, - и давно ты так развлекаешься?
- Было пару раз, - внутри всё выворачивалось от отвращения, но права на ошибку не имелось.
- Эх, молодёжь, - снисходительно потрепал по загривку мужчина. Вот и племянник его грешил «милыми» шалостями с человечками. Пусть с ним, главное, что приоритеты правильные!
- Пойдём, подлечим тебя, что ли, - голос наполнился почти отцовской заботой.
Цепи, удерживавшие ноги, оперативно расстегнулись, даже плечо было предоставлено в качестве точки опоры. Внедрение удалось значительно быстрее, чем ожидали заговорщики.

1. Подробное описание текста и мелодики в 1 томе «Чарократия. Дикая мята».

Первая часть романа здесь: https://lit-era.com/book/charokratiya-1-dikaya-myata-b4494

Обмен данными между приложениями. В состав Windows входят приложения, предназначенные для создания документов различного характера (текстовых, табличных, графических). Документ, разработанный в одном приложении, может содержать фрагменты, созданные в других приложениях. Таким образом, обмениваясь данными, приложения работают совместно, создавая составной или интегрированный документ. Например, в текст, созданный в приложении WordPad, можно включить результат вычислений, выполненный в Калькуляторе и рисунок, нарисованный в графическом редакторе Paint. В результате получается составной документ, включающий данные разного типа, которые были созданы в разных приложениях. Когда открывается текстовый документ, являющийся главным, подключаются связанные с ним объекты из других приложений.

Обмен данными в Windows организуется одним из следующих способов:

С помощью буфера обмена;

С помощью технологии внедрения и связывания объектов (концепция OLE - Object Linking and Embedding). При обмене данными через буфер вставленный объект становится элементом составного документа, теряя связь с тем приложением, которое его создало. Например, для вставки графического объекта (приложение Paint) в текстовый документ (приложение WordPad) вы использовали обмен данными через буфер обмена. В этом случае рисунок теряет связь с приложеннем Paint, в котором он создавался.

Программа WoгdPad своими средствами не может изменять данные из другой программы. Для того чтобы рисунок отредактировать, необходимо выполнить следующие шаги:

Удалить из текста старый вариант рисунка (приложение WoгdPad);

Запустить Paint, в котором создавался рисунок,  открыть файл, содержащий рисунок;

Внести в рисунок изменения;

Вставить через буфер обмена рисунок в текст (еще раз).

Более гибким способом обмена данными между приложениями Windows является технология OLE. Технология OLE позволяет установить связь объекта (вставленного в документ) с приложением, которое его создавало. В этом случае Приложение, в котором создан внедренный или связанный объект, запускается при необходимости редактирования двойным щелчком по объекту. Пользователь получает возможность работать над составным документом средствами приложения, в котором создается главный документ, и средствами приложения, в котором создан внедренный объект. Например, для редактирования графического рисунка, который был вставлен по технологии OLE (по методу внедрения или связывания объектов) в текстовый документ, пользователь имеет возможность одновременно использовать возможности двух приложений - Paint и WordPad.

Основные понятия технологии OLE. Основные понятия технологии OLE рассмотрим на примере, в котором рисунок, созданный в приложении Paint, вставлен по технологии OLE в составной документ в приложении WordPad. В этом примере рисунок-объект OLE, программа для создания графических изображений Paint-сервер OLE; программа для создания текстовых документов WordPad - клиент OLE.

Технология OLE позволяет внедрить документ или связать объект OLE с приложеннем клиента.

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

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

ПРАКТИЧЕСКАЯ ЧАСТЬ. Работа с программами Блокнот, Калькулятор, WoгdPad, Pain t . Внедрение и связывание объектов

В этой статье будет рассказано о нескольких методах, используемых для размещения вредоноса в PE-файле.

  1. Вводное слово

В этой статье будет рассказано о нескольких методах, используемых для размещения вредоноса в PE-файле. Чтобы понять суть излагаемого материала читателю необходимо быть знакомым с ассемблером для архитектуры x86 и отладчиками хотя бы на среднем уровне и понимать формат PE файлов. Этот документ был опубликован 8 декабря 2016 года на сайте pentest.blog, а также подготовлен в PDF формате для офлайнового чтения.

2. Введение

В настоящее время практически все специалисты по безопасности, пентестеры и аналитики вредоносов имеют дело с бэкдорами на ежедневной основе. Помещение трояна в систему или в конкретную программу – наиболее популярный способ для поддержки постоянного доступа к целевой машине. В большинстве статей рассказывается о методах для имплантирования вредоносов в 32 битные PE файлы, но поскольку PE-формат представляет собой модифицированную версию формата Unix COFF (Common Object File Format; Общий формат объектных файлов), логика, заложенная в основу этих техник, применима и ко всем остальным типам исполняемых файлов. Кроме того, незаметность встроенного вредоноса очень важна и напрямую влияет на длительность нахождения в системе. Методы, которые будут описаны в данной статье, направлены на снижение процента детектирования настолько насколько возможно. Перед дальнейшим чтением рекомендую ознакомиться с первой частью, где рассказывалось об обходе техник детектирования, внутреннем устройстве антивирусов и фундаментальных постулатах антидетектирования.

3. Терминология

Учебное проникновение :

Существуют группы, состоящие из светлых хакеров (или белых шляп), которые атакуют цифровую инфраструктуру организации, как если бы это делал реальный злоумышленник, для того, чтобы протестировать устойчивость системы к внешним угрозам (по-другому это называется пентест). Например, компания Microsoft регулярно проводит подобные кибер-учения. Плюсы от подобных мероприятий лежат на поверхности – в процессе могут найтись бреши и проблемы, которые можно заранее устранить. Кроме того, здесь могут обнаружиться пути попадания конфиденциальной информации наружу, схемы эксплуатации и другие «недокументированные» возможности системы.

Рандомизация размещения адресного пространства:

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

Code Cave (Пещера в коде) :

Code Cave представляет собой кусок кода, который записывается другой программой в память стороннего процесса. Этот код может быть выполнен посредством создания удаленного потока внутри целевого процесса. Code cave зачастую является ссылкой на секцию скриптовых функций кода, куда можно инжектировать любые инструкции. Например, если в памяти скрипта 5 байт, и 3 байта используются, в оставшиеся 2 байта скрипта можно добавить внешний код.

Контрольная сумма:

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

4. Основные методы

Все примеры из этой статьи будут продемонстрированы на базе исполняемого файла SSH-клиента с именем putty. Есть несколько причин для выбора именно этого приложения в качестве подопытного образца. Putty написан на C++ и использует множество библиотек и API-функций. Во-вторых, внедрение вредоноса в ssh-клиент привлекает меньше внимания, поскольку программа уже выполняет tcp-соединение, и, таким образом, будет проще избежать мониторинга со стороны системы безопасности.

Код бэкдора будет взят из шелл-кода, используемого при обратном TCP-соединении и написанного Стивеном Фивером (Stephen Fever) под meterpreter. Главная цель – инжектировать шелл-код в целевой PE-файл без порчи функциональности приложения. Инжектированный шелл-код будет запускаться в отдельном потоке и будет постоянно пытаться подсоединиться к обработчику. Вторая задача – во время выполнения всех этих манипуляций необходимо оставаться незаметным настолько, насколько возможно.

Общий подход внедрения вредоноса в PE-файл состоит из 4 шагов:

  1. Нахождение доступного пространства для кода бэкдора.
  2. Перехват потока выполнения.
  3. Внедрение бэкдора.
  4. Восстановление потока выполнения.

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

  1. Проблема с доступным пространством

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

  1. Добавление новой секции:

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

При помощи дизассемблера или редактора LordPE PE-файл можно расширить при помощи добавления заголовка новой секции. На рисунке ниже показана таблица секций исполняемого файла putty. При помощи PE-редактора добавлена новая секция «NewSec» размером 1000 байт.


Рисунок 2: Таблица секций

Во время создания новой секции важно установить флаги на чтение/запись/выполнение, чтобы запустить шелл-код, когда PE-образ проецируется (map) в память.


Рисунок 3: Выставление флагов на чтение/запись/выполнение

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

Рисунок 4: Добавление пустых байтов

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


Рисунок 5: Новая секция. NewSec успешно добавлена в исполняемый файл

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

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


Рисунок 5: Результаты проверки исполняемого файла с новой пустой секцией

  1. Использование Code Cave

Во втором методе, направленном на решение проблемы доступного пространства, используются code cave’ы из целевого исполняемого файла. Практически все скомпилированные бинарные файлы имеют code cave’ы, которые могут быть использованы для внедрения вредоноса. Code cave по сравнению с новой секцией привлекает намного меньше внимания, поскольку в этом случае применяются уже существующие обычные секции. Дополнительный и не менее важный плюс заключается в том, что после внедрения вредоноса размер PE-файла не меняется. Однако эта техника имеет свои недостатки.

Количество и размер сode cave’ов варьируется от файла к файлу, но в целом общий размер меньше, чем при добавлении новой секции. При использовании code cave’ов код бэкдора следует уменьшать настолько, насколько возможно. Второй недостаток – набор флагов. Поскольку выполнение будет перенаправляться в сode cave, у секции должны быть права на выполнение. В случае с некоторыми шелл-кодами (которые сами себя кодируют или подвергают обфускации) требуется права на запись для того, чтобы выполнять изменения внутри секции.

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

При помощи утилиты Cminer очень легко подсчитать все code cave’ы бинарного файла. Используем команду ./Cminer putty.exe 300 для поиска code cave’ов более 300 байт.


Рисунок 6: Поиск code cave ’ов размером более 300 байт

В нашем случае найдено 5 хороших экземпляров для последующего использования. Стартовый адрес задает адрес виртуальный памяти (virtual memory address, VMA) у code cave при загрузке PE-файла в память. Смещение файла, измеряемого в байтах, – адрес местонахождения нужной области внутри PE-файла.


Рисунок 7: Параметры найденных Code cave’ов

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

6. Перехват потока выполнения

На этом этапе нужно перенаправить поток выполнения на код бэкдора при помощи модификации нужной инструкции в исполняемом файле. Здесь следует упомянуть важную деталь относительно выбора инструкции для изменения. Все бинарные инструкции имеют размер в байтах. Чтобы перейти к адресу расположения бэкдора потребуется длинный переход (long jump) размером, который использует 5 или 6 байт. При изменении бинарного файла инструкция, которая будет патчиться, должна быть того же размера, что и длинный переход, иначе предыдущая и последующая инструкция будут испорчены.

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

Сокрытие внутри пользовательских функций:

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

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

По нажатию кнопки «Open» из графической оболочки запускается функция проверки установленного IP-адреса.


Рисунок 8: Графическая оболочка для настройки putty

Если поле IP-адреса не пустое, и значение корректное, запускается функция для соединения с указанным IP-адресом.

Если клиент успешно создал ssh-сессию, появится новое окно для ввода имени пользователя и пароля.


Рисунок 9: Окно для ввода учетных сведений

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

При помощи несложных методов реверс-инжиниринга, предназначенных для работы со строками и ссылками на строки, будет не сложно найти адрес функции соединения после того, как клиент установил соединение с назначенным IP-адресом. Строка «login as:», появляющаяся во всплывающем окне, поможет нам найти адрес функции соединения. В поисках ссылок на строки нам поможет IDA Pro.

Для нахождения строки «login as:» в IDA Pro открываем Views->Open Subviews->Strings on IDA


Рисунок 10: Ссылка на строку « login as:»

После нахождения нужной строки дважды кликаем и переходим местонахождению. Внутри секций данных IDA находит все перекрестные ссылки на строки. Для вывода всех перекрестных ссылок нажимаем комбинацию клавиш «Ctrl+X».




Рисунок 11: Ссылки внутри функции, которая выводит строку « login as:»

На рисунке ниже показана инструкция, которую мы будем изменять. После выполнения кода бэкдора, эта инструкция будет использоваться вновь.


Рисунок 11: Инструкция, которую мы будем менять

После изменения инструкции PUSH 467C7C на JMP 0x47A478 процесс перенаправления потока выполнения можно считать завершенным. Важно не забывать, что адрес следующей инструкции будет использоваться как адрес возврата после выполнения кода вредоноса. Следующий шаг – инжектирование кода бэкдора.

7. Инжектирование кода бэкдора

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


Рисунок 12: Помещение инструкций PUSHAD и PUSHFD перед code cave

Как было упомянуто ранее, наш бэкдор представляет собой обратный tcp-шелл-код под meterpreter, взятый из проекта metasploit. Однако потребуется некоторые изменения внутри шелл-кода. Обычно обратный tcp-шелл-код пытается подсоединиться к обработчику некоторое количество раз, и если соединиться не удалось, процесс закрывается посредством вызова API-функции ExitProcess.


Рисунок 13: Участок шелл-кода, отвечающий за соединение с обработчиком

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


Рисунок 14: Модифицированная версия участка кода, отвечающего за соединение с обработчиком

После внесения изменений внутри ассемблерного кода выполняем компиляцию при помощи команды nasm -f bin stager_reverse_tcp_nx.asm. Теперь обратный tcp-шелл-код готов к употреблению, но пока еще не помещен в правильное место. Наша цель – осуществить выполнение в отдельном потоке, для создания которого потребуется отдельный шелл-код, выполняющий вызов API-функции CreateThread. Функция будет указывать на первоначальный обратный tcp-шелл-код. Код для создания потоков из проекта metasploit также написан Стивеном Фивером.


Рисунок 15: Шелл-код для создания отдельного потока

После помещения байтов шелл-кода внутрь файла createthread.asm в шестнадцатеричном формате, как показано на рисунке выше, выполняем компиляцию при помощи команды nasm -f bin createthread.asm. Теперь шелл-код готов для внедрения в code cave, но перед вставкой следует выполнить кодирования для того, чтобы обойти статический/сигнатурный анализ антивируса. Поскольку все кодировщики из проекта metasploit известны большинству антивирусов, рекомендуется использовать нестандартное кодирование. В этой статье не будет рассказано о создании нестандартных кодировщиков, но можно обойтись сочетанием нескольких кодировщиков из проекта metasploit. После каждого акта кодирования загружаем шелл-код в проект Virus Total в «сыром» формате и проверяем результаты проверки. Комбинируем кодировщики до тех пор, пока шелл-код станет полностью незаметным (или можно подождать следующей статьи).
После правильного кодирования шелл-код готов к внедрению внутрь code cave. Выбираем инструкцию, которая следует за инструкцией PUSHFD, и нажимаем Ctrl+E в отладчике Immunity Debugger. Шелл-код будет вставлен в шестнадцатеричном формате.


Рисунок 16: Вставка шелл-кода

Получить закодированный шелл-код в шестнадцатеричном формате можно двумя способами: вывести на печать при помощи команды xxd -ps createthread или открыть и скопировать в шестнадцатеричном редакторе. При копировании шестнадцатеричных значений в отладчик Immunity Debugger не забывайте об ограничениях на копируемые байты, которые присутствуют при вставке кода. Необходимо запомнить последние два вставленных байта, и после нажатия на кнопку OK нужно сделать повторное копирование последующих участков. Когда шелл-код полностью вставлен в code cave, операцию по внедрению можно считать завершенной.

8. Восстановление потока выполнения

После создания потока выполнения бэкдора необходимо возобновить выполнение программы. То есть регистр EIP должен указывать на функцию, которая перенаправила выполнение на code cave. Однако перед переходом на эту функцию следует восстановить ранее сохраненные регистры.


Рисунок 17: Инструкции для восстановления первоначального состояния регистров

Поместив инструкции POPFD и POPAD в конец шелл-кода, мы восстановим все ранее сохраненные регистры из стека в том же порядке. После восстановления регистров необходимо вспомнить еще об одном нюансе. При перехвате потока выполнения инструкция PUSH 467C7C была заменена на инструкцию JMP 0x47A478 для того, чтобы перенаправить выполнение на code cave. При помещении инструкции PUSH 467C7C в конец кода, перехваченная инструкция также восстановится. Теперь настало время вернуться к функции, которая перенаправляла выполнение к code cave при помощи вставки инструкции JMP 0x41CB73. Конец результирующего кода должен выглядеть, как показано на рисунке ниже.

Рисунок 18: Завершающие изменения в конце кода

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


Рисунок 19: Изменение контрольной суммы в редакторе PE-файлов

9. Заключение

Если все описанные методы использованы правильно, готовый бэкдор будет полностью незаметным. В заключение будут приведены контрмеры для защиты от описанных ранее техник. Это методы будут полезны администраторам, аналитикам вредоносов и разработчикам антивирусов.

  • Контроль над привилегиями секций

Когда речь заходит о зараженных файлах, в первую очередь следует думать о детектировании аномалий, связанных с привилегиями секций. По умолчанию компиляторы никогда не устанавливают полные права на секции, если только программист не выставил специальные настройки. Особенно не должны иметь привилегий на выполнение секции данных: .data и.rdata. Кроме того, секции кода (например, .text) не должны иметь прав на запись. Подобные аномалии, связанные с изменением привилегий, следует рассматривать как подозрительное поведение.

  • Присутствие нестандартных секций

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

  • Проверка сигнатур

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

  • Проверка контрольной суммы файла

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


Рисунок 20: Результаты проверки файла с внедренным бэкдором