代做Lab 2 - Malware: Viruses, Worms, and UTMs代写Java编程

CSE 3140

Lab 2 - Malware: Viruses, Worms, and UTMs

Created: Fall 2022; Updated: Spring 2024

Monday sections submit by 10/6

Wednesday sections submit by 10/8

See instructions for all labs in Lab 0.

Hardware Requirements: For questions 3-5, we use the ACL laptops and Rubber Ducky devices; at the end of your lab, please pack the devices up and return them to your TA.

Background Info

Malicious software, aka Malware, is the most serious threat for most users and organizations. Malware is any software that is designed to benefit its “owner”, by running without authorization on a victim’s machine (a phone, computer, server, or other device). Malware can be distributed for different goals, such as Denial-of-Service attacks, exposure of  sensitive information, unauthorized use of computing resources (e.g., for mining bitcoins), and many other nefarious goals; the functionality of the  malware designed to meet these  nefarious goals  is called the payload.

Most malware also has functionality for distributing the malware, which we refer to as infection or propagation.

Malware is often categorized by its method of infection/propagation; the categories include:

•   Virus: malware which searches the storage to identify other programs, and then changes  them so they will contain a copy of the virus and execute it, in addition to their “ real” function. Viruses often  infect a specific type of  program, such as  binary  executables,  macro files (e.g., of Office), or programs written in a specific language. In this lab you’ll  write a very simple virus that will infect Python source-code programs.

•   Worm: malware that searches a network to identify vulnerable machines, and then uses the vulnerability to copy itself to these machines (and run also from there).

•    USB-Transmitted  Malware  (UTM):  malware  which  is  injected  by  connecting  a  rogue device to the  USB  interface  of  computer.  The  rogue  device  can  appear  to  be  a  USB memory stick, a USB cable, or a USB charger. After being injected by the USB interface, the malware may further propagate as a worm and/or virus. In fact, many USB memory sticks on the market may be modified to become such rogue devices, using software on a computer to which the USB is connected. In this way, USB-port  malware  can  also propagate on other USB sticks.

•   Trojan (horse): malware, which is distributed disguised as a desirable application, relying on users to innocently install them. In a sense, this is the simplest type of malware, as it depends on the user installing it. However, this simple strategy is surprisingly effective. In fact, many smartphone apps, as well as different programs and utilities for computers, are Trojans!

You can find more information about different kinds of malware online, e.g., in thislink. In this lab, we will learn about malware by writing simple versions of a virus, a worm, and a UTM.

An Important Note About Passwords in CSE 3140

The passwords assigned to fictitious users are pulled randomly from areal-life source of leaked passwords that cybersecurity specialists often come into contact with professionally. Unfortunately, many of these passwords contain extremely vulgar and offensive language, and we do not condone their use. We are happy to substitute passwords from artificial sources at your request.

Submitting Code for this Lab

This lab will require you to submit a zip file containing the scripts you created for each of the programming questions. Your code will be graded on correctness, efficiency, structure, and readability. You should save all your .py scripts for questions 1 and 2 within Q1 and Q2 subdirectories within the Solutions directory within the Lab 2 directory. After completing this assignment, you can then:

•    Archive the Solution directory by running the following command in your Lab 2 directory:

o zip -r lab2_sol.zip Solutions

•    SCP (secure copy) the zip file to your local machine. On your local machine (after logging out of your VM) you can run the following command (you need to replace <vm_ip> and <local_path>  with your own VM IP and destination file path on your local machine, respectively):

o scp cse@<vm_ip>:/home/cse/Lab2/lab2_sol.zip <local_path>

•    Upload the lab2_sol.zip file you saved to your machine on HuskyCT

Question 1 (35 points): My First (?) Virus

In this question, you will be writing a simple virus. A virus is a program that can “attach itself” to other programs, so that when the other program is run, the virus is also run.

Your simple virus will be a Python script. that attaches itself to (other) source-code Python scripts (.py files) in the same folder. Typically, this is done by searching for other .py files on the same folder, opening each such file, and attaching the virus code to the script. (if it does not already contain the virus code). As a note, practical viruses often attach to machine-code programs, and many attach to different macro/script. files (e.g. MS Office files).

Note: your virus should not re-attach itself to a program which already contains the virus!

This question has three parts. During the first two parts we’ll learn how to implement an aspect of our virus functionality. Then, in part 3, we’ll be ready to construct the entire virus codebase.

Part 1 (10 points):

We will first write a Python script. named Q1A.py, that reads the files in the current (working) directory, and outputs a file, named Q1A.out, containing the names of all .py files, each on a   separate line.

Your program should work on both Linux and Windows; you may want to read about, and possibly use, the Python's os module. On your VM, place the completed Q1A.py program in ~/Lab2/Solutions/Q1 directory.

Part 2 (10 points):

Next, write another script. named Q1B.py, that receives as a parameter (on the command line) the name of a .py file in the current directory, e.g., x.py.

Q1B.py should check two things:

1)   Is the given Python file a script. (i.e., is it intended to be run directly)?

a.   For our purposes, a Python file is considered a script. if it contains an if    name   == “  main  ” : statement

2)   Is it uninfected (i.e., does it not yet contain the virus code)?

If both checks are true, then the Q1B script. should re-write the input script. (e.g., x.py), so that the new “x.py” will contain a Python script. with the same functionality as of the original x.py, except that the new script. will also perform. the following simple spyware payload functionality:

Whenever the new “x.py” script. is run, it appends, to the end of a file called Q1B.out, a line containing the entire command line used to invoke it, i.e., the file/script. name (“x.py”) followed by the arguments (parameters) with which the script. (“x.py”) was run, if any. If Q1B.out does not exist when the new “x.py” is run, then “x.py” should create Q1B.out.

Part 3 (15 points):

Finally, we are ready to write the full virus. You should create another Python script, Q1C.py, to house the full virus code. Your Q1C.py must infect every .py script. in the current directory. By “infection”, we mean alter the original .py script. (e.g., x.py) so when the infected “x.py” would be run, it would retain its original functionality, but also have two additional functionalities:

1)   The first additional functionality, the payload, is the spyware functionality we

implemented in Q1B. Whenever the modified script. “x.py” is run, it will append the entire command line used to invoke it to the end of a file called Q1C.out.

2)   The second additional functionality is the infection functionality. Namely, the modified script. will also have the same functionality as Q1C.py, modifying all .py scripts in the directory in which it runs, by adding the same spyware functionality and infection functionality. Q1C (and the modified/infected scripts) should not modify scripts which have already been “ infected” by our virus.

Helpful tip : In Python, open(    file      , ‘r’) will allow you to read the file contents of the currently running module. This will be useful for injecting the virus code into the victim script.

Save all three scripts (Q1A.py, Q1B.py and Q1C.py) in the Lab2/Solutions directory, and include them as part of your solution in your lab report that will be uploaded to HuskyCT.

Note: your programs should be highly readable with good documentation.

Submission Requirements

No autograder submission required.

Show your running code to the TA for review and approval! Upload all solution code alongside lab report in a zip file.

In your lab report:  Briefly explain  how your  Q1C works.  Be sure to describe  how you  avoid reinfecting scripts that are already infected and how limit your code injection to only include virus code.

If you cannot get in-person TA approval:  provide a screen  recording showing its operation, including testing all relevant aspects.

Question 2 (35 points): My First (?) Worm

In this question, you will be writing a simple worm, Q2worm.py. A worm is malware that searches for machines that can be accessed over a network connection and has a specific vulnerability. Once such machine is found, the worm exploits the vulnerability to copy itself to the vulnerable machine, where it executes its payload – and deploys its infection functionality to infect other machines. (Of course, it may also propagate as a virus as well.)

Worm Behavior. Overview

Your simple worm will be a  Python program, that uses the SSH and Telnet protocols to find vulnerable  machines and infect them (some  machines  may support SSH, some Telnet, some both). Specifically, your worm will look for machines which have open SSH/Telnet ports and use a user/password pair from the list of “exposed” username-password pairs which you are given, in the file Q2pwd (in the Lab2 directory). Search for machines in the subnet 10.13.4.0/24, i.e., IP addresses in the form. 10.13.4.x where x is between 0 and 255.

Once your worm finds such a machine (and vulnerable account), you should copy the value in the file Q2secret from the home directory of the account, to your VM, in file Q2secrets in directory Lab2/Solutions. If you find several such machines, accounts, and Q2secret files, put all of the “secrets” on separate lines in your Q2secrets file. You should also copy Q2worm.py to

the home directory of the vulnerable VM, and to the Lab2/Solutions directory of your VM. There’s a lot to this question, so we’ll break it down into several incremental parts.

Some Python modules that will be helpful:

•   socket– for checking open ports

•   paramiko– for establishing SSH connections

•   telnetlib– for establishing Telnet sessions

Part 1: Find vulnerable machines (10 points)

Write a function, find_vulnerable_machines, that searches for machines in the

10.13.4.0/24 subnet and outputs two files, open_ssh.log and open_telnet.log. These files    should contain a list of IPs that correspond to machines that have open ssh and open telnet ports, respectively.

This function will probably take 10 - 20 minutes to run in its entirety over the whole list of subnet IPs, but you can test your port-checking logic on two known IPs before having your script. loop over all the IPs in the subnet. For testing SSH, your VM IP has an open SSH port. For testing telnet, 10.13.4.4 has an open telnet port.

Part 2: Find vulnerable accounts (10 points)

Write a function, find_vulnerable_accounts, that searches over of the IPs within the log    files from Part 1 and finds the user/password combinations from the leaked password database Q2pwd that can be used to successfully log in to the vulnerable machines via either SSH or telnet. Your function should write the exfiltrated SSH/telnet credentials to ssh_accounts.log and telnet_accounts.log, respectively. These files should a line per found credential in the format of IP,user,password (e.g., 10.13.4.4,cse,cse3140).

This function will probably take 10 - 20 minutes to run in its entirety over the whole list of vulnerable IPs, but you can test your credential-checking logic on two known IPs before having your script. loop over all the IPs in the lists. For testing SSH logins, you know the username and  password for you own VM. For testing telnet logins, 10.13.4.4 has a cse user with the coursedefault password of cse3140.

Your script. should find 3 vulnerable accounts (NOT including the cse user on 10.13.4.4) in total. It’s possible that you may have all three vulnerable accounts via a single protocol.

Part 3: Extracting Secret and Infecting with Worm ( 15 points)

Write a function, extract_and_infect, that performs the following two actions for each victim (i.e., vulnerable account) found in Part 2:

•   Copies the content of the file Q2secret that is held in the victim’s home directory to a  file named extracted_secrets.log VM. Your extracted_secrets.csv file end up with one line per victim with the format of IP,user,secret on each line (e.g., an example csv line would look like: 10.13.4.4,cse,test_secret).

•   Copies your Q2worm.py malware to the home directory of the victim.

This function should not take long (< 1 min) to run since you will only be working over 3 IP addresses. You can tell if your code is functioning correctly by logging on to each victim’s   machine (via the command line with their exfiltrated credentials) and checking their file contents compared to the files in your VM’s Lab2/Q2 directory.

Some helpful hints for transferring your Q2worm.py file to the victim’s machine:

•    For SSH connections, utilize SFTP to upload your worm (paramiko has SFTP APIs).

•    For telnet connections, you canutilize netcat.

Note : even if your exfiltrated credentials do not use one of the SSH/telnet, your code should include extraction/infection mechanisms for both protocols, as you have servers for testing both SSH and telnet connections.

Putting It All Together

We’ve now completed all the pieces needed to implement our attack. Simply executing each of the above three functions sequentially will yield our worm!

Some Fun History

Similar attacks (and worms) to yours have been found in the wild; often, the worms identify vulnerable machines which were left with default passwords, e.g., home routers and IoT devices. Note that a “ real worm” should follow the “ break-in” step which your worm is doing, by running malware from the victim machine, often running the worm itself, to make the infection more effective and robust to discovery of the “first” machine where the worm began attacking. Worms need to prevent multiple infections of the same machine; lack of attention to this detail can cause excessive overhead – leading to load on the network and discovery of the worm, as happened in the (in)famous and fascinating case of the Morris worm.

Submission Requirements

No autograder submission required.

Show your running code to the TA for review and approval!

Upload all solution code/files alongside lab report in a zip file.

In your lab report: Briefly explain how your worm code: decides whether a machine is vulnerable, decides whether victim credentials are valid on a  machine, extracts files via SSH/telnet, and infects the victim machine via SSH/telnet.

If you cannot get in-person TA approval:  provide a screen  recording showing its operation, including testing all relevant aspects.

USB-Transmitted Malware (UTM)

In the following few questions, you will be writing a simple UTM. If you google it or learned a bit of Complexity Theory, you may think of writing a Universal Turing Machine, but no; we are talking about a very different type of UTM – a USB-Transmitted Malware.

For this task, we will use a Rubber Ducky, a USB device that emulates a keyboard when inserting into a machine. See below the background information on the Rubber Ducky, which you will need to write the scripts for all these questions.

LEGAL WARNING: You may only insert the Rubby Ducky devices into the

dedicated laptops provided by our lab. Inserting the Rubby Ducky devices into any other machines will result in a zero on this lab project (that cannot be dropped) and possible legal consequences.

Background : Rubber Ducky

A device we’ll be using in the rest of this lab is the Hak5 USB Rubber Ducky. The USB Rubber Ducky is a kit that is used for system administration and penetration testing. It is a USB device that looks like a normal flash drive. The ducky registers itself as a USB keyboard once plugged into a computer. It then starts firing keystrokes to execute some commands on the targeted machine. See how to program the Rubber Duckhere; there are also instructions elsewhere, e.g., the following may be helpful:https://blog.hartleybrody.com/Rubber Ducky-guide/.

The goal in this and the following question is to enact changes on your laptop (which will be the victim). Before starting, I encourage you to make sure your laptop is connected to the cse3140   network through the wired switch or the VPN.

We will be creating different inject.bin files which will serve as instructions to the Ducky dongle. The keystrokes are programed using a scripting language called Ducky Script. The script. can be written in any text editor, such as notepad, Vim, or  Nano. When the script. is  ready, a Duck encoder tool is used to convert these Ducky script. lines into an inject.bin file that will be ready to be launched on the targeted machine. The inject.bin file is stored on the microSD and the USB striker dongle is used to execute the commands on the targeted machine.

To aid you in your development on Q5, and, to allow you to do some of the work remotely (without the physical Ducky), you can opt to use a Ducky Emulator. You can use the emulator developed by UConn students (in Python, fromhere) in place of a physical Rubber Ducky.

Note: the USB Rubber Ducky does not receive interaction back from the computer. So, you  need  to  carefully  note  which  keystroke  combination  and  delays  will  successfully accomplish the required task.  This will require some trial and error on your part.

In the following questions, if using a physical Rubber Ducky, you will do the following process:

Step 0: Verify that the Chrome browser is installed on your laptop. If not, you may need to do this part of the project from a personal laptop/computer (with Chrome).

Step 1: Open Notepad (or any text editor you like) and enter your Ducky script. commands. Save the plain text (and submit it as part of your report). Again, see how to program the Rubber Duckhere.

Step 2 : Compile the Ducky Script. payload into the file inject.bin. There are two options for this:

1)   Using the Javascript. Ducky Encoder “jsencoder.html”, which is a single HTML file which you can open and run in a browser locally, and which will encode Ducky script. into inject.bin files. If using the (disconnected) lab laptop, you can find jsencoder.html in your Lab2 directory, and can download it from there into the laptop.

2)   Using Hak5’s (online) Payload Studio:https://payloadstudio.hak5.org/community/ .

Step 3: Put the MicroSD card in the MicroSD-to-USB adapter, connect it to the laptop, and copy the inject.bin to the MicroSD.

Step 4: Move the MicroSD to the Rubber Ducky, connect it to the lab laptop, and see if it does

the intended action. If not, adjust your script. and repeat till it runs correctly! Step 5: Show your work to your TA (attack and scripts).

Question 3 (10 points): A Step Toward My First (?) USB-Transmitted Malware

Write a simple Rubber Ducky script. that opens Notepad, writes a Windows script. (batch) file that echoes your name(s), saves the file and runs it (to echo your names). If you are not familiar with Windows scripts, learn a bit about this simple technology first, for example, see the

GeekforGeeks `Basics of Batch Scripting’ article.

Submission Requirements

Show your running Rubber Ducky attack (and script) to the TA for review and approval! No autograder submission required.

Upload your Ducky Script. code alongside lab report in a zip file. No lab report submission requirements.

Note: this UTM requires use of the physical Rubber Ducky, and therefore, cannot propagate further (as is) to other devices; of course, the malware we copy could be a virus/worm, but cannot propagate further using USB. However, it is actually possible to re-program many regular USB memory sticks to have the Ducky functionality, allowing the creation of an infecting UTM. But doing this is quite challenging and surely beyond this lab.

Question 4 ( 10 points) : Writing a Python Script

This will be the same as question 3, but this time your Rubber Ducky script. should write, save, and run a Python “ hello, world!” script.

Submission Requirements

Show your running Rubber Ducky attack (and script) to the TA for review and approval!

No autograder submission required.

No lab report submission requirements.

Upload your Ducky Script. code alongside lab report in a zip file.

Question 5 ( 10 points) : Writing Your Virus

This will be the same as question 4, but this time your Python script. that is to be uploaded, saved, and run will be the simple Python virus from question 1 (Q1C.py).

Helpful tips:

•    In the past, some students have found it helpful to run their Q1C.py code through acode minifierin order to reduce the lines of source code.

•   Since there’s a lot of code to write with the physical Rubber Ducky devices in this question, previous students have often used the emulator for this part to save time.

Submission Requirements

Show your running Rubber Ducky attack (and script) to the TA for review and approval! You may substitute the Ducky emulator in place of the physical Rubby Ducky device for this

question.

No autograder submission required.

No lab report submission requirements.

Upload your Ducky Script. code alongside lab report in a zip file.

If you cannot get in-person TA approval:  provide a screen  recording showing its operation, including testing all relevant aspects.


 


热门主题

课程名

mktg2509 csci 2600 38170 lng302 csse3010 phas3226 77938 arch1162 engn4536/engn6536 acx5903 comp151101 phl245 cse12 comp9312 stat3016/6016 phas0038 comp2140 6qqmb312 xjco3011 rest0005 ematm0051 5qqmn219 lubs5062m eee8155 cege0100 eap033 artd1109 mat246 etc3430 ecmm462 mis102 inft6800 ddes9903 comp6521 comp9517 comp3331/9331 comp4337 comp6008 comp9414 bu.231.790.81 man00150m csb352h math1041 eengm4100 isys1002 08 6057cem mktg3504 mthm036 mtrx1701 mth3241 eeee3086 cmp-7038b cmp-7000a ints4010 econ2151 infs5710 fins5516 fin3309 fins5510 gsoe9340 math2007 math2036 soee5010 mark3088 infs3605 elec9714 comp2271 ma214 comp2211 infs3604 600426 sit254 acct3091 bbt405 msin0116 com107/com113 mark5826 sit120 comp9021 eco2101 eeen40700 cs253 ece3114 ecmm447 chns3000 math377 itd102 comp9444 comp(2041|9044) econ0060 econ7230 mgt001371 ecs-323 cs6250 mgdi60012 mdia2012 comm221001 comm5000 ma1008 engl642 econ241 com333 math367 mis201 nbs-7041x meek16104 econ2003 comm1190 mbas902 comp-1027 dpst1091 comp7315 eppd1033 m06 ee3025 msci231 bb113/bbs1063 fc709 comp3425 comp9417 econ42915 cb9101 math1102e chme0017 fc307 mkt60104 5522usst litr1-uc6201.200 ee1102 cosc2803 math39512 omp9727 int2067/int5051 bsb151 mgt253 fc021 babs2202 mis2002s phya21 18-213 cege0012 mdia1002 math38032 mech5125 07 cisc102 mgx3110 cs240 11175 fin3020s eco3420 ictten622 comp9727 cpt111 de114102d mgm320h5s bafi1019 math21112 efim20036 mn-3503 fins5568 110.807 bcpm000028 info6030 bma0092 bcpm0054 math20212 ce335 cs365 cenv6141 ftec5580 math2010 ec3450 comm1170 ecmt1010 csci-ua.0480-003 econ12-200 ib3960 ectb60h3f cs247—assignment tk3163 ics3u ib3j80 comp20008 comp9334 eppd1063 acct2343 cct109 isys1055/3412 math350-real math2014 eec180 stat141b econ2101 msinm014/msing014/msing014b fit2004 comp643 bu1002 cm2030
联系我们
EMail: 99515681@qq.com
QQ: 99515681
留学生作业帮-留学生的知心伴侣!
工作时间:08:00-21:00
python代写
微信客服:codinghelp
站长地图