От 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 патча только новые выпуски. Если вы пользователь не пренебрегайте рантайм защитами. Но по большей части, никто ничего не сделает – именно это пугает. Запасаемся попкорном и наблюдаем, надеясь что поезд промчит мимо.

Автор: Sharque

Источник