Кто трогал мой mac? Ловим горничную или evil maid detection
Я часто бываю в командировках и путешествиях и всегда переживаю о безопасности своего 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 и редакции Хабра за ревью.