0day (англ. zero day) — термин, обозначающий неустранённые уязвимости, а также вредоносные программы, против которых ещё не разработаны защитные механизмы.
Сам термин означает, что у разработчиков было 0 дней на исправление дефекта: уязвимость или атака становится публично известна до момента выпуска производителем ПО исправлений ошибки (то есть потенциально уязвимость может эксплуатироваться на работающих копиях приложения без возможности защититься от неё).
На данный момент многие вирусописатели фокусируют свои усилия именно на обнаружении неизвестных уязвимостей в программном обеспечении. Это обусловлено высокой эффективностью использования уязвимостей, что, в свою очередь, связано с двумя фактами — высоким распространением уязвимого ПО (именно такое программное обеспечение, как правило, атакуют) и некоторым временным промежутком между обнаружением уязвимости компанией-разработчиком программного обеспечения и выпуском соответствующего обновления для исправления ошибки.
Для обнаружения уязвимостей вирусописатели используют различные техники, например:
Дизассемблирование программного кода и последующий поиск ошибок непосредственно в коде программного обеспечения;
Реверс-инжиниринг и последующий поиск ошибок в алгоритмах работы программного обеспечения;
Fuzz-тестирование — своего рода стресс-тест для программного обеспечения, суть которого заключается в обработке программным обеспечением большого объёма информации, содержащей заведомо неверные параметры.