
Я часто бываю в командировках и путешествиях и всегда переживаю о безопасности своего MacBook, когда он остается один в номере ?. В последней командировке меня ждала неприятная неожиданность: я заметил, что кто‑то трогал мой закрытый ноутбук в мое отсутствие.
В этой статье мы посмотрим, как узнать о попытке физического доступа к вашему макбуку, соберем данные о вторжении и отправим их себе в Telegram.
Evil maid в двух словах
Атака «злой горничной» (evil maid attack) — это сценарий, при котором атакующий имеет физический доступ к чужому компьютеру без ведома владельца. Это может произойти, например, в гостиничном номере или на рабочем месте. Атакующий мо��ет использовать этот доступ для установки вредоносного ПО или аппаратных средств слежения, которые могут перехватывать пароли, копировать файлы, устанавливать бэкдоры или осуществлять другие виды вмешательства в работу устройства. Сама атака может быть настолько скрытной, что пользователь даже не подозревает о её произведении, пока не столкнется с последствиями.
Стоит упомянуть, что существуют методы атаки, от которых защититься крайне сложно. Пример такого вектора — внедрение аппаратной закладки. Или использование «модифицированных» аксессуаров, например, зарядного устройства с встроенной «закладкой».
Можно вскрыть корпус ноутбука и получить прямой доступ к любому перифирийному устройству или внедрить аппаратную закладку. В статье, мы оставим это за скобками, и посмотрим на атаки не требующие вскрытия корпуса. Я рекомендую заранее продумать, как вы будете детектировать вскрытие вашего ноутбука, чтобы попытаться защититься от подобных evil maid атак.
Мой MacBook оснащен четырьмя Thunderbolt 3 (USB‑C) портами, что определяет основной рассматриваемый вектор Evil Maid атаки через подключение стороннего USB устройства. Обычно это устройство-имитант притворяется клавиатурой, тачпадом, монитором или чем-то USB-совместимым. После подключения, имитант, используя программные или аппаратные уязвимости, добивается возможности выполнения своего кода. Можно посмотреть подборку Андрея Кановалова, где он показывает примеры атак с использование различных USB девайсов, есть видео.
Самое страшное — это внесение изменений в прошивку периферийного устройства: это сложно детектировать. В MacBook много таких устройств, чьи прошивки и драйвера могут быть изменены: контроллеры Thunderbolt и USB, модули Wi-Fi и Bluetooth, диски SSD/HDD, а также BIOS/UEFI. Пример1, Пример2, Видео, Rubber Ducky.
Что можно сделать?
(1) Понятно, что для противодействия атакам нужно регулярно обновлять ОС.
(2) Помимо этого, я бы рекомендовал включить Lockdown mode для блокировки USB-устройств, когда Mac заблокирован.
(3) Ну и стандартный способ защиты — это пароль на загрузчик (firmware password) и включение опции Startup Fill Security, чтобы предотвратить возможность загрузки с внешних дисков с поледующим внесением изменений в прошивку или загрузчик.
(4) Подумайте, как вы можете детектировать вскрытие вашего ноутбука. Вскрытый корпус открывает большую поверхность для атаки с прямым доступом ко всей переферии.
DoNotDisturb мониторинг
Помимо базовых средств защиты давайте чуть подробнее остановимся на мониторинге факта вторжения и соберем больше данных в момент атаки. Для этого будем использовать open source утилиту DoNotDisturb (или DND), разработанную Patrick Wardle (aka @patrickwardle).
Механизм работы прост: при открытии крышки ноутбука мы получаем уведомление. К сожалению, DND игнорирует события включения/выключения и подключения новых USB-устройств, активируясь только в момент открытии крышки ноутбука. В этот момент DND может:
выполнить команду;
отправить уведомление в специальное приложение (недоступное для российского региона);
начать мониторинг USB-устройств и запускаемых процессов.
Мы будем отправлять себе сообщение в Telegram с логами подключенных USB-устройств.
DoNotDisturb настройка для Telegram
В целом все просто: качаем DoNotDisturb, устанавливаем. Мы не будем использовать специальное приложение, а запустим наш скрипт в момент открытия ноутбука.

В DND есть возможность выполнить некоторые действия через специальное приложение; так как мы его не используем, то устанавливаем опцию No Remote Tasking. Можно отключить автоматическое обновление (последний релиз был 6 лет назад).

Включаем опцию Monitoring, чтобы собрать логи запускаемых процессов и подключенных USB-устройств. Вписываем bash-команду, которая будет выполнена в момент открытия крышки ноутбука.
Ну и скрипт отправки в телеграм. Для него нам нужно зарегистрировать нового бота, используя BotFather, подробно я это описывать не буду. Дополнительно мы отправим логи, собранные DND, о запущенных процессах и подключенных USB-устройствах. Скопируйте скрипт в удобную для вас папку, не забудьте сделать его исполняемым (chmod +x).
alarm code
#!/bin/bash set -e # !!! Нужно поменять на свой telegram токен API_TOKEN="589612351:AAFbC0GM0UTFehCgife13tr3vER3eBbEzaX" # !!! Нужно поменять на свой идентификатор telegram чата CHAT_ID="-1042193212345" # Как быстро узнать CHAT_ID? # Нужно добавить бота в чат, написать ему там сообщение, # после чего выполнить команду `curl $API_URL/getUpdates`, # в тексте ответу будет идентификатор чата. API_URL="https://api.telegram.org/bot$API_TOKEN" ABS_LOG_PATH="/Library/Objective-See/DND/DND.log" LOG_FILE="/tmp/.capture.output.txt" MESSAGE="ALARM: $@" echo "$(date)" > $LOG_FILE # Сразу уведомляем об открытии крышки! curl -s -X POST "$API_URL/sendMessage" -d "chat_id=$CHAT_ID" -d "text=$MESSAGE" >> $LOG_FILE 2>&1 # ждем 1 секунду перед отправкой логов sleep 1 # Отправляем логи собранные DND, можно повторно отправить через некоторое время curl -F "chat_id=$CHAT_ID" -F "document=@$ABS_LOG_PATH" "$API_URL/sendDocument"
На этом все. Постарался кратко описать базовые способы борьбы с evil maid атакой.
Если интересно, что делать, если вторжение все-таки произошло, то ставьте лайк или пишите об этом в комментах, эту тему я оставлю для следующей статьи.
Версия на инглише: Macbook Evil Maid
Оффтоп: можно самостоятельно добавить в скрипт команду получения скриншота с веб-камеры с последующей отправкой его в телеграм.
PS: Спасибо @xairy и редакции Хабра за ревью.
