Взломать Пароль На Mac С Помощью Arduino И Opencv

О том, как взломать Mac, защищенный паролем, с помощью Arduino и OpenCV. На основе статьи Перебор EFI с помощью Arduino .



Взломать пароль на Mac с помощью Arduino и OpenCV



История

Все началось как обычно — у моего друга заблокировали 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-клавиатурой и последовательно пробует пароли.

Не буду повторять все тонкости подхода, ссылка на статью есть выше.

Опишу, что мы решили сделать по-другому и почему

  1. Постоянно пользуйтесь компьютером.

    Дисплея у нас не было, поэтому вести лог того, что вводилось, смысла не было.

    Таким образом, компьютер запомнит введенные данные.

  2. Распознавание изображений на мониторе Mac. Мы обнаружили, что относительно легко проверить, был ли Mac по-прежнему скомпрометирован, и вводить пароли только в том случае, если это не так.

    Компьютер все еще используется.

  3. Убедитесь, что введено ровно четыре символа.

    Для нас это было самое неожиданное изменение.

    Оказалось, что иногда в комбинацию компьютер-Ардуино-Ардуино-Мак входили не все символы.

    Иногда вход пропадал, и это было не очень плохо (можно добавить 3-4 входа после пароля, они не мешают).

    Но иногда символы пароля отсутствовали.

    Почему - загадка.

    Мы решили посмотреть картинку и убедиться, что все символы введены.

    Если нет, повторите ввод.

  4. Попробуйте пароли в случайном порядке.

    Пароли в статье были от 0000 до 9999, нам это не понравилось.

    Скорее всего, злоумышленник выбрал пароль, далекий как от 0000, так и от 9999, чтобы пострадал угадавший.

    Поэтому мы решили провести рандомизированный поиск.

    Какую злую шутку это сыграло с нами, читайте дальше.



Давайте перейдем к делу!

Разбираем по такой схеме:
  1. Компьютер генерирует список паролей, которые можно попробовать
  2. Компьютер проверяет, что Mac все еще заблокирован
  3. Компьютер отправляет очередной пароль на Arduino Uno, который, по сути, используется как USB-накопитель.

    <-> SERIAL-адаптер и имеет простую программу, которая ничего не делает.

  4. В Uno данные считываются Mega через Serial1. Именно поэтому мы использовали порядок Уно -> Мега, а не наоборот.
  5. Мега вводит данные в Mac, думая, что это клавиатура.

  6. Компьютер проверяет, что на экране были введены 4 символа.

    В противном случае пароль помечается как не введенный.

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



Обмен данными
Данные передавались через USB, становились последовательными, а затем превращались в нажатия клавиш.

Ничего особенно интересного здесь не было, кроме запутанных символов.

Путем отладки мы определили, что на последнем этапе теряются символы.

То есть персонаж уходит с клавиатуры, но не регистрируется в Маке.

Почему остается загадкой.

Разбираться не удосужились, просто проверили, всё ли введено.



Распознавание блокировки
Пока мак блокируется, рисуется висячий замок.

Так:

Взломать пароль на Mac с помощью Arduino и OpenCV

Давайте найдем его с помощью 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! .



Этот простой код ищет изображение замка на экране.

Отлично находит:

Взломать пароль на Mac с помощью Arduino и OpenCV

Зеленый прямоугольник — найденный замок.

Этот раздел не вызвал никаких затруднений.

OpenCV очень удивил и порадовал.



Поле пароля
Если мы обнаружим на экране замок, то можем поискать под ним поле для ввода пароля.

Это делается относительно легко, просто манипулируя пикселями изображения.

Или так бы и сделали, если бы не камера.

Есть две проблемы.

Во-первых, разрешение камеры было 640*480, что ужасно для анализа.

Во-вторых, при нестабильном освещении камера вела себя совершенно непредсказуемо.

Что-то то загоралось, то что-то пропадало.

Вторая проблема была решена за счет стабильных условий освещения, первая за счет размеров пикселей и фильтров.

Итак, замок есть, мы можем найти его центр и спускаться вниз, пока не встретим два пика яркости.



Взломать пароль на Mac с помощью Arduino и OpenCV

На картинке показана яркость пикселей под замком.

Найдя два максимума на достаточном расстоянии, можно взять центр между ними и пойти влево (считаем, что поле ввода пароля горизонтальное).

Когда нашли яркий пиксель, то либо поле ввода закончилось, либо попалась звездочка.



Взломать пароль на Mac с помощью Arduino и OpenCV

Поле ввода.

Зеленый – рамка блокировки.

Белый – нисходящая линия, вдоль которой ищем два максимума.

Красный — найдены максимумы и первый яркий пиксель слева по центру.

Теперь, если первый яркий пиксель слева достаточно «левый», то поле ввода пустое.

Если «вправо» достаточно, то вводится 4 символа.

Однако калибровка необходима.

При калибровке осуществлялся поиск положения яркого пикселя при пустом поле ввода, затем вводились 4 символа и осуществлялся поиск положения яркого пикселя.

Эти значения были сохранены и в дальнейшем использовались в качестве эталонных значений.

На этом часть по работе с изображением закончена и в целом пора переходить к результатам.



Результаты



Взломать пароль на Mac с помощью Arduino и OpenCV

Замок не найден! Через 33 часа работы пароль был угадан.

Несмотря на рандомизацию, правильным паролем оказался номер 35 с конца.

Значение пароля было 2605 .

Вероятность этого события составила 0,35%.



Взломать пароль на Mac с помощью Arduino и OpenCV



Литература, оборудование и код

В статье использовано: Apple Мак Эйр Lenovo ThinkPad T510 Ардуино Уно (совместимый) Ардуино Мега 2560 (совместимый) Литература: Перебор EFI с помощью Arduino — отсюда взято всё о работе с Ардуино как с клавиатурой и принципе блокировки Мака.

Спасибо автору! Из.

Веб-сайт Ардуино Из.

Веб-сайт OpenCV Код. Внимание, код ужасен.

Оно написано специально и содержит следы экспериментов.

Кроме того, он привязан к размерам моей камеры, поэтому может потребоваться доработка.

Вы можете делать с кодом все, что захотите, если это не запрещено законом.

Теги: #грубая сила #грубая сила #взлом #icloud #apple id #MacBook #OpenCVSharp #OpenCV #информационная безопасность #Обработка изображений

Вместе с данным постом часто просматривают: