Zip-бомба, кроме того знаменитая равно как файловая взрывчатка, картотека кончины либо англ. decompression bomb — архивированный документ, что согласно собственной натуре владеет рушащим воздействием. Присутствие распаковке способен спровоцировать провал концепции, линией наполнения в целом беспрепятственного зоны в носителе. Современные[когда?] антивирусы абсолютно распознают аналогичные комп.данные также предостерегают юзера об рушащем воздействии.
Внешне подобный файл выглядит как маленький архив. При распаковке распаковывается тот же самый архив. Данный файл может предоставлять опасность для антивирусов: в попытке распаковать все архивы антивирус может забить всю память и ничего не найти.
Единственный с наиболее популярных образцов «архива смерти», документ 42.zip[3], показатель сжатия коего 106 млрд ко 1. Во сокращенном варианте картотека захватывает 42 кб (42.374 б), присутствие стабильной распаковке, до тех пор пока комплект сведений никак не дойдет верхнего границы распаковки во 4.3 гб (4 294 967 295 б), станет захватывать во памяти наиболее 4,5 петабайт (4 503 599 626 321 920 б).
Иной вид вредного архива создал разработчик программного обеспечения Дэвид Фифилд. Во пакованном варианте его картотека обладает 46 МБ, но присутствие распаковке захватывает 4,5 петабайта. Присутствие его формировании Фифилд применял никак не рекурсивную технику, равно как его предшественники (в таком случае имеется способом «обратной матрешки»), но смог загородить комп.данные изнутри архива, то что разрешило достигнуть наиболее высочайшего коэффициента сжатия
fork-бомба — вредоносная или ошибочно написанная программа, бесконечно создающая свои копии (системным вызовом fork()), которые обычно также начинают создавать свои копии и т. д.
Выполнение такой программы может вызывать большую нагрузку вычислительной системы или даже отказ в обслуживании вследствие нехватки системных ресурсов (дескрипторов процессов, памяти, процессорного времени), что и является целью.
Программа классической fork-бомбы (написанная на языке Си) выглядит так:
include <unistd.h>
int main()
{
while(1)
fork();
}
Схожими случаями утечки системных ресурсов являются программы, порождающие зомби и процессы-сироты. Однако, если большинство fork-бомб создаётся намеренно, то эти проблемы обычно являются результатом невнимательности или некомпетентности программиста
Fork-взрывчатка порождает огромное число личных снимок также этим наиболее стремится наполнить беспрепятственное роль во перечне действующих действий операторной концепции. Уже После наполнения перечня действий делается неосуществимым начало нужной проекты. В Том Числе И в случае если тот или иной-или иной процедура завершит службу также роль во перечне действий станет свободной, в таком случае начало нужной проекты практически невозможен, таким образом равно как большое число иных снимок fork-бомбы ранее ожидают способности привести в действие собственную еще одну список.
Помимо наполнения перечня действий, вероятны кроме того стратегии наполнения условной памяти, процессорного периода, сокетов также иных целых ресурсов. Итогом исчерпания данных ресурсов делается затормаживание деятельность либо почти задержка операторной концепции и/или нужных проектов (остановка пк).
Fork-взрывчатка способен являться получена также во следствии погрешности присутствие честном программировании. К Примеру, проект, внимающая общесетевой москва, способен присутствие получении сетного пакета либо установлении объединения «упасть» во нескончаемый оборот формирования собственных снимок с целью обрабатывания пакета либо объединения. Элементарная оплошность программирования способен послужить причиной ко утечке памяти либо ко результатам, свойственным с целью итогов деятельность fork-бомбы.
Трудность уничтожения
В случае успешного срабатывания fork-бомбы становится трудным или практически невозможным восстановить нормальную работу ЭВМ без перезагрузки, так как единственный способ прекратить работу fork-бомбы — это одновременное прекращение работы всех работающих копий fork-бомбы. В большинстве реализаций операционных систем вызов команды для прекращения работы процесса требует запуска нового процесса, что в условиях успешно работающей fork-бомбы невозможно.
Однако, на практике некоторые fork-бомбы не требуют таких радикальных мер и могут быть уничтожены без необходимости перезагрузки. Рассмотрим, например, случай бомбы из примера выше:
:(){ :|:& };:
Особенность этого кода в том, что он не зацикливается после неуспешного порождения своих копий, а завершает работу. В результате список процессов постоянно находится на грани заполнения: одна из копий fork-бомбы завершается, и освобождающееся место тут же занимается новосозданным процессом из другой копии fork-бомбы. Становится возможным конкурировать с fork-бомбой за захват места в списке процессов. Тогда возможно рано или поздно запустить команду для одновременного уничтожения всех копий-fork бомбы или запустить безопасную программу, которая будет постепенно «отвоёвывать» место в списке процессов до завершения работы последнего процесса fork-бомбы. Пример такой безопасной программы на zsh:
while (sleep 100 &!) do; done
Единственный с методов избежания отрицательных результатов деятельность fork-бомбы — насильственное лимитирование числа действий, какие абонент способен привести в действие в то же время. Кроме Того имеют все шансы являться урезаны число оттеняемой условной памяти также прочие целые средства. Присутствие исчерпании максимума общедоступных действий стремление хода сформировать новейший процедура потерпит провал. Наибольшее Количество запускаемых действий обязан являться подобным, для того чтобы некто позволил привести в действие рациональное нужное число проектов, однако никак не приносил ко провалу концепции присутствие синхронном запуске fork-бомбы с абсолютно всех юзеров концепции.
Следует выделить, то что лимитирование числа действий само согласно для себя никак не предотвращает пуск fork-бомбы, но только ориентировано в минимизацию вероятного ущерба во случае ее срабатывания.
Иное разрешение трудности — умственное определение fork-бомбы орудиями наиболее операторной концепции, однако данное разрешение никак не обнаружило обширного использования.
Имеется также подобная сложность, то что в случае если fork-взрывчатка захватывает все без исключения легкодоступное процессорное период, в таком случае итоги ее деятельность имеют все шансы являться трагическими никак не только лишь в однопроцессорной, однако также в мультипроцессорной концепции, в том числе и присутствие лимитировании количества действий. К Примеру, в случае если количество процессоров 16, но наибольшее количество числа заброшенных действий Сто, в таком случае в любой микропроцессор станет надо во обычном 6-7 трудящихся экземпляров fork-бомбы, пожирающих процессорное период. С Целью постановления данной трудности используется лимитирование согласно привязке ко процессорам.
Спасибо за дочитку.