Как я на курсы Информзащиты ходил. Часть первая, техническая.

Как я на курсы Информзащиты ходил. Часть первая, техническая.

В конце июля мне довелось побывать на учебных курсах в УЦ " Информзащита ". Это, наверное, один из старейших и крупнейших учебных центров в нашей стране с самым большим ассортиментом курсов: начиная от компьютерной безопасности и заканчивая экстремальным вождением. После долгих раздумий, мною был выбран курс ЭБ06 "Система противодействия незаконным методам конкурентной разведки", так как мне всегда было интересно, как там на другой стороне информационной безопасности - в безопасности экономической.

Свой обзор я решил начать с конца - покрутить со всех сторон электронные материалы курса и приложение Информзащиты из Google Play , которое разработано специально для абитуриентов курсов и позволяет скачивать учебные пособия к себе на телефон.

name='more'> Как и многие компании в эпоху копирастии, Информзащита не даёт вам напрямую учебные материалы в электронном виде. Вместо этого вам нужно качать специальное приложение на смартфон, авторизовываться каждый раз и читать материалы на телефоне. Достать методичку из приложения нельзя, сохранить себе в архив нельзя, скопировать текст нельзя, использовать любимый ридер нельзя. В общем, сплошная несправедливость, терпеть которую было бы не правильно.

Приложение сохраняет скаченные на устройство курсы в память телефона в формате 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 для шифрования может только студент, что сервер светится в интернете как новогодняя елка и т.д. Однако, в целом, приложение написано достаточно качественно: украсть чужую книгу не получится, и это главное.

Уязвимых к подобным атакам приложений сегодня тьма тьмущая! Бери любое и копай. Что-нибудь да и накопаешь всегда. Возможно, если бы у Информзащиты была программа вознаграждения за найденные уязвимости, такого бы не произошло ;).

Про сами курсы напишу в следующий раз!

Что ещё почитать?

Alt text

Тени в интернете всегда следят за вами

Станьте невидимкой – подключайтесь к нашему каналу.

Артем Агеев

root@itsec.pro:~#