Assignment 8. Buffer overruns
Useful pointers
Laboratory: Exploiting a buffer overrun
As usual, keep a log in the file lab.txt of what you
do in the lab so that you can reproduce the results later. This should
not merely be a transcript of what you typed: it should be more like a
true lab notebook, in which you briefly note down what you did and
what happened.
For this laboratory, you will find and exploit a simple buffer
overrun in
a web server.
Consider the following patch to sthttpd. This patch applies
to sthttpd 2.26.4.
diff -pru sthttpd-2.26.4/src/thttpd.c sthttpd-2.26.4-new/src/thttpd.c
--- sthttpd-2.26.4/src/thttpd.c 2012-07-13 04:32:59.000000000 -0700
+++ sthttpd-2.26.4-new/src/thttpd.c 2012-11-18 22:11:39.275115033 -0800
@@ -1600,7 +1600,7 @@ handle_read( connecttab* c, struct timev
/* Read some more bytes. */
sz = read(
hc->conn_fd, &(hc->read_buf[hc->read_idx]),
- hc->read_size - hc->read_idx );
+ hc->read_size );
if ( sz == 0 )
{
httpd_send_err( hc, 400, httpd_err400title, "", httpd_err400form, "" );
- Build sthttpd with this patch applied,
using GCC's -fno-stack-protector option,
and run the modified
thttpd daemon
on port 8080 on your host. You may find the thttpd
man page useful.
- Verify that your web server works in the normal case.
- Make your web server crash by sending it a suitably-formatted request.
- Run your web server under GDB, and get a traceback immediately after
the crash.
- Briefly describe how you'd go about building a remote exploit for
the bug in the modified thttpd. Your exploit should allow you to run
arbitrary code on the web server, with the same privileges as the
web server itself.
- Use GCC's -S option to generate the assembly language
code for thttpd.c, both with and without
the -fno-stack-protector option. Call the resulting
files thttpd-fno-stack-protector.s
and thttpd.s. Use diff to compare the two
assembly-language files. Which code looks less efficient, and why?
Write a simple shell command that invokes diff and
determines which functions are called (in the sense of the
machine-language call instruction) by one version and not
the other, and use the command to see what functions these are.
- There's another way to catch errors like this, which is to enable
GCC's
-fmudflap option. Build the patched thttpd with
-fmudflap -fno-stack-protector, run it under GDB, send it
a suitably-formatted request, and see what the traceback looks
like. If you do this experiment on the SEASnet GNU/Linux servers,
compile it in 32-bit mode using the CS version of GCC, with the
command "gcc -m32 -fmudflap -Xlinker -rpath=$(dirname $(gcc -m32
-print-file-name=libmudflap.so)) -lmudflap", and use the
port number specified by your T.A. (which is probably not port
8080).
- Use GCC's -S option to generate the assembly language
code for thttpd.c, with the
-fmudflap -fno-stack-protector option. Call the resulting
file thttpd-fmudflap.s. Use diff to compare
it to thttpd.s. Which code looks less efficient, and why?
Homework: CERT review
Suppose you have built and deployed a networked application from
standard software components and are now worried that the application
might be vulnerable to outside attackers via the Internet.
Assume that each of the following CERT Vulnerability Notes describes a
component of your system. Rank the seriousness of each vulnerability,
so that the most urgent vulnerability is listed first. (By "urgent"
we mean "urgent that you stay up all night if necessary and fix this
right away in your deployed system".) Justify your rankings by evaluating
the plausibility of attack scenarios.
-
VU#273371 (2012-11-16)
Novell File Reporter contains multiple vulnerabilities
-
VU#985625 (2012-11-05)
Symantec Antivirus products fail to properly handle CAB files
-
VU#872545 (2012-10-23)
Adobe Shockwave 11.6.7.637 contains multiple exploitable vulnerabilities
-
VU#624051 (2012-03-27)
Microsoft Remote Desktop Protocol (RDP) insecurely deallocates memory
- VU#945216 (2001-10-24)
SSH CRC32 attack detection code contains remote integer overflow
Submit
Submit the following files.
- The files lab.txt and thttpd-fmudflap.s
as described in the lab.
- A file hw.txt containing your answer to the homework.
All files should be ASCII text files, with no
carriage returns, and with no more than 200 columns per line.
The shell
command
expand lab.txt hw.txt |
awk '/\r/ || 200 < length'
should output nothing.
© 2005, 2007, 2008, 2010–2012 Paul Eggert.
See copying rules.
$Id: assign8.html,v 1.21 2012/11/19 06:42:44 eggert Exp $