Пост
Hello :)

Уязвимый Казнет и не только / iOS

-

Как ломаются гео-ограничения в iOS?


Уже достаточно давно занимаюсь тестированием iOS приложений и периодически сталкиваюсь с ситуацией, когда разработчики вводят ограничения функционала, опираясь исключительно на GPS координаты устройства. Чаще всего это используется для региональных ограничений: доступ к функциям, платежам или контенту разрешён только в определённой стране. На практике такая защита оказывается довольно слабой, поскольку координаты устройства можно подменить даже на полностью легитимном iPhone без Jailbreak

Можно использовать инструмент pymobiledevice3, который взаимодействует с устройством через стандартные developer сервисы iOS. Сначала необходимо активировать режим разработчика и подключить iPhone по USB. Заметил, что режим разработчика может отсутствовать в меню настроек, в таком случае его можно попробовать активировать командой 

python3 -m pymobiledevice3 amfi enable-developer-mode
После подготовки запускается туннель к developer сервисам устройства. В одном терминале выполняется команда:
python3 -m pymobiledevice3 remote tunneld

Процесс остается запущенным обеспечивая соединение с сервисами разработчика на устройстве.

Параллельно во втором терминале можно отправлять команды симуляции геолокации. Например, можно подменить координаты устройства на координаты Пекина:


python3 -m pymobiledevice3 developer dvt simulate-location set -- 39.9027481 116.4008192

После выполнения команды система начинает отдавать приложениям подменённые координаты, и большинство приложений будет воспринимать их как реальные данные GPS.



Для пробного тестирования я использовал приложение банка, в котором возможность проведения платежей была ограничена территорией Китая. Логика ограничения была реализована достаточно просто: приложение проверяло координаты устройства и, если они находились за пределами страны, функция оплаты становилась недоступной. После подмены координат на точку в Китае приложение начинало считать, что устройство действительно находится в нужном регионе, и платежная функция становилась активной, несмотря на то что физически устройство находилось в другой стране.

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



Если разработчик хочет реализовать географические ограничения, опираться только на GPS недостаточно. Более надёжный подход использовать несколько источников. Например, помимо GPS координат стоит учитывать геолокацию IP адреса пользователя и системный часовой пояс. Эти параметры должны соответствовать друг другу. Если GPS показывает Китай, IP принадлежит европейскому провайдеру, а часовой пояс устройства установлен на UTC+1, это явное несоответствие, которое может указывать на попытку обхода ограничений.

Также полезно анализировать поведение перемещения пользователя. Если устройство находилось в одной стране, а через несколько секунд "оказалось" на другом континенте, это физически невозможно. Даже при авиаперелётах такие перемещения занимают часы. Поэтому на стороне сервера можно анализировать расстояние между последними известными координатами и время между их получением. Если расчётная скорость перемещения превышает реалистичные значения, такое событие можно помечать как подозрительное и ограничивать выполнение операций.

При проектировании региональных ограничений лучше рассматривать GPS не как основной механизм защиты, а лишь как один из факторов в общей системе проверки.
  • Serj, 10 апреля 2026
1 комментарий
Avatar
  1. Заур Местоев
    Заур Местоев
    Вчера, 12:24
    👍👍👍

© SERJ.WS 2011-2026