Хабрахабр

[Перевод] Курс MIT «Безопасность компьютерных систем». Лекция 18: «Частный просмотр интернета», часть 1

Массачусетский Технологический институт. Курс лекций #6.858. «Безопасность компьютерных систем». Николай Зельдович, Джеймс Микенс. 2014 год

Computer Systems Security — это курс о разработке и внедрении защищенных компьютерных систем. Лекции охватывают модели угроз, атаки, которые ставят под угрозу безопасность, и методы обеспечения безопасности на основе последних научных работ. Темы включают в себя безопасность операционной системы (ОС), возможности, управление потоками информации, языковую безопасность, сетевые протоколы, аппаратную защиту и безопасность в веб-приложениях.

Лекция 1: «Вступление: модели угроз» Часть 1 / Часть 2 / Часть 3
Лекция 2: «Контроль хакерских атак» Часть 1 / Часть 2 / Часть 3
Лекция 3: «Переполнение буфера: эксплойты и защита» Часть 1 / Часть 2 / Часть 3
Лекция 4: «Разделение привилегий» Часть 1 / Часть 2 / Часть 3
Лекция 5: «Откуда берутся ошибки систем безопасности» Часть 1 / Часть 2
Лекция 6: «Возможности» Часть 1 / Часть 2 / Часть 3
Лекция 7: «Песочница Native Client» Часть 1 / Часть 2 / Часть 3
Лекция 8: «Модель сетевой безопасности» Часть 1 / Часть 2 / Часть 3
Лекция 9: «Безопасность Web-приложений» Часть 1 / Часть 2 / Часть 3
Лекция 10: «Символьное выполнение» Часть 1 / Часть 2 / Часть 3
Лекция 11: «Язык программирования Ur/Web» Часть 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, как кукиз и хранилище DOM. Итак, какие рабочие состояния системы чреваты утечками данных, если мы не были достаточно осторожны при приватном просмотре? Ведь вы не хотите, чтобы кто-то нашел во внутреннем кэше какие-то изображения или HTML-файлы с веб-сайтов, посещение которых вы хотите скрыть от других людей. Еще одна вещь, о которой люди беспокоятся при частном просмотре – это кеш браузера.

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

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

Это интересно, потому что для загрузки файла требуется явное действие пользователя. Пятое – это загруженные файлы. Мы поговорим об этом немного позже. Возможно, вы воспользуетесь загруженным файлом во время приватного просмотра при открытии браузера, но также возможно, что вы используете загруженный файл после окончания работы с браузером вне режима приватного просмотра.

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

То есть здесь не должно быть возможности утечки кукиз или данных DOM. Таким образом, текущие режимы просмотра обычно пытаются предотвратить утечку данных во время первого, второго и третьего состояния сеанса приватного просмотра. У вас не должна храниться история посещаемых URL-адресов. Все, что вы помещаете в кэш во время сеанса приватного просмотра, должно быть удалено.

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

Интересно в этом то, что даже если мы предусмотрим защиту всех этих 6 состояний, не позволяя происходить утечкам информации, сам факт того, что вы выдаете сетевые пакеты при соединении, является доказательством того, что вы делали. Следующая вещь, о которой мы поговорим очень кратко, — это сетевая активность во время режима частного просмотра. Так что даже если вы не оставите никаких следов активности шести вышеупомянутых состояний, всё равно в локальном кеше DNS останутся записи, что вы пытались связаться с хостом foo.com. Представьте, что когда вы хотите зайти на сайт foo.com, ваш компьютер должен выдать DNS запрос для foo.com. Вы можете подумать, что браузеры каким-то образом могут попытаться очистить кэш DNS после завершения сеанса приватного просмотра, но на практике это сложно сделать, потому что во многих системах для подобного действия требуются права администратора. Это очень интересно. Кроме того, команды очистки DNS кеша рассчитаны на активность конкретного пользователя, они не очищают весь кеш, чего бы вы хотели для режима приватного просмотра. Здесь возникает противоречие, потому что, скорее всего, вы не захотите, чтобы браузер имел root права, так как мы убедились, что браузеры недостаточно ненадёжны. На практике с этим справиться достаточно сложно.
И еще одна хитрая вещь, о которой упоминает статья — это артефакты оперативной памяти, или RAM. Вам потребуется «хирургическая» точность, чтобы избавиться только от упоминания посещения foo.com и других сайтов в режиме частного просмотра, не затронув при этом других вещей. Даже если режим приватного просмотра не требует непосредственной записи данных на диск или чтения данных с диска, работу браузера обеспечивает оперативная память. Здесь основная идея заключается в том, что в режиме частного просмотра приватный браузер должен что-то хранить в памяти. Таким образом, если это состояние отражается в постоянном хранилище, то после завершения сеанса частного просмотра злоумышленник может найти в файле подкачки код JavaScrip или HTML, которые отразились на диске. Например, просматриваемая вкладка может оставаться в файле подкачки, и эта информация может быть отражена в файле гибернации ноутбука.

На экране вы видите вкладку приватного просмотра, с которой я собираюсь зайти на сайт группы программирования PDOS лаборатории компьютерных наук нашего института CSAIL. У нас будет небольшая демонстрация того, как это может работать.

\

Далее я собираюсь использовать эту забавную команду под названием gcore, чтобы сохранить в памяти снимок этой открытой страницы PDOS.

Далее я использую немного волшебства для того, чтобы мой терминал сделал снимок памяти, иногда это занимает немного времени.

Теперь мы собираемся заглянуть внутрь этого изображения и посмотреть, cможем ли мы найти какие-либо упоминания о pdos. Вот что при этом происходит – здесь генерируется основной файл изображения этого частного просмотра.

Интересно, что мы видим кучу экземпляров строк pdos с различными префиксами в этом изображении памяти для режима приватного просмотра.

Если мы посмотрим дальше, то увидим такие вещи, как полные URL-адреса и HTML-коды.

Он может проделать то, что я только что сделал с файлом этой страницы, и попытаться узнать, какие сайты вы посетили в режиме приватного просмотра. Смысл в том, что если мы смогли найти все это в памяти страницы, то есть какие-то данные этой страницы были помещены в файле подкачки на диск, то и злоумышленник сможет запросто запускать эти строки. Это кажется довольно фундаментальной вещью, потому что в определенный момент процессор должен выполнять задачу на основе открытых текстовых данных. Это понятно?
В принципе, проблема здесь состоит в том, что режим частного просмотра не пытается «запутать» RAM или каким-то образом её зашифровать. У кого-нибудь есть вопросы? Поэтому данное обстоятельство может стать большой проблемой.

Например, если вы делаете какие-то покупки, то знакомый, севший за ваш компьютер, не сможет их просмотреть. Студент: это именно то, чего я не ожидаю от своего браузера, потому что браузеры должны гарантировать конфиденциальность частного просмотра. Не могли бы вы немного рассказать о том, какие гарантии дают авторы статьи и описывают ли они в статье, что можно изменить в работе браузеров для обеспечения такой конфиденциальности?

Существует одна вещь, на которую вы можете обратить внимание — когда вы открываете вкладку частного просмотра, как правило, перед вами появляется текстовое сообщение: «добро пожаловать в режим инкогнито». Профессор: да, это очень интересно. Однако режим «инкогнито» не поможет, если за вашей спиной стоит кто-то с резиновой дубинкой и собирается «вырубить» вас, как только вы зайдёте на сайт. Этот режим поможет вам не оставлять следов, если на компьютере работает несколько пользователей, и ваш друг, севший после вас за компьютер, не сможет ознакомиться с историей ваших просмотров, файлами кукиз и данными заполнения форм.

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

В действительности после инцидента со Сноуденом многие браузеры изменили это всплывающее сообщение, потому что хотели на самом деле дать понять пользователю, что не могут защитить его от вмешательства таких сил, как АНБ или чего-то в этом роде.

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

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

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

Вы узнаете, что все профессора могут бесконечно рассказывать о своих исследованиях, так если вы хотите поговорить об этом в течение трех часов, просто пришлите мне запрос, и мы это организуем. Поэтому одной из вещей, которую я сделал, обучаясь в этом институте, было исследование в области усиления защиты в режиме приватного просмотра, так что мы можем поговорить об этом. Итак, показанное мной всего лишь демонстрирует … у вас есть вопрос?

Почему браузер не может в конце сеанса просто попросить ОС очистить те части памяти, которые он использовал? Студент: да, насчет оперативной памяти, потому что я не знаком с тем, как это работает.

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

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

Рассмотрим довольно простую программу, которая называется memclear. Позвольте мне показать вам еще один пример. Вы видите на экране, что мы просто прочитаем секретный текстовый файл, а затем навсегда «впадём в спячку».

Она прочитает некий файл, распечатает содержимое этого файла, а затем очистит буфер, который использовался для хранения этой секретной информации. Так что же делает команда read_secret?

Можно представить, что браузер, например, будет пытаться просто использовать команду memset для того, чтобы обнулить все секреты, которые встречаются только в режиме приватного просмотра. Итак, вернемся к вашей проблеме. Если мы посмотрим на наш секретный файл, то увидем, что в нём нет ничего интересного, здесь просто написано: «мои секреты в файле».

Как я уже сказал, она просто распечатает содержимое этого файла. Затем, если запустить программу в фоновом режиме, что она сделает?

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

Далее найдём строку, которая нам нужна, и выполним команду grep для нашего секрета.

Вы можете сказать, почему так получилось? Итак, если посмотреть на образ оперативной памяти этой запущенной программы, то мы найдём экземпляры имени файла, который был считан, а также некоторые префиксы содержимого строки этого файла, несмотря на то, что мы стерли буфер в самой программе. Это кажется очень, очень странным.

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

Если вы хотите сделать то, что они называют распределением безопасности, вы не можете просто полагаться на механизмы на уровне приложений, потому что могут быть и другие места в системе, где обитают эти данные. Итак, возвратимся к вашему вопросу. Например, данные могут находиться в памяти процесса, где имеются такие вещи, как куча и стек. Что это за места? И мы выяснили, что это необходимо, но недостаточно, чтобы очистить все экземпляры этого секрета из памяти. Поэтому, когда мы выполнили memset внутри программы memclear, мы в основном пытались решить именно эту проблему. Они могут находиться во всех типах файлов, в резервных копиях, базах данных SQL. Так где же ещё обитают артефакты оперативной памяти?

Если в какой-то момент приложение берет что-то в RAM и записывает его в одну из этих вещей, то повторю еще раз, злоумышленник может быть в состоянии это восстановить после того, как захватит контроль над диском.

Подумайте, например, о передаче данных по сети. Как я упоминал, память ядра может служить ещё одним распространённым местом для хранения артефактов RAM, потому что, опять же, приложения обычно выполняют многоуровневый ввод-вывод, в котором каждый фрагмент данных проходит несколько частей стека. Затем они, вероятно, проходят через буферы стандартной библиотеки языка С и только после этого поступают в пользовательскую часть, то есть в приложение, написанное разработчиком. Во-первых, данные должны поступать в какой-то сетевой буфер, вероятно, внутри ядра. Так что это может стать большой проблемой.

Представьте, что ваше приложение выделяет кучу памяти, используя, скажем, функцию malloc или еще много чего. Вы также можете думать об освобожденных страницах памяти как об источнике утечки данных. Может случиться так, что когда этот новый процесс запустится, он может просто пройти все эти физические страницы оперативной памяти, использовать кучу памяти и просто сделать ту же странную вещь – посмотреть, нет ли там чего-то интересного. Затем этот процесс умирает, и ядро запускает другой процесс, не обнулив перед физические страницы RAM. И тогда злоумышленник, инициировавший данный процесс, сможет получить ваши секреты.

Вы также можете подумать о буферах ввода/вывода таких устройств, как клавиатура и мышь. Существует множество способов утечки информации из ядра. Там просто куча разных факторов, которые могут привести к утечке данных через ядро.

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

Например, в более старых версиях ядра Linux, когда вы создаете каталог, конечную директорию, вы можете просочиться на глубину до 4-х килобайтов памяти ядра. Как я заметил пару минут назад, распределение безопасности также является проблемой, потому что оно не может поддерживать полный стек. И это потому, что Linux на самом деле не обнуляет память ядра, которая была выделена, освобождена, а затем снова выделена для чего-то другого. Только Зевс знает, что имеется в этих воспоминаниях.

Так что, как я уже упоминал ранее — если ядро не обнуляет страницы, которые предоставляются процессу в режиме пользователя, у вас может происходить утечка секретов пользователя с этих же типов страниц памяти.

Большинство из них обеспечивает ведение журнала. По-другому обстоит дело с SSD. И когда часть данных становится недействительной, затребовать их становится невозможно. Другими словами, когда вы отправляете запись на SSD, вы не перезаписываете данные напрямую, а на самом деле записываете их в журнал.

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

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

Так или иначе, с этими артефактами ОЗУ существует много проблем, связанных с тем, что данные каким-то образом «застревают» на постоянном хранении и позже могут стать доступными для злоумышленника.

Мы уже обсудили одно решение, которое заключается в том, чтобы обнулить память после того, как вы завершили процесс. Итак, как же мы можем исправить эти проблемы со временем жизни данных? Поэтому всякий раз, когда вы что-то освобождаете, вы просто записываете кучу нулей или какие-то случайные вещи, чтобы по существу скрыть старые данные от кого-то, кто может прийти после вас.

27:05 мин

Лекция 18: «Частный просмотр интернета», часть 2 Курс MIT «Безопасность компьютерных систем».

Полная версия курса доступна здесь.

Вам нравятся наши статьи? Спасибо, что остаётесь с нами. Поддержите нас оформив заказ или порекомендовав знакомым, 30% скидка для пользователей Хабра на уникальный аналог entry-level серверов, который был придуман нами для Вас: Вся правда о VPS (KVM) E5-2650 v4 (6 Cores) 10GB DDR4 240GB SSD 1Gbps от $20 или как правильно делить сервер? Хотите видеть больше интересных материалов? (доступны варианты с RAID1 и RAID10, до 24 ядер и до 40GB DDR4).

VPS (KVM) E5-2650 v4 (6 Cores) 10GB DDR4 240GB SSD 1Gbps до декабря бесплатно при оплате на срок от полугода, заказать можно тут.

класса c применением серверов Dell R730xd Е5-2650 v4 стоимостью 9000 евро за копейки? Dell R730xd в 2 раза дешевле? Только у нас 2 х Intel Dodeca-Core Xeon E5-2650v4 128GB DDR4 6x480GB SSD 1Gbps 100 ТВ от $249 в Нидерландах и США! Читайте о том Как построить инфраструктуру корп.

Теги
Показать больше

Похожие статьи

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Кнопка «Наверх»
Закрыть