Введение
Конкурс программирования на злонамеренный код, маскирующийся под обычную ошибку.
Конкурс Underhanded C представлял собой соревнование по созданию кода, который является злонамеренным, но проходит тщательную проверку и выглядит как невинная ошибка, даже если она будет обнаружена. Правила конкурса определяют задачу и вредоносный компонент. Участники должны выполнить задачу злонамеренным образом, как это определено в условиях конкурса, и скрыть вредоносную активность. Участникам разрешается использовать языки, подобные C, для создания своих программ. Организатором конкурса был доктор Скотт Крейвер из кафедры электротехники Университета Бингемтона. Изначально конкурс был вдохновлен конкурсом Obfuscated V, организованным Дэниелом Хорном осенью 2004 года. В период с 2005 по 2008 год призом был подарочный сертификат в ThinkGeek на сумму 100 долларов. Приз за конкурс 2009 года был увеличен до 200 долларов из-за очень позднего объявления победителей, а приз за конкурс 2013 года также составляет подарочный сертификат на 200 долларов.
2005 год
Задача конкурса 2005 года заключалась в базовой обработке изображений, такой как изменение разрешения или сглаживание, с одновременной скрытой вставкой уникальных и полезных данных для "цифровых водяных знаков" в изображение. Победившие работы 2005 года использовали неинициализированные структуры данных, повторное использование указателей и внедрение машинного кода в константы.
2006 год
Конкурс 2006 года требовал от участников подсчета вхождений слов, однако время выполнения программ сильно различалось на разных платформах. Для решения этой задачи участники использовали ошибки в реализации `fork`, проблемы оптимизации, различия в порядке байтов и различные особенности реализации API. Победитель использовал функцию `strlen` в цикле, что приводило к квадратичной сложности, которая оптимизировалась компилятором Linux, но не компилятором Windows.
2007 год
В конкурсе 2007 года участникам требовалось зашифровать и расшифровать файлы с использованием надежного, общедоступного алгоритма шифрования, при этом вероятность взлома небольшого процента (1% – 0,01%) зашифрованных файлов за разумное время должна была быть низкой. Конкурс начался 16 апреля и завершился 4 июля. В представленных работах использовались некорректные реализации RC4, неверное использование вызовов API и ошибочные прототипы функций.
2008 год
В конкурсе 2008 года участникам требовалось удалить прямоугольную область изображения PPM таким образом, чтобы её можно было восстановить. Разрешалось использовать любой метод "затемнения" прямоугольника, при условии удаления исходных пикселей, и восстановление пикселей не должно было быть идеальным (хотя степень соответствия восстановленного изображения исходному файлу учитывалась бы при оценке). Конкурс начался 12 июня и завершился 30 сентября. Большинство работ использовали операцию XOR над областью с извлекаемой псевдослучайной маской или добавляли замаскированные данные в конец формата файла. Программы, занявшие вторые места, использовали некорректно определенные макросы, а победитель, выбрав нераспространенный текстовый формат, обнулял значения пикселей, сохраняя при этом количество знаков.
2009 год
В конкурсе 2009 года участникам требовалось написать программу, которая анализирует директивы маршрутизации, но перенаправляет багаж на основе, казалось бы, безобидного комментария в файле входных данных, разделенного пробелами. Конкурс начался 29 декабря 2009 года и должен был завершиться 1 марта 2010 года. Однако в течение трех лет активность отсутствовала. Победители были объявлены только 1 апреля 2013 года: один победитель и шесть призеров.
2013 год
Конкурс 2013 года был объявлен 1 апреля 2013 года, а срок его проведения – 4 июля 2013 года; результаты были объявлены 29 сентября 2014 года. Конкурс был посвящен вымышленному социальному веб-сайту под названием "ObsessBook". Условием было написать функцию для вычисления DERPCON (Degrees of Edge Reachable Personal CONnection) – степени связанности пользователей, которая "случайно" выдает заниженное расстояние до определенного пользователя.
2014 год
Конкурс 2014 года был объявлен 2 ноября 2014 года, а срок его выполнения приходился на 1 января 2015 года. Результаты были объявлены 1 июня 2015 года. Задача заключалась в написании кода для наблюдения за пользователями социальной сети, подобной Twitter, в ответ на секретный запрос правительства о проведении слежки; однако, по причинам, не лежащим на поверхности, код должен был незаметно сигнализировать пользователю о факте наблюдения. Общий подход заключался в маскировке операций записи в пользовательские данные под запись в данные наблюдения, и победитель реализовал это, создав некорректную функцию проверки времени, которая перезаписывает входные данные.
2015 год
Конкурс 2015 года был объявлен 15 августа 2015 года, а срок подачи работ истекал 15 ноября 2015 года. Результаты были объявлены 15 января 2016 года. Сценарий представлял собой процесс ядерного разоружения между Народной Славной Демократической Республикой Алисы и Славной Демократической Народной Республикой Боба (Алиса и Боб). Задача заключалась в написании тестовой функции для сравнения потенциально делящегося материала с эталонным образцом, которая при определенных условиях могла бы ошибочно пометить боеголовку как содержащую делящийся материал. Примерно треть представленных работ использовали "отравление" NaN из-за ошибочных операций с числами с плавающей точкой, что приводило к генерации большего количества NaN в последующих вычислениях и всегда давало ложный результат при сравнении. Победитель использовал путаницу между типами данных double и float для искажения значений.