Предположим, у вас есть компьютер с Windows Server, на котором запущены различные конфиденциальные службы. Предположим, что одна из этих служб довольно проста, хранит небольшой объем информации в текстовом файле, но из-за того, что она плохо закодирована, имеет (неизвестную) уязвимость выполнения произвольного кода.
Можно ли настроить учетную запись пользователя для этой службы таким образом, чтобы, если хакер успешно воспользуется этой уязвимостью, наибольший ущерб, который они могут нанести, - это чтение / запись этого текстового файла, нарушение этой конкретной службы и, возможно, список файлов из C: \ Windows, а больше ничего?
Наивная попытка сделать это сразу же наталкивается на проблему: любой в «Users» может писать в C: \ Program Files, а удаление «Users» из ACL этого каталога приводит к ошибке разрешения, заставляя меня задаться вопросом, возможно, это так. очень плохая идея.
Или игра уже проиграна, если злоумышленник может выполнить произвольный код независимо от того, какая учетная запись пользователя используется? Я всегда думал, что потомки Windows NT позволяют сдерживать это, но теперь, когда я попробовал, я уже не в этом уверен.
По умолчанию пользователи могут не написать в C:\Program Files
. У них есть Read, List Folder Contents и Read & Execute. Если это не так, значит, кто-то или что-то изменило эти разрешения.
Пользователь с ограничениями может читать большую часть файловой системы, но может писать только в те места, к которым ему явно предоставлен доступ, например, в его профиль пользователя.
Если вы предоставите Изменить только в этот единственный текстовый файл, единственное, что эта учетная запись сможет писать в файловой системе, - это этот файл, а также вещи в его каталоге профиля (Мои документы и т. д.), которые не должны иметь никакого значения.
Если у вас есть встроенная группа «Пользователи», имеющая права на изменение всей файловой системы, то это нестандартно. По умолчанию ограниченные учетные записи пользователей могут нанести очень небольшой ущерб.
Сама по себе ошибка выполнения произвольного кода не особенно безобидна, если учетная запись службы, выполняющая ее процесс, ограничена в правах. Проблема в том, что есть очень много Существуют эксплойты повышения привилегий: если вы можете произвольно выполнять код, вы можете просто выполнить что-то, что позволит вам выйти за пределы вашего уровня привилегий. Само по себе выполнение произвольного кода не имеет большого значения, но в реальном мире оно почти всегда связано с эксплойтом повышения привилегий. Так что да, я был бы обеспокоен.
Здесь есть несколько довольно интересных ответов.
Принимая эмпирическую позицию, имея за плечами многочисленные «списки исправлений» после тестирования на проникновение, я бы фактически сказал, что Microsoft проделала большую работу за последние годы, предоставив инструменты и опции для очень хорошей защиты сервера.
Конечно, MS по-прежнему выполняет фазировку своего кода, и они и сообщество продолжают находить эксплойты удаленного выполнения / повышения привилегий, но я должен сказать, что их исправление происходит на лету по сравнению с некоторыми другими поставщиками (SonicWall, Tivoli и На ум приходит Oracle).
Мои рекомендации были бы такими:
Важно помнить, что не существует полностью безопасной операционной системы, приложения или сети. Все дело в уровнях предотвращения и определении того, когда все выглядит иначе. Не продавайтесь и в Обнаружении вторжений, если, конечно, вы а) не склонны к раздумыванию рекламных предложений, б) у вас много свободного времени и в) у вас много лишних долларов.
Наконец, самые изощренные «атаки» в наши дни не связаны с разрушением; наоборот. Основное внимание (и финансирование!) Переключилось на кражу данных.
В мире Linux мы бы использовали SELinux или другой принудительный контроль доступа механизм для смягчения такого рода угроз.
В Windows нет ничего более надежного, но начиная с Vista / 2008 у него есть базовая механизм целостности который вы могли бы использовать. (Хотя у этого есть довольно высокая кривая обучения и его полное объяснение потребует большей длины, чем разрешено здесь.)
Я думаю, что лучшим краткосрочным решением будет изолировать службу на виртуальной машине.
Если «выполнить произвольный код» означает, что процесс может создавать каталоги, они могут создавать каталоги либо в текущем каталоге, в каталоге профиля пользователя учетной записи службы, в корне диска C: \, либо просто искать каталог. где он может создавать каталоги.
В прошлый раз, когда я проверял, Windows обычно давала разрешение на создание каталогов в корне C :. Вы можете не увидеть этого в графическом интерфейсе, потому что вам нужно будет просмотреть страницу свойств Advanced или использовать ICACLS, чтобы получить полный список разрешений.
Даже если разрешение корневого каталога C: \ было усилено, выполнить поиск во всех каталогах на C: \ и проверить тот, в котором разрешения позволяют учетной записи службы создавать каталоги, тривиально. Скорее всего, он будет.
Если эксплойт процесса может создавать каталоги где-нибудь на C :, то довольно просто отключить систему, создав миллионы или миллиарды пустых каталогов / подкаталогов.
Пустые каталоги имеют нулевые байты, поэтому на них не распространяются квоты. Эти каталоги также хранятся непосредственно в MFT (из-за их небольшого размера), поэтому, даже если процесс может быть остановлен, а каталоги удалены, MFT эффективно уничтожается - настолько большой и / или фрагментированный, что может потребоваться восстановление системы. из резервной копии.
Используйте DEP для всех процессов. Это остановит большинство, но есть много эксплойтов, которые в любом случае могут победить DEP.
Предотвращение злоупотреблений необходимо делать с нуля - нет смысла делать это для учетной записи на небезопасном сервере с большой площадью атаки
Так;
1) Убедитесь, что сервер исправлен.
2) Вы можете использовать SCW (мастер настройки безопасности) для усиления защиты сервера. Он будет работать быстрее и лучше, чем большинство администраторов.
Он позволяет вам отменить сделанные изменения, но отменит только один шаг. Поэтому, если вы запустите его, заблокируйте материал, а затем запустите его снова (т.е. если вы что-то пропустили) и затем вы заметили, что что-то сломалось, если это сломалось во время первой блокировки, вы не сможете легко отменить это (придется делать это вручную)
Итак, после запуска и применения, тщательно протестировать функциональность.
3) затем, убедитесь, что вы используете учетные записи, которые не являются администраторами, опытными пользователями и т. д., и что у них есть только разрешения NTFS, чтобы делать минимум того, что им нужно делать, и ничего больше.
4) Вы также можете использовать локальную политику безопасности (или политику домена, если сервер является членом домена), чтобы заблокировать другие аспекты графического интерфейса.
Вы, безусловно, можете попытаться создать безопасного пользователя, подобного тем, которые имеют окна, в которые невозможно войти, и которые имеют доступ только к определенным файлам на машине. Минус в том, что эксплойт повышения привилегий может работать с этим пользователем в зависимости от ситуации.
В linux мы chroot jail-процессы и подобные сервисы как часть стратегии снижения безопасности. Я не специалист по Windows, но как бы вы это сделали в Windows?
Одна вещь, которую вы можете сделать, чтобы поместить службу в песочницу, - запустить ее на виртуальной машине. Virtualbox - мой выбор, так как вы даже можете установить его на тот же сервер, если хотите, и заставить его запускаться с сервером, даже без головы, так что он будет работать почти как служба. Это тоже бесплатно. Эксплойту очень сложно убежать от вашей виртуальной машины. Минус этого подхода заключается в том, что вы будете запускать еще один полный экземпляр Windows, который сам должен обновляться и потреблять ресурсы.
Еще одна вещь, которая будет работать, - это использовать специальную программу-песочницу, такую как песочница это может изолировать любой процесс, чтобы от него было труднее сбежать, если он будет скомпрометирован.