• XSS.stack #1 – первый литературный журнал от юзеров форума

Статья Несколько слов об энтропии

lulz

CD-диск
Пользователь
Регистрация
19.05.2021
Сообщения
13
Реакции
32
1626359851200.png

Всем известно что энтропия - это мера хаоса системы, а "информация" (данные) - это мера упорядоченности системы. Используя это свойство можно выполнять качественный анализ данных вне зависимости от их характера, вычисляя функцию частоты распределения: значение этой функции будет принимать большие значения для данных содержащих больше "хаоса" и, соответственно, меньшие значения для данных, содержащих меньше "хаоса".

Немного теории​

Программа, демонстрирующая описанное выше свойство частоты распределения байтов данных в файле приведена далее (оригинал лежащего в основе кода доступен здесь).
Python:
import sys
import math
import os
import numpy as np
import matplotlib.pyplot as plt

if len(sys.argv) != 2:
    print("Usage: " + os.path.basename(__file__) + " filename")
    sys.exit()

f = open(sys.argv[1], "rb")
byteArr = map(ord, f.read())
f.close()
fileSize = len(byteArr)
#print("File size in bytes: " + fileSize)

freqList = []
for b in range(256):
    ctr = 0
    for byte in byteArr:
        if byte == b:
            ctr += 1
    freqList.append(float(ctr) / fileSize)
# print("Frequencies of each byte-character: " + freqList)

# entropy
ent = 0.0
for freq in freqList:
    if freq > 0:
        ent = ent + freq * math.log(freq, 2)
ent = -ent


N = len(freqList)

ind = np.arange(N)  # the x locations for the groups
width = 1.00        # the width of the bars

#fig = plt.figure()
fig = plt.figure(figsize=(11,5),dpi=100)
ax = fig.add_subplot(111)
rects1 = ax.bar(ind, freqList, width)
ax.set_autoscalex_on(False)
ax.set_xlim([0,255])

ax.set_ylabel('Frequency')
ax.set_xlabel('Byte')
ax.set_title('Frequency of Bytes 0 to 255\nFILENAME: ' + sys.argv[1])

plt.show()

В результате выполнения программы, для заданного файла, вычисляется значение энтропии, а также строится частотная характеристика.
В качестве наглядного примера можно рассмотреть частотные характеристики файла со сжатием и без сжатия (первый и второй графики соответственно).

1626359886600.png


1626359901800.png


Из графиков видно, что у сжатого файла энтропия выше, чем у файла без сжатия. Этот принцип широко используется при анализе бинарных файлов, позволяя сделать вывод о наличии/отсутствии сжатия в файле (и его типе).
Помимо анализа бинарных файлов свойство энтропии используется и при анализе обычных файлов: у строк, содержащих секреты (пароли/криптографические ключи/токены и т.п.) энтропия выше чем у обычных строк. Применение энтропии при анализе данных существенно ускоряет этот процесс.

На этом краткий экскурс в теории можно закончить и перейти к практике.

Софт​

Софта подобной тематики существует масса (любят велосипеды делать).
Наиболее известным считается truffleHog, в котором реализованы типовые функции для анализа (поиск по заданным шаблонам, поиск по энтропии и т.д.). Имеет большой недостаток - работает только с git-репозиториями, без возможности анализа локальных файлов. Существует доработанная до ума модификация - truffleHog3. Среди доработок: добавили возможность работы с локальными файлами, а также функции фильтрации результатов. Как и оригинал, truffleHog3 также давно не обновлялся.

В настоящее время активно развивается идейный продолжатель truffleHog - rustyHog, превосходящий предшественника как по скорости работы, так и по количеству реализованных фич.
Распространяется rustyHog в виде исходных текстов (компилируется в несколько команд, как под windows, так и под linux/macos), также имеется готовый образ в Docker.

Для удобства использования rustyHog разбит на компоненты по области применения:
  • Ankamali Hog: для работы с гугл-диском.
  • Berkshire Hog: для работы с S3-инстансами.
  • Choctaw Hog: для работы с Git-репозиториями.
  • Duroc Hog: для работы с файловой системой.
  • Essex Hog: для работы с Confluence.
  • Gottingen Hog: Sдля работы с JIRA.
Список параметров у каждой из утилит типовой, пример справки для duroc_hog приведён на рисунке ниже.

1626359918200.png


Анализ данных​

Чтобы продемонстрировать возможности анализа необходим хороший и наглядный пример: слитая в паблик утечка CD-Project отлично для этого подойдёт.
В числе выложенных и доступных архивов для анализа практическую пользу имеет только архив cp.7z, весящий 120 Гб, после распаковки имеем 160 Гб данных (структура каталогов приведена на рисунке далее). С помощью rustyHog найти что-то интересное становится достаточно просто.

1626359935600.png


В логе каждая из записей содержит поля, позволяющие однозначно понять что было найдено и где (путь до файла, номер строки, выявленный тип данных). Список используемых по умолчанию полей доступен здесь. По умолчанию он содержит большое количество регулярных выражений, с помощью которых могут быть найдены секреты без применения энтропии.

Результат.
Пример выявленных интересных строк, с использованием энтропии приведён на рисунке ниже. Полностью результаты намеренно не привожу, т.к. анализ этих результатов показал отсутствие какой-либо полезной информации.

1626359956000.png


Из полного списка шаблонов регулярных выражений для поиска заслуживают внимания следующие типы секретов: Generic Secret, RSA private key, Credentials in absolute URL, Generic Account API Key (остальные не рассматриваем, т.к. их наличие маловероятно). Результаты выявленных секретов приведены далее на рисунках.

1626359972300.png


1626360006500.png

1626360024200.png

1626360037900.png




Итог анализа
В составе "утечки" CD-Project слитой в паблик было выявлено:
  • несколько приватных ключей;
  • несколько секретов, используемых при сборке-отладке;
  • большое количество адресов email разработчиков используемых opensource компонентов;
  • очень большая куча мусора.
Ничего из выявленного не представляет ценности как таковой.
Результат в целом соответствует действительности: были слиты части SDK и куски кода, не содержащие какой-либо ценности.
Всё то же, что имеет хоть какой-то вес содержится в архивах под паролем, о чём было написано в readme-файле в торрент раздаче данной "утечки".

1626360059000.png



Заключение
В этой статье мы рассмотрели простой способ для быстрого анализа данных, а вот где применять его решать вам.
Спасибо за внимание!

P.S.: Статья написана при содействии club1337, спасибо.
 
Последнее редактирование:
Интересно...
А я-то ответственно раздаю исходники CD-Project, в которых нет этих архивов :confused:

P.S.: уже не раздаю, ищу актуальную ссылку на торрент.
 
Последнее редактирование:
слитая в паблик утечка CD-Project отлично для этого подойдёт.
можно ссылочку скорректировать?=)
 
можно ссылочку скорректировать?=)
Оригинальная ссылка, где скачать:
Код:
magnet:?xt=urn:btih:44134e7ade0f85e0ee940c33a7bfed5204587b93&dn=cp_no_password&tr=udp%3A%2F%2Ftracker.openbittorrent.com%3A80&tr=udp%3A%2F%2Ftracker.opentrackr.org%3A1337%2Fannounce
 


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх