Wednesday, March 28, 2012

vsftpd-3.0.0-pre1 and seccomp filter

For cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 brave, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re now exists a pre-release version of vsftpd-3.0.0:

https://security.appspot.com/downloads/vsftpd-3.0.0-pre1.tar.gz

https://security.appspot.com/downloads/vsftpd-3.0.0-pre1.tar.gz.asc

The most significant change is an initial implementation of a secondary sandbox based on seccomp filter, as recently merged to Ubuntu 12.04. This secondary sandbox is pretty powerful, but I'll go into more details in a subsequent post.

For now, suffice to say I'm interested in testing of this new build, e.g.
  • Does it compile for you? (I've added various new gcc flags etc).

  • Any runtime regressions?

  • Does it run ok on 64-bit Ubuntu 12.04-beta2 or newer?

This last question is key as that is cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 configuration that will automatically use a seccomp filter. The astute among you will note that beta2 is not due out until tomorrow, but an apt-get dist-upgrade from beta1 will pull in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 kernel that you need.

Will Drewry's excellent work on seccomp filter is cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 most exciting Linux security feature in a long time and cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 eventual vsftpd combined sandbox that will result should be a very tough nut to crack indeed.

Thursday, March 22, 2012

On cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 failings of Pwn2Own 2012

This year's Pwn2Own and Pwnium contests were interesting for many reasons. If you look at cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 results closely, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re are many interesting observations and conclusions to be made.

$60k is more than enough to encourage disclosure of full exploits

As evidenced by cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 Pwnium results, $60k is certainly enough to motivate researchers into disclosing full exploits, including sandbox escapes or bypasses.

There was some minor controversy on this point leading up to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 competitions, culminating in this post from ZDI. The post unfortunately was a little strong in its statements including "In fact, we don't believe that even cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 entirety of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 $105,000 we are offering would be considered an acceptable bounty", "for cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 $60,000 cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y are offering, it is incredibly unlikely that anyone will participate" and "such an exploit against Chrome will never see cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 light of day at CanSecWest". At least we all now have data; I don't expect ZDI to make this mistake again. Without data, it's an understandable mistake to have made.

Bad actors will find loopholes and punk you

One of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 stated -- and laudable -- goals of both Pwn2Own and Pwnium is to make users safer by getting bugs fixed. As recently noted by cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 EFF, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re are some who are not interested in getting bugs fixed. At face value, it would seem to be counterproductive for cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365se greyhat or blackhat parties to participate.

Enter VUPEN, who somehow managed to turn up and get cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 best of all worlds: $60k, tons of free publicity for cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365ir dubious business model and... minimal cost. To explore cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 minimal cost, let's look at one of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 bugs cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y used: a Flash bug (not Chrome as widely reported), present in Flash 11.1 but already fixed in Flash 11.2. In ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r words, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 bug cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y used already had a fixed lifetime. Using such a bug enabled cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365m to collect a large prize whilst only handing over a doomed asset in return.

Although operating within cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 rules, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365ir entry did not do much to advance user security and safety -- cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 bug fix was already in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 pipeline to users. They did however punk $60k out of Pwn2Own and turned cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 whole contest into a VUPEN marketing spree.

Game cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365ory

At cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 last minute at Pwn2Own, contestants Vincenzo and Willem swooped in with a Firefox exploit to collect a $30k second place prize. The timing suggests that cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y were waiting to see if cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365ir single 0-day would net cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365m a prize or not. It did. We'll never know what cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y would have done if cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 $30k reward was already sewn up by someone else, but one possibility is a non-disclosure -- which wouldn't help make anyone safer.

Fixing future contests

The data collected suggests some possible structure to future contests to ensure cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y bring maximal benefit to user safety:
  • Require full exploits, including sandbox escapes or bypasses.

  • Do not pay out for bugs already fixed in development releases or repositories.

  • Have a fixed reward value per exploit.

Saturday, March 17, 2012

Some random observations on Linux ASLR

I've had cause to be staring at memory maps recently across a variety of systems. No surprise cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n that some suboptimal or at least interesting ASLR quirks have come to light.

1) Partial failure of ASLR on 32-bit Fedora

My Fedora is a couple of releases behind, so no idea if it's been fixed. It seems that cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 desire to pack all cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 shared libraries into virtual address 0x00nnnnnn has a catastrophic failure mode when cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re are too many libraries: something always ends up at 0x00110000. You can see it with repeated invocations of ldd /opt/google/chrome/chrome|grep 0x0011:

libglib-2.0.so.0 => /lib/libglib-2.0.so.0 (0x00110000)
libXext.so.6 => /usr/lib/libXext.so.6 (0x00110000)
libdl.so.2 => /lib/libdl.so.2 (0x00110000)

Which exact library is placed at cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 fixed address is random. However, any fixed address can be a real problem to ASLR. For example, in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 browser context, take a bug such as Chris Rohlf's older but interesting CSS type confusion. Without a fixed address, a crash is a likely outcome. With a fixed address, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 exact library mapped at cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 fixed address could easily be fingerprinted, and cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 BSS section read to leak heap pointers (e.g. via singleton patterns). Bye bye to both NX and ASLR.

Aside: in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 32-bit browser context with plenty of physical memory, a Javascript-based heap spray could easily fill most of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 address space such that cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 attacker's deference has a low chance of failure.

Aside #2: my guess is that this scheme is designed to prevent a return-to-glibc attack vs. strcpy(), by making sure that all executable addresses contain a NULL byte. I'm probably missing something, but it seems like cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 fact that strcpy() NULL-terminates, combined with cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 little-endianness of Intel, makes this not so strong.


2) Missed opportunity to use more entropy on 64-bit

If you look at cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 maps of a 64-bit process, you'll see most virtual memory areas correspond to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 formula 0x7fnnxxxxxxxx where all your stuff is piled togecá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r in xxxxxxxx and nn is random. At least, nothing is in or near a predictable location. One way to look at how this could be better is this: If you emit a 4GB heap spray, you have a ~1/256 chance of guessing where it is. Using cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 additional 7 bits of entropy might be useful, especially for cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 heap.


3) Bad mmap() randomization

Although cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 stack, heap and binary are placed at reasonably random locations, unhinted mmap() chunks are sort of just piled up adjacent, typically in a descending-vm-address fashion. This can lead to problems where a buffer overflow crashes into a sensitive mapping -- such a JIT mapping. (This is one reason JIT mappings have cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365ir own randomizing allocator in v8).


4) Heap / stack collision likely with ASLR binary

On a 32-bit kernel you might see:

b8105000-b8124000 rw-p 00000000 00:00 0 [heap]
bfae5000-bfb0a000 rw-p 00000000 00:00 0 [stack]

Or on a 64-bit kernel running a 32-bit process:

f7c52000-f7c73000 rw-p 00000000 00:00 0 [heap]
ff948000-ff96d000 rw-p 00000000 00:00 0 [stack]

In both cases, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 heap doesn't have to grow too large before it cannot grow any larger. When this happens, most heap implementations fall back to mmap() allocations, and suffer cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 problems of 3) above. These things chained togecá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r with a very minor infoleak such as my cross-browser XSLT heap address leak could in fact leak cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 location of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 executable, leading to a full NX/ASLR bypass.


Conclusion

A 32-bit address space just isn't very big any more, compared with todays large binaries, large number of shared library dependencies and large heaps. It's no surprise that everything is looking a little crammed in. The good news is that cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re are no obvious and severe problems with cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 64-bit situation, although cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 full entropy isn't used. Applications (such as v8 / Chromium) can and do fix that situation for cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 most sensitive mappings cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365mselves.