Защита систем. Чему «Звездные войны» учат инженера ПО — страница 14 из 68

Вмешательство в процессы

Во всех случаях, кроме простейших, процессы могут полагаться на операционную систему для защиты от процессов, принадлежащих другим пользователям. (Загрузчики, такие как MS-DOS, смарт-карты и другие слабые системы прошлого времени, обычно не могут обеспечить такую защиту.) Эта функция изоляции иногда имеет два режима: защита от процессов других пользователей и более слабая защита от процессов, запущенных от имени того же пользователя. С другой стороны, операционная система должна обеспечивать контроль над тем, какой процесс может читать или писать в память другого процесса. Исторически сложилось так, что эта норма была ослаблена для процессов, запущенных от имени одного и того же пользователя: вы хотите иметь возможность отлаживать свои собственные процессы и влиять на их поведение, чтобы они вели себя по-разному. Apple объявила о другом наборе настроек по умолчанию в IoS, и, хотя некоторую функциональность стало добавлять труднее, также было сложнее написать и вредоносное ПО.

Сетевые атаки на процессы

Операционная система опосредует доступ к аппаратному обеспечению, в том числе сетевому, и предоставляет интерфейс для потоков или пакетов, которые могут содержать все, что выходит за пределы (очень минималистичные) сетевого стека. Процессы должны защищаться от того, что могут сделать злоумышленники. Например, удаленный клиент может изменить предоставленное вами одноразовое случайное число или изменить значение admin=no, добавить токен admin=yes или даже удалить токен rebel_sympathizer. Они также могут попытаться подделать ваши входные данные, поступающие через удаленные файловые системы, или создать путаницу между кодом и данными, или иным образом повредить целостность вашего процесса. Атаки на целостность процессов описаны в главе 6 «Расширение полномочий и изоляция» и в главе 8 «Распознавание и порча».

Вмешательство других пользователей

Операционная система создает каналы, обеспечивающие связь и взаимодействие между пользователями с различными идентификаторами, включая доступ к файлам, сигналы и совместно используемую память. Для вмешательства наиболее важными являются разрешения на запись. Как правило, эти средства защиты достаточно сильны для того, от чего они намерены защищать. Например, если в вашей операционной системе или у поставщика облачных услуг есть режим «только добавление новых записей» для журналов, вы, вероятно, можете рассчитывать на его работу, чтобы только авторизованный администратор журналов мог удалять журналы.

Защитить свой процесс от несанкционированного доступа root, администратора или гипервизора сложно, и пытаться делать это или беспокоиться об этом – пустая трата усилий, если у вас нет аппаратной поддержки. При аппаратной поддержке, такой как Intel SGX или Apple Secure Execution Environment, существуют явные пути авторизации, которые контролируют то, что может делать администратор операционной системы, и обеспечивают надежную защиту целостности. Подробности выходят за рамки этой книги, но вспомните, что в любом коде есть ошибки, которые часто являются ошибками безопасности, и это оборудование потребует необычных навыков и доступа к тестированию.

Вмешательство пользователя с тем же самым ID

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

Убедить человека вмешаться в работу собственного компьютера – интересная и, возможно, неожиданная форма атаки. По мере того как компьютеры становятся все менее познаваемыми, «Погуглите сообщение об ошибке» является не только частым, но и разумным ответом. Есть сайты, изобилующие советами, которые могут быть весьма небезопасны, иногда случайно, а иногда потому, что люди, кажется, намеренно советуют дурное, например «Загрузите это программное обеспечение и запустите его от имени администратора». Такие атаки могут с трудом достигать целей, и многие из них, вероятно, собирают малоценный урожай. Но если вы интенсивно используете истребители TB-65B X-wing и ваш противник знает об этом, то он может использовать веб-сайт механиков звездолетов, чтобы убедить ваших механиков настроить бортовые радиостанции таким образом, чтобы истребители было легче отслеживать на больших расстояниях.

Вмешательство в библиотеки

Есть три интересных случая вмешательства через библиотеки. Во-первых, это пути загрузки библиотеки, такие как папка Downloads или переменная среды LD_LOAD_LIBRARY; второй – библиотеки, загружаемые через менеджер пакетов; и, наконец, библиотеки, загружаемые с веб-сайта.

Папка Downloads используется для хранения большого количества загрузок. Если кто-то загружает установщик и этот установщик неточно указывает, какие библиотеки DLL ему нужны, то загруженные заблаговременно в папку Downloads копии этих библиотек DLL могут быть использованы установщиком. Конечно, это относится к любому коду, а не только к установщикам, но установщики часто становятся жертвами этой формы вмешательства, поскольку запуск их из папки с загрузками кажется разумным и нормальным [Lawrence, 2019]. Лучшим решением для поставщиков приложений является поставка пакета установщика, такого как. app, MSI или. dmg, а не исполняемого файла. Поставщики операционных систем также должны использовать специальные папки, такие как Downloads и tmp, и требовать специальных флагов сборки для загрузки зависимостей (подключаемые пакеты и библиотеки) из таких папок. Одним из вариантов этого является проверка наличия библиотеки в доверенном каталоге, таком как system32, в котором есть ненадежные и доступные для записи подкаталоги, такие как Tasks [Forshaw, 2017]. Как бы ни было заманчиво высмеивать Microsoft за это, но нечто подобное есть во всех системах.

Современные системы управления пакетами упрощают управление зависимостями. На самом деле это настолько просто, что разработчики часто добавляют одну и ту же библиотеку несколько раз на веб-страницы. Они добавляют как одну и ту же, так и разные версии [Lauinger, 2018]. Существует проблема, которая заключается в случайной подмене библиотеки в результате ошибки проверки версии. Одно из распространенных решений этой проблемы – фиксация версий библиотек, от которых зависит программа, чтобы помочь управлять совместимостью. Это приводит к тому, что старые версии, полные уязвимостей, все равно используются [Morszczyzna, 2017; Pieczul, 2017].

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