Bookmark and Share

В будущей версии OS X появится интересная утилита под названием Gatekeeper, которая позволит вам решать, какие приложения можно устанавливать на компьютер и из каких источников. Но что она из себя представляет? Предлагаю вам перевод, пожалуй, лучшей статьи на эту тематику, которую написал один из основателей Panic Стивен Френк (Steven Frank) в блоге компании.

Mountain Lion представляет новую важную функцию безопасности, называемую Gatekeeper, которая дополнит появившуюся в Lion «песочницу». Я бы хотел рассказать, почему она важна для всех пользователей Mac.

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

Владельцы Mac в основном не сталкивались с проблемами, которые много лет подряд решают пользователи Windows. Mac OS X является довольно безопасной системой, но много безопасности не бывает. К тому же, Маки по мере роста популярности становятся более привлекательным объектом для хакеров. Рано или поздно, плохие люди уничтожают любую хорошую вещь — это неписаный закон человечества.

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

Что такое подписывание кода?

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

В буквальном смысле «ключ» представляет из себя обычное число. Оно очень большое и это важно. Если я загадаю число от 1 до 100, вероятность того, что вы отгадаете его с первой попытки, составит всего 1%. И вы уж точно отгадаете это число, если я дам вам 100 попыток. Но что делать, если бы я загадал число от 1 до 3 триллионов? Задача усложняется.

Возможно, вы хотя бы вскользь слышали о ключах шифрования и о том, что они имеют различный размер и длину (например, 40-битный, 128-битный или 256-битный). И чем он длиннее, тем сложнее его угадать, как и в приведенном мною примере. Каждый дополнительный бит, добавленный к ключу, еще сильнее усложняет расшифровку данных простым перебором всех возможных комбинаций. Этот способ в буквальном смысле слова займет тысячи лет и теряет смысл с учетом средней продолжительности жизни человека.

Но зачем нужно два ключа? В шифровании один из них называется «закрытым ключом», а другой — «открытым».

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

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

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

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

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

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

Вот тут мы и подходим к нашему новому приложению.

Роль Gatekeeper

Фактически Gatekeeper уже был встроен в iPhone и iPad с самого начала. Мы подписываем каждое iOS-приложение и отправляем его на утверждение в Apple. Компания может проверить подпись и убедиться, что программа действительно поступила от нас и не была изменена, после чего начинает процесс рассмотрения.

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

Но как добиться аналогичного уровня безопасности в OS X, которая всегда позволяла запускать неподписанный код из любого источника, и постараться не ограничивать пользователей?

Самое простое, что могла сделать Apple — это превратить Mac App Store в единственный источник Mac-приложений, отрезав все остальные пути их распространения. Проблема была бы моментально решена, но разработчики пришли бы в ярость. Почему?

Например, вы не можете просто загрузить и запустить проект с открытым исходным кодом, пока он не был направлен и допущен в App Store. Некоторое «разрушительное» программное обеспечение (вроде Napster или BitTorrent), возможно, не существовало бы на платформе Mac, поскольку оно нарушает правила App Store. Крупные компании, такие как Adobe и Microsoft, тоже отказались бы от поддержки платформы, не желая делиться 30% своих доходов за распространение через программный магазин.

Если Apple выберет этот путь, разработчики придут в ужас, включая автора. Казалось, может наступить момент, когда мы узнаем о требовании Apple продавать все Mac-приложения только через App Store. Но вместо этого, компания приложила значительные усилия, чтобы найти золотую середину. В Mountain Lion для пользователей существует три опции Gatekeeper:

  1. Вы можете запускать в системе неподписанный код. Так происходит в OS X на сегодняшний день и это похоже на взломанный iPhone.
  2. Вы можете разрешить запускать только приложения из Mac App Store. Это самый безопасный вариант, но вы не сможете работать с программным обеспечением, которое недоступно в App Store. Например, Microsoft Office или Adobe Creative Suite.
  3. Но, также, вы можете запускать Mac App Store-приложения или программы, подписанные разработчиком (это значение по умолчанию).

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

Apple попросту заблокирует мой идентификатор, если программа окажется вредоносной, и система откажется её запускать (если только вы не включите соответствующую опцию в Gatekeeper). При попытке открытия неподписанной или непроверенной программы появится всплывающее окно, и кнопка «Переместить в корзину» будет выбрана по умолчанию.

Это действительно хороший компромисс.

Правда, у меня есть некоторые сомнения, что это лишь переходной этап: как Rosetta для перехода на Intel или Carbon при переходе с OS 9 на OS X. И что однажды компания все-таки заставит устанавливать приложения только из Mac App Store.

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

Один тревожный момент

Но меня волнует одна вещь. Некоторые функции будут доступны только приложениям из Mac App Store. Наиболее яркими примерами является поддержка iCloud и Центра уведомлений. На закрытой презентации Apple спросили, будут ли эти функции доступны подписанным приложениям, которые не распространяются через App Store. К сожалению, фраза «сейчас нам нечего сказать» звучит не особенно оптимистично.

Жаль, если эта тенденция сохранится, поскольку она создаст искусственную пропасть между «App Store» и «не-Apps Store» приложениями. Дела таким образом обстоят уже сегодня: мы не можем предложить синхронизацию с iCloud в Coda 2, если вы покупаете редактор непосредственно у нас. Эту функцию получат только покупатели в App Store. Еще хуже, что нет возможности перевести существующих клиентов прямиком в магазин и не заставлять их второй раз совершать покупку.

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

Двигаясь вперед

Gatekeeper — это смелая новая функция, которая должна творить чудеса с безопасностью вашего Мака в ближайшие годы. И мы рады, что Apple продолжает агрессивно заботиться о надежности и безопасности Mac OS X.


Читайте также: