Нет,речь пойдет не про высокочастотную торговлю на бирже, но я буду использовать аналогию, чтобы стало понятно почему и как я думал. Собственно, мое мнение HFT прошел полный путь холодной войны. Изначально суть высокочастотной торговли заключалась в алгоритмах, они должны были быть достаточно простыми и при этом максимально эффективными. Выигрыш получал тот, кто успел «просчитать» быстрее других. Сначала это были секунды, потом доли секунд и в итоге алгоритмы начали зашивать в процессоры сетевых карт, чтобы максимально быстро реагировать на входящие данные и генерировать нужные сделки. На настоящий момент можно признать, что этот способ заработка практически умер, поскольку у всех приблизительно одна скорость обсчета и генерации, а следовательно результат начал зависеть от непредсказуемых факторов — по сути рулетка. Где сейчас живет HFT правильно, он ушел в более сложные FPGA и арбитраж на десятки бирж. Алгоритмы стали значительно сложнее, разнообразней и ушли от простых формул с простыми решениями.

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

Для начала рассмотрим как обстояли дела в прошлом, скажем честно очень недалеком прошлом, буквально вчера...

У нас есть разработчик который пилит какой‑то сервис, для нас сейчас не столь важно какой, но пусть это будет FTP‑сервер, тем более что это близко к тому что творилось в wuftp в недалеком прошлом. Разработчика будут звать Роб, вполне себе разработческое имя. И он пилит его не тяп‑ляп, а нормально. Тестирует все что может, старается оберегать свое детище от взломов, переполнений и при этом сохранить скорость и вменяемый размер.

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

И вот Дэйв находит любимый массив в который кладется имя файла без проверки длины, что он делает? Правильно — пишет эксплоит! Затем он поднимает у себя сервер wuFTP и проверяет может ли он его взломать своим эксплоитом. Допустим, Дэйв — белый хакер и когда у него получается, то он пишет Робу что‑то вроде: «Привет Роб, я опять смог взломать твой говнокод сервер. Вот эксплоит который делает... исправь, пока я его не опубликовал завтра утром»

Роб тяжело вздыхает и идет пилить патч. На часах три часа ночи, он выкатывает пропатченную версию по репозиториям. Сисадмины, девопсы и все остальные не столь расторопны и опубликованный на утро эксплоит под CVE-1999-0911 или CVE-2001-0550 который цепляет пару сотен серваков, и те с радостью распахивают шелл, а несколько сайтов покрываются «PWN by ZeroSuperHacker» всех мастей от скрипт‑кидис.

Так было всегда и это было самое начало гонки, можно сказать — черепашьи бега, эдакая пошаговая стратегия. Ход Роба, ход Дэйва, ход Роба, ходы скрипт‑кидис... Все медленно и неторопливо, порой проходили недели и даже месяцы между выходом новой версии и появлением эксплоита.

Но сейчас, условия гонки резко изменились, Роб использует ИИ, который сильно ускоряет написание патчей, и как только Роб найдет дыру — патч будет готов через несколько минут. Да, искать дыры и правильные решения у ИИ пока получается туго, но это пока. Казалось бы вот оно! Счастье человечества!

А теперь давайте пофантазируем... Дэйв сидит, скучает, и вдруг видит, что Роб выложил новую версию. Он не долго думая делает простой человеческий «дифф» просто чтобы посмотреть что там новенького. Но у Дэйва тоже есть ИИ и он с радостью скармливает этот дифф ему, с просьбой: «Посмотри что именно поправили в этом релизе, там должны были быть баги с переполнением буфера или что‑то подобное». Ни один ИИ не заподозрит подвоха и с радостью выполняет просьбу, а даже если нет — всегда есть локальные модели с сорванной крышей и без тормозов по безопасности.

Дэйв видит патч в котором вдруг начали проверять длину строки с паролем: «Ага, вот ты и попался, Роб». Через пару минут у него уже есть эксплоит и он легко проверяет его на старой версии. Если он сработал — можно уже не писать ничего Робу, а просто публиковать как дыру в старой версии.

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

Распаковать, прогнать через тот же IDA с плагином ИИ и убрать лишнее, найдя именно патчи дыр — стало возможным. Да там куча своей боли, не всегда разница в бинарном коде что‑то скрывает, это может быть тупо выравнивание кэша или затычка для ARM‑проца. Но вероятность найти классические проверки размерности, избавление от SQL‑инъекций и прочие старые добрые грабли очень высока. Нам не надо понимать весь код, нам достаточно найти знакомые паттерны патчинга, а их не так много.

В итоге мы стоим перед дилеммой: Публиковать патч — значит провоцировать появление эксплоита, разработчик сам рассказывает где у него была дыра; Не публиковать патч — дыра останется там же, но про нее никто не будет знать до поры до времени. Opensource сообщество давно живет в этой парадигме, тут суть не сама дилемма, а скорость, время между выпуском новой версии и появлением массового сканера по старой. Ботнету достаточно дать эксплоит и он побежит шерстить интернет с целью собственного расширения.

Все мы помним EternalBlue и что было после MS17-010, как сотни тысяч компьютеров по всему миру попросили денег у своих владельцев в обмен на расшифровку данных.

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

Время между публикацией новой версии и появлением рабочего эксплоита сжалось до часов, но это тупой механический процесс, его можно автоматизировать и довести до нескольких секунд. Выходит что ставить новую версию нужно сразу как только она вышла, потому что через несколько секунд по сети полетят запросы автоматических сканеров и всё: «Кто не спрятался, я не виноват».

Можно ли написать бота который будет смотреть 10–20-100 популярных тулов и автоматически пилить под них эксплоиты и сканеры? Очевидно — можно. В истории интернета уже был период «дикого запада», когда расшаренный принтер по ночам печатал обои «в клеточку», а простейший OOB‑запрос на 139 порт отправлял винду в нокаут. Мне кажется ИИ нам готовят новый интересный период в котором каждый сервер будет под атакой 24 на 7. Вот только раньше нужен был человек, который: найдет, разберется, напишет, проверит и может быть даже не сразу опубликует, а теперь этого человека не надо.

На тот случай, если у вас в голове зреет вопрос: «И что делать, теперь‑то?», — все просто, если вы разработчик то обязательно делать backport патчей при мажорных изменениях, нельзя оставлять дыры в XP патча только новые выпуски. Если вы пользователь не пренебрегайте рантайм защитами. Но по большей части, никто ничего не сделает — именно это пугает. Запасаемся попкорном и наблюдаем, надеясь что поезд промчит мимо.

Комментарии (0)