Приємно спостерігати за дедалі більшим впровадженням закріплення сертифікатів у програмах Android. Коли я стикаюся з програмою, яка видає помилки підключення під час спроби проксі-запитів, я, як правило, більше зацікавлений у зануренні глибше. Так було, коли я нещодавно використовував додаток Subway. Скасування APK виявило закріплення сертифіката серед інших цікавих знахідок.
Запуск програми під час проксі-запитів викликав цю помилку:
Закріплення досить просто обійти. Я почав з декомпіляції програми та аналізу вихідного коду для закріплення ключових слів. Насправді я знайшов реалізації закріплення у двох окремих класах, які реалізували X509TrustManager. Ось один із методів примусового закріплення:
// Code removed at request of Subway leadership
Обійти це було так само просто, як додати оператор return у код smali, щоб пропустити код закріплення у методі вище. Зверніть увагу на додавання повернення-недійсність заява нижче:
// Code removed at request of Subway leadership
Після перекомпіляції програми та встановлення я був здивований, побачивши цю нову помилку:
Subway використовував власний процес перевірки підпису додатка, щоб запобігти скасуванню їх APK. Шукаючи джерело для згадок про цей процес, я простежив його назад до наступного методу:
// Code removed at request of Subway leadership
Це була цікава спроба запобігти зворотній інженерії, хоча насправді це спричинило лише невелику затримку. Щоб обійти цей процес, я просто додав рядок, щоб пропустити виконання методу, додавши інший повернення-недійсність лінії, подібно до процесу обходу закріплення вище.
// Code removed at request of Subway leadership
Після перекомпіляції та встановлення програми я зміг успішно надсилати проксі-запити:
Під час свого дослідження я натрапив на цю публікацію на Reddit. Очевидно, Subway також визначав, чи був пристрій користувача рутованим. Я пошукав у джерелі та підтвердив згадки про методи виявлення коренів.
// Code removed at request of Subway leadership
Це чудовий приклад того, як програма дуже серйозно ставиться до безпеки, але я не зовсім впевнений у міркуванні процесу кореневої перевірки. Хоча методи закріплення сертифіката та перевірки підпису загалом є хорошою ідеєю, вони лише трохи перешкоджають процесу зворотного проектування.