Объявлен победитель конкурса в этом году на лучший подлый код C.
Underhanded C Contest — это ежегодное соревнование, в ходе которого разработчики пишут код, который выглядит невинно, но скрывает злонамеренный секрет.
Конкурс в этом году включал написание кода, который, якобы обнаруживая наличие или отсутствие делящегося материала, под крышкой также имел бы способ обмануть. Как пояснил на своем сайте победитель конкурса Линус Окессон:
«Наша задача состояла в том, чтобы написать фрагмент кода для обнаружения присутствия или отсутствия делящегося материала, позволяющий стране А проверить, что страна Б уничтожает настоящие боеголовки. вызывать ложные срабатывания и таким образом уничтожать только фальшивые боеголовки ».
Как пояснили на сайте конкурса:
«Две страны, Славная Народная Демократическая Республика Алиса и Славная Демократическая Народная Республика Боб, подписали договор о ядерном разоружении. На практике это осуществляется ядерными инспекторами, посещающими каждую страну и проверяющими наличие делящегося материала, такого как плутоний, в боеголовке, после чего боеголовка может быть уничтожена ».
К сожалению, ни одна из сторон не хочет, чтобы инспекторы соперника видели такие данные, как радиограмма или спектр гамма-излучения тестируемого объекта, потому что это выдало бы слишком много информации. Вместо этого страны соглашаются разработать компьютерную программу, которая берет результат сканирования, определяет, соответствует ли он некоторому эталонному шаблону, и выводит только «да» или «нет».
Закулисная часть конкурса требовала, чтобы программа точно возвращала «да» или «нет», но также должна была иметь возможность показать, что ядерный материал присутствует, даже если его нет. Это позволяет стране, контролирующей программу, ошибочно идентифицировать фальшивую боеголовку как настоящую, а затем уничтожить ее, и их соперники будут думать, что они уничтожили настоящую боеголовку из своих запасов.
Организаторы конкурса сгруппировали заявки в несколько категорий в зависимости от того, как они добились ложного срабатывания — простой или нереальный; запускается данными; и окружающая среда срабатывает. Упрощенный подход нереалистично полагался на такие методы, как возможность принимающей страны повредить входной массив.
Атаки, инициируемые данными, предлагали использовать в качестве триггера определенный вид тестового спектра, например, без всплесков или с экстремальным значением.
Последняя группа атак, инициированных средой, полагалась на некоторые изменения в тестовом компьютере, такие как установка uid для файла или подделка системных часов. Хотя судьи были обеспокоены тем, что такие атаки, инициированные окружающей средой, были нереалистичными, они заявили, что:
«отзывы, которые мы получили от инспекторов, показали, что нельзя полностью исключить такое вмешательство просто из-за физического содержания машин».
Некоторые из предложенных решений для атак, инициируемых данными, потеряли много очков, потому что они полагались на настолько маловероятные данные, что это могло вызвать подозрения.
Судьям понравилось победившее решение тем фактом, что, помимо единственной « путаницы », когда функция настроена на ожидание 4-байтовых чисел и передает 8-байтовые двойные числа, код:
«не делает ничего необычного, подозрительного, причудливого или необычного: это стандартная реализация предварительной обработки с последующей нормализованной корреляцией».
Несовпадение длины данных приводит к тому, что функция просматривает только первую половину массива и неправильно интерпретирует числа. Неправильная интерпретация означает, что боеголовка с крошечным количеством делящегося материала вместе с тщательно подобранным вторым соединением может выглядеть так, как если бы она была полностью делящимся.
Полную информацию о том, как работает решение, сам код и анализ других участников, занявших второе место, можно найти на сайте Underhanded C Contest.