View difference between Paste ID: SU0NXk6b and Gdv2Mub4
SHOW: | | - or go back to the newest paste.
1
Here is the material from the Malware Analysis for Vets class:
2
3
Here is the class video:
4
https://s3.amazonaws.com/StrategicSec-Videos/2014-01-18+09.16+Malware+Analysis+For+Vets.wmv
5
6
Here is the courseware:
7
https://s3.amazonaws.com/StrategicSec-Files/MalwareAnalysis/Docs/Basic-Malware_Analysis_Labs.docx
8
9
Malware Analysis Tools:
10
https://s3.amazonaws.com/StrategicSec-Files/MalwareAnalysis/MalwareAnalysisTools.zip
11
12
Software you may find useful:
13
https://s3.amazonaws.com/StrategicSec-Files/MalwareAnalysis/Software.zip
14
15
Actual Malware (remmeber to run it in a VM - the password to extract it is 'infected':
16
https://s3.amazonaws.com/StrategicSec-Files/MalwareAnalysis/malware-password-is-infected.zip
17
18
19
Class virtual machines:
20
21
** Linux VM **
22
https://s3.amazonaws.com/StrategicSec-VMs/Malware.vmwarevm.rar
23
user: malware
24
pass: malware
25
26
** Windows VM **
27
https://s3.amazonaws.com/StrategicSec-VMs/Malware_Windows.vmwarevm(1).rar
28
29
30
31
32
33
Malware can only do 4 things:
34
35
1. Modify the filesystem
36
2. Modify the registry
37
3. Modify processes/services
38
4. Connect to the Internet/local network
39
40
41
Reverse Engineering malware is different:
42
1. Encryption/Obfuscation
43
2. Payload
44
3. Programming Style
45
4. Motive/Intent
46
47
48
Note: If you seriously want to do Reverse Engineering at work, then you need at least 10 million samples of malware.
49
50
Here is a small database to play with:
51
http://derekmorton.name/files/malware_12-14-12.sql.bz2
52
855MB file size - be sure to run in a VM
53
54
55
Good reference links:
56
http://www.garykessler.net/library/file_sigs.html 	<-- file headers
57
58
Things we did to the malware on the Windows VM:
59
- PEID
60
- StudPE
61
	- saw 'ABC0' as entry point and we thought that was strange
62
- Hex Editor
63
- Strings
64
65
Open a command prompt:
66
cd c:\Documents and Settings\Administrator\Desktop\Strings
67
copy "c:\Documents and Settings\Administrator\Desktop\malware\malware.exe" .
68
	- strings.exe malware.exe | findstr ".dll"
69
	- strings.exe malware.exe | more	<-- let's you page through the data by pressing the space bar
70
	- strings.exe malware.exe | findstr "ABC"
71
		-ABC0
72
		-ABC1
73
		-ABC2
74
		-ABC!
75
		-ABC^
76
	- strings.exe malware.exe | findstr ".dll"
77
		We googled ws2_32.dll and found out it does windows sockets
78
	- strings.exe malware.exe | findstr "IRC"
79
	- strings.exe malware.exe | findstr "JOIN"
80
		List of IRC commands: https://en.wikipedia.org/wiki/List_of_Internet_Relay_Chat_commands
81
	- strings.exe malware.exe | findstr "ADMIN"
82
	- strings.exe malware.exe | findstr "LIST"
83
84
Let's check to see if it modifies the registry
85
	- strings.exe malware.exe | findstr "REG"
86
	- strings.exe malware.exe | findstr "HKEY"
87
		We didn't see anything like HKLM, HKCU or other registry type stuff
88
89
90
##############################
91
# Moving to the Linux system #
92
##############################
93
Log in to your Ubuntu system with the username 'malware' and the password 'malware'.
94
95
After logging please open a terminal window and type the following commands:
96
97
cd Desktop/
98
99
100
This is actual Malware (remmeber to run it in a VM - the password to extract it is 'infected':
101
102
wget https://s3.amazonaws.com/StrategicSec-Files/MalwareAnalysis/malware-password-is-infected.zip
103
wget http://www.beenuarora.com/code/analyse_malware.py
104
105
unzip malware-password-is-infected.zip
106
	infected
107
108
file malware.exe
109
110
mv malware.exe malware.pdf
111
112
file malware.pdf
113
114
mv malware.pdf malware.exe
115
 
116
hexdump -n 2 -C malware.exe
117
 
118
***What is '4d 5a' or 'MZ'***
119
Reference: http://www.garykessler.net/library/file_sigs.html
120
 
121
122
objdump -x malware.exe
123
 
124
strings malware.exe
125
126
strings --all malware.exe | head -n 6
127
 
128
strings malware.exe | grep -i dll
129
 
130
strings malware.exe | grep -i library
131
132
strings malware.exe | grep -i reg
133
134
strings malware.exe | grep -i hkey
135
136
strings malware.exe | grep -i hku
137
138
							- We didn't see anything like HKLM, HKCU or other registry type stuff
139
140
strings malware.exe | grep -i irc
141
142
strings malware.exe | grep -i join			
143
144
strings malware.exe | grep -i admin
145
146
strings malware.exe | grep -i list
147
148
149
							- List of IRC commands: https://en.wikipedia.org/wiki/List_of_Internet_Relay_Chat_commands
150
sudo apt-get install -y python-pefile
151
152
vi analyse_malware.py
153
154
python analyse_malware.py malware.exe
155
156
157
Here is a 2 million sample malware DB created by Derek Morton that you can use to start your DB with:
158
http://derekmorton.name/files/malware_12-14-12.sql.bz2
159
160
161
Malware Repositories:
162
http://malshare.com/index.php
163
http://www.malwareblacklist.com/
164
http://www.virusign.com/
165
http://virusshare.com/
166
http://www.tekdefense.com/downloads/malware-samples/
167
168
###############################
169
# Creating a Malware Database #
170
###############################
171
172
Creating a malware database (sqlite)
173
------------------------------------
174
wget https://malwarecookbook.googlecode.com/svn/trunk/4/4/avsubmit.py
175
wget https://s3.amazonaws.com/StrategicSec-Files/MalwareAnalysis/malware-password-is-infected.zip
176
unzip malware-password-is-infected.zip
177
	infected
178
python avsubmit.py --init
179
python avsubmit.py -f malware.exe -e
180
181
182
183
184
185
Creating a malware database (mysql)
186
-----------------------------------
187
Step 1: Installing MySQL database
188
Run the following command in the terminal:
189
190
sudo apt-get install mysql-server
191
	 
192
Step 2: Installing Python MySQLdb module
193
Run the following command in the terminal:
194
195
sudo apt-get build-dep python-mysqldb
196
sudo apt-get install python-mysqldb
197
198
Step 3: Logging in 
199
Run the following command in the terminal:
200
201
mysql -u root -p					(set a password of 'malware')
202
203
Then create one database by running following command:
204
205
create database malware;
206
207
208
209
wget https://raw.githubusercontent.com/dcmorton/MalwareTools/master/mal_to_db.py
210
211
vi mal_to_db.py -i			(fill in database connection information)
212
213
python mal_to_db.py -i
214
215
python mal_to_db.py -i -f malware.exe -u
216
217
218
mysql -u root -p
219
	malware
220
221
mysql> use malware;
222
223
select id,md5,sha1,sha256,time FROM files;
224
225
mysql> quit;
226
227
228
229
230
231
##############################
232
# Lesson 32: Setting up Yara #
233
##############################
234
235
236
sudo apt-get install clamav clamav-freshclam
237
238
sudo freshclam
239
240
sudo Clamscan
241
242
sudo apt-get install libpcre3 libpcre3-dev
243
244
wget https://github.com/plusvic/yara/archive/v3.1.0.tar.gz
245
246
wget http://yara-project.googlecode.com/files/yara-python-1.4.tar.gz
247
248
tar -zxvf v3.1.0.tar.gz
249
250
cd yara-3.1.0/
251
252
./bootstrap.sh
253
254
./configure
255
256
make
257
258
make check
259
260
sudo make install
261
262
cd yara-python/
263
264
python setup.py build
265
266
sudo python setup.py install
267
268
cd ..
269
270
yara -v
271
272
wget https://malwarecookbook.googlecode.com/svn-history/r5/trunk/3/3/clamav_to_yara.py
273
274
sigtool -u /var/lib/clamav/main.cvd
275
276
python clamav_to_yara.py -f main.ndb -o clamav.yara
277
278
wget https://s3.amazonaws.com/StrategicSec-Files/MalwareAnalysis/malware-password-is-infected.zip
279
280
unzip malware-password-is-infected.zip
281
	infected
282
283
mkdir malcode/
284
285
mv malware.exe malcode/
286
287
vi testrule.yara
288
----------------
289
rule IsPE
290
{
291
meta:
292
description = "Windows executable file"
293
294
condition:
295
// MZ signature at offset 0 and ...
296
uint16(0) == 0x5A4D and
297
// ... PE signature at offset stored in MZ header at 0x3C
298
uint32(uint32(0x3C)) == 0x00004550
299
}
300
301
rule has_no_DEP
302
{
303
meta:
304
description = "DEP is not enabled"
305
306
condition:
307
IsPE and
308
uint16(uint32(0x3C)+0x5E) & 0x00100 == 0
309
}
310
311
rule has_no_ASLR
312
{
313
meta:
314
description = "ASLR is not enabled"
315
316
condition:
317
IsPE and
318
uint16(uint32(0x3C)+0x5E) & 0x0040 == 0
319
}
320
----------------
321
322
323
yara testrule.yara malcode/malware.exe
324
325
mkdir rules/
326
327
cd rules/
328
329
wget https://malwarecookbook.googlecode.com/svn-history/r5/trunk/3/5/capabilities.yara
330
331
wget https://malwarecookbook.googlecode.com/svn-history/r5/trunk/3/6/magic.yara
332
333
wget https://malwarecookbook.googlecode.com/svn-history/r5/trunk/3/4/packer.yara
334
335
cd ..
336
337
yara rules/ malcode/malware.exe
338
339
wget https://github.com/Xen0ph0n/YaraGenerator/archive/master.zip
340
341
unzip master.zip
342
343
cd YaraGenerator-master/
344
345
python yaraGenerator.py ../malcode/ -r Test-Rule-2 -a "Joe McCray" -d "Test Rule Made With Yara Generator" -t "TEST" -f "exe"
346
347
cat Test-Rule-2.yar
348
349
wget http://the.earth.li/~sgtatham/putty/latest/x86/putty.exe
350
351
yara Test-Rule-2.yar putty.exe
352
353
354
355
356
####################
357
# Additional Tasks #
358
####################
359
360
- PE Scanner:
361
https://malwarecookbook.googlecode.com/svn/trunk/3/8/pescanner.py
362
http://www.beenuarora.com/code/analyse_malware.py
363
364
- AV submission:
365
http://malwarecookbook.googlecode.com/svn/trunk/4/4/avsubmit.py
366
https://raw.githubusercontent.com/dcmorton/MalwareTools/master/vtsubmit.py
367
368
- Malware Database Creation:
369
https://raw.githubusercontent.com/dcmorton/MalwareTools/master/mal_to_db.py
370
371
372
373
374
cd /home/malware/Desktop/Browser\ Forensics
375
376
ls | grep pcap
377
378
perl chaosreader.pl suspicious-time.pcap
379
380
firefox index.html
381
382
cat index.text | grep -v '"' | grep -oE "([0-9]+\.){3}[0-9]+.*\)"
383
384
cat index.text | grep -v '"' | grep -oE "([0-9]+\.){3}[0-9]+.*\)" | awk '{print $4, $5, $6}' | sort | uniq -c | sort -nr
385
386
sudo tshark -i eth0 -r suspicious-time.pcap -qz io,phs   
387
388
389
390
391
for i in session_00[0-9]*.www.html; do srcip=`cat "$i" | grep 'www:\ ' | awk '{print $2}' |  cut -d ':' -f1`; dstip=`cat "$i" | grep 'www:\ ' | awk '{print $4}' |  cut -d ':' -f1`; host=`cat "$i" | grep 'Host:\ ' | sort -u | sed -e 's/Host:\ //g'`; echo "$srcip --> $dstip = $host";  done | sort -u
392
393
394
tshark -r suspicious-time.pcap | grep 'NB.*20\>' | sed -e 's/<[^>]*>//g' | awk '{print $3,$4,$9}' | sort -u
395
396
397
tshark -r suspicious-time.pcap | grep 'NB.*1e\>' | sed -e 's/<[^>]*>//g' | awk '{print $3,$4,$9}' | sort -u
398
399
400
tshark -r suspicious-time.pcap arp | grep has | awk '{print $3," -> ",$9}' | tr -d '?'
401
402
403
tshark –r suspicious-time.pcap -Tfields -e “eth.src” | sort | uniq
404
405
406
tshark -r suspicious-time.pcap -R "browser.command==1" -Tfields -e "ip.src" -e "browser.server" | uniq
407
408
tshark -r suspicious-time.pcap -Tfields -e "eth.src" | sort |uniq
409
410
tshark -r suspicious-time.pcap -qz ip_hosts,tree
411
412
tshark -r suspicious-time.pcap -R "http.request" -Tfields -e "ip.src" -e "http.user_agent" | uniq
413
414
tshark -r suspicious-time.pcap -R "dns" -T fields -e "ip.src" -e "dns.flags.response" -e "dns.qry.name"
415
416
417
whois rapidshare.com.eyu32.ru
418
419
whois sploitme.com.cn
420
421
422
423
424
425
tshark -r suspicious-time.pcap -R http.request  -T fields -e ip.src -e ip.dst -e http.host -e http.request.uri | awk '{print $1," -> ",$2, "\t: ","http://"$3$4}' 
426
427
tshark -r suspicious-time.pcap -R http.request  -T fields -e ip.src -e ip.dst -e http.host -e http.request.uri | awk '{print $1," -> ",$2, "\t: ","http://"$3$4}' | grep -v -e '\/image' -e '.css' -e '.ico' -e google -e 'honeynet.org'
428
429
tshark -r suspicious-time.pcap -qz http_req,tree
430
431
tshark -r suspicious-time.pcap -R "data-text-lines contains \"<script\"" -T fields -e frame.number -e ip.src -e ip.dst
432
433
tshark -r suspicious-time.pcap -R http.request  -T fields -e ip.src -e ip.dst -e http.host -e http.request.uri | awk '{print $1," -> ",$2, "\t: ","http://"$3$4}' | grep -v -e '\/image' -e '.css' -e '.ico'  | grep 10.0.3.15 | sed -e 's/\?[^cse].*/\?\.\.\./g'
434
435
436
437
438
439
cd /home/malware/Desktop/Banking\ Troubles/Volatility
440
441
python volatility
442
python volatility pslist -f ../hn_forensics.vmem
443
python volatility connscan2 -f ../hn_forensics.vmem
444
python volatility memdmp -p 888 -f ../hn_forensics.vmem
445
python volatility memdmp -p 1752 -f ../hn_forensics.vmem
446
				***Takes a few min***
447
strings 1752.dmp | grep "^http://" | sort | uniq
448
strings 1752.dmp | grep "Ahttps://" | uniq -u
449
cd ..
450
cd foremost-1.5.7/
451
foremost -i ../Volatility/1752.dmp -t pdf -o output/pdf2
452
cd /home/malware/Desktop/Banking\ Troubles/foremost-1.5.7/output/pdf2/
453
cat audit.txt
454
cd pdf
455
ls
456
grep -i javascript *.pdf
457
458
459
460
cd /home/malware/Desktop/Banking\ Troubles/foremost-1.5.7/output/pdf5/pdf
461
/opt/Python-2.6.2/python /home/malware/Desktop/Banking\ Troubles/pdf-parser.py -s javascript --raw 00600328.pdf
462
/opt/Python-2.6.2/python /home/malware/Desktop/Banking\ Troubles/pdf-parser.py --object 11 00600328.pdf
463
/opt/Python-2.6.2/python /home/malware/Desktop/Banking\ Troubles/pdf-parser.py --object 1054 --raw --filter 00600328.pdf > malicious.js
464
465
cat malicious.js
466
467
468
*****Sorry - no time to cover javascript de-obfuscation today*****
469
470
471
cd /home/malware/Desktop/Banking\ Troubles/Volatility/
472
python volatility files -f ../hn_forensics.vmem > files
473
cat files | less
474
python volatility malfind -f ../hn_forensics.vmem -d out
475
ls out/
476
python volatility hivescan -f ../hn_forensics.vmem									
477
python volatility printkey -o 0xe1526748 -f ../hn_forensics.vmem Microsoft "Windows NT" CurrentVersion Winlogon	
478
for file in $(ls *.dmp); do echo $file; strings $file | grep bankofamerica; done