Хабрахабр

Как украсть Macbook

У меня несколько раз воровали макбуки и ни разу антикражные средства Apple вроде Find My Mac не помогли мне вернуть компьютер. Действительно ли они бесполезны? Можно ли доверять встроенному шифрованию FileVault? Как повысить шансы вернуть компьютер? Эта статья результат моих страданий в безрезультатных попытках вернуть украденные компьютеры.

В статье подробно описываются механизмы защиты глазами атакующего, в нашем случае вора. Это дает более наглядное представление о том, как они работают. Повествование в статье ведется от лица вора — это только художественный прием для лучшего понимания материала.

Внимание!
Материалы в статье представлены исключительно в ознакомительных целях. Все описания мошеннических действий инсценированы и выполнены с согласия владельцев ноутбуков. Автор не призывает к мошенническим действиям и единственная цель статьи показать, как лучше настраивать систему, чтобы защитить свои данные.

Предисловие

На скриншоте ниже один из нескольких моих украденных ноутбуков, оставшийся похороненным в панели iCloud.


Интерфейс функции Find My Mac в контрольной панели iCloud говорит, что функции блокировки станут доступны когда ноутбук подключится к интернету. Но этого никогда не случится.

Каждый раз, когда у меня воровали макбук или я его терял вместе с сумкой, я осознавал всю бесполезность функций Find My Mac. Ведь в ноутбуке нет модема и я не могу ни отследить его местоположение, ни удаленно стереть данные. Чтобы антикражные функции заработали, вор должен подключить мой ноутбук к интернету. Но как он это сделает, если учетная запись заблокирована паролем? Получается, даже человек, который захочет вернуть мне компьютер не сможет это сделать, если я заранее не напишу где-то на корпусе мои контакты. Я совершенно уверен, что во всех случаях кражи, мои ноутбуки были полностью очищены и проданы новым владельцам, которые сейчас ими пользуются без проблем даже не подозревая, что они были украдены.

Айфоны защищены лучше


Айфон с актуальной iOS нельзя просто так отвязать от iCloud. (Картинка Александр Варакин)

Современные Айфоны достаточно хорошо защищены, их нельзя просто так отвязать от учетной записи iCloud и продать на радиорынке. Поэтому существуют целые мошеннические схемы по отвязыванию устройств через фишинг. Хорошее исследование Антона Bo0oM об этом явлении: Фишеры iCloud и где они обитают. Воры обманным путем пытаются авторизоваться в icloud-аккаунте жертвы и разблокировать телефон. Даже если вор успел вытащить SIM-карту и отключить WiFi, до того как владелец смог заблокировать телефон, он все равно не сможет его разблокировать, если включена авторизация по отпечатку, лицу или пин-коду. И это круто.

Про блокировку айфонов есть очень много информации, эти механизмы хорошо изучены. Но те же функции в макбуках никто не обсуждает, кажется, будто их и нет. К сожалению, все модели макбуков до 2019 года (без чипа T2) беззащитны против воров и их в любом случае продадут полностью очищенным. Но при этом вы можете максимально усложнить жизнь вору и защитить свои данные.

Шаг 1: Крадем макбук

Для реалистичной проверки всех гипотез нам потребуется украсть настоящий макбук. Дальнейшее повествование я буду вести от имени вора. Для того чтобы понимать как работают механизмы защиты, нужно воспроизвести реальную модель угроз (модель нарушителя).

По сценарию из видео я украл включенный макбук у жертвы в кафе. В момент кражи я закрыл крышку, так что ноутбук перешел в спящий режим и отключился от WiFi. Это важный момент так он воспроизводит самый популярный сценарий, в котором ноутбук попадает в руки к вору. Чаще всего владельцы макбуков просто закрывают крышку и убирают ноутбук в сумку, не выключая комп. Все разы в когда я лишался своего компьютера он был в этом состоянии — спал в рюкзаке.

Find My — трекинг устройства без интернета


Новая технология геотрекинга без интернета от Apple

Сразу после кражи я бегу с украденным макбуком подмышкой к себе в лабораторию. Представим, что я бегаю быстрее жертвы и смог скрыться. При этом действия происходят в городе и я бегу по людной улице. Что будет делать в этот момент жертва? В панике зайдет в приложение FindMy и будет пытаться отследить компьютер или заблокировать его. Но заблокировать или стереть данные не получится, ведь у ноутбука нет связи с интернетом. Зато получится увидеть реальные координаты ноутбука на карте, и это удивительно!

В 2019 году Apple анонсировала обновленное приложение FindMy и новый способ трекинга устройств, в настройках он называется Offline Finding. Большинство пользователей техники Apple не знает об этой функции.

Принцип работы такой: для начала вам нужно иметь минимум два устройства Apple, привязанные к одной учетной записи iCloud. На обоих устройствах должна стоять актуальная операционная система, не ниже iOS 13 и macOS 10.15 (Catalina). Если все условия выполнены, оба устройства генерируют ключи и обмениваются приватными частями (закрытым ключом) друг с другом, так что каждое устройство может расшифровать сообщения другого.

По заверению Apple эти ключи хранятся только на устройствах и не сохраняются на сервере. То есть воспользоваться функцией можно только с другого устройства и нельзя с сайта icloud.com. Это значит, что потеряв оба устройства, на сайте icloud.com получится посмотреть только онлайн геолокацию, которая работает только если устройство имеет доступ в интернет, но не offline finding.

Когда устройство оказывается без интернета, например, телефон без SIM-карты или макбук без WiFi, оно начинает рассылать специальные пакеты через Bluetooth Low Energy со своим публичным ключом. И любое устройство Apple, оказавшееся рядом, например, случайный прохожий с айфоном, услышав такой сигнал, автоматически возьмет этот ключ, зашифрует им свои текущие координаты и отправит их на сервер. Для этого не требуется никаких действий от пользователя, все происходит в фоне, пока телефон лежит в кармане с заблокированным экраном. Своего рода проприетарный ботнет с легкими нотками mesh-сетей.

В macOS за эту функцию отвечает демон /usr/libexec/searchpartyuseragent. Ключи, предположительно, хранятся в ключнице под именем LocalBeaconStore → LocalBeaconStoreKey. Огорчает только что BLE-маяки рассылаются только при включенной системе или в спящем режиме, то есть чтобы отключить такой трекинг, вору достаточно зажать кнопку выключения. Было бы прекрасно, если бы этот функционал работал прямо на Bluetooth/WiFi чипе, когда на материнской плате есть дежурное питание.

Шаг 2: Прячемся — спуфинг геотрекинга через Bluetooth-прокси

Можно ли обмануть систему и показать жертве поддельный адрес его ноутбука? Если потерянный макбук сам не знает свои координаты, а только отправляет публичный ключ, значит, координаты добавляет устройство принявшее сигнал. А значит эта схема уязвима к спуфингу!


Ретранслятор BLE-пакетов пересылает все услышанные сигналы на удаленный передатчик

В схеме с ретранслятором приёмник слушает все сигналы от жертвы и по интернету пересылает их на передатчик. Случайные прохожие, принявшие сигнал, добавляют к нему свои координаты и пересылают на сервер. Я сижу с устройством жертвы в подвале, а передатчик лежит в другом конце города. Таким образом, жертва видит поддельные координаты.

Для построения такой схему потребуется два компьютера с BLE адаптерами соединенные в одну сеть и фреймворк BtleJuice.

Проприетарный протокол FindMy до сих пор не изучен, формат BLE-пакетов неизвестен. Неизвестны даже точные интервалы между посылками маяков и условия, в которых активируется эта функция. Экспериментально установлен интервал в 10-20 минут. По заявлениям Apple приватный ключ регулярно изменяется, но как часто неизвестно. Приглашаю всех поучаствовать в реверсинге протокола. На сайте Apple есть описание криптографии, используемой в FindMy.
UPD: В момент написания этих строк было опубликовано исследование криптографии, применяемой в FindMy, автор не рассматривает техническую реализацию протокола, и я не совсем понял о чем работа вообще.

Шаг 3: Крадем данные с ноутбука

Данные на диске могут быть намного ценнее самого макбука. Что если там ключи от биткоин-кошельков, логины-пароли, или интимные фотографии? Поэтому сперва попробуем прочитать данные на диске. Мы украли ноутбук во включенном состоянии, но в момент кражи крышка была закрыта, и сейчас он заблокирован паролем юзера. Большинство владельцев макбуков носит их в спящем режиме, то есть просто закрывает крышку. Это самое вероятное состояние, в котором вор получит компьютер.

Самый простой способ прочитать данные — загрузиться с USB-флешки в Linux. Но если в системе включен FileVault, то прочитать данные не получится, поэтому перезагружаться для нас рисковано, ведь заранее неизвестно, включено шифрование или нет. Пока компьютер включен, файловая система точно расшифрована, поэтому нужно попытаться получить доступ не перезагружаясь.

Здесь можно было бы применить DMA-атаку, чтобы вытащить ключи FileVault из памяти. Но насколько мне известно, обычные DMA-атаки не работают через Thunderbolt из-за IOMMU. Существуют фреймворки вроде Thunderclap для атак на современные Thunderbolt-устройства, но таким кунфу я не владею.

Мы не будем рассматривать вариант брута пароля от учетной записи юзера, потому что это не спортивно. К тому же macOS добавляет большую задержку перед вводом нового пароля после неудачных попыток. Для такой атаки можно использовать любые аппаратные тулзы, позволяющие эмулировать HID-клавитуру, в том числе raspberry pi или arduino. Ключевым моментом здесь будет словарь для подбора. Я советую вам использовать пароль хотя бы с одним спец-символом и без словарных слов. Этого вполне достаточно чтобы защититься от такого брута.

Подключаем заблокированный ноутбук к Wi-Fi

Пока ноутбук включен и файловая система разблокирована, попробуем постучаться к нему по сети. Возможно, у жертвы включен сетевой диск или какие-то другие сервисы, через которые можно пролезть внутрь. Попробуем уговорить ноутбук подключиться к нашему WiFi.

Когда устройства сканируют WiFi-сети, в пакетах probe request они рассылают еще и имена сетей, к которым недавно подключились. То есть пока вы ходите по городу, ваш телефон или ноутбук рассылает имя вашей домашней WiFi-сети в надежде, что она ему ответит. По задумке это должно ускорить подключение к сети, когда она рядом.

Чтобы узнать, к каким сетям готов подключаться ноутбук жертвы, я кладу рядом с ним внешний WiFi адаптер и закрываю крышку импровизированной клетки Фарадея. Теперь адаптер будет хорошо слышать сигналы от ноутбука и не слышать другие.

Запускаем мониторный режим c фильтром по одному типу пакетов, ведь мы хотим видеть только проб-реквесты.

tcpdump -e -l -I -i en0 type mgt subtype probe-req BSSID:Broadcast DA:Broadcast SA:xx:xx:xx:xx:xx:xx Probe Request (MGTS_GPON_1856)BSSID:Broadcast DA:Broadcast SA:xx:xx:xx:xx:xx:xx Probe Request (MGTS_GPON_1856)BSSID:Broadcast DA:Broadcast SA:xx:xx:xx:xx:xx:xx Probe Request (Onlime)BSSID:Broadcast DA:Broadcast SA:xx:xx:xx:xx:xx:xx Probe Request (MT_FREE)

Видно, что ноутбук помнит несколько разных сетей, среди которых есть похожие на домашние. Важно иметь в виду, если ноутбук помнит сеть с паролем, то он не будет автоматически подключаться к ней, если она вдруг появится без пароля, но с тем же именем. Из эти названий мы можем предположить, что первые две сети, скорее всего, имели пароли, а вот последняя, это сеть московского общественного транспорта и она, видимо, была сохранена в памяти компьютера без пароля.

Такой тип атак достаточно древний, но до сих пор иногда работает. Есть автоматические инструменты вроде hostapd-karma, которые сразу отвечают на все имена сетей.

Теперь нам нужно поднять точку доступа с именем выбранной сети, в нашем случае MT_FREE, чтобы ноутбук автоматически к ней подключился. При этом нужно учесть, что если ноутбук сможет попасть в интернет, владелец сразу сможет его заблокировать и очистить диск. Но полностью интернет отключать нельзя, иначе macOS может сразу отключиться от такой WiFi сети, посчитав ее сломанной. Поэтому в ней должен быть работающий DHCP, DNS-резолвер и интернет по HTTP, чтобы работали тесты на captive-портал. Достаточно открыть в интернет только TCP порт 80, и macOS будет считать, что сеть абсолютно нормальная, при этом антикражные функции icloud работать не будут.

Если макбук успешно подключится к WiFi, нам останется просканировать его по сети на предмет открытых сервисов, сетевых шар и т.д. Я не буду рассказывать, как это сделать, потому что это выходит за рамки данной статьи.

Нужно честно признать, что большинство пользователей используют настройки по умолчанию и никакие дополнительные сетевые сервисы не настраивают, поэтому шанс успеха у такой атаки ничтожно мал. Но попробовать все равно стоило, так как это последний доступный способ взаимодействия с системой, у которой точно расшифрован диск.

Перезагрузка в неизвестность

Напомню, что пока система была загружена, у нас не было способа выяснить, включено ли шифрование диска FileVault. Чтобы это проверить нужно перезагрузить ноутбук. Это можно сделать, только зажав кнопку включения, так как на экране заблокированной сессии нет меню управления питанием. Далее, возможны два варианта развития событий:

FileVault не настроен

Изи катка! Просто загружаемся с флешки или вытаскиваем диск (на моделях до 2016 года) и все файлы нашей жертвы доступны в открытом виде. На линуксе потребуется немного заморочиться с настройкой fuse-apfs.

FileVault включен

При первой настройке FileVault предлагает загрузить ключ от шифрования диска в iCloud, и в теории вор мог бы атаковать аккаунт жертвы, но мы не рассматриваем фишинговые атаки в рамках этой статьи. Для брута FileVault существует несколько инструментов: коммерческие программы от Elcomsoft и открытые программы вроде apfs2john для использования вместе с John The Ripper.

Скорее всего, рядовой вор не будет тратить ресурсы на брут вашего диска, если только это не целевая атака на данные. Для простоты будем считать что не словарный пароль из 6-8 символов разного регистра с использованием спецсимволов не уязвим.

Как это должно работать по задумке Apple

Я долго не мог понять, как именно в Apple представляют работу Find My Mac в реальной жизни, ведь если следовать дефолтным рекомендациям при первой настройке системы, пользователь получить компьютер с активированным FileVault и злоумышленник никогда не сможет залогиниться, чтобы отстучаться в интернет и активировать все ловушки.

image

Единственный возможный сценарий, это гостевой аккаунт. По задумке вор после перезагрузки попадает на экран ввода пароля для разблокировки диска. Не угадав пароль, он выбирает гостевой аккаунт и загружается в Safari Only Mode. Это особый режим работы доступный только для гостевой учетной записи. В нем запускается только одна программа — браузер Safari. Дело в том, что при активации FileVault, часть диска остается незашифрованной для recovery раздела. В нем хранится минимальный образ macOS, отсюда и загружается Safari. В этом режиме вор может подключиться к интернету вот тут уже ноутбук свяжется с icloud и сможет выполнять удаленные поручения владельца.

Шаг 4: Продаем макбук

Работа с переменными NVRAM

Итак, вор получил или не получил доступ к данным и дальше он хочет продать ноутбук на вторичном рынке. Для этого ему нужно отвязать компьютер от учетных записей icloud и переустановить ОС. Кроме самой операционной системы на жестком диске, в макбуке есть переменные NVRAM, хранящиеся на флешке в материнской плате. Эти данные выживают после
переустановки macOS. В них хранится токен, по которому сервер опознает привязку макбука к учетной записи icloud.

Для работы переменными из юзерспейса есть утилита nvram:

Пример токена Find My Mac

# Токен Find My Mac $ nvram fmm-mobileme-token-FMM fmm-mobileme-token-FMM bplist00%dc%01%02%03%04%05%06%07%08%09%0a%0b%0c%0d%0e%10%0d%11%0d%12%13%14%15%16%1d_%10%0funregisterState_%10%12enabledDataclassesYauthToken^disableContextVuserid]enableContextXusernameXpersonIDWaddTimeTguidXuserInfo_%10%13dataclassProperties%10%00%a1%0f_%10!com.apple.Dataclass.DeviceLocator_%10%ccEAADAAAABLwIAAAAAF6Jva4RDmqzLmljbG91ZC5hdXRovQA_OvlxQ5x0ULxeZIwLf9ZKD2GL8xWXoQiCKVs4tSztt-QZ2ZPlgZqpHekekaGd06Bm20kyU4m1ryRhBPR5DNSSbfzrKM_Ap0elpAitBDkGyHGjTe9c5WajVpfvWe_RGFhcamieaVhGQGzsiFGe11nt1PtCzA~~%11%01%f5_%10%11ivan@ivanov.comZ1253943158#A%d7%a2or%f3kP_%10$7C83E2DA-8A39-414E-B004-4DE79E4D35B3%d3%17%18%19%1a%1b%1c_%10%15InUseOwnerDisplayName_%10%13InUseOwnerFirstName_%10%12InUseOwnerLastName]ivan ivanovUivanWivanov%d1%0f%1e%d5%1f !"#$%25&'(VapsEnvXhostname]idsIdentifierVscheme]authMechanismZProduction_%10%13p09-fmip.icloud.com_%10$0FFD23C3-F469-42C1-97E0-FD8EE1F80502UhttpsUtoken%00%08%00!%003%00H%00R%00a%00h%00v%00%7f%00%88%00%90%00%95%00%9e%00%b4%00%b6%00%b8%00%dc%01%ab%01%ae%01%c2%01%cd%01%d6%01%fd%02%04%02%1c%022%02G%02U%02[%02c%02f%02q%02x%02%81%02%8f%02%96%02%a4%02%af%02%c5%02%ec%02%f2%00%00%00%00%00%00%02%01%00%00%00%00%00%00%00)%00%00%00%00%00%00%00%00%00%00%00%00%00%00%02%f8

Интересно, что официальная справка по команде nvram скрывает некоторые функции. Намного полезнее оказался мануал из утекших документов ЦРУ, опубликованный на Wikileaks: EFI Basics: NVRAM Variables. Оказывается, утилита умеет напрямую работать с переменными UEFI (efi vars). Но изменять значения большинства переменных можно только с отключенным SIP (system integrity protection).

UPD: У меня перестало работать обращение к переменным EFI через утилиту nvram на macOS Catalina. Возможно, изменились GUID, имена переменных или синтаксис программы. Необходимо проверить актуальность переменных через UEFI shell или Linux.

Для отвязывания ворованного ноутбука достаточно очистить переменные nvram и переустановить ОС. Чтобы сбросить nvram нужно зажать Command (⌘) + Option + P + R при загрузке ноутбука. Этого достаточно чтобы сервера icloud перестали считать устройство принадлежащим определенной учетной записи icloud. И хотя после сброса nvram серийный номер материнской платы остается прежним, icloud разрешит привязать ноутбук к новой учетной записи.

Пароль на UEFI

На предыдущих шагах мы загружались с флешки (клавиша Option при загрузке) и сбрасывали nvram. Но оказывается, все это можно запретить с помощью пароля на UEFI. Об этом, кстати, мало кто знает даже среди опытных пользователей маков. Установленный пароль на прошивку запрещает такие действия:

  • Сброс NVRAM на этапе загрузки
  • Сброс SMC
  • Выбор другого метода загрузки (клавиша Option)

Во всех случаях будет запрошен пароль. То есть у вора не получится загрузиться с флешки и не получится легко отвязать комп от iСloud, сбросив токен Find My Mac из nvram. Так же не получится легко переустановить ОС.

Установить пароль на UEFI можно через Recovery Mode. Для этого на этапе загрузки нужно зажать CMD+R и выбрать в меню Startup Security Utility.

Но не все так радужно, пароль на UEFI не защищает. На макбуках до 2019 года, прошивка UEFI и переменные NVRAM хранятся обычной SPI флешке, к которой можно подключиться программатором и без всякой авторизации изменить любые данные.

Сброс пароля UEFI

На всех макбуках без чипа T2, прошивка на материнской плате никак не защищена. Ее можно легко перепрошить, в том числе убрать пароль на UEFI. Для этого достаточно подключиться программатором к дебаг-разъему на материнской плате и дальше можно работать с чипом памяти как с обычной флешкой.


Универсальный кабель для прошивки флешки под все модели макбуков

Есть определенная некоторая путаница с этими разъемами, так у них нет ключа, то есть можно подключать разными сторонами. На разных моделях макбуков разъем находится в разных местах, также иногда требуется отдельно припаять питание флешки 3.3V. Поэтому иногда нужно внимательно изучить схему конкретной материнской платы.

Существуют также полностью автономные устройства, которые находят нужно смещение в прошивке и налету патчат его, отключая UEFI пароль. В некоторых сервисных центрах, где предлагают избавление от пароля на UEFI, предпочитают выпаивать чип памяти и прошивать его в зажиме программатор.

UEFI импланты

Есть отдельная экзотика — внешние платы с EEPROM вставляющиеся сразу в debug-разъем. Обычно их уже прошивают под нужную материнскую плату. Сразу после установки компьютер начинает грузиться с этой флешки, игнорирую родную, распаянную на материнской плате. При этом родная флешка может оставаться с паролем прошивки. Такие импланты удобно использовать для экспериментов с патчами UEFI, всегда можно откатиться на родную прошивку, просто вытащив модуль.

Фишинговая антикражная система

Меня так расстраивала бесполезность всех антикражных систем Apple, что я решил придумать свою. Это было еще до анонса чипа Т2, поэтому на аппаратную защиту полагаться было нельзя и я решил просто обмануть вора, чтобы он сам сделал все, что требуется.

Схема такая:

  1. На диске макбука выделяется маленький раздел под линукс. Современное ядро (efistub) может грузиться сразу без всяких промежуточных загрузчиков вроде refind. Я писал об этом в статье Linux в одном файле для Macbook. По умолчанию ноутбук загружает Linux, в котором запускается замаскированный под macOS мастер первичной настройки. На видео он показан с 7:00.
  2. Хитрость состояла в том, что в легитимной macOS был установлен скрипт, который выполнялся каждый раз при грейсфульном (корректном) выключении, и устанавливал флаг в nvram загрузить macOS один раз при следующей перезагрузке. То есть если вырубить ноутбук, просто зажав кнопку, флаг не установится, и вор попадет в фишинговый линукс. При этом настоящий владелец может пользоваться системой, не замечая линукса. То есть все штатные выключения, перезагрузка и обновления работают как обычно. Загрузка в линукс просходит только в случае аварийного отключения. Таким образом, вор неизбежно попадает в фишинговый линукс, потому что не может корректно завершить сеанс юзера.
  3. Мастер настройки предлагает выполнить первичную настройку системы и для этого просит подключится к WiFi. Дальше рисует фейковый процесс загрузки чего-то, а сам в этот момент отстукивается на сервер и дает полный доступ настоящему владельцу.
  4. Владелец по BSSID точек доступа WiFi находит местоположение ноутбука, может слушать звук с микрофона и смотреть на вора через камеру и т.д. Пока интерфейс мастера настройки показывает фейковый процесс загрузки обновлений, владелец ноутбука уже едет по адресу.

В итоге серверную часть я так и не доделал, но вот исходники мастера настройки на Electron. Выглядит, кстати, очень правдоподобно, я бы даже сам повелся.

Демонстрация на видео:

Выводы

  • Функция FindMy очень крутая. Шанс найти потерянную сумку с ноутбуком сильно повышается. Настройте ее правильно, обновите ОС на устройствах, чтобы минимум два устройства поддерживали эту функцию. Помните, что она работает только в программах на устройствах и не работает на сайте. Если у вас только одно устройство, эта функция работать не будет!
  • Включите шифрование диска FileVault! Нет ни одной причины его не использовать. Оно не тормозит работу диска и не повышает его износ. Так вы не будете бояться потерять компьютер, отдать его в сервис или на экспертизу в случае ареста. Если вы боитесь, что не сможете восстановить данные в случае сбоя, то вы и так гарантированно потеряете свои данные, если до сих пор полагаетесь на один физический носитель, который точно скоро сломается безвозвратно. Научитесь делать бекапы, освойте тайм капсулу или попробуйте облачные сервисы для хранения файлов, как вам больше нравится.
  • Включите гостевой аккаунт. Вам он не будет мешать, но есть шанс, что глупый вор сможет воспользоваться компьютером по назначению, вместо того чтобы сразу искать способ очистить систему. Так вы повышаете шансы найти компьютер.
  • Установите пароль на UEFI. Это сильно усложнит отвязывание компьютера от учетных записей icloud. Если боитесь забыть его, используйте такой же пароль, как от учетной записи.
  • Выбирайте макбук с чипом T2. Если есть возможность, покупайте макбук с чипом Т2. Его нельзя так же просто очистить, как EEPROM на старых макбуках. Продать такой компьютер можно только на запчасти.

Показать больше

Похожие публикации

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Кнопка «Наверх»