ПостНаука рассказывает о современных технологиях и их влиянии на наше будущее в проекте «Банк знаний», созданном вместе с Корпоративным университетом Сбербанка.

Сейчас сложилась уникальная ситуация в области технологии, которая обеспечивает работу интернета, — такая, что стало очень легко автоматизировать поиск программных уязвимостей и их эксплуатацию. Что такое программная уязвимость? Это ошибка в программе, которая позволяет тому, кто о ней знает, сделать что-то полезное для него. Например, вытащить данные, которые он может продать, напрямую сделать перевод денег из банка, если в банке есть уязвимость, украсть какие-то приватные данные из телефона, если он знает, что там есть какая-то уязвимость, и так далее. Такого рода ошибки стало возможно искать автоматически намного эффективнее, чем это было раньше. Это связано с тем, что приложения мигрировали с устройств, которые изредка друг с другом общаются через интернет по dial-up. Как это было раньше? Люди устанавливали у себя офис, разрабатывали документы, ставили какие-то развлекательные программы и иногда выходили в интернет. Может быть, даже и постоянно были подключены, но на каких-то медленных каналах.

Сейчас же основной платформой для приложений стала веб-технология. Многие приложения переехали в веб — социальные сети, мобильные офисы, которые прямо через веб доступны. И теперь уже люди реже, чем раньше, работают с документами только у себя локально, а очень часто работают коллективно через облачные сервисы и так далее. И получается такая картина, которой раньше просто не существовало. И серверная сторона, и клиентская сторона, то есть сами клиентские устройства, доступны постоянно 100% времени, семь дней в неделю через интернет по очень хорошим каналам связи.

Рекомендуем по этой теме:
12
Поиск уязвимостей

Из этого вырисовывается такая особенность для задачи поиска уязвимостей — больше количественно, конечно, но которая переходит в качественную. Все экземпляры популярных программ, которые уязвимы, доступны на расстоянии вытянутой руки. Если я у себя на компьютере поисследовал какую-то популярную программу, нашел в ней такую ошибку, которая позволяет мне в другом экземпляре этой же программы что-то сделать, я могу за считаные минуты просканировать интернет, найти все экземпляры, которые сейчас онлайн, и проэксплуатировать эту ошибку. То есть сама инфраструктура теперь благоприятствует автоматизации.

А что такое искусственный интеллект? Это, как правило, наборы алгоритмов, автоматизирующие типовые задачи, которые делает живое существо — человек в данном случае. То есть если посмотреть на теорию искусственного интеллекта, выделяют таких интеллектуальных агентов. Агенты — это кто-то, кто работает в среде. В нашем случае, когда мы говорим про кибербезопасность, среда — это программы, которые доступны и связаны сетью. Мы видим их интерфейсы — и те интерфейсы, которые видят люди, и те интерфейсы, которые только для машиночитаемого взаимодействия. И в этой среде, которую может воспринимать интеллектуальный агент, он может очень быстро и эффективно искать тонкие места в том, как реализовано приложение, которое он исследует.

Например, есть у вас тот же онлайн-офис, куда вы загружаете документы. Тот агент, который может проанализировать этот офис, может посмотреть не только на тот интерфейс, который отрисовывается вам, но и на программное API, которое предоставляет сервер, и напрямую попытаться произвести какие-то операции: а что, если я в него буду загружать не только документы, но и, например, фильмы или, может быть, случайные данные определенного размера и с разными типами? Или, скажем, документы: я у них границы поставлю по-разному или какие-то другие документы туда еще внутрь вложу много-много раз, сделаю такую рекурсивную вложенность. И делать это можно очень быстро. Сервер постоянно подключен, работает. Если в сервере произошла ошибка при взаимодействии с этим агентом, как правило, все сделано так, чтобы быстро перезапуститься и снова обслуживать клиента, в данном случае нашего робота.

И во что вся эта картина выливается сейчас? В 2014 году американское агентство DARPA объявило конкурс. Они часто объявляют такие конкурсы, где предлагают большой денежный приз, но не сразу, а через несколько лет, когда команды, которые решили в нем участвовать, уже наработали что-то и дальше посоревнуются между собой. Есть и примеры конкурсов про автомобили: была задача проехать 50 километров по пустыне на машине, которой управляет робот. И в 2014 году они сделали аналогичный конкурс для роботов, которые ищут уязвимости в сервисах, в программных сервисах. Этот конкурс длился два года. То есть в 2016 году был финал, и известны победители. Но интересно посмотреть на то, что умеет в итоге та программа, которая является результатом этого конкурса.

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

И это реальность. Победители продемонстрировали достаточно серьезную способность к тому, чтобы оно работало. И результат команд, которые заняли призовые места, непубличный. Но из этого факта, из их результатов, можно экстраполировать, что уж точно такими вещами люди занимаются, причем успешно. И те многочисленные инциденты, которые мы видим сейчас (например, взломали агентство «Эквифакс» в сентябре, большое рейтинговое агентство США, различные банки), могут означать, что мы видим неслучайные совпадения, что хакерская активность возросла, а просто нарабатывается база искусственных машин, которые это автоматически делают быстро и эффективно.

Подходы для поиска уязвимостей общие и когда вы занимаетесь этим вручную, и когда делаете что-то автоматически, пишете робота, который будет делать то же самое. Есть так называемый анализ методом черного ящика, когда программа вам доступна просто как черный ящик, вы видите только вход и выход. Выход — это то, чем программа отвечает вам на то, что вы ей дали. Есть серый ящик, когда вы видите еще, в каких условиях эта программа работает, какая там операционная система, как настроено все и так далее. И есть белый ящик, когда есть и вход, и выход, а еще вы видите текст самой программы. То есть каким-то способом либо декомпилировали ее, либо были исходные тексты программы. В этих разных условиях можно ставить задачу как раз по поиску уязвимости. Как в случае черного ящика — самый интересный, наверное, вариант, — вам виден только интерфейс, и вы можете гадать по результату, тому, что ответила или вообще не ответила программа, что же там с ней произошло в ответ на ваш ввод.

Рекомендуем по этой теме:
19289
Искусственный интеллект

Часто получается так, что в современном мире фреймворки, особенно сделанные для веба, довольно устойчивы к ошибкам, в том числе к ошибкам в тех данных, которые вы даете. За счет этого очень часто программы выдают ошибку прямо в ответ. Можно увидеть, что в ответ на вашу попытку взломать появилась какая-то ошибка базы данных, которая намекает вам на то, что надо копать глубже именно в этом направлении.

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