О том, как взломать Mac, защищенный паролем, с помощью Arduino и OpenCV. На основе статьи Перебор EFI с помощью Arduino .
История
Все началось как обычно — у моего друга заблокировали Mac Air и украли его аккаунт. И если iPhone можно восстановить, то Mac полностью заблокирован.Обращение в техподдержку ни к чему не привело; в сервисном центре предложили разблокировать за 1000 рублей и 1 день.
Правда, они обнаружили дефект материнской платы, не позволивший им это сделать.
После прочтения статьи Перебор EFI с помощью Arduino , решил повторить эксперимент. Правда, дисплея не было, но было две Ардуино — Uno и Mega2560. И ноутбук, который не жалко оставить на ~33 часа, чтобы подобрать пароль.
Решили переборщить с преферансами и поэтессами - пусть автоматика следит за перебором, а мы пьем чай.
Описание проблемы
Для начала давайте вкратце поговорим о том, с чем мы в целом определились.Этот раздел для тех, кто не хочет внимательно читать статью, на которую я дал ссылку.
Если ваша учетная запись Apple украдена, злоумышленник может удаленно заблокировать ваш Mac с помощью четырехзначного цифрового пароля по своему выбору.
После этого невозможно включить Mac без ввода этого пароля, причем этот пароль можно вводить в двух разных местах - перед входом в учетную запись (там отображаются 4 пустых односимвольных поля для ввода, закрытых звездочками) и при пытаюсь войти в UEFI (в этом случае отображается поле для ввода любого количества символов, также закрытое звездочками).
При многократном вводе неправильного пароля в 4 поля вход блокируется сначала на 5 минут, затем на 10 и так до часа.
Не очень подходит для грубой силы.
В случае с UEFI повторять ввод можно примерно каждые 12 секунд (на самом деле чуть меньше).
Если посчитать максимальное время поиска, то получим 33,(3) часа поиска без учета времени на ввод символов и «набор текста».
Не смертельно в принципе.
Похоже, Apple есть над чем подумать в плане безопасности.
Нам же такая небрежность в выборе сложности пароля (или задержки между вводами) идет только на пользу.
Замечу, что при вводе правильного пароля вход вообще не блокируется, то есть эти ~12 секунд — это не время проверки пароля, а искусственная задержка.
Похоже, где-то можно обойти эту задержку и выполнить итерацию гораздо быстрее.
Мы этого не делали, но это интересная идея.
Отказ от ответственности
Все, что произошло в этой статье, было законным (потому что сделано с нашим собственным маком), направленным на борьбу с мошенниками, контактная информация которых уже попала туда, где должна быть.Использование материалов данной статьи в незаконных (как и законных) действиях ни при каких обстоятельствах не является ответственностью автора или сайта.
Все, что вы делаете, вы делаете на свой страх и риск.
Автор или сайт не несут ответственности за любой ущерб, прямой или косвенный, причиненный материалами статьи.
Короче говоря, кто не спрятался, я не виноват.
Как сортировать?
Автор статьи «Брутфорс EFI с Arduino» предложил замечательный способ подбора пароля — Arduino притворяется USB-клавиатурой и последовательно пробует пароли.Не буду повторять все тонкости подхода, ссылка на статью есть выше.
Опишу, что мы решили сделать по-другому и почему
- Постоянно пользуйтесь компьютером.
Дисплея у нас не было, поэтому вести лог того, что вводилось, смысла не было.
Таким образом, компьютер запомнит введенные данные.
- Распознавание изображений на мониторе Mac. Мы обнаружили, что относительно легко проверить, был ли Mac по-прежнему скомпрометирован, и вводить пароли только в том случае, если это не так.
Компьютер все еще используется.
- Убедитесь, что введено ровно четыре символа.
Для нас это было самое неожиданное изменение.
Оказалось, что иногда в комбинацию компьютер-Ардуино-Ардуино-Мак входили не все символы.
Иногда вход пропадал, и это было не очень плохо (можно добавить 3-4 входа после пароля, они не мешают).
Но иногда символы пароля отсутствовали.
Почему - загадка.
Мы решили посмотреть картинку и убедиться, что все символы введены.
Если нет, повторите ввод.
- Попробуйте пароли в случайном порядке.
Пароли в статье были от 0000 до 9999, нам это не понравилось.
Скорее всего, злоумышленник выбрал пароль, далекий как от 0000, так и от 9999, чтобы пострадал угадавший.
Поэтому мы решили провести рандомизированный поиск.
Какую злую шутку это сыграло с нами, читайте дальше.
Давайте перейдем к делу!
Разбираем по такой схеме:- Компьютер генерирует список паролей, которые можно попробовать
- Компьютер проверяет, что Mac все еще заблокирован
- Компьютер отправляет очередной пароль на Arduino Uno, который, по сути, используется как USB-накопитель.
<-> SERIAL-адаптер и имеет простую программу, которая ничего не делает.
- В Uno данные считываются Mega через Serial1. Именно поэтому мы использовали порядок Уно -> Мега, а не наоборот.
- Мега вводит данные в Mac, думая, что это клавиатура.
- Компьютер проверяет, что на экране были введены 4 символа.
В противном случае пароль помечается как не введенный.
- Таким же образом нажимается Enter
- Пока поле пароля не пустое, ничего не делаем
- Как только поле ввода станет пустым, переходим ко второму шагу.
Обмен данными
Данные передавались через USB, становились последовательными, а затем превращались в нажатия клавиш.Ничего особенно интересного здесь не было, кроме запутанных символов.
Путем отладки мы определили, что на последнем этапе теряются символы.
То есть персонаж уходит с клавиатуры, но не регистрируется в Маке.
Почему остается загадкой.
Разбираться не удосужились, просто проверили, всё ли введено.
Распознавание блокировки
Пока мак блокируется, рисуется висячий замок.
Так:
Давайте найдем его с помощью OpenCV! Это такое подходящее применение микроскопа (не совсем).
Удивительно, но OpenCV для .
NET стартовал с полпинка и двух пакетов NuGet (OpenCV.NET, OpenCV).
Дальше немного кода.
Этот простой код ищет изображение замка на экране.lck = CV.LoadImage("D:\\mac-unlock\\lock.png", LoadImageFlags.Unchanged); //Load lock image file Capture camera = Capture.CreateCameraCapture(-1); //Create camera object to capture image. Don't care about device index as the notebook has 1 camera device var img = camera.RetrieveFrame(); //get camera image IplImage res = new IplImage(new OpenCV.Net.Size(img.Width - tpl.Width + 1, img.Height - tpl.Height + 1), IplDepth.F32, 1); //Create image for matching results OpenCV.Net.CV.MatchTemplate(img, lck, res, TemplateMatchingMethod.CorrelationCoefficientNormed); //Find lock image in camera image double min, max; OpenCV.Net.Point minloc; OpenCV.Net.Point maxloc; CV.MinMaxLoc(res, out min, out max, out minloc, out maxloc); if (max < 0.88) //No lock image on the screen! Wow! .
Отлично находит:
Зеленый прямоугольник — найденный замок.
Этот раздел не вызвал никаких затруднений.
OpenCV очень удивил и порадовал.
Поле пароля
Если мы обнаружим на экране замок, то можем поискать под ним поле для ввода пароля.Это делается относительно легко, просто манипулируя пикселями изображения.
Или так бы и сделали, если бы не камера.
Есть две проблемы.
Во-первых, разрешение камеры было 640*480, что ужасно для анализа.
Во-вторых, при нестабильном освещении камера вела себя совершенно непредсказуемо.
Что-то то загоралось, то что-то пропадало.
Вторая проблема была решена за счет стабильных условий освещения, первая за счет размеров пикселей и фильтров.
Итак, замок есть, мы можем найти его центр и спускаться вниз, пока не встретим два пика яркости.
На картинке показана яркость пикселей под замком.
Найдя два максимума на достаточном расстоянии, можно взять центр между ними и пойти влево (считаем, что поле ввода пароля горизонтальное).
Когда нашли яркий пиксель, то либо поле ввода закончилось, либо попалась звездочка.
Поле ввода.
Зеленый – рамка блокировки.
Белый – нисходящая линия, вдоль которой ищем два максимума.
Красный — найдены максимумы и первый яркий пиксель слева по центру.
Теперь, если первый яркий пиксель слева достаточно «левый», то поле ввода пустое.
Если «вправо» достаточно, то вводится 4 символа.
Однако калибровка необходима.
При калибровке осуществлялся поиск положения яркого пикселя при пустом поле ввода, затем вводились 4 символа и осуществлялся поиск положения яркого пикселя.
Эти значения были сохранены и в дальнейшем использовались в качестве эталонных значений.
На этом часть по работе с изображением закончена и в целом пора переходить к результатам.
Результаты
Замок не найден! Через 33 часа работы пароль был угадан.
Несмотря на рандомизацию, правильным паролем оказался номер 35 с конца.
Значение пароля было 2605 .
Вероятность этого события составила 0,35%.
Литература, оборудование и код
В статье использовано: Apple Мак Эйр Lenovo ThinkPad T510 Ардуино Уно (совместимый) Ардуино Мега 2560 (совместимый) Литература: Перебор EFI с помощью Arduino — отсюда взято всё о работе с Ардуино как с клавиатурой и принципе блокировки Мака.Спасибо автору! Из.
Веб-сайт Ардуино Из.
Веб-сайт OpenCV Код. Внимание, код ужасен.
Оно написано специально и содержит следы экспериментов.
Кроме того, он привязан к размерам моей камеры, поэтому может потребоваться доработка.
Вы можете делать с кодом все, что захотите, если это не запрещено законом.
Теги: #грубая сила #грубая сила #взлом #icloud #apple id #MacBook #OpenCVSharp #OpenCV #информационная безопасность #Обработка изображений
-
Ваше Собственное Интернет-Радио
19 Oct, 24 -
Мнение О Регулировании Криптовалют В Рф
19 Oct, 24 -
Исследование Тарифов Виртуального Хостинга
19 Oct, 24 -
Ручной Телефон. Концепция
19 Oct, 24 -
Фронтенд Как У Сына Подруги Моей Матери
19 Oct, 24