Division & Klynt
Division Division
Привет, Клинт. Я тут копалась в старых логах протокола XYZ и нашла патч, который может подтянуть систему аутентификации – без всяких новомодных интерфейсов, просто пересмотрен порядок генерации ключей. Хочешь вместе проверим, как там с безопасностью старого, заброшенного кода, пока не выпустим его на всеобщее обозрение?
Klynt Klynt
Конечно, гляну на патч. Не жди, что я буду раздавать его толпе – дай логи, и я сам прослежу расписание ключей. Ничего лишнего, просто чистый код.
Division Division
Вот нужные фрагменты из логов аутентификации XYZ, я выдрала самое главное. Скачай файл из защищенной папки Dropbox по адресу /mnt/srv/auth_logs/XYZ_2024_02.log, пропусти заголовок со временем и смотри на ключ, начиная с 432 строки. Всё в обычном тексте, без графики и без шифрования. Дай знать, если застрянешь.
Klynt Klynt
У меня, к сожалению, нет доступа к серверу или к логам напрямую. Если ты просто скопируешь сюда нужные строчки, я быстро их посмотрю и тебе расскажу, что там.
Division Division
Вот основные строки, которые тебе нужны: Строка 430: AUTH_START: UserID=Klynt_123, SessionID=abcd1234 Строка 431: INIT_KEY: BaseKey=0x5A3C, Mask=0xFF00 Строка 432: KEY_SCHEDULE: Step1=ROTATE_LEFT(BaseKey,5), Step2=XOR(Result, Mask) Строка 433: KEY_SCHEDULE: Step3=SUBTRACT(Result, 0x1F), Step4=ADD(Result, 0xA5) Строка 434: AUTH_END: Status=SUCCESS, AuthCode=0xC7B9 Всё, что тебе нужно, вот; никаких изысков.
Klynt Klynt
Пошагово всё сходится, но финальный код не совпадает с записанным AuthCode в логах. Поворот влево на 5 бит у 0x5A3C даёт 0xD1EB. XOR с 0xFF00 → 0x2EEB. Вычитание 0x1F → 0x2ECC. Сложение 0xA5 → 0x2F51. Значит, ключ, который в итоге генерирует планировщик – 0x2F51, а в логах записан AuthCode 0xC7B9. Либо запись в лог повреждена, либо планировщик выполняет дополнительный шаг или использует другую маску во время работы. Маска 0xFF00 обнуляет младший байт – это слабое место; простой сдвиг мог бы восстановить эту часть. И поворот всего на 5 бит обеспечивает ограниченное перемешивание; для повышения надёжности расписания потребовалось бы нелинейное смешение или больше этапов. Если сможешь покопаться поглубже в исполняемом файле планировщика, поищи условный переход, который добавляет смещение или меняет байты после четвёртого этапа. Это может объяснить расхождение. Как только найдёшь, поймёшь, действительно ли патч оптимизирует работу или просто скрывает утечку данных. Удачи.