Cryptographic/Compression Algorithms

Криптографічні/Компресійні Алгоритми

Вивчайте хакінг AWS від нуля до героя з htARTE (HackTricks AWS Red Team Expert)!

Інші способи підтримки HackTricks:

Визначення Алгоритмів

Якщо ви зустрілися з кодом, де використовуються зсуви вправо та вліво, XOR та кілька арифметичних операцій, велика ймовірність, що це реалізація криптографічного алгоритму. Тут будуть показані деякі способи визначення використаного алгоритму без необхідності розгортання кожного кроку.

Функції API

CryptDeriveKey

Якщо використовується ця функція, ви можете знайти, який алгоритм використовується, перевіривши значення другого параметра:

Перевірте тут таблицю можливих алгоритмів та їх призначених значень: https://docs.microsoft.com/en-us/windows/win32/seccrypto/alg-id

RtlCompressBuffer/RtlDecompressBuffer

Стискає та розпаковує заданий буфер даних.

CryptAcquireContext

З документації: Функція CryptAcquireContext використовується для отримання дескриптора певного контейнера ключів у певному постачальнику криптографічних послуг (CSP). Цей отриманий дескриптор використовується в викликах функцій CryptoAPI, які використовують вибраний CSP.

CryptCreateHash

Ініціює хешування потоку даних. Якщо використовується ця функція, ви можете знайти, який алгоритм використовується, перевіривши значення другого параметра:

Перевірте тут таблицю можливих алгоритмів та їх призначених значень: https://docs.microsoft.com/en-us/windows/win32/seccrypto/alg-id

Константи коду

Іноді дуже легко визначити алгоритм завдяки тому, що він потребує використання спеціального та унікального значення.

Якщо ви шукаєте першу константу в Google, отримаєте наступне:

Отже, можна припустити, що розгорнута функція - це калькулятор sha256. Ви можете шукати будь-яку іншу константу і, ймовірно, отримаєте той самий результат.

Інформація про дані

Якщо код не має значущої константи, можливо, він завантажує інформацію з розділу .data. Ви можете отримати доступ до цих даних, згрупувати перше слово та шукати його в Google, як ми робили в попередньому розділі:

У цьому випадку, якщо ви шукаєте 0xA56363C6, ви дізнаєтеся, що це пов'язано з таблицями алгоритму AES.

RC4 (Симетрична Криптографія)

Характеристики

Складається з 3 основних частин:

  • Етап ініціалізації/: Створює таблицю значень від 0x00 до 0xFF (всього 256 байтів, 0x100). Цю таблицю зазвичай називають Таблицею Заміни (або SBox).

  • Етап перемішування: Пройде по таблиці, створеній раніше (цикл з 0x100 ітерацій, знову) змінюючи кожне значення за допомогою пів-випадкових байтів. Для створення цих пів-випадкових байтів використовується ключ RC4. Ключі RC4 можуть бути від 1 до 256 байтів у довжину, проте зазвичай рекомендується, щоб вони були більше 5 байтів. Зазвичай ключі RC4 мають довжину 16 байтів.

  • Етап XOR: Нарешті, відкритий текст або шифротекст XOR-ються зі створеними значеннями раніше. Функція для шифрування та дешифрування однакова. Для цього буде виконано цикл через створені 256 байтів стільки разів, скільки потрібно. Це зазвичай визначається в розгорнутому коді з %256 (mod 256).

Для визначення RC4 в розкладці/розгорнутому коді можна перевірити 2 цикли розміром 0x100 (з використанням ключа) та потім XOR вхідних даних зі 256 значеннями, створеними раніше в цих 2 циклах, ймовірно, використовуючи %256 (mod 256)

Етап ініціалізації/Таблиця Заміни: (Зверніть увагу на число 256, використане як лічильник, та те, як 0 записано на кожному місці з 256 символів)

Етап перемішування:

Етап XOR:

AES (Симетрична Криптографія)

Характеристики

  • Використання таблиць заміни та таблиць пошуку

  • Можливо відрізнити AES завдяки використанню конкретних значень таблиць пошуку (констант). Зауважте, що константа може бути збережена в бінарному або створена динамічно.

  • Ключ шифрування повинен бути кратним 16 (зазвичай 32 байти), і зазвичай використовується IV довжиною 16 байтів.

Константи SBox

Змій (Симетрична Криптографія)

Характеристики

  • Рідко зустрічається вірусне програмне забезпечення, але є приклади (Ursnif)

  • Просто визначити, чи алгоритм є Змією, або ні, на основі його довжини (дуже довга функція)

Визначення

На наступному зображенні зверніть увагу на те, як використовується константа 0x9E3779B9 (зверніть увагу, що ця константа також використовується іншими криптографічними алгоритмами, такими як TEA -Tiny Encryption Algorithm). Також зверніть увагу на розмір циклу (132) та кількість операцій XOR в інструкціях розкладки та в прикладі коду:

Як було зазначено раніше, цей код можна візуалізувати всередині будь-якого декомпілятора як дуже довгу функцію, оскільки всередині неї немає стрибків. Розгорнутий код може виглядати наступним чином:

RSA (Асиметричне шифрування)

Характеристики

  • Складніший, ніж симетричні алгоритми

  • Немає постійних значень! (важко визначити власну реалізацію)

  • KANAL (криптоаналізатор) не показує підказок щодо RSA, оскільки він ґрунтується на постійних значеннях.

Визначення за порівнянням

  • У рядку 11 (ліворуч) є +7) >> 3, що таке саме, як у рядку 35 (праворуч): +7) / 8

  • Рядок 12 (ліворуч) перевіряє, чи modulus_len < 0x040, а в рядку 36 (праворуч) перевіряється, чи inputLen+11 > modulusLen

MD5 & SHA (хеш)

Характеристики

  • 3 функції: Ініціалізація, Оновлення, Фіналізація

  • Схожі функції ініціалізації

Визначення

Ініціалізація

Ви можете визначити обидва, перевіряючи постійні значення. Зверніть увагу, що sha_init має 1 постійне значення, якого немає у MD5:

MD5 Transform

Зверніть увагу на використання більше постійних значень

CRC (хеш)

  • Менший та ефективніший, оскільки його функція полягає в пошуку випадкових змін у даних

  • Використовує таблиці пошуку (тому ви можете визначити постійні значення)

Визначення

Перевірте постійні значення таблиці пошуку:

Алгоритм хешування CRC виглядає так:

APLib (Компресія)

Характеристики

  • Нерозпізнавані постійні значення

  • Ви можете спробувати написати алгоритм на Python та шукати схожі речі в Інтернеті

Визначення

Графік досить великий:

Перевірте 3 порівняння для визначення:

Last updated