От HFT к ИБ — гонка, которую ускоряет ИИ

Нет, речь пойдет не про высокочастотную торговлю на бирже, но я буду использовать аналогию, чтобы стало понятно почему и как я думал. Собственно, мое мнение 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 патча только новые выпуски. Если вы пользователь не пренебрегайте рантайм защитами. Но по большей части, никто ничего не сделает - именно это пугает. Запасаемся попкорном и наблюдаем, надеясь что поезд промчит мимо.
KioskNews shows a cleaned-up reading view extracted from the publisher’s page — the original always lives on their site, not ours.