Подтвердить что ты не робот

Как скомпрометировать мою систему

Если бы я мог написать пользовательскую программу, которая разбила бы мою ОС (не мое приложение), как бы я это сделал?

Я думал, как-то переключить мою программу usermode в режим ядра и вызвать повреждение памяти. Возможно ли это?

Примечание. Я не создаю вирус. Просто любопытство.

4b9b3361

Ответ 1

KeBugCheck в Windows - это документированный способ получить BSOD.

Вы также можете попробовать удалить корневой раздел реестра (\REGISTRY) в Windows XP, используя собственный NT API.

Ответ 2

Запишите и загрузите модуль ядра, который вызывает panic() или реализует его эквивалент.

Или просто выполните команду shutdown или halt или syscall, которая ее реализует.

Ответ 3

Если ОС - это окна, создайте поддельный драйвер, который разыскивает указатель NULL. Крах!

Ответ 4

Вся идея операционной системы заключается в том, что пользовательская программа не может сбой при нормальных условиях. Конечно, вы все равно можете сделать что-то вроде исчерпания дискового пространства на разделе, который используется для файла подкачки, что может повредить многие операционные системы, или вы можете найти известную уязвимость, но нет очень простого способа надежно свернуть ее.

Ответ 6

Для Windows одна возможность - написать драйвер режима ядра, который блокирует некоторые страницы памяти, принадлежащие процессу, а затем завершает этот процесс. В результате BSOD "Процесс заблокировал страницы".

Ответ 7

Linux: несмотря на то, что вы не просто сбой операционной системы, вы можете легко сделать ее непригодной, выделив много памяти (и прочитав/записав ее для того, чтобы распределение действительно стало эффективным и значительно изменило ОС) и путем разворачивания лотов процессов. "Вилка-бомба" - это ключевое слово и может быть выполнена даже в оболочке script.

Ответ 8

Попробуйте выделить куски памяти, пока у вас не будет свободной памяти:

int alloced = 0;
for(;;)
{
    char *alloc = malloc(10*1024*1024); // alloc 10 MB
    if(alloc != NULL)
    {
        alloced += 10;
        // edit: you have to memset the memory otherwise the system will give it back to you next time
        memset(alloc, 0xab, 10*1024*1024);
        printf(" alloced %d MB\n", alloced);
    }
}

изменить: Я на самом деле пробовал прямо сейчас на 64-битном Linux с 2 ГБ оперативной памяти и 3,3 ГБ свопа: экран заморозился, я мог выделить 4950 МБ оперативной памяти, но затем процесс был убит системой, а Linux упал на ноги изящно, так, нет, это не работает: =)

Ответ 9

Я думаю, что причина, по которой вы хотите сбой ОС, здесь важна. Вы пытаетесь имитировать условие для тестирования, или вам просто интересно?

Вот два варианта, если вы хотите воссоздать и автоматизировать сбой с целью отказоустойчивости.

  • Запустите инсайдер виртуальную машину (vmware, VirtualBox) и просто запустите процесс VM. В качестве альтернативы вы можете дать ему очень низкий приоритет, сбросить устройства или иным образом имитировать плохие вещи.
  • Использовать серверы с консолью управления. У этого будет API, который может просто отключить устройство.

Другие многочисленные предложения хороши, если вы хотите сбой в самой ОС. Эти сбои программного обеспечения могут помочь воспроизвести злоумышленный процесс. Аналогичный набор аппаратных сбоев может также работать (например, снижение скорости на программируемом вентиле и перегрев процессора).

Причина вашего запроса на самом деле очень важна, поскольку все различные ошибки приведут к немного другому результату.

Ответ 10

Сбой операционной системы с использованием чистого пользовательского режима означает, что ядро ​​уязвимо. Если ОС хорошо протестирована, это не должно происходить.

Вы можете попробовать BSoD Windows, атакуя жестких сторонних драйверов, отправив им мусорные IO-CONTROL.

Функция DeviceIoControl (Windows) http://msdn.microsoft.com/en-us/library/aa363216(VS.85).aspx