SHOW:
|
|
- or go back to the newest paste.
1 | ############################# | |
2 | - | # PMRF Intro to Linux & Comptia Linux+ Exam Prep # |
2 | + | ############################## # Day 1: Linux Fundamentals # ############################## |
3 | - | # By Joe McCray aegisweaponssystem # |
3 | + | ############################# |
4 | ||
5 | ||
6 | ||
7 | ||
8 | ||
9 | ||
10 | ||
11 | ||
12 | ##################################################### | |
13 | # 2020 Intro to Linux & Comptia Linux+ Exam Prep # | |
14 | # By Joe McCray # | |
15 | ##################################################### | |
16 | ||
17 | - Here is a good set of slides for getting started with Linux: | |
18 | http://www.slideshare.net/olafusimichael/linux-training-24086319 | |
19 | ||
20 | - | Host Name: 45.32.217.27 |
20 | + | |
21 | - Here is a good tutorial that you should complete before doing the labs below: | |
22 | http://linuxsurvival.com/linux-tutorial-introduction/ | |
23 | - | username: pmrf |
23 | + | |
24 | - | password: |
24 | + | |
25 | - I prefer to use Putty to SSH into my Linux host. | |
26 | - You can download Putty from here: | |
27 | - http://the.earth.li/~sgtatham/putty/latest/x86/putty.exe | |
28 | ||
29 | Here is the information to put into putty | |
30 | ||
31 | Host Name: 149.28.201.171 | |
32 | protocol: ssh | |
33 | port: 22 | |
34 | username: linuxtraining | |
35 | password: linux!training123! | |
36 | ||
37 | ||
38 | ######################## | |
39 | # Basic Linux Commands # | |
40 | ######################## | |
41 | ||
42 | ---------------------------Type This----------------------------------- | |
43 | cd ~ | |
44 | ||
45 | pwd | |
46 | ||
47 | whereis pwd | |
48 | ||
49 | which pwd | |
50 | ||
51 | sudo find / -name pwd | |
52 | ||
53 | /bin/pwd | |
54 | ||
55 | cd ~/students/ | |
56 | ||
57 | mkdir yourname <---- replace 'yourname' with your first name in lowercase with no spaces or special characters please | |
58 | ||
59 | cd yourname <---- replace 'yourname' with your first name in lowercase with no spaces or special characters please | |
60 | ||
61 | touch one two three | |
62 | ||
63 | ls -l t (without pressing the Enter key, press the Tab key twice. What happens?) | |
64 | ||
65 | h (and again without pressing the Enter key, press the Tab key twice. What happens?) | |
66 | ||
67 | Press the 'Up arrow key' (What happens?) | |
68 | ||
69 | Press 'Ctrl-A' (What happens?) | |
70 | ||
71 | ls | |
72 | ||
73 | clear (What happens?) | |
74 | ||
75 | echo one > one | |
76 | ||
77 | cat one (What happens?) | |
78 | ||
79 | man cat (What happens?) | |
80 | q | |
81 | ||
82 | cat two | |
83 | ||
84 | cat one > two | |
85 | ||
86 | cat two | |
87 | ||
88 | cat one two > three | |
89 | ||
90 | cat three | |
91 | ||
92 | echo four >> three | |
93 | ||
94 | cat three (What happens?) | |
95 | ||
96 | wc -l three | |
97 | ||
98 | man wc | |
99 | q | |
100 | ||
101 | info wc | |
102 | q | |
103 | ||
104 | cat three | grep four | |
105 | ||
106 | cat three | grep one | |
107 | ||
108 | man grep | |
109 | q | |
110 | ||
111 | ||
112 | man ps | |
113 | q | |
114 | ||
115 | ps | |
116 | ||
117 | ps aux | |
118 | ||
119 | ps aux | less | |
120 | ||
121 | Press the 'Up arrow key' (What happens?) | |
122 | ||
123 | Press the 'Down arrow key' (What happens?) | |
124 | q | |
125 | ||
126 | - | cd ~/yourname/ |
126 | + | |
127 | q | |
128 | ----------------------------------------------------------------------- | |
129 | ||
130 | ||
131 | ######### | |
132 | # Files # | |
133 | ######### | |
134 | ---------------------------Type This----------------------------------- | |
135 | cd ~ | |
136 | ||
137 | pwd | |
138 | ||
139 | cd ~/students/yourname/ | |
140 | ||
141 | pwd | |
142 | ||
143 | ls | |
144 | ||
145 | mkdir LinuxBasics | |
146 | ||
147 | cd LinuxBasics | |
148 | ||
149 | pwd | |
150 | ||
151 | ls | |
152 | ||
153 | mkdir files | |
154 | ||
155 | touch one two three | |
156 | ||
157 | cp one files/ | |
158 | ||
159 | ls files/ | |
160 | ||
161 | cd files/ | |
162 | ||
163 | cp ../two . | |
164 | ||
165 | ls | |
166 | ||
167 | cp ../three . | |
168 | ||
169 | ls | |
170 | ||
171 | tar cvf files.tar * | |
172 | ||
173 | ls | |
174 | ||
175 | gzip files.tar | |
176 | ||
177 | ls | |
178 | ||
179 | rm -rf one two three | |
180 | ||
181 | ls | |
182 | ||
183 | tar -zxvf files.tar.gz | |
184 | ||
185 | rm -rf files.tar.gz | |
186 | ||
187 | - | cd ~/yourname/LinuxBasics |
187 | + | |
188 | ||
189 | unzip -l data.zip | |
190 | ||
191 | mkdir /tmp/yourname/ | |
192 | ||
193 | unzip data.zip -d /tmp/yourname/ | |
194 | ----------------------------------------------------------------------- | |
195 | ||
196 | ||
197 | ||
198 | ############ | |
199 | # VIM Demo # | |
200 | ############ | |
201 | ---------------------------Type This----------------------------------- | |
202 | cd ~/students/yourname/LinuxBasics | |
203 | ||
204 | mkdir vimlesson | |
205 | ||
206 | cd vimlesson | |
207 | ||
208 | vi lesson1.sh | |
209 | ||
210 | i (press "i" to get into INSERT mode and then paste in the lines below) | |
211 | ||
212 | #!/bin/bash | |
213 | ||
214 | echo "This is my first time using vi to create a shell script" | |
215 | echo " " | |
216 | echo " " | |
217 | echo " " | |
218 | sleep 5 | |
219 | echo "Ok, now let's clear the screen" | |
220 | sleep 3 | |
221 | clear | |
222 | ||
223 | ||
224 | ---------------don't put this line in your script---------------------------- | |
225 | ||
226 | ESC (press the ESC key to get you out of INSERT mode) | |
227 | ||
228 | [SHIFT+:] (press SHIFT and the : keys at the same time and you should see a : in the bottom left corner of the screen. | |
229 | ||
230 | ||
231 | wq (typing "wq" immediately after SHIFT: will save (w for write, and q for quit meaning exit vim). | |
232 | ||
233 | ||
234 | ||
235 | vi lesson1.sh | |
236 | ||
237 | [SHIFT+:] (press SHIFT and the : keys at the same time and you should see a : in the bottom left corner of the screen. | |
238 | ||
239 | set number (typing "set number" immediately after SHIFT: will add line numbers to vim). | |
240 | ||
241 | wq (typing "wq" immediately after SHIFT: will save (w for write, and q for quit meaning exit vim). | |
242 | ||
243 | ||
244 | ||
245 | ||
246 | vi lesson1.sh | |
247 | ||
248 | [SHIFT+:] (press SHIFT and the : keys at the same time and you should see a : in the bottom left corner of the screen. | |
249 | ||
250 | set number (typing "set number" immediately after SHIFT: will add line numbers to vim). | |
251 | ||
252 | ||
253 | [SHIFT+:] (press SHIFT and the : keys at the same time and you should see a : in the bottom left corner of the screen. | |
254 | ||
255 | /echo (typing "/echo" immediately after SHIFT: will search the file for the word echo). | |
256 | ||
257 | [SHIFT+:] (press SHIFT and the : keys at the same time and you should see a : in the bottom left corner of the screen. | |
258 | ||
259 | wq (typing "wq" immediately after SHIFT: will save (w for write, and q for quit meaning exit vim). | |
260 | ||
261 | ||
262 | ||
263 | ||
264 | vi lesson1.sh | |
265 | ||
266 | [SHIFT+:] (press SHIFT and the : keys at the same time and you should see a : in the bottom left corner of the screen. | |
267 | ||
268 | set number (typing "set number" immediately after SHIFT: will add line numbers to vim). | |
269 | ||
270 | ||
271 | [SHIFT+:] (press SHIFT and the : keys at the same time and you should see a : in the bottom left corner of the screen. | |
272 | ||
273 | 4 (typing "4" immediately after SHIFT: will take you to line number 4). | |
274 | ||
275 | [SHIFT+:] (press SHIFT and the : keys at the same time and you should see a : in the bottom left corner of the screen. | |
276 | ||
277 | wq (typing "wq" immediately after SHIFT: will save (w for write, and q for quit meaning exit vim). | |
278 | ||
279 | ||
280 | ||
281 | ||
282 | vi lesson1.sh | |
283 | ||
284 | [SHIFT+:] (press SHIFT and the : keys at the same time and you should see a : in the bottom left corner of the screen. | |
285 | ||
286 | set number (typing "set number" immediately after SHIFT: will add line numbers to vim). | |
287 | ||
288 | ||
289 | [SHIFT+:] (press SHIFT and the : keys at the same time and you should see a : in the bottom left corner of the screen. | |
290 | ||
291 | 4 (typing "4" immediately after SHIFT: will take you to line number 4). | |
292 | ||
293 | dd (typing "dd" will delete the line that you are on) | |
294 | ||
295 | [SHIFT+:] (press SHIFT and the : keys at the same time and you should see a : in the bottom left corner of the screen. | |
296 | ||
297 | wq (typing "wq" immediately after SHIFT: will save (w for write, and q for quit meaning exit vim). | |
298 | ||
299 | ||
300 | ||
301 | ||
302 | vi lesson1.sh | |
303 | ||
304 | [SHIFT+:] (press SHIFT and the : keys at the same time and you should see a : in the bottom left corner of the screen. | |
305 | ||
306 | set number (typing "set number" immediately after SHIFT: will add line numbers to vim). | |
307 | ||
308 | ||
309 | [SHIFT+:] (press SHIFT and the : keys at the same time and you should see a : in the bottom left corner of the screen. | |
310 | ||
311 | 4 (typing "4" immediately after SHIFT: will take you to line number 4). | |
312 | ||
313 | dd (typing "dd" will delete the line that you are on) | |
314 | ||
315 | [SHIFT+:] (press SHIFT and the : keys at the same time and you should see a : in the bottom left corner of the screen. | |
316 | ||
317 | syntax on (typing "syntax on" immediately after SHIFT: will turn on syntax highlighting | |
318 | ||
319 | [SHIFT+:] (press SHIFT and the : keys at the same time and you should see a : in the bottom left corner of the screen. | |
320 | ||
321 | set tabstop=5 (typing "set tabstop=5" immediately after SHIFT: will set your tabs to 5 spaces | |
322 | ||
323 | [SHIFT+:] (press SHIFT and the : keys at the same time and you should see a : in the bottom left corner of the screen. | |
324 | ||
325 | wq (typing "wq" immediately after SHIFT: will save (w for write, and q for quit meaning exit vim). | |
326 | ||
327 | ||
328 | ||
329 | ||
330 | vi .vimrc | |
331 | i (press "i" to get into INSERT mode and then paste in the lines below) | |
332 | ||
333 | ||
334 | set number | |
335 | syntax on | |
336 | set tabstop=5 | |
337 | ||
338 | ESC (press the ESC key to get you out of INSERT mode) | |
339 | ||
340 | [SHIFT+:] (press SHIFT and the : keys at the same time and you should see a : in the bottom left corner of the screen. | |
341 | ||
342 | wq (typing "wq" immediately after SHIFT: will save (w for write, and q for quit meaning exit vim). | |
343 | ||
344 | ||
345 | ||
346 | ||
347 | ||
348 | ||
349 | vi lesson1.sh | |
350 | ||
351 | [SHIFT+:] (press SHIFT and the : keys at the same time and you should see a : in the bottom left corner of the screen. | |
352 | ||
353 | echo $MYVIMRC (typing "echo $MYVIMRC" immediately after SHIFT: will display the path to your new .vimrc file | |
354 | ||
355 | [SHIFT+:] (press SHIFT and the : keys at the same time and you should see a : in the bottom left corner of the screen. | |
356 | - | cd ~/yourname/LinuxBasics |
356 | + | |
357 | wq (typing "wq" immediately after SHIFT: will save (w for write, and q for quit meaning exit vim). | |
358 | ----------------------------------------------------------------------- | |
359 | ||
360 | ||
361 | ||
362 | ||
363 | ||
364 | ||
365 | ||
366 | ||
367 | ############### | |
368 | # Permissions # | |
369 | ############### | |
370 | ---------------------------Type This----------------------------------- | |
371 | cd ~/students/yourname/LinuxBasics | |
372 | ||
373 | ls -l one | |
374 | ----------------------------------------------------------------------- | |
375 | We can determine a lot from examining the results of this command. The file "one" is owned by user "me". | |
376 | Now "me" has the right to read and write this file. | |
377 | The file is owned by the group "me". Members of the group "me" can also read and write this file. | |
378 | Everybody else can read this file | |
379 | ||
380 | ||
381 | ---------------------------Type This----------------------------------- | |
382 | ls -l /bin/bash | |
383 | ----------------------------------------------------------------------- | |
384 | ||
385 | Here we can see: | |
386 | ||
387 | The file "/bin/bash" is owned by user "root". The superuser has the right to read, write, and execute this file. | |
388 | The file is owned by the group "root". Members of the group "root" can also read and execute this file. Everybody else can read and execute this file | |
389 | ||
390 | ||
391 | The next command you need to know is "chmod" | |
392 | rwx rwx rwx = 111 111 111 | |
393 | rw- rw- rw- = 110 110 110 | |
394 | rwx --- --- = 111 000 000 | |
395 | ||
396 | and so on... | |
397 | ||
398 | rwx = 111 in binary = 7 | |
399 | rw- = 110 in binary = 6 | |
400 | r-x = 101 in binary = 5 | |
401 | r-- = 100 in binary = 4 | |
402 | ||
403 | ||
404 | ---------------------------Type This----------------------------------- | |
405 | ls -l one | |
406 | ||
407 | chmod 600 one | |
408 | ||
409 | ls -l one | |
410 | ||
411 | sudo useradd yourname | |
412 | aegisweaponssystem | |
413 | ||
414 | ||
415 | sudo passwd yourname | |
416 | ||
417 | P@$$w0rd321 | |
418 | P@$$w0rd321 | |
419 | ||
420 | sudo chown testuser one | |
421 | aegisweaponssystem | |
422 | ||
423 | ls -l one | |
424 | ||
425 | sudo chgrp testuser one | |
426 | aegisweaponssystem | |
427 | ||
428 | ls -l one | |
429 | ||
430 | id | |
431 | ||
432 | su testuser | |
433 | P@$$w0rd321 | |
434 | ----------------------------------------------------------------------- | |
435 | ||
436 | Here is a table of numbers that covers all the common settings. The ones beginning with "7" are used with programs (since they enable execution) and the rest are for other kinds of files. | |
437 | ||
438 | Value Meaning | |
439 | 777 (rwxrwxrwx) No restrictions on permissions. Anybody may do anything. Generally not a desirable setting. | |
440 | ||
441 | 755 (rwxr-xr-x) The file's owner may read, write, and execute the file. All others may read and execute the file. This setting is common for programs that are used by all users. | |
442 | ||
443 | 700 (rwx------) The file's owner may read, write, and execute the file. Nobody else has any rights. This setting is useful for programs that only the owner may use and must be kept private from others. | |
444 | ||
445 | 666 (rw-rw-rw-) All users may read and write the file. | |
446 | ||
447 | 644 (rw-r--r--) The owner may read and write a file, while all others may only read the file. A common setting for data files that everybody may read, but only the owner may change. | |
448 | ||
449 | 600 (rw-------) The owner may read and write a file. All others have no rights. A common setting for data files that the owner wants to keep private. | |
450 | ||
451 | ||
452 | ||
453 | Directory permissions | |
454 | --------------------- | |
455 | The chmod command can also be used to control the access permissions for directories. In most ways, the permissions scheme for directories works the same way as they do with files. However, the execution permission is used in a different way. It provides control for access to file listing and other things. Here are some useful settings for directories: | |
456 | ||
457 | Value Meaning | |
458 | 777 (rwxrwxrwx) No restrictions on permissions. | |
459 | Anybody may list files, create new files in the directory and delete files in the directory. | |
460 | Generally not a good setting. | |
461 | ||
462 | ||
463 | ||
464 | 755 (rwxr-xr-x) The directory owner has full access. | |
465 | All others may list the directory, but cannot create files nor delete them. | |
466 | This setting is common for directories that you wish to share with other users. | |
467 | ||
468 | ||
469 | ||
470 | 700 (rwx------) The directory owner has full access. Nobody else has any rights. This setting is useful for directories that only the owner may use and must be kept private from others. | |
471 | ||
472 | ###################### | |
473 | # Process Management # | |
474 | ###################### | |
475 | ---------------------------Type This----------------------------------- | |
476 | top | |
477 | q | |
478 | ||
479 | htop | |
480 | q | |
481 | ||
482 | ps | |
483 | ||
484 | ps aux | |
485 | ||
486 | ps -A | |
487 | ||
488 | ps -A | less | |
489 | ||
490 | ps axjf | |
491 | ||
492 | pstree | |
493 | ||
494 | pstree -A | |
495 | ||
496 | pgrep bash | |
497 | ||
498 | pgrep init | |
499 | ||
500 | ps aux | grep apache | |
501 | ----------------------------------------------------------------------- | |
502 | ||
503 | ||
504 | ||
505 | You can list all of the signals that are possible to send with kill by typing: | |
506 | ---------------------------Type This----------------------------------- | |
507 | kill -l | |
508 | ||
509 | sudo kill -HUP pid_of_apache | |
510 | ||
511 | - | cd ~/yourname/LinuxBasics |
511 | + | |
512 | ||
513 | pkill -9 ping | |
514 | The above command is the equivalent of: | |
515 | ||
516 | kill -9 `pgrep ping` | |
517 | ----------------------------------------------------------------------- | |
518 | ||
519 | ||
520 | ||
521 | ||
522 | ################ | |
523 | # Hashing Demo # | |
524 | ################ | |
525 | ---------------------------Type This----------------------------------- | |
526 | cd ~/students/yourname/LinuxBasics | |
527 | ||
528 | mkdir hashdemo | |
529 | ||
530 | cd hashdemo | |
531 | ||
532 | echo test > test.txt | |
533 | ||
534 | cat test.txt | |
535 | ||
536 | md5sum test.txt | |
537 | ||
538 | echo hello >> test.txt | |
539 | ||
540 | cat test.txt | |
541 | ||
542 | md5sum test.txt | |
543 | ||
544 | echo test2 > test2.txt | |
545 | ||
546 | cat test2.txt | |
547 | ||
548 | sha256sum test2.txt | |
549 | ||
550 | - | cd ~/yourname/LinuxBasics |
550 | + | |
551 | ||
552 | cat test2.txt | |
553 | ||
554 | sha256sum test2.txt | |
555 | ||
556 | cd .. | |
557 | ----------------------------------------------------------------------- | |
558 | ||
559 | ||
560 | ||
561 | ################################# | |
562 | # Symmetric Key Encryption Demo # | |
563 | ################################# | |
564 | ---------------------------Type This----------------------------------- | |
565 | cd ~/students/yourname/LinuxBasics | |
566 | ||
567 | mkdir gpgdemo | |
568 | ||
569 | cd gpgdemo | |
570 | ||
571 | echo test > test.txt | |
572 | ||
573 | cat test.txt | |
574 | ||
575 | gpg -c test.txt | |
576 | password | |
577 | password | |
578 | ||
579 | ls | grep test | |
580 | ||
581 | cat test.txt | |
582 | ||
583 | cat test.txt.gpg | |
584 | ||
585 | rm -rf test.txt | |
586 | ||
587 | ls | grep test | |
588 | ||
589 | - | cd ~/yourname/LinuxBasics/gpgdemo |
589 | + | |
590 | P@$$w0rD!@#$P@$$w0rD!@#$ | |
591 | ||
592 | cat output.txt | |
593 | ----------------------------------------------------------------------- | |
594 | ||
595 | ||
596 | ||
597 | ######################################################################################################################### | |
598 | # Asymmetric Key Encryption Demo # | |
599 | # # | |
600 | # Configure random number generator # | |
601 | # https://www.howtoforge.com/helping-the-random-number-generator-to-gain-enough-entropy-with-rng-tools-debian-lenny # | |
602 | ######################################################################################################################### | |
603 | ---------------------------Type This----------------------------------- | |
604 | cd ~/students/yourname/LinuxBasics/gpgdemo | |
605 | ||
606 | echo hello > file1.txt | |
607 | ||
608 | echo goodbye > file2.txt | |
609 | ||
610 | - | password |
610 | + | |
611 | - | password |
611 | + | |
612 | echo blue > file4.txt | |
613 | ||
614 | tar czf files.tar.gz *.txt | |
615 | ||
616 | gpg --gen-key | |
617 | 1 | |
618 | 1024 | |
619 | 0 | |
620 | y | |
621 | John Doe | |
622 | john@doe.com | |
623 | --blank comment-- | |
624 | O | |
625 | P@$$w0rD!@#$P@$$w0rD!@#$ | |
626 | P@$$w0rD!@#$P@$$w0rD!@#$ | |
627 | ||
628 | ||
629 | ||
630 | gpg --armor --output file-enc-pubkey.txt --export 'John Doe' | |
631 | ||
632 | cat file-enc-pubkey.txt | |
633 | ||
634 | gpg --armor --output file-enc-privkey.asc --export-secret-keys 'John Doe' | |
635 | ||
636 | cat file-enc-privkey.asc | |
637 | ||
638 | gpg --encrypt --recipient 'John Doe' files.tar.gz | |
639 | ||
640 | rm -rf files.tar.gz *.txt | |
641 | ||
642 | ls | |
643 | ||
644 | tar -zxvf files.tar.gz.gpg | |
645 | ||
646 | gpg --output output.tar.gz --decrypt files.tar.gz.gpg | |
647 | P@$$w0rD!@#$P@$$w0rD!@#$ | |
648 | ||
649 | tar -zxvf output.tar.gz | |
650 | ||
651 | ls | |
652 | ----------------------------------------------------------------------- | |
653 | ||
654 | ||
655 | ||
656 | ############################################## | |
657 | # Log Analysis with Linux command-line tools # | |
658 | ############################################## | |
659 | - The following command line executables are found in the Mac as well as most Linux Distributions. | |
660 | ||
661 | - | wget https://s3.amazonaws.com/infosecaddictsfiles/cisco.log |
661 | + | |
662 | grep – searches and filters based on patterns | |
663 | awk – can sort each row into fields and display only what is needed | |
664 | sed – performs find and replace functions | |
665 | sort – arranges output in an order | |
666 | uniq – compares adjacent lines and can report, filter or provide a count of duplicates | |
667 | ||
668 | ||
669 | ||
670 | ||
671 | ||
672 | ############## | |
673 | # Cisco Logs # | |
674 | ############## | |
675 | ---------------------------Type This----------------------------------- | |
676 | cd ~/students/yourname/ | |
677 | mkdir security | |
678 | cd security | |
679 | mkdir log_analysis | |
680 | cd log_analysis | |
681 | wget http://45.63.104.73/cisco.log | |
682 | ----------------------------------------------------------------------- | |
683 | ||
684 | ||
685 | AWK Basics | |
686 | ---------- | |
687 | - To quickly demonstrate the print feature in awk, we can instruct it to show only the 5th word of each line. Here we will print $5. Only the last 4 lines are being shown for brevity. | |
688 | ---------------------------Type This----------------------------------- | |
689 | cat cisco.log | awk '{print $5}' | tail -n 4 | |
690 | ----------------------------------------------------------------------- | |
691 | ||
692 | ||
693 | ||
694 | - Looking at a large file would still produce a large amount of output. A more useful thing to do might be to output every entry found in “$5”, group them together, count them, then sort them from the greatest to least number of occurrences. This can be done by piping the output through “sort“, using “uniq -c” to count the like entries, then using “sort -rn” to sort it in reverse order. | |
695 | ---------------------------Type This----------------------------------- | |
696 | cat cisco.log | awk '{print $5}'| sort | uniq -c | sort -rn | |
697 | ----------------------------------------------------------------------- | |
698 | ||
699 | ||
700 | ||
701 | - While that’s sort of cool, it is obvious that we have some garbage in our output. Evidently we have a few lines that aren’t conforming to the output we expect to see in $5. We can insert grep to filter the file prior to feeding it to awk. This insures that we are at least looking at lines of text that contain “facility-level-mnemonic”. | |
702 | ---------------------------Type This----------------------------------- | |
703 | cat cisco.log | grep %[a-zA-Z]*-[0-9]-[a-zA-Z]* | awk '{print $5}' | sort | uniq -c | sort -rn | |
704 | - | You've come across a file that has been flagged by one of your security products (AV Quarantine, HIPS, Spam Filter, Web Proxy, or digital forensics scripts). |
704 | + | |
705 | ||
706 | ||
707 | - | The fastest thing you can do is perform static analysis. |
707 | + | |
708 | ||
709 | - Now that the output is cleaned up a bit, it is a good time to investigate some of the entries that appear most often. One way to see all occurrences is to use grep. | |
710 | ---------------------------Type This----------------------------------- | |
711 | cat cisco.log | grep %LINEPROTO-5-UPDOWN: | |
712 | - | # Static Analysis # |
712 | + | |
713 | cat cisco.log | grep %LINEPROTO-5-UPDOWN:| awk '{print $10}' | sort | uniq -c | sort -rn | |
714 | ||
715 | cat cisco.log | grep %LINEPROTO-5-UPDOWN:| sed 's/,//g' | awk '{print $10}' | sort | uniq -c | sort -rn | |
716 | ||
717 | - | cd Desktop/ |
717 | + | |
718 | ----------------------------------------------------------------------- | |
719 | ||
720 | - | - This is actual Malware (remmeber to run it in a VM - the password to extract it is 'infected': |
720 | + | |
721 | ||
722 | ||
723 | - | cd ~/Desktop/ |
723 | + | |
724 | - | wget https://s3.amazonaws.com/infosecaddictsfiles/malware-password-is-infected.zip --no-check-certificate |
724 | + | ################## |
725 | - | wget https://s3.amazonaws.com/infosecaddictsfiles/analyse_malware.py --no-check-certificate |
725 | + | # Day 1 Homework # |
726 | ################## | |
727 | Task Option 1: Linux Survival | |
728 | ----------------------------- | |
729 | Do all of the exercises in Linux Survival (http://linuxsurvival.com/linux-tutorial-introduction/) | |
730 | Create a word document that contains the screenshots of the quizzes NOTE: You must score a perfect 100 for all 4 quizzes | |
731 | Name the word document 'YourFirstName-YourLastName-LinuxDay1-LinuxSurvival.docx' (ex: 'Joseph-McCray-LinuxDay1-LinuxSurvival.docx') | |
732 | Email the document to me at joe-at-secureninja-dot-com before the start of class tomorrow | |
733 | ||
734 | ||
735 | Task Option 2: Basic Shell Scripting | |
736 | ------------------------------------ | |
737 | Watch and do all of the exercises in the video https://www.youtube.com/watch?v=_n5ZegzieSQ | |
738 | Create a word document that contains the screenshots of the tasks performed in this video | |
739 | Name the word document 'YourFirstName-YourLastName-LinuxDay1-ShellScripting.docx' (ex: 'Joseph-McCray-LinuxDay1-ShellScripting.docx') | |
740 | Email the document to me at joe-at-secureninja-dot-com before the start of class tomorrow | |
741 | ||
742 | ||
743 | ||
744 | ||
745 | ||
746 | ||
747 | ||
748 | ||
749 | ||
750 | ||
751 | ||
752 | ||
753 | ||
754 | ########################### | |
755 | ############################## # Day 2: Malware Analysis # ############################## | |
756 | ########################### | |
757 | ||
758 | ||
759 | ||
760 | ################ | |
761 | # The Scenario # | |
762 | ################ | |
763 | You've come across a file that has been flagged by one of your security products (AV Quarantine, HIPS, Spam Filter, Web Proxy, or digital forensics scripts). The fastest thing you can do is perform static analysis. | |
764 | ||
765 | ||
766 | ||
767 | #################### | |
768 | # Malware Analysis # | |
769 | #################### | |
770 | ||
771 | ||
772 | ||
773 | - After logging please open a terminal window and type the following commands: | |
774 | ---------------------------Type This----------------------------------- | |
775 | cd ~/students/yourname/security/ | |
776 | mkdir malware_analysis | |
777 | cd malware_analysis | |
778 | ----------------------------------------------------------------------- | |
779 | - | sudo apt-get install -y python-pefile |
779 | + | |
780 | - | malware |
780 | + | - This is actual Malware (remember to run it in a VM - the password to extract it is 'infected': |
781 | ||
782 | ---------------------------Type This----------------------------------- | |
783 | wget https://infosecaddicts-files.s3.amazonaws.com/malware-password-is-infected.zip --no-check-certificate | |
784 | wget https://infosecaddicts-files.s3.amazonaws.com/analyse_malware.py --no-check-certificate | |
785 | wget https://infosecaddicts-files.s3.amazonaws.com/wannacry.zip --no-check-certificate | |
786 | ||
787 | unzip malware-password-is-infected.zip | |
788 | infected | |
789 | ||
790 | file malware.exe | |
791 | ||
792 | mv malware.exe malware.pdf | |
793 | ||
794 | file malware.pdf | |
795 | ||
796 | mv malware.pdf malware.exe | |
797 | ||
798 | hexdump -n 2 -C malware.exe | |
799 | ----------------------------------------------------------------------- | |
800 | ||
801 | ||
802 | ***What is '4d 5a' or 'MZ'*** | |
803 | Reference: | |
804 | - | cd Desktop/ |
804 | + | |
805 | ||
806 | - | wget https://s3.amazonaws.com/infosecaddictsfiles/wannacry.zip |
806 | + | |
807 | ||
808 | ||
809 | ||
810 | ||
811 | ||
812 | ||
813 | ---------------------------Type This----------------------------------- | |
814 | objdump -x malware.exe | |
815 | ||
816 | strings malware.exe | |
817 | ||
818 | strings --all malware.exe | head -n 6 | |
819 | ||
820 | strings malware.exe | grep -i dll | |
821 | ||
822 | strings malware.exe | grep -i library | |
823 | ||
824 | strings malware.exe | grep -i reg | |
825 | ||
826 | strings malware.exe | grep -i hkey | |
827 | ||
828 | strings malware.exe | grep -i hku | |
829 | ----------------------------------------------------------------------- | |
830 | - We didn't see anything like HKLM, HKCU or other registry type stuff | |
831 | ||
832 | ||
833 | ---------------------------Type This----------------------------------- | |
834 | strings malware.exe | grep -i irc | |
835 | ||
836 | strings malware.exe | grep -i join | |
837 | ||
838 | strings malware.exe | grep -i admin | |
839 | ||
840 | strings malware.exe | grep -i list | |
841 | ----------------------------------------------------------------------- | |
842 | ||
843 | - List of IRC commands: https://en.wikipedia.org/wiki/List_of_Internet_Relay_Chat_commands | |
844 | ||
845 | ---------------------------Type This----------------------------------- | |
846 | vi analyse_malware.py | |
847 | ||
848 | python analyse_malware.py malware.exe | |
849 | ----------------------------------------------------------------------- | |
850 | ||
851 | ||
852 | ||
853 | ||
854 | ||
855 | ||
856 | ||
857 | ||
858 | - After logging please open a terminal window and type the following commands: | |
859 | ---------------------------Type This----------------------------------- | |
860 | cd ~/students/yourname/security/malware_analysis | |
861 | ||
862 | unzip wannacry.zip | |
863 | infected | |
864 | ||
865 | file wannacry.exe | |
866 | ||
867 | mv wannacry.exe malware.pdf | |
868 | ||
869 | file malware.pdf | |
870 | ||
871 | mv malware.pdf wannacry.exe | |
872 | ||
873 | hexdump -n 2 -C wannacry.exe | |
874 | ----------------------------------------------------------------------- | |
875 | ||
876 | ||
877 | ||
878 | ***What is '4d 5a' or 'MZ'*** | |
879 | Reference: | |
880 | http://www.garykessler.net/library/file_sigs.html | |
881 | ||
882 | ||
883 | ||
884 | ||
885 | ---------------------------Type This----------------------------------- | |
886 | objdump -x wannacry.exe | |
887 | ||
888 | strings wannacry.exe | |
889 | ||
890 | strings --all wannacry.exe | head -n 6 | |
891 | ||
892 | strings wannacry.exe | grep -i dll | |
893 | ||
894 | strings wannacry.exe | grep -i library | |
895 | ||
896 | strings wannacry.exe | grep -i reg | |
897 | ||
898 | strings wannacry.exe | grep -i key | |
899 | ||
900 | strings wannacry.exe | grep -i rsa | |
901 | ||
902 | strings wannacry.exe | grep -i open | |
903 | ||
904 | strings wannacry.exe | grep -i get | |
905 | ||
906 | strings wannacry.exe | grep -i mutex | |
907 | ||
908 | strings wannacry.exe | grep -i irc | |
909 | ||
910 | strings wannacry.exe | grep -i join | |
911 | ||
912 | strings wannacry.exe | grep -i admin | |
913 | ||
914 | strings wannacry.exe | grep -i list | |
915 | ----------------------------------------------------------------------- | |
916 | ||
917 | ||
918 | ||
919 | ||
920 | ||
921 | ||
922 | Hmmmmm.......what's the latest thing in the news - oh yeah "WannaCry" | |
923 | ||
924 | - | https://s3.amazonaws.com/infosecaddictsfiles/analyse_malware.py |
924 | + | |
925 | ||
926 | ||
927 | Reference | |
928 | https://securingtomorrow.mcafee.com/executive-perspectives/analysis-wannacry-ransomware-outbreak/ | |
929 | ||
930 | - Yara Rule - | |
931 | ||
932 | ||
933 | Strings: | |
934 | $s1 = “Ooops, your files have been encrypted!” wide ascii nocase | |
935 | $s2 = “Wanna Decryptor” wide ascii nocase | |
936 | $s3 = “.wcry” wide ascii nocase | |
937 | $s4 = “WANNACRY” wide ascii nocase | |
938 | $s5 = “WANACRY!” wide ascii nocase | |
939 | $s7 = “icacls . /grant Everyone:F /T /C /Q” wide ascii nocase | |
940 | ||
941 | - | sudo apt install -y python-pefile |
941 | + | |
942 | - | infosecaddicts |
942 | + | |
943 | ||
944 | ||
945 | ||
946 | ||
947 | ||
948 | Ok, let's look for the individual strings in our file | |
949 | ||
950 | ||
951 | ---------------------------Type This----------------------------------- | |
952 | strings wannacry.exe | grep -i ooops | |
953 | ||
954 | strings wannacry.exe | grep -i wanna | |
955 | ||
956 | strings wannacry.exe | grep -i wcry | |
957 | ||
958 | strings wannacry.exe | grep -i wannacry | |
959 | ||
960 | strings wannacry.exe | grep -i wanacry **** Matches $s5, hmmm..... | |
961 | ----------------------------------------------------------------------- | |
962 | ||
963 | - | Building a Malware Scanner |
963 | + | |
964 | - | -------------------------- |
964 | + | |
965 | ||
966 | ||
967 | - | mkdir ~/Desktop/malwarescanner |
967 | + | |
968 | # Good references for WannaCry # | |
969 | - | cd ~/Desktop/malwarescanner |
969 | + | |
970 | ||
971 | - | wget https://github.com/jonahbaron/malwarescanner/archive/master.zip |
971 | + | |
972 | ||
973 | https://gist.github.com/rain-1/989428fa5504f378b993ee6efbc0b168 | |
974 | https://securingtomorrow.mcafee.com/executive-perspectives/analysis-wannacry-ransomware-outbreak/ | |
975 | - | cd malwarescanner-master/ |
975 | + | |
976 | ||
977 | - | python scanner.py -h |
977 | + | |
978 | ||
979 | - | cat strings.txt |
979 | + | |
980 | ||
981 | - | cat hashes.txt |
981 | + | |
982 | ||
983 | - | mkdir ~/Desktop/malcode |
983 | + | |
984 | ||
985 | - | cp ~/Desktop/malware.exe ~/Desktop/malcode |
985 | + | |
986 | #################################### | |
987 | - | python scanner.py -H hashes.txt -D ~/Desktop/malcode/ strings.txt |
987 | + | |
988 | #################################### | |
989 | - | cd ~/Desktop/ |
989 | + | |
990 | ||
991 | Reference1: | |
992 | https://infosecaddicts-files.s3.amazonaws.com/analyse_malware.py | |
993 | ||
994 | This is a really good script for the basics of static analysis | |
995 | - | # Reference: # |
995 | + | |
996 | - | # https://jon.glass/analyzes-dridex-malware-p1/ # |
996 | + | |
997 | https://joesecurity.org/reports/report-db349b97c37d22f5ea1d1841e3c89eb4.html | |
998 | ||
999 | - | cd ~/Desktop/ |
999 | + | |
1000 | This is really good for showing some good signatures to add to the Python script | |
1001 | ||
1002 | - | sudo pip install olefile |
1002 | + | |
1003 | - | |
1003 | + | |
1004 | https://pastebin.com/guxzCBmP | |
1005 | - | mkdir ~/Desktop/oledump |
1005 | + | |
1006 | ||
1007 | - | cd ~/Desktop/oledump |
1007 | + | |
1008 | ---------------------------Type This----------------------------------- | |
1009 | wget https://pastebin.com/raw/guxzCBmP | |
1010 | ||
1011 | ||
1012 | mv guxzCBmP am.py | |
1013 | - | wget https://s3.amazonaws.com/infosecaddictsfiles/064016.zip |
1013 | + | |
1014 | ||
1015 | vi am.py | |
1016 | ||
1017 | python am.py wannacry.exe | |
1018 | ----------------------------------------------------------------------- | |
1019 | ||
1020 | ||
1021 | ||
1022 | ||
1023 | ||
1024 | ||
1025 | ||
1026 | ############## | |
1027 | # Yara Ninja # | |
1028 | ############## | |
1029 | Hmmmmm.......what's the latest thing in the news - oh yeah "WannaCry" | |
1030 | ||
1031 | Quick Google search for "wannacry ransomeware analysis" | |
1032 | ||
1033 | ||
1034 | Reference | |
1035 | https://www.mcafee.com/blogs/other-blogs/executive-perspectives/analysis-wannacry-ransomware-outbreak/ | |
1036 | ||
1037 | ||
1038 | ||
1039 | - Yara Rule - | |
1040 | ||
1041 | ||
1042 | Strings: | |
1043 | $s1 = “Ooops, your files have been encrypted!” wide ascii nocase | |
1044 | $s2 = “Wanna Decryptor” wide ascii nocase | |
1045 | $s3 = “.wcry” wide ascii nocase | |
1046 | $s4 = “WANNACRY” wide ascii nocase | |
1047 | $s5 = “WANACRY!” wide ascii nocase | |
1048 | $s7 = “icacls . /grant Everyone:F /T /C /Q” wide ascii nocase | |
1049 | ||
1050 | ||
1051 | - | sudo apt-get remove -y yara |
1051 | + | |
1052 | ||
1053 | ||
1054 | - | wget https://github.com/plusvic/yara/archive/v3.4.0.zip |
1054 | + | |
1055 | ||
1056 | - | sudo apt-get -y install libtool |
1056 | + | |
1057 | Ok, let's look for the individual strings | |
1058 | ||
1059 | - | unzip v3.4.0.zip |
1059 | + | |
1060 | ||
1061 | - | cd yara-3.4.0 |
1061 | + | |
1062 | strings wannacry.exe | grep -i ooops | |
1063 | - | ./bootstrap.sh |
1063 | + | |
1064 | strings wannacry.exe | grep -i wanna | |
1065 | - | ./configure |
1065 | + | |
1066 | strings wannacry.exe | grep -i wcry | |
1067 | - | make |
1067 | + | |
1068 | strings wannacry.exe | grep -i wannacry | |
1069 | - | sudo make install |
1069 | + | |
1070 | strings wannacry.exe | grep -i wanacry **** Matches $s5, hmmm..... | |
1071 | ||
1072 | - | yara -v |
1072 | + | |
1073 | ----------------------------------------------------------------------- | |
1074 | ||
1075 | ||
1076 | ||
1077 | ||
1078 | Let's see if we can get yara working. | |
1079 | ---------------------------Type This----------------------------------- | |
1080 | - | cd ~/Desktop |
1080 | + | cd ~/students/yourname/security/malware_analysis |
1081 | ||
1082 | - | yara rules-master/packer.yar malcode/malware.exe |
1082 | + | mkdir quick_yara |
1083 | ||
1084 | cd quick_yara | |
1085 | - | Places to get more Yara rules: |
1085 | + | wget http://45.63.104.73/wannacry.zip |
1086 | - | ------------------------------ |
1086 | + | |
1087 | - | https://malwareconfig.com/static/yaraRules/ |
1087 | + | |
1088 | - | https://github.com/kevthehermit/YaraRules |
1088 | + | **** password is infected *** |
1089 | - | https://github.com/VectraThreatLab/reyara |
1089 | + | |
1090 | ||
1091 | ||
1092 | ||
1093 | - | Yara rule sorting script: |
1093 | + | |
1094 | - | ------------------------- |
1094 | + | |
1095 | - | https://github.com/mkayoh/yarasorter |
1095 | + | |
1096 | ||
1097 | nano wannacry_1.yar | |
1098 | ||
1099 | - | cd ~/Desktop/rules-master |
1099 | + | ---------------------------Paste This----------------------------------- |
1100 | - | for i in $( ls *.yar --hide=master.yar ); do echo include \"$i\";done > master.yar |
1100 | + | rule wannacry_1 : ransom |
1101 | - | cd ~/Desktop/ |
1101 | + | { |
1102 | - | yara rules-master/master.yar malcode/malware.exe |
1102 | + | meta: |
1103 | author = "Joshua Cannell" | |
1104 | description = "WannaCry Ransomware strings" | |
1105 | weight = 100 | |
1106 | date = "2017-05-12" | |
1107 | ||
1108 | strings: | |
1109 | $s1 = "Ooops, your files have been encrypted!" wide ascii nocase | |
1110 | $s2 = "Wanna Decryptor" wide ascii nocase | |
1111 | $s3 = ".wcry" wide ascii nocase | |
1112 | $s4 = "WANNACRY" wide ascii nocase | |
1113 | - | Here is a 2 million sample malware DB created by Derek Morton that you can use to start your DB with: |
1113 | + | $s5 = "WANACRY!" wide ascii nocase |
1114 | - | http://derekmorton.name/files/malware_12-14-12.sql.bz2 |
1114 | + | $s7 = "icacls . /grant Everyone:F /T /C /Q" wide ascii nocase |
1115 | ||
1116 | condition: | |
1117 | - | Malware Repositories: |
1117 | + | any of them |
1118 | - | http://malshare.com/index.php |
1118 | + | } |
1119 | - | http://www.malwareblacklist.com/ |
1119 | + | |
1120 | - | http://www.virusign.com/ |
1120 | + | |
1121 | - | http://virusshare.com/ |
1121 | + | |
1122 | - | http://www.tekdefense.com/downloads/malware-samples/ |
1122 | + | |
1123 | ||
1124 | ||
1125 | ||
1126 | ---------------------------Type This----------------------------------- | |
1127 | ||
1128 | - | # Creating a Malware Database # |
1128 | + | yara wannacry_1.yar wannacry.exe |
1129 | ||
1130 | ----------------------------------------------------------------------- | |
1131 | - | Creating a malware database (sqlite) |
1131 | + | |
1132 | ||
1133 | - | sudo apt-get install -y python-simplejson python-simplejson-dbg |
1133 | + | |
1134 | ||
1135 | ||
1136 | - | wget https://s3.amazonaws.com/infosecaddictsfiles/avsubmit.py |
1136 | + | |
1137 | - | wget https://s3.amazonaws.com/infosecaddictsfiles/malware-password-is-infected.zip |
1137 | + | |
1138 | nano wannacry_2.yar | |
1139 | ||
1140 | ---------------------------Paste This----------------------------------- | |
1141 | rule wannacry_2{ | |
1142 | - | python avsubmit.py --init |
1142 | + | meta: |
1143 | author = "Harold Ogden" | |
1144 | - | python avsubmit.py -f malware.exe -e |
1144 | + | description = "WannaCry Ransomware Strings" |
1145 | date = "2017-05-12" | |
1146 | weight = 100 | |
1147 | ||
1148 | strings: | |
1149 | $string1 = "msg/m_bulgarian.wnry" | |
1150 | - | Creating a malware database (mysql) |
1150 | + | $string2 = "msg/m_chinese (simplified).wnry" |
1151 | $string3 = "msg/m_chinese (traditional).wnry" | |
1152 | - | - Step 1: Installing MySQL database |
1152 | + | $string4 = "msg/m_croatian.wnry" |
1153 | - | - Run the following command in the terminal: |
1153 | + | $string5 = "msg/m_czech.wnry" |
1154 | $string6 = "msg/m_danish.wnry" | |
1155 | - | sudo apt-get install mysql-server |
1155 | + | $string7 = "msg/m_dutch.wnry" |
1156 | $string8 = "msg/m_english.wnry" | |
1157 | - | |
1157 | + | $string9 = "msg/m_filipino.wnry" |
1158 | - | - Step 2: Installing Python MySQLdb module |
1158 | + | $string10 = "msg/m_finnish.wnry" |
1159 | - | - Run the following command in the terminal: |
1159 | + | $string11 = "msg/m_french.wnry" |
1160 | $string12 = "msg/m_german.wnry" | |
1161 | - | sudo apt-get build-dep python-mysqldb |
1161 | + | $string13 = "msg/m_greek.wnry" |
1162 | $string14 = "msg/m_indonesian.wnry" | |
1163 | $string15 = "msg/m_italian.wnry" | |
1164 | - | sudo apt-get install python-mysqldb |
1164 | + | $string16 = "msg/m_japanese.wnry" |
1165 | $string17 = "msg/m_korean.wnry" | |
1166 | $string18 = "msg/m_latvian.wnry" | |
1167 | $string19 = "msg/m_norwegian.wnry" | |
1168 | - | Step 3: Logging in |
1168 | + | $string20 = "msg/m_polish.wnry" |
1169 | - | Run the following command in the terminal: |
1169 | + | $string21 = "msg/m_portuguese.wnry" |
1170 | $string22 = "msg/m_romanian.wnry" | |
1171 | - | mysql -u root -p (set a password of 'malware') |
1171 | + | $string23 = "msg/m_russian.wnry" |
1172 | $string24 = "msg/m_slovak.wnry" | |
1173 | - | - Then create one database by running following command: |
1173 | + | $string25 = "msg/m_spanish.wnry" |
1174 | $string26 = "msg/m_swedish.wnry" | |
1175 | - | create database malware; |
1175 | + | $string27 = "msg/m_turkish.wnry" |
1176 | $string28 = "msg/m_vietnamese.wnry" | |
1177 | - | exit; |
1177 | + | |
1178 | ||
1179 | - | wget https://raw.githubusercontent.com/dcmorton/MalwareTools/master/mal_to_db.py |
1179 | + | condition: |
1180 | any of ($string*) | |
1181 | - | vi mal_to_db.py (fill in database connection information) |
1181 | + | } |
1182 | ---------------------------------------------------------------------------- | |
1183 | - | python mal_to_db.py -i |
1183 | + | |
1184 | ||
1185 | ||
1186 | - | ------- check it to see if the files table was created ------ |
1186 | + | |
1187 | ||
1188 | - | mysql -u root -p |
1188 | + | |
1189 | - | malware |
1189 | + | |
1190 | ||
1191 | - | show databases; |
1191 | + | |
1192 | ||
1193 | - | use malware; |
1193 | + | yara wannacry_2.yar wannacry.exe |
1194 | ||
1195 | - | show tables; |
1195 | + | |
1196 | ||
1197 | - | describe files; |
1197 | + | |
1198 | ||
1199 | - | exit; |
1199 | + | |
1200 | cd ~/students/yourname/security/malware_analysis/quick_yara | |
1201 | ||
1202 | git clone https://github.com/Yara-Rules/rules.git | |
1203 | ||
1204 | - | - Now add the malicious file to the DB |
1204 | + | cd rules/ |
1205 | ||
1206 | - | python mal_to_db.py -f malware.exe -u |
1206 | + | ./index_gen.sh |
1207 | ||
1208 | ls | |
1209 | ||
1210 | - | - Now check to see if it is in the DB |
1210 | + | cd malware/ |
1211 | ||
1212 | - | mysql -u root -p |
1212 | + | ls | grep -i ransom |
1213 | - | malware |
1213 | + | |
1214 | ls | grep -i rat | |
1215 | - | mysql> use malware; |
1215 | + | |
1216 | ls | grep -i toolkit | |
1217 | - | select id,md5,sha1,sha256,time FROM files; |
1217 | + | |
1218 | ls | grep -i apt | |
1219 | - | mysql> quit; |
1219 | + | |
1220 | cd .. | |
1221 | ||
1222 | cd capabilities/ | |
1223 | ||
1224 | ls | |
1225 | - | ################# |
1225 | + | |
1226 | - | # PCAP Analysis # |
1226 | + | cat capabilities.yar |
1227 | - | ################# |
1227 | + | |
1228 | cd .. | |
1229 | - | cd ~/Desktop/ |
1229 | + | |
1230 | cd cve_rules/ | |
1231 | - | mkdir suspiciouspcap/ |
1231 | + | |
1232 | ls | |
1233 | - | cd suspiciouspcap/ |
1233 | + | |
1234 | cd .. | |
1235 | - | wget https://s3.amazonaws.com/infosecaddictsfiles/suspicious-time.pcap |
1235 | + | |
1236 | ./index_gen.sh | |
1237 | - | wget https://s3.amazonaws.com/infosecaddictsfiles/chaosreader.pl |
1237 | + | |
1238 | cd .. | |
1239 | ||
1240 | yara -w rules/index.yar wannacry.exe | |
1241 | ||
1242 | - | firefox index.html |
1242 | + | |
1243 | ---------------------------------------------------------------------- | |
1244 | ||
1245 | ||
1246 | References: | |
1247 | https://www.slideshare.net/JohnLaycock1/yet-another-yara-allocution-yaya | |
1248 | https://www.slideshare.net/KasperskyLabGlobal/upping-the-apt-hunting-game-learn-the-best-yara-practices-from-kaspersky | |
1249 | ||
1250 | ||
1251 | ||
1252 | ||
1253 | ||
1254 | ||
1255 | - | # Intro to TCPDump # |
1255 | + | |
1256 | ##################################################### | |
1257 | # Analyzing Macro Embedded Malware # | |
1258 | - | sudo apt-get install tcpdump |
1258 | + | |
1259 | ---------------------------Type This----------------------------------- | |
1260 | cd ~/students/yourname/security/malware_analysis | |
1261 | ||
1262 | - | Basic sniffing |
1262 | + | mkdir macro_docs |
1263 | - | -------------- |
1263 | + | |
1264 | cd macro_docs | |
1265 | - | sudo tcpdump -n |
1265 | + | |
1266 | wget https://infosecaddicts-files.s3.amazonaws.com/064016.zip | |
1267 | ||
1268 | - | Now lets increase the display resolution of this packet, or get more details about it. The verbose switch comes in handy |
1268 | + | |
1269 | ||
1270 | - | sudo tcpdump -v -n |
1270 | + | |
1271 | ||
1272 | unzip 064016.zip | |
1273 | infected | |
1274 | - | Getting the ethernet header (link layer headers) |
1274 | + | |
1275 | - | ------------------------------------------------ |
1275 | + | |
1276 | - | In the above examples details of the ethernet header are not printed. Use the -e option to print the ethernet header details as well. |
1276 | + | |
1277 | python oledump.py 064016.doc -s A4 -v | |
1278 | - | sudo tcpdump -vv -n -e |
1278 | + | |
1279 | ||
1280 | ||
1281 | - | Sniffing a particular interface |
1281 | + | |
1282 | - | ------------------------------- |
1282 | + | |
1283 | - | In order to sniff a particular network interface we must specify it with the -i switch. First lets get the list of available interfaces using the -D switch. |
1283 | + | |
1284 | ||
1285 | - | sudo tcpdump -D |
1285 | + | |
1286 | python oledump.py 064016.doc -s A5 -v | |
1287 | ----------------------------------------------------------------------- | |
1288 | - | Filtering packets using expressions - Selecting protocols |
1288 | + | |
1289 | - | --------------------------------------------------------- |
1289 | + | |
1290 | ||
1291 | - | $ sudo tcpdump -n tcp |
1291 | + | |
1292 | python oledump.py 064016.doc -s A3 -v | |
1293 | ||
1294 | - | Particular host or port |
1294 | + | |
1295 | - | ----------------------- |
1295 | + | |
1296 | - | Expressions can be used to specify source ip, destination ip, and port numbers. The next example picks up all those packets with source address 192.168.1.101 |
1296 | + | |
1297 | ||
1298 | - | $ sudo tcpdump -n 'src 192.168.1.101' |
1298 | + | |
1299 | http://www.rapidtables.com/convert/number/hex-to-ascii.htm | |
1300 | ----------------------------------------------------------------------- | |
1301 | - | Next example picks up dns request packets, either those packets which originate from local machine and go to port 53 of some other machine. |
1301 | + | |
1302 | ||
1303 | - | $ sudo tcpdump -n 'udp and dst port 53' |
1303 | + | |
1304 | ||
1305 | ######################################### | |
1306 | - | To display the FTP packets coming from 192.168.1.100 to 192.168.1.2 |
1306 | + | # Security Operations Center Job Roles # |
1307 | # Intrusion Analysis Level 1 # | |
1308 | - | $ sudo tcpdump 'src 192.168.1.100 and dst 192.168.1.2 and port ftp' |
1308 | + | ######################################### |
1309 | Required Technical Skills: Comfortable with basic Linux/Windows (MCSA/Linux+) | |
1310 | Comfortable with basic network (Network+) | |
1311 | - | Search the network traffic using grep |
1311 | + | Comfortable with security fundamentals (Security+) |
1312 | ||
1313 | - | Grep can be used along with tcpdump to search the network traffic. Here is a very simple example |
1313 | + | |
1314 | ||
1315 | - | $ sudo tcpdump -n -A | grep -e 'POST' |
1315 | + | |
1316 | ||
1317 | Job Task: Process security events, follow incident response triage playbook | |
1318 | - | So what is the idea behind searching packets. Well one good thing can be to sniff passwords. |
1318 | + | |
1319 | - | Here is quick example to sniff passwords using egrep |
1319 | + | ######################################### |
1320 | # Security Operations Center Job Roles # | |
1321 | # Intrusion Analysis Level 2 # | |
1322 | - | tcpdump port http or port ftp or port smtp or port imap or port pop3 -l -A | egrep -i 'pass=|pwd=|log=|login=|user=|username=|pw=|passw=|passwd=|password=|pass:|user:|username:|password:|login:|pass |user ' --color=auto --line-buffered -B20 |
1322 | + | ######################################### |
1323 | ||
1324 | Required Technical Skills: Comfortable with basic Linux/Windows system administration | |
1325 | Comfortable with basic network administration | |
1326 | Comfortable with basic programming | |
1327 | Comfortable researching IT security issues | |
1328 | - | # NGrep # |
1328 | + | |
1329 | ||
1330 | ||
1331 | - | Install ngrep on Ubuntu |
1331 | + | |
1332 | ||
1333 | - | $ sudo apt-get install ngrep |
1333 | + | Job Task: Perform detailed malware analysis, assist with development of the incident response triage playbook |
1334 | ||
1335 | Sample Playbook: https://infosecaddicts-files.s3.amazonaws.com/IR-Program-and-Playbooks.zip | |
1336 | - | Search network traffic for string "User-Agent: " |
1336 | + | |
1337 | ||
1338 | - | $ sudo ngrep -d eth0 "User-Agent: " tcp and port 80 |
1338 | + | |
1339 | ######################################### | |
1340 | - | In the above command : |
1340 | + | # Security Operations Center Job Roles # |
1341 | - | a) tcp and port 80 - is the bpf filter (Berkeley Packet Filter) , that sniffs only TCP packet with port number 80 |
1341 | + | # Intrusion Analysis Level 3 # |
1342 | - | b) The d option specifies the interface to sniff. eth0 in this case. |
1342 | + | ######################################### |
1343 | - | c) "User-Agent: " is the string to search for. All packets that have that string are displayed. |
1343 | + | |
1344 | Required Technical Skills: Strong statistical analysis background | |
1345 | - | 2. Search network packets for GET or POST requests : |
1345 | + | Strong programming background (C, C++, Java, Assembly, scripting languages) |
1346 | Advanced system/network administration background | |
1347 | - | $ sudo ngrep -l -q -d eth0 "^GET |^POST " tcp and port 80 |
1347 | + | Comfortable researching IT security issues |
1348 | ||
1349 | - | The l option makes the output buffered and the q option is for quiet ( Be quiet; don't output any information other than packet headers and their payloads (if relevant) ). |
1349 | + | |
1350 | ||
1351 | - | 3. ngrep without any options would simply capture all packets. |
1351 | + | |
1352 | ||
1353 | - | $ sudo ngrep |
1353 | + | Job Task: Perform detailed malware analysis |
1354 | Perform detailed statistical analysis | |
1355 | Assist with development of the incident response triage playbook | |
1356 | ||
1357 | - | https://dl.packetstormsecurity.net/papers/general/ngreptut.txt |
1357 | + | |
1358 | ||
1359 | - | $ sudo ngrep -d eth0 -n 3 |
1359 | + | |
1360 | ################################################# | |
1361 | - | $ sudo ngrep -d any port 25 |
1361 | + | # Good references for learning Malware Analysis # |
1362 | ################################################# | |
1363 | ||
1364 | - | This will let you monitor all activity crossing source or destination port 25 |
1364 | + | |
1365 | - | (SMTP). |
1365 | + | https://www.slideshare.net/SamBowne/cnit-126-ch-0-malware-analysis-primer-1-basic-static-techniques |
1366 | https://www.slideshare.net/grecsl/malware-analysis-101-n00b-to-ninja-in-60-minutes-at-bsideslv-on-august-5-2014 | |
1367 | - | $ sudo ngrep -wi -d wlan0 'user|pass' port 6667 |
1367 | + | https://www.slideshare.net/Bletchley131/intro-to-static-analysis |
1368 | ||
1369 | - | $ sudo ngrep -wi -d any 'user|pass' port 21 |
1369 | + | |
1370 | ||
1371 | ################## | |
1372 | # Day 2 Homework # | |
1373 | ################## | |
1374 | ||
1375 | Task Option 1: Basic Shell Scripting | |
1376 | ------------------------------------ | |
1377 | Watch and do all of the exercises in the video https://www.youtube.com/watch?v=GtovwKDemnI | |
1378 | Create a word document that contains the screenshots of the tasks performed in this video | |
1379 | Name the word document 'YourFirstName-YourLastName-LinuxDay2-ShellScripting.docx' (ex: 'Joseph-McCray-LinuxDay2-ShellScripting.docx') | |
1380 | - | sudo tshark -i eth0 -r suspicious-time.pcap -qz io,phs |
1380 | + | Email the document to me at joe-at-secureninja-dot-com before the start of class tomorrow |
1381 | ||
1382 | ||
1383 | - | tshark -r suspicious-time.pcap | grep 'NB.*20\>' | sed -e 's/<[^>]*>//g' | awk '{print $3,$4,$9}' | sort -u |
1383 | + | Task Option 2: Advanced Shell Scripting |
1384 | --------------------------------------- | |
1385 | Watch and do all of the exercises in the video https://www.youtube.com/watch?v=aNQCl_ByM20&t=4045s | |
1386 | - | tshark -r suspicious-time.pcap | grep 'NB.*1e\>' | sed -e 's/<[^>]*>//g' | awk '{print $3,$4,$9}' | sort -u |
1386 | + | Create a word document that contains the screenshots of the tasks performed in this video |
1387 | Name the word document 'YourFirstName-YourLastName-LinuxDay2-AdvancedShellScripting.docx' (ex: 'Joseph-McCray-LinuxDay2-AdvancedShellScripting.docx') | |
1388 | Email the document to me at joe-at-secureninja-dot-com before the start of class tomorrow | |
1389 | - | tshark -r suspicious-time.pcap arp | grep has | awk '{print $3," -> ",$9}' | tr -d '?' |
1389 | + | |
1390 | ||
1391 | ||
1392 | - | tshark -r suspicious-time.pcap -Tfields -e "eth.src" | sort | uniq |
1392 | + | |
1393 | ||
1394 | ||
1395 | - | tshark -r suspicious-time.pcap -Y "browser.command==1" -Tfields -e "ip.src" -e "browser.server" | uniq |
1395 | + | |
1396 | ||
1397 | - | tshark -r suspicious-time.pcap -Tfields -e "eth.src" | sort |uniq |
1397 | + | |
1398 | ||
1399 | ||
1400 | ||
1401 | ||
1402 | ##################################### | |
1403 | ############################## # Day 3: Threat Hunting on the wire # ############################## | |
1404 | ##################################### | |
1405 | ||
1406 | ||
1407 | ||
1408 | ||
1409 | - After logging please open a terminal window and type the following commands: | |
1410 | ---------------------------Type This----------------------------------- | |
1411 | cd ~/students/yourname/security/ | |
1412 | mkdir pcap_analysis | |
1413 | cd pcap_analysis | |
1414 | ----------------------------------------------------------------------- | |
1415 | ||
1416 | ||
1417 | ||
1418 | ||
1419 | ################################################################## | |
1420 | # Analyzing a PCAP Prads # | |
1421 | # Note: run as regular user # | |
1422 | ################################################################## | |
1423 | - | ###################################### |
1423 | + | |
1424 | - | # PCAP Analysis with forensicPCAP.py # |
1424 | + | ---------------------------Type this as a regular user---------------------------------- |
1425 | - | ###################################### |
1425 | + | cd ~/students/yourname/security/pcap_analysis/ |
1426 | ||
1427 | - | cd ~/Desktop/suspiciouspcap/ |
1427 | + | mkdir prads |
1428 | ||
1429 | - | wget https://raw.githubusercontent.com/madpowah/ForensicPCAP/master/forensicPCAP.py |
1429 | + | cd prads |
1430 | ||
1431 | - | sudo pip install cmd2==0.7.9 |
1431 | + | wget http://45.63.104.73/suspicious-time.pcap |
1432 | ||
1433 | prads -r suspicious-time.pcap -l prads-asset.log | |
1434 | - | python forensicPCAP.py suspicious-time.pcap |
1434 | + | |
1435 | cat prads-asset.log | less | |
1436 | ||
1437 | cat prads-asset.log | grep SYN | grep -iE 'windows|linux' | |
1438 | ||
1439 | - | ForPCAP >>> help |
1439 | + | cat prads-asset.log | grep CLIENT | grep -iE 'safari|firefox|opera|chrome' |
1440 | ||
1441 | cat prads-asset.log | grep SERVER | grep -iE 'apache|linux|ubuntu|nginx|iis' | |
1442 | - | Prints stats about PCAP |
1442 | + | |
1443 | ||
1444 | - | ForPCAP >>> stat |
1444 | + | |
1445 | ||
1446 | ||
1447 | - | Prints all DNS requests from the PCAP file. The id before the DNS is the packet's id which can be use with the "show" command. |
1447 | + | ################################## |
1448 | # PCAP Analysis with ChaosReader # | |
1449 | - | ForPCAP >>> dns |
1449 | + | # Note: run as regular user # |
1450 | ################################## | |
1451 | - | ForPCAP >>> show |
1451 | + | ---------------------------Type this as a regular user---------------------------------- |
1452 | cd ~/students/yourname/security/pcap_analysis/ | |
1453 | ||
1454 | - | Prints all destination ports from the PCAP file. The id before the DNS is the packet's id which can be use with the "show" command. |
1454 | + | mkdir chaos_reader/ |
1455 | ||
1456 | - | ForPCAP >>> dstports |
1456 | + | cd chaos_reader/ |
1457 | ||
1458 | - | ForPCAP >>> show |
1458 | + | wget http://45.63.104.73/suspicious-time.pcap |
1459 | ||
1460 | wget http://45.63.104.73/chaosreader.pl | |
1461 | - | Prints the number of ip source and store them. |
1461 | + | |
1462 | perl chaosreader.pl suspicious-time.pcap | |
1463 | - | ForPCAP >>> ipsrc |
1463 | + | |
1464 | cat index.text | grep -v '"' | grep -oE "([0-9]+\.){3}[0-9]+.*\)" | |
1465 | - | ForPCAP >>> show |
1465 | + | |
1466 | cat index.text | grep -v '"' | grep -oE "([0-9]+\.){3}[0-9]+.*\)" | awk '{print $4, $5, $6}' | sort | uniq -c | sort -nr | |
1467 | ||
1468 | - | Prints the number of web's requests and store them |
1468 | + | |
1469 | - | ForPCAP >>> web |
1469 | + | |
1470 | ||
1471 | - | ForPCAP >>> show |
1471 | + | |
1472 | ||
1473 | for i in session_00[0-9]*.http.html; do srcip=`cat "$i" | grep 'http:\ ' | awk '{print $2}' | cut -d ':' -f1`; dstip=`cat "$i" | grep 'http:\ ' | 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 | awk '{print $5}' > url.lst | |
1474 | ||
1475 | - | Prints the number of mail's requests and store them |
1475 | + | |
1476 | wget https://raw.githubusercontent.com/Open-Sec/forensics-scripts/master/check-urls-virustotal.py | |
1477 | - | ForPCAP >>> mail |
1477 | + | |
1478 | ||
1479 | - | ForPCAP >>> show |
1479 | + | python check-urls-virustotal.py url.lst |
1480 | ||
1481 | ||
1482 | ||
1483 | ------------------------------------------------------------------------ | |
1484 | ||
1485 | ||
1486 | ||
1487 | - | # Understanding Snort rules # |
1487 | + | |
1488 | ||
1489 | - | Field 1: Action - Snort can process events in 1 of 3 ways (alert, log, drop) |
1489 | + | |
1490 | ||
1491 | - | Field 2: Protocol - Snort understands a few types of traffic (tcp, udp, icmp) |
1491 | + | |
1492 | ############################# | |
1493 | - | Field 3: Source IP (can be a variable like $External_Net, or an IP, or a range) |
1493 | + | |
1494 | # Note: run as regular user # | |
1495 | - | Field 4: Source Port (can be a variable like $WebServer_Ports, or a port number, or a range of ports) |
1495 | + | |
1496 | ---------------------------Type this as a regular user--------------------------------- | |
1497 | - | Field 5: Traffic Direction (->) |
1497 | + | cd ~/students/yourname/security/pcap_analysis/ |
1498 | ||
1499 | - | Field 6: Destination IP (can be a variable like $External_Net, or an IP, or a range) |
1499 | + | mkdir tshark |
1500 | ||
1501 | - | Field 7: Destination Port (can be a variable like $WebServer_Ports, or a port number, or a range of ports) |
1501 | + | cd tshark/ |
1502 | ||
1503 | - | Field 8: MSG - what is actually displayed on the analysts machine |
1503 | + | wget http://45.63.104.73/suspicious-time.pcap |
1504 | ||
1505 | tshark -i ens3 -r suspicious-time.pcap -qz io,phs | |
1506 | - | Let's look at 2 simple rules |
1506 | + | |
1507 | - | ---------------------------------------------------------------------------------- |
1507 | + | |
1508 | - | alert tcp $EXTERNAL_NET any -> $HOME_NET 135 (msg:”NETBIOS DCERPC ISystemActivator \ |
1508 | + | |
1509 | - | bind attempt”; flow:to_server,established; content:”|05|”; distance:0; within:1; \ |
1509 | + | |
1510 | - | content:”|0b|”; distance:1; within:1; byte_test:1,&,1,0,relative; content:”|A0 01 00 \ |
1510 | + | |
1511 | - | 00 00 00 00 00 C0 00 00 00 00 00 00 46|”; distance:29; within:16; \ |
1511 | + | |
1512 | - | reference:cve,CAN-2003-0352; classtype:attempted-admin; sid:2192; rev:1;) |
1512 | + | |
1513 | ||
1514 | - | alert tcp $EXTERNAL_NET any -> $HOME_NET 445 (msg:”NETBIOS SMB DCERPC ISystemActivator bind \ |
1514 | + | |
1515 | - | attempt”; flow:to_server,established; content:”|FF|SMB|25|”; nocase; offset:4; \ |
1515 | + | |
1516 | - | depth:5; content:”|26 00|”; distance:56; within:2; content:”|5c \ |
1516 | + | |
1517 | - | 00|P|00|I|00|P|00|E|00 5c 00|”; nocase; distance:5; within:12; content:”|05|”; \ |
1517 | + | |
1518 | - | distance:0; within:1; content:”|0b|”; distance:1; within:1; \ |
1518 | + | |
1519 | - | byte_test:1,&,1,0,relative; content:”|A0 01 00 00 00 00 00 00 C0 00 00 00 00 00 00 \ |
1519 | + | |
1520 | - | 46|”; distance:29; within:16; reference:cve,CAN-2003-0352; classtype:attempted-admin; \ |
1520 | + | |
1521 | - | sid:2193; rev:1;) |
1521 | + | |
1522 | - | ---------------------------------------------------------------------------------- |
1522 | + | |
1523 | ||
1524 | tshark -r suspicious-time.pcap -Y "data-text-lines contains \"<script\"" -T fields -e frame.number -e ip.src -e ip.dst | |
1525 | ||
1526 | - | From your Linux machine ping your Windows machine |
1526 | + | |
1527 | ------------------------------------------------------------------------ | |
1528 | - | ping 192.168.11.1 |
1528 | + | |
1529 | ||
1530 | ||
1531 | ||
1532 | - | Start wireshark and let's create some simple filters: |
1532 | + | |
1533 | ############################### | |
1534 | - | Filter 1: |
1534 | + | # Extracting files from PCAPs # |
1535 | # Note: run as regular user # | |
1536 | - | ip.addr==192.168.11.1 |
1536 | + | |
1537 | ---------------------------Type this as a regular user--------------------------------- | |
1538 | cd ~/students/yourname/security/pcap_analysis/ | |
1539 | - | Filter 2: |
1539 | + | |
1540 | mkdir extract_files | |
1541 | - | ip.addr==192.168.11.1 && icmp |
1541 | + | |
1542 | cd extract_files | |
1543 | ||
1544 | wget http://45.63.104.73/suspicious-time.pcap | |
1545 | - | Filter 3: |
1545 | + | |
1546 | foremost -v -i suspicious-time.pcap | |
1547 | - | ip.addr==192.168.11.1 && !(tcp.port==22) |
1547 | + | |
1548 | cd output | |
1549 | - | Now stop your capture and restart it (make sure you keep the filter) |
1549 | + | |
1550 | ls | |
1551 | ||
1552 | cat audit.txt | |
1553 | ||
1554 | - | Back to your Linux machine: |
1554 | + | cd exe |
1555 | - | [ CTRL-C ] - to stop your ping |
1555 | + | |
1556 | wget https://raw.githubusercontent.com/GREEKYnikhilsharma/Xen0ph0n-VirusTotal_API_Tool-Python3/master/vtlite.py | |
1557 | - | wget http://downloads.securityfocus.com/vulnerabilities/exploits/oc192-dcom.c |
1557 | + | --------------------------------------------------------------------------------------- |
1558 | ||
1559 | ||
1560 | - | gcc -o exploit oc192-dcom.c |
1560 | + | ******* NOTE: You will need to put your virustotal API key in vtlite.py ******* |
1561 | * Create an account in virustotal > login > click on your profile > API key > copy API key > in terminal do nano vtlite.py > | |
1562 | - | ./exploit |
1562 | + | * Paste the API key in where it says > profit |
1563 | ******************************************************************************** | |
1564 | ||
1565 | - | ./exploit -d 192.168.11.1 -t 0 |
1565 | + | ---------------------------Type this as a regular user--------------------------------- |
1566 | for f in *.exe; do python3 vtlite.py -s $f; sleep 20; done | |
1567 | --------------------------------------------------------------------------------------- | |
1568 | ||
1569 | ||
1570 | - | Now go back to WireShark and stop the capture. |
1570 | + | |
1571 | # PCAP Analysis with Suricata # | |
1572 | # Note: run as root # | |
1573 | ############################### | |
1574 | --------------------------Type this as root-------------------------------- | |
1575 | cd ~/students/yourname/security/pcap_analysis/ | |
1576 | ||
1577 | mkdir suricata | |
1578 | ||
1579 | cd suricata/ | |
1580 | ||
1581 | wget http://45.63.104.73/suspicious-time.pcap | |
1582 | ||
1583 | - | wget https://s3.amazonaws.com/infosecaddictsfiles/hn_forensics.vmem |
1583 | + | mkdir suri |
1584 | ||
1585 | sudo suricata -c /etc/suricata/suricata.yaml -r suspicious-time.pcap -l suri/ | |
1586 | ||
1587 | cd suri/ | |
1588 | ||
1589 | cat stats.log | less | |
1590 | ||
1591 | cat eve.json |grep -E "e\":\"http"|jq ".timestamp,.http"|csplit - /..T..:/ {*} | |
1592 | ||
1593 | cat xx01 | |
1594 | ||
1595 | cat xx02 | |
1596 | ||
1597 | cat xx03 | |
1598 | ||
1599 | cat xx04 | |
1600 | ||
1601 | cat xx05 | |
1602 | ||
1603 | cat xx06 | |
1604 | ------------------------------------------------------------------------ | |
1605 | ||
1606 | ||
1607 | ############################# | |
1608 | # PCAP Analysis with Yara # | |
1609 | # Note: run as regular user # | |
1610 | ############################# | |
1611 | -------------------------Type this as a regular user---------------------------------- | |
1612 | cd ~/students/yourname/security/pcap_analysis/ | |
1613 | ||
1614 | git clone https://github.com/kevthehermit/YaraPcap.git | |
1615 | cd YaraPcap/ | |
1616 | wget http://45.63.104.73/suspicious-time.pcap | |
1617 | wget https://github.com/Yara-Rules/rules/archive/master.zip | |
1618 | unzip master.zip | |
1619 | cd rules-master/ | |
1620 | ls | |
1621 | cat index.yar | |
1622 | clear | |
1623 | ./index_gen.sh | |
1624 | cd .. | |
1625 | mkdir matching_files/ | |
1626 | python yaraPcap.py rules-master/index.yar suspicious-time.pcap -s matching_files/ | |
1627 | whereis tcpflow | |
1628 | vi yaraPcap.py **** fix line 35 with correct path to tcpflow (/usr/bin/tcpflow)**** | |
1629 | python yaraPcap.py rules-master/index.yar suspicious-time.pcap -s matching_files/ | |
1630 | cd matching_files/ | |
1631 | ls | |
1632 | cat report.txt | |
1633 | ------------------------------------------------------------------------ | |
1634 | ||
1635 | ||
1636 | ||
1637 | ||
1638 | ################################################################################# | |
1639 | # Now that you know packet analysis here are the next set of files to play with # | |
1640 | ################################################################################# | |
1641 | - | https://s3.amazonaws.com/infosecaddictsfiles/Lena151.zip |
1641 | + | wget https://github.com/SpiderLabs/IOCs-IDPS/raw/master/APT41/APT41_StoreSyncSvc.pcap |
1642 | wget https://github.com/SpiderLabs/IOCs-IDPS/raw/master/Agent_Tesla/agenttesla_09July2019.pcap | |
1643 | wget https://github.com/SpiderLabs/IOCs-IDPS/raw/master/CVE-2019-9978/CVE-2019-9978_attempt_05May2019.pcap | |
1644 | wget https://github.com/SpiderLabs/IOCs-IDPS/raw/master/Powershell/Powershell_script_19Dec2019.pcap | |
1645 | wget https://github.com/SpiderLabs/IOCs-IDPS/raw/master/sharik_smoke/sharik_smoke.pcap | |
1646 | wget https://github.com/SpiderLabs/IOCs-IDPS/raw/master/Microsoft/CVE-2019-0703.pcap | |
1647 | wget https://github.com/SpiderLabs/IOCs-IDPS/raw/master/Microsoft/CVE-2019-0801.pcap | |
1648 | ||
1649 | ||
1650 | ||
1651 | References: | |
1652 | https://www.slideshare.net/j0b1n/tcpdump-hunter | |
1653 | https://www.slideshare.net/AviNetworks/reconsider-tcpdump-for-modern-troubleshooting | |
1654 | ||
1655 | ||
1656 | ################## | |
1657 | # Day 3 Homework # | |
1658 | ################## | |
1659 | ||
1660 | Task Option 1: Shell Scripting | |
1661 | ------------------------------------ | |
1662 | Watch and do all of the exercises in the video https://www.youtube.com/watch?v=hwrnmQumtPw | |
1663 | Create a word document that contains the screenshots of the tasks performed in this video | |
1664 | Name the word document 'YourFirstName-YourLastName-LinuxDay3-ShellScripting.docx' (ex: 'Joseph-McCray-LinuxDay3-ShellScripting.docx') | |
1665 | Email the document to me at joe-at-secureninja-dot-com before the start of class tomorrow | |
1666 | ||
1667 | ||
1668 | Task Option 2: Python3 | |
1669 | --------------------------------------- | |
1670 | Watch and do all of the exercises in the first 7 videos from https://www.youtube.com/playlist?list=PLypxmOPCOkHVzhKRcWzEkQXCnmHezGVeB | |
1671 | Create a word document that contains the screenshots of the tasks performed in these videos | |
1672 | Name the word document 'YourFirstName-YourLastName-LinuxDay3-AdvancedShellScripting.docx' (ex: 'Joseph-McCray-LinuxDay3-AdvancedShellScripting.docx') | |
1673 | Email the document to me at joe-at-secureninja-dot-com before the start of class tomorrow | |
1674 | ||
1675 | ||
1676 | ||
1677 | ||
1678 | ||
1679 | ||
1680 | ||
1681 | ||
1682 | ||
1683 | ||
1684 | ||
1685 | ||
1686 | ################################################################ | |
1687 | ############################## # Day 4: Programming Fundamentals & Offensive Cyber Operations # ############################## | |
1688 | ################################################################ | |
1689 | ||
1690 | ------------------------------- Programming fundamentals ------------------------------- | |
1691 | ||
1692 | ||
1693 | Joe rule #1 single quote, single quote, left arrow | |
1694 | -------------------------------------------------- | |
1695 | '' <-- as soon as you type '', then hit your left arrow key to put you inside of the '' | |
1696 | "" <-- as soon as you type "", then hit your left arrow key to put you inside of the "" | |
1697 | something() <-- as soon as you type (), then hit your left arrow key to put you inside of the () | |
1698 | something[] <-- as soon as you type [], then hit your left arrow key to put you inside of the [] | |
1699 | something{} <-- as soon as you type {}, then hit your left arrow key to put you inside of the {} | |
1700 | ||
1701 | -- Now kick it up a notch | |
1702 | [] <-- as soon as you type [], then hit your left arrow key to put you inside of the [] | |
1703 | [()] <-- as soon as you type (), then hit your left arrow key to put you inside of the () | |
1704 | [({})] <-- as soon as you type {}, then hit your left arrow key to put you inside of the {} | |
1705 | [({"''"})] <-- as soon as you type "", then hit your left arrow key to put you inside of the "" | |
1706 | [({"''"})] <-- as soon as you type '', then hit your left arrow key to put you inside of the '' | |
1707 | ||
1708 | ||
1709 | ||
1710 | Joe rule #2 "Code can only do 3 things" | |
1711 | -------------------------------------- | |
1712 | ||
1713 | Process - read, write, math | |
1714 | ||
1715 | Decision - if/then | |
1716 | ||
1717 | Loop - for | |
1718 | ||
1719 | ||
1720 | ||
1721 | ||
1722 | Joe rule #3 "Never more than 5-10" | |
1723 | --------------------------------- | |
1724 | ||
1725 | -----5 lines of code---- | |
1726 | line 1 blah blah blah | |
1727 | line 2 blah blah blah | |
1728 | line 3 blah blah blah | |
1729 | line 4 blah blah blah | |
1730 | line 5 blah blah blah | |
1731 | ||
1732 | ||
1733 | sales_tax = price * tax_rate | |
1734 | ||
1735 | ||
1736 | 0.80 = 10 * 0.08 | |
1737 | ||
1738 | -----5-10 lines of code---- = function | |
1739 | price = 10 | |
1740 | ||
1741 | def st(): | |
1742 | sales_tax = price * 0.08 | |
1743 | print(sales_tax) | |
1744 | ||
1745 | ||
1746 | st(10) <---- how to run a function | |
1747 | ||
1748 | -----5-10 functions ---- = class "tax class" | |
1749 | st() | |
1750 | lt() | |
1751 | pt() | |
1752 | it() | |
1753 | dt() | |
1754 | ||
1755 | ||
1756 | ||
1757 | tax.st() | |
1758 | tax.lt() | |
1759 | ||
1760 | -----5-10 functions ---- = class "expense class" | |
1761 | gas() | |
1762 | elec() | |
1763 | water() | |
1764 | food() | |
1765 | beer() | |
1766 | ||
1767 | expense.gas() | |
1768 | ||
1769 | ||
1770 | -----5-10 classes ---- = module "finance module" | |
1771 | ||
1772 | import finance | |
1773 | ||
1774 | ||
1775 | ------------------------------- Summary of fundamentals ------------------------------ | |
1776 | ||
1777 | ||
1778 | ||
1779 | ||
1780 | ||
1781 | ||
1782 | ||
1783 | ||
1784 | ||
1785 | ||
1786 | ||
1787 | ||
1788 | ||
1789 | ||
1790 | ||
1791 | Let's look at a simple for loop | |
1792 | ---------------------------Type This----------------------------------- | |
1793 | cd ~/students/yourname/ | |
1794 | mkdir programming_fundamentals | |
1795 | cd programming_fundamentals | |
1796 | cp ~/wannacry.exe . | |
1797 | nano forloop_malware_analysis.sh | |
1798 | ||
1799 | ---------------------------Paste This----------------------------------- | |
1800 | #!/bin/bash | |
1801 | ||
1802 | ransomeware=('CryptImportKey' 'CryptDecrypt' 'CryptDestroyKey' 'CryptReleaseContext' 'EntryPo int' 'CryptAcquireContextA' 'lstrcpyW' 'lstrlenW' 'lstrcatW' 'CloseHandle' 'lstrcmpiA' 'RegOp enKeyExA' 'lstrlenA' 'RegSetValueExA' 'RegCloseKey' 'RegQueryValueExA' 'GetLastError' 'GetEnv ironmentVariableA' 'ShellExecuteA' 'Sleep' 'CryptGenKey' 'CryptExportKey' 'CryptEncrypt' 'KiU serExceptionDispatcher' 'RtlZeroMemory' 'MultiByteToWideChar' 'lstrcatA' 'RegCreateKeyA' 'SHC hangeNotify' 'SetErrorMode' 'CryptGenKey' 'CryptImportKey'); | |
1803 | ||
1804 | # This is just a test to read all of the values in the array | |
1805 | ||
1806 | #echo ${ransomeware[@]} | |
1807 | ||
1808 | # This is a quick for loop to run strings and grep for everything in the array | |
1809 | # Reference: http://www.masteringunixshell.net/qa3/bash-how-to-echo-array.html | |
1810 | ||
1811 | for ELEMENT in ${ransomeware[@]} | |
1812 | do | |
1813 | #echo string: $ELEMENT | |
1814 | strings wannacry.exe | grep -i $ELEMENT | |
1815 | done | |
1816 | -------------------------------------------------- | |
1817 | ||
1818 | ||
1819 | ||
1820 | ||
1821 | ||
1822 | ||
1823 | ||
1824 | ||
1825 | Ok, now let's run it | |
1826 | ---------------------------Type This----------------------------------- | |
1827 | chmod +x forloop_malware_analysis.sh | |
1828 | ./forloop_malware_analysis.sh | |
1829 | ------------------------------------------------------------------------ | |
1830 | ||
1831 | ||
1832 | ||
1833 | ||
1834 | ||
1835 | ||
1836 | Let's look at a simple menu | |
1837 | ---------------------------Type This----------------------------------- | |
1838 | ||
1839 | nano simple_menu.sh | |
1840 | ||
1841 | ---------------------------Paste This----------------------------------- | |
1842 | #!/bin/bash | |
1843 | # simple menu to do various functions | |
1844 | # Reference: http://www.seafriends.org.nz/linux/menus.htm | |
1845 | ||
1846 | ||
1847 | while [ answer != "0" ] | |
1848 | do | |
1849 | clear | |
1850 | echo "Select from the following functions" | |
1851 | echo " 0 exit" | |
1852 | echo " 1 Network Asset Inventory" | |
1853 | echo " 2 IP to IP communication and URL lookup" | |
1854 | echo " 3 Extract files" | |
1855 | echo " 4 exit" | |
1856 | ||
1857 | ||
1858 | read -p " ?" answer | |
1859 | case $answer in | |
1860 | 0) break ;; | |
1861 | 1) echo "Network Asset Inventory" | |
1862 | prads -r suspicious-time.pcap -l prads-asset.log | |
1863 | cat prads-asset.log | grep SYN | grep -iE 'windows|linux' | |
1864 | cat prads-asset.log | grep CLIENT | grep -iE 'safari|firefox|opera|chrome' | |
1865 | cat prads-asset.log | grep SERVER | grep -iE 'apache|linux|ubuntu|nginx|iis' | |
1866 | ;; | |
1867 | 2) echo "IP to IP communication and URL lookup" | |
1868 | tshark -r suspicious-time.pcap -Y 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' | |
1869 | ;; | |
1870 | 3) echo "Extract files" | |
1871 | foremost -v -i suspicious-time.pcap | |
1872 | cat output/audit.txt | |
1873 | ;; | |
1874 | 4) break ;; | |
1875 | *) break ;; | |
1876 | esac | |
1877 | echo "press RETURN for menu" | |
1878 | read key | |
1879 | done | |
1880 | exit 0 | |
1881 | -------------------------------------------------- | |
1882 | ||
1883 | ||
1884 | ||
1885 | ||
1886 | ||
1887 | ||
1888 | ||
1889 | ||
1890 | Ok, now let's run it | |
1891 | ---------------------------Type This----------------------------------- | |
1892 | chmod +x simple_menu.sh | |
1893 | ./simple_menu.sh | |
1894 | ------------------------------------------------------------------------ | |
1895 | ||
1896 | ||
1897 | ||
1898 | ||
1899 | ||
1900 | ||
1901 | Let's look at a simple function | |
1902 | ---------------------------Type This----------------------------------- | |
1903 | ||
1904 | nano hello_world.sh | |
1905 | ||
1906 | ---------------------------Paste This----------------------------------- | |
1907 | #!/bin/bash | |
1908 | # Reference: https://linuxize.com/post/bash-functions/ | |
1909 | ||
1910 | hello_world () { | |
1911 | echo 'hello, world' | |
1912 | } | |
1913 | ||
1914 | hello_world | |
1915 | -------------------------------------------------- | |
1916 | ||
1917 | ||
1918 | ||
1919 | ||
1920 | ||
1921 | ||
1922 | Ok, now let's run it | |
1923 | ---------------------------Type This----------------------------------- | |
1924 | chmod +x hello_world.sh | |
1925 | ./hello_world.sh | |
1926 | ------------------------------------------------------------------------ | |
1927 | ||
1928 | ||
1929 | ||
1930 | ||
1931 | Let's ask the user a question | |
1932 | ---------------------------Type This----------------------------------- | |
1933 | ||
1934 | nano prompt_for_user_input.sh | |
1935 | ||
1936 | ---------------------------Paste This----------------------------------- | |
1937 | #!/bin/bash | |
1938 | # Reference: https://tecadmin.net/prompt-user-input-in-linux-shell-script/ | |
1939 | ||
1940 | read -p "Enter Your Name: " username | |
1941 | echo "Welcome $username!" | |
1942 | ------------------------------------------------------------------------ | |
1943 | ||
1944 | ||
1945 | ||
1946 | ||
1947 | ||
1948 | ||
1949 | Ok, now let's run it | |
1950 | ---------------------------Type This----------------------------------- | |
1951 | chmod +x prompt_for_user_input.sh | |
1952 | ./prompt_for_user_input.sh | |
1953 | ------------------------------------------------------------------------ | |
1954 | ||
1955 | ||
1956 | ||
1957 | ||
1958 | ||
1959 | ||
1960 | Let's make the function do something useful | |
1961 | ---------------------------Type This----------------------------------- | |
1962 | ||
1963 | nano ip_2_url_lookup.sh | |
1964 | ||
1965 | ---------------------------Paste This----------------------------------- | |
1966 | #!/bin/bash | |
1967 | # Reference: https://linuxize.com/post/bash-functions/ | |
1968 | ||
1969 | do_stuff () { | |
1970 | tshark -r suspicious-time.pcap -Y 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' | |
1971 | } | |
1972 | ||
1973 | do_stuff | |
1974 | ------------------------------------------------------------------------ | |
1975 | ||
1976 | ||
1977 | ||
1978 | ||
1979 | ||
1980 | ||
1981 | Ok, now let's run it | |
1982 | ---------------------------Type This----------------------------------- | |
1983 | chmod +x ip_2_url_lookup.sh | |
1984 | ./ip_2_url_lookup.sh | |
1985 | ------------------------------------------------------------------------ | |
1986 | ||
1987 | ||
1988 | ||
1989 | ||
1990 | Let's grab some PCAP files | |
1991 | ---------------------------Type This----------------------------------- | |
1992 | cd ~/students/yourname/programming_fundamentals | |
1993 | mkdir pcaps | |
1994 | cd pcaps | |
1995 | wget https://github.com/SpiderLabs/IOCs-IDPS/raw/master/APT41/APT41_StoreSyncSvc.pcap | |
1996 | wget https://github.com/SpiderLabs/IOCs-IDPS/raw/master/Agent_Tesla/agenttesla_09July2019.pcap | |
1997 | wget https://github.com/SpiderLabs/IOCs-IDPS/raw/master/CVE-2019-9978/CVE-2019-9978_attempt_05May2019.pcap | |
1998 | wget https://github.com/SpiderLabs/IOCs-IDPS/raw/master/Powershell/Powershell_script_19Dec2019.pcap | |
1999 | wget https://github.com/SpiderLabs/IOCs-IDPS/raw/master/sharik_smoke/sharik_smoke.pcap | |
2000 | wget https://github.com/SpiderLabs/IOCs-IDPS/raw/master/Microsoft/CVE-2019-0703.pcap | |
2001 | wget https://github.com/SpiderLabs/IOCs-IDPS/raw/master/Microsoft/CVE-2019-0801.pcap | |
2002 | ------------------------------------------------------------------------ | |
2003 | ||
2004 | ||
2005 | Let's read file names into an array | |
2006 | ---------------------------Type This----------------------------------- | |
2007 | ||
2008 | nano parse_pcap_file_names.sh | |
2009 | ||
2010 | ---------------------------Paste This----------------------------------- | |
2011 | #!/bin/bash | |
2012 | # Reference: https://delightlylinux.wordpress.com/2017/04/08/put-filenames-in-bash-array/ | |
2013 | ||
2014 | #!/bin/bash | |
2015 | ||
2016 | declare -a arrPCAPs | |
2017 | for file in *.pcap | |
2018 | do | |
2019 | arrPCAPs=("${PCAPs[@]}" "$file") | |
2020 | echo ${arrPCAPs[@]} | |
2021 | done | |
2022 | ------------------------------------------------------------------------ | |
2023 | ||
2024 | ||
2025 | ||
2026 | ||
2027 | ||
2028 | ||
2029 | Ok, now let's run it | |
2030 | ---------------------------Type This----------------------------------- | |
2031 | chmod +x parse_pcap_file_names.sh | |
2032 | ./parse_pcap_file_names.sh | |
2033 | ------------------------------------------------------------------------ | |
2034 | ||
2035 | ||
2036 | ||
2037 | ||
2038 | ||
2039 | ||
2040 | ||
2041 | ||
2042 | ||
2043 | ||
2044 | ||
2045 | ||
2046 | ||
2047 | ||
2048 | ||
2049 | ################## | |
2050 | # Day 4 Homework # | |
2051 | ################## | |
2052 | ||
2053 | Task Option 1: Shell Scripting | |
2054 | ------------------------------------ | |
2055 | Watch and do all of the exercises in the video https://www.youtube.com/watch?v=hwrnmQumtPw | |
2056 | Create a word document that contains the screenshots of the tasks performed in this video | |
2057 | Name the word document 'YourFirstName-YourLastName-LinuxDay4-ShellScripting.docx' (ex: 'Joseph-McCray-LinuxDay3-ShellScripting.docx') | |
2058 | Email the document to me at joe-at-secureninja-dot-com before the start of class tomorrow | |
2059 | ||
2060 | ||
2061 | Task Option 2: Python3 | |
2062 | --------------------------------------- | |
2063 | Watch and do all of the exercises in the first 7 videos from https://www.youtube.com/playlist?list=PLypxmOPCOkHVzhKRcWzEkQXCnmHezGVeB | |
2064 | Create a word document that contains the screenshots of the tasks performed in these videos | |
2065 | Name the word document 'YourFirstName-YourLastName-LinuxDay4-Python3.docx' (ex: 'Joseph-McCray-LinuxDay3-Python3.docx.docx') | |
2066 | Email the document to me at joe-at-secureninja-dot-com before the start of class tomorrow | |
2067 | ||
2068 | ||
2069 | ||
2070 | ||
2071 | #################### | |
2072 | ############################## # Day 5: Challenge # ############################## | |
2073 | #################### | |
2074 | ||
2075 | ||
2076 | ||
2077 | ||
2078 | ||
2079 | ||
2080 | ||
2081 | ||
2082 | ||
2083 | ||
2084 | ||
2085 | ||
2086 | ||
2087 | ||
2088 | ||
2089 | ||
2090 | ||
2091 | ||
2092 | ||
2093 | ||
2094 | ||
2095 | ||
2096 | ||
2097 | ||
2098 | ||
2099 | ||
2100 | ||
2101 | ||
2102 | ||
2103 | ||
2104 | ||
2105 | ||
2106 | ||
2107 | ||
2108 | ||
2109 | ||
2110 | ||
2111 | ||
2112 | ||
2113 | ||
2114 | ||
2115 | ||
2116 | ################### | |
2117 | # Memory Analysis # | |
2118 | ################### | |
2119 | ---------------------------Type This----------------------------------- | |
2120 | cd ~/Desktop/ | |
2121 | ||
2122 | sudo apt-get install -y foremost tcpxtract | |
2123 | ||
2124 | wget https://infosecaddicts-files.s3.amazonaws.com/hn_forensics.vmem | |
2125 | ||
2126 | git clone https://github.com/volatilityfoundation/volatility.git | |
2127 | ||
2128 | cd volatility | |
2129 | sudo pip install distorm3 | |
2130 | sudo python setup.py install | |
2131 | python vol.py -h | |
2132 | python vol.py pslist -f ~/Desktop/hn_forensics.vmem | |
2133 | python vol.py connscan -f ~/Desktop/hn_forensics.vmem | |
2134 | mkdir dump/ | |
2135 | mkdir -p output/pdf/ | |
2136 | python vol.py -f ~/Desktop/hn_forensics.vmem memdmp -p 888 -D dump/ | |
2137 | python vol.py -f ~/Desktop/hn_forensics.vmem memdmp -p 1752 -D dump/ | |
2138 | ***Takes a few min*** | |
2139 | strings 1752.dmp | grep "^http://" | sort | uniq | |
2140 | strings 1752.dmp | grep "Ahttps://" | uniq -u | |
2141 | cd .. | |
2142 | foremost -i ~/Desktop/volatility/dump/1752.dmp -t pdf -o output/pdf/ | |
2143 | cd ~/Desktop/volatility/output/pdf/ | |
2144 | cat audit.txt | |
2145 | cd pdf | |
2146 | ls | |
2147 | grep -i javascript *.pdf | |
2148 | ||
2149 | ||
2150 | ||
2151 | cd ~/Desktop/volatility/output/pdf/ | |
2152 | wget http://didierstevens.com/files/software/pdf-parser_V0_6_4.zip | |
2153 | unzip pdf-parser_V0_6_4.zip | |
2154 | python pdf-parser.py -s javascript --raw pdf/00601560.pdf | |
2155 | python pdf-parser.py --object 11 00600328.pdf | |
2156 | python pdf-parser.py --object 1054 --raw --filter 00601560.pdf > malicious.js | |
2157 | ||
2158 | cat malicious.js | |
2159 | ----------------------------------------------------------------------- | |
2160 | ||
2161 | ||
2162 | ||
2163 | ||
2164 | *****Sorry - no time to cover javascript de-obfuscation today***** | |
2165 | ||
2166 | ||
2167 | ||
2168 | ||
2169 | ---------------------------Type This----------------------------------- | |
2170 | cd ~/Desktop/volatility | |
2171 | mkdir files2/ | |
2172 | python vol.py -f ~/Desktop/hn_forensics.vmem dumpfiles -D files2/ | |
2173 | python vol.py hivescan -f ~/Desktop/hn_forensics.vmem | |
2174 | python vol.py printkey -o 0xe1526748 -f ~/Desktop/hn_forensics.vmem Microsoft "Windows NT" CurrentVersion Winlogon | |
2175 | ----------------------------------------------------------------------- | |
2176 | ||
2177 | ||
2178 | ###################### | |
2179 | ----------- ############### # Intro to Reversing # ############### ----------- | |
2180 | ###################### | |
2181 | Lab walk-through documents are in the zip file along with the executables that need to be reversed: | |
2182 | https://infosecaddicts-files.s3.amazonaws.com/Lena151.zip | |
2183 | ||
2184 | ||
2185 | ||
2186 | ||
2187 | ||
2188 | ############################## | |
2189 | # Linux For InfoSec Homework # | |
2190 | ############################## | |
2191 | In order to receive your certificate of attendance you must complete the all of the quizzes on the http://linuxsurvival.com/linux-tutorial-introduction/ website. | |
2192 | ||
2193 | ||
2194 | Submit the results via email in an MS Word document with (naming convention example: YourFirstName-YourLastName-Linux-For-InfoSec-Homework.docx) | |
2195 | ||
2196 | ||
2197 | ||
2198 | ||
2199 | ############################## | |
2200 | # Linux For InfoSe Challenge # | |
2201 | ############################## | |
2202 | ||
2203 | In order to receive your certificate of proficiency you must complete all of the tasks covered in the Linux For InfoSec pastebin (http://pastebin.com/eduSfPy3). | |
2204 | ||
2205 | Submit the results via email in an MS Word document with (naming convention example: YourFirstName-YourLastName-Linux-For-InfoSec-Challenge.docx) | |
2206 | ||
2207 | ||
2208 | ||
2209 | ||
2210 | IMPORTANT NOTE: | |
2211 | Your homework/challenge must be submitted via email to both (joe-at-strategicsec-.-com and ivana-at-strategicsec-.-com) by midnight EST. | |
2212 | ||
2213 | ||
2214 | ######################################################################### | |
2215 | # What kind of Linux am I on and how can I find out? # | |
2216 | # Great reference: # | |
2217 | # https://blog.g0tmi1k.com/2011/08/basic-linux-privilege-escalation/ # | |
2218 | ######################################################################### | |
2219 | - What’s the distribution type? What version? | |
2220 | ------------------------------------------- | |
2221 | cat /etc/issue | |
2222 | cat /etc/*-release | |
2223 | cat /etc/lsb-release # Debian based | |
2224 | cat /etc/redhat-release # Redhat based | |
2225 | ||
2226 | ||
2227 | ||
2228 | - What’s the kernel version? Is it 64-bit? | |
2229 | ------------------------------------------- | |
2230 | cat /proc/version | |
2231 | uname -a | |
2232 | uname -mrs | |
2233 | rpm -q kernel | |
2234 | dmesg | grep Linux | |
2235 | ls /boot | grep vmlinuz- | |
2236 | ||
2237 | ||
2238 | ||
2239 | - What can be learnt from the environmental variables? | |
2240 | ---------------------------------------------------- | |
2241 | cat /etc/profile | |
2242 | cat /etc/bashrc | |
2243 | cat ~/.bash_profile | |
2244 | cat ~/.bashrc | |
2245 | cat ~/.bash_logout | |
2246 | env | |
2247 | set | |
2248 | ||
2249 | ||
2250 | - What services are running? Which service has which user privilege? | |
2251 | ------------------------------------------------------------------ | |
2252 | ps aux | |
2253 | ps -ef | |
2254 | top | |
2255 | cat /etc/services | |
2256 | ||
2257 | ||
2258 | - Which service(s) are been running by root? Of these services, which are vulnerable - it’s worth a double check! | |
2259 | --------------------------------------------------------------------------------------------------------------- | |
2260 | ps aux | grep root | |
2261 | ps -ef | grep root | |
2262 | ||
2263 | ||
2264 | ||
2265 | - What applications are installed? What version are they? Are they currently running? | |
2266 | ------------------------------------------------------------------------------------ | |
2267 | ls -alh /usr/bin/ | |
2268 | ls -alh /sbin/ | |
2269 | dpkg -l | |
2270 | rpm -qa | |
2271 | ls -alh /var/cache/apt/archivesO | |
2272 | ls -alh /var/cache/yum/ | |
2273 | ||
2274 | ||
2275 | - Any of the service(s) settings misconfigured? Are any (vulnerable) plugins attached? | |
2276 | ------------------------------------------------------------------------------------ | |
2277 | cat /etc/syslog.conf | |
2278 | cat /etc/chttp.conf | |
2279 | cat /etc/lighttpd.conf | |
2280 | cat /etc/cups/cupsd.conf | |
2281 | cat /etc/inetd.conf | |
2282 | cat /etc/apache2/apache2.conf | |
2283 | cat /etc/my.conf | |
2284 | cat /etc/httpd/conf/httpd.conf | |
2285 | cat /opt/lampp/etc/httpd.conf | |
2286 | ls -aRl /etc/ | awk '$1 ~ /^.*r.*/' | |
2287 | ||
2288 | ||
2289 | ||
2290 | - What jobs are scheduled? | |
2291 | ------------------------ | |
2292 | crontab -l | |
2293 | ls -alh /var/spool/cron | |
2294 | ls -al /etc/ | grep cron | |
2295 | ls -al /etc/cron* | |
2296 | cat /etc/cron* | |
2297 | cat /etc/at.allow | |
2298 | cat /etc/at.deny | |
2299 | cat /etc/cron.allow | |
2300 | cat /etc/cron.deny | |
2301 | cat /etc/crontab | |
2302 | cat /etc/anacrontab | |
2303 | cat /var/spool/cron/crontabs/root | |
2304 | ||
2305 | ||
2306 | - Any plain text usernames and/or passwords? | |
2307 | ------------------------------------------ | |
2308 | grep -i user [filename] | |
2309 | grep -i pass [filename] | |
2310 | grep -C 5 "password" [filename] | |
2311 | find . -name "*.php" -print0 | xargs -0 grep -i -n "var $password" # Search for Joomla passwords | |
2312 | ||
2313 | ||
2314 | - What NIC(s) does the system have? Is it connected to another network? | |
2315 | --------------------------------------------------------------------- | |
2316 | /sbin/ifconfig -a | |
2317 | cat /etc/network/interfaces | |
2318 | cat /etc/sysconfig/network | |
2319 | ||
2320 | ||
2321 | - What are the network configuration settings? What can you find out about this network? DHCP server? DNS server? Gateway? | |
2322 | ------------------------------------------------------------------------------------------------------------------------ | |
2323 | cat /etc/resolv.conf | |
2324 | cat /etc/sysconfig/network | |
2325 | cat /etc/networks | |
2326 | iptables -L | |
2327 | hostname | |
2328 | dnsdomainname | |
2329 | ||
2330 | - What other users & hosts are communicating with the system? | |
2331 | ----------------------------------------------------------- | |
2332 | lsof -i | |
2333 | lsof -i :80 | |
2334 | grep 80 /etc/services | |
2335 | netstat -antup | |
2336 | netstat -antpx | |
2337 | netstat -tulpn | |
2338 | chkconfig --list | |
2339 | chkconfig --list | grep 3:on | |
2340 | last | |
2341 | w | |
2342 | ||
2343 | ||
2344 | ||
2345 | - Whats cached? IP and/or MAC addresses | |
2346 | ------------------------------------- | |
2347 | arp -e | |
2348 | route | |
2349 | /sbin/route -nee | |
2350 | ||
2351 | ||
2352 | - Who are you? Who is logged in? Who has been logged in? Who else is there? Who can do what? | |
2353 | ------------------------------------------------------------------------------------------ | |
2354 | id | |
2355 | who | |
2356 | w | |
2357 | last | |
2358 | cat /etc/passwd | cut -d: -f1 # List of users | |
2359 | grep -v -E "^#" /etc/passwd | awk -F: '$3 == 0 { print $1}' # List of super users | |
2360 | awk -F: '($3 == "0") {print}' /etc/passwd # List of super users | |
2361 | cat /etc/sudoers | |
2362 | sudo -l | |
2363 | ||
2364 | ||
2365 | ||
2366 | - What sensitive files can be found? | |
2367 | ---------------------------------- | |
2368 | cat /etc/passwd | |
2369 | cat /etc/group | |
2370 | cat /etc/shadow | |
2371 | ls -alh /var/mail/ | |
2372 | ||
2373 | ||
2374 | ||
2375 | - Anything “interesting” in the home directorie(s)? If it’s possible to access | |
2376 | ---------------------------------------------------------------------------- | |
2377 | ls -ahlR /root/ | |
2378 | ls -ahlR /home/ | |
2379 | ||
2380 | ||
2381 | - Are there any passwords in; scripts, databases, configuration files or log files? Default paths and locations for passwords | |
2382 | --------------------------------------------------------------------------------------------------------------------------- | |
2383 | cat /var/apache2/config.inc | |
2384 | cat /var/lib/mysql/mysql/user.MYD | |
2385 | cat /root/anaconda-ks.cfg | |
2386 | ||
2387 | ||
2388 | - What has the user being doing? Is there any password in plain text? What have they been edting? | |
2389 | ----------------------------------------------------------------------------------------------- | |
2390 | cat ~/.bash_history | |
2391 | cat ~/.nano_history | |
2392 | cat ~/.atftp_history | |
2393 | cat ~/.mysql_history | |
2394 | cat ~/.php_history | |
2395 | ||
2396 | ||
2397 | ||
2398 | - What user information can be found? | |
2399 | ----------------------------------- | |
2400 | cat ~/.bashrc | |
2401 | cat ~/.profile | |
2402 | cat /var/mail/root | |
2403 | cat /var/spool/mail/root | |
2404 | ||
2405 | ||
2406 | - Can private-key information be found? | |
2407 | ------------------------------------- | |
2408 | cat ~/.ssh/authorized_keys | |
2409 | cat ~/.ssh/identity.pub | |
2410 | cat ~/.ssh/identity | |
2411 | cat ~/.ssh/id_rsa.pub | |
2412 | cat ~/.ssh/id_rsa | |
2413 | cat ~/.ssh/id_dsa.pub | |
2414 | cat ~/.ssh/id_dsa | |
2415 | cat /etc/ssh/ssh_config | |
2416 | cat /etc/ssh/sshd_config | |
2417 | cat /etc/ssh/ssh_host_dsa_key.pub | |
2418 | cat /etc/ssh/ssh_host_dsa_key | |
2419 | cat /etc/ssh/ssh_host_rsa_key.pub | |
2420 | cat /etc/ssh/ssh_host_rsa_key | |
2421 | cat /etc/ssh/ssh_host_key.pub | |
2422 | cat /etc/ssh/ssh_host_key | |
2423 | ||
2424 | ||
2425 | - Any settings/files (hidden) on website? Any settings file with database information? | |
2426 | ------------------------------------------------------------------------------------ | |
2427 | ls -alhR /var/www/ | |
2428 | ls -alhR /srv/www/htdocs/ | |
2429 | ls -alhR /usr/local/www/apache22/data/ | |
2430 | ls -alhR /opt/lampp/htdocs/ | |
2431 | ls -alhR /var/www/html/ | |
2432 | ||
2433 | ||
2434 | - Is there anything in the log file(s) (Could help with “Local File Includes”!) | |
2435 | ----------------------------------------------------------------------------- | |
2436 | cat /etc/httpd/logs/access_log | |
2437 | cat /etc/httpd/logs/access.log | |
2438 | cat /etc/httpd/logs/error_log | |
2439 | cat /etc/httpd/logs/error.log | |
2440 | cat /var/log/apache2/access_log | |
2441 | cat /var/log/apache2/access.log | |
2442 | cat /var/log/apache2/error_log | |
2443 | cat /var/log/apache2/error.log | |
2444 | cat /var/log/apache/access_log | |
2445 | cat /var/log/apache/access.log | |
2446 | cat /var/log/auth.log | |
2447 | cat /var/log/chttp.log | |
2448 | cat /var/log/cups/error_log | |
2449 | cat /var/log/dpkg.log | |
2450 | cat /var/log/faillog | |
2451 | cat /var/log/httpd/access_log | |
2452 | cat /var/log/httpd/access.log | |
2453 | cat /var/log/httpd/error_log | |
2454 | cat /var/log/httpd/error.log | |
2455 | cat /var/log/lastlog | |
2456 | cat /var/log/lighttpd/access.log | |
2457 | cat /var/log/lighttpd/error.log | |
2458 | cat /var/log/lighttpd/lighttpd.access.log | |
2459 | cat /var/log/lighttpd/lighttpd.error.log | |
2460 | cat /var/log/messages | |
2461 | cat /var/log/secure | |
2462 | cat /var/log/syslog | |
2463 | cat /var/log/wtmp | |
2464 | cat /var/log/xferlog | |
2465 | cat /var/log/yum.log | |
2466 | cat /var/run/utmp | |
2467 | cat /var/webmin/miniserv.log | |
2468 | cat /var/www/logs/access_log | |
2469 | cat /var/www/logs/access.log | |
2470 | ls -alh /var/lib/dhcp3/ | |
2471 | ls -alh /var/log/postgresql/ | |
2472 | ls -alh /var/log/proftpd/ | |
2473 | ls -alh /var/log/samba/ | |
2474 | ||
2475 | - Note: auth.log, boot, btmp, daemon.log, debug, dmesg, kern.log, mail.info, mail.log, mail.warn, messages, syslog, udev, wtmp | |
2476 | ||
2477 | ||
2478 | ||
2479 | ||
2480 | ||
2481 | ######################################################################################################################################## | |
2482 | ||
2483 | ||
2484 | ||
2485 | ||
2486 | ||
2487 | #################################### | |
2488 | # Day 2: Building a Perfect Server # | |
2489 | #################################### | |
2490 | ------------------------------------------- | |
2491 | Task 1: Log in to your respective Linux server | |
2492 | PMRF1 (Hugo/Ross) | |
2493 | 45.76.61.100 | |
2494 | pmrf aegisashore | |
2495 | ||
2496 | PMRF2 (steve/jeff) | |
2497 | 155.138.213.248 | |
2498 | pmrf aegisashore | |
2499 | ||
2500 | ||
2501 | PMRF3 (elaine) | |
2502 | 155.138.198.202 | |
2503 | pmrf aegisashore | |
2504 | ||
2505 | ||
2506 | ||
2507 | Task 2: Build the Perfect Server | |
2508 | https://www.howtoforge.com/tutorial/perfect-server-centos-7-apache-mysql-php-pureftpd-postfix-dovecot-and-ispconfig/ | |
2509 | ||
2510 | Important notes: | |
2511 | Steps to skip | |
2512 | skip all of step 1 | |
2513 | skip all of step 2 | |
2514 | skip all of step 3 | |
2515 | skip all of step 5 | |
2516 | ||
2517 | Important notes: | |
2518 | step 11 amavisd may not work. If it doesn't work just keep moving forward | |
2519 | --------------------------------------------- |