В конце июля мне довелось побывать на учебных курсах в УЦ "Информзащита". Это, наверное, один из старейших и крупнейших учебных центров в нашей стране с самым большим ассортиментом курсов: начиная от компьютерной безопасности и заканчивая экстремальным вождением. После долгих раздумий, мною был выбран курс ЭБ06 "Система противодействия незаконным методам конкурентной разведки", так как мне всегда было интересно, как там на другой стороне информационной безопасности - в безопасности экономической.
Свой обзор я решил начать с конца - покрутить со всех сторон электронные материалы курса и приложение Информзащиты из Google Play, которое разработано специально для абитуриентов курсов и позволяет скачивать учебные пособия к себе на телефон.
Как и многие компании в эпоху копирастии, Информзащита не даёт вам напрямую учебные материалы в электронном виде. Вместо этого вам нужно качать специальное приложение на смартфон, авторизовываться каждый раз и читать материалы на телефоне. Достать методичку из приложения нельзя, сохранить себе в архив нельзя, скопировать текст нельзя, использовать любимый ридер нельзя. В общем, сплошная несправедливость, терпеть которую было бы не правильно.
Приложение сохраняет скаченные на устройство курсы в память телефона в формате PDF, однако, как оказалось, файлы шифруются, и открыть нормальной читалкой их нельзя.
Первое, с чего я начал, это решил осмотреть, как приложение общается с сервером. Для этого на большем ПК запускаем proxy из Burp Suite.
А на телефоне в свойствах WiFi указываем IP и порт проксисервера.
Запускаем программу, скачиваем книжку.
И смотрим на трафик, который наловил Burp Suite.
В трафике сразу видно прямой линк на зашифрованный PDF файл и любопытный запрос "get_book_key". Осталось только проверить, не зависит ли запрашиваемый ключ от идентификатора сессии. Нет, не зависит.
Традиционно самым излюбленным "алгоритмом шифрования" типичного программиста является обычный XOR, и если б я не напутал с типами данных в питоне, рассказ можно было на этом и закончить. Однако я напутал, и мне пришлось лезть в исходный код приложения чтобы выяснить, как происходить расшифровка книги.
Первым делом нужно выкачать сам apk файл из магазина андроид приложений Google Play.
Сделать это проще всего с помощью плагина к Хрому APK Downloader.
Исходный код андроид приложения (или кусок кода) можно всегда выдрать из apk файла с помощью конвертеров.
1. Качаем apktool и выдираем из apk dex фаил;
2. Конвертируем .dex в .jar с помощью dex2jar;
3. Открываем ru.digipeople.informprotect.jar с помощью JD-Gui.
Немного пощелкав по ресурсам приложения, находим процедуру с любопытным названием PDFDecryptFileStream
Да, блин. Это банальный XOR.
Покопавшись в документации на питон (боже, храни stackoverflow!), я набросал небольшой скрипт, который и собрал мне мою долгожданную нормальную пдфку!
def xor_strings(xs, ys):Вот собственно и она!
return "".join(chr(ord(x) ^ ord(y)) for x, y in zip(xs, ys))
key = "6AFC504FA4BA818AFB0304F287968662"
with open("input.pdf", "rb") as f:
pdf = f.read()
with open("output.pdf", 'wb') as f:
for i in range(0, len(pdf), len(key)):
f.write(xor_strings(key, pdf[i:i+len(key)]))
Какие выводы из всего этого можно сделать? Можно, конечно, сказать, что разработчики не уделили достаточного внимания алгоритму обмена ключами, что использовать XOR для шифрования может только студент, что сервер светится в интернете как новогодняя елка и т.д. Однако, в целом, приложение написано достаточно качественно: украсть чужую книгу не получится, и это главное.
Уязвимых к подобным атакам приложений сегодня тьма тьмущая! Бери любое и копай. Что-нибудь да и накопаешь всегда. Возможно, если бы у Информзащиты была программа вознаграждения за найденные уязвимости, такого бы не произошло ;).
Про сами курсы напишу в следующий раз!
Аксиома: если разработчики не могут обеспечить адекватную защиту собственных продуктов, значит и у их клиентов тоже будут с этим проблемы.
ОтветитьУдалитьТак понял, что разработчики софта - контора DigiPeople, а не КодБезопасности.
УдалитьДа и у меня сложилось наоборот приятное впечатление от их труда: пользователь аутентифицируется (пароль зашифрован), получает список доступных книг, качает отдельно книгу, отдельно ключ, хранит PDF в зашифрованном виде и расшифровывает её только на время сессии пользователя.
Вполне неплохо для обычного приложения!
Через портал для обучающихся можно распечатать курс ... в файл PDF. Шифрование отсутствует.
ОтветитьУдалитьСети свои внутренние они от вирусов то почистили?)
ОтветитьУдалитьНе знаю, компьютер не включал. Без надобности было :(
УдалитьУ них там в сетях помимо вирусни, был насквозь дырявый сайт, написанный на коленке, откуда можно было мнооого чего надергать)
Удалитьhttp://habrahabr.ru/post/187266/
Сейчас вроде ситуация получше.
Насчет монотонного бубнения, есть и такое)