c00kiemon5ter έγραψε:agreed
btw
ksplice works!

Οf course it works...και μιλάμε για ένα απλό null ptr dereference! Oποιοσδήποτε pointer εάν ξεφύγει κάποια στιγμή μέσα σε αυτό το μπάχαλο του kernel, μπορεί potentially να γίνει exploited. Μιας και το ξεκινήσαμε, υπάρχουν πολλοί τρόποι να κάνεις nullify έναν pointer. Στην πράξη αυτό που γίνεται ένα ότι ο attacker κάνει control ένα
indirect jump/call. Εάν έχεις κάτι σαν
jmp %eax ή
call *(%ebx) και έχεις καταφέρει να κάνεις control τα περιεχόμενα του eax/ebx, τότε έκανες τον kernel, κοινώς ένα privileged code path, να κάνεις jump όπου θέλεις. Τώρα το όλο θέμα είναι πως κάνεις control έναν register ή τον operand του indirect branch. Είτε με use-after-free bugs, race conditions που κάνουν nullify έναν ptr, καλώντας ένα syscall με offending arguments ώστε να "οδηγήσεις" τον kernel να κάνει deref ένα null ptr...etc. My favorite είναι το εξής. Έστω ότι έχεις ένα null
data ptr, σε ένα structure που έχει μέσα ένα function pointer ή κάτι που κάνει influence το final brunch target. Σε αυτή την περίπτωση βάζεις το δικό σου tampered data structure στην κατάλληλη θέση (πχ page zero ή όπου αλλού πρέπει), το γεμίζεις με ένα function pointer που δείχνει πάλι σε δικό σου code, και κάλεις τον kernel (κάνεις το κατάλληλο syscall) ώστε να κάνει deref εκείνο το null data pointer. Η data structure είναι controlled απο εσένα, και τελικά o kernel κάνει branch εκεί που θέλεις.
Anw, έχω κάνει λίγο δουλειά και εγώ σε τέτοια θέματα. Ίσως εάν έρθω τον Sept να κανονίσουμε κανένα talk.