From edbb3f91bdf80b764900ab204b5f004a64d7ec3e Mon Sep 17 00:00:00 2001 From: VBurduja Date: Tue, 20 Jul 2021 01:56:57 +0300 Subject: [PATCH 1/6] remove leading index from session name --- .../activities/00-tutorial-snippets/canary.gdb | 0 .../activities/00-tutorial-snippets/ssp.c | 0 .../activities/01-challenge-mycanary/mycanary | Bin .../activities/02-challenge-bulletproof/bulletproof | Bin .../03-challenge-format-strings/format1/Makefile | 0 .../03-challenge-format-strings/format1/format1 | Bin .../03-challenge-format-strings/format1/format1.c | 0 .../03-challenge-format-strings/format2/Makefile | 0 .../03-challenge-format-strings/format2/format2 | Bin .../03-challenge-format-strings/format2/format2.c | 0 .../03-challenge-format-strings/format3/Makefile | 0 .../03-challenge-format-strings/format3/format3 | Bin .../03-challenge-format-strings/format3/format3.c | 0 .../03-challenge-format-strings/format4/Makefile | 0 .../03-challenge-format-strings/format4/format4 | Bin .../03-challenge-format-strings/format4/format4.c | 0 16 files changed, 0 insertions(+), 0 deletions(-) rename sessions/{11-information-leaks => information-leaks}/activities/00-tutorial-snippets/canary.gdb (100%) rename sessions/{11-information-leaks => information-leaks}/activities/00-tutorial-snippets/ssp.c (100%) rename sessions/{11-information-leaks => information-leaks}/activities/01-challenge-mycanary/mycanary (100%) rename sessions/{11-information-leaks => information-leaks}/activities/02-challenge-bulletproof/bulletproof (100%) rename sessions/{11-information-leaks => information-leaks}/activities/03-challenge-format-strings/format1/Makefile (100%) rename sessions/{11-information-leaks => information-leaks}/activities/03-challenge-format-strings/format1/format1 (100%) rename sessions/{11-information-leaks => information-leaks}/activities/03-challenge-format-strings/format1/format1.c (100%) rename sessions/{11-information-leaks => information-leaks}/activities/03-challenge-format-strings/format2/Makefile (100%) rename sessions/{11-information-leaks => information-leaks}/activities/03-challenge-format-strings/format2/format2 (100%) rename sessions/{11-information-leaks => information-leaks}/activities/03-challenge-format-strings/format2/format2.c (100%) rename sessions/{11-information-leaks => information-leaks}/activities/03-challenge-format-strings/format3/Makefile (100%) rename sessions/{11-information-leaks => information-leaks}/activities/03-challenge-format-strings/format3/format3 (100%) rename sessions/{11-information-leaks => information-leaks}/activities/03-challenge-format-strings/format3/format3.c (100%) rename sessions/{11-information-leaks => information-leaks}/activities/03-challenge-format-strings/format4/Makefile (100%) rename sessions/{11-information-leaks => information-leaks}/activities/03-challenge-format-strings/format4/format4 (100%) rename sessions/{11-information-leaks => information-leaks}/activities/03-challenge-format-strings/format4/format4.c (100%) diff --git a/sessions/11-information-leaks/activities/00-tutorial-snippets/canary.gdb b/sessions/information-leaks/activities/00-tutorial-snippets/canary.gdb similarity index 100% rename from sessions/11-information-leaks/activities/00-tutorial-snippets/canary.gdb rename to sessions/information-leaks/activities/00-tutorial-snippets/canary.gdb diff --git a/sessions/11-information-leaks/activities/00-tutorial-snippets/ssp.c b/sessions/information-leaks/activities/00-tutorial-snippets/ssp.c similarity index 100% rename from sessions/11-information-leaks/activities/00-tutorial-snippets/ssp.c rename to sessions/information-leaks/activities/00-tutorial-snippets/ssp.c diff --git a/sessions/11-information-leaks/activities/01-challenge-mycanary/mycanary b/sessions/information-leaks/activities/01-challenge-mycanary/mycanary similarity index 100% rename from sessions/11-information-leaks/activities/01-challenge-mycanary/mycanary rename to sessions/information-leaks/activities/01-challenge-mycanary/mycanary diff --git a/sessions/11-information-leaks/activities/02-challenge-bulletproof/bulletproof b/sessions/information-leaks/activities/02-challenge-bulletproof/bulletproof similarity index 100% rename from sessions/11-information-leaks/activities/02-challenge-bulletproof/bulletproof rename to sessions/information-leaks/activities/02-challenge-bulletproof/bulletproof diff --git a/sessions/11-information-leaks/activities/03-challenge-format-strings/format1/Makefile b/sessions/information-leaks/activities/03-challenge-format-strings/format1/Makefile similarity index 100% rename from sessions/11-information-leaks/activities/03-challenge-format-strings/format1/Makefile rename to sessions/information-leaks/activities/03-challenge-format-strings/format1/Makefile diff --git a/sessions/11-information-leaks/activities/03-challenge-format-strings/format1/format1 b/sessions/information-leaks/activities/03-challenge-format-strings/format1/format1 similarity index 100% rename from sessions/11-information-leaks/activities/03-challenge-format-strings/format1/format1 rename to sessions/information-leaks/activities/03-challenge-format-strings/format1/format1 diff --git a/sessions/11-information-leaks/activities/03-challenge-format-strings/format1/format1.c b/sessions/information-leaks/activities/03-challenge-format-strings/format1/format1.c similarity index 100% rename from sessions/11-information-leaks/activities/03-challenge-format-strings/format1/format1.c rename to sessions/information-leaks/activities/03-challenge-format-strings/format1/format1.c diff --git a/sessions/11-information-leaks/activities/03-challenge-format-strings/format2/Makefile b/sessions/information-leaks/activities/03-challenge-format-strings/format2/Makefile similarity index 100% rename from sessions/11-information-leaks/activities/03-challenge-format-strings/format2/Makefile rename to sessions/information-leaks/activities/03-challenge-format-strings/format2/Makefile diff --git a/sessions/11-information-leaks/activities/03-challenge-format-strings/format2/format2 b/sessions/information-leaks/activities/03-challenge-format-strings/format2/format2 similarity index 100% rename from sessions/11-information-leaks/activities/03-challenge-format-strings/format2/format2 rename to sessions/information-leaks/activities/03-challenge-format-strings/format2/format2 diff --git a/sessions/11-information-leaks/activities/03-challenge-format-strings/format2/format2.c b/sessions/information-leaks/activities/03-challenge-format-strings/format2/format2.c similarity index 100% rename from sessions/11-information-leaks/activities/03-challenge-format-strings/format2/format2.c rename to sessions/information-leaks/activities/03-challenge-format-strings/format2/format2.c diff --git a/sessions/11-information-leaks/activities/03-challenge-format-strings/format3/Makefile b/sessions/information-leaks/activities/03-challenge-format-strings/format3/Makefile similarity index 100% rename from sessions/11-information-leaks/activities/03-challenge-format-strings/format3/Makefile rename to sessions/information-leaks/activities/03-challenge-format-strings/format3/Makefile diff --git a/sessions/11-information-leaks/activities/03-challenge-format-strings/format3/format3 b/sessions/information-leaks/activities/03-challenge-format-strings/format3/format3 similarity index 100% rename from sessions/11-information-leaks/activities/03-challenge-format-strings/format3/format3 rename to sessions/information-leaks/activities/03-challenge-format-strings/format3/format3 diff --git a/sessions/11-information-leaks/activities/03-challenge-format-strings/format3/format3.c b/sessions/information-leaks/activities/03-challenge-format-strings/format3/format3.c similarity index 100% rename from sessions/11-information-leaks/activities/03-challenge-format-strings/format3/format3.c rename to sessions/information-leaks/activities/03-challenge-format-strings/format3/format3.c diff --git a/sessions/11-information-leaks/activities/03-challenge-format-strings/format4/Makefile b/sessions/information-leaks/activities/03-challenge-format-strings/format4/Makefile similarity index 100% rename from sessions/11-information-leaks/activities/03-challenge-format-strings/format4/Makefile rename to sessions/information-leaks/activities/03-challenge-format-strings/format4/Makefile diff --git a/sessions/11-information-leaks/activities/03-challenge-format-strings/format4/format4 b/sessions/information-leaks/activities/03-challenge-format-strings/format4/format4 similarity index 100% rename from sessions/11-information-leaks/activities/03-challenge-format-strings/format4/format4 rename to sessions/information-leaks/activities/03-challenge-format-strings/format4/format4 diff --git a/sessions/11-information-leaks/activities/03-challenge-format-strings/format4/format4.c b/sessions/information-leaks/activities/03-challenge-format-strings/format4/format4.c similarity index 100% rename from sessions/11-information-leaks/activities/03-challenge-format-strings/format4/format4.c rename to sessions/information-leaks/activities/03-challenge-format-strings/format4/format4.c From b601c5fb91372fa035f34e6bbc0bbf266a34c84d Mon Sep 17 00:00:00 2001 From: VBurduja Date: Tue, 20 Jul 2021 03:15:50 +0300 Subject: [PATCH 2/6] add assets --- sessions/information-leaks/assets/image1.png | Bin 0 -> 43462 bytes sessions/information-leaks/assets/image2.jpg | Bin 0 -> 11587 bytes sessions/information-leaks/assets/image3.png | Bin 0 -> 30825 bytes sessions/information-leaks/assets/image4.png | Bin 0 -> 27141 bytes 4 files changed, 0 insertions(+), 0 deletions(-) create mode 100755 sessions/information-leaks/assets/image1.png create mode 100755 sessions/information-leaks/assets/image2.jpg create mode 100755 sessions/information-leaks/assets/image3.png create mode 100755 sessions/information-leaks/assets/image4.png diff --git a/sessions/information-leaks/assets/image1.png b/sessions/information-leaks/assets/image1.png new file mode 100755 index 0000000000000000000000000000000000000000..2129aca57ee0f70d795aec1c6e468f6516a46048 GIT binary patch literal 43462 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 R_*7~ZvzLVlE-&Hz{{u9{AO!#b literal 0 HcmV?d00001 diff --git a/sessions/information-leaks/assets/image3.png b/sessions/information-leaks/assets/image3.png new file mode 100755 index 0000000000000000000000000000000000000000..0d573cb25d041b18514974bc1cfd7f92579049fa GIT binary patch literal 30825 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 literal 0 HcmV?d00001 diff --git a/sessions/information-leaks/assets/image4.png b/sessions/information-leaks/assets/image4.png new file mode 100755 index 0000000000000000000000000000000000000000..3cf757e8aa1f298e8357904ced632572f5120d72 GIT binary patch literal 27141 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 Date: Tue, 20 Jul 2021 03:19:51 +0300 Subject: [PATCH 3/6] Create README.md --- sessions/information-leaks/README.md | 477 +++++++++++++++++++++++++++ 1 file changed, 477 insertions(+) create mode 100644 sessions/information-leaks/README.md diff --git a/sessions/information-leaks/README.md b/sessions/information-leaks/README.md new file mode 100644 index 0000000..6fc7151 --- /dev/null +++ b/sessions/information-leaks/README.md @@ -0,0 +1,477 @@ +# Information Leaks + +
+ +
+ +## Table of Contents + +## Tutorials + +### Stack Protection (Canaries) + +The name comes from canaries (birds) that were used by mining workers when entering mines and were affected by any deadly gases such as methane before humans were. In our case, stack canaries are used to check if a buffer overflow of a stack variable resulted in overriding the return address. The mechanism is based on a (sometimes random) value that is placed on each function's stack, just above the return address, as the following picture shows. The value is checked in the function's epilogue before calling ret, and if the values do not match the execution is halted. Since the stack grows from higher memory addresses to lower ones, any buffer overflow targeting the return address will also have to overwrite the canary with the right value. + +@TODO POZA1 + +There are 3 main variations of this mechanism: random, terminator, and random XOR. + +`Random` canaries are generated when programs start, and are stored in a global variable. The global variable can be located in a memory region surrounded by unmapped pages - this protects against information leak attacks (see next section) that dump big memory chunks, since accessing the unmapped pages will trigger a segmentation fault. This first method is a little bit hard to implement because the `crt0.o` code (see note below) has to read `/dev/random`. + +The `terminator` canaries contain string termination characters such as 0x00, CR, LF, or -1. This is based on the assumption that most buffer overflows happen when string manipulation functions (e.g., strcpy()) are called with bad arguments. One would want to leak the canary value and then use a buffer overflow to overwrite it with the same value. Because string manipulation functions usually stop when termination characters are encountered, it is difficult to use them to overwrite the same value (containing termination characters) over the canary. + +The `random XOR` canaries work by applying a XOR-based algorithm having both a random number (the canary), and the correct address as inputs. The attacker has to both obtain the random number, and apply the algorithm on the new return address before building the payload. + +> `crt0.o` is a set of initialization routines linked into compiled C programs, and executed before calling `main()`. [More details](https://en.wikipedia.org/wiki/Crt0) + +The 3 well known implementations of stack protections are: `StackGuard`, `ProPolice`, and `StackShield`. + +#### StackGuard + +The [initial implementation](https://www.usenix.org/legacy/publications/library/proceedings/sec98/full_papers/cowan/cowan_html/cowan.html) proposed by Crispin Cowan et al. from Immunix Inc., only protected the return address by pushing the canary value on the stack right after it (at lower adresses in memory, just like in the picture). Follow-up versions also protected the saved registers and base pointer. StackGuard is implemented as a patch for the GCC compiler that modifies the GCC's code generation routines for function prologues and epilogues. The prologue will push the random value onto the stack, while the epilogue will contain a short value checking code. + +>[Presentation](https://courses.cs.washington.edu/courses/cse504/10sp/Slides/lecture3.pdf) on the history of StackGuard by Crispin Cowan. + +#### StackShield + +The most notable feature of StackShield, compared to other implementations, is the Global Return Stack. This is a separate memory structure where return addresses are pushed as function are being called. When the function returns, the correct value is copied back to the application stack, thus overriding any malicious value. Ret Range Check is another feature that allows stack smashing detection by copying return addresses from the application stack to a memory region with no write permission - the value is compared to the current return address in function's epilogue. + +#### ProPolice + +ProPolice, proposed by IBM, started from an implementation similar to StackGuard, but evolved and introduced new features. It is currently the method used by GCC when the `--fstack-protector` compilation flag is used. The ProPolice mechanism will reorder local variables based on their types. The following picture shows where each variable should be placed on the stack based on it's type such that different attacks become impossible. + +@TODO POZA2 + +> GCC supports 3 levels of stack smashing protection: complete, normal, and strong. The difference lies in the types of function that are protected, with the decision being made by looking at what kinds of local variables are used. Details in [this](https://lwn.net/Articles/584225/) LWN article. + +```c +void func() { + char buffer[1337]; + return; +} + +int main() { + func(); + return 0; +} +``` + +Compile the file using: + +``` +~$ CFLAGS='-O0 -m32 -fstack-protector' make ssp +``` + +The disassembled code for func() looks like this: + +``` +~$ objdump -M intel -d -j .text ./ssp +``` + +``` +0804841b : + 804841b: 55 push ebp + 804841c: 89 e5 mov ebp,esp + 804841e: 81 ec 48 05 00 00 sub esp,0x548 + 8048424: 65 a1 14 00 00 00 mov eax,gs:0x14 + 804842a: 89 45 f4 mov DWORD PTR [ebp-0xc],eax + 804842d: 31 c0 xor eax,eax + 804842f: 90 nop + 8048430: 8b 45 f4 mov eax,DWORD PTR [ebp-0xc] + 8048433: 65 33 05 14 00 00 00 xor eax,DWORD PTR gs:0x14 + 804843a: 74 05 je 8048441 + 804843c: e8 af fe ff ff call 80482f0 <__stack_chk_fail@plt> + 8048441: c9 leave + 8048442: c3 ret +``` + +We can observe the random value being read from `gs:0x14` and placed on the stack after the return value. Let's take a look at this in GDB for multiple runs. Start by creating a small GDB script that can be easily executed multiple times. + +```gdb +set disassembly-flavor intel +file ssp +break *0x804842a +commands +p/x $eax +c +end +run +quit +``` + +Run using: + +``` +~$ gdb -x canary.gdb ssp +``` + +#### Defeating Canaries + +This [white paper](https://www.blackhat.com/presentations/bh-usa-04/bh-us-04-silberman/bh-us-04-silberman-paper.pdf) covers different attack vectors and the capabilities of protecting against these offered by the 3 implementations that we previously presented. As the paper presents, there are multiple target values that an attacker might want to modify during exploitation, by overflowing buffers stored in different regions of the process. + +For example, the attacker might target: +* parameters function pointers (pushed onto the stack before calling functions) +* the return address +* the old base pointer +* a plain function pointer (local variable) + +Buffers could be stored either on the `stack`, the `heap` or `.bss` section. + +>Note that attacks can also be carried out via indirect pointers. The attacker could target a stack local variable, without trying to change the return value, that is later used as a pointer in a write operation. If this write can be fully controlled, the attacker can change the return address without even writing over the canary. + +Besides indirect attacks, stack canaries can also be defeated if the attacker is able to exploit an `information leak` vulnerability. + +### Format String Exploits + +>In the following, `top of the stack` refers to `high addresses` (fixed), whereas `bottom of the stack` refers to `small addresses` (the end where values are pushed on the stack), contrary to the intuition that the top of the stack is the end at which values are pushed. This means high addresses are represented upwards, whereas low addresses are represented downwards (contrary to the `GDB` layout of the stack). This formality arises from this paper on [Exploiting Format String Vulnerabilities](https://cs155.stanford.edu/papers/formatstring-1.2.pdf), from which the following tutorial was adapted. + +The scenario that enables format string vulnerabilities is the direct use of unsanitized user provided input as a parameter to functions that can perform special operations based on that input. + +```c +void print_something(char* user_input) +{ + printf(user_input); +} +``` + +vs. + +```c +void print_something(char* user_input) +{ + printf("%s", user_input); +} +``` +#### Format functions + +A number of format functions are defined in the ANSI C definition. There are some basic format string functions on which more complex functions are based on, some of which are not part of the standard but are widely available. Real family members: + +Function | Description +---------|------------ +fprintf | prints to a FILE stream +printf | prints to the ‘stdout’ stream +sprintf | prints into a string +snprintf | prints into a string with length checking +vfprintf | print to a FILE stream from a va_arg structure +vprintf | prints to ‘stdout’ from a va_arg structure +vsprintf | prints to a string from a va_arg structure +vsnprintf | prints to a string with length checking from a va_arg structure +setproctitle | set argv[] +syslog | output to the syslog facility + +##### Use of format functions + +To understand where this vulnerability is common in C code, we have to examine the purpose of format functions. + +###### Functionality + +* used to convert simple C datatypes to a string representation +* allow to specify the format of the representation +* process the resulting string (output to stderr, stdout, syslog, …) + +###### How the format function works + +* the format string controls the behaviour of the function +* it specifies the type of parameters that should be printed +* parameters are saved on the stack (pushed) +* saved either directly (by value), or indirectly (by reference) + +###### The calling function + +* has to know how many parameters it pushes to the stack, since it has to do the stack correction, when the format function returns + +##### What exactly is a format string + +A format string is an ASCIIZ string that contains text and format parameters. + +```c +printf ("The magic number is: %d\n", 1911); +``` + +The text to be printed is `"The magic number is:"`, followed by a format parameter (`"%d"`), that is replaced with the parameter (`1911`) in the output. Therefore the output looks like: + +``` +The magic number is: 1911 +``` + +Some format parameters: + +Parameter|Output|Passed as +---------|------|--------- +%d|decimal(int)|value +%u|unsigned decimal (unsigned int)|value +%x|hexadecimal (unsigned int)|value +%s|string ( char *)|reference +%n|number of bytes written so far, (* int)|reference + +The `'\'` character is used to escape special characters. It is replaced by the C compiler at compile-time, replacing the escape sequence by the appropiate character in the binary. The format functions do not recognize those special sequences. In fact, they do not have anything to do with the format functions at all, but are sometimes mixed up, as if they are evaluated by them. + +```c +printf ("The magic number is: \x25d\n", 23); +``` + +The code above works, because `\x25` is replaced at compile time with `%`, since `0x25 (37)` is the ASCII value for the percent character. + +#### The stack and its role at format strings + +The behaviour of the format function is controlled by the format string. The function retrieves the parameters requested by the format string from the stack. + +```c +printf ("Number %d has no address, number %d has: %08x\n", i, a, &a); +``` + +From within the printf function the stack looks like: + +@TODO POZA3 + +The format function now parses the format string `'A'`, by reading a character a time. If it is not `'%'`, the character is copied to the output. In case it is, the character behind the `'%'` specifies the type of parameter that should be evaluated. The string `"%%"` has a special meaning, it is used to print the escape character `'%'` itself. Every other parameter relates to data, which is located on the stack. + +#### What do we control? + +Through supplying the format string we are able to control the behaviour of the format function. We now have to examine what exactly we are able to control, and how to use this control to extend this partial control over the process to full control of the execution flow. + +#### Crash of the program + +By utilizing format strings we can easily trigger some invalid pointer access by just supplying a format string like: + +```c +printf ("%s%s%s%s%s%s%s%s%s%s%s%s"); +``` + +Because `"%s"` displays memory from an address that is supplied on the stack, where a lot of other data is stored, too, our chances are high to read from an illegal address, which is not mapped. Also most format function implementations offer the `"%n"` parameter, which can be used to write to the addresses on the stack. If that is done a few times, it should reliably produce a crash, too. + +#### Viewing the stack + +We can show some parts of the stack memory by using a format string like this: + +```c +printf ("%08x.%08x.%08x.%08x.%08x\n"); +``` + +This works, because we instruct the printf-function to retrieve five parameters from the stack and display them as 8-digit padded hexadecimal numbers. So a possible output may look like: + +``` +40012980.080628c4.bffff7a4.00000005.08059c04 +``` + +This is a partial dump of the stack memory, starting from the current bottom of the stack towards the top — assuming the stack grows towards the low addresses. Depending on the size of the format string buffer and the size of the output buffer, you can reconstruct more or less large parts of the stack memory by using this technique. In some cases you can even retrieve the entire stack memory. A stack dump gives important information about the program flow and local function variables and may be very helpful for finding the correct offsets for a successful exploitation. + +#### Viewing memory at any location + +It is also possible to peek at memory locations different from the stack memory. To do this we have to get the format function to display memory from an address we can supply. This poses two problems to us: + +* First, we have to find a format parameter which uses an address (by reference) as stack parameter and displays memory from there +* Secondly, we have to supply that address. + +We are lucky in the first case, since the `"%s"` parameter just does that, it displays memory — usually an ASCIIZ string — from a stack supplied address. So the remaining problem is, how to get that address on the stack, into the right place. + +> For re-creating the following attack you should place the string passed to `printf` using a local buffer. In the following examples the string is used as it is to simplify the situation, but at compile time the string will be placed on the `.rodata` section and the desired address won't be on the stack so it can be used (also true for dummy parameters). + +To modify the stack pointer we can simply use dummy parameters that will 'dig' up the stack by printing junk: + +```c +printf ("AAA0AAA1_%08x.%08x.%08x.%08x.%08x"); +``` + +The `"%08x"` parameters increase the internal stack pointer of the format function towards the top of the stack. After more or less of this increasing parameters the stack pointer points into our memory: the format string itself. The format function always maintains the lowest stack frame, so if our buffer lies on the stack at all, it lies above the current stack pointer for sure. If we choose the number of `"%08x"` parameters correctly, we could just display memory from an arbitrary address, by appending `"%s"` to our string. + +In our case the address is illegal and would be `"AAA0"`. Lets replace it with a real one. Example: + +```c +address = 0x08480110 +address (encoded as 32 bit le string): "\x10\x01\x48\x08" +``` +```c +printf ("\x10\x01\x48\x08_%08x.%08x.%08x.%08x.%08x|%s|"); +``` + +This will dump memory from `0x08480110` until a `NULL` byte is reached. By increasing the memory address dynamically we can map out the entire process space. It is even possible to create a coredump like image of the remote process and to reconstruct a binary from it. It is also helpful to find the cause of unsuccessful exploitation attempts. + +If we cannot reach the exact format string boundary by using 4-Byte pops (`"%08x"`), we have to pad the format string, by prepending one, two or three junk characters. This is analog to the alignment in buffer overflow exploits. + +#### Exploitation - through pure format strings + +Our goal in the case of exploitation is to be able to control the instruction pointer, i.e we want to extend our very limited control — the ability to control the behaviour of the format function — to real execution control, that is executing our raw machine code. Let's take a look at the following code: + +```c +{ +char buffer[512]; +snprintf (buffer, sizeof (buffer), user); +buffer[sizeof (buffer) - 1] = ’\0’; +} +``` + +In the code above it is not possible to enlarge our buffer by inserting some kind of 'stretching' format parameter, because the program uses the secure snprintf function to assure we will not be able to exceed the buffer. At first it may look as if we cannot do much useful things, except crashing the program and inspecting some memory. + +Lets remember the format parameters mentioned. There is the '%n' parameter, which writes the number of bytes already printed, into a variable of our choice. The address of the variable is given to the format function by placing an integer pointer as parameter onto the stack. + +```c +int i; +printf ("foobar%n\n", (int *) &i); +printf ("i = %d\n", i); +``` + +Would print “i = 6”. With the same method we used above to print memory from arbitrary addresses, we can write to arbitrary locations: + +```c +"AAA0_%08x.%08x.%08x.%08x.%08x.%n" +``` + +With the `"%08x"` parameter we increase the internal stack pointer of the format function by four bytes. We do this until this pointer points to the beginning of our format string (to `"AAA0"`). This works, because usually our format string is located on the stack, on top of our normal format function stack frame. The `"%n"` writes to the address `0x30414141`, that is represented by the string `"AAA0"`. Normally this would crash the program, since this address is not mapped. But if we supply a correct mapped and writeable address this works and we overwrite four bytes (`sizeof (int)`) at the address: + +``` +"\xc0\xc8\xff\xbf_%08x.%08x.%08x.%08x.%08x.%n" +``` + +The format string above will overwrite four bytes at `0xbfffc8c0` with a small integer number. We have reached one of our goals: we can write to arbitrary addresses. But we cannot control the number we are writing yet — but this will change. + +The number we are writing — the count of characters written by the format function — is dependant on the format string. Since we control the format string, we can at least take influence on this counter, by writing more or less bytes: + +```c +int a; +printf ("%10u%n", 7350, &a); +/* a == 10 */ +int a; +printf ("%150u%n", 7350, &a); +/* a == 150 */ +``` + +By using a dummy parameter `"%nu"` we are able to control the counter written by `"%n"`, at least a bit. But for writing large numbers - such as addresses — this is not sufficient, so we have to find a way to write arbitrary data. + +An integer number on the x86 architecture is stored in four bytes, which are little-endian ordered, the least significant byte being the first in memory. So a number like `0x0000014c` is stored in memory as: `"\x4c\x01\x00\x00"`. + +For the counter in the format function we can control the least significant byte, the first byte stored in memory by using dummy `"%nu"` parameters to modify it. Example: + +```c +unsigned char foo[4]; +printf ("%64u%n", 7350, (int *) foo); +``` + +When the printf function returns, `foo[0]` contains `"\x40"`, which is equal to `64`, the number we used to increase the counter. + +But for an address, there are four bytes that we have to control completely. If we are unable to write four bytes at once, we can try to write a byte a time for four times in a row. On most CISC architectures it is possible to write to unaligned arbitrary addresses. This can be used to write to the second least significant byte of the memory, where the address is stored. This would look as follows: + +```c +unsigned char canary[5]; +unsigned char foo[4]; +memset (foo, 0, sizeof (foo)); +/* 0 * before */ strcpy (canary, "AAAA"); +/* 1 */ printf ("%16u%n", 7350, (int *) &foo[0]); +/* 2 */ printf ("%32u%n", 7350, (int *) &foo[1]); +/* 3 */ printf ("%64u%n", 7350, (int *) &foo[2]); +/* 4 */ printf ("%128u%n", 7350, (int *) &foo[3]); +/* 5 * after */ printf ("%02x%02x%02x%02x\n", foo[0], foo[1], +foo[2], foo[3]); +printf ("canary: %02x%02x%02x%02x\n", canary[0], +canary[1], canary[2], canary[3]); +``` + +This returns the output `"10204080"` and `"canary: 00000041"`. We overwrite four times the least significant byte of an integer we point to. By increasing the pointer each time, the least significant byte moves through the memory we want to write to, and allows us to store completely arbitrary data. As you can see in the first row of the following figure, all eight bytes are not touched yet by our overwrite code. From the second row on we trigger four overwrites, shifted by one byte to the right for every step. The last row shows the final desired state: we overwrote all four bytes of our foo array, but while doing so, we destroyed three bytes of the canary array. We included the canary array just to see that we are overwriting memory we do not want to. + +@TODO POZA4 + +Although this method looks complex, it can be used to overwrite arbitrary data at arbitrary addresses. For explanation we have only used one write per format string until now, but it is also possible to write multiple times within one format string: + +```c +strcpy (canary, "AAAA"); +printf ("%16u%n%16u%n%32u%n%64u%n", + 1, (int *) &foo[0], 1, (int *) &foo[1], + 1, (int *) &foo[2], 1, (int *) &foo[3]); +printf ("%02x%02x%02x%02x\n", foo[0], foo[1], + foo[2], foo[3]); +printf ("canary: %02x%02x%02x%02x\n", canary[0], + canary[1], canary[2], canary[3]); +``` + +We use the `"1"` parameters as dummy arguments to our `"%u"` paddings. Also, the padding has changed, since the counter of the characters is already at `16` when we want to write `32`. So we only have to add `16` characters instead of `32` to it, to get the results we desire. This was a special case, in which all the bytes increased throughout the writes. But we could also write `80` `40` `20` `10` with only a minor modification. + +Since we write integer numbers and the order is little endian, only the least significant byte is important in the writes. By using counters of `0x80`, `0x140`, `0x220` and `0x310` characters respectivly when `"%n"` is triggered, we can construct the desired string. The code to calculate the desired numberof-written-chars counter is this: + +```c +write_byte += 0x100; +already_written %= 0x100; +padding = (write_byte - already_written) % 0x100; +if (padding < 10) + padding += 0x100; +``` + +Where `write_byte` is the byte we want to create, `already_written` is the current counter of written bytes the format function maintains and `padding`; is the number of bytes we have to increase the counter with. + +```c +write_byte = 0x7f; +already_written = 30; +write_byte += 0x100; /* write_byte is 0x17f now */ +already_written %= 0x100; /* already_written is 30 */ + +/* afterwards padding is 97 (= 0x61) */ +padding = (write_byte - already_written) % 0x100; +if (padding < 10) + padding += 0x100 +``` + +Now a format string of `"%97u"` would increase the `"%n"`-counter, so that the least significant byte equals `write_byte`. The final check if the padding is below ten deserves some attention. A simple integer output, such as `"%u"` can generate a string of a length up to ten characters, depending on the integer number it outputs. If the required length is larger than the padding we specify, say we want to output `100`' with a `"%2u"`, our value will be dropped in favor to not losing any meaningful output. By ensuring our padding is always larger than `10`, we can keep an always accurate number of `already_written`, the counter the format function maintains, since we always write exactly as much output bytes as specified with the length option in the format parameter. + +#### A general method to exploit format strings vulnerabilities + +The only remaining thing to exploit such vulnerabilities in a hands-on practical way is to put the arguments into the right order on the stack and use a stackpop sequence to increase the stack pointer. It should look like: + +``` + +``` + +Where: +* `stackpop` The sequence of stack popping parameters that increase the stack pointer. Once the stackpop has been processed, the format function internal stack pointer points to the beginning of the dummy-addr-pair strings. +* `dummy-addr-pair` four pairs of dummy integer values and addresses to write to. The addresses are increasing by one with each pair, the dummy integer value can be anything that does not contain NULL bytes. +* `write-code` The part of the format string that actually does the writing to the memory, by using '%nu%n' pairs, where n is greater than 10. The first part is used to increase or overflow the least significant byte of the format function internal bytes-written counter, and the '%n' is used to write this counter to the addresses that are within the dummy-addr-pair part of the string. + +The write code has to be modified to match the number of bytes written by the stackpop, since the stackpop wrote already characters to the output when the format function parses the write-code — the format function counter does not start at zero, and this has to be considered. + +#### Direct Parameter Access + +There is a huge simplification which is known as `direct parameter access`, a way to directly address a stack parameter from within the format string. Almost all currently in use C libraries do support this features, but not all are useable to apply this method to format string exploitation. The direct parameter access is controlled by the `"$"` qualifier: + +```c +printf ("%6$d\n", 6, 5, 4, 3, 2, 1); +``` + +Prints `"1"`, because the `"6$"` explicitly addresses the 6th parameter on the stack. Using this method the whole stack pop sequence can be left out. + +```c +char foo[4]; +printf ("%1$16u%2$n" + "%1$16u%3$n" + "%1$32u%4$n" + "%1$64u%5$n", + 1, + (int *) &foo[0], (int *) &foo[1], + (int *) &foo[2], (int *) &foo[3]); +``` + +#### Generalizing format string exploits + +The `printf` example is just one of many cases of format string vulnerabilities. In general, any system where user input affects program execution and data access in a custom way can be susceptible to such a vulnerability. Other specialized examples can be considered: + +* SQL injections +* XSS injections + +## Challenges + +### Challenge 1 + +The `mycanary` binary contains a custom stack canary implementation. Can you defeat it? Call `bad_func()`. + +### Challenge 2 + +The bulletproof binary is compiled using GCC's SSP. I bet you can defeat it, twice! Don't let me down. Call `bad_func()` in 2 ways: by overwriting a `function pointer`, and by overwriting a `stack return address`. Disable ASLR for the second attack. + +> You need to use the 32 bit VM to solve the second part of this task. + +> bad_func does not exit the program! You should use `cat - | ./bulletproof` so that you can detect if bad_func was called in the program loop. + +### Task 3 - Format Strings + +This task consists of 4 binaries exhibiting a format string vulnerability. Analyze what each binary does using the methods already familiar to you and try to determine the exact format string that will lead to the desired result. + +> The difficulty of the task associated with each binary increases with the number of the binary. + + From 3d8013800267c487d7f6ae20261839aee0dc15e1 Mon Sep 17 00:00:00 2001 From: VBurduja <56834597+VBurduja@users.noreply.github.com> Date: Tue, 20 Jul 2021 03:28:45 +0300 Subject: [PATCH 4/6] Update README.md remove TODOs --- sessions/information-leaks/README.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/sessions/information-leaks/README.md b/sessions/information-leaks/README.md index 6fc7151..8c49f74 100644 --- a/sessions/information-leaks/README.md +++ b/sessions/information-leaks/README.md @@ -12,7 +12,7 @@ The name comes from canaries (birds) that were used by mining workers when entering mines and were affected by any deadly gases such as methane before humans were. In our case, stack canaries are used to check if a buffer overflow of a stack variable resulted in overriding the return address. The mechanism is based on a (sometimes random) value that is placed on each function's stack, just above the return address, as the following picture shows. The value is checked in the function's epilogue before calling ret, and if the values do not match the execution is halted. Since the stack grows from higher memory addresses to lower ones, any buffer overflow targeting the return address will also have to overwrite the canary with the right value. -@TODO POZA1 +![canary](assets/image1.png) There are 3 main variations of this mechanism: random, terminator, and random XOR. @@ -40,7 +40,7 @@ The most notable feature of StackShield, compared to other implementations, is t ProPolice, proposed by IBM, started from an implementation similar to StackGuard, but evolved and introduced new features. It is currently the method used by GCC when the `--fstack-protector` compilation flag is used. The ProPolice mechanism will reorder local variables based on their types. The following picture shows where each variable should be placed on the stack based on it's type such that different attacks become impossible. -@TODO POZA2 +![stack](assets/image2.jpg) > GCC supports 3 levels of stack smashing protection: complete, normal, and strong. The difference lies in the types of function that are protected, with the decision being made by looking at what kinds of local variables are used. Details in [this](https://lwn.net/Articles/584225/) LWN article. @@ -222,7 +222,7 @@ printf ("Number %d has no address, number %d has: %08x\n", i, a, &a); From within the printf function the stack looks like: -@TODO POZA3 +![format_string_stack](assets/image3.png) The format function now parses the format string `'A'`, by reading a character a time. If it is not `'%'`, the character is copied to the output. In case it is, the character behind the `'%'` specifies the type of parameter that should be evaluated. The string `"%%"` has a special meaning, it is used to print the escape character `'%'` itself. Every other parameter relates to data, which is located on the stack. @@ -368,7 +368,7 @@ canary[1], canary[2], canary[3]); This returns the output `"10204080"` and `"canary: 00000041"`. We overwrite four times the least significant byte of an integer we point to. By increasing the pointer each time, the least significant byte moves through the memory we want to write to, and allows us to store completely arbitrary data. As you can see in the first row of the following figure, all eight bytes are not touched yet by our overwrite code. From the second row on we trigger four overwrites, shifted by one byte to the right for every step. The last row shows the final desired state: we overwrote all four bytes of our foo array, but while doing so, we destroyed three bytes of the canary array. We included the canary array just to see that we are overwriting memory we do not want to. -@TODO POZA4 +![4-stage-overwrite](assets/image4.png) Although this method looks complex, it can be used to overwrite arbitrary data at arbitrary addresses. For explanation we have only used one write per format string until now, but it is also possible to write multiple times within one format string: From 1c0381c3c6444e9b8302a3406de19873ec81f7d7 Mon Sep 17 00:00:00 2001 From: VBurduja <56834597+VBurduja@users.noreply.github.com> Date: Wed, 21 Jul 2021 02:01:53 +0300 Subject: [PATCH 5/6] Update README.md add Table of Contents --- sessions/information-leaks/README.md | 36 ++++++++++++++++++++++------ 1 file changed, 29 insertions(+), 7 deletions(-) diff --git a/sessions/information-leaks/README.md b/sessions/information-leaks/README.md index 8c49f74..44f043e 100644 --- a/sessions/information-leaks/README.md +++ b/sessions/information-leaks/README.md @@ -1,11 +1,33 @@ # Information Leaks -
- -
+## Table of Contents + * [Tutorials](#tutorials) + * [Stack Protection (Canaries)](#stack-protection-canaries) + * [StackGuard](#stackguard) + * [StackShield](#stackshield) + * [ProPolice](#propolice) + * [Defeating Canaries](#defeating-canaries) + * [Format String Exploits](#format-string-exploits) + * [Format functions](#format-functions) + * [Use of format functions](#use-of-format-functions) + * [Functionality](#functionality) + * [How the format function works](#how-the-format-function-works) + * [The calling function](#the-calling-function) + * [What exactly is a format string](#what-exactly-is-a-format-string) + * [The stack and its role at format strings](#the-stack-and-its-role-at-format-strings) + * [What do we control?](#what-do-we-control) + * [Crash of the program](#crash-of-the-program) + * [Viewing the stack](#viewing-the-stack) + * [Viewing memory at any location](#viewing-memory-at-any-location) + * [Exploitation - through pure format strings](#exploitation---through-pure-format-strings) + * [A general method to exploit format strings vulnerabilities](#a-general-method-to-exploit-format-strings-vulnerabilities) + * [Direct Parameter Access](#direct-parameter-access) + * [Generalizing format string exploits](#generalizing-format-string-exploits) + * [Challenges](#challenges) + * [Challenge 1](#challenge-1) + * [Challenge 2](#challenge-2) + * [Challenge 3 - Format Strings](#challenge-3---format-strings) -## Table of Contents - ## Tutorials ### Stack Protection (Canaries) @@ -18,7 +40,7 @@ There are 3 main variations of this mechanism: random, terminator, and random XO `Random` canaries are generated when programs start, and are stored in a global variable. The global variable can be located in a memory region surrounded by unmapped pages - this protects against information leak attacks (see next section) that dump big memory chunks, since accessing the unmapped pages will trigger a segmentation fault. This first method is a little bit hard to implement because the `crt0.o` code (see note below) has to read `/dev/random`. -The `terminator` canaries contain string termination characters such as 0x00, CR, LF, or -1. This is based on the assumption that most buffer overflows happen when string manipulation functions (e.g., strcpy()) are called with bad arguments. One would want to leak the canary value and then use a buffer overflow to overwrite it with the same value. Because string manipulation functions usually stop when termination characters are encountered, it is difficult to use them to overwrite the same value (containing termination characters) over the canary. +The `terminator` canaries contain string termination characters such as `0x00`, `CR`, `LF`, or `-1`. This is based on the assumption that most buffer overflows happen when string manipulation functions (e.g., `strcpy()`) are called with bad arguments. One would want to leak the canary value and then use a buffer overflow to overwrite it with the same value. Because string manipulation functions usually stop when termination characters are encountered, it is difficult to use them to overwrite the same value (containing termination characters) over the canary. The `random XOR` canaries work by applying a XOR-based algorithm having both a random number (the canary), and the correct address as inputs. The attacker has to both obtain the random number, and apply the algorithm on the new return address before building the payload. @@ -468,7 +490,7 @@ The bulletproof binary is compiled using GCC's SSP. I bet you can defeat it, twi > bad_func does not exit the program! You should use `cat - | ./bulletproof` so that you can detect if bad_func was called in the program loop. -### Task 3 - Format Strings +### Challenge 3 - Format Strings This task consists of 4 binaries exhibiting a format string vulnerability. Analyze what each binary does using the methods already familiar to you and try to determine the exact format string that will lead to the desired result. From 3b73dc20e5f8cc7f1ca334aaa3d5a855b6f65e9f Mon Sep 17 00:00:00 2001 From: VBurduja <56834597+VBurduja@users.noreply.github.com> Date: Wed, 21 Jul 2021 14:18:38 +0300 Subject: [PATCH 6/6] Update README.md --- sessions/information-leaks/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sessions/information-leaks/README.md b/sessions/information-leaks/README.md index 44f043e..c0dc65b 100644 --- a/sessions/information-leaks/README.md +++ b/sessions/information-leaks/README.md @@ -84,7 +84,7 @@ Compile the file using: ~$ CFLAGS='-O0 -m32 -fstack-protector' make ssp ``` -The disassembled code for func() looks like this: +The disassembled code for `func()` looks like this: ``` ~$ objdump -M intel -d -j .text ./ssp