Российский хакер Алексей Бородин создал немало головной боли компании Apple, когда осуществил реверс-инжиниринг протокола AppStore и опубликовал инструкцию, как можно подделывать чеки In-App покупок внутри приложений, то есть «покупать бесплатно» контент внутри любого приложения, например, новые уровни, бонусы и проч. Сам Алексей Бородин сравнивает In-App покупки с «читерством» и «продажей воздуха», потому что в реальности деньги берут за разблокировку контента, который уже присутствует на телефоне.
Способ универсальный и работает практически в любом приложении, требуется всего лишь осуществить атаку типа MITM на свой собственный телефон, установив на него два фальшивых CA-сертификата (первый, второй) и прописав фальшивый DNS, который якобы кэширует ответы от сервера Apple, подтверждая сделанную покупку.
В подтверждение покупки фальшивый DNS-сервер выдаёт устройству фальшивую квитанцию стандартного образца.
За прошедшую неделю хакер Алексей Бородин стал настоящей звездой: его показали по телеканалу «Россия», у него взяли интервью для нескольких сайтов, и даже газета «Ведомости» опубликовала про него статью в закрытом разделе, защищённом In-App покупкой (facepalm).
Компания Apple целую неделю пыталась удалить с различных хостингов вышеупомянутые сертификаты и заблокировать DNS-серверы — но всё безуспешно. Способ по-прежнему работает: на 18 июля сделано 8,46 миллиона бесплатных покупок.
Теперь «яблочная компания» пошла по-другому пути и стала пробовать технические способы защиты. Вчера Apple начала внедрять уникальные идентификаторы в каждую квитанцию на подтверждение покупки. Разработчики сообщают, что в квитанции появилось новое поле “unique_identifer". Можно предположить, что оно должно содержать уникальный номер устройства Unique Device Identifier (UDID), совершающего покупку.
Если так, то подобное действие идёт в разрез с последней политикой Apple, согласно которой Apple запрещала приложениям собирать UDID с устройств. Так что вполне возможно, что «уникальный идентификатор» будет соответствовать не устройству, а отдельной покупке. Если по этому идентификатору покупка будет проводиться на сервере Apple и сверяться с ним во время транзакции, то таким образом можно попробовать бороться с хаком, который предложил Алексей Бородин.