
Курируемое руководство по безопасности и конфиденциальности macOS с практическими инструкциями по моделированию угроз, шифрованию диска, настройке брандмауэра, безопасной аутентификации и укреплению сети.
Это руководство представляет собой сборник методов повышения безопасности и конфиденциальности macOS на Mac с Apple silicon. Оно рассчитано на опытных пользователей, которые хотят применять методы обеспечения безопасности, обычно используемые организациями, но также подходит новичкам, интересующимся конфиденциальностью и безопасностью.
Для Mac, управляемых организацией, см. Проект обеспечения безопасности macOS, поддерживаемый Национальным институтом стандартов и технологий США.
Это руководство предоставляется «как есть» — без каких-либо гарантий. Вы несёте полную ответственность за любые последствия его использования.
Применяйте общие рекомендации по безопасности:
Создайте модель угроз
Поддерживайте актуальность системы и программного обеспечения
softwareupdate. Ни то, ни другое не требует учётной записи Apple.Шифруйте конфиденциальные данные
Обеспечьте доступность данных
Самый важный шаг для значимого повышения безопасности и конфиденциальности — создание модели угроз: общего описания того, что вы хотите защитить, кто может попытаться получить к этому доступ, как они могут это сделать и какие меры контроля оправдывают компромиссы в удобстве использования. Это формирует понимание потенциальных противников и их мотивов, что ведёт к более надёжной защите.
Активы могут включать телефон, ноутбук, учётные данные и личную информацию, например историю просмотров.
Перечислите их в порядке важности, начиная с тех, которые больше всего стоит защищать.
Определите, от кого вы защищаетесь. Начните с определения мотивации, которую может иметь каждый противник для атаки на важные активы. Финансовая выгода является большим мотиватором для многих злоумышленников, например.
Для каждого противника перечислите, что он может и чего не может делать, ранжируя их от наименее до наиболее способных. Например, случайный вор действует оппортунистически: его, скорее всего, остановят базовые меры, такие как блокировка экрана и зашифрованное хранилище с надёжными паролями. Более изощрённому и целеустремлённому противнику может потребоваться полное выключение устройства, когда оно не используется, для очистки учётных данных из памяти и более сильных механизмов аутентификации.
Выберите лучшую контрольную меру для каждой угрозы. Например, избегайте записывать пароли на бумаге, если сосед по комнате может их найти, или зашифруйте хранилище, чтобы защитить его данные при краже.
Безопасность должна быть сбалансирована с удобством использования: каждая контрольная мера должна противодействовать некоторым возможностям противника, чтобы оправдать любые неудобства. Прекращайте добавлять защиту, когда оставшиеся риски приемлемы для ситуации. Пересматривайте модель при изменении устройств, данных, поездок, работы или противников.
Следующая таблица является примером простой модели угроз:
Подробнее о моделировании угроз.
Аппаратное обеспечение Apple silicon предоставляет аппаратно-поддерживаемые функции безопасности, включая защиту ключей на основе Secure Enclave и более строгие параметры безопасности загрузки. Оно, как правило, является предпочтительной платформой для мер защиты, рассматриваемых в этом руководстве.
Некоторые Mac на базе Intel, особенно модели с уязвимым оборудованием эпохи T2, подвержены аппаратным уязвимостям, которые невозможно полностью устранить обновлением macOS.
Избегайте не-Apple аппаратного обеспечения под управлением macOS и систем, не поддерживающих последнюю версию macOS, поскольку Apple не исправляет все уязвимости в старых версиях.
Аксессуары Apple обычно получают обновления прошивки через macOS и поддерживают текущие функции безопасности Bluetooth. Например, конфиденциальность Bluetooth Low Energy (BLE) использует сменные адреса устройств для снижения отслеживания; сторонние аксессуары могут не поддерживать эту функцию.
Существует несколько способов установить macOS.
Устанавливайте последнюю поддерживаемую версию macOS; в новых версиях macOS содержатся исправления безопасности и другие улучшения, недоступные в предыдущих выпусках.
Во время установки Mac на Apple silicon связываются со службой активации Apple, чтобы подтвердить, что устройство не зарегистрировано как потерянное или украденное. Подробнее о том, как работает этот процесс.
Учётная запись Apple необязательна для базового использования macOS, но требуется для App Store и многих сервисов Apple. Перед включением функций ознакомьтесь с настройками конфиденциальности данных.
Включите сквозное шифрование для iCloud и проверьте данные учётной записи Apple.
App Store — это платформа распространения программного обеспечения, где приложения проверяются компанией Apple.
Приложения App Store обязаны использовать App Sandbox и Hardened Runtime (функции безопасности, ограничивающие возможности приложений, что затрудняет некоторые атаки). Также доступны автоматические обновления программного обеспечения.
Использование App Store требует учётной записи Apple, что может представлять риск для конфиденциальности.
Виртуализация позволяет запускать другую операционную систему в изолированной виртуальной машине. На Apple silicon macOS может запускать поддерживаемые гостевые системы macOS и Windows 11 для ARM с помощью таких приложений, как:
[!WARNING] VMware требует учётную запись Broadcom и принятие соглашений перед загрузкой. Parallels требует учётную запись, платёжные данные и другую информацию — см. уведомление о конфиденциальности.
Apple Container — это инструмент командной строки для запуска Linux-контейнеров на macOS. В отличие от сред выполнения контейнеров, которые используют одну общую виртуальную машину Linux, Apple Container запускает каждый контейнер в изолированной легковесной виртуальной машине, используя возможности виртуализации macOS. Это обеспечивает более прочную границу изоляции между рабочими нагрузками и хост-операционной системой.
Когда macOS запускается в первый раз, Ассистент настройки требует создания основной учётной записи.
Задайте длинный и уникальный пароль. Оставьте поле подсказки для пароля пустым.
Избегайте личных имен: имя компьютера (например, «MacBook Джона Эпплсида») передаётся по локальной сети и видно другим устройствам.
Имя системы можно настроить в Системных настройках > О системе или с помощью команд scutil:```bash
sudo scutil --set ComputerName MacBook
sudo scutil --set HostName MacBook
sudo scutil --set LocalHostName MacBook
# Администратор и пользовательские учетные записи
Первая созданная учетная запись является учетной записью администратора. Администраторы могут изменять общесистемные настройки и выполнять команды с помощью [sudo](https://en.wikipedia.org/wiki/Sudo), который временно предоставляет повышенные привилегии. Любая программа, запущенная администратором, может получить такой же доступ; в sudo также могут быть [уязвимости](https://bogner.sh/2014/03/another-mac-os-x-sudo-password-bypass/).
Рекомендуется использовать выделенную стандартную учетную запись для обычной повседневной работы и применять учетную запись администратора только для установки программного обеспечения и системных настроек, конфигурации и обновлений — это считается [лучшей практикой](https://help.apple.com/machelp/mac/10.12/index.html#/mh11389).
Нет необходимости когда-либо входить в учетную запись администратора через экран входа macOS. Когда команде Terminal требуются привилегии администратора, система запросит аутентификацию, и Terminal продолжит использовать эти привилегии. Для этого Apple предоставляет [рекомендации](https://support.apple.com/102099) по скрытию учетной записи администратора и ее домашнего каталога.
## Предостережения
- Только администраторы могут устанавливать приложения в общесистемный каталог `/Applications`. Finder и Installer запрашивают у стандартного пользователя ввод учетных данных администратора, когда требуется одобрение. Некоторые приложения можно установить в `~/Applications`; приложения, не требующие прав администратора, следует устанавливать в пользовательский каталог. Приложения из App Store по-прежнему устанавливаются в `/Applications` и не требуют дополнительной аутентификации.
- Стандартный пользователь обычно не имеет права использовать `sudo`. Когда требуются привилегии администратора, macOS запрашивает учетные данные администратора, либо задачу можно выполнить из учетной записи администратора.
- Системные настройки и некоторые системные утилиты (например, Wi-Fi Diagnostics) требуют разрешения администратора для полной функциональности. Некоторые разделы Системных настроек необходимо разблокировать, выбрав значок замка. Некоторые приложения просто запрашивают аутентификацию при открытии, другие должны быть открыты непосредственно из учетной записи администратора для доступа ко всем функциям (например, Console).
- Некоторые сторонние приложения предполагают, что текущий пользователь является администратором, и не будут работать из стандартной учетной записи.
- См. [issue 167](https://github.com/drduh/macOS-Security-and-Privacy-Guide/issues/167) для дополнительных сведений.
## Настройка
Учетные записи можно создавать и администрировать в Системных настройках. На существующих системах обычно проще создать вторую учетную запись администратора, а затем изменить исходную учетную запись с администраторской на стандартную. На новых установленных системах после настройки следует добавить стандартную учетную запись.
Понизить уровень учетной записи можно из новой учетной записи администратора в Системных настройках.
См. также [этот пост](https://superuser.com/a/395738) для получения дополнительной информации о том, как macOS определяет членство в группах.
# Прошивка
Убедитесь, что безопасность прошивки установлена на [Full Security](https://support.apple.com/guide/mac-help/mchl768f7291/mac), чтобы предотвратить вмешательство в систему. Это настройка по умолчанию.
# FileVault
Mac на Apple silicon по умолчанию используют аппаратное шифрование хранилища. [FileVault](https://support.apple.com/guide/mac-help/protect-data-on-your-mac-with-filevault-mh11785/mac) дополнительно требует пароль авторизованного пользователя для разблокировки загрузочного тома после перезагрузки.
На Apple silicon авторизация FileVault также защищает [прошивку](https://support.apple.com/102384), что предотвращает загрузку с чего-либо, кроме назначенного загрузочного диска, доступ к [Recovery](https://support.apple.com/guide/mac-help/macos-recovery-a-mac-apple-silicon-mchl82829c17/15.0/mac/15.0#mchl5abfbb29) и восстановление Mac с помощью режима обновления прошивки устройства (DFU).
FileVault предложит задать ключ восстановления, который при использовании следует хранить в безопасном месте. FileVault также предлагает возможность использовать iCloud для восстановления.
Проверьте состояние FileVault:```bash
fdesetup status
Режим блокировки значительно снижает поверхность атаки, отключая системные и прикладные функции, которые часто используются при сложных атаках.
Когда режим блокировки включён, в Safari есть возможность исключить доверенные веб-сайты из ограничений.
Для macOS доступно несколько типов брандмауэров.
[!NOTE] Если вредоносное ПО получит контроль администратора, оно может отключить или обойти политики брандмауэра; не полагайтесь на локальный брандмауэр как на надёжную защиту от полной компрометации системы.
Встроенный брандмауэр обеспечивает базовую защиту и блокирует только входящие соединения. Он не может отслеживать или блокировать исходящие соединения.
Управлять им можно через вкладку Брандмауэр в разделе Сеть в Системных настройках или с помощью следующей команды:```bash sudo /usr/libexec/ApplicationFirewall/socketfilterfw --setglobalstate on
### Режим скрытности
Злоумышленники часто сканируют сети, чтобы обнаружить цели для атаки. Когда включен [режим скрытности](https://support.apple.com/guide/mac-help/use-stealth-mode-to-keep-your-mac-more-secure-mh17133/mac), ответы на попытки подключения к закрытым портам не отправляются, что делает систему более труднодоступной для обнаружения.
Включите режим скрытности:```bash
sudo /usr/libexec/ApplicationFirewall/socketfilterfw --setstealthmode on
По умолчанию брандмауэр разрешает входящие подключения для программного обеспечения, подписанного Apple или идентифицированным разработчиком. Отключение этих правил заставляет macOS спрашивать разрешение перед тем, как разрешить приложению принимать входящие подключения:```bash sudo /usr/libexec/ApplicationFirewall/socketfilterfw --setallowsigned off sudo /usr/libexec/ApplicationFirewall/socketfilterfw --setallowsignedapp off
### Перезагрузка брандмауэра
После изменения настроек с помощью `socketfilterfw` перезагрузите службу брандмауэра, чтобы применить новую конфигурацию:```bash
sudo pkill -HUP socketfilterfw
Подтвердить состояние брандмауэра:```bash
for firewallFlag in
--getglobalstate
--getblockall
--getallowsigned
--getstealthmode
--listapps
do /usr/libexec/ApplicationFirewall/socketfilterfw "$firewallFlag"
done
Или с помощью [system profiler](https://ss64.com/mac/system_profiler.html):```bash
system_profiler SPFirewallDataType
Включение межсетевого экрана уровня приложений и отключение входящих подключений для встроенного ПО препятствует работе AirDrop. Чтобы AirDrop работал, предоставьте исключения брандмауэра для sharingd и rapportd:```bash
sudo /usr/libexec/ApplicationFirewall/socketfilterfw --add /usr/libexec/rapportd
sudo /usr/libexec/ApplicationFirewall/socketfilterfw --add /usr/libexec/sharingd
sudo /usr/libexec/ApplicationFirewall/socketfilterfw --unblockapp /usr/libexec/rapportd
sudo /usr/libexec/ApplicationFirewall/socketfilterfw --unblockapp /usr/libexec/sharingd
## Сторонние брандмауэры
Такие приложения, как [Little Snitch](https://www.obdev.at/products/littlesnitch/index.html), [Radio Silence](https://radiosilenceapp.com/) и [LuLu](https://objective-see.com/products/lulu.html), обеспечивают баланс между удобством использования и безопасностью.
Эти программы способны отслеживать и блокировать как входящие, так и исходящие соединения. Однако для них может потребоваться [системное расширение](https://support.apple.com/HT210999) с закрытым исходным кодом.
Если частые запросы на разрешение или блокировку становятся утомительными, временно разрешите соединения, одновременно записывая их ([режим Silent Allow](https://help.obdev.at/littlesnitch6/concepts-opmodes) в Little Snitch). Изучите конфигурацию, чтобы понять и контролировать сетевую активность.
## Пакетный фильтр
macOS также включает [pf](https://en.wikipedia.org/wiki/PF_(firewall)) — межсетевой экран с фильтрацией пакетов, настраиваемый из командной строки. Он мощный, но значительно сложнее встроенного брандмауэра приложений.
pf также можно управлять с помощью графического приложения, например [Murus](https://www.murusfirewall.com/).
Многие [книги](https://nostarch.com/book-of-pf-4e) и [руководства](https://www.openbsd.org/faq/pf/) посвящены межсетевому экрану pf. В следующем примере показано, как настроить базовую политику.
### Пример конфигурации pf
Добавьте следующие правила в файл с именем `pf.rules`:```console
# Define interface
wifi = "en0"
# Global options
set block-policy drop
set skip on lo0
set state-policy if-bound
set ruleset-optimization basic
# Normalize
scrub in on $wifi all fragment reassemble
# Define tables
table <blocklist> persist
# Deny and log blocked traffic
block log all
block quick from no-route to any
antispoof quick for $wifi
# Enforce blocklist
block log quick on $wifi from <blocklist> to any
block log quick on $wifi from any to <blocklist>
# Allow DHCP
pass out on $wifi proto udp from any port 68 to any port 67 keep state
pass in on $wifi proto udp from any port 67 to any port 68 keep state
# Allow outbound TCP
pass out on $wifi proto tcp from ($wifi) to any flags S/SA keep state
# Allow outbound UDP
pass out on $wifi proto udp from ($wifi) to any keep state
# Allow outbound ICMP (ping)
pass out on $wifi proto icmp from ($wifi) to any keep state
An advanced example of configuring pf is available in pf/pf.rules.
Для управления межсетевым экраном:
| Command | Task |
|---|---|
sudo pfctl -e -f pf.rules | включить межсетевой экран с файлом конфигурации |
sudo pfctl -t blocklist -T add 1.2.3.4 | добавить IPv4-адрес в таблицу blocklist |
sudo pfctl -d | отключить межсетевой экран |
Для мониторинга межсетевого экрана:
pf может блокировать диапазоны сетевых адресов, например, целую организацию. Запросите Merit RADb для получения списка сетей, используемых автономной системой (большая сеть, управляемая одной организацией), например Facebook:```bash whois -h whois.radb.net '!gAS32934'
Добавьте возвращённый список сетей в блок-лист:```bash
sudo pfctl -t blocklist -T add $(whois -h whois.radb.net '!gAS32934' | sed -n '2p')
Подтвердите, что адреса были добавлены:```console $ sudo pfctl -t blocklist -T show No ALTQ support in kernel ALTQ related functions disabled 31.13.24.0/21 31.13.64.0/24 157.240.0.0/16 ...
Убедитесь, что сетевой трафик к этим адресам заблокирован (DNS-запросы по-прежнему будут работать):```console
$ dig a +short facebook.com
157.240.2.35
$ curl --connect-timeout 5 -I https://facebook.com/
* Trying 157.240.2.35...
* TCP_NODELAY set
* Connection timed out after 5002 milliseconds
* Closing connection 0
curl: (28) Connection timed out after 5002 milliseconds
$ sudo tcpdump -tqni pflog0 'host 157.240.2.35'
IP 192.168.1.1.62771 > 157.240.2.35.443: tcp 0
IP 192.168.1.1.62771 > 157.240.2.35.443: tcp 0
IP 192.168.1.1.62771 > 157.240.2.35.443: tcp 0
Брандмауэр отбрасывает начальные пакеты, необходимые для установления TCP-соединения, поэтому соединение истекает по тайм-ауту.
См. drduh/config/scripts/pf-blocklist.sh для дополнительных идей.
Многие системные и пользовательские фоновые службы управляются launchd.
Учетные записи администратора могут изменять службы и расширения в Системных настройках.
Чтобы прочитать конфигурацию службы:```bash defaults read /System/Library/LaunchAgents/com.apple.Finder
> [!IMPORTANT]
> Системные службы защищены с помощью [SIP](https://github.com/drduh/macOS-Security-and-Privacy-Guide#system-integrity-protection); отключение SIP для изменения системных служб может поставить под угрозу безопасность и вызвать нестабильность системы.
Чтобы просмотреть статус служб:```bash
find /var/db/com.apple.xpc.launchd \
-type f -print -exec defaults read {} \; 2>/dev/null
Дополнительную информацию см. в разделах управление скриптами с помощью launchd и launchd.info.
Предложения Siri и Spotlight могут отправлять в Apple некоторые запросы или сведения об использовании, в зависимости от включённых функций. В Системных настройках найдите Siri и Spotlight, затем отключите онлайн-предложения и настройте категории, которые следует исключить из индексации или предложений. Ознакомьтесь с политикой Apple «Поиск и конфиденциальность» для получения дополнительной информации.
Если программа недоступна в App Store, рассмотрите возможность использования Homebrew.
[!IMPORTANT] Некоторые процессы установки или управления Homebrew могут запрашивать разрешения на управление приложениями (App Management) или полный доступ к диску. Предоставляйте эти разрешения только тогда, когда они полностью понятны и необходимы.
Периодически запускайте brew upgrade в доверенных и безопасных сетях для установки обновлений программного обеспечения. Чтобы получить информацию о пакете перед установкой, выполните brew info <package> и просмотрите его формулу онлайн. Включите дополнительные параметры безопасности, например HOMEBREW_NO_INSECURE_REDIRECT=1
Согласно анонимной аналитике Homebrew, Homebrew собирает анонимные данные об использовании и отправляет их в самостоятельно размещённый экземпляр InfluxDB.
Чтобы отказаться от аналитики Homebrew, выполните brew analytics off или задайте HOMEBREW_NO_ANALYTICS=1 в стартовом файле оболочки.
В macOS есть «профили конфигурации DNS» для настройки шифрованного DNS, фильтрации и DNSSEC.
Профили DNS можно создать или получить от таких провайдеров, как Quad9, AdGuard и NextDNS.
Используйте файл hosts, чтобы блокировать домены, связанные с вредоносным ПО, рекламой и другими нежелательными сервисами.
Чтобы заблокировать домен по A-записи, добавьте одну из следующих строк в /etc/hosts:```
0 example.com
0.0.0.0 example.com
127.0.0.1 example.com
> [!NOTE]
> В IPv6 используются AAAA-записи, а не A-записи: блокируйте IPv6-подключения, добавляя записи вида `::1 example.com`.
В интернете доступно множество списков доменов. Прежде чем добавлять какой-либо из них в `/etc/hosts`, убедитесь, что каждая запись начинается с `0`, `0.0.0.0` или `127.0.0.1`, и сохраните запись `127.0.0.1 localhost`.
Популярные списки hosts:
- [StevenBlack/hosts](https://github.com/StevenBlack/hosts)
- [Sinfonietta/hostfiles](https://github.com/Sinfonietta/hostfiles)
- [someonewhocares.org](https://someonewhocares.org/hosts/zero/hosts)
Чтобы загрузить список и добавить его в файл hosts, используйте команду [tee](https://man7.org/linux/man-pages/man1/tee.1.html):```bash
curl https://raw.githubusercontent.com/StevenBlack/hosts/master/hosts |
sudo tee -a /etc/hosts
Little Snitch также поддерживает блок-списки.
Чтобы зашифровать DNS-трафик, рассмотрите DNSCrypt/dnscrypt-proxy. При настройке с доверенным резолвером DNSCrypt шифрует DNS-запросы. DNSSEC дополнительно может проверять подписанные DNS-ответы там, где это поддерживается.
Установите DNSCrypt через Homebrew и следуйте инструкциям, чтобы настроить и запустить dnscrypt-proxy:```bash
brew install dnscrypt-proxy
При использовании DNSCrypt с Dnsmasq найдите файл конфигурации DNSCrypt, выполнив следующую команду:```bash
brew info dnscrypt-proxy | grep dnscrypt-proxy.toml | head -1
Эта команда должна вывести путь, например /opt/homebrew/etc/dnscrypt-proxy.toml.
По умолчанию dnscrypt-proxy прослушивает 127.0.0.1:53 и отправляет запросы одному или нескольким настроенным DNS-провайдерам. Измените конфигурацию и укажите в listen_addresses порт, отличный от 53, например 5355:```toml
listen_addresses = ['127.0.0.1:5355', '[::1]:5355']
Запуск DNSCrypt:```bash
sudo brew services restart dnscrypt-proxy
Убедитесь, что DNSCrypt запущен:```console $ sudo lsof +c 15 -Pni UDP:5355 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME dnscrypt-proxy 15244 nobody 7u IPv4 0x1337f85ff9f8beef 0t0 UDP 127.0.0.1:5355 dnscrypt-proxy 15244 nobody 10u IPv6 0x1337f85ff9f8beef 0t0 UDP [::1]:5355 dnscrypt-proxy 15244 nobody 12u IPv4 0x1337f85ff9f8beef 0t0 UDP 127.0.0.1:5355 dnscrypt-proxy 15244 nobody 14u IPv6 0x1337f85ff9f8beef 0t0 UDP [::1]:5355
Кроме того, эти правила pf блокируют обычный DNS-трафик на порт 53 за пределами интерфейса loopback, чтобы снизить риск [утечек DNS](https://dnsleaktest.com/):```console
block drop quick on !lo0 proto udp from any to any port = 53
block drop quick on !lo0 proto tcp from any to any port = 53
dnsmasq может кэшировать ответы, предотвращать вышестоящие запросы для неквалифицированных имён и блокировать целые домены верхнего уровня.
Используйте его в сочетании с DNSCrypt для шифрования DNS-трафика.
Если вы не используете DNSCrypt, как минимум выберите DNS-резолвер, отличный от того, который предоставляет интернет-провайдер. Две популярные альтернативы: Google DNS и OpenDNS.
Установите Dnsmasq:```bash brew install dnsmasq
Скачайте и отредактируйте [drduh/config/dnsmasq.conf](https://github.com/drduh/config/blob/main/dnsmasq.conf) или файл конфигурации по умолчанию.
Примеры списков доменов, которые можно добавить для блокировки определённых адресов, смотрите в [drduh/config/domains](https://github.com/drduh/config/tree/main/domains).
Установите и запустите программу (для привязки к [привилегированному порту](https://unix.stackexchange.com/questions/16564/why-are-the-first-1024-ports-restricted-to-the-root-user-only) 53 требуются права sudo):```bash
sudo brew services start dnsmasq
Чтобы настроить dnsmasq в качестве локального DNS-сервера, откройте Системные настройки > Сеть и выберите используемое в данный момент сетевое подключение (например, Wi-Fi), затем откройте вкладку DNS, выберите + и добавьте 127.0.0.1, или используйте:```bash
sudo networksetup -setdnsservers "Wi-Fi" 127.0.0.1
Убедитесь, что Dnsmasq настроен:```console
$ scutil --dns | head
DNS configuration
resolver #1
search domain[0] : whatever
nameserver[0] : 127.0.0.1
flags : Request A records, Request AAAA records
reach : 0x00030002 (Reachable,Local Address,Directly Reachable Address)
$ networksetup -getdnsservers "Wi-Fi"
127.0.0.1
[!NOTE] Некоторые VPN-приложения переопределяют настройки DNS при подключении. См. issue 24 и drduh/config/scripts/macos-dns.sh.
macOS включает набор доверенных корневых центров сертификации (CA), управляемых корпорациями, правительствами и другими организациями по всему миру. Доверенный CA может выпускать сертификаты, которые macOS и браузеры могут принимать для HTTPS-соединений, что делает хранилище корневых CA критически важной частью доверительной границы системы.
Проверьте System Roots, чтобы понять, как выглядит предоставляемое Apple хранилище доверенных корней, с помощью Keychain Access или инструмента командной строки security и файла /System/Library/Keychains/SystemRootCertificates.keychain. Keychain Access также можно запустить командой:```bash
open "/System/Library/CoreServices/Applications/Keychain Access.app"
Также проверьте все сертификаты, которые могли быть добавлены пользователем, администратором, VPN-клиентом, средством безопасности или приложением управления мобильными устройствами, в связках ключей **login**, **Local Items** и **System**.
Чтобы отключить выбранный сертификат, измените его параметр доверия на **Never Trust** и закройте окно для подтверждения. Это может снизить риск атак [MITM](https://wikipedia.org/wiki/Man-in-the-middle_attack), при которых мошеннический сертификат используется для [скрытого перехвата](https://en.wikipedia.org/wiki/DigiNotar#Issuance_of_fraudulent_certificates) зашифрованного трафика.
> [!WARNING]
> Удаление или изменение параметров доверия к центрам сертификации может нарушить работу веб-сайтов, обновлений ПО, корпоративных сетей, VPN, captive-порталов и других сервисов.
См. списки [доступных доверенных сертификатов](https://support.apple.com/103723) и [заблокированных сертификатов](https://support.apple.com/103247#blocked) Apple для получения актуальной информации о хранилище доверия.
# Privoxy
Рассмотрите возможность использования [Privoxy](https://www.privoxy.org/) в качестве локального прокси для фильтрации веб-трафика.
Установите и запустите Privoxy с помощью Homebrew:```bash
brew install privoxy
brew services start privoxy
В качестве альтернативы, подписанный установочный пакет для Privoxy доступен на их веб-сайте или Sourceforge. Подписанный пакет более безопасен, чем версия Homebrew, и получает поддержку от проекта Privoxy.
По умолчанию Privoxy прослушивает локальный TCP-порт 8118.
Установите системный HTTP-прокси для активного сетевого интерфейса на 127.0.0.1 и порт 8118:```bash
sudo networksetup -setwebproxy "Wi-Fi" 127.0.0.1 8118
Настройте системный **HTTPS** прокси:```bash
sudo networksetup -setsecurewebproxy "Wi-Fi" 127.0.0.1 8118
Прокси-сервер также можно настроить в Системные настройки > Сеть > Детали > Прокси.
Убедитесь, что прокси настроен:```console $ scutil --proxy { ExceptionsList : { 0 : *.local 1 : 169.254/16 } FTPPassive : 1 HTTPEnable : 1 HTTPPort : 8118 HTTPProxy : 127.0.0.1 HTTPSEnable : 1 HTTPSPort : 8118 HTTPSProxy : 127.0.0.1 }
Хотя большая часть веб-трафика зашифрована, Privoxy может фильтровать запросы по имени хоста. Например, следующие правила блокируют весь трафик, кроме трафика к доменам .net, github.com и Apple:```console
{ +block{all} }
.
{ -block }
.apple.
.github.com
.net
Чтобы заблокировать домены Facebook:```console { +block{facebook} } .cdninstagram. .facebook*. .fb. .fbcdn*. .fbinfra. .fbsbx. .fbstatic*. .fbsv. .fburl. .instagr.am .tfbnw. .thefacebook. fb*.akamaihd.net
См. [drduh/config/privoxy/config](https://github.com/drduh/config/blob/main/privoxy/config) и [drduh/config/privoxy/user.action](https://github.com/drduh/config/blob/main/privoxy/user.action) для дополнительных примеров Privoxy. Privoxy **не** нужно перезапускать после редактирования правил фильтрации.
Чтобы проверить, блокируется или перенаправляется ли трафик, используйте [curl](https://en.wikipedia.org/wiki/CURL) или откройте интерфейс Privoxy по адресу <http://p.p> в браузере:```console
$ ALL_PROXY=127.0.0.1:8118 curl example.com -IL | head
HTTP/1.1 403 Request blocked by Privoxy
Content-Length: 9001
Content-Type: text/html
Cache-Control: no-cache
Pragma: no-cache
$ ALL_PROXY=127.0.0.1:8118 curl github.com -IL | head
HTTP/1.1 302 Local Redirect from Privoxy
Location: https://github.com/
Content-Length: 0
HTTP/1.1 200 Connection established
HTTP/2 200
content-type: text/html; charset=utf-8
[!NOTE] Приложения и службы могут игнорировать настройки прокси. pf может перенаправлять трафик через прокси без отдельной настройки каждого приложения.
Веб-браузеры создают значительные риски для безопасности и конфиденциальности, поскольку они загружают и выполняют недоверенный интернет-контент.
Ключевая граница безопасности браузера — политика одинакового источника (SOP), которая не позволяет одному веб-сайту читать данные другого веб-сайта. Её обход может раскрыть данные или действия с других сайтов в том же профиле браузера.
Некоторые атаки на браузер основаны на том, чтобы убедить пользователя установить программное обеспечение, предоставить разрешения или использовать вредоносное расширение. Будьте особенно осторожны с неожиданными загрузками, запросами расширений и просьбами выполнять команды в Терминале.
Расширения браузера также представляют значительный риск для безопасности: вредоносное или плохо сделанное расширение может скомпрометировать всё в браузере, включая учётные данные. Использование расширений браузера следует ограничивать только критически необходимыми, опубликованными доверенными разработчиками.
Используйте отдельные профили браузера для разных личностей и целей. Если это практично, отключите JavaScript и разрешайте его только на доверенных сайтах с помощью разрешений сайта браузера.
Mozilla Firefox, Google Chrome, Safari и Tor Browser — популярные браузеры, каждый со своими уникальными возможностями и назначением.
Firefox модернизировал значительные части своей кодовой базы в рамках проектов Quantum и Photon. Quantum включает перенос некоторых компонентов с C++ на Rust — язык программирования, разработанный для повышения безопасности памяти и безопасности параллелизма.
Firefox предлагает модель безопасности, сопоставимую с Chrome, включая программу вознаграждений за обнаружение ошибок за ответственное раскрытие уязвимостей. Firefox придерживается четырёхнедельного цикла выпуска.
См. drduh/config/firefox.user.js и arkenfox/user.js для рекомендуемых конфигураций. Также см. NoScript — расширение, которое позволяет выборочно блокировать скрипты.
Firefox уделяет внимание конфиденциальности пользователей. Он поддерживает защиту от отслеживания в режиме приватного просмотра. Защиту от отслеживания можно включить для обычной учётной записи, хотя это может ухудшить работу на некоторых сайтах. Firefox в строгом режиме защиты от отслеживания будет рандомизировать отпечатки пальцев для защиты от отслеживания. Firefox предлагает отдельные профили пользователя. Просмотр также можно разделять с помощью Multi-Account Containers.
Firefox поддерживает только веб-расширения через WebExtension API, который очень похож на Chrome. Подача веб-расширений в Firefox бесплатна. Веб-расширения в Firefox в большинстве случаев имеют открытый исходный код, хотя некоторые веб-расширения являются проприетарными.
Google Chrome основан на открытом проекте Chromium. Chrome включает некоторые проприетарные компоненты, автоматические обновления, просмотрщик PDF, поддержку медиа-кодеков, отправку сведений о сбоях и интеграцию с учётной записью Google. Для получения дополнительной информации ознакомьтесь с настройками конфиденциальности Chrome и политиками конфиденциальности Google.
Chrome предлагает синхронизацию учётной записи между несколькими устройствами, включая учётные данные; данные шифруются паролем учётной записи.
Chrome имеет самую большую долю мирового использования и является предпочтительной целевой платформой для большинства разработчиков. Крупные технологии основаны на открытых компонентах Chrome, таких как node.js, использующий движок V8 от Chrome, и фреймворк Electron, основанный на Chromium и node.js. Огромная база пользователей Chrome делает его самой привлекательной целью для злоумышленников и исследователей безопасности. Несмотря на постоянные атаки, Chrome на протяжении многих лет сохранял впечатляющие показатели безопасности. Это немалый подвиг.
Chrome предлагает отдельные профили, надёжную изоляцию (sandboxing), частые обновления и имеет впечатляющие показатели. Кроме того, Google предлагает очень щедрую программу вознаграждений за сообщение об уязвимостях, а также собственную команду Project Zero. Это означает, что большое количество высококвалифицированных и мотивированных людей постоянно проверяют и защищают код Chrome.
Рассмотрите возможность отключения оптимизации V8 (функций производительности JavaScript-движка) в настройках браузера — см. это объяснение о компромиссах безопасности.
Блокируйте трекеры с помощью uBlock Origin Lite.
Отключите предварительную выборку DNS (см. DNS Prefetching and Its Privacy Implications). Chrome может пытаться разрешать DNS с использованием публичных DNS-серверов Google 8.8.8.8 и 8.8.4.4.
См. Безопасность Chromium и Конфиденциальность Chromium для получения дополнительной информации. Прочтите политику конфиденциальности Google, чтобы понять, как собираются и используются личные данные.
Safari — встроенный браузер Apple, интегрированный с macOS и обеспечивающий повышение эффективности работы от аккумулятора на оборудовании Apple.
Safari имеет как открытые, так и проприетарные компоненты. Safari основан на открытом веб-движке WebKit, который широко распространён в экосистеме macOS. WebKit используется приложениями Apple, такими как Mail, Books и App Store. Движок Chrome Blink является ответвлением WebKit, и оба движка имеют ряд сходств.
Safari поддерживает некоторые уникальные функции, которые повышают безопасность и конфиденциальность пользователей. Блокировщики контента позволяют создавать правила блокировки контента без использования JavaScript. Такой подход на основе правил значительно улучшает использование памяти, безопасность и конфиденциальность. Safari 11 представил Intelligent Tracking Prevention, которая удаляет данные отслеживания, хранящиеся в Safari, после периода бездействия пользователя на сайте трекера. Safari может рандомизировать отпечаток браузера для уменьшения отслеживания. Safari намеренно не поддерживает некоторые функции, такие как WebUSB или Battery API, по соображениям безопасности и конфиденциальности. Приватные вкладки в Safari имеют изолированные файлы cookie и кэш, которые уничтожаются при закрытии вкладки. Safari также поддерживает профили, эквивалентные Multi-Account Containers в Firefox, для разделения файлов cookie и просмотра. Safari можно сделать значительно более безопасным с помощью режима блокировки, который можно отключать для отдельных сайтов. Подробнее о защите от отслеживания в Safari.
Веб-расширения в Safari, помимо Web Extension API, имеют дополнительную возможность использования нативного кода в песочнице Safari. Веб-расширения в Safari также распространяются через Apple App Store. Публикация в App Store даёт дополнительное преимущество: код веб-расширений проверяется Apple. С другой стороны, публикация в App Store стоит немалых денег. Ежегодная подписка разработчика стоит 100 долларов США (в отличие от сбора в 5 долларов в Chrome и бесплатной подачи в Firefox). Высокая стоимость является препятствием для большинства разработчиков открытого ПО. В результате в Safari очень мало расширений на выбор. Однако помните о высокой стоимости при установке расширений. Ожидается, что большинство веб-расширений будут иметь какой-то способ монетизации использования для покрытия затрат на разработку. Избегайте веб-расширений без доступного для проверки открытого исходного кода.
Safari синхронизирует пользовательские настройки и пароли с iCloud Keychain. Для просмотра сохранённого пароля требуется аутентификация с помощью пароля текущей учётной записи устройства или другого настроенного метода аутентификации.
Safari внедряет новые веб-функции медленнее, чем Chrome или Firefox, но исправления безопасности доставляются быстро через системные обновления.
См. также el1t/uBlock-Safari, чтобы отключить маячки аудита гиперссылок.
Веб-сайты получают информацию о браузере и устройстве на основе настроек, шрифтов, размера экрана, языка, IP-адреса и поведения браузера. Эта информация способствует формированию цифрового отпечатка браузера.
Для получения дополнительной информации о безопасном просмотре веб-страниц и о том, какие данные отправляет браузер, см. ресурсы Как пользоваться браузером с учётом конфиденциальности и безопасности, browserleaks.com, Am I Unique? и EFF Cover Your Tracks.
Чтобы уменьшить межсайтовое отслеживание, блокируйте сторонние файлы cookie.
Также помните о WebRTC, который может раскрывать локальные или публичные (при подключении к VPN) IP-адреса. В Firefox и Chrome/Chromium эту функцию можно отключить с помощью uBlock Origin. Режим блокировки также отключает WebRTC в Safari.
Tor — это анонимная сеть, которая может обеспечить дополнительную конфиденциальность при просмотре веб-страниц. Tor Browser — это модифицированный браузер на основе Firefox, настроенный на использование сети Tor.
Скачайте Tor Browser с сайта Tor Project, включая файлы dmg и asc для проверки:```console
$ cd ~/Downloads
$ file tor-browser-macos-* tor-browser-macos-15.0.17.dmg: XZ compressed data, checksum NONE tor-browser-macos-15.0.17.dmg.asc: PGP signature Signature (old)
$ gpg --verify tor-browser-macos-*.asc [...] gpg: Can't check signature: No public key
$ gpg --auto-key-locate nodefault,wkd --locate-keys [email protected] gpg: key 0x4E2C6E8793298290: public key "Tor Browser Developers (signing key) [email protected]" imported gpg: Total number processed: 1 gpg: imported: 1 pub rsa4096/0x4E2C6E8793298290 2014-12-15 [C] [expires: 2027-07-15] Key fingerprint = EF6E 286D DA85 EA2A 4BA7 DE68 4E2C 6E87 9329 8290 uid [ unknown] Tor Browser Developers (signing key) [email protected] sub rsa4096/0x157432CF78A65729 2024-07-15 [S] [expires: 2026-10-26] Key fingerprint = CAAE 408A EBE2 288E 96FC 5D5E 1574 32CF 78A6 5729
$ gpg --verify tor-browser-macos-*.asc gpg: assuming signed data in 'tor-browser-macos-15.0.17.dmg' gpg: Signature made Sun Jun 28 15:35:20 2026 PDT gpg: using RSA key CAAE408AEBE2288E96FC5D5E157432CF78A65729 gpg: Good signature from "Tor Browser Developers (signing key) [email protected]" [unknown] gpg: WARNING: This key is not certified with a trusted signature! gpg: There is no indication that the signature belongs to the owner. Primary key fingerprint: EF6E 286D DA85 EA2A 4BA7 DE68 4E2C 6E87 9329 8290 Subkey fingerprint: CAAE 408A EBE2 288E 96FC 5D5E 1574 32CF 78A6 5729
Убедитесь, что в выводе присутствует `Good signature from "Tor Browser Developers (signing key) <[email protected]>"`. Предупреждение ожидаемо, поскольку ключ не был лично проверен и добавлен в доверенную связку ключей.
Дополнительную информацию см. в статье [Как проверить подпись Tor Browser?](https://support.torproject.org/tbb/how-to-verify-signature/).
Чтобы завершить установку Tor Browser, откройте образ диска и перетащите его в папку Applications или используйте команды:```bash
hdiutil mount tor-browser-macos-15.0.17.dmg
cp -r /Volumes/Tor\ Browser/Tor\ Browser.app/ ~/Applications/
Проверьте, что приложение подписано идентификатором разработчика Apple проекта Tor (MADPSAYN6T):```console
$ spctl --assess -vv ~/Applications/Tor\ Browser.app
/Users/user1/Applications/Tor Browser.app: accepted
source=Notarized Developer ID
origin=Developer ID Application: The Tor Project, Inc (MADPSAYN6T)
$ pkgutil --check-signature ~/Applications/Tor\ Browser.app Package "Tor Browser.app": Status: signed by a certificate trusted by macOS Certificate Chain: 1. Developer ID Application: The Tor Project, Inc (MADPSAYN6T) Expires: 2028-10-11 17:57:46 +0000 SHA256 Fingerprint: 76 3C 89 02 ED CB AD 8E 59 86 1E 93 D3 05 5B 28 F9 04 0C 96 03 8B 16 28 9F 38 64 ED 53 45 B4 DA ------------------------------------------------------------------------ 2. Developer ID Certification Authority Expires: 2031-09-17 00:00:00 +0000 SHA256 Fingerprint: F1 6C D3 C5 4C 7F 83 CE A4 BF 1A 3E 6A 08 19 C8 AA A8 E4 A1 52 8F D1 44 71 5F 35 06 43 D2 DF 3A ------------------------------------------------------------------------ 3. Apple Root CA Expires: 2035-02-09 21:40:36 +0000 SHA256 Fingerprint: B0 B1 73 0E CB C7 FF 45 05 14 2C 49 F1 29 5E 6E DA 6B CA ED 7E 2C 68 C5 BE 91 B5 A1 10 01 F0 24
Команда `codesign` также может использоваться для проверки подписи кода приложения:```console
$ codesign -dvv ~/Applications/Tor\ Browser.app
Executable=/Users/user1/Applications/Tor Browser.app/Contents/MacOS/firefox
Identifier=org.torproject.torbrowser
Format=app bundle with Mach-O universal (x86_64 arm64)
CodeDirectory v=20500 size=805 flags=0x10000(runtime) hashes=14+7 location=embedded
Signature size=9054
Authority=Developer ID Application: The Tor Project, Inc (MADPSAYN6T)
Authority=Developer ID Certification Authority
Authority=Apple Root CA
Timestamp=Jun 28, 2026 at 14:01:57
Notarization Ticket=stapled
Info.plist entries=27
TeamIdentifier=MADPSAYN6T
Runtime Version=15.5.0
Sealed Resources version=2 rules=13 files=208
Internal requirements count=1 size=188
Чтобы просмотреть полные сведения о сертификате подписанного приложения, извлеките их с помощью codesign и декодируйте с помощью openssl:```console
$ codesign -d --extract-certificates ~/Applications/Tor\ Browser.app
Executable=/Users/user1/Applications/Tor Browser.app/Contents/MacOS/firefox
$ file codesign* codesign0: Certificate, Version=3 codesign1: Certificate, Version=3 codesign2: Certificate, Version=3 Certificate, Version=02
$ openssl x509 -inform der -in codesign0 -subject -issuer -startdate -enddate -noout subject= /UID=MADPSAYN6T/CN=Developer ID Application: The Tor Project, Inc (MADPSAYN6T)/OU=MADPSAYN6T/O=The Tor Project, Inc/C=US issuer= /CN=Developer ID Certification Authority/OU=G2/O=Apple Inc./C=US notBefore=Oct 11 17:57:47 2023 GMT notAfter=Oct 11 17:57:46 2028 GMT
$ openssl x509 -inform der -in codesign0 -fingerprint -noout SHA256 Fingerprint=76:3C:89:02:ED:CB:AD:8E:59:86:1E:93:D3:05:5B:28:F9:04:0C:96:03:8B:16:28:9F:38:64:ED:53:45:B4:DA
Tor Browser может использовать специальные методы подключения, называемые [подключаемыми транспортами](https://support.torproject.org/tor-browser/circumvention/), чтобы затруднить идентификацию или блокировку трафика. Это можно сделать, настроив [ретранслятор](https://support.torproject.org/relays/) или используя существующий [мост](https://bridges.torproject.org/).
Сеть Tor обеспечивает [анонимность](https://www.privateinternetaccess.com/blog/2013/10/how-does-privacy-differ-from-anonymity-and-why-are-both-important/), что не обязательно то же самое, что приватность. Сеть не защищает от глобального наблюдателя, способного к анализу трафика и корреляции. См. также [В поисках анонимности в интернет-паноптикуме](https://bford.info/pub/net/panopticon-cacm.pdf) и [Корреляцию трафика в Tor реальными противниками](https://www.ohmygodel.com/publications/usersrouted-ccs13.pdf).
См. [Спецификацию протокола Tor](https://spec.torproject.org/tor-spec/) для получения дополнительной информации.
Также см. [Invisible Internet Project (I2P)](https://geti2p.net/en/about/intro) и его [сравнение с Tor](https://geti2p.net/en/comparison/tor).
# VPN
Выберите VPN-провайдера или самостоятельно развёрнутое решение с документированным современным протоколом и клиентами, прошедшими тщательный аудит. Избегайте устаревших протоколов, таких как [PPTP](https://en.wikipedia.org/wiki/Point-to-Point_Tunneling_Protocol#Security), в пользу [OpenVPN](https://en.wikipedia.org/wiki/OpenVPN) или [WireGuard](https://www.wireguard.com/) [на Linux VM](https://github.com/mrash/Wireguard-macOS-LinuxVM) или через набор [кроссплатформенных инструментов](https://www.wireguard.com/xplatform/).
Некоторые VPN-клиенты могут отправлять трафик через следующий доступный сетевой интерфейс при прерывании или разрыве соединения. См. [scy/8122924](https://gist.github.com/scy/8122924) для примера, как разрешить трафик только через VPN.
См. руководства по настройке VPN на основе [IPsec](https://en.wikipedia.org/wiki/Ipsec) на виртуальной машине ([hwdsl2/setup-ipsec-vpn](https://github.com/hwdsl2/setup-ipsec-vpn)) или в Docker-контейнере ([hwdsl2/docker-ipsec-vpn-server](https://github.com/hwdsl2/docker-ipsec-vpn-server)).
Возможно, стоит рассмотреть географическое расположение VPN-провайдера. Дальнейшее обсуждение см. в [issue 114](https://github.com/drduh/macOS-Security-and-Privacy-Guide/issues/114).
Также см. этот [технический обзор](https://blog.timac.org/2018/0717-macos-vpn-architecture/) встроенного в macOS VPN-клиента L2TP/IPsec и [IKEv2](https://en.wikipedia.org/wiki/IKEv2).
# PGP/GPG
PGP — это стандарт шифрования и подписи данных, особенно электронной почты. Он может защищать содержимое сообщений между корреспондентами, которые правильно обмениваются и проверяют ключи, но не защищает такие метаданные, как получатели и темы писем.
GPG (GNU Privacy Guard) — это программа с открытым исходным кодом, распространяемая под лицензией GPL и соответствующая стандарту PGP. Она может проверять подписи программного обеспечения и шифровать файлы [симметрично](https://en.wikipedia.org/wiki/Symmetric-key_algorithm) или с использованием [открытых ключей](https://en.wikipedia.org/wiki/Public-key_cryptography).
Установите GnuPG через Homebrew (`brew install gnupg`) или установите [GPG Suite](https://gpgtools.org/).
Загрузите [gpg.conf](https://github.com/drduh/YubiKey-Guide/blob/main/config/gpg.conf), чтобы использовать рекомендуемые настройки:```bash
curl -o ~/.gnupg/gpg.conf \
https://raw.githubusercontent.com/drduh/YubiKey-Guide/main/config/gpg.conf
См. drduh/YubiKey-Guide для создания учётных данных и управления ими.
Электронная почта по своей сути не обеспечивает надёжную конфиденциальность по умолчанию: содержимое сообщений может сохраняться поставщиками услуг, копироваться в почтовые ящики получателей, пересылаться или быть раскрыто в результате компрометации учётной записи. Метаданные (включая получателя, тему, временные метки и информацию о почтовом сервере) обычно остаются видимыми даже при шифровании содержимого сообщения.
Thunderbird — бесплатный почтовый клиент с открытым исходным кодом, поддерживающий стандартные IMAP, POP, CalDAV и CardDAV. Это подходящий выбор для доступа к почте и сохранения локальных копий вместо исключительной зависимости от удалённого сервера поставщика.
Thunderbird включает поддержку шифрования электронной почты OpenPGP, которое может защитить содержимое сообщений и обеспечить криптографические подписи. Всегда проверяйте отпечатки открытых ключей через независимый канал, прежде чем полагаться на ключ для конфиденциального общения.
Функция архивирования сообщений позволяет перемещать сообщения с удалённых почтовых серверов в локальную папку, повышая конфиденциальность.
XMPP — это открытый протокол, разработанный IETF, который поддерживает кроссплатформенный федеративный обмен сообщениями. Существует множество вариантов клиентов. Рассмотрите возможность использования одного из браузерных клиентов, чтобы воспользоваться песочницей браузера.
В зависимости от поставщика вам может не понадобиться ничего, кроме имени пользователя и пароля, для создания учётной записи.
XMPP не является сквозным шифрованием (E2EE) по умолчанию; используйте OMEMO с совместимым клиентом.
Signal — популярный мессенджер с сквозным шифрованием, чей протокол double-ratchet используется во многих других приложениях, включая WhatsApp, Google Messages и Facebook Messenger.
Для использования настольного приложения Signal необходимо сначала установить Signal на телефон.
Дополнительные рекомендации см. в руководстве по Signal от EFF.
iMessage — это фирменный мессенджер Apple. Для его использования требуется учётная запись Apple.
Включите проверку ключей контактов и проверяйте контакты.
iMessage можно использовать с номером телефона или адресом электронной почты.
[!WARNING] По умолчанию включена резервная копия iCloud, которая сохраняет копии ключей шифрования сообщений на серверах Apple без E2EE. Чтобы предотвратить это, либо отключите резервное копирование iCloud, либо включите расширенную защиту данных. Напомните получателям сообщений сделать то же самое.
См. Methods of malware persistence on Mac OS X и Malware Persistence on OS X Yosemite, чтобы узнать, как обычно сохраняется вредоносное ПО в macOS.
Примеры расширенных возможностей вредоносного ПО для macOS см. в материалах Hacking Team. Для дальнейшего анализа см. root installation for MacOS, support driver for Mac Agent и RCS Agent for Mac.
Также см. A Brief Analysis of an RCS Implant Installer и reverse.put.as.
Приложения из App Store или нотариально заверенные Apple могут снизить риск вредоносного ПО, но ни один из этих процессов не гарантирует безопасность. Apple выполняет автоматические проверки нотариально заверенных приложений, а приложения App Store проходят проверку. В остальных случаях получайте программное обеспечение из источников, указанных разработчиком как официальные, и убедитесь, что загрузка с веб-сайта или из командной строки использует HTTPS.
Проверьте, использует ли приложение App Sandbox:```bash
codesign --display --entitlements -
/System/Applications/Calculator.app 2>&1 |
grep -A2 com.apple.security.app-sandbox
При включенном App Sandbox вывод должен быть:```console
[Key] com.apple.security.app-sandbox
[Value]
[Bool] true
Activity Monitor также может показывать, включён ли он, при отображении столбца «Sandbox»:```bash
defaults write com.apple.ActivityMonitor "UserColumnsPerTab v6.0"
-dict-add 0 '(Command, CPUUsage, CPUTime, Threads, IdleWakeUps, Architecture, GPUUsage, GPUTime, PID, UID, Sandbox, restricted)'
Для использования App Sandbox требуется программное обеспечение App Store. Такие приложения, как Google Chrome, используют собственную [песочницу](https://chromium.googlesource.com/chromium/src/+/HEAD/docs/design/sandbox.md) и могут не использовать App Sandbox.
> [!NOTE]
> Песочница ограничивает доступ приложения по умолчанию, но entitlements и разрешения, предоставленные пользователем, могут расширять доступ.
## Hardened Runtime
Проверьте, использует ли приложение [Hardened Runtime](https://developer.apple.com/documentation/security/hardened_runtime):```bash
codesign --display --verbose /path/to/application.app
Если включен Hardened Runtime, в выводе появится flags=0x10000(runtime).
Перечислите все приложения, у которых включена эта функция:```bash for app in /Applications/.app /System/Applications/.app; do if codesign -dvv "$app" 2>&1 | grep -q 'flags=0x10000(runtime)'; then echo "$app" fi done
**Activity Monitor** имеет опцию отображения столбца "Restricted", который указывает, что программа ограничена в возможности внедрения кода через [динамический компоновщик](https://pewpewthespells.com/blog/blocking_code_injection_on_ios_and_os_x.html) macOS.
Усиленная среда выполнения является обязательным условием для нотаризации распространяемых приложений.
## Антивирус
Чтобы проверить файлы и приложения, рассмотрите возможность загрузки их на [VirusTotal](https://www.virustotal.com/gui/home/upload), помня, что это сделает их публично доступными.
macOS включает встроенное антивирусное программное обеспечение под названием [XProtect](https://support.apple.com/guide/security/protecting-against-malware-sec469d47bd8), которое работает в фоновом режиме и автоматически обновляет сигнатуры, используемые для обнаружения вредоносных программ. Если вредоносная программа обнаружена, XProtect пытается удалить её и поместить в карантин.
Проверка статуса обновления XProtect:```bash
xprotect version
Applications such as BlockBlock or hazcod/maclaunch might help prevent or detect persistent malware.
Антивирусное программное обеспечение может помочь обнаружить распространённое вредоносное ПО, но оно также может увеличить поверхность атаки, поскольку часто работает с обширными системными привилегиями. Некоторые продукты также могут отправлять телеметрию или образцы вендору.
См. Sophail: Прикладные атаки на антивирусы, Анализ и эксплуатация уязвимости ESET, Популярное защитное ПО подверглось безжалостным атакам АНБ и GCHQ и Как Израиль поймал российских хакеров, искавших по всему миру американские секреты.
Gatekeeper проверяет нотариальное заверение и происхождение программного обеспечения.
Gatekeeper предупреждает при открытии приложения без нотариального заверения. Его можно обойти, выбрав приложение в списке Системные настройки > Конфиденциальность и безопасность после неудачной попытки.
Проверьте, включён ли Gatekeeper:```bash spctl --status --verbose
# Защита целостности системы
Чтобы проверить, включена ли защита целостности системы, используйте команду `csrutil status`, которая должна вернуть: `System Integrity Protection status: enabled.` В противном случае [включите SIP](https://developer.apple.com/documentation/security/disabling_and_enabling_system_integrity_protection) с помощью [режима восстановления](https://support.apple.com/102518).
# Метаданные и артефакты
macOS добавляет к файлам метаданные ([расширенные атрибуты APFS](https://en.wikipedia.org/wiki/Extended_file_attributes#macOS)).
Некоторые атрибуты метаданных можно просматривать и удалять с помощью команд [`mdls`](https://ss64.com/mac/mdls.html) и [`xattr`](https://ss64.com/mac/xattr.html). Файлы параметров (`plist`) можно читать и изменять с помощью [`defaults`](https://ss64.com/mac/defaults.html).
Метаданные системы и приложений можно найти в:
- `~/Library/Preferences/`
- `~/Library/Containers/<APP>/Data/Library/Preferences`
- `/Library/Preferences`
Информация Bluetooth:
- `/Library/Preferences/com.apple.Bluetooth.plist`
Кэш заданий печати:
- `/var/spool/cups`
Ранее подключённые устройства iOS:
- `/Users/$USER/Library/Preferences/com.apple.iPod.plist`
- `/Library/Preferences/com.apple.iPod.plist`
Параметры Finder:
- `~/Library/Preferences/com.apple.finder.plist`
- `~/Library/Preferences/com.apple.sidebarlists.plist`
Диагностические данные:
- `/var/db/CoreDuet`
- `/var/db/diagnostics`
- `/var/db/systemstats`
- `/var/db/uuidtext`
- `/var/log/DiagnosticMessages`
Подсказки по правописанию и языку:
- `~/Library/LanguageModeling`
- `~/Library/Spelling`
- `~/Library/Suggestions`
Состояние приложений:
- `~/Library/Saved\ Application\ State`
- `~/Library/Containers/<APPNAME>/Data/Library/Saved\ Application\ State`
Метаданные автосохранения:
- `~/Library/Containers/<APP>/Data/Library/Autosave\ Information`
- `~/Library/Autosave\ Information`
Аналитика Siri:
- `~/Library/Assistant/SiriAnalytics.db`
История QuickTime Player:
- `~/Library/Containers/com.apple.QuickTimePlayerX/Data/Library/Preferences/com.apple.QuickTimePlayerX.plist`
Прочие метаданные:
- `~/Library/Containers/com.apple.appstore/Data/Library/Preferences/com.apple.commerce.knownclients.plist`
- `~/Library/Preferences/com.apple.commerce.plist`
- `~/Library/Preferences/com.apple.QuickTimePlayerX.plist`
# Аутентификация
Приложение [Passwords](https://support.apple.com/guide/passwords/the-passwords-app-mchl901b1b95/mac) создаёт [надёжные учётные данные](https://support.apple.com/guide/security/automatic-strong-passwords-secc84c811c4/web). Оно поддерживает [passkeys](https://fidoalliance.org/passkeys/) — учётные данные, предназначенные для защиты от фишинга при использовании с совместимыми сервисами.
[KeePassXC](https://keepassxc.org/) — это кроссплатформенный менеджер паролей с открытым исходным кодом, который стоит рассмотреть. Он поддерживает надёжную аутентификацию с помощью совместимых аппаратных токенов и расширение для браузера для автоматического ввода учётных данных.
Запоминающиеся пароли можно создавать с помощью [Diceware](https://secure.research.vt.edu/diceware/).
Убедитесь, что для онлайн-аккаунтов включена [многофакторная аутентификация](https://en.wikipedia.org/wiki/Multi-factor_authentication). Предпочитайте устойчивую к фишингу аутентификацию, например аппаратные токены или passkeys в поддерживаемых сервисах. Приложения-аутентификаторы предпочтительнее SMS-кодов, но любая MFA лучше, чем аутентификация только по паролю.
[YubiKey](https://www.yubico.com/products/) — популярный аппаратный токен аутентификации. Он также может хранить ключи для задач шифрования, подписания и аутентификации — см. [drduh/YubiKey-Guide](https://github.com/drduh/YubiKey-Guide).
GnuPG также может управлять паролями и другими зашифрованными файлами — см. [drduh/Purse](https://github.com/drduh/Purse) и [drduh/pwd.sh](https://github.com/drduh/pwd.sh).
# Резервное копирование
Шифруйте файлы локально перед резервным копированием на внешние носители или в онлайн-сервисы.
Следуйте [модели резервного копирования 3-2-1](https://www.cisa.gov/sites/default/files/publications/data_backup_options.pdf): храните три копии важных данных, размещайте их как минимум на двух разных типах носителей и держите хотя бы одну копию в отдельном физическом месте.
## Time Machine
[Time Machine](https://support.apple.com/104984) — встроенный инструмент для резервного копирования в macOS. Используйте внешний диск или сетевое хранилище для создания [зашифрованных](https://support.apple.com/guide/mac-help/keep-your-time-machine-backup-disk-secure-mh21241) резервных копий.
## GnuPG
[GnuPG](https://www.gnupg.org/) можно использовать с паролем или открытым ключом, а закрытый ключ хранить на [YubiKey](https://github.com/drduh/YubiKey-Guide).
Сожмите и зашифруйте каталог с помощью пароля:```bash
tar zcvf - ~/Downloads |
gpg -c > ~/Downloads/backup-$(date +%F-%H%M%S).tar.gz.gpg
Расшифруйте и распакуйте каталог:```bash gpg -o ~/Downloads/decrypted-backup.tar.gz -d ~/Downloads/backup-*.tar.gz.gpg tar zxvf ~/Downloads/decrypted-backup.tar.gz
## Дисковая утилита
Зашифрованные тома можно создать с помощью [Дисковой утилиты](https://support.apple.com/guide/disk-utility/toc) или `hdiutil`:```bash
hdiutil create ~/Downloads/encrypted.dmg -encryption -size 50M -volname "secretStuff"
hdiutil mount ~/Downloads/encrypted.dmg
cp -v ~/Documents/passwords.txt /Volumes/secretStuff
hdiutil eject /Volumes/secretStuff
Tresorit и restic также могут представлять интерес.
Имена Wi-Fi сетей, называемые SSID, и поведение устройств при сканировании могут раскрывать информацию о ближайших и ранее использовавшихся сетях. Скрытые сети не обеспечивают значимой конфиденциальности и могут вызывать активное сканирование устройств в поисках этих сетей.
Настройте частный Wi-Fi адрес, чтобы снизить отслеживание в сети.
Настройте безопасность беспроводной сети на WPA3. Следуйте рекомендациям Apple, чтобы задать рекомендуемые настройки для маршрутизаторов и точек доступа.
Для удалённых SSH-подключений используйте уникальный SSH-ключ, защищённый парольной фразой или аппаратным токеном, проверяйте ключи хоста сервера и избегайте аутентификации по паролю. Рекомендуемые параметры клиента см. в drduh/config/ssh_config.
SSH-туннель может безопасно маршрутизировать трафик через другой компьютер, аналогично VPN. Чтобы использовать Privoxy, запущенный на удалённом хосте на порту 8118:```bash ssh -C -L 5555:127.0.0.1:8118 [email protected] sudo networksetup -setwebproxy "Wi-Fi" 127.0.0.1 5555 sudo networksetup -setsecurewebproxy "Wi-Fi" 127.0.0.1 5555
Или чтобы использовать SSH-соединение как [SOCKS-прокси](https://www.mikeash.com/ssh_socks.html):```bash
ssh -NCD 3000 [email protected]
По умолчанию в macOS не включен Удаленный вход (SSH-сервер).
Чтобы включить SSH и разрешить входящие подключения, используйте Системные настройки > Основные > Общий доступ или команду:```bash sudo launchctl load -w /System/Library/LaunchDaemons/ssh.plist
Отключите аутентификацию по паролю и рассмотрите возможность дальнейшего [укрепления](https://stribika.github.io/2015/01/04/secure-secure-shell.html) конфигурации SSH-сервера. См. [drduh/config/sshd_config](https://github.com/drduh/config/blob/main/sshd_config) для рекомендуемых параметров.
Убедитесь, что SSH-сервер запущен:```bash
sudo lsof -Pni TCP:22
Не оставляйте компьютер без присмотра в небезопасных местах. Опытный злоумышленник, имеющий физический доступ без наблюдения, может установить аппаратный кейлоггер для записи нажатий клавиш, включая пароли. Использование Mac со встроенной или bluetooth-клавиатурой затрудняет эту атаку, поскольку многие готовые варианты таких устройств рассчитаны на подключение между USB-клавиатурой и компьютером.
Чтобы уменьшить последствия кражи во время использования Mac, рассмотрите применение buskill/buskill-app или Lennolium/swiftGuard.
Рассмотрите возможность приобретения защитного экрана/фильтра конфиденциальности для использования в общественных местах.
Лак для ногтей и индикаторные пломбы можно наносить на компоненты для обнаружения вмешательства.
Отслеживайте системные журналы с помощью Консоли или команды log stream.
Выведите все системные журналы за последние 5 минут в классическом формате syslog:```bash log show --last 5m --style syslog
I don't see any content in the INPUT section to translate. The chunk appears to be empty. Please provide the actual Markdown content for chunk 115, and I'll translate it to Russian following all the specified rules.```bash
log show --last 5m --style json
Вывод JSON, разделённого переводами строк (по одному объекту JSON на строку); требуется для jq:```bash log show --last 5m --style ndjson
Фильтруйте сообщения по подсистеме, например из `com.apple.SoftwareUpdate`:```bash
log show --last 1h --style json \
--predicate 'subsystem == "com.apple.SoftwareUpdate"'
Фильтруйте сообщения по содержимому, например содержащие failed:```bash
log show --last 1h --predicate 'eventMessage CONTAINS "failed"'
Фильтрация сообщений без учёта регистра:```bash
log show --last 1h --predicate 'eventMessage CONTAINS[c] "error"'
Подсчитайте количество уникальных сообщений об ошибках с помощью jq:```bash
log show --last 1h --style ndjson
--predicate 'eventMessage CONTAINS[c] "error"' |
jq -r '.eventMessage' | sort | uniq -c | sort -nr | head -100
Экспортируйте журналы в архив, который можно открыть в Console:```bash
log collect --last 1h --output ~/Downloads/logs-$(date +%F-%H%M).logarchive
System Integrity Protection мешает работе DTrace, и её необходимо частично отключить перед использованием.
iosnoop отслеживает дисковый ввод-выводopensnoop отслеживает открытие файловexecsnoop отслеживает процессыerrinfo отслеживает сбойные системные вызовыdtruss отслеживает все системные вызовыДля получения дополнительной информации выполните man -k dtrace.
Перечислите запущенные процессы с помощью Activity Monitor или команды ps.
Перечислите открытые сетевые соединения:```bash sudo lsof -Pni
Перечислите содержимое различных сетевых структур данных:```bash
sudo netstat -n -p tcp
sudo netstat -n -p udp | sort | uniq
Wireshark можно использовать из командной строки с помощью tshark.
Замените en0 на активный интерфейс, показанный командой networksetup -listallhardwareports.
[!IMPORTANT] Захватывайте трафик только в тех сетях и на тех системах, которые вам разрешено контролировать.
Мониторинг DNS:```bash
/Applications/Wireshark.app/Contents/MacOS/tshark -i en0
-Y "dns.flags.response == 1" -Tfields
-e frame.time_delta
-e dns.qry.name
-e dns.a
-Eseparator=,
Мониторинг HTTP:```bash
/Applications/Wireshark.app/Contents/MacOS/tshark -i en0 \
-Y "http.request or http.response" -Tfields \
-e ip.dst \
-e http.request.full_uri \
-e http.request.method \
-e http.response.code \
-e http.response.phrase \
-Eseparator=/s
Мониторинг TLS-сертификатов:```bash
/Applications/Wireshark.app/Contents/MacOS/tshark -i en0
-Y "ssl.handshake.certificate" -Tfields
-e ip.src
-e x509sat.uTF8String
-e x509sat.printableString
-e x509sat.universalString
-e x509sat.IA5String
-e x509sat.teletexString
-Eseparator=/s -Equote=d
# Разное
## Хранитель экрана
Установите блокировку экрана сразу после запуска хранителя экрана:```bash
defaults write com.apple.screensaver askForPassword -int 1
defaults write com.apple.screensaver askForPasswordDelay -int 0
Отключите «Диагностика и данные об использовании».
Отключите репортёр сбоев (диалоговое окно, которое появляется после сбоя приложения и предлагает сообщить о проблеме в Apple):```bash defaults write com.apple.CrashReporter DialogType none
## Медиаплеер
Используйте [QuickTime Player](https://en.wikipedia.org/wiki/Quicktime_player), встроенное медиаприложение, для воспроизведения музыкальных и видеофайлов. Оно использует [App Sandbox](https://developer.apple.com/documentation/security/app_sandbox/protecting_user_data_with_app_sandbox), [Hardened Runtime](https://developer.apple.com/documentation/xcode/configuring-the-hardened-runtime) и получает преимущества от [Signed System Volume](https://support.apple.com/guide/security/signed-system-volume-security-secd698747c9/web) как части базовой системы.
## Обработчики файлов
Управляйте [обработчиками файлов по умолчанию](https://support.apple.com/guide/mac-help/choose-an-app-to-open-a-file-on-mac-mh35597), чтобы снизить риск открытия определенных типов файлов.
Измените приложение по умолчанию для файлов сценариев, чтобы при их открытии отображалось содержимое, а не выполнялся скрипт.
В Finder найдите и выберите любой файл .sh, щелкните по нему правой кнопкой мыши и выберите «Свойства» или нажмите <kbd>Command</kbd> + <kbd>I</kbd>. В разделе «Открыть в приложении» выберите TextEdit из раскрывающегося меню. Если его нет в списке, выберите «Другое...» и Applications > TextEdit.app. Нажмите «Изменить все...» и подтвердите, выбрав «Продолжить».
## Параметры Finder
Показывать скрытые файлы и папку Library в Finder:```bash
defaults write com.apple.finder AppleShowAllFiles -bool true
chflags nohidden ~/Library
Показать все расширения имен файлов:```bash defaults write NSGlobalDomain AppleShowAllExtensions -bool true
Не сохраняйте документы в iCloud по умолчанию:```bash
defaults write NSGlobalDomain NSDocumentSaveNewDocumentsToCloud -bool false
Установите настраиваемый umask:```bash sudo launchctl config user umask 077
Перезагрузитесь, затем создайте файл/каталог и проверьте разрешения (в macOS по умолчанию разрешено чтение для 'group/other'):```console
$ ls -ld umask*
drwx------@ 2 user1 staff 64 Jul 26 12:00 umask.dir
-rw-------@ 1 user1 staff 32 Jul 26 12:00 umask.txt
Включите защищённый ввод с клавиатуры в Terminal (это может мешать работе таких приложений, как TextExpander).
Отключите многоадресные объявления Bonjour (это также отключает функции AirPlay и AirPrint):```bash
sudo defaults write /Library/Preferences/com.apple.mDNSResponder
NoMulticastAdvertisements -bool YES
[Отключите Handoff](https://support.apple.com/guide/mac-help/change-airdrop-handoff-settings-mchl6a407f99) и [Bluetooth](https://support.apple.com/guide/mac-help/turn-bluetooth-on-or-off-blth1008).
## Sudoers
macOS поставляется с этой строкой в `/etc/sudoers`:```bash
Defaults env_keep += "HOME MAIL"
Это предотвращает изменение sudo переменной HOME при повышении привилегий. В результате программы, запускаемые с sudo, могут использовать файлы конфигурации из домашнего каталога вызывающего пользователя. Рассмотрите возможность удаления HOME из env_keep, если такое поведение не требуется специально.
Чтобы сохранить удобство, когда root-пользователь имеет доступ к домашнему каталогу не-root-пользователя, добавьте строку экспорта в /var/root/.zshrc, например:```bash
export HOME=/Users/user1
# Связанное программное обеспечение
Программное обеспечение | Категория | Описание
:-: | :-: | :-
[lynis](https://github.com/CISOfy/lynis) | Сканер аудита | Кроссплатформенный инструмент аудита безопасности, который проверяет конфигурацию системы и предлагает улучшения для её укрепления.
[zentral](https://github.com/zentralopensource/zentral) | Платформа мониторинга и управления конфигурацией | Сервер управления парком устройств macOS; собирает данные инвентаризации, события, аудиты и результаты osquery. Лучше всего подходит для управляемых сред.
[osquery](https://github.com/osquery/osquery) | Механизм мониторинга | Предоставляет состояние операционной системы в виде SQL-таблиц, позволяя выполнять повторяемые проверки процессов, пользователей, элементов автозапуска, сетевых подключений и многого другого.
[pareto-mac](https://github.com/paretoSecurity/pareto-mac) | Сканер аудита | Приложение в строке меню, которое проверяет Mac на соответствие распространённым базовым рекомендациям по безопасности.
# Дополнительные ресурсы
- [Обзор безопасности и конфиденциальности iCloud](https://support.apple.com/102651)
- [Руководство EFF по самозащите от слежки](https://ssd.eff.org/)
- [beerisgood/macOS_Hardening](https://github.com/beerisgood/macOS_Hardening)
- [Блог о реверс-инжиниринге macOS](https://reverse.put.as/)
- [Ресурсы по реверс-инжинирингу](http://samdmarshall.com/re.html)
- [Блог Malwarebytes](https://www.malwarebytes.com/blog)
- [Блог Objective-See](https://objective-see.com/blog.html)
- [Бенчмарки CIS](https://www.cisecurity.org/benchmark/apple_os/)
- [Открытый исходный код Apple](https://opensource.apple.com/)
Кликайте осторожно
| Противник | Мотивация | Возможности | Контрмеры |
|---|
| Сосед по комнате | Увидеть личные чаты или историю просмотров | Близкое нахождение; может видеть экран или подглядывать учётные данные | Используйте биометрическую аутентификацию (отпечаток пальца или лицо), применяйте защитную плёнку экрана, держите телефон заблокированным, когда не используете его |
| Вор | Разблокировать телефон, украсть личную информацию и опустошить банковские счета, продать телефон за деньги | Может подсмотреть вводимый пароль, украсть незаблокированное устройство, оставленное без присмотра | Держите устройство при себе всё время, блокируйте устройства, когда не используете их, не вводите пароль в общественных местах на виду, используйте Find My или аналогичные сервисы для отслеживания или удалённой блокировки украденных устройств |
| Преступник | Финансовая выгода | Социальная инженерия (обман пользователя с целью раскрытия информации или совершения опасных действий), легкодоступное вредоносное ПО, повторное использование паролей, эксплуатация уязвимостей | Изолируйте программное обеспечение в песочнице, включайте функции безопасности ОС, автоматически устанавливайте обновления ПО |
| Корпорация | Маркетинг на основе пользовательских данных | Сбор телеметрии и поведенческих данных | Блокируйте сетевые подключения, сбрасывайте идентификаторы устройства, избегайте добавления платёжных данных |
| Государство/APT | Целенаправленная слежка | Пассивное наблюдение за интернет-инфраструктурой, продвинутый анализ шифрования | Используйте открытое ПО, стойкие кодовые фразы diceware, аппаратное обеспечение с защищённым элементом, выключайте устройства, когда не используете их, сигналы-ловушки/приманки/канареечные токены |
| Command | Task |
|---|
sudo pfctl -t blocklist -T show | показать blocklist |
sudo pfctl -s rules | показать активные правила |
sudo pfctl -s states | показать таблицу состояний |
sudo ifconfig pflog0 create | создать интерфейс журнала пакетов |
sudo tcpdump -ni pflog0 | отслеживать заблокированные пакеты |
| Команда | Задача |
|---|
launchctl list | просмотр пользовательских заданий |
sudo launchctl list | просмотр системных заданий |
launchctl list com.apple.Finder | изучение службы |
systemextensionsctl list | список системных расширений |
ls /System/Library/LaunchDaemons | список системных демонов |
ls /System/Library/LaunchAgents | список системных агентов |