DARPA — Агентство перспективных оборонных исследований при Министерстве обороны США — известно нам как родина сети Интернет, спонсор операционки Multics (прообраза UNIX), а в последние годы и как учредитель нескольких крупных технологических конкурсов для экономичного (сравнительно с опорой на собственные силы) решения нетривиальных технических задач. С середины «нулевых» оно выделило миллионы долларов на призы создателям самопилотируемого автомобиля (серия конкурсов Grand Challenge) и роботов, способных к выживанию в сложных условиях (Robotics Challenge). Но на минувшей неделе прогремело кое-чем, что кажется чересчур амбициозным даже для него: новый конкурс, Cyber Grand Challenge (CGC), предполагает разработку программного обеспечения, которое «лечило» бы себя самостоятельно.
Если точнее, цель CGC — создание автоматической системы, способной находить уязвимости в программах, анализировать их, писать патчи (правильнее, наверное, будет сказать «генерировать») и устанавливать их, закрывая таким образом обнаруженные «дыры». Что позволит добиться невиданной, немыслимой по сегодняшним меркам оперативности профилактических ИТ-мероприятий. Если сегодня выпуск патча — дело десятков часов, а обычно целых суток (по данным Secunia, в прошлом году для восьми из десяти самых популярных программ патчи выпускались в течение 24 часов после того, как становилось известно об уязвимости), победители CGC смогут латать «уязвимости нулевого дня» в течение минут или секунд «заплатками нулевого часа». Кроме того, «дыры» будут вскрываться без помощи пользователей и (или) злоумышленников, немедленно после выпуска либо даже в процессе разработки программного обеспечения. А значит, «дыр» не будет вовсе!
Звучит утопически, но у DARPA всё конкретно. Конкурс рассчитан на три года: будут проводиться промежуточные турниры (первый — уже в декабре 2014-го: поиск уязвимостей в обычном массовом софте, через Сеть), а в 2016-м лучшие участники сойдутся лицом к лицу на офлайновом финале. Регистрация уже начата, продлится до середины января, и, с некоторыми оговорками, участвовать могут даже иностранные команды. Кроме того, DARPA, как и всегда, не планирует отбирать у победителей их разработки: Агентство претендует только на право лицензировать плоды их труда «на разумных условиях». Кстати, победителю обещано $2 млн, а следующим за ним $1 млн и $750 тыс. соответственно.
Но мечтать об этих деньгах сейчас смешно. Ведь даже формализовать задачу кажется нереальным! Сегодня подобным занимается только человек: высококвалифицированные, опытные специалисты, способные осмыслить программный текст и придумать, как заставить программу работать неожиданно, нестандартно, тем самым добившись от неё незапланированных результатов. Разве что одни спецы работают на «тёмной» стороне, а другие — на «светлой». Но в любом случае выданный Природой патент на изобретательство принадлежит пока только нам. Машина творить ещё не научилась.
Это не значит, что компьютер не в состоянии искать ошибки. Automatic error detection — обширное, активное направление в ИТ. Код анализируют статически на предмет известных проблемных паттернов, исполняют в виртуальных машинах, следят за состоянием памяти во время работы, мучают некорректными вводными данными, и так далее, и тому подобное. Такой поиск может быть очень эффективным: вот, например, моя заметка десятилетней давности о том, как автомат нашёл тысячу ошибок в ядре Linux. Но и десять лет назад, и сегодня такой поиск — лишь автоматизация того, что человек мог бы сделать и сам, вручную, после того как придумал очередную концепцию ошибки. Придумывать же новые концепции компьютер по-прежнему не умеет! Лучшим подтверждением этому — простой факт: ИТ-гиганты и спецслужбы всё ещё платят четырёх-пятизначные суммы левым хакерам, вместо того чтобы истратить те же деньги на программное обеспечение, ищущее ошибки автоматически.
Так вот, DARPA поставило условие: в CGC не будут приниматься работы, основанные на эволюционном развитии существующих практик. Иначе говоря, нужны только революционные идеи поиска ошибок. Ни один из существующих методов не решает проблему щита и меча: ошибки, о которых стало известно, устраняют быстро, но нападающие всегда на шаг впереди, они постоянно придумывают новые виды атак, находят принципиально новые слабости. Эффективно противостоять им сможет только машина, которая сама способна осмысливать код, выдвигать теории и проверять их. Может быть, и не искусственный интеллект в классическом понимании, но что-то очень к нему близкое.
Удастся ли эту задачу решить? Я не знаю, да и кто может такое знать наперёд? Но есть два соображения, которые следует иметь в виду. Во-первых, особого выбора у нас нет, мы должны начинать искать решение! Дело в том, что число уязвимостей в программном обеспечении (в данном случае — вскрывшихся, но тем более справедливо это и для пока ещё скрытых дефектов) росло и продолжает расти все последние годы. Человеческие же ресурсы небесконечны — и однажды мы не сможем удержать лавину багов, «дыр», ошибок, вирусов. Компьютерам нужна иммунная система.
Во-вторых, даже если найденное участниками CGC решение окажется частичным, если получится не автоматический, как надеются в DARPA, а полуавтоматический механизм, создание его будет означать революцию в компьютерной безопасности. Специалисты по безопасности ИТ-систем уже не будут нужны, по крайней мере в прежнем количестве. Сами спецы в это, естественно, пока не верят: например, человек из Sophos, комментируя CGC в одном из интервью, выразил большое сомнение, что удастся сделать security-автомат, который заслужил бы такое же доверие бизнеса, как живой человек. Но даже если автоматические системы профилактики не вытеснят людей, они точно заставят многих из нас поменять специализацию — вместо анализа кода заняться программами, анализирующими код.
Станет ли мир, в котором о машинах заботятся машины, спокойнее? Весьма вероятно, но не наверняка. Помнится, «Скайнет» начинала именно с этого.