Песочница по технологии 3 класс фото: Как сделать из бумаги качалку и песочницу своими руками для детей?

Автор

Содержание

Презентация «Мастер-класс «Песочница»»

Материал опубликовал

Пояснительная записка к презентации

«Мастер-класс  «Песочница»»

(в рамках курса внеурочной деятельности «Художественная обработка древесины»)

Выполнил: Мошев Николай Юрьевич,

учитель технологии

МБОУ «Карагайская СОШ №2»

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

Цель: изготовление песочницы

Задачи:

Начертить технический рисунок;

Прописать размеры изделия;

Напилить доски по размеру;

Остругать и отшлифовать заготовки;

Собрать модули песочницы;

Соединить модули в готовое изделие;

Покрасить готовое изделие.

Этапы работы:

Этап работы

Решение задач

Время

Подготовительный

Начертить технический рисунок;

Прописать размеры изделия;

Напилить доски по размеру;

Остругать и отшлифовать заготовки

2 часа

Основной

Собрать модули песочницы;

Соединить модули в готовое изделие;

3 часа

Заключительный

Покрасить готовое изделие.

1 час

Описание презентации: В презентации подробно показан основной этап создания скамейки. Фотографии и работа автора статьи.

Презентация


Презентация «Мастер-класс «Песочница»»
PPTX / 2.92 Мб

Опубликовано в группе «МАСТЕР-КЛАСС»


«Построить песочницу с бронированным зонтиком»

На прошлой неделе на острове Русском завершился первый образовательный интенсив Университета национальной технологической инициативы «20.35», призванный подготовить кадры для цифровой экономики. “Ъ” поговорил с идеологом мероприятия, недавно назначенным спецпредставителем президента по вопросам цифрового развития Дмитрием Песковым о том, как будет протекать цифровизация экономики и госуправления, как регулировать платформы, бороться с кадровым голодом и сколько чиновников придется «оцифровать».

— Как вы оцениваете перспективы цифровизации российской экономики?

— Базовая модель, которую я вижу,— это модель трех волн. Первая волна, самая быстрая,— то, что уже есть сегодня. Там, где нет зависимости от материальных объектов — банки, госуслуги,— достаточно поменять алгоритм, чтобы работало лучше. Во вторую волну (это горизонт 4–10 лет) к алгоритму добавляются отношения между людьми. Там мы увидим цифровизацию таких крупных отраслей, как образование и здравоохранение. Третья волна — это когда в это уравнение добавляются материальные объекты — промышленность, строительство, это горизонт 10–20 лет. Эта базовая модель достаточно хорошо описывает цифровизацию во всем мире. На каждом этапе есть свои ограничения, например, нельзя взять и полностью перейти на цифровую промышленность, нужна последовательность. Сначала вы учитесь вешать на ваши старые станки новые модные датчики и пытаетесь снимать с них дополнительную информацию, чтобы станки работали лучше. Это дает относительно небольшой эффект.

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

— Это то, что мы видим сейчас?

— Да. Если мы посмотрим на состав учредителей АНО «Цифровая экономика», это те самые крупные игроки, но в процессе цифровизации своих отраслей они собирают компетенции, критично важные для второй волны. Часть сквозных технологий — большие данные, цифровые двойники, искусственный интеллект — одинаково применимы и во второй, и в третьей волне. Я ожидаю, что, когда лидеры цифровой трансформации первой волны исчерпают маржу в своем направлении, они пойдут во вторую и третью и нас ждет радикальное изменение бизнес-ландшафта в горизонте 5–10–15 лет. Те, у кого есть цифровые компетенции, будут пытаться сдвинуть тех, кто отстал.

— Монополизировать поле?

— Сейчас вместо «монополизации» модно использовать слово «платформа». Платформы бывают открытыми и закрытыми, и, конечно, мечта любого монополиста — это контролируемая закрытая платформа. Задача государства — балансировать этот процесс, потому что за счет платформы можно управлять ценой и отжимать конкурентов. Жители Москвы это очень хорошо почувствовали на примере такси, когда Uber и «Яндекс» объединились. И здесь принципиально важна роль ФАС, чтобы она научилась работать с платформенным регулированием, но скальпелем, а не топором.

— Ведомство господина Артемьева в нынешнем виде готово этим заниматься?

— Я знаю, что у команды ФАС есть такое желание.

— А компетенции?

— Компетенций сегодня нет ни у кого, их и в мире нет. Попытки регулировать это грубо приводят к радикальному дисбалансу, как, например, происходит с регулированием цен на авиабилеты. Есть прекрасная фраза: любая сложная проблема имеет простое, привлекательное, но неправильное решение. Компетенции вырабатываются в бою, нам предстоит научиться, как обеспечивать соблюдение прав граждан, не останавливая экономический рост. Потому что, если ты не сделаешь эту платформу, придет глобальная платформа и сделает тебя. Мир абсолютно жесток, и здесь нет места наивности. В таких ситуациях принципиально важно появление институтов медиации, где разного типа игроки могут эти инструменты балансировать. АНО «Цифровая экономика» — это как раз пример института, который создается для такого рода диалога. Компетенции, которые накапливает команда в первой волне, переходят во вторую.

И здесь мы увидим оцифровку образования и медицины — двух отраслей, которые сегодня являются одними из самых неинновационных, где есть огромное количество жалоб граждан, избыточное госрегулирование, которые отстали на 10–15–20–30–50 лет. Здесь есть огромная сложность — соблазн выстроить единое централизованное управление. В определенных условиях оно оправданно: без централизованного управления в медицине вам очень тяжело реагировать, например, на вызовы потенциальных эпидемий. Но с точки зрения новых сложных форм — новых типов лекарственных препаратов, использования больших данных — централизованность системы тормозит развитие.

— В этих отраслях возможно создание таких же институтов медиации?

— В этом есть огромная потребность. В стране выросло несколько десятков очень интересных стартапов, готовых оказывать эти услуги в медицине, крупные игроки готовы это делать. И у нас уже есть такие инструменты: в рамках Национальной технологической инициативы в этой логике созданы две рабочие группы — HealthNet и NeuroNet.

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

— А в госуправлении?

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

— А пресловутые регуляторные песочницы?

— Это очень правильная идея. Законопроект о специальных административных районах, который осенью будет проходить Госдуму,— шаг в нужном направлении, но это эксперимент, и будет он результативным или нет, мы пока не можем оценить. Предыдущие законы о территориях опережающего развития, об инновационном центре «Сколково», создававшиеся ровно в такой логике, показали, что недостаточно построить песочницу, надо построить песочницу с бронированным зонтиком, чтобы было приятно экспериментировать. Это очень сложно, потому что система законов — большая сложная конструкция, из которой нельзя просто изъять кусочек. Но логика островов, таких «внутренних Гонконгов», очень правильная. Выбор Октябрьского и Русского мне кажется очень перспективным.

— В базовой модели, о которой вы говорили, трансформация отраслей займет 10–20 лет. Но майский указ предполагает, что в каком-то виде она должна произойти уже к 2024 году. Эти сроки реальны?

— Какая-то и произойдет. Цикл обновления материальной базы и цикл обновления кадров делают ее неизбежной вне зависимости от усилий государства. В какой-то момент детали старых станков заканчиваются даже на онлайн-аукционах, и, когда вы не можете купить последний процессор на «Амазоне» или Avito, вы вынуждены делать новый. Это тоже не российская, а глобальная история, вопрос совместимости систем. Вы не можете сделать новую цифровую систему и поставить в нее старую аналоговую: у них интерфейсы разные. Этот процесс абсолютно неизбежен. Но за последние два года кардинально изменилось самое главное — мировоззрение и мышление руководителей промышленных компаний, весь «крупняк» пошел в цифру. Пошел в цифру, значит, начал инвестировать в отраслевые стратегии, переподготовку топ-менеджмента, без этого ничего не получится сделать. Но пока мы не наблюдаем сопутствующей перестройки оргструктуры. Для меня оценка этого движения очень проста: когда цифровая трансформация сопровождается аналогичной организационной, дело идет. Если речь о «цифровой лакировке» старых организационных форм, вероятность успеха существенно ниже.

— В недавнем докладе Всемирного банка говорилось, что главным драйвером цифровизации в РФ выступает государство, а не бизнес, что тормозит процесс. Должно ли государство как-то его подталкивать?

— В идеальной сферической либеральной модели экономики — нет, в нашей с вами реальности — конечно, да. Вопрос, как это делать: запретами либо стимулами. Поэтому в майском указе есть несколько направлений, связанных с ростом производительности труда, Минэкономики предлагает делать это в том числе за счет цифровизации частных компаний. Это классический такой хороший вкусный тульский цифровой пряник. Есть прекрасная программа, которую делают Сбербанк и Google вместе с региональными властями для повышения эффективности малого бизнеса, «Росатом» воспитывает собственную систему поставщиков, таких участников будет с каждым годом больше. Мы видим инвестиции бизнеса, например, в переподготовку кадров в рамках системы WorldSkills сегодня. Когда бизнес понял, что больше не может расти, потому что нет людей, он вынужден вкладываться. Задача государства — создать ему направление, в которое он может вкладываться, чтобы он чувствовал себя безопасно и был бы уверен, что деньги будут работать на его бизнес-результат. Практики пока недостаточно, но в сравнении с тем, что было 5–10 лет назад, у нас стремительный рост, хотя и с очень низкой базы.

— Как решить проблему глобального кадрового голода?

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

— Завозить индийских программистов?

— Я не вижу разницы — в хорошем смысле слова — между специалистом по клинингу из Таджикистана и специалистом по кодингу из Индии. Двигаться всеми четырьмя путями, параллельно смягчая госрегулирование образования, уплотнять подготовку: учиться готовить не за годы, а за месяцы.

— Не проще ли отдать подготовку кадров бизнесу?

— Логика простая: базовая госсистема модернизируется, но недостаточно быстро, бизнес вместе с самим государством и обществом этим категорически недоволен и, где возможно, инвестирует в создание дополнительной параллельной системы. Сейчас они учатся работать вместе, например, в рамках систем JuniorSkills, WorldSkills, «Кванториум», «Сириус». Пять лет назад этих форм не существовало, а сегодня через них проходят десятки, сотни тысяч молодых ребят и девушек в рамках школьного образования. Мы видим очень серьезный провал на уровне базового университетского образования, новых форм возникло за последние годы очень мало. Если говорить о цифровой экономике, то единственные примеры — это «Иннополис» и «Сколтех». Третий мы сейчас запускаем в рамках университета-2035. Но три таких проекта на огромную страну — категорически недостаточно. Дальше возникает огромный важный сегмент: обучение людей после пятидесяти, что мы сейчас обсуждаем. В будущем я допускаю даже, что право на высшее образование после школы будет дополнено правом на второе бесплатное высшее образование после пятидесяти.

— Кто заплатит за это бесплатное образование?

— В перспективе базовые сервисы предоставляет государство, и здесь есть огромная перспектива снижения стоимости за счет использования цифровых форм. Сделать базовое онлайн-образование для нескольких миллионов человек на национальном уровне не стоит практически ничего. Его эффективность зависит исключительно от одного фактора — мотивации самого человека. Дополнительные сервисы могут работать на механизмах софинансирования «государство—человек», «человек—бизнес» и «государство—человек—бизнес». В отличие от современных 16-летних молодых людей, выросших на компьютерных играх, мозг которых привык к быстрому дофаминовому вознаграждению, человек за пятьдесят понимает, зачем ему это надо, способен удерживать внимание и учиться, потому что он так жил. Сегодня у взрослого человека с достаточной мотивацией есть уникальный шанс получить востребованную профессию в цифровой экономике. Любой человек, готовый потратить на это полгода жизни, у которого есть базовые навыки английского языка и школьный курс математики, может получить специальность Data Scientist на онлайн-платформе и работать в этой сфере.

— Работодатели готовы брать таких специалистов?

— А где им еще их взять? Нет, пожалуйста, можно обратиться в местный университет, создать программу и через несколько лет получить выпуск. В России это займет 8–12 лет в зависимости от сложности кейса. Я не знаю ни одного работодателя в мире, который готов ждать 12 лет, прежде чем получить нужный продукт. Даже четыре года не готов.

— На смену «долгим деньгам» приходят «долгие люди»?

— Да, вы правы. Поэтому в мире множество компаний пытается нащупать экономический механизм истории про человека как объект инвестиций. Это один из самых сложных этических кейсов цифровой экономики. Можно работать со специалистом, как работают сейчас с футболистом: проинвестировать и получить возврат на инвестицию, посчитать ROI. Нужно обсуждать, искать оптимальные модели — мне кажется, что с точки зрения человеколюбия это лучше, чем прямой образовательный кредит. Гораздо проще разделить с инвестором риски, чем войти в жесткую форму финансовой зависимости.

— В программе «Острова» есть отдельный обучающий трек для чиновников, будущих CDO. Сколько таких специалистов нужно для цифровизации госуправления?

— Новый министр (глава Минцифры Константин Носков.“Ъ”) назвал цифру 1 млн. Она показывает масштаб проблемы. Но нам нужен не просто человек, а команда. Каждому Chief Officer нужен просто Officer, а тому — еще и руки. Минимальная команда — это Data Scientist плюс человек, который занимается менеджментом, плюс непосредственно CDO. Нам предстоит переучить всех ключевых чиновников на федеральном уровне до уровня начальников отделов и заместителей директоров департаментов, до такой же глубины переучить все региональные команды, а дальше сделать то же в системах управления здравоохранением, ЖКХ, транспортом, медициной. А есть еще одно направление, которое мы, честно скажем, упускали в последнее время: речь шла только про исполнительную власть, а у нас есть еще законодательная и судебная, это несколько десятков тысяч депутатов и судей, если считать с муниципального уровня. Это грандиозная задача, которая еще даже не осознана в достаточной степени. Очевидно, что эти программы будут развернуты в крупнейших центрах переподготовки, начиная с РАНХиГС, думаю, что в стороне не останутся ведущие университеты и крупные частные проекты — Сбербанк, школа управления «Сколково». Наша задача здесь и сейчас — задать планку качества.

— Ключевая компетенция для «цифрового» чиновника — это работа с данными?

— Есть два варианта расшифровки аббревиатуры CDO. Можно назвать его Chief Digital Officer, но здесь есть опасность: «диджитал» можно профанировать, как профанировали слово «инновация». A Data Officer — это про другое. Ты либо умеешь выполнить конкретную прикладную задачу, либо нет. И мы осознанно решили, что нам важнее постановка компетенции работы с данными. Это жестко отсекает попутчиков и тусовщиков от тех, кто учится работать реальными инструментами. Это очищение профессионального сообщества.

— Будут ли эти компетенции учитываться в системе оценки работы чиновников?

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

— Учитывая ваше скептическое отношение к блокчейну, как вы оцениваете нынешние блокчейн-эксперименты Росреестра, правительства Москвы?

— Я очень хорошо отношусь к распределенным реестрам, это будущее, одна из сквозных технологий. Блокчейн — один из подклассов распределенных реестров, и не самый лучший. У технологии есть ряд ограничений, часть из них критична для использования в госуправлении, в частности вопрос внесения изменений. С одной стороны, это считается главным достоинством блокчейна, с другой — это же главный его недостаток. Представьте себе, что та же запись Росреестра сделана неправильно — вы не можете ее скорректировать даже по судебному решению. Непонятно, как изменять эти информационные системы достаточно быстро, чтобы реагировать на новые вызовы, синхронизировать с другими. На нынешнем уровне блокчейн-разработок можно строить изолированные системы для фриков или реализовывать какую-то очень узкую функцию. Насколько я понимаю, коллеги в Росреестре и правительстве Москвы ищут именно эту минимальную функцию. А когда нужно регулировать отношения между документами и между людьми — все резко проваливается. Никто не знает, как работать с системами блокчейна первого поколения, проблема legacy в блокчейн-технологиях не решена. Это как обмен электронной почтой в середине 1970-х годов. Какие-то классы будут отмирать, какие-то перейдут в условно новый интернет с другой топологией, с другими принципами. В этом эволюционном процессе может участвовать бизнес, рискующий собственными деньгами, но нельзя бездумно переводить на него госсервисы и функции, где могут пострадать права гражданина. Здесь торопиться не надо.

— Но пробовать надо?

— Надо. В регуляторных песочницах с бронированными зонтиками.

Интервью подготовила Надежда Краснушкина

Security Week 45: побег из песочницы, обход EMET через WoW64, взлом 000webhost

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

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

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

Законодатели и безопасность, криптография и разведка — чем запомнилась прошедшая неделя: https://t.co/2J0cWUICEy pic.twitter.com/HGqSNxNfYw

— Kaspersky Lab (@Kaspersky_ru) November 2, 2015

Это не то чтобы великое открытие, но явный намек: неплохо было бы соблюдать баланс. Отрадно, что на этой неделе все самые популярные новости — как раз из практической сферы. Никакой политики, никаких угроз, потенциально эксплуатируемых лет через пятнадцать. Все здесь и сейчас, как мы любим. Да здравствует умеренный хардкор. Уи-и-и-и!

Предыдущие серии живут здесь.

В Xen закрыта опасная уязвимость, позволяющая осуществить sandbox escape

Новость. Security Advisory. Advisory разработчиков системы QubesOS.

Что нашли: уязвимость в гипервизоре Xen начиная с версии 3.4.0, позволяющую при ряде условий получать полный контроль над системой из виртуальной машины, совершив то, что называется «побег из песочницы». Очевидцы событий трактуют инцидент по-разному. Сдержанный бюллетень Xen гласит: «Код, используемый для валидации данных таблиц второго уровня, можно обойти, если удовлетворены определенные условия».

Разработчики QubesOS, операционной системы с упором на безопасность, выражаются проще: «Пожалуй, худшая [уязвимость] из всех, что мы наблюдали в гипервизоре Xen. К сожалению».

Реакция разработчиков Xen:

Реакция разработчиков QubesOS:

Их можно понять — QubesOS использует виртуализацию, чтобы максимально изолировать друг от друга задачи: работу от развлечений, банкинг от порносайтов с картинками и так далее. Любая уязвимость класса sandbox escape накрывает медным тазом всю их тщательно настроенную защиту, отсюда и фрустрация. И не только у них: кодовую базу Xen активно используют тот же Amazon и еще тысячи компаний по всему миру. В частности, зарепортил эту уязвимость эксперт из китайской Alibaba. Про Amazon рекомендую почитать эту статью, довольно подробно описывающую процесс митигации.

Но в целом и так понятно: нужно оценить масштаб проблемы, накатить патч, причем сделать это быстро, но при этом ничего не сломав у клиентов (в идеале даже не перезагружая их VM). Непростая задача.

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

Xen Project закрыл брешь, которая позволяла выйти за пределы виртуалки и исполнить произвольный код на хост-машине: https://t.co/Hm02q4aHkY

— Kaspersky Lab (@Kaspersky_ru) August 3, 2015

Чаще, чем хотелось бы. Представитель QubesOS вообще пишет, что в процессе разработки Xen не очень заметно, чтобы безопасность была в приоритете. Предыдущую уязвимость (тоже sandbox escape, но с более жесткими ограничениями по эксплуатации) нашли в конце июля.

Подсистема WoW64 может быть использована для обхода EMET в Windows

Новость. Исследование компании Duo Security.

Enhanced Mitigation Experience Toolkit — это набор технологий Microsoft, направленный на повышение защищенности приложений. Иными словами, он позволяет применить методы, усложняющие жизнь взломщиков, такие как ASLR и DEP, к программам даже в том случае, если разработчики сами не позаботились о внедрении этих полезных технологий самостоятельно. Такое «удобство» приводит и к очевидному недостатку: если систему EMET обойти, то это приведет к снижению уровня защиты не какого-то конкретного приложения, а сразу целого набора.

То, что нашли исследователи компании Duo Security, — это даже не уязвимость в смысле эксплуатируемой дыры в EMET. Это скорее «утечка на стыке» — EMET оказалась менее эффективна в 64-битной ОС, если вы работаете с программой, написанной для 32-битной версии. Что происходит часто, если не сказать почти всегда: например, большинство браузеров представляют собой 32-битный процесс в 64-битном окружении. В качестве пруфа приложу картинку со своего компьютера (а как память-то кушает!).

Для корректной работы такой конструкции в Windows 64-bit есть подсистема WoW64 (не «вау», а Windows on Windows). Успех работы EMET зависит от того, насколько хорошо технологии защиты контролируют чужой код, а в случае с применением WoW64 получается, что они этот код контролируют плохо. В качестве примера исследователи приводят эксплойт типа use-after-free-уязвимости в Adobe Flash, обнаруженной в январе этого года.

EMET предназначен для борьбы именно с такими трюками с памятью (если уж разработчик не смог), но небольшая модификация эксплойта специалистами позволила полностью обойти систему защиты Windows из-за сложностей взаимодействия EMET и WoW64.

От версии к версии MS EMET растёт не столько защита, сколько длина кода для успешной атаки https://t.co/GVuVdUL0Q8

— Евгений Касперский (@e_kaspersky_ru) October 4, 2014

Никому нельзя доверять. К счастью, это пока только исследование, но вывод из него понятен: Microsoft большие молодцы с системой EMET, но полностью полагаться на нее нельзя. Если уязвимость все же обнаружена и эксплуатируется, то нужно иметь возможность заблокировать ее несколькими способами, и чем больше их будет, тем лучше. В идеале эксплойту нужно вообще не дать загрузиться на уязвимую ОС или запуститься в уязвимом приложении, пристрелив его на дальнем рубеже, по черному списку сомнительных URL. История с Xen, хоть и совершенно из другой оперы, говорит о том же: безопасности должно быть много и по возможности везде.

Вишенка на тортике: некоторые исследования избавляют меня от проблемы поиска смешных картинок. Duo Security предлагает такую:

Взлом хостера 000webhost привел к утечке паролей 13,5 миллиона пользователей

Новость. FAQ хостера. Оригинальный пост о взломе в Facebook (100 лайков). Пост эксперта Троя Ханта с деталями.

Теоретически история с уязвимостью с Xen может использоваться для взлома хостингового провайдера: есть виртуалки, есть уязвимость, есть эксплойт, есть выход на приватную информацию, например на базу клиентов. Взлом литовского хостера 000webhost показывает, что такая сложная тактика, в общем-то, и не нужна (даже если возможна), когда есть гораздо более простые и надежные методы. В данном случае сломали устаревшую версию PHP на сайте компании, через это получили доступ к данным клиентов, включая пароли. Трой Хант, владелец сервиса «Have I been pwned?», утверждает, что пароли пользователей хранились у хостера открытым текстом.

Кто-то устроил взлом литовского хостинг-провайдера 000webhost, в результате чего оказались раскрыты 13 млн. паролей: https://t.co/qXlnK9yGZK

— Kaspersky Lab (@Kaspersky_ru) November 2, 2015

Ну вот и какой смысл использовать сложные методы атаки и исследовать уязвимость шифров, когда в реальности наши данные утекают вот так? Впрочем, среагировали на инцидент в 000webhost корректно: выложили всю необходимую информацию, сбросили пароли, временно закрыли доступ к некоторым сервисам (и не забыли сообщить, когда доступ был вновь открыт). Большими буквами, болдом, курсивом и с подчеркиванием в FAQ по инциденту написано следующее:

Ну ладно, признаю, курсива не было. Но мысль правильная: не надо использовать скомпрометированные пароли где-либо еще. Я бы добавил, что пароли вообще, по-хорошему, должны быть уникальными. В светлом будущем нашего более защищенного кибермира будет именно так.

Что еще произошло:

Новости социнжиниринга: мобильный зловред прикидывается документом Word с хорошо знакомой и понятной всем иконкой. Крадет персональные данные, рассылает платные SMS, звонит на платные номера телефонов.

Android-зловред выдает себя за документ Word и при активации нагло крадет со смартфона личные данные: https://t.co/8of4X3op3l

— Kaspersky Lab (@Kaspersky_ru) November 3, 2015

Вышел патч уязвимости Stagefright 2.0, первыми его получат владельцы смартфонов Nexus и те, кто регулярно синхронизирует кодовую базу с Android Open Source Project. Остальным, как водится, придется подождать, от одного месяца до никогда.

Древности:

Семейство «Flip»

При запуске зараженного файла поражают MBR винчестера (уменьшают размер логического диска и в освободившееся пространство записывают старый MBR-сектор и свое продолжение). Файлы (COM и EXE) стандартно инфицируются при запуске. В файлах «Flip» является вирусом-«призраком»: зашифрован, а расшифровщик не имеет постоянного участка (сигнатуры) длиннее, чем 2 байта.

Второго числа в 16.00 «переворачивают» экран: меняют (верх-низ, право-лево) расположение символов на экране и переворачивают их изображение («Р» — «Ь»).

«Flip-2327» заменяет в файлах набор команд:

MOV DX,Data_1

MOV Data_2,DX

MOV DX,Data_3

MOV Data_4,DX

(такое сочетание команд встречается в файле COMMAND.COM в подпрограмме, отвечающей за вывод на экран результатов работы функций DOS FindFirst и FindNext) — на вызов INT 9Fh. Вирус содержит обработчик int 9Fh и «уменьшает» длину файлов. Файлы, измененные таким способом, следует восстановить из резервных копий программного обеспечения.

Содержат текст «OMICRON by PsychoBlast». Перехватывают int 10h, 1Ch, 21h, 9Fh.


Цитата по книге «Компьютерные вирусы в MS-DOS» Евгения Касперского. 1992 год. Страницы 103, 104.

Disclaimer: Данная колонка отражает лишь частное мнение ее автора. Оно может совпадать с позицией компании «Лаборатория Касперского», а может и не совпадать. Тут уж как повезет.

Зачем и как хранить объекты на примере MinIO / Хабр

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

Зачем вообще говорить о хранении объектов?

С недавних пор я работаю Golang-разработчиком в Ozon. У нас в компании есть крутая команда админов и релиз-инженеров, которая построила инфраструктуру и CI вокруг неё. Благодаря этому я даже не задумываюсь о том, какие инструменты использовать для хранения файлов и как это всё поддерживать.  

Но до прихода в Ozon я сталкивался с довольно интересными кейсами, когда хранение разных данных (документов, изображений) было организовано не самым изящным образом. Мне попадались SFTP, Google Drive и даже монтирование PVC в контейнер! 

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

TL;DR

Объектное хранилище – это дополнительный слой абстракции над файловой системой и хостом, который позволяет работать с файлами (получать доступ, хранить) через API.

Объектное хранилище может помочь вам в кейсах, когда необходимо хранить файлы пользователей в ваших приложениях, складывать статику и предоставлять доступ к ней через Ingress или хранить кеши вашего CI

Все материалы к статье (исходники, конфиги, скрипты) лежат вот в этой репе

Что такое объектное хранилище

Хранить данные нашего приложения можно различными способами, от хранения данных просто на диске до блоба в нашей БД (если она это поддерживает, конечно). Но будет такое решение оптимальным? Часто есть нефункциональные требования, которые нам хотелось бы реализовать: масштабируемость, простота поддержки, гибкость. Тут уже хранением файлов в БД или на диске не обойтись. В этих случаях, например, масштабирование программных систем, в которых хранение данных построено на работе с файловой системой хоста, оказывается довольно проблематичной историей.

И на помощь приходят те самые объектные хранилища, о которых сегодня и пойдёт речь. Объектное хранилище – это способ хранить данные и гибко получать к ним доступ как к объектам (файлам). В данном контексте объект – это файл и набор метаданных о нём. 

Стоит ещё упомянуть, что в объектных хранилищах нет такого понятия, как структура каталогов. Все объекты находятся в одном «каталоге» – bucket. Структурирование данных предлагается делать на уровне приложения. Но никто не мешает назвать объект, например, так: objectScope/firstObject.dat .

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

В этой статье мы не будем сравнивать типы объектных хранилищ, а обратим наше внимание на класс S3-совместимых стораджей, на примере MinIO. Выбор обусловлен тем, что MinIO имеет низкий порог входа (привет, Ceph), а ещё оно Kubernetes Native, что бы это ни значило

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

Вообще S3-совместимых решений на рынке много. Всегда есть, из чего выбрать, будь то облачные сервисы или self-hosted-решения.  В общем случае мы всегда можем перенести наше приложение с одной платформы на другую (да, у некоторых провайдеров есть определённого рода vendor lock-in, но это уже детали конкретных реализаций).

Disclaimer: под S3 я буду иметь в виду технологию (S3-совместимые объектные хранилища), а не конкретный коммерческий продукт. Цель статьи – показать на примерах, как можно использовать такие решения в своих приложениях. 

Кейс 1: прокат самокатов

В рамках формата статьи-воркшопа знакомиться с S3 в общем и с MinIO в частности мы будем на практике. 

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

Давайте перейдём к кейсу. Представим, что мы пишем сервис для проката самокатов и у нас есть user story, когда клиент фотографирует самокат до и после аренды. Хранить медиаматериалы мы будем в объектном хранилище.

Для начала развернём наше хранилище.

Самый быстрый способ развернуть MinIO – это наш любимчик Docker, само собой.

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

Запускать «голый» контейнер из терминала – нынче моветон, поэтому начнём сразу с манифеста для docker-compose.

# docker-compose.yaml
version: '3.7'

services:
 minio:
   image: minio/minio:latest
   command: server --console-address ":9001" /data/
   ports:
     - "9000:9000"
     - "9001:9001"
   environment:
     MINIO_ROOT_USER: ozontech
     MINIO_ROOT_PASSWORD: minio123
   volumes:
     - minio-storage:/data
   healthcheck:
     test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"]
     interval: 30s
     timeout: 20s
     retries: 3
volumes:
 minio-storage:

Сохраняем манифест и делаем $ docker-compose up в директории с манифестом.

Теперь мы можем управлять нашим хранилищем с помощью web-ui. Но это не самый удобный способ для автоматизации процессов (например, для создания пайплайнов в CI/CD), поэтому сверху ещё поставим CLI-утилиту:

$ go get github. com/minio/mc

И да, не забываем про export PATH=$PATH:$(go env GOPATH)/bin.

Cоздадим алиас в mc (залогинимся):

$ mc alias set minio http://localhost:9000 ozontech minio123

Теперь создадим bucket – раздел, в котором мы будем хранить данные нашего пользователя (не стоит ассоциировать его с папкой). Это скорее раздел, внутри которого мы будем хранить данные.

Назовем наш бакет “usersPhotos”:

$ mc mb minio/usersPhot


$ mc ls minio > [0B] usersPhotos

Теперь можно приступать к реализации на бэке. Писать будем на Golang. MinIO любезно нам предоставляет пакетик для работы со своим API. 

Disclaimer: код ниже – лишь пример работы с объектным хранилищем; не стоит его рассматривать как набор best practices для использования в боевых проектах.

Начнём с подключения к хранилищу:

func (m *MinioProvider) Connect() error {
  var err error
  m. client, err = minio.New(m.url, &minio.Options{
     Creds:  credentials.NewStaticV4(m.user, m.password, ""),
     Secure: m.ssl,
  })
  if err != nil {
     log.Fatalln(err)
  }

  return err
}

Теперь опишем ручку добавления медиа:

func (s *Server) uploadPhoto(w http.ResponseWriter, r *http.Request) {
  // Убеждаемся, что к нам в ручку идут нужным методом
  if r.Method != "POST" {
     w.WriteHeader(http.StatusMethodNotAllowed)
     return
  }

  // Получаем ID сессии аренды, чтобы знать, в каком контексте это фото
  rentID, err := strconv.Atoi(r.Header.Get(HEADER_RENT_ID))
  if err != nil {
     logrus.Errorf("Can`t get rent id: %v\n", err)
     http.Error(w, "Wrong request!", http.StatusBadRequest)
     return
  }

  // Забираем фото из тела запроса
  src, hdr, err := r.FormFile("photo")
  if err != nil {
     http.Error(w, "Wrong request!", http.StatusBadRequest)
     return
  }

  // Получаем информацию о сессии аренды
  session, err := s.database.GetRentStatus(rentID)
  if err != nil {
     logrus. Errorf("Can`t get session: %v\n", err)
     http.Error(w, "Can`t upload photo!", http.StatusInternalServerError)
     return
  }

  // Складываем данные в объект, который является своего рода контрактом
  // между хранилищем изображений и нашей бизнес-логикой
  object := models.ImageUnit{
     Payload:     src,
     PayloadSize: hdr.Size,
     User:        session.User,
  }
  defer src.Close()

  // Отправляем фото в хранилище
  img, err := s.storage.UploadFile(r.Context(), object)
  if err != nil {
     logrus.Errorf("Fail update img in image strorage: %v\n", err)
     http.Error(w, "Can`t upload photo!", http.StatusInternalServerError)
     return
  }

  // Добавляем запись в БД с привязкой фото к сессии
  err = s.database.AddImageRecord(img, rentID)
  if err != nil {
     logrus.Errorf("Fail update img in database: %v\n", err)
     http.Error(w, "Can`t upload photo!", http.StatusInternalServerError)
  }
}

Загружаем фото:

func (m *MinioProvider) UploadFile(ctx context. Context, object models.ImageUnit) (string, error) {
  // Получаем «уникальное» имя объекта для загружаемого фото
  imageName := samokater.GenerateObjectName(object.User)

  _, err := m.client.PutObject(
     ctx,
     UserObjectsBucketName, // Константа с именем бакета
     imageName,
     object.Payload,
     object.PayloadSize,
     minio.PutObjectOptions{ContentType: "image/png"},
  )

  return imageName, err

Нам надо как-то разделять фото до и после, поэтому мы добавим записи в базу данных:

func (s *PGS) AddImageRecord(img string, rentID int) error {
  // Получаем информацию о сессии аренды
  rent, err := s.GetRentStatus(rentID)
  if err != nil {
     logrus.Errorf("Can`t get rent record in db: %v\n", err)
     return err
  }

  // В зависимости от того, были загружены фото до начала аренды
  // или после её завершения, добавляем запись в соответствующее поле в БД
  if rent.StartedAt.IsZero() {
     return s.updateImages(rent.ImagesBefore, img, update_images_before, rentID)
  }

  return s. updateImages(rent.ImagesAfter, img, update_images_after, rentID)
}

Ну и сам метод обновления записи в БД:

func (s *PGS) updateImages(old []string, new, req string, rentID int) error {
  // Добавляем в список старых записей
  // новую запись об изображении
  old = append(old, new)
  new = strings.Join(old, ",")

  _, err := s.db.Exec(req, new, rentID)
  if err != nil {
     logrus.Errorf("Can`t update image record in db: %v\n", err)
  }

  return err
}

Также мы могли бы напрямую через сервис вытаскивать и отдавать фото по запросу. Выглядело бы это примерно так: 

func (s *Server) downloadPhoto(w http.ResponseWriter, r *http.Request) {
  if r.Method != "GET" {
     w.WriteHeader(http.StatusMethodNotAllowed)
     return
  }

  rentID := r.URL.Query()["rid"][0]
  if rentID == "" {
     http.Error(w, "Can`t get rent-id from request", http.StatusBadRequest)
  }

  img, err := s.storage.DownloadFile(r.Context(), rentID)
  if err != nil {
     logrus. Errorf("Cant`t get image from image-storage: %v\n", err)
     http.Error(w, "Can`t get image", http.StatusBadRequest)
  }

  s.sendImage(w, img.Payload)
}

Ну и само получение файла из хранилища:

func (m *MinioProvider) DownloadFile(ctx context.Context, image string) (models.ImageUnit, error) {
  reader, err := m.client.GetObject(
     ctx,
     UserObjectsBucketName,
     image,
     minio.GetObjectOptions{},
  )
  if err != nil {
     logrus.Errorf("Cant`t get image from image-storage: %v\n", err)
  }
  defer reader.Close()

  return models.ImageUnit{}, nil
}

Но мы можем и просто проксировать запрос напрямую в MinIO, так как у нас нет причин этого не делать (на практике такими причинами могут быть требования безопасности или препроцессинг файлов перед передачей пользователю). Делать это можно, обернув всё в nginx:

server {
   listen 8080;
   underscores_in_headers on;
   proxy_pass_request_headers on;

   location / {
       proxy_pass http://docker-samokater;
   }

   location /samokater {
       proxy_pass http://docker-minio-api;
   }

}

server {
   listen 9090;

   location / {
       proxy_pass         http://docker-minio-console;
       proxy_redirect     off;
   }
}

Получать ссылки на изображения мы будем через ручку rent_info:

func (s *Server) rentInfo(w http. ResponseWriter, r *http.Request) {
  if r.Method != "GET" {
     w.WriteHeader(http.StatusMethodNotAllowed)
     return
  }

  rentID, err := strconv.Atoi(r.Header.Get(HEADER_RENT_ID))
  if err != nil {
     logrus.Errorf("Can`t get rent id: %v\n", err)
     http.Error(w, "Wrong request!", http.StatusBadRequest)
     return
  }

  session, err := s.database.GetRentStatus(rentID)
  if err != nil {
     logrus.Errorf("Can`t get session: %v\n", err)
     http.Error(w, "Can`t rent info!", http.StatusInternalServerError)
     return
  }

  // Обогащаем поля ссылками на изображения
  session = enrichImagesLinks(session)

  s.sendModel(w, session)
}

И сам метод обогащения:

func enrichImagesLinks(session models.Rent) models.Rent {
  for i, image := range session.ImagesBefore {
     session.ImagesBefore[i] = fmt.Sprintf("%s/%s", ImageStorageSVCDSN, image)
  }

  for i, image := range session.ImagesAfter {
     session.ImagesAfter[i] = fmt.Sprintf("%s/%s", ImageStorageSVCDSN, image)
  }

  return session
}

Упакуем всё в docker-compose. yaml:

docker-compose.yaml
version: '3.7'

services:
 minio:
   image: minio/minio:latest
   container_name: minio
   restart: unless-stopped
   command: server --console-address ":9001" /data/
   ports:
     - "9000:9000"
     - "9001:9001"
   environment:
     MINIO_ROOT_USER: ozontech
     MINIO_ROOT_PASSWORD: minio123
   volumes:
     - minio-storage:/data
   healthcheck:
     test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"]
     interval: 30s
     timeout: 20s
     retries: 3
   networks:
     - app-network

 samokater:
   image: samokater:latest
   container_name: samokater
   build:
     context: ./
     dockerfile: samokater.Dockerfile
   restart: unless-stopped
   ports:
     - 8080:8080
   networks:
     - app-network
   environment:
     SERVERPORT: :8080
     DBPATH: user=postgres password=devpass dbname=postgres host=db port=5432 sslmode=disable
     MINIOHOST: minio:9000
     MINIOUSER: ozontech
     MINIOPASS: minio123
   depends_on:
     - db
     - minio

 initDB:
   image: mingration:latest
   container_name: init
   environment:
     DBPATH: user=postgres password=devpass dbname=postgres host=db port=5432 sslmode=disable
   build:
     context: . /
     dockerfile: mingration.Dockerfile
   networks:
     - app-network
   depends_on:
     - db

 db:
   container_name: db
   image: postgres
   restart: always
   environment:
     POSTGRES_PASSWORD: devpass
   volumes:
     - pg-storage:/var/lib/postgresql/data
   ports:
     - 5432:5432
   networks:
     - app-network

 nginx:
   image: nginx-custom:latest
   build:
     context: ./
     dockerfile: nginx.Dockerfile
   restart: unless-stopped
   tty: true
   container_name: nginx
   volumes:
     - ./nginx.conf:/etc/nginx/nginx.conf
   ports:
     - 8000:80
     - 443:443
   networks:
     - app-network
   depends_on:
     - samokater

networks:
 app-network:
   driver: bridge

volumes:
 minio-storage:
 pg-storage:

Протестируем работу нашего приложения:

# Создаём сессию аренды
$ curl -i -X POST --header 'user_id:100' http://localhost:8080/api/v1/rent
HTTP/1.1 200 OK

{"ID":100,"Name":"","RentID":8674665223082153551}

# Добавляем пару фото до начала аренды
$ curl -i  -X POST --header 'rent_id:8674665223082153551' --form photo=@/Users/ktikhomirov/image_1.png  http://localhost:8080/api/v1/upload_photo --insecure
HTTP/1.1 200 OK

# Начинаем сессию аренды
$ curl -i -X POST  http://localhost:8080/api/v1/rent_start  -H  "Content-Type: application/json" -d '{"ID":100,"RentID":8674665223082153551}'
HTTP/1.1 200 OK

# Завершаем сессию аренды
$ curl -i -X POST  http://localhost:8080/api/v1/rent_stop  -H  "Content-Type: application/json" -d '{"ID":100,"RentID":8674665223082153551}'
HTTP/1.1 200 OK

# Добавляем фото после завершения аренды
$ curl -i  -X POST --header 'rent_id:8674665223082153551' --form photo=@/Users/ktikhomirov/image_2.png http://localhost:8080/api/v1/upload_photo --insecure

# Получаем информацию об аренде
curl -i -X GET -H "rent_id:8674665223082153551"  http://localhost:8080/api/v1/rent_info
HTTP/1.1 200 OK

{"ID":100,"Name":"","StartedAt":"2021-10-21T08:10:31.536028Z","CompletedAt":"2021-10-21T08:19:33.672493Z","ImagesBefore":["http://127.0.0.1:8080/samokater/100/2021-10-21T15:15:24.png","http://127.0.0.1:8080/samokater/100/2021-10-21T08:06:15.png"],"ImagesAfter":["http://127.0.0.1:8080/samokater/100/2021-10-21T08:21:06.png"],"RentID":8674665223082153551}
Изображение полученное при переходе по URL от ответа сервиса

Кейс 2: хранение и раздача фронта

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

Небольшая предыстория. Однажды я встретил довольно интересную практику в компании, где в месяц релизили по несколько лендингов. В основном они были написаны на Vue.js, изредка прикручивался API на пару простеньких ручек. Но моё внимание больше привлекло то, как это всё деплоилось: там царствовали контейнеры с nginx, внутри которых лежала статика, а над всем этим стоял хостовый nginx, который выполнял роль маршрутизатора запросов. Как тебе такой cloud-native-подход, Илон? В качестве борьбы с этим монстром мной было предложено обмазаться кубами, статику держать внутри MinIO, создавая для каждого лендинга свой бакет, а с помощью Ingress уже всё это проксировать наружу. Но, как говорится, давайте не будем говорить о плохом, а лучше сделаем!

Представим, что перед нами стоит похожая задача и у нас уже есть Kubernetes. Давайте туда раскатаем MinIO Operator. Стоп, почему нельзя просто запустить MinIO в поде и пробросить туда порты? А потому, что MinIO-Operator любезно сделает это за нас, а заодно построит High Availability-хранилище. Для этого нам всего лишь надо три столовые ложки соды… воспользоваться официальной документацией.

Для простоты установки мы вооружимся смузи Krew, который всё сделает за нас:

$ kubectl krew update

$ kubectl krew install minio

$ kubectl minio init

Теперь надо создать tenant. Для этого перейдём в панель управления. Чтобы туда попасть, прокинем прокси:
$ kubectl minio proxy -n minio-operator

После прокидывания портов до нашего оператора мы получим в вывод терминала JWT-токен, с которым и залогинимся в нашей панели управления:

Интерфейс управления тенантами

Далее нажимаем на кнопку «Добавить тенант» и задаём ему имя и неймспейс:

Интерфейс настройки тенанта

После нажатия на кнопку «Создать» мы получим креденшиалы, которые стоит записать в какой-нибудь Vault:

Теперь для доступа к панели нашего кластера хранилищ, поднимем прокси к сервису minio-svc и его панели управления:

# Поднимаем прокси к дашборду minio-svc
kubectl -n minio-operator  port-forward service/minio-svc-console 9090:9090

# Поднимаем прокси к API minio-svc
kubectl -n minio-operator  port-forward service/minio-svc-hl 9000:9000

И вуаля! У нас есть высокодоступный отказоустойчивый кластер MinIO. Давайте прикрутим его к нашему GitLab CI и сделаем .gitlab_ci, чтобы в пару кликов деплоить фронт.

Вот так у нас будет выглядеть джоба для CI/CD на примере GitLab CI (целиком конфиг лежит в репе):

# gitlab-ci 
deploy-front:
 stage: deploy
 image: minio/mc
 script:
  # Логинимся в MinIO
  - mc config host add --insecure deploy $CI_OBJECT_STORAGE $CI_OBJECT_STORAGE_USER $CI_OBJECT_STORAGE_PASSWORD
  # И всё собранное ранее переносим в наш бакет
  - mc cp dist/* deploy/static --insecure -c -r
 dependencies:
   - build-front

Для того чтобы отдавать статику, добавим Ingress-манифест:

# static.yaml
---
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
 name: example-static
 labels:
   app.kubernetes.io/name: example-static
   app.kubernetes.io/version: "latest"
 annotations:
   cert-manager.io/cluster-issuer: letsencrypt-worker
   kubernetes.io/ingress.class: nginx
   kubernetes.io/tls-acme: "true"
   nginx.ingress.kubernetes.io/proxy-body-size: 100m
   nginx.ingress.kubernetes.io/secure-backends: "true"
   nginx.ingress.kubernetes.io/ssl-redirect: "true"
   nginx.ingress.kubernetes.io/backend-protocol: "HTTPS"
   nginx.ingress.kubernetes.io/rewrite-target: /$1
spec:
 tls:
   - hosts:
       - "domain.ru"
     secretName: ssl-letsencrypt-example
 rules:
   - host: "domain.ru"
     http:
       paths:
         - backend:
             serviceName: minio-svc
             servicePort: 9000
           path: /(.+)
           pathType: Prefix

А если вдруг потребуется доступ из других неймспейсов, то мы можем создать ресурс ExternalName:

---
apiVersion: v1
kind: Service
metadata:
 name: minio-svc
 namespace: deploy
spec:
 ports:
   - port: 9000
     protocol: TCP
     targetPort: 9000
 sessionAffinity: None
 type: ExternalName

Вместо вывода

Объектные хранилища – это класс инструментов, которые позволяют наделить систему высокодоступным хранилищем данных. Во времена cloud-native это незаменимый помощник в решении многих задач. Да, на практике могут случаться кейсы, в которых использование объектного хранения данных будет избыточным, но вряд ли это можно считать поводом совсем игнорировать этот инструментарий в других своих проектах.

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

Рассмотренное в статье MinIO – это не единственный достойный инструмент, который позволяет работать с данной технологией. Существуют решения на основе Ceph и Riak CS и даже S3 от Amazon. У всех инструментов свои плюсы и минусы. 

Желаю вам успехов в создании и масштабировании ваших приложений и надеюсь, что объектные хранилища вам будут в этом помогать!

Делитесь в комментариях о вашем опыте работы с объектными хранилищами и задавайте вопроы!

Кому нужны игры жанра MMORPG в 2021 году?

MMORPG как жанр исправно хоронят каждый год, но он всячески отказывается умирать. Стоило королю многопользовательских ролевых игр World of Warcraft чуть сдать, на его место мгновенно прыгнул японский проект Final Fantasy XIV, а детище Amazon — New World — со старта вызвало невиданный ажиотаж с многотысячными очередями при авторизации. Кажется, пациент скорее жив. Вместе с VOKA вспоминаем, как вообще появился жанр и чем удивлял индустрию, а заодно разбираемся, в какие MMORPG стоит поиграть сейчас.

Первая встреча в сети и текстовые ролевые игры

Кажется, что массовые многопользовательские ролевые онлайн-игры появились не так давно — в конце 90-х или начале нулевых, вместе с выходом на рынок таких мастодонтов, как Wolrd of Warcraft и Lineage. Да, эти проекты здорово популяризировали жанр, но и близко не были первооткрывателями: MMORPG пускают корни аж в 70-е годы ХХ века.

К этому времени компьютеры все еще не до конца избавились от своей громоздкости, но уже успели обзавестись плазменными дисплеями, сенсорными экранами и классическими периферийными устройствами. Конечно, до массового производства технологиям было далеко, но, например, с 1961 года существовала любопытная система Programmed Logic for Automated Teaching Operations (PLATO), представляющая из себя тысячи терминалов по всему миру, связанных общей сетью. Предполагалось, что она будет использоваться для учебного процесса школьников и студентов, однако ей нашли более изобретательное применение.

Талантливые молодые люди научились писать в рамках PLATO собственные программы, распространять их по всему миру и вовлекать пользователей в общий игровой процесс. Например, игра Spasim позволяла собрать в одной космической баталии до 32 игроков одновременно — до образца MMORPG игре было далеко, но для человечества шаг был большим.

Немного позже, в 1978 году, вектор чуть тоньше задала игра Zork, которая по своей сути была весьма далека от массовых многопользовательских игр и представляла собой просто качественный текстовый квест про поиски сокровищ. Но главное она сделала: вдохновила двух гениев из Университета Эссекса Роя Трубшоу и Ричарда Бартла на разработку собственного проекта — Multi-User Dungeon (MUD). Это был такой же текстовый квест, как Zork, но уже с соединением по сети: больше не нужно было бродить по подземельям в одиночестве.

Вскоре игр на базе MUD стало больше, и они знатно разветвились: некоторые делали ставку на PvP-составляющую (схватки между двумя пользователями), другие — на приключения в духе Dungeons & Dragons, третьи — на социальное взаимодействие, ролевые отыгрыши или просто общение в «ламповых» чатиках. Конечно, со временем игроки устали наблюдать на экране только буквы да цифры, тем более что игры уже заметно развились и позволяли использовать вполне приличную графику.

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

MMORPG за 8 долларов в час и отцы жанра

Следующим перевалочным пунктом для жанра стала ролевая игра Neverwinter Nights 1991 года выпуска, которая разрабатывалась для AOL, главного интернет-провайдера США, и максимально приблизилась к статусу первой графической массовой многопользовательской ролевой игры. Она позволяла создать собственного персонажа и отправиться покорять мир Dungeons & Dragons, сражаться с другими игроками, объединяться в гильдии и врываться в рейтинги лучших бойцов — звучит знакомо, правда? Стоило, однако, это удовольствие немало: час игры обходился в 8 долларов, а на первых порах серверы были способны вместить только около 200 игроков.

Еще больше знакомых черт жанру подарил проект Legends of Future Past, который вышел годом позже. Пользователи впервые открыли для себя систему крафтинга — добычу полезных ресурсов и превращение их в броню, оружие и прочие усиления.

А уже 1997 год принято считать официальным стартом MMORPG. До этого времени, несмотря на увлекательные эксперименты в зарождающемся жанре, он оставался уделом достаточно узкой аудитории — в первую очередь из-за того, что издатели не горели желанием вкладывать деньги в продвижение таких авантюр. Ричарда Гэрриота, разработчика серии Ultima, это не пугало — он мечтал вывести свое детище в онлайн.

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

Ричард Гэрриот, кстати говоря, приложил руку и к другой культовой MMORPG — Lineage, изометрической ролевой игре на базе проекта Nexus: The Kingdom of the Winds. Оба ознаменовали собой восход жанра в Южной Корее, которая на десятилетия стала одним из законодателей моды в своей нише. А пионерский Nexus установил и первый уникальный рекорд для индустрии — более 12 тысяч игроков одновременно находились на одном сервере, чтобы стать частью истории.

Дальше не проходило буквально и нескольких месяцев без очередного яркого эксперимента в жанре. В 1999 году, например, проект Everquest представил миру первую трехмерную MMORPG вместо плоских спрайтов Ultima Online, ввел множество классов и рас вплоть до лягушек-некромантов и представил первых мировых боссов, которые требовали объединения игроков в группы для гарантированной победы. Кроме того, именно здесь появилось такое понятие, как гринд — уничтожение десятков, сотен и тысяч NPC как главный вариант прокачки персонажа.

Anarchy Online, в свою очередь, впервые поиграла с сеттингом жанра: магию заменили технологиями, а мечи — навороченными пушками. Для игры разработчики придумали инстансы, которые со временем превратились в знакомые фанатам подземелья, особые изолированные от больших локаций уровни, заполненные более сильными противниками с ценной добычей. Проект Dark Age of Camelot, с другой стороны, сконцентрировался на PvP-аспекте, противостоянии игроков между собой, предлагая взамен локальных стычек на карте масштабные фракционные войны для целых армий.

Final Fantasy XI дерзко подошла к системе классов: игрок мог развивать параллельно сразу несколько, выдумывая уникальные комбинации, а в случае неудачного сочетания просто пробовать новую ветку развития без необходимости создавать отдельного персонажа. К сожалению, такая инновация не стала повсеместно модной, но отчасти заложила современный подход в MMORPG, который иногда вообще не предполагает строгие формальные роли.

Были и проекты уж совсем из ряда вон — EVE Online заменил фэнтезийных героев на целые космические корабли, исследующие вселенную, торгующие, воюющие и выстраивающие межпланетные корпорации. В игре не было привычных уровней, а геймплей строился на социальном взаимодействии игроков и уникальной внутренней экономике. Интересно, что игра 2003 года выпуска все еще в топе — по последним данным, у нее более 500 тысяч активных пользователей.

А дальше был 2004 год — и релиз World of Warcraft, игры, которая всерьез и надолго стала главным лицом жанра.

«Война клонов» и Восток против Запада

Проект Blizzard на базе своей культовой стратегии в реальном времени, Warcraft не был чем-то уникальным. Не он ввел большие открытые игровые миры, не он придумал PvE-систему (противостояние пользователей и неигровых персонажей) в виде подземелий и рейдов и не он изобрел идею противостояния игроков.

Однако никто прежде не собирал все удачные наработки MMORPG в единое целое и никто не реализовывал это так здорово. World of Warcraft использовал сеттинг, сюжеты и персонажей из стратегии, поместив их в невероятно большой мир, только на исследование которого можно было потратить не одну неделю или месяц. По локациям героев вел впечатляющий сюжет — как локальные арки, так и большие сюжетные кампании. Игра не отказывалась от привычных рас и классов, но довела их геймплей до совершенства.

Особенно прекрасными у WoW получились PvP- и PvE-аспекты. Игроки могли сражаться друг с другом в открытом мире (само название это и предполагало), на специальных полях боя в командных режимах и даже проводить блицкриги против лидеров фракции противника. Подземелья и рейды же в World of Warcraft с самого начала казались одной из главных фишек игры. Они были представлены как камерными пещерами культистов, так и запутанными королевствами дворфов. На максимальном 60-м уровне PvE-контент в принципе был главным вариантом для развития персонажа. Со временем игра выбрала такой вектор для развития: в дополнениях акцент все больше смещался с открытого мира на ограниченные локации в виде подземелий и рейдов, которые становились еще сложнее, увлекательнее и выгоднее с точки зрения награды.

Безоговорочный успех World of Warcraft не затихал годами: в 2008-м, например, после выхода дополнения Wrath of the Lich King игра попала в Книгу рекордов Гиннесса — к тому моменту общее количество подписчиков WoW достигло 10 миллионов. Спустя два года количество перевалило за 12 миллионов — важно понимать, что это были активные игроки, которые платили реальные деньги за время в любимой MMORPG.

Тотальная популярность проекта со временем вылилась в целую войну клонов — разработчики со всего мира начали соревноваться, кто лучше экспроприирует World of Warcraft и переложит его на свой лад. Некоторые игры не доживали до релиза, другие скоропостижно умирали спустя несколько месяцев. Но, например, российский проект «Аллоды», который смешал фэнтези с элементами сеттинга СССР, жив и до сих пор в статусе, пожалуй, одного из самых аутентичных, пусть и очевидных, клонов WoW.

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

В конце концов, уже к началу 2010-х жанр оказался в застое. Новых идей не было, игры отличались способом оплаты и минимальными системами. Общий упадок коснулся даже мастодонтов вроде World of Warcraft и Lineage II. Впрочем, сказался и банально неотвратимый ход времени — сам жанр начал уступать по популярности более динамичным и свежим MOBA, а чуть позже и баттл-роялям.

В поисках идей и новых форматов

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

Guild Wars II

Еще в 2012 году разработчики проекта придумали инновации (или подсмотрели у менее популярных конкурентов), которые спустя несколько лет разошлись по многим другим грандам MMO, включая World of Warcraft. В фэнтезийном мире Guild Wars II игроки вольны делать что угодно: персонажа можно развивать банальным гриндом, сбором ресурсом, исследованием мира и в схватках с онлайн-противниками.

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

Final Fantasy XIV

Игра, существующая уже не один год и пережившая несколько перезапусков, стала особенно популярной в 2021 году — летом FF опередила по количеству активных пользователей актуальную версию WoW (хотя суммарно все еще уступает франшизе с ее ностальгическими серверами образца первых версий игры).

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

Albion Online

Хардкорный капитализм чистой воды, откатывающий весь прогресс жанра к истокам. Колонизаторы острова Альбион вынуждены определиться, кем хотят быть: либо ремесленниками, денно и нощно добывающими ресурсы, либо бойцами, которые бесстрашно зачищают подземелья и защищают слабых. Исполнять обе роли одновременно нельзя.

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

Lost Ark

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

А еще в Lost Ark есть мореплавание — это действительно освежает.

Crowfall

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

Первый представляет из себя обычную «песочницу», в которой пользователи могут отстраивать свой персональный мирок, ковырять ресурсы и придумывать интерьер для собственного особняка. Второй куда интереснее и ближе к первоначальным обещаниям — масштабная PvP в несколько этапов с подготовкой и финальный боем между фракциями в конце сезона длиной в месяц-два. Дальше — гибель мира и старт нового этапа.

New World

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

На помощь извне полагаться не приходится — новую цивилизацию приходится отстраивать своими руками, сбиваясь в гильдии для противостояния окружающей среде. В New World нет традиционных классов, развитие героя зависит от оружия в его руках, а помимо славных баталий, игрокам приходится заниматься скучноватым ремеслом и не менее скучными квестами с непрекращающейся беготней туда-назад без какого-либо транспорта.


VOKA — это видеосервис, где каждый найдет что-то интересное для себя: фильмы и сериалы в HD-качестве и без рекламы, более 130 ТВ-каналов, премьеры новых эпизодов и сезонов одновременно со всем миром, live-трансляции концертов, спортивных матчей, контент собственного производства, а также удобные рекомендации по жанрам, настроению и новинкам.

Весь контент VOKA доступен к просмотру бесплатно для всех новых пользователей в течение первых 30 дней.

Спецпроект подготовлен при поддержке УП «А1», УНП 101528843.

Наш канал в Telegram. Присоединяйтесь!

Есть о чем рассказать? Пишите в наш телеграм-бот. Это анонимно и быстро

Перепечатка текста и фотографий Onlíner без разрешения редакции запрещена. [email protected]

«Песочница» для вредоносных программ на базе искусственного интеллекта для наивысшего уровня безопасности «песочницы»

Fortinet с гордостью сообщает, что второй год подряд мы были признаны выбором клиентов в отчете Gartner Peer Insights «Голос клиента»: сетевые брандмауэры за апрель 2021 года.

Выбор клиентов Gartner Peer Insights — это признание поставщиков на этом рынке проверенными профессионалами в области конечных пользователей с учетом как количества отзывов, так и общих оценок пользователей.Чтобы обеспечить справедливую оценку, Gartner придерживается строгих критериев для признания поставщиков с высоким уровнем удовлетворенности клиентов.

Являясь неотъемлемой частью Fortinet Security Fabric, наши межсетевые экраны FortiGate Next-Generation (NGFW) обеспечивают основанный на безопасности сетевой подход для защиты любой границы сети и любого пользователя в масштабе, обеспечивая при этом высокую производительность. FortiGate NGFW, работающий на базе специально созданных модулей обработки безопасности (SPU) Fortinet, предлагает самый высокий в отрасли рейтинг безопасности вычислений.

С FortiGate NGFW организации могут:

Управляйте внутренними и внешними рисками безопасности: FortiGateNGFW обеспечивают полную видимость приложений, угроз и сетей, чтобы поддерживать работу и обеспечивать непрерывность бизнеса. Кроме того, сегментация на основе сети останавливает боковые угрозы и защищает от уязвимостей приложений с помощью усовершенствованных сервисов AI / ML на базе FortiGuard для отражения кибератак.

Достижение оптимальной рентабельности инвестиций за счет консолидации: FortiGateNGFW плавно объединяют и ускоряют сетевое взаимодействие и несколько функций безопасности в одном решении для снижения затрат и оптимизации взаимодействия с пользователем.

Повысьте эффективность работы: Fortinet Fabric Management Center оптимизирует операции в Security Fabric и расширяет возможности интеграции с более чем 400 экосистемами с помощью консолидированного представления для упрощения рабочих процессов в масштабе всего предприятия.

Вот небольшая выборка лучших отзывов, опубликованных клиентами Fortinet на веб-сайте Gartner Peer Insights *:

★★★★★
« стабильный и надежный межсетевой экран» — инженер по облачной инфраструктуре в финансовой отрасли, размер компании: 50–250 млн долларов США
Общий рейтинг пользователей: 5/5 звезд
«Мы используем FortiGate в штаб-квартире нашей компании. и многие филиалы по всей стране.Для компании, которая занимается в основном конфиденциальными данными клиентов, нам необходимо было убедиться, что наши сети защищены лучшим из доступных брандмауэров (также благодаря отзывам Gartner) ».

★★★★★
« тонн стоимости в малой упаковке » — Директор по ИТ в розничной торговле , Размер компании: 500M-1B
долларов США Общий рейтинг пользователей: 5/5 звезд
«Мы решили развернуть полный сетевой стек Fortinet, включая FortiGate60E, во всех 90+ наших торговых точках.Далее мы развернули FortiGate200E в парах высокой доступности во всех местоположениях центров обработки данных. Эти устройства UTM — одни из лучших и наиболее функциональных, которые я когда-либо использовал ».

★★★★★
« Доставили то, что мы искали » —ВП, заместитель директора по информационным технологиям в финансовой отрасли, размер компании: 1B-3B
долларов США Общий рейтинг пользователей: 5/5 звезд
«Наш опыт внедрения этого решения был очень удовлетворительным. Мы выбрали Fortinet по цене и простоте и получили то, что искали.»

★★★★★
« Надежное решение межсетевого экрана, которое защищает ваши бизнес-системы » — программист в финансовой сфере, размер компании: 50–250 млн долларов США
Общий рейтинг пользователей: 5/5 звезд

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

★ ★ ★ ★ ★
« NGFW, который должен быть в вашей компании » — серверный разработчик PHP в финансовой отрасли, размер фирмы: 50–250 млн долларов США
Общий рейтинг пользователей: 5/5 звезд
«FortiGate NGFW — это основная защита нашей ИТ-инфраструктуры. Вся сеть проходит через нее. Он может легко обрабатывать весь наш трафик. Сейчас большинство сотрудников работают из дома, поэтому VPN очень сильно пострадает, но это не так. проблема для FortiGate.»

Тестовая среда приложения в деталях

Конкретные шаги, которые вы предпринимаете для внедрения тестовой среды приложения, уникальны для вашего приложения, но механизмы контроля доступа, используемые в тестовой среде приложения для защиты пользовательских данных, остаются неизменными:

  • Права. Сообщайте macOS конкретные системные ресурсы, необходимые вашему приложению для выполнения своей работы, и не более того.

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

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

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

  • Разделение привилегий. Разделите приложение на более мелкие части, каждая из которых имеет свои собственные права доступа к ресурсам, минимизируя ущерб, если какая-либо из частей окажется скомпрометированной.

Необходимость последней линии защиты

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

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

Чтобы успешно внедрить тестовую среду приложения, используйте другой образ мышления, отличный от того, к которому вы, возможно, привыкли, как это предлагается в Таблице 2-1.

Минимизация использования ресурсов системы

Воспользуйтесь преимуществом доступа во всем приложении

Таблица 2-1 Мышление «песочницы приложения»

При разработке…

При внедрении песочницы приложения…

Добавление функций

03

Функциональность разделов, затем не доверяйте каждой части

Используйте наиболее удобный API

Используйте наиболее безопасный API

Просмотреть ограничения как ограничения

Просматривать ограничения как меры предосторожности

Права и доступ к системным ресурсам

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

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

Одно специальное право — Включить тестовую среду приложения — включает тестовую среду приложения.Когда вы включаете песочницу, Xcode создает файл списка свойств .entitlements и показывает его в навигаторе проекта.

Если вашему приложению требуется возможность, запросите ее, добавив соответствующее разрешение в свой проект Xcode, используя вкладку «Сводка» целевого редактора. Если вам не нужна возможность, постарайтесь не указывать соответствующее право.

Вы запрашиваете разрешения для каждого целевого объекта. Если ваше приложение имеет единственную цель — главное приложение — вы запрашиваете права только для этой цели.Если вы разрабатываете свое приложение для использования основного приложения вместе с помощниками (в форме служб XPC), вы запрашиваете права индивидуально и, если необходимо, для каждой цели. Вы узнаете больше об этом в разделах «Внешние инструменты», «Службы XPC» и «Разделение привилегий».

Вам может потребоваться более детальный контроль над правами вашего приложения, чем это доступно в целевом редакторе Xcode. Например, вы можете запросить разрешение на временное исключение, потому что песочница приложения не поддерживает возможности, необходимые вашему приложению, такие как возможность отправлять событие Apple в приложение, которое еще не предоставляет какие-либо группы доступа для сценариев.Для работы с разрешениями на временные исключения используйте редактор списка свойств Xcode, чтобы напрямую отредактировать файл списка свойств цели .entitlements .

Примечание: Если вы запрашиваете разрешение на временное исключение, обязательно следуйте инструкциям относительно разрешений, представленных на веб-сайте iTunes Connect. В частности, сообщите об ошибке, запрашивая необходимую вам функциональность, и используйте поле «Обзор заметок» в iTunes Connect, чтобы объяснить, почему вашему приложению требуется временное исключение.Обязательно укажите номер ошибки.

Права

для тестовой среды приложения macOS описаны в разделе «Включение тестовой среды приложения» в справочнике по ключу прав . Для пошагового руководства по запросу прав для цели в проекте Xcode см. Быстрый запуск тестовой среды приложения.

Каталоги контейнеров и доступ к файловой системе

Когда вы используете тестовую среду приложения, ваше приложение получает доступ к следующим расположениям:

  • Каталог контейнера приложения. При первом запуске операционная система создает специальный каталог для использования вашим приложением — и только вашим приложением — который называется контейнером .Каждый пользователь в системе получает индивидуальный контейнер для вашего приложения в своем домашнем каталоге; ваше приложение имеет неограниченный доступ для чтения и записи к контейнеру для пользователя, который его запустил.

  • Каталоги контейнеров группы приложений. Изолированное приложение может указать право, которое дает ему доступ к одному или нескольким каталогам контейнеров группы приложений, каждый из которых является общим для всех приложений с этим правом.

  • Файлы, указанные пользователем. Изолированное приложение (с соответствующими правами) автоматически получает доступ к файлам в произвольных местах, когда эти файлы явно открываются пользователем или перетаскиваются пользователем в приложение.

  • Сопутствующие товары. При наличии соответствующего разрешения ваше приложение может получить доступ к файлу с тем же именем, что и указанный пользователем файл, но с другим расширением. Это можно использовать для доступа к файлам, которые функционально связаны (например, к файлу субтитров, связанному с фильмом), или для сохранения измененных файлов в другом формате (например, повторного сохранения плоского файла RTF в качестве контейнера RTFD после того, как пользователь добавил рисунок).

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

Эти политики подробно описаны в следующих разделах.

Каталог контейнера тестовой среды приложения

Каталог контейнера тестовой среды приложения имеет следующие характеристики:

  • Он расположен по определенному системой пути в домашнем каталоге пользователя. В изолированном приложении этот путь возвращается, когда ваше приложение вызывает функцию NSHomeDirectory .

  • Ваше приложение имеет неограниченный доступ для чтения и записи к контейнеру и его подкаталогам.

  • API поиска путей macOS (над уровнем POSIX) ссылаются на местоположения, специфичные для вашего приложения.

    Большинство этих API для поиска пути ссылаются на местоположения относительно контейнера вашего приложения. Например, контейнер включает в себя отдельный каталог библиотеки (указанный константой пути поиска NSLibraryDirectory ) для использования только вашим приложением с отдельными подкаталогами Application Support и Preferences .

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

    Некоторые API для поиска пути (выше уровня POSIX) ссылаются на зависящие от приложения местоположения за пределами домашнего каталога пользователя. Например, в изолированном приложении функция NSTemporaryDirectory предоставляет путь к каталогу, который находится за пределами домашнего каталога пользователя, но специфичен для вашего приложения и внутри вашей песочницы; у вас есть неограниченный доступ для чтения / записи для текущего пользователя.Поведение этих API для поиска пути адаптировано для тестовой среды приложения, и изменение кода не требуется.

  • macOS устанавливает и обеспечивает соединение между вашим приложением и его контейнером с помощью подписи кода вашего приложения.

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

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

    iOS Примечание: Контейнер macOS отличается от контейнера iOS, поскольку он не предназначен для пользовательских документов. Кроме того, в отличие от macOS, контейнер iOS содержит само приложение.

    iCloud Примечание. Технология Apple iCloud, описанная в Руководстве по дизайну iCloud , также использует название «контейнер».Нет функциональной связи между контейнером iCloud и контейнером песочницы приложения.

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

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

Каталог контейнеров группы приложений

В дополнение к контейнерам для каждого приложения в macOS 10.7.5 и 10.8.3 и более поздних версиях приложение может использовать право com.apple.security.application-groups для запроса доступа к один или несколько общих контейнеров, общих для нескольких приложений, созданных одной командой разработчиков. Право - это массив строк идентификаторов группы, каждая из которых называет другую группу, к которой принадлежит приложение.Контейнеры групп предназначены для содержимого, не предназначенного для пользователей, например для общих кешей или баз данных.

Примечание: Приложения, которые являются членами группы приложений, также получают возможность совместно использовать семафоры Mach и POSIX и использовать некоторые другие механизмы IPC вместе с другими членами группы. Дополнительные сведения см. В разделе «Семафоры IPC и POSIX и общая память».

Песочница приложения автоматически увеличивается, чтобы включить все контейнеры группы приложения. Сами контейнеры хранятся в ~ / Library / Group Containers / , где - это имя группы, как указано в одной из строк идентификатора группы прав. .Идентификаторы групп должны начинаться с идентификатора вашей группы разработчиков, за которым следует точка.

Начиная с macOS 10.8.3, ваше приложение может получить путь к контейнеру группы, вызвав метод containerURLForSecurityApplicationGroupIdentifier: из NSFileManager с допустимым идентификатором группы.

Примечание: В macOS 10.9 вызов этого метода автоматически создает каталог контейнера группы вместе с папками Library / Preferences , Library / Caches и Library / Application Support в этом каталоге контейнера группы.

В предыдущих версиях, хотя каталог контейнера группы является частью вашей песочницы, сам каталог не создается автоматически. Ваше приложение должно создать этот каталог, как показано в Листинге 2-1:

Листинг 2-1 Создание каталога контейнера группы приложений

 NSFileManager * fm = [NSFileManager defaultManager]; 
 NSString * appGroupName = @ "Z123456789.com.example.app-group"; / * Например * / 
 
 NSURL * groupContainerURL = [fm containerURLForSecurityApplicationGroupIdentifier: appGroupName]; 
 NSError * theError = nil; 
 if (! [Fm createDirectoryAtURL: groupContainerURL withIntermediateDirectories: YES attributes: nil error: & theError]) {
 // Обработка ошибки.
} 
Содержимое этого каталога следует организовать так же, как и любую другую папку библиотеки , используя стандартные имена папок - Preferences , Application Support и т. Д. -по мере необходимости.

Дополнительные сведения см. В разделе «Добавление приложения в группу приложений» в справочнике по ключу прав .

Powerbox и доступ к файловой системе за пределами вашего контейнера

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

  • По указанию пользователя

  • Используя права для определенные расположения файловой системы (описанные в разделе Права и доступ к системным ресурсам)

  • Когда расположение файловой системы находится в определенных каталогах, доступных для чтения всем пользователям

Вызывается технология безопасности macOS, которая взаимодействует с пользователем для расширения вашей изолированной программной среды. Блок питания .У Powerbox нет API. Ваше приложение использует Powerbox прозрачно, когда вы используете классы NSOpenPanel и NSSavePanel . Вы включаете Powerbox, устанавливая права с помощью Xcode, как описано в разделе «Включение доступа к выбранным пользователем файлам» в справочнике по ключу прав .

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

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

Когда пользователь вашего приложения указывает, что он хочет использовать файл или папку, система добавляет связанный путь к песочнице вашего приложения. Скажем, например, пользователь перетаскивает папку ~ / Documents на плитку Dock вашего приложения (или на значок Finder вашего приложения, или в открытое окно вашего приложения), тем самым показывая, что он хочет использовать эту папку. В ответ система делает папку ~ / Documents , ее содержимое и подпапки доступными вашему приложению.

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

Кроме того, система автоматически разрешает изолированному приложению:

  • Подключиться к системным методам ввода

  • Вызов служб, выбранных пользователем в меню «Службы».

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

  • Открытие файлов, выбранных пользователем в меню «Открыть недавние»

  • Участвуйте в других приложениях путем копирования и вставки, вызываемого пользователем

  • Чтение файлов, доступных для чтения всем, в определенных каталогах, включая следующие каталоги:

    • / bin

    • / sbin

    • / usr / bin

    • / usr / lib

    • / usr / sbin

    • акция / System

  • Чтение и запись файлов в каталогах, созданных вызовом NSTemporaryDirectory .

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

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

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

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

Связанные элементы

Функция связанных элементов тестовой среды приложения позволяет вашему приложению получать доступ к файлам, которые имеют то же имя, что и выбранный пользователем файл, но с другим расширением. Эта функция состоит из двух частей: списка связанных расширений в файле Info.plist приложения и кода, который сообщает песочнице, что вы делаете.

Есть два распространенных сценария, в которых это имеет смысл:

  • Сценарий 1:

    Ваше приложение должно иметь возможность сохранять файл с расширением, отличным от расширения исходного файла.Например, когда вы вставляете изображение в файл RTF в TextEdit и сохраняете его, TextEdit изменяет расширение файла с .rtf на .rtfd (и становится каталогом).

    Чтобы справиться с этой ситуацией, необходимо использовать объект NSFileCoordinator для координации доступа к файлу. Перед переименованием файла вызовите метод itemAtURL: willMoveToURL: . После переименования файла вызовите метод itemAtURL: didMoveToURL: .

  • Сценарий 2:

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

    Чтобы получить доступ к этому вторичному файлу, создайте класс, соответствующий протоколу NSFilePresenter . Этот объект должен предоставлять URL-адрес основного файла в качестве своего свойства primaryPresentItemURL и должен предоставлять URL-адрес вторичного файла в качестве своего свойства PresentItemURL .

    После того, как пользователь откроет основной файл, объект-презентатор файла должен вызвать метод класса addFilePresenter: в классе NSFileCoordinator для регистрации.

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

В обоих сценариях необходимо внести небольшие изменения в файл Info.plist приложения. В вашем приложении уже должен быть объявлен массив типов документов ( CFBundleDocumentTypes ), в котором объявляются типы файлов, которые может открывать ваше приложение.

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

Чтобы узнать больше о презентаторах файлов и координаторах файлов, прочтите Руководство по программированию файловой системы .

Поведение диалогового окна открытия и сохранения с песочницей приложения

Некоторые методы NSOpenPanel и NSSavePanel ведут себя по-разному, когда для вашего приложения включена песочница приложения:

Кроме того, эффективный путь наследования среды выполнения для NSOpenPanel Классы NSSavePanel отличаются от тестовой среды приложения, как показано в таблице 2-2.

Таблица 2-2 Открытие и сохранение наследования классов с песочницей приложения

Без песочницы приложения

NSOpenPanel: NSSavePanel: NSPanel: NSWindow: NSResponder: NSObject

NSOpenPanel: NSSavePanel: NSObject

Из-за этой разницы во времени выполнения объект NSOpenPanel или NSSavePanel наследует меньшее количество методов с песочницей приложения.Если вы пытаетесь отправить сообщение в объект NSOpenPanel или NSSavePanel , и этот метод определен в классах NSPanel , NSWindow или NSResponder , система вызывает исключение. Компилятор Xcode не , а выдает предупреждение или ошибку, чтобы предупредить вас об этом поведении во время выполнения.

Закладки с ограничением безопасности и постоянный доступ к ресурсам

Доступ вашего приложения к расположениям файловой системы за пределами его контейнера - как предоставлен вашему приложению посредством намерения пользователя, например через Powerbox - не сохраняется автоматически при запуске приложения или системе перезапускается.Когда ваше приложение откроется снова, вам придется начинать заново. (Единственным исключением являются файлы, открытые в момент , когда ваше приложение завершает работу, которые остаются в вашей песочнице благодаря функции возобновления macOS).

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

  • Выбранная пользователем папка для загрузки, обработки или вывода

  • Файл библиотеки браузера изображений, который указывает на указанные пользователем изображения в произвольных местах

  • Сложный формат документа, который поддерживает встроенные носители, хранящиеся в других местах

Два разных типа закладки с ограничением безопасности

Закладки с ограничением безопасности , доступны начиная с macOS 10.7.3, поддерживают два различных варианта использования:

  • Закладка в области приложения предоставляет вашему изолированному приложению постоянный доступ к указанному пользователем файлу или папке.

    Например, если ваше приложение использует папку загрузки или обработки, которая находится за пределами контейнера приложения, получите начальный доступ, представив диалоговое окно NSOpenPanel , чтобы узнать намерение пользователя использовать определенную папку. Затем создайте закладку в области приложения для этой папки и сохраните ее как часть конфигурации приложения (возможно, в файле списка свойств или с помощью класса NSUserDefaults ).С помощью закладки на уровне приложения ваше приложение может в будущем получить доступ к папке.

  • Закладка на уровне документа предоставляет конкретному документу постоянный доступ к файлу.

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

    Получите начальный доступ к упомянутому элементу, запросив у пользователя намерение использовать этот элемент.Затем создайте закладку на уровне документа для элемента и сохраните закладку как часть данных документа.

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

    Закладка в области документа может указывать только на файл, но не на папку, и только на файл, который не находится в месте, используемом системой (например, / частный или / Библиотека ).

Использование закладок с областью безопасности

Для использования любого из типов закладок с областью безопасности необходимо выполнить пять шагов:

  1. Установите соответствующее право в целевом объекте, который должен использовать закладки с областью безопасности.

    Сделайте это один раз для каждой цели как часть настройки вашего проекта Xcode.

  2. Создание закладки с ограничением безопасности.

    Сделайте это, когда пользователь указал намерение (например, через Powerbox) использовать ресурс файловой системы вне контейнера вашего приложения, и вы хотите сохранить возможность доступа вашего приложения к этому ресурсу.

  3. Разрешить закладку с ограничением безопасности.

    Сделайте это, когда вашему приложению позже (например, после перезапуска приложения) потребуется доступ к ресурсу, который вы добавили в закладки на шаге 2. Результатом этого шага является URL с ограничением безопасности.

  4. Явно укажите, что вы хотите использовать ресурс файловой системы, URL-адрес которого вы получили на шаге 3.

    Сделайте это сразу после получения URL-адреса с ограниченным уровнем безопасности (или, если вы позже захотите восстановить доступ к ресурсу после отказавшись от доступа к нему).

  5. По завершении использования ресурса явно укажите, что вы хотите прекратить его использование.

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

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

    Если ваше приложение перезапущено, вы должны вернуться к шагу 3 (для устранения закладки, связанной с безопасностью).

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

  • Чтобы использовать закладки на уровне приложения в целевом объекте, установите для параметра com.apple.security.files.bookmarks.app-scope значение полномочий true .

  • Чтобы использовать закладки на уровне документа в целевом объекте, установите для параметра com.apple.security.files.bookmarks.document-scope значение полномочий true .

При необходимости вы можете запросить одно или оба этих разрешения в целевом объекте. Эти права доступны начиная с macOS 10.7.3 и описаны в разделе «Включение закладки с ограничением безопасности и доступа по URL-адресу».

При наличии соответствующих прав вы можете создать закладку с областью безопасности, вызвав метод bookmarkDataWithOptions: включаяResourceValuesForKeys: relativeToURL: error: класса NSURL .

Когда позже вам понадобится доступ к ресурсу, отмеченному закладкой, разрешите его закладку с областью безопасности, вызвав метод URLByResolvingBookmarkData: options: relativeToURL: bookmarkDataIsStale: error: класса NSURL .

В изолированном приложении вы не можете получить доступ к ресурсу файловой системы, на который указывает URL-адрес с областью безопасности, пока вы не вызовете метод startAccessingSecurityScopedResource для URL-адреса.

Если вам больше не нужен доступ к ресурсу, полученному с помощью области безопасности (обычно после закрытия ресурса), вы должны вызвать метод stopAccessingSecurityScopedResource для URL-адреса ресурса.

Вызовы для запуска и остановки доступа не вложены. Когда вы вызываете метод stopAccessingSecurityScopedResource , вы немедленно теряете доступ к ресурсу.Если вы вызовете этот метод для URL-адреса, к которому у вас нет доступа, ничего не произойдет.

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

Для получения подробных описаний методов, констант и прав, используемых для реализации закладок с областью безопасности в вашем приложении, прочтите Справочник по классу NSURL и ознакомьтесь с разделом «Включение закладок с ограниченным уровнем безопасности и доступа по URL-адресу» в справочнике по ключу прав .

Тестовая среда приложения и подписание кода

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

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

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

  1. Когда система создает контейнер для приложения, она устанавливает список управления доступом (ACL) для этого контейнера. Первоначальная запись управления доступом в этом списке содержит назначенное требование (DR) приложения, которое является частью подписи приложения, описывающей способ распознавания будущих версий приложения. См. Требования кода в Руководстве по подписанию кода для описания DR.

  2. Каждый раз, когда запускается приложение с тем же идентификатором пакета, система проверяет, соответствует ли подпись кода приложения указанным требованиям, указанным в одной из записей в ACL контейнера. Если система не находит совпадения, приложение не запускается.

Обеспечение целостности контейнеров в macOS влияет на цикл разработки и распространения. Это связано с тем, что в процессе создания и распространения приложения приложение подписывается кодом с использованием различных подписей.Вот как работает этот процесс:

  1. Перед созданием проекта вы получаете от Apple три сертификата подписи кода: сертификат разработки, сертификат распространения и (необязательно) сертификат Developer ID.

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

  2. Когда Mac App Store распространяет ваше приложение, оно подписывается кодом подписи Apple.

Для тестирования и отладки вы можете запустить обе версии вашего приложения: версию, которую вы подписываете, и версию, которую подписывает Apple. Но macOS рассматривает версию вашего приложения, подписанную Apple, как злоумышленник и не разрешает запуск: ее подпись кода не соответствует той, которую ожидает существующий контейнер вашего приложения.

Если вы попытаетесь запустить версию своего приложения, подписанную Apple, вы получите отчет о сбое, содержащий утверждение, подобное этому:

 Тип исключения: EXC_BAD_INSTRUCTION (SIGILL) 

Решение заключается в корректировке список управления доступом (ACL) в контейнере вашего приложения, чтобы распознать версию вашего приложения, подписанную Apple. В частности, вы добавляете указанное требование кода для подписанной Apple версии вашего приложения в ACL контейнера приложения.

Чтобы настроить ACL для распознавания версии вашего приложения, подписанной Apple

  1. Откройте терминал (в / Applications / Utilities) .

  2. Откройте окно Finder, которое содержит версию вашего приложения, подписанную Apple.

  3. В Терминале введите следующую команду:

     asctl container acl add -file  

    Вместо заполнителя , замените путь к подписанной Apple версии вашего приложения. Вместо того, чтобы вручную вводить путь, вы можете перетащить значок Finder приложения в окно Терминала.

ACL контейнера теперь включает указанные требования к коду для обеих версий вашего приложения. После этого macOS позволяет запускать любую версию вашего приложения.

Вы можете использовать этот же метод для совместного использования контейнера между (1) версией приложения, которую вы изначально подписали с удостоверением разработчика, например той, которую вы использовали в быстром запуске тестовой среды приложения, и (2) загруженной выпущенной версией из Mac App Store.

Список требований к коду можно просмотреть в ACL контейнера.Например, после добавления обозначенного требования к коду для версии вашего приложения, подписанной Apple, вы можете подтвердить, что ACL контейнера содержит два допустимых требования к коду.

Для отображения списка требований к коду в ACL контейнера

  1. Открытый терминал (в / Applications / Utilities) .

  2. В Терминале введите следующую команду:

     asctl container acl list -bundle <имя контейнера> 

    Вместо заполнителя <имя контейнера> замените имя вашего приложения каталог контейнера.(Имя каталога контейнера вашего приложения обычно совпадает с идентификатором пакета вашего приложения.)

Для получения дополнительной информации о работе со списками управления доступом контейнера песочницы приложения и требованиями к их коду прочтите страницу руководства для asctl ( Инструмент управления песочницей приложения).

Внешние инструменты, службы XPC и разделение привилегий

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

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

Важно: В то время как дочерний процесс, порожденный приложением (например, с помощью вилки ), просто наследует песочницу своего родителя, вспомогательные приложения - нет. Поэтому, если вы отправляете свое приложение в Mac App Store, убедитесь, что все встроенные вспомогательные приложения также изолированы отдельно.

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

 codeign -dvvv --entitlements: -  
, где - это полный путь к исполняемому двоичному файлу в вашем пакете приложений.

Разделы ниже объясняют эти концепции более подробно.

XPC Services

XPC - это технология межпроцессного взаимодействия macOS, которая дополняет тестовую среду приложения, обеспечивая разделение привилегий. Разделение привилегий , в свою очередь, представляет собой стратегию разработки, в которой вы разделяете приложение на части в соответствии с доступом к системным ресурсам, который необходим каждой части. Компоненты, которые вы создаете, называются службами XPC .

Вы создаете службу XPC как отдельную цель в своем проекте Xcode. Как правило, каждая служба получает свою собственную песочницу - в частности, она получает свой собственный контейнер и свой собственный набор полномочий. Фактически, если вы распространяете свое приложение в Mac App Store, службы XPC должны быть изолированы.Для приложений, распространяемых где-то еще, например, использующих Developer ID, изолирование служб XPC в песочнице не является обязательным, но настоятельно рекомендуется.

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

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

Напротив, дочерний процесс, созданный с помощью функции posix_spawn , путем вызова fork и exec (не рекомендуется) или с помощью класса NSTask просто наследует песочницу процесса, который его создал. Вы не можете настроить права дочернего процесса.По этим причинам дочерние процессы не обеспечивают эффективного разделения привилегий.

Чтобы использовать XPC с песочницей приложения:

  • Предоставьте минимальные привилегии каждой службе XPC в соответствии с ее потребностями.

  • Обеспечьте безопасность передачи данных между основным приложением и каждой службой XPC.

  • Правильно структурируйте пакет приложения.

Жизненный цикл службы XPC и ее интеграция с Grand Central Dispatch (GCD) полностью управляются системой.Чтобы получить эту поддержку, вам нужно только правильно структурировать пакет приложения.

Дополнительные сведения о XPC см. В разделе «Создание служб XPC» в Руководстве по программированию демонов и служб .

Запуск помощников с помощью Launch Services

Изолированному приложению разрешено запускать помощника с помощью Launch Services, если выполнено хотя бы одно из этих условий:

  • И приложение, и помощник проходят оценку Gatekeeper. По умолчанию это означает, что оба подписаны в Mac App Store или с идентификатором разработчика.

    Примечание: Это , а не , включает в себя вашу разработку («Разработчик Mac») или дистрибутив («Приложение разработчика Mac стороннего производителя»), подписывая идентификационные данные.

  • Приложение установлено в / Applications , а пакет приложений и все содержимое принадлежат пользователю root.

  • Помощник был (вручную) запущен пользователем хотя бы один раз.

Если ни одно из этих условий не было выполнено, вы увидите следующие ошибки:

  • «Запрет запуска процесса 19920» / Applications / Main.app / Contents / Resources / Helper.app ', потому что вердикт оценки безопасности был отклонен. "

    Это сообщение означает, что оценка Gatekeeper была отклонена. Вы можете подтвердить это с помощью инструмента spctl следующим образом:

     origin = Mac Разработчик  
     $ spctl --assess -vvvv /Applications/Main.app/ 
     
     /Applications/Main.app/: отклонено 
     
     $ spctl --assess -vvvv / Applications / Main.app / Contents / Resources / Helper.app / 
     
     /Applications/Main.app/Contents/Resources/Helper.app/: отклонено 
     origin = origin = Имя разработчика 
  • «Приложение« Помощник »не может быть запущено, потому что оно повреждено».

    «Операция не может быть завершена. (Ошибка OSStatus -10827.)»

    Это типичная ошибка, если ни одно из вышеперечисленных условий не было выполнено.

Результаты одинаковы независимо от того, используете ли вы Launch Services напрямую (например, вызывая LSOpenCFURLRef ) или косвенно (вызывая метод launchApplicationAtURL: options: configuration: error: в NSWorkspace , например) .

Кроме того, в случае сбоя в OS X 10.7.5 и более ранних версиях вы также увидите фиктивное нарушение deny file-write-data /Applications/Main.app/Contents/Resources/Helper.app sandbox. Эта ошибка не влияет на работу и ее можно игнорировать.

Семафоры IPC и POSIX и общая память

Обычно изолированные приложения не могут использовать Mach IPC, семафоры POSIX и разделяемую память или сокеты домена UNIX (полезно). Однако, указав право, которое запрашивает членство в группе приложений, приложение может использовать эти технологии для связи с другими членами этой группы приложений.

Примечание. Семафоры System V не поддерживаются в изолированных приложениях.

Доменные сокеты UNIX просты; они работают так же, как и любой другой файл.

Любой семафор или порт Mach, к которому вы хотите получить доступ в изолированном приложении, должны быть названы в соответствии со специальным соглашением:

  • Семафоры POSIX и имена разделяемой памяти должны начинаться с идентификатора группы приложений, за которым следует косая черта ( / ), за которым следует имя по вашему выбору.

  • Имена портов Mach должны начинаться с идентификатора группы приложений, за которым следует точка (. ), за которой следует имя по вашему выбору.

Например, если имя вашей группы приложений - Z123456789.com.example.app-group , вы можете создать два семафора с именами Z123456789.myappgroup / rdyllwflg и Z123456789.myappgroup / bluwhtflg . Вы можете создать порт Mach с именем Z123456789.com.example.app-group.Port_of_Kobe .

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

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


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

Фотоиллюстрация Ауриха Лоусона

Apple дала разработчикам еще несколько месяцев на то, чтобы либо разобраться со своими новыми требованиями к песочнице, либо попрощаться с Mac App Store. Изначально Apple установила в ноябре крайний срок для приложений, продаваемых через Mac App Store, чтобы использовать новую среду песочницы Lion для повышения безопасности, но в среду компания сообщила разработчикам, что крайний срок был перенесен на 1 марта 2012 года.

Тем не менее, хотя некоторые разработчики уже были готовы к ноябрьскому крайнему сроку, другие борются с тем, что они считают наложением ограничений или ограниченной функциональности API-интерфейсов песочницы. Ars поговорил с несколькими экспертами, чтобы понять, на какие компромиссы реализация изолированной программной среды Apple принесет как разработчикам, так и конечным пользователям.

Каждое приложение - отдельная песочница

iOS с самого начала требовала, чтобы все приложения работали в собственной «песочнице», отделенной от других приложений и являющейся частью операционной системы.Это повышает общую безопасность, поскольку приложения не могут работать грубо через другие части системы - они могут только в худшем случае разрушить свою собственную песочницу.

Наш собственный Джон Сиракуза описал песочницу в своем эпическом обзоре Lion:

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

(Обязательно щелкните ссылку, чтобы получить более подробное объяснение конкретной реализации песочницы в Mac OS X).

Как отметила Сиракуза, Apple постепенно добавляла средства песочницы в Mac OS X в течение нескольких последних версий, но добавила API, позволяющие сторонним приложениям использовать песочницу как часть Mac OS X Lion.Чтобы побудить разработчиков принять API-интерфейсы песочницы, Apple сначала установила крайний срок, в течение которого все приложения, утвержденные для распространения через Mac App Store, должны будут внедрить песочницу к ноябрю этого года.

Agile Bits быстро добавила поддержку песочницы в свое популярное приложение для хранения паролей 1Password в ожидании первоначального крайнего срока в ноябре. Хотя со стороны компании потребовалась определенная работа, включая удаление некоторых функций и гибкости из программного обеспечения, Agile Bits считает, что это был правильный путь.

Реклама

«Мы придерживаемся подхода, согласно которому клиенты не должны заботиться о таких вещах, как местонахождение своих файлов», - заявил Ars представитель Agile Bits Дэвид Чартье. «Теперь, когда мы внедрили его, в будущем он устранит для нас массу проблем с обслуживанием клиентов, например, когда люди помещают свое хранилище паролей в нестандартное место, а затем случайно кладут его в корзину или удаляют. "

Например, изолированные приложения не могут открывать и закрывать файлы в произвольных местах на диске пользователя без использования стандартных диалоговых окон открытия / сохранения.Итак, чтобы 1Password мог автоматически открываться и записывать в свою базу паролей, он должен хранить его в специальном месте файловой системы, которое может использовать только он. Это похоже на ограниченный доступ к файловой системе, наложенный на приложения iOS.

«Небольшая часть наших опытных пользователей расстроена [этим изменением], - сказал Шартье, - и я думаю, что есть несколько вещей, которые Apple могла бы сделать лучше, чтобы упростить задачу для обеих сторон. Но в целом нам нравится эта идея. песочницы, потому что ее преимущества в плане общей безопасности и упрощения для конечного пользователя того стоят.«

Рич Сигел из

Bare Bones Software согласен с тем, что в принципе песочница принесет пользу большинству пользователей. «Песочница - отличное решение проблем безопасности, которые в противном случае могли бы превратить Mac OS X в выгребную яму для вредоносных программ, - сказал он Ars, - и не подвергая пользователей ошеломляющему прогрессу диалоговых окон« Отменить или разрешить », которые приучают пользователя к нажмите "Разрешить", чтобы выполнить полезную работу ".

«Для 99,44% приложений песочница - это работоспособная технология, кривая внедрения которой очень плоская и легкая, и пользователи которой не заметят никаких функциональных различий», - сказал Сигел.«Я думаю, что наш Yojimbo в значительной степени вписывается в эту категорию. Это скорее продукт потребительского уровня, о котором я думаю, когда разрабатывалась песочница для Mac OS X».

Проблема, однако, заключается в оставшихся 0,56% приложений и сценариев использования, в которых определенные функции ожидались и использовались в течение многих лет. Например, приложения, которые могут произвольно просматривать файловую систему или указывать другим приложениям что-то делать через AppleScript или другие средства, нарушают принцип песочницы.

Потеря контроля

Песочница предназначена для предотвращения того, чтобы приложения выполняли действия, не предназначенные для пользователей, например e.g., взломанное приложение захватывает сеть и используется для атаки типа «отказ в обслуживании». «Однако проблема возникает в случае« неявного намерения пользователя », когда есть вещи, которые пользователь действительно хочет делать, но не запрашивает действие напрямую», - пояснил Сигел. Редактор BBEdit Bare Bones, если бы он был изолирован, не смог бы выполнять многофайловый поиск и замену, отображать текущие представления папок для полных программных проектов или интегрироваться с системами контроля версий.

Реклама

«Вы быстро начинаете сталкиваться с проблемами, если эта песочница доводится до строгого и / или логического завершения», - сказал Сигел.«Я уверен, что есть много компаний, которые построили рабочие процессы автоматизации, которые фанатичная песочница полностью сломала бы».

Еще одно популярное приложение, которое невозможно перевести в изолированную среду Apple, - это приложение Panic Transmit FTP. «Прямое отображение или взаимодействие с содержимым диска запрещено», - говорит Кабель Сассер из Panic. Разработчики могут запросить у Apple конкретные исключения для различных ограничений в каждом конкретном случае, но Apple сообщила разработчикам, что исключения будут предоставляться только на ограниченный период времени и быстро отменяться после нового крайнего срока 1 марта.

Apple могла бы смягчить некоторые проблемы с помощью улучшенных API для разработчиков. «Я думаю, что Apple предстоит пройти долгий путь, чтобы предоставить эквивалентные новые API-интерфейсы для всех вещей, которые в настоящее время приложения Mac выполняют« старым небезопасным »способом», - сказал Сиракуза. «Можно представить себе набор API доступа к файловой системе, которые также проходят через доверенного посредника, но это может быть проблемой для разработчиков и Apple».

Проблема, по мнению многих, в том, что разработчики будут вынуждены либо удалить функции, на которые пользователи привыкли полагаться, либо просто не будут продавать свое программное обеспечение через Mac App Store.«Выбор, который предоставляется вам как разработчику, - это выбор Хобсона», - сказал Сигел. "Ответ, похоже, не продавать через Mac App Store, что на самом деле вовсе не ответ, потому что не быть в Mac App Store - это не вариант, если вы не желаете уйти от большей части своей аудитории. . И ни один здравомыслящий бизнесмен не стал бы так поступать ».

Таким образом, разработчики могут продолжать создавать приложения с полной функциональностью, по крайней мере, на данный момент, но из-за популярности Mac App Store они могут охватить только сокращающуюся аудиторию.Или они могут ограничить функциональность и привлечь более широкую аудиторию, но приложение может плохо продаваться, если оно не работает.

Кроме того, ограничения, которые Apple налагает через песочницу, также могут не принести ожидаемых преимуществ безопасности. «Я не думаю, что это пойдет на пользу безопасности», - сказал Ars Джонатан Здзярски, эксперт по компьютерной криминалистике и безопасности. «У Apple уже есть довольно приличная реализация безопасности, включающая FileVault 2, рандомизацию разметки адресного пространства (ASLR) и, конечно же, всю безопасность, которая есть в операционной среде Unix, которая отлично работала последние 30 лет.«

Значительным недостатком, таким образом, может быть полный контроль Apple над тем, какие приложения могут запускаться в вашей системе. «Песочница сильно ограничит функциональность приложений Mac и может даже сделать невозможным использование некоторых приложений», - предупредил Здзярски. «На самом деле вопрос в том, связано ли это с безопасностью или намерением Apple контролировать то, что установлено на рабочем столе. Это прокладывает путь к блокировке настольных компьютеров так же, как заблокированы iPhone или iPad, по сути, искоренение любых разработок, не санкционированных Apple.«

Хотя мы привыкли принимать эти ограничения на наших iPhone и iPad, готовы ли мы отказаться от этого контроля на рабочем столе? Пользователи с менее техническими знаниями могут приветствовать улучшенную безопасность и простоту, не задумываясь дважды о возможности произвольного просмотра файловой системы или создания сценариев между приложениями. Мы точно так же уверены, что большинство читателей Ars решительно скажут «ни за что!»

Изображение из объявления Фото иллюстрация Ауриха Лоусона

Что такое песочница? Определение из SearchSecurity

Что такое песочница?

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

Разработчики программного обеспечения используют песочницы для тестирования нового программного кода. Специалисты по кибербезопасности используют песочницы для тестирования потенциально вредоносного программного обеспечения. Без песочницы программное обеспечение или приложения могли бы иметь потенциально неограниченный доступ ко всем пользовательским данным и системным ресурсам в сети.

Песочницы

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

Важность песочниц

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

Sandboxing защищает критически важную инфраструктуру организации от подозрительного кода, поскольку он выполняется в отдельной системе. Это также позволяет ИТ-специалистам тестировать вредоносный код в изолированной тестовой среде, чтобы понять, как он работает, а также быстрее обнаруживать подобные атаки вредоносного ПО.

Использование песочниц

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

Песочница - важная особенность языка программирования Java и среды разработки, где песочница - это программная область и набор правил, которые программисты должны использовать при создании кода Java, называемого апплетом, который отправляется как часть веб-страницы. .

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

Песочница API предназначена для разработчиков и тестировщиков API. Он имитирует характеристики производственной среды для создания смоделированных ответов для API, отражающих поведение реальной системы.

Песочница Java Аплеты

Java автоматически отправляются в браузер пользователя как часть передачи веб-страницы и могут быть выполнены, как только они поступят в браузер.Без какой-либо другой защиты вредоносный код мог работать без ограничений и легко причинять вред. Использование песочницы для изоляции кода может помочь защитить как от злонамеренных атак, так и от вреда, наносимого ошибочными программами Java, с неограниченным доступом к памяти или службам операционной системы (ОС). Ограничения песочницы строго ограничивают, какие системные ресурсы апплет может запрашивать или к которым может получить доступ.

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

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

Скомпилированный код

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

В исходной модели безопасности песочницы код песочницы обычно известен как ненадежный код . В более поздних версиях Java Development Kit (JDK) - среды разработки для программистов - песочница была сделана более сложной за счет введения нескольких уровней доверия, которые пользователь может указать для кода песочницы. Чем больше доверия вызывает пользователь, тем больше возможностей у кода «играть» за пределами песочницы.

В версии 1.1 Java Development Kit была представлена ​​концепция подписанного апплета .Апплет, сопровождаемый цифровой подписью, может содержать доверенный код, выполнение которого разрешено, если обозреватель клиента распознает подпись.

В JDK 2.0 Java обеспечивает назначение различных уровней доверия всему коду приложения, независимо от того, загружен он локально или поступает из Интернета. Существует механизм для определения политики безопасности, которая проверяет весь код - подписанный или нет - во время его выполнения.

Преимущества использования песочницы

Использование «песочницы» для тестирования изменений программного обеспечения перед их запуском означает меньше проблем во время и после тестирования, поскольку среда тестирования полностью отделена от производственной среды.

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

Sandboxing также дополняет другие программы безопасности, включая программы мониторинга поведения и антивирусные программы.Он предлагает дополнительную защиту от определенных штаммов вредоносных программ, которые антивирусная программа может не обнаружить. Более продвинутое вредоносное ПО может перед запуском проверить, работает ли оно в песочнице.

Примеры использования песочницы

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

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

Приложения песочницы

Приложения-песочницы включают:

  • Содержимое подключаемого модуля браузера часто зависело от использования песочницы для просмотра содержимого, загружаемого подключаемыми модулями браузера, включая (ныне устаревшие) Microsoft Silverlight и Adobe Flash.Однако, как известно, хранить этот тип контента в безопасности было очень сложно. Хотя было безопаснее играть во Flash-игру на веб-странице, чем загружать игру и запускать ее как стандартную программу, издатели контента в значительной степени отошли от таких плагинов в пользу публикации активного контента с использованием HTML5, который включает атрибут песочницы для указания браузер, чтобы отключить любые функции, которые могут представлять угрозу безопасности.
  • PDF-файлы и другие документы могут содержать исполняемый код, поэтому в защищенном режиме Adobe Reader PDF-файлы запускаются в изолированной программной среде, что предотвращает их выход из программы просмотра PDF и создание помех для остальной части компьютера.В Microsoft Office также есть режим песочницы, который предотвращает несанкционированное вмешательство небезопасных макросов в систему. Пользователи Windows также могут использовать встроенную песочницу Windows.
  • Мобильные приложения обычно выполняются мобильными платформами в песочнице. Приложениям для iOS, Android и Windows запрещается выполнять многие функции, которые могут выполнять стандартные настольные приложения. Например, чтобы получить доступ к местоположению пользователя, он должен объявить разрешения. Кроме того, песочница изолирует приложения, не позволяя им вмешиваться друг в друга.

Патрик Франклин, автор TOCS • Христианская школа K-12 • Дошкольное учреждение • (423) 639-0791

Инструменты

Скопируйте следующие URL-адреса изображений для изображений https://www.tocsweb.com/wp-content/uploads/2017/02/tocs-logo.png https://www.tocsweb.com/wp-content/uploads/ 2016/01 / towering-oaks-crest.png Мы будем использовать приложение JSAnywhere для экспериментов с HTML. Ключевые моменты, на которые следует обратить внимание о JSAnywhere: Project - группа файлов, из которых состоит веб-сайт, в который можно добавлять дополнительные изображения. JS / HTML / CSS - нажатие вверху, открывающее три основных файла, используемых большинством веб-сайтов.Главный HTML-файл,… Читать дальше »

Воспользуйтесь приведенной ниже ссылкой для упражнений на HTML. HTML - это язык «кодирования», используемый в Интернете для создания веб-страниц. HTML использует невидимые маркеры, называемые тегами, для форматирования веб-сайта. Каждый тег может контролировать внешний вид всего, что находится внутри. Ваш сайт WordPress использует HTML, но в основном он скрыт. Примеры ТЕГОВ: подчеркнутый текст жирный текст При вводе вышеуказанного текста изменится… Подробнее »

Перейдите в Панель управления> Настройки> Чтение и настройте следующие параметры: Установите домашнюю страницу на созданную вами домашнюю страницу. Установите страницу сообщений на пустую страницу блога. страница изображений.Перейдите в раздел «Посты» на панели инструментов и удалите все посты… Читать дальше »

Нажмите, чтобы увидеть сегодняшнее задание.

Создание постов и страниц с помощью WordPress

Composite Photograph Используйте свое собственное устройство, чтобы делать фотографии и редактировать их вместе в Sketchbook.Выберите проект ниже и подготовьтесь к нему, как описано. Используйте кампус в качестве среды для своего проекта и делайте снимки пейзажей и людей, которые будут объединены в одну фотографию (будьте осторожны, чтобы сопоставить цвет, тени / освещение и высоту по вертикали, где… Читать дальше »

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

Нет отрывка, потому что это защищенный пост.

Посмотрите фотографии ниже, чтобы узнать о новых инструментах, о которых мы узнаем сегодня. Нажмите на слой, чтобы скопировать и патентовать. Добавление цвета ко всей области и тексту с верхней панели инструментов… Маска - подумайте о малярной ленте - помогает вам изменить только одну часть фотографии, не изменяя другие части. Используйте фотографии ниже со своим… Читать дальше »

Загрузите изображения ниже на свои iPad.Сохраните их в приложении для фотографий (оно же «Фотопленка»). Откройте подходящие фотографии в Sketchbook и объедините их в одну фотографию; на фотографии все объекты должны смотреть в камеру. Сохраните готовую фотографию в своем фото-приложении. Создайте новый пост на своем сайте и загрузите готовые изображения. Поделиться

Архитектура

Windows Sandbox - безопасность Windows

  • 2 минуты на чтение

В этой статье

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

Динамически генерируемое изображение

Вместо того, чтобы требовать отдельную копию Windows для загрузки песочницы, технология Dynamic Base Image использует копию Windows, уже установленную на хосте.

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

Перед установкой Windows Sandbox пакет динамического базового образа сохраняется в виде сжатого пакета размером 30 МБ. После установки динамический базовый образ занимает около 500 МБ дискового пространства.

Управление памятью

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

Совместное использование памяти

Поскольку Windows Sandbox запускает тот же образ операционной системы, что и хост, он был улучшен для использования тех же страниц физической памяти, что и хост, для двоичных файлов операционной системы с помощью технологии, называемой «прямое сопоставление»."Например, когда ntdll.dll загружается в память в песочнице, он использует те же физические страницы, что и двоичные страницы при загрузке на хост. Совместное использование памяти между хостом и песочницей приводит к меньшему объему памяти, когда по сравнению с традиционными виртуальными машинами, без ущерба для ценных секретов хоста.

Встроенный планировщик ядра

В обычных виртуальных машинах гипервизор Microsoft управляет планированием виртуальных процессоров, работающих в виртуальных машинах.Windows Sandbox использует новую технологию, называемую «интегрированное планирование», которая позволяет планировщику хоста решать, когда песочница получает циклы ЦП.

Windows Sandbox использует уникальную политику, которая позволяет планировать виртуальные процессоры Sandbox как потоки хоста. Согласно этой схеме высокоприоритетные задачи на хосте могут вытеснять менее важную работу в песочнице. Это означает, что приоритет будет отдан наиболее важной работе, будь то на хосте или в контейнере.

Виртуализация графического процессора WDDM

Аппаратное ускорение рендеринга - ключ к плавному и быстрому взаимодействию с пользователем, особенно в случаях использования с интенсивным использованием графики. Microsoft работает со своими партнерами по графической экосистеме, чтобы интегрировать современные возможности виртуализации графики непосредственно в DirectX и Windows Display Driver Model (WDDM), модель драйвера, используемую Windows.

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

Чтобы воспользоваться этими преимуществами, требуется система с совместимым графическим процессором и графическими драйверами (WDDM 2.5 или новее). Несовместимые системы будут отображать приложения в Windows Sandbox с технологией рендеринга на базе ЦП от Microsoft, Windows Advanced Rasterization Platform (WARP).

Сквозная батарея

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

% PDF-1.7 % 98 0 объект > эндобдж xref 98 114 0000000016 00000 н. 0000003162 00000 п. 0000003289 00000 н. 0000004695 00000 н. 0000005152 00000 н. 0000005774 00000 н. 0000005811 00000 н. 0000005923 00000 н. 0000006319 00000 п. 0000006844 00000 н. 0000007412 00000 н. 0000008061 00000 н. 0000009116 00000 п. 0000009506 00000 н. 0000010016 00000 п. 0000010389 00000 п. 0000010503 00000 п. 0000010590 00000 п. 0000010997 00000 п. 0000011524 00000 п. 0000012699 00000 п. 0000013567 00000 п. 0000013691 00000 п. 0000014498 00000 п. 0000015455 00000 п. 0000015985 00000 п. 0000016082 00000 п. 0000016519 00000 п. 0000017092 00000 п. 0000017218 00000 п. 0000018408 00000 п. 0000019326 00000 п. 0000020263 00000 п. 0000022913 00000 п. 0000026170 00000 п. 0000030004 00000 п. 0000035213 00000 п. 0000038286 00000 п. 0000038404 00000 п. 0000038427 00000 п. 0000038505 00000 п. 0000038580 00000 п. 0000038656 00000 п. 0000038778 00000 п. 0000038927 00000 п. 0000039301 00000 п. 0000039367 00000 п. 0000039483 00000 п. 0000039506 00000 п. 0000039584 00000 п. 0000039660 00000 п. 0000039735 00000 п. 0000039856 00000 п. 0000040005 00000 п. 0000040376 00000 п. 0000040442 00000 п. 0000040558 00000 п. 0000040581 00000 п. 0000040659 00000 п. 0000041028 00000 п. 0000041094 00000 п. 0000041210 00000 п. 0000041233 00000 п. 0000041311 00000 п. 0000041386 00000 п. 0000041483 00000 п. 0000041632 00000 п. 0000042006 00000 п. 0000042072 00000 п. 0000042188 00000 п. 0000042211 00000 п. 0000042289 00000 п. 0000042364 00000 п. 0000042461 00000 п. 0000042610 00000 п. 0000042983 00000 п. 0000043049 00000 п. 0000043165 00000 п. 0000043188 00000 п. 0000043266 00000 п. 0000043388 00000 п. 0000043537 00000 п. 0000043911 00000 п. 0000043977 00000 п. 0000044093 00000 п. 0000044207 00000 п. 0000045447 00000 п. 0000045749 00000 п. 0000046119 00000 п. 0000050212 00000 п. 0000050492 00000 п. 0000050823 00000 п. 0000066776 00000 п. 0000066815 00000 п. 0000098353 00000 п. 0000098392 00000 п. 0000098513 00000 п. 0000098635 00000 п. 0000098781 00000 п. 0000098902 00000 п. 0000099048 00000 н. 0000099145 00000 п. 0000099291 00000 п. 0000099413 00000 н. 0000099559 00000 н. 0000099634 00000 п. 0000099978 00000 н. 0000100053 00000 н. 0000100482 00000 н. 0000100557 00000 н.

Ответить

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