An Analysis of Linux Kernel Heap Hardening
Dr
Silvio Cesare
@silviocesare
@silviocesare
Summary
I wrote a blog post some months ago on weaknesses in the Linux kernel heap free list pointer hardening implementation. In response to that weakness, Kees Cook wrote an improved kernel patch, which I reviewed. This blog post is an analysis of that patch. I try to break it using an SMT solver and fail.Introduction
In the original kernel slab free list hardening patch, the free list pointer was scrambled to prevent naive free list pointer corruption and poisoning.The scrambling consisted of:
obfuscated_ptr = ptr ^ ptr_addr ^ secret
The weakness in this approach was because ptr and ptr_addr were part of the same slab, they were highly similar. In fact, only the low bits were different. As such, the obfuscated_ptr revealed almost the entire secret. The blog post where I talk about this is here https://blog.infosectcbr.com.au/2020/03/weaknesses-in-linux-kernel-heap.html.
A subsequent patch was written by Kees Cook in https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=1ad53d9fa3f6168ebcf48a50e08b170432da2257 to improve the pointer scrambling and he asked me for feedback at the time. I think this is a fantastic thing that the Linux kernel team actively works with security researchers.
The improved patch changes the use of ptr_addr:
obfuscated_ptr = ptr ^ swab(ptr_addr) ^ secret
swab swaps the byte order.
The question is, can we recover information, such as the secret or the pointer, from the obfuscated pointer?
SMT Analysis
The approach I use to analyse the patch is to represent the scrambling operation as a set of SMT constraints. I will then query the SMT solver to see if I can infer secret information.Here are the equations:
equations = [
ptr & ~0xfff == ptr_addr & ~0xfff,
# ptr == ptr_addr + 0x20,
ptr & 0xf == 0,
ptr_addr & 0xf == 0,
ptr_addr_swab_0 == (LShR(ptr_addr, 0) & 0xff) << 56,
ptr_addr_swab_1 == (LShR(ptr_addr, 8) & 0xff) << 48,
ptr_addr_swab_2 == (LShR(ptr_addr, 16) & 0xff) << 40,
ptr_addr_swab_3 == (LShR(ptr_addr, 24) & 0xff) << 32,
ptr_addr_swab_4 == (LShR(ptr_addr, 32) & 0xff) << 24,
ptr_addr_swab_5 == (LShR(ptr_addr, 40) & 0xff) << 16,
ptr_addr_swab_6 == (LShR(ptr_addr, 48) & 0xff) << 8,
ptr_addr_swab_7 == (LShR(ptr_addr, 56) & 0xff) << 0,
ptr_addr_swab == ptr_addr_swab_0 +
ptr_addr_swab_1 +
ptr_addr_swab_2 +
ptr_addr_swab_3 +
ptr_addr_swab_4 +
ptr_addr_swab_5 +
ptr_addr_swab_6 +
ptr_addr_swab_7,
stored_value == secret ^ ptr ^ ptr_addr_swab,
]
We will use some testing data that Kees Cook produced to go along with his kernel patch:
#ptr ptr_addr stored value secret
#ffff9eed6e019020@ffff9eed6e019000 is 793d1135d52cda42 (86528eb656b3b59d)
#ffff9eed6e019040@ffff9eed6e019020 is 593d1135d52cda22 (86528eb656b3b59d)
#ffff9eed6e019060@ffff9eed6e019040 is 393d1135d52cda02 (86528eb656b3b59d)
#ffff9eed6e019080@ffff9eed6e019060 is 193d1135d52cdae2 (86528eb656b3b59d)
#ffff9eed6e0190a0@ffff9eed6e019080 is f93d1135d52cdac2 (86528eb656b3b59d)
* The first thing we will query is can we recover the secret given only the obfuscated pointer?
The answer is No. Given only obfuscated pointer, there are a very large number of possible candidates for the secret. And there are no collisions where different secrets produce the correct result.
* The next thing we will ask, is if we have an infoleak of the pointer (ptr) and the obfuscated pointer (stored value), but not the ptr_addr, can we recover the secret?
The answer is yes. In the test data above, we can make some assumptions about ptr and ptr_addr. 1) Only the low 12 bits between them are different. 2) For this allocation pattern, since we are allocating fixed size chunks, then the very low bits to force a chunk alignment are zero.
If we ask our SMT solver what the secret is, given ptr and the stored value, there are 256 candidate secrets.
If we assume ptr_addr is offset by 0x20 to ptr, then we can come up with a single solution.
Your content that you have posted here is fantastic that will not confuse the person but surely impress and attract the readers. Your blog forces others to visit your website daily. The best part of your writing is that your work helps us in understanding the hardest things in just a simple and easy manner. It is such an unusual thing that you concise your writing in an effective way. afs global link login
ReplyDeleteHi admin... Extremely, this article is incredibly one of the most entirely great all through the entire nearness of articles. I am an antique 'Article' discoverer and I every so often read some new articles on the off chance that I discover them spellbinding. Also, I discovered this one absolutely interesting and it ought to go into my course of action. Generally phenomenal work. gogoanime
ReplyDeleteThe purpose of operating system hardening is to eliminate as many security risks as possible. As a cyber security company and ISO consultants in Mumbai, I found this information helpful. Great blog.
ReplyDeleteThe weakness in this approach was because ptr and ptr_addr were part of the same slab!! Free Backlink List
ReplyDeleteI wish you can explain it more further. Thanks
Deletecheck here
Great article by the great author, it is very massive and informative but still preaches the way to sounds like that it has some beautiful thoughts described so I really appreciate this article. Best interior gateway protocols service provider
ReplyDeletenice information...Good blog. If you want want know, more click here.
ReplyDeletekim kardashian wedding hair
lifestyle 5e
5e lifestyle
ReplyDeleteIt's very nice of you to share your knowledge through posts. I love to read stories about your experiences. They're very useful and interesting. I am excited to read the next posts. I'm so grateful for all that you've done. Keep plugging. Many viewers like me fancy your writing. Thank you for sharing precious information with us. linux cheat sheet commands
Big thank you for sharing this post its very knowledgeable and very helpful i hope that you will continue to post these kinds of contents in future apart from that if anyone looking for e accounting institute in delhi so Contact Here-+91-9311002620 Or Visit Website- https://www.htsindia.com/Courses/Tally/e-accounting-training-course
ReplyDeleteThis tool is able to identify programming errors like access to basement renovations atlanta ga
ReplyDeleteAppreciate you sharing this informative article. Thank you for sharing your thoughts. find a psychic near me
ReplyDeleteThis is a helpful synopsis! Thanks
ReplyDeletewww.complete-image.com/
Great blog. Glad to found it. foundation repair kansas city
ReplyDeleteThis is also my choice at all times.
ReplyDeletereplace social security card
This OS is so nostalgic and I guess if this works great these days, I'm surely be using it.
ReplyDeletecommercial window cleaning cincinnati ohio
Nice website. Concrete repair omaha
ReplyDeleteThis comment has been removed by the author.
ReplyDeleteThis comment has been removed by the author.
ReplyDeleteAppreciate you sharing this detailed educational article. Keep us posted!
ReplyDeletetravel nurse agency
Very nice blog, gotta love it mobile auto detailing west covina
ReplyDelete