Массачусетский Институт Технологий.
Курс лекций №6.858. «Безопасность компьютерных систем».
Николай Зельдович, Джеймс Микенс.
2014 год Безопасность компьютерных систем — это курс, посвященный проектированию и внедрению безопасных компьютерных систем.
Лекции охватывают модели угроз, атаки, ставящие под угрозу безопасность, а также методы обеспечения безопасности, основанные на последних научных работах.
Темы включают безопасность операционной системы (ОС), возможности, управление информационными потоками, языковую безопасность, сетевые протоколы, аппаратную безопасность и безопасность веб-приложений.
Лекция 1: «Введение: модели угроз» Часть 1 / Часть 2 / Часть 3 Лекция 2: «Контроль хакерских атак» Часть 1 / Часть 2 / Часть 3 Лекция 3: «Переполнение буфера: эксплойты и защита» Часть 1 / Часть 2 / Часть 3 Лекция 4: «Разделение привилегий» Часть 1 / Часть 2 / Часть 3 Лекция 5: «Откуда берутся ошибки системы безопасности» Часть 1 / Часть 2 Лекция 6: «Возможности» Часть 1 / Часть 2 / Часть 3 Лекция 7: «Нативная клиентская песочница» Часть 1 / Часть 2 / Часть 3 Лекция 8: «Модель сетевой безопасности» Часть 1 / Часть 2 / Часть 3 Лекция 9: «Безопасность веб-приложений» Часть 1 / Часть 2 / Часть 3 Лекция 10: Символическое исполнение Часть 1 / Часть 2 / Часть 3 Лекция 11: «Язык ур/веб-программирования» Часть 1 / Часть 2 / Часть 3 Лекция 12: «Сетевая безопасность» Часть 1 / Часть 2 / Часть 3 Лекция 13: «Сетевые протоколы» Часть 1 / Часть 2 / Часть 3 Лекция 14: «SSL и HTTPS» Часть 1 / Часть 2 / Часть 3 Лекция 15: «Медицинское программное обеспечение» Часть 1 / Часть 2 / Часть 3 Лекция 16: Атаки по побочным каналам Часть 1 / Часть 2 / Часть 3 Лекция 17: Аутентификация пользователя Часть 1 / Часть 2 / Часть 3 Лекция 18: «Частный просмотр Интернета» Часть 1 / Часть 2 / Часть 3 Итак, давайте начнем.
Добро пожаловать на еще одну увлекательную лекцию о безопасности и о том, почему мир такое ужасное место.
Итак, сегодня мы поговорим о режимах приватного просмотра Интернета, с которыми многие из вас, вероятно, имеют большой личный опыт. Какова цель приватного просмотра? Что говорят исследователи безопасности о конфиденциальности?
В общем смысле они говорят о следующей цели: любой данный пользователь не должен отличаться от группы других пользователей.
В частности, деятельность конкретного пользователя при просмотре Интернета не должна ставить под угрозу активность других пользователей.
Итак, как я уже упоминал, сегодня мы поговорим о конфиденциальности в конкретном контексте частного просмотра Интернета.
На самом деле не существует формального определения того, что означает приватный просмотр веб-страниц.
На это есть несколько причин.
Одна из них заключается в том, что веб-приложения — это очень и очень сложные вещи.
К ним постоянно добавляются новые функции, такие как аудио, видеоконтент и другие подобные вещи.
В результате браузеры должны представлять собой «движущуюся цель».
Поэтому понятие о том, что могут делать браузеры, достаточно расплывчато, в результате чего не всегда понятно, какая информация о конкретном пользователе может просочиться в открытый доступ.
В конечном итоге происходит то, что на практике, как и во многом другом, само существование и назначение браузеров определяется стандартами жизни.
Таким образом, разные поставщики браузеров будут реализовывать разные функции, особенно в отношении приватного просмотра.
Другие разработчики видят работу конкурентов и обновляют собственный браузер, поэтому цели и задачи браузера постоянно меняются.
Поскольку пользователи все больше и больше полагаются на приватный просмотр Интернета, они в конечном итоге обнаруживают множество ошибок конфиденциальности, о которых я расскажу через минуту.
В глобальном смысле приватный просмотр можно рассматривать как амбициозную цель.
Но по мере совершенствования общества некоторые аспекты частного просмотра становятся лучше, а некоторые ухудшаются.
Так что же мы подразумеваем под частным просмотром Интернета? Это довольно сложно определить, но в лекционной статье делается попытка формализовать этот вопрос двумя конкретными способами.
Прежде всего, речь идет о локальном хакере в частной сети — человеке, который захватит ваш компьютер после того, как вы закончите приватный просмотр.
И этот человек хочет узнать, какие сайты вы посещали в режиме приватного просмотра.
В статье также говорится об интернет-злоумышленниках, которые контролируют посещаемые вами сайты.
Этот злоумышленник, возможно, пытается выяснить, что вы конкретный человек, Джон или Джейн, а не какой-то анонимный пользователь, о котором веб-сайт не может предоставить никакой информации.
Поэтому мы рассмотрим каждую из этих атак подробно.
Достаточно сказать, что если злоумышленник сможет запустить обе эти атаки одновременно, как локальную, так и онлайн-атаку, это значительно повысит его способность раскрыть вашу личность.
Например, местный злоумышленник, который может знать ваш IP-адрес, сможет узнать, указан ли этот конкретный IP-адрес в журналах сайта.
Поэтому с точки зрения безопасности очень полезно рассмотреть эти локальные и веб-атаки сначала по отдельности, а затем в сочетании.
Давайте рассмотрим первый тип злоумышленника — локального злоумышленника.
Предположим, что этот хакер получит контроль над компьютером пользователя после завершения сеанса сетевого общения.
Я имею в виду, что приватный просмотр завершен, пользователь перестал пользоваться браузером и не находится за компьютером.
После этого хакер берет под свой контроль компьютер и пытается выяснить, что произошло раньше.
Таким образом, цель безопасности состоит в том, чтобы не дать злоумышленнику понять, какие веб-сайты посещал пользователь во время частного просмотра.
Важная причина, по которой мы рассматриваем атаку после Интернета, заключается в следующем.
Если предположить, что злоумышленник может контролировать компьютер до приватного просмотра, то игра окончена, поскольку в этом случае злоумышленник может установить клавиатурный регистратор, поставить под угрозу целостность браузера или самой операционной системы.
Поэтому мы не будем обращать внимание на такого злоумышленника.
Обратите внимание, что по этой же причине мы не пытаемся обеспечить конфиденциальность пользователя после того, как злоумышленник взял под контроль его компьютер, поскольку как только злоумышленник получит контроль над компьютером, злоумышленник сможет делать с ним все, что захочет. , хотя бы установив тот же клавиатурный логгер.
Таким образом, в принципе, как только пользователь покидает компьютер, мы не рассматриваем концепцию конфиденциальности напрямую.
Здесь вы можете представить еще одну цель, которую вы хотите достичь — попытаться скрыть от злоумышленника, что пользователь вообще использует режим приватного просмотра.
В лекционной статье говорится, что это очень сложно.
Это свойство часто называют «правдоподобным отрицанием».
Например, ваш начальник подходит к вам после приватного просмотра и спрашивает: «Вы просматривали mylittlepony.comЭ» и ты говоришь: нет, я туда точно не ходил! И я, конечно же, не использовал приватный режим просмотра, чтобы скрыть тот факт, что я просматриваю mylittlepony.com. Итак, как я уже сказал, свойства правдоподобного отрицания достичь трудно, конкретные причины я приведу позже.
Поэтому мы в основном будем рассматривать только локального злоумышленника.
Мы могли бы задаться вопросом, какое постоянное состояние на стороне клиента способствует утечкам информации во время приватного сеанса просмотра? Под постоянным я подразумеваю, что некоторые данные будут храниться на локальном жестком диске, локальном SSD или чем-то подобном.
Итак, какие рабочие состояния системы могут привести к утечке данных, если мы не будем достаточно осторожны при приватном просмотре? Прежде всего, это состояние доступности компонентов JavaScript, таких как файлы cookie и хранилище DOM. Еще одна вещь, о которой люди беспокоятся при приватном просмотре, — это кеш браузера.
Вы не хотите, чтобы кто-то нашел в вашем внутреннем кеше изображения или HTML-файлы с веб-сайтов, которые вы хотите скрыть от других людей.
Еще одна важная вещь — история посещенных вами сайтов.
Вы можете испортить свои отношения с другим человеком, когда он открывает браузер, начинает что-то набирать в адресной строке, а потом останавливается в смущении, потому что ваша история посещений автоматически сообщает ему что-то крайне неприличное.
Это одна из причин, почему вы не хотите, чтобы эта информация утекла за пределы вашего приватного сеанса просмотра.
Вы также можете подумать о просмотре состояний конфигурации и таких вещей, как сертификаты клиентов и закладки страниц.
Возможно, вы посещаете определенный сайт, и ваш браузер предлагает вам сохранить пароли в файле конфигурации для просмотра этого сайта, и вы не хотите, чтобы они утекли.
Пятое — загруженные файлы.
Это интересно, поскольку для загрузки файла требуется явное действие пользователя.
Возможно, вы используете загруженный файл во время частного просмотра при открытии браузера, но также возможно, что вы используете загруженный файл после завершения просмотра за пределами режима частного просмотра.
Об этом мы поговорим чуть позже.
Наконец, в режиме приватного просмотра вы можете установить новые плагины или расширения браузера.
Это еще один тип состояния, о котором вы не хотите раскрывать информацию за пределами частного просмотра.
Таким образом, текущие режимы просмотра обычно пытаются предотвратить утечку данных во время первого, второго и третьего состояний сеанса частного просмотра.
То есть не должно быть возможности утечки файлов cookie или данных DOM. Все, что вы кэшируете во время сеанса приватного просмотра, должно быть удалено.
Вам не следует вести историю посещенных URL-адресов.
Обычно данные из четвертого, пятого и шестого состояний режима приватного просмотра могут просачиваться за пределы сеанса.
Есть полезные и вредные причины, по которым это может произойти.
Позже мы увидим, что если допустить утечку чего-то, это радикально увеличивает поверхность угрозы утечки всей частной информации.
Поэтому сложно предположить, какие именно свойства безопасности предназначены для режима приватного просмотра.
Следующее, о чем мы очень кратко поговорим, — это сетевая активность в режиме приватного просмотра.
Интересно то, что даже если бы мы защищали все 6 из этих состояний, не допуская утечек информации, сам факт отправки сетевых пакетов при подключении является доказательством того, что вы делали.
Представьте, что когда вы хотите посетить foo.com, ваш компьютер должен отправить DNS-запрос для foo.com. Таким образом, даже если вы не оставите следов активности в шести вышеупомянутых состояниях, в локальном кэше DNS все равно останется запись о том, что вы пытались связаться с хостом foo.com. Это очень интересно.
Вы можете подумать, что браузеры могут каким-то образом попытаться очистить кэш DNS после завершения сеанса приватного просмотра, но на практике это сложно сделать, поскольку во многих системах для этого требуются права администратора.
Это противоречие, поскольку вы, вероятно, не хотите, чтобы браузер был рутирован, поскольку мы узнали, что браузеры недостаточно безопасны.
Кроме того, команды очистки кэша DNS адаптированы к конкретной активности пользователя, они не очищают весь кеш, чего вам хотелось бы для режима приватного просмотра.
Вам понадобится хирургическая точность, чтобы избавиться от упоминания о посещении foo.com и других сайтов в режиме приватного просмотра, не затрагивая при этом другие вещи.
На практике справиться с этим довольно сложно.
И еще одна хитрая вещь, о которой упоминается в статье, — это артефакты оперативной памяти, или оперативной памяти.
Основная идея здесь заключается в том, что в режиме приватного просмотра приватному браузеру необходимо что-то хранить в памяти.
Даже если режим приватного просмотра не требует прямой записи данных на диск или чтения данных с диска, браузер работает за счет оперативной памяти.
Например, просматриваемая вами вкладка может остаться в файле подкачки, и эта информация может быть отражена в файле гибернации ноутбука.
Таким образом, если это состояние отражается в постоянном хранилище, то после завершения сеанса приватного просмотра злоумышленник может обнаружить код JavaScrip или HTML в файле подкачки, который был отражен на диске.
У нас будет небольшая демонстрация того, как это может работать.
На экране вы можете увидеть вкладку приватного просмотра, с которой я собираюсь получить доступ к веб-сайту группы программирования PDOS лаборатории информатики нашего института CSAIL.
\
Далее я собираюсь использовать забавную команду под названием gcore, чтобы сохранить в памяти снимок открытой страницы PDOS.
Затем я использую немного магии, чтобы заставить мой терминал сделать снимок памяти, иногда это занимает некоторое время.
Здесь происходит то, что здесь создается основной файл изображения этого частного представления.
Теперь мы заглянем внутрь этого изображения и посмотрим, сможем ли мы найти какое-нибудь упоминание о pdos.
Интересно, что в этом образе памяти для режима приватного просмотра мы видим несколько экземпляров строк pdos с разными префиксами.
Если мы посмотрим дальше, мы увидим такие вещи, как полные URL-адреса и HTML-коды.
Дело в том, что если мы смогли найти все это в памяти страницы, то есть какие-то данные с этой страницы были помещены в файл подкачки на диске, то злоумышленник может легко запустить эти строки.
Он может сделать то же, что я только что сделал с этим файлом подкачки, и попытаться выяснить, какие сайты вы посещали в режиме приватного просмотра.
Ясно? По сути, проблема здесь в том, что режим приватного просмотра не пытается «запутать» ОЗУ или каким-либо образом зашифровать ее.
Это кажется довольно фундаментальной вещью, потому что в какой-то момент процессор должен выполнить задачу на основе данных в виде открытого текста.
Поэтому данное обстоятельство может стать большой проблемой.
У кого-нибудь есть вопросы? Студент: это именно то, чего я не ожидаю от своего браузера, поскольку браузеры должны гарантировать конфиденциальность приватного просмотра.
Например, если вы совершите какие-то покупки, то друг, который сядет за ваш компьютер, не сможет их просмотреть.
Не могли бы вы немного рассказать о том, какие гарантии дают авторы статьи и описывают ли они в статье, что можно изменить в работе браузеров для обеспечения такой конфиденциальности? Профессор: Да.
Это очень интересно.
Есть одна вещь, на которую вы можете обратить внимание — когда вы открываете вкладку приватного просмотра, обычно перед вами появляется текстовое сообщение: «добро пожаловать в режим инкогнито».
Этот режим поможет вам не оставлять следов, если за компьютером работает несколько пользователей, и ваш друг, севший за компьютер после вас, не сможет увидеть вашу историю посещений, файлы cookie и данные о заполнении форм.
Однако режим «инкогнито» не поможет, если за вашей спиной кто-то стоит с резиновой дубинкой и собирается «вырубить» вас, как только вы зайдете на сайт. Поэтому сами производители избегают указания гарантий относительно сохранения конфиденциальности данных при использовании своих браузеров.
Фактически, после инцидента со Сноуденом многие браузеры изменили это всплывающее сообщение, потому что они хотели на самом деле дать понять пользователю, что они не могут защитить его от вмешательства со стороны таких сил, как АНБ или что-то в этом роде.
Короче говоря, какие гарантии они дают? На практике они обеспечивают только ту уязвимость, о которой вы только что упомянули.
То есть тот, кто не может видеть, что вы делаете сейчас, сможет увидеть, что вы делали позже.
Мы предполагаем, что непрофессионал не сможет запускать строки в файле подкачки или делать что-либо подобное.
Однако есть две проблемы.
Одна из проблем заключается в том, что браузеры настолько сложны, что часто даже не защищают от хакеров.
Могу привести личный пример.
Несколько раз, когда я видел на странице забавные рекламные баннеры Huffington Post, типа «посмотрите, как трогательно эти щенки помогают другим щенкам спускаться по лестнице!», я, по своей слабости, иногда ловил это и нажимал на них.
Но поскольку я не хотел, чтобы люди знали о моей слабости, я иногда делал это в режиме приватного просмотра.
Однако случалось, что иногда URL-адреса этих рекламных материалов просачивались в историю URL-адресов в обычном общедоступном режиме браузера, для которого материал не предназначался.
Итак, одна из проблем заключается в том, что иногда эти браузеры не обеспечивают защиту от атак непрофессионалов.
Во-вторых, я думаю, что есть много людей, которые, особенно после истории со Сноуденом, хотели бы более строгой защиты конфиденциальности от режима приватного просмотра.
Им нужна защита от атак с использованием артефактов ОЗУ, даже если они технически не могут сформулировать свое желание.
Итак, одной из вещей, которыми я занимался во время учебы в этом институте, было исследование по усилению безопасности режима приватного просмотра, так что мы можем поговорить об этом.
Вы узнаете, что все профессора могут бесконечно рассказывать о своих исследованиях, поэтому, если вы хотите говорить об этом три часа, просто отправьте мне запрос, и мы это организуем.
Итак, то, что я показал, просто демонстрирует. у вас есть вопросы? Студент: да, насчет оперативной памяти, потому что я не знаком с тем, как она работает. Почему браузер не может в конце сеанса просто попросить ОС очистить те части памяти, которые она использовала? Профессор: мы перейдем к этой теме через пару минут. Но ты абсолютно прав.
в глобальном смысле можно представить, что ОС после завершения процесса просматривает все задействованные страницы и записывает в них нули.
Вы также можете представить, что браузер закрепит все страницы в памяти, чтобы они вообще не очищались.
Есть несколько решений, которые могут это сделать, и я вернусь к вам через секунду.
Итак, это был пример того, как данные из оперативной памяти могут попасть на диск через файл подкачки.
Но учтите, что срок службы данных — более серьезная проблема, чем кажется в контексте приватного просмотра.
Вы можете себе представить, что любая программа, работающая, скажем, с криптографическими ключами или паролями пользователей, столкнется с этой проблемой.
Каждый раз, когда вы вводите пароль для программы, страница памяти, содержащая этот пароль, всегда может быть зеркально отображена на диске.
Позвольте мне показать вам еще один пример.
Давайте рассмотрим довольно простую программу под названием memclear. На экране вы можете видеть, что мы просто прочитаем секретный текстовый файл, а затем навсегда «перейдем в спящий режим».
Так что же делает команда read_secret? Он прочитает файл, распечатает его содержимое, а затем очистит буфер, который использовался для хранения этой секретной информации.
Итак, вернемся к вашей проблеме.
Можно себе представить, что браузер, например, просто попытается использовать команду memset для сброса всех секретов, которые встречаются только в режиме приватного просмотра.
Если мы посмотрим на наш секретный файл, то увидим, что в нем нет ничего интересного, просто написано «мои секреты в файле».
Тогда, если вы запустите программу в фоновом режиме, что она будет делать? Как я уже сказал, он просто распечатает содержимое этого файла.
Как я уже сказал, она только что распечатала это.
Он прочитал этот файл, распечатал содержимое этого «секрета», очистил буфер памяти, используемый для печати, и перешел в спящий режим.
Если мы снова воспользуемся этой забавной командой gcore, мы сможем получить дамп памяти программы memclear, которая работает в памяти прямо сейчас.
Далее найдем нужную нам строку и запустим команду grep для получения нашего секрета.
Итак, если мы посмотрим на образ оперативной памяти этой запущенной программы, то обнаружим вхождения имени прочитанного файла, а также некоторые префиксы содержимого строки этого файла, несмотря на то, что мы стёрли буфер в самой программе.
Можете ли вы сказать, почему это произошло? Это кажется очень и очень странным.
Если подумать о том, как работает ввод/вывод данных, то это похоже на типичные слои.
К тому времени, как содержимое этого файла попадает в программу, оно уже прошло, скажем, через память ядра, через стандартную библиотеку C для ввода/вывода, поскольку эта библиотека выполняет буферизацию и так далее.
В конечном итоге происходит следующее: даже если вы примените memset к видимому буферу приложения, экземпляры секретных данных все равно будут находиться во многих разных местах системы, и эта программа учитывает только пользовательский режим этого приложения.
Так что, вероятно, данные все еще существуют, возможно, в буферах данных ввода-вывода ядра или что-то в этом роде.
Итак, вернемся к вашему вопросу.
Если вы хотите сделать то, что они называют распределением безопасности, вы не можете просто полагаться на механизмы уровня приложения, поскольку в системе могут быть и другие места, где хранятся эти данные.
Что это за места? Например, данные могут находиться в памяти процесса, где есть такие вещи, как куча и стек.
Поэтому, когда мы выполняли memset внутри программы memclear, мы, по сути, пытались решить именно эту проблему.
И мы обнаружили, что это необходимо, но недостаточно, чтобы стереть из памяти все случаи этого секрета.
Так где же еще обитают артефакты оперативной памяти? Они могут находиться во всех типах файлов, резервных копиях, базах данных SQL. Если в какой-то момент приложение возьмет что-то из оперативной памяти и запишет это в одну из этих вещей, злоумышленник, опять же, сможет восстановить это после получения контроля над диском.
Как я уже упоминал, память ядра может быть еще одним распространенным местом хранения артефактов ОЗУ, поскольку, опять же, приложения обычно выполняют многоуровневый ввод-вывод, где каждый фрагмент данных проходит через несколько частей стека.
Подумайте, например, о передаче данных по сети.
Во-первых, данные должны поступить в какой-то сетевой буфер, возможно, внутри ядра.
Затем они, вероятно, пропускаются через буферы стандартной библиотеки C, прежде чем достичь внешнего интерфейса, то есть приложения, написанного разработчиком.
Так что это может быть большой проблемой.
Вы также можете рассматривать освобожденные страницы памяти как источник утечки данных.
Представьте, что ваше приложение выделяет кучу памяти, используя, скажем, функцию malloc или что-то еще.
Затем этот процесс завершается, и ядро запускает другой процесс, предварительно не очистив страницы физической памяти.
Возможно, когда этот новый процесс запустится, он может просто пройти через все эти физические страницы ОЗУ, использовать тонну памяти и просто сделать ту же самую странную вещь — посмотреть, есть ли там что-нибудь интересное.
И тогда злоумышленник, инициировавший этот процесс, сможет получить ваши секреты.
Существует множество способов утечки информации из ядра.
Возможно, вам также захочется подумать о буферах ввода-вывода для таких устройств, как клавиатура и мышь.
Есть просто куча разных факторов, которые могут привести к утечке данных через ядро.
Как злоумышленник может попытаться получить эту информацию? В некоторых случаях это так же просто, как прочитать файл подкачки.
Вы можете прочитать файл гибернации и просто посмотреть, что там.
В некоторые форматы файлов встроены разные версии.
Например, Microsoft Word работает по принципу, согласно которому один файл Word фактически содержит версии старых фрагментов данных.
Итак, если бы у вас был доступ к этому файлу Word, вы могли бы просто использовать разные форматы для просмотра всех предыдущих версий документа.
Как я отметил пару минут назад, распределение безопасности также является проблемой, поскольку оно не может поддерживать полный стек.
Например, в старых версиях ядра Linux при создании каталога, целевого каталога, может произойти утечка до 4 килобайт памяти ядра.
Только Зевс знает, что в этих воспоминаниях.
И это потому, что Linux на самом деле не обнуляет память ядра, которая была выделена, освобождена, а затем снова выделена для чего-то другого.
Итак, как я упоминал ранее, если ядро не обнуляет страницы, предоставляемые процессу пользовательского режима, у вас может возникнуть утечка пользовательских секретов из этих же типов страниц памяти.
С SSD ситуация иная.
Большинство из них обеспечивают ведение журнала.
Другими словами, когда вы записываете на SSD, вы не перезаписываете данные напрямую, а фактически записываете их.
Теги: #информационная безопасность #программирование #ИТ-инфраструктура #Анализ и проектирование систем #Приватный просмотр #Приватный просмотр #Приватный просмотр #Приватный просмотр
-
Удобная Синхронизация Файлов
19 Oct, 24 -
Как Мы Победили Дерево Категорий
19 Oct, 24 -
Как Мы Улучшили Конверсию Платежных Форм
19 Oct, 24 -
Введение В Жесты
19 Oct, 24