The Worm Works For You
Download
Report
Transcript The Worm Works For You
The Worm Works For You
Matt Weaver
CS591
Introduction
The Shockwave Rider
PARC
Town Crier
Vampire
Goal
Use a worm to measure bandwidth and
map a network.
Analyze classic worms.
Morris
Code Red
Determine the algorithm and architecture
of a “useful worm”
Morris Mistake
Listen on a port: failure leads to infection.
Machines were reinfected.
Morris
checkother()
{
int s, l8, l12, l16, optval;
struct sockaddr_in sin;
/* 0x57d0 */
/* 16 bytes */
optval = 1;
if ((random() % 7) == 3)
return;
/* 612 */
s = socket(AF_INET, SOCK_STREAM, 0);
if (s < 0)
return;
/* Make a socket to the localhost, using a link-time specific port */
bzero(&sin, sizeof(sin));
/* 16 */
sin.sin_family = AF_INET;
sin.sin_addr.s_addr = inet_addr(XS("127.0.0.1")); /* <other_fd+4> */
sin.sin_port = 0x00005b3d;
if (connect(s, &sin, sizeof(sin)) < 0) {
close(s);
} else {
l8 = MAGIC_2;
if (write(s, &l8, sizeof(l8)) != sizeof(l8)) {
close(s);
return;
}
l8 = 0;
if (xread(s, &l8, sizeof(l8), 5*60) != sizeof(l8)) {
close(s);
return;
}
if (l8 != MAGIC_1) {
close(s);
return;
}
l12 = random()/8;
if (write(s, &l12, sizeof(l12)) != sizeof(l12)) {
close(s);
return;
}
/* ??? */
/* Magic number??? */
Code Red II
Mountain Dew
Code Red utilized a clever distribution
scheme: not just the random IP trick.
Code Red II (Continued)
mtable[] = { 0xFFFFFFFF
// go anywhere
0xFFFFFF00
// stay in class A
0xFFFFFF00
// stay in class A
0xFFFFFF00
// stay in class A
0xFFFFFF00
// stay in class A
0xFFFF0000
// stay in class B
0xFFFF0000
// stay in class B
0xFFFF0000 }; // stay in class B
# start with a random number that will be our new IP address.
# I presume the random number generator is "random enough".
newip = random();
# zero the UPPER octets of the random IP, which means that the
# random number won't participate in the class A or class B
# address
mask = mtable[ random() & 0x7 ]; // locate a mask
newip &= mask;
// throw away rightmost bits
# flip the mask around to operate on LOWER octets
mask = ~mask;
// flip the mask around
myip = LOCAL_IP & mask;
// throw away leftmost bits
# newip contains the upper bits
# myip contains the lower bits
# join them:
newip |= myip;
if (newip starts with 127) try again // localhost
if (newip starts with 224) try again // multicast
if (newip matches LOCAL_IP) try again
Connect to "newip" and try to infect
A New Worm
Network
Target
Target
Target
Root
Target
Logic
Write a text file (C on Win
~ on Unix)
Talk to parent.
Find next machine.
Infect next.
Talk to parent.
Timed death.
Forced death (success).
Parent
Child
Next Target
Concerns
Running amok/re-infection.
Termination
The Root Machine
Compiles UDP payload information from
child instances.
Maps network.
Dynamically generate viral payload
(binary).
Provide control values.
Conclusion
Master’s Project: get it working safely.
Sources
Aleph One. “Smashing the Stack for Fun and Profit”.
Phrack 49.
CERT. http://www.cert.org/
Eren, Sinan. “Smashing the Kernel Stack for Fun and
Profit.” Phrack 60.
Erickson, Jon. Hacking: The Art of Exploitation. No
Startch Press, 2003.
Morris, Robert. Morris Worm Source Code.
http://www.foo.be/docs-free/morris-worm/worm/
Wikipedia, “Computer Worm”.
http://en.wikipedia.org/wiki/Computer_worm
Wiedl, Steve. Unix Wiz. http://www.unixwiz.net/