Для ядра Linux предложена реализация белого списка исполняемых приложений
В списке рассылки ядра Linux опубликован набор патчей с реализаций LSM-модуля WhiteEgret, представляющего средства для обеспечения защиты системы через применение белого списка исполняемых компонентов. WhiteEgret допускает исполнение только кода приложений и библиотек, которые явно разрешены и занесены в заранее определённый белый список. Исполнение всех не включённых в список приложений блокируется, что не позволяет выполнить в системе недозволенные программы и вредоносное ПО. WhiteEgret хорошо подходит для статичных окружений, состав которых не меняется длительное время, например, для типовых серверов и промышленных управляющих систем.
Обработка белого списка дозволенных программ выполняется в пользовательском окружении при помощи процесса WEUA (WhiteEgret User Application). В процессе обработки системных вызовов execve и mmap_file ядро отправляет в WEUA запрос, передавая полный путь к исполняемому файлу. WEUA на основании белого списка принимает решение о возможности исполнения данного файла. Вызов mmap_file применяется для перехвата загрузки разделяемых библиотек в область памяти, допускающую выполнение. Кроме файлового пути проверяется хэш от содержимого исполняемого файла, что позволяет блокировать файлы, изменённые после занесения в белый список. Взаимодействие WEUA с ядром осуществляется при помощи интерфейса netlink.
Особенности WhiteEgret:
- Упрощённая начальная настройка. В простейшем случае белый список можно сформировать путём включения в него всех исполняемых файлов, доступных в свежеустановленной системе. Подобный список обеспечит блокирование всех приложений, не входящих в штатную поставку;
- Короткое время простоя при обновлении системы. После выполнения обновления достаточно перестроить белый список с учётом изменения хэшей исполняемых файлов;
- Независимость от состава рабочего окружения и отсутствие дополнительных требований к нему. Например, WhiteEgret не зависит от типа файловых систем и TPM (Trusted Platform Module).
© OpenNet