- BrainTools - https://www.braintools.ru -

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Автор: Sharque

Источник [3]


Сайт-источник BrainTools: https://www.braintools.ru

Путь до страницы источника: https://www.braintools.ru/article/36800

URLs in this post:

[1] реагировать: http://www.braintools.ru/article/1549

[2] боли: http://www.braintools.ru/article/9901

[3] Источник: https://habr.com/ru/articles/1092994/?utm_source=habrahabr&utm_medium=rss&utm_campaign=1092994

www.BrainTools.ru

Rambler's Top100