Глава 4. Групповой проект
17 октября 2023, вторник
К середине октября Энцо уже успел получить высокие баллы за предыдущее домашнее задание, первую лабораторную и недавно сдал вторую - и был уверен, что там тоже всё отлично.
На следующем занятии они с Уэсли не сразу приступили к домашнему заданию. Вместо криптографии они просматривали все фото и видео, сделанные во время поездки на озеро, и выбирали, какие стоит опубликовать в социальных сетях.
Они сидели в небольшой библиотеке с низкими потолками, где стеллажи с книгами плотно стояли друг к другу, полностью скрывая их от остальных. Здесь было не так красиво, зато царили полная тишина и уединение. Полки вокруг были уставлены зарубежной военной прозой. Над их столом было окно, которое выходило в парк. Его затеняло большое дерево. Солнце пробивалось сквозь листву. В лучах можно было видеть летающую в воздухе пыль. Сама атмосфера не позволяла здесь шуметь, но заниматься чем-то полезным тоже не было желания.
Уэсли показал фотографию, где он позировал у водопада, до которого они добрались на катере. Атлас и Энцо должны были брызгать на него водой для создания красивого и динамичного снимка. У Уэсли было какое-то видение. Харита делала, кажется, сотню фотографий в секунду. Где-то Уэсли выглядел красиво, а где-то удалось поймать его смешное выражение лица. Над последними они и смеялись.
Попыткам Уэсли сделать красивые фотографии скал и водопада помешали Энцо и Кэл, которые пытались утопить друг друга в озере. Большинство эстетичных видео также были испорчены болтовней на фоне.
Но были и по-настоящему красивые кадры: на катере, пока ветер развевал волосы и одежду, на фоне водопада и скал.
Потом Уэсли показал фотографии с вечеринки.
Энцо засмеялся.
- У меня было видение, и обычно оно меня не подводит, но не в тот день, - разочарованно доказывал Уэсли.
- Они милые, думаю, ты должен их выложить, - продолжил веселиться Энцо, глядя как Уэсли недовольно приблизил зум на прилипшие ко лбу влажные волосы.
- Только если как напоминание - не фотографироваться настолько пьяным, - Уэсли закатил глаза.
Фотографии звёздного неба, сделанные на берегу, в моменте казались волшебными. На трезвую голову они понимали, что там все смазано и ничего толком не разглядеть.
Энцо и Уэсли продолжали тихо смеяться и шепотом обсуждать поездку. Только через полчаса они, наконец, занялись криптографией.
18 октября 2023, среда
На следующий день на занятии по CS 155 Энцо и Кэла ждало неприятное известие: у них будет тест по пройденному материалу.
Несмотря на приличные оценки за задания, они сомневались, что с этим все будет так легко.
- Блять, - выдохнул Кэл, - влияние на оценку - 20%. Он уже в понедельник!
Энцо недовольно вздохнул.
- Буду умолять Уэсли позаниматься перед тестом дополнительно.
Кэл кивнул и открыл чат со своим репетитором - Джеффом.
- Это пиздец, - вскоре бросил он. - Джефф уезжает завтра и вернётся только во вторник. Сегодня будет занятие, но мы собирались делать новую домашку.
На фоне его отчаяния Энцо начал нервничать ещё больше.
- Возьми меня к Уэсли с собой, - взмолился Кэл.
- Уэс мне ещё не ответил, - прервал его Энцо, - я предложил любое время.
Ответ пришёл только вечером. Энцо удивился тому, что Уэсли согласился и предложил встретиться на выходных. Кэл поспешил радостно создать им троим групповой чат. Они решили устроить ночевку у Энцо.
21 октября 2023, суббота
В субботу Энцо встречал Уэсли и Кэла у себя в квартире. Он надеялся, что их ждет пара часов подготовки и можно будет просто валяться на диване, есть, пить пиво и смотреть что-то веселое. Он заранее приготовил еду и алкоголь. Кэл должен был подъехать к нему вместе с Уэсли.
Энцо жил в двухэтажной квартире на 17-м этаже. Здесь были просторная, светлая гостиная, несколько спален, кухня и терраса. Отец купил квартиру, несмотря на то, что Энцо не планировал оставаться жить в Санта-Крина.
Гостиная была с панорамными окнами. Отсюда открывался красивый вид на пляж и океан, особенно во время заката.
Снаружи были ухоженный парк, дальше узкая дорога, где вечно стояли в пробке дорогие машины и затем песчаный пляж.
Как только Уэсли пришел, Энцо провел ему быструю экскурсию по квартире. В его спальне на полках ровно выстроились стопки манги и фигурки любимых аниме-персонажей. Уэсли с интересом рассмотрел их и похвалил конструкции из Лего.
Они расположились со своими ноутбуками в столовой, где был подходящий длинный стол.
- Я заставил Атласа вспомнить, какие вопросы были на тесте, - деловито произнес Уэсли, - и самое сложное - это часть, где будет даваться блок кода и дальше вопросы по нему. Но мы можем потренироваться на задачах в учебнике. Они будут похожи.
Кэл и Энцо приступили к работе, вчитываясь в вопросы, связанные с анализом системного трафика, протоколов, криптографии и так далее.
Энцо разбирал задачу по уязвимости Cross-Site Scripting (XSS), когда услышал, как Кэл спросил про обфускацию:
- А если обфусцировать всю вирусную программу, то тогда и антивирус может не обнаружить вирусный код?
- Это возможно, но современные антивирусы используют поведенческий анализ и "песочницы", чтобы анализировать программы в изолированной среде и определить, есть ли угроза.
- Но и это можно обойти? - предположил Кэл.
- Да. Мы в Innotech сейчас работаем над кейсом, - глаза Уэсли засияли, - к нам обратились BlueDesk. Это инвестиционный фонд, - объяснил он.
- Помнишь, ты спрашивал, ловили ли мы хакеров, - Уэсли толкнул Энцо, отвлекая его от задачи про веб-безопасность, - так вот, это нам и нужно сделать, но мы пока не знаем как.
Энцо устало откинулся на стуле. Хотелось уже быстрее пить пиво.
- Что там случилось? - поинтересовался он. Формулы и протоколы тут же вылетели из головы по сравнению с историей про настоящий вирус.
- BlueDesk месяц назад наконец-то подключили метрики и обновили инфраструктурный мониторинг. Они поставили ArgusWatch для наблюдения за серверами.
Энцо слышал об этом агенте мониторинга от известной компании SentinelCore, потому что тот стоял в большинстве финтех-компаний, включая его проект - Axion Financial.
- У них не такая большая нагрузка, но они планировали расширяться, и нужно было понять, какое им нужно оборудование для новых серверов, - продолжил Уэсли. - По расчетам и нагрузочным тестам все выглядело логично. Но как только агент развернули на проде и погоняли пару недель, метрики не сошлись. С учетом количества клиентов, данных и сотрудников реальная нагрузка никак не соответствовала ожидаемой. И они решили разбираться.
- И что это было? Они сразу решили подключать вас? - спросил Кэл.
- Не сразу, а после того как долго мучились сами, но не поняли, что именно еще могло нагружать систему. Потом уже начали копать мы: посмотрели логи сетевого трафика, проанализировали использование ресурсов серверов, изучили системные журналы. В метриках всплывало, что один из серверных агентов периодически создает пиковые всплески сетевой активности, которых не было на тестовых стендах. Мы заметили подозрительно большой объем DNS-трафика - тысячи запросов, и полезная нагрузка в них выглядит как сплошной случайный мусор. На тестовых стендах такой херни нет, никакие бизнес-процессы не триггерят такие запросы. Так мы начали подозревать наличие утечки данных. Пока даже понятия не имеем, каких именно.
DNS-запросы - это уже странно, но сами по себе могут быть чем угодно, - продолжил Уэсли. - Поэтому мы полезли дальше в трафик и увидели еще одну деталь: периодически от тех же машин уходил HTTPS-трафик к подозрительным доменам, маскирующимся под облачные сервисы. По объему это выглядело как выгрузка кусков данных, а не просто метрики.
Мы начали думать, что это вообще. Стали искать процессы, которые генерируют этот трафик. И опять на первый взгляд ничего подозрительного: у них были нормальные системные процессы. Но потом, когда мы начали более детально изучать каждый процесс, мы заметили кое-что странное.
- Что именно? - нахмурившись спросил Энцо.
- Эти процессы использовали ресурсы нетипичным образом: потребляли слишком много памяти и обращались к странным областям диска. И да, там был не один файл, а целая цепь процессов, которые взаимодействовали друг с другом. Они маскировались под стандартные библиотеки, системные службы...
Код при этом был обфусцирован и зашифрован. Мы не могли просто так посмотреть и понять, что он делает, поэтому использовали инструменты для динамического анализа. Мы пытались понять, какие API-функции вызываются, какие данные обрабатываются. И вот тут мы нашли кое-что интересное.
Мы заметили, что эти процессы используют сложные алгоритмы шифрования. Куски кода с высокой энтропией были просто сплошной кашей, без читаемой структуры - типичный результат упаковщиков и самошифрующегося кода. Они постоянно генерируют новые ключи, изменяют код... Это типичное поведение для полиморфного вируса. Еще эти процессы пытались скрыть свою активность. Они удаляли логи, подменяли данные, использовали антиотладочные техники... Ну и самое главное - они поднимали скрытый канал управления через DNS и, судя по анализу в песочнице, пытались сливать данные по HTTPS на "облачные" домены.
- Так вы нашли вирус по его поведению, даже не расшифровав его, - понимающе произнес Кэл, - но благодаря полиморфии этого не мог сделать антивирус.
- Да.
- Жесть. Это звучит очень сложно.
- Да, я в восторге! Пока мы только прикидываем, как он вообще туда попал: есть гипотеза, что точкой входа был именно этот обновленный агент мониторинга, но доказательств еще нет. Планируем на следующей неделе провести более детальный динамический анализ и пытаться расшифровать вирус. На этой больше времени ушло на анализ масштаба проблемы, прекращение утечки и изоляцию пораженных систем. Там пиздец. Это было на всех серверах.
Энцо улыбнулся, глядя на энтузиазм Уэсли. Все, что он делал на стажировке, действительно звучало интересно и волнующе, в отличие от примера алгоритма обфускации, который был в задаче Кэла, из-за чего у него и появился вопрос.
- Кстати, если что у меня подписан NDA, так что я вам ничего не рассказывал, - добавил Уэсли.
Энцо усмехнулся. Жалуясь друзьям на работу, он сам постоянно раскрывал банковские тайны.
Курьер с доставкой еды пришел, когда Энцо и Кэл заканчивали с последней темой.
Наконец-то Уэсли попросил открыть ему банку пива, объявляя окончание работы.
- Какие планы на Хэллоуин? - спросил Энцо.
Уэсли перестал есть.
- Мы с подругами и Лио идем на вечеринку друзей Карины и на вечеринку SEAL. Двух мне хватит. С этой работой больше я не вывезу, - ответил Уэсли. Энцо понимающе кивнул.
- Какой ужас! - разочарованно произнес Кэл, - это же ваш последний год Хэллоуикенда!
Сам Кэл планировал тусоваться, как и в прошлые годы с четверга и до воскресенья. Энцо не мог в этом году позволить себе ничего подобного.
- Мой максимум это вечер пятницы и субботы, - устало произнес Энцо, - у меня полно работы. Встретимся в SEAL, - он кивнул Уэсли.
Кэл возмущенно открыл рот, но Энцо опередил его:
- Я пойду с вами в пятницу! И этого достаточно! В четверг у меня демонстрация функционала поддержке и внедрению перед выпуском релиза. А в пятницу его нужно установить.
Кэл разочарованно покачал головой:
- Какие же вы жалкие, - вынес приговор он.
Энцо не мог не согласиться.
- Неправда! - возмутился Уэсли, ударив по столу, - знаешь, сколько времени у меня ушло на два костюма? С этой тупой работой? У меня нет времени на подготовку ко всем тусовкам.
- Не все так стараются, как ты, - возразил Кэл, - это не обязательно.
- Для меня обязательно! Я никуда не пойду, если буду выглядеть хуево.
Кэл бросил на Уэсли долгий взгляд, но сдался и не стал продолжать спор.
- Еще бы вы не пошли к SEAL. Это главная тусовка факультета, - добавил Кэл, чтобы последнее слово все же осталось за ним.
- А как вы планируете одеться? - поинтересовался Уэсли.
- Секрет, - ответил Энцо.
- Эй! - недовольно воскликнул Уэсли, - почему?
Энцо твердо покачал головой. Он собирался дальше хранить интригу.
- Кем будешь ты? - спросил Энцо.
Уэсли радостно засиял:
- Мы будем феями Винкс! Наконец-то! Я уговаривал их два года! И мы с Харитой чуть не разорвали дружбу из-за Текны! И нас как раз шестеро.
- И кто в итоге будет ею? - спросил Энцо. Он смутно помнил героинь мультфильма. У него была старшая сестра и в детстве он смотрел не только Винкс.
- Я! - радостно сказал Уэсли, - я выиграл в камень-ножницы-бумага. У меня все готово! А Харита - Лейла.
- У них типа суперсилы или что? - непонимающе спросил Кэл.
- Я, то есть Текна, - фея технологий! Харита - Лейла - фея воды и океанов, - объяснил Уэсли, - у них у всех есть магия. Муза будет Карина, Стелла - Мэдисон, Флора - Лио, Элис будет Блум.
Энцо кивнул, выражая искренний интерес. Он не помнил никого из фей, но Уэсли сиял от счастья, перечисляя каждую.
- Что насчет Атласа? - вспомнил Энцо.
- Его не будет вообще, - Уэсли фыркнул, - пишет, что будет занят работой. К тому же алкоголь и вечеринки - это не его. Хотя мы с Харитой предлагали ему стать Валтором.
Энцо засмеялся.
- Это кто? Тоже фея? - спросил Кэл.
- Не, - ответил Энцо, - это типо их главного злодея мага.
- Так ты тоже знаешь их? - удивился Уэсли.
Энцо пожал плечами.
- Когда мы Элеонор были детьми, мои родители еще не были такими обеспеченными. Они отправляли нас в деревню к бабушке и дедушке в Литл-Бексхилл, в Йоркшире, на все летние каникулы. В деревне ловило только пять каналов по телевизору, поэтому ты смотришь только то, что там показывают, в том числе Винкс.
Энцо погрузился в теплые воспоминания. Его бабушка и дедушка занимались огородом, садом и разведением живности. Связь была только на холме, по всему двору бегают куры, за тобой гонится петух. Дождь и резиновые сапоги были неотъемлемой частью жизни. Они с Элеонор таскали с куста смородину и малину, обдирали локти, лазая по стенам сараев, и смотрели местные каналы, половину времени не понимая, что именно говорят из-за густого йоркширского акцента.
Кажется, его друзьям было сложно такое представить.
- Эх, вы не знаете, что такое есть клубнику прямо с огорода, - вздохнул Энцо, вспоминая свой испачканный в земле вид после поливки грядок, - и никогда не наступали в коровье дерьмо. Оно было размером с тарелку! - Энцо указал в широкую тарелку, куда они выложили курицу.
- Фу! - воскликнул Уэсли.
- Элеонор меня специально толкнула! Потом я кинул в нее испачканный шлепок.
Энцо продолжил просвещать друзей в особенности деревенской жизни. На облаке он нашел фотографии с тех времен, сделанные на старые телефоны и цифровой фотоаппарат.
Время перевалило за полночь. Кэл, Энцо и Уэсли переместились в гостиную. Отсюда Уэсли с восторгом разглядывал открывающийся из окна вид на пляж.
- Хочешь прогуляться? - спросил Энцо.
Уэсли обернулся к нему с взглядом и скоростью щенка, который услышал любимое слово "гулять".
Кэл поддержал идею, и они решили выйти.
- Там холодно, - произнес Энцо и открыл шкаф с верхней одеждой рядом с входной дверью.
- Все ок. Внешний вид важнее комфорта, - отмахнулся Уэсли. Он приехал в майке и тонкой кофте, которая была явно слишком легкой для ветра ночью на пляже. Свободный верх подчеркивал его плечи, а на его ногах были прямые штаны. Он выглядел как главный герой манхвы и, кажется, пытался быть таким же крутым.
- Хотя, - Уэсли с любопытством заглянул в шкаф Энцо и достал оттуда кожаную куртку.
После этого они вышли на улицу. Ночной воздух был свежим и прохладным. Они гуляли по ровной дорожке, справа от них был пляж и океан, слева парк с деревьями и за ним небоскребы.
Уэсли остановился, внимательно оглядывая вид на океан, освещаемый луной. Затем он отдал телефон Кэл и попросил сделать фото.
Они стояли под невысокими фонарями, которые освещали дорожки в парке.
Ветер развевал волосы Уэсли, его щеки порозовели от прохлады, и на лице была яркая улыбка, которая была так похожа на настоящую, когда он смеялся над шутками Кэл.
Энцо не мог не улыбнуться в ответ. Уэсли со своими розовыми щеками и пухлыми губами выглядел невероятно мило. При этом его фигура оставалась такой же внушительной.
Энцо поймал себя на том, что задержал взгляд слишком долго, и поспешно отвернулся к океану, делая вид, что рассматривал волны.
Они вернулись только после того, как обошли весь парк. Уэсли еще раз сфотографировался на фоне океана. После чего они обсуждали "Н2О просто добавь воды", потому что Энцо это шоу тоже смотрел.
Уставшие после прогулки, они разошлись по комнатам. Энцо, как обычно, ещё некоторое время лежал на кровати, просматривая социальные сети в телефоне. Уэсли уже выложил фотографии в сторис, где отметил Энцо и Кэла.
Глоссарий
Криптография (cryptography): Раздел математики и информатики, изучающий методы шифрования и защиты данных — чтобы информация оставалась конфиденциальной и её нельзя было подделать.
Сетевой протокол (network protocol): Набор правил и форматов, по которым компьютеры обмениваются данными по сети (например, HTTP, HTTPS, DNS).
Системный / сетевой трафик (system / network traffic): Поток данных, который проходит через сеть или между компонентами системы — запросы, ответы, служебные сообщения.
Cross-Site Scripting (XSS): Уязвимость веб-приложений, при которой злоумышленник может внедрить в страницу вредоносный JavaScript-код, чтобы украсть данные пользователя или изменить отображение сайта.
Обфускация кода (code obfuscation): Намеренное запутывание кода (переименование переменных, усложнение логики, шифрование строк), чтобы затруднить его анализ и реверс-инжиниринг.
Поведенческий анализ (behavior-based detection): Метод обнаружения угроз, когда система наблюдает за тем, как ведёт себя программа (что читает, куда пишет, какие соединения открывает), и по этому поведению решает, опасна ли она.
Песочница (sandbox): Изолированная среда, в которой запускают подозрительные программы или файлы, чтобы безопасно посмотреть, что они делают, не рискуя реальной системой.
Метрики (metrics, monitoring metrics): Собранные числовые показатели работы системы или сервера — загрузка процессора, объём трафика, задержки, количество запросов и т.д.
Инфраструктурный мониторинг (infrastructure monitoring): Наблюдение за состоянием серверов, сервисов и сетей (метрики, логи, алерты), чтобы вовремя заметить сбои, перегрузки или аномалии.
Агент мониторинга / агент наблюдения за серверами (monitoring agent): Небольшая программа, установленная на сервере, которая собирает метрики и логи и отправляет их в систему мониторинга.
DNS-трафик (DNS traffic): Запросы и ответы к системе доменных имён (DNS) — когда компьютер узнаёт IP-адрес по доменному имени. Злоумышленники могут использовать DNS для скрытой передачи данных (DNS-туннелирование).
HTTPS-трафик (HTTPS traffic): Шифрованный веб-трафик по протоколу HTTPS — обычный HTTP поверх TLS/SSL, защищает данные между браузером и сервером.
Системные журналы / логи (system logs): Файлы или записи, куда система и приложения пишут события: ошибки, подключение пользователей, сетевые запросы, работу служб.
Динамический анализ (dynamic analysis): Анализ программы в процессе её выполнения: наблюдают, какие функции вызываются, какие файлы и сети используются, какие данные обрабатываются.
Вызовы API / API-функции (API calls): Обращения программы к готовым функциям библиотек или операционной системы (например, чтение файла, открытие сокета, шифрование данных).
Алгоритм шифрования (encryption algorithm): Формальный способ превращать исходные данные (открытый текст) в зашифрованный вид и обратно с помощью ключа (например, AES, RSA).
Энтропия (entropy, in code/data): Мера «случайности» данных. Высокая энтропия в куске кода или данных часто означает, что они сжаты или зашифрованы.
Упаковщик (packer): Инструмент или техника, которая сжимает и/или шифрует исполняемый файл, скрывая настоящий код до момента запуска. Часто используется вредоносным ПО, чтобы обходить антивирусы.
Полиморфный вирус (polymorphic virus): Вредоносная программа, которая при каждом распространении изменяет свой код (но сохраняет поведение), чтобы её было сложнее обнаружить по сигнатурам.
Антиотладочные техники (anti-debugging techniques): Приёмы, с помощью которых программа пытается понять, запускают ли её под отладчиком или в анализаторе, и в таком случае менять поведение или завершаться.
Канал управления (command-and-control, C2): Скрытый канал связи между заражённой машиной и сервером злоумышленника, через который тот отдаёт команды и получает украденные данные. Может маскироваться, например, под обычный DNS- или HTTPS-трафик.
