Skip to content

Commit c8d1018

Browse files
committed
Fedorov course notes [SENATOROVAI#4] (SENATOROVAI/DA#4)
Closes SENATOROVAI/DA#4
1 parent 4ab0b7d commit c8d1018

File tree

2 files changed

+371
-0
lines changed

2 files changed

+371
-0
lines changed
Lines changed: 300 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,300 @@
1+
{
2+
"cells": [
3+
{
4+
"cell_type": "code",
5+
"execution_count": null,
6+
"id": "9658c1a1",
7+
"metadata": {},
8+
"outputs": [],
9+
"source": [
10+
"\"\"\"Fuzzy hashing in Python.\"\"\""
11+
]
12+
},
13+
{
14+
"cell_type": "markdown",
15+
"id": "ec335297",
16+
"metadata": {},
17+
"source": [
18+
"# Нечеткое хеширование на Python"
19+
]
20+
},
21+
{
22+
"cell_type": "markdown",
23+
"id": "9af77692",
24+
"metadata": {},
25+
"source": [
26+
"Сравнение подозрительного файла с ранее проанализированными образцами или образцами, хранящимися в публичном либо частном хранилище, может дать представление о семействе вредоносных программ, их характеристиках и сходстве с предварительно проанализированными образцами.\n",
27+
"\n",
28+
"Хотя криптографические хеш-функции (MD5/SHA1/SHA256) являются отличным методом для обнаружения идентичных образцов, они не помогают в идентификации схожих образцов. Очень часто авторы вредоносных программ меняют мелкие аспекты вредоносных программ, что полностью меняет значение хеш-функции."
29+
]
30+
},
31+
{
32+
"cell_type": "markdown",
33+
"id": "1ea64cae",
34+
"metadata": {},
35+
"source": [
36+
"Нечеткое хеширование – отличный способ сравнить файлы на схожесть.\n",
37+
"\n",
38+
"[Ssdeep](https://ssdeep-project.github.io/ssdeep/) – полезный инструмент для создания нечеткого хеша для образца, и он также помогает в определении процентного сходства между\n",
39+
"образцами. Этот метод полезен при сравнении подозрительного файла с образцами из хранилища для идентификации похожих. Это может помочь определить образцы, принадлежащие к одному семейству вредоносных программ или к одной и той же группе субъектов."
40+
]
41+
},
42+
{
43+
"cell_type": "markdown",
44+
"id": "33927f7d",
45+
"metadata": {},
46+
"source": [
47+
"Исходные файлы для блокнота находятся по [ссылке](https://github.com/dm-fedorov/infosec/tree/master/re-tools/samples)."
48+
]
49+
},
50+
{
51+
"cell_type": "markdown",
52+
"id": "2f2bb79f",
53+
"metadata": {},
54+
"source": [
55+
"Скачиваем весь архив с файлами для работы в Colab:"
56+
]
57+
},
58+
{
59+
"cell_type": "code",
60+
"execution_count": null,
61+
"id": "7f44bc96",
62+
"metadata": {},
63+
"outputs": [],
64+
"source": [
65+
"!wget https://dfedorov.spb.ru/infosec/re/samples.zip"
66+
]
67+
},
68+
{
69+
"cell_type": "code",
70+
"execution_count": null,
71+
"id": "e544f6c0",
72+
"metadata": {},
73+
"outputs": [],
74+
"source": [
75+
"!unzip samples.zip"
76+
]
77+
},
78+
{
79+
"cell_type": "code",
80+
"execution_count": null,
81+
"id": "91c9b117",
82+
"metadata": {},
83+
"outputs": [],
84+
"source": [
85+
"!apt-get -y install libfuzzy-dev"
86+
]
87+
},
88+
{
89+
"cell_type": "code",
90+
"execution_count": null,
91+
"id": "b61ee844",
92+
"metadata": {},
93+
"outputs": [],
94+
"source": [
95+
"!apt-get install ssdeep"
96+
]
97+
},
98+
{
99+
"cell_type": "code",
100+
"execution_count": null,
101+
"id": "045d9538",
102+
"metadata": {},
103+
"outputs": [],
104+
"source": [
105+
"!pip install ssdeep"
106+
]
107+
},
108+
{
109+
"cell_type": "markdown",
110+
"id": "82edfa7e",
111+
"metadata": {},
112+
"source": [
113+
"Чтобы определить нечеткий хеш образца, выполните следующую команду:"
114+
]
115+
},
116+
{
117+
"cell_type": "code",
118+
"execution_count": null,
119+
"id": "8aed18af",
120+
"metadata": {},
121+
"outputs": [],
122+
"source": [
123+
"!ssdeep samples/test"
124+
]
125+
},
126+
{
127+
"cell_type": "markdown",
128+
"id": "8f62e536",
129+
"metadata": {},
130+
"source": [
131+
"Чтобы продемонстрировать использование нечеткого хеширования, рассмотрим в качестве примера директорию, состоящую из трех образцов вредоносного ПО.\n",
132+
"\n",
133+
"В следующем фрагменте кода видно, что все три файла имеют совершенно разные значения хеш-функций MD5:"
134+
]
135+
},
136+
{
137+
"cell_type": "code",
138+
"execution_count": null,
139+
"id": "fd381c29",
140+
"metadata": {},
141+
"outputs": [],
142+
"source": [
143+
"!ls samples"
144+
]
145+
},
146+
{
147+
"cell_type": "code",
148+
"execution_count": null,
149+
"id": "1bb9da6e",
150+
"metadata": {},
151+
"outputs": [],
152+
"source": [
153+
"!md5sum samples/*"
154+
]
155+
},
156+
{
157+
"cell_type": "markdown",
158+
"id": "bd3a99f2",
159+
"metadata": {},
160+
"source": [
161+
"Режим *изящного сравнения* (опция ```-p```) в ```ssdeep``` может использоваться для определения процентного сходства. Из трех образцов два имеют сходство 93%, что предполагает, что они, вероятно, принадлежат к одному и тому же семейству вредоносных программ:"
162+
]
163+
},
164+
{
165+
"cell_type": "code",
166+
"execution_count": null,
167+
"id": "668571e2",
168+
"metadata": {},
169+
"outputs": [],
170+
"source": [
171+
"!ssdeep -pb samples/test_01 samples/test_02 samples/test_03"
172+
]
173+
},
174+
{
175+
"cell_type": "markdown",
176+
"id": "302d6c42",
177+
"metadata": {},
178+
"source": [
179+
"Как показано в предыдущем примере, криптографические хеш-функции не помогли установить связь между образцами, тогда как метод нечеткого хеширования выявил сходство.\n",
180+
"\n",
181+
"Можно запустить ```ssdeep``` для каталогов и подкаталогов, содержащих вредоносные образцы, используя рекурсивный режим (```-r```):"
182+
]
183+
},
184+
{
185+
"cell_type": "code",
186+
"execution_count": null,
187+
"id": "35888154",
188+
"metadata": {},
189+
"outputs": [],
190+
"source": [
191+
"!ssdeep -lrpa samples/"
192+
]
193+
},
194+
{
195+
"cell_type": "markdown",
196+
"id": "37e64869",
197+
"metadata": {},
198+
"source": [
199+
"В следующем примере ssdeep-хеши всех файлов были перенаправлены в текстовый файл (```all_hashes.txt```), а затем подозрительный файл (```test_03```) сопоставляется со всеми хешами в файле:"
200+
]
201+
},
202+
{
203+
"cell_type": "code",
204+
"execution_count": null,
205+
"id": "f80d9e84",
206+
"metadata": {},
207+
"outputs": [],
208+
"source": [
209+
"!ssdeep samples/test_01 samples/test_02 samples/test_03 > samples/all_hashes.txt"
210+
]
211+
},
212+
{
213+
"cell_type": "code",
214+
"execution_count": null,
215+
"id": "9798e326",
216+
"metadata": {},
217+
"outputs": [],
218+
"source": [
219+
"!cat samples/all_hashes.txt"
220+
]
221+
},
222+
{
223+
"cell_type": "markdown",
224+
"id": "6cf68d93",
225+
"metadata": {},
226+
"source": [
227+
"В следующем фрагменте кода видно, что подозрительный файл (```test_03```) идентичен ```test_03``` (соответствие – 100%) и имеет сходство 93% с ```test_02```. Можно использовать этот метод для сравнения любого нового файла с хешами ранее проанализированных образцов:"
228+
]
229+
},
230+
{
231+
"cell_type": "code",
232+
"execution_count": null,
233+
"id": "31ca0cb6",
234+
"metadata": {},
235+
"outputs": [],
236+
"source": [
237+
"!ssdeep -m samples/all_hashes.txt samples/test_03"
238+
]
239+
},
240+
{
241+
"cell_type": "markdown",
242+
"id": "219a0770",
243+
"metadata": {},
244+
"source": [
245+
"В Python нечеткий хеш может быть вычислен с использованием ```python-ssdeep```:"
246+
]
247+
},
248+
{
249+
"cell_type": "code",
250+
"execution_count": null,
251+
"id": "3e924371",
252+
"metadata": {},
253+
"outputs": [],
254+
"source": [
255+
"!pip3 install ssdeep"
256+
]
257+
},
258+
{
259+
"cell_type": "code",
260+
"execution_count": null,
261+
"id": "c6cf0e9d",
262+
"metadata": {},
263+
"outputs": [],
264+
"source": [
265+
"import ssdeep\n",
266+
"\n",
267+
"hash1 = ssdeep.hash_from_file(\"samples/test_03\")\n",
268+
"print(hash1)"
269+
]
270+
},
271+
{
272+
"cell_type": "code",
273+
"execution_count": null,
274+
"id": "692922cc",
275+
"metadata": {},
276+
"outputs": [],
277+
"source": [
278+
"hash2 = ssdeep.hash_from_file(\"samples/test_02\")\n",
279+
"print(hash2)"
280+
]
281+
},
282+
{
283+
"cell_type": "code",
284+
"execution_count": null,
285+
"id": "077be244",
286+
"metadata": {},
287+
"outputs": [],
288+
"source": [
289+
"ssdeep.compare(hash1, hash2)"
290+
]
291+
}
292+
],
293+
"metadata": {
294+
"language_info": {
295+
"name": "python"
296+
}
297+
},
298+
"nbformat": 4,
299+
"nbformat_minor": 5
300+
}
Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
"""Fuzzy hashing in Python."""
2+
3+
# # Нечеткое хеширование на Python
4+
5+
# Сравнение подозрительного файла с ранее проанализированными образцами или образцами, хранящимися в публичном либо частном хранилище, может дать представление о семействе вредоносных программ, их характеристиках и сходстве с предварительно проанализированными образцами.
6+
#
7+
# Хотя криптографические хеш-функции (MD5/SHA1/SHA256) являются отличным методом для обнаружения идентичных образцов, они не помогают в идентификации схожих образцов. Очень часто авторы вредоносных программ меняют мелкие аспекты вредоносных программ, что полностью меняет значение хеш-функции.
8+
9+
# Нечеткое хеширование – отличный способ сравнить файлы на схожесть.
10+
#
11+
# [Ssdeep](https://ssdeep-project.github.io/ssdeep/) – полезный инструмент для создания нечеткого хеша для образца, и он также помогает в определении процентного сходства между
12+
# образцами. Этот метод полезен при сравнении подозрительного файла с образцами из хранилища для идентификации похожих. Это может помочь определить образцы, принадлежащие к одному семейству вредоносных программ или к одной и той же группе субъектов.
13+
14+
# Исходные файлы для блокнота находятся по [ссылке](https://github.com/dm-fedorov/infosec/tree/master/re-tools/samples).
15+
16+
# Скачиваем весь архив с файлами для работы в Colab:
17+
18+
# !wget https://dfedorov.spb.ru/infosec/re/samples.zip
19+
20+
# !unzip samples.zip
21+
22+
# !apt-get -y install libfuzzy-dev
23+
24+
# !apt-get install ssdeep
25+
26+
# !pip install ssdeep
27+
28+
# Чтобы определить нечеткий хеш образца, выполните следующую команду:
29+
30+
# !ssdeep samples/test
31+
32+
# Чтобы продемонстрировать использование нечеткого хеширования, рассмотрим в качестве примера директорию, состоящую из трех образцов вредоносного ПО.
33+
#
34+
# В следующем фрагменте кода видно, что все три файла имеют совершенно разные значения хеш-функций MD5:
35+
36+
# !ls samples
37+
38+
# !md5sum samples/*
39+
40+
# Режим *изящного сравнения* (опция ```-p```) в ```ssdeep``` может использоваться для определения процентного сходства. Из трех образцов два имеют сходство 93%, что предполагает, что они, вероятно, принадлежат к одному и тому же семейству вредоносных программ:
41+
42+
# !ssdeep -pb samples/test_01 samples/test_02 samples/test_03
43+
44+
# Как показано в предыдущем примере, криптографические хеш-функции не помогли установить связь между образцами, тогда как метод нечеткого хеширования выявил сходство.
45+
#
46+
# Можно запустить ```ssdeep``` для каталогов и подкаталогов, содержащих вредоносные образцы, используя рекурсивный режим (```-r```):
47+
48+
# !ssdeep -lrpa samples/
49+
50+
# В следующем примере ssdeep-хеши всех файлов были перенаправлены в текстовый файл (```all_hashes.txt```), а затем подозрительный файл (```test_03```) сопоставляется со всеми хешами в файле:
51+
52+
# !ssdeep samples/test_01 samples/test_02 samples/test_03 > samples/all_hashes.txt
53+
54+
# !cat samples/all_hashes.txt
55+
56+
# В следующем фрагменте кода видно, что подозрительный файл (```test_03```) идентичен ```test_03``` (соответствие – 100%) и имеет сходство 93% с ```test_02```. Можно использовать этот метод для сравнения любого нового файла с хешами ранее проанализированных образцов:
57+
58+
# !ssdeep -m samples/all_hashes.txt samples/test_03
59+
60+
# В Python нечеткий хеш может быть вычислен с использованием ```python-ssdeep```:
61+
62+
# !pip3 install ssdeep
63+
64+
import ssdeep
65+
hash1 = ssdeep.hash_from_file('samples/test_03')
66+
print(hash1)
67+
68+
hash2 = ssdeep.hash_from_file('samples/test_02')
69+
print(hash2)
70+
71+
ssdeep.compare(hash1, hash2)

0 commit comments

Comments
 (0)