» »

Nova resna ranljivost v Linux jedrih 2.4 in 2.6

1
2
»

Jean-Paul ::

V skriptu filmček pripne na konec executabla:

cat tzameti.avi >> ./exploit

Tukaj ta filmček prebere v buf:

file = fopen("/proc/self/exe", "r");
fseek(file, -VIDEO_SIZE, SEEK_END);
fread(buf, VIDEO_SIZE, 1, file);

Zgodovina sprememb…

denial ::

@OmegaBlue:
Ne drži popolnoma. Kernel je res patchan, SELinux pa ni torej, do naslednjega NULL ptr deref buga. >:D

AFAIK večina distribucij še ni objavila binarnih paketkov, mnogi Linux userji pa niso najbolj vešči kompajlanja kernela...

Skoraj ekvivalent situacije ko MSFT objavi popravek vendar ga uporabniki ne namestijo, nakar sledi masovno zgražanje in pljuvanje nad Microsoft, ko izbruhne should-be-patched-for-months-by-now Coficker. Welcome to the club, penguins...
SELECT finger FROM hand WHERE id=3;

Zgodovina sprememb…

  • spremenil: denial ()

Pyr0Beast ::

Skoraj ekvivalent situacije ko MSFT objavi popravek vendar ga uporabniki ne namestijo, nakar sledi masovno zgražanje in pljuvanje nad Microsoft, ko izbruhne should-be-patched-for-months-by-now Coficker. Welcome to the club, penguins...
Razlika je tudi v tem da si ti za en sistem plačal in lahko upravičeno pričakuješ odpravo napake v čimkrajšem času.
Some nanoparticles are more equal than others

Good work: Any notion of sanity and critical thought is off-topic in this place

fiction ::

Sploh ni štos v tem al je al ni. Sem mogu neki napisat kot večina linux fan boyov po drugih temah.
Sigh. Torej nisi nic boljsi kot oni.

Nič več jasno glede mmap_min_addr na Ubuntu. Zmeda totalna 8-O
Tudi meni ni. A je mozno, da je problem samo ce si upgradal z Ubuntu 6.10, 7.04 po korakih do 9.04 ali kaj takega. Ker tam se niso uporabljali mmap_min_addr. V 8.10 naj bi to ze bilo.

V skriptu filmček pripne na konec executabla:
cat tzameti.avi >> ./exploit
Hm ja, mas prav. Tiste shell skripte sploh nisem sel gledati. Zakaj zaboga bi kdo v executable na koncu dodal .avi file? Potem res s tisto kodo potegnes ven filmcek, ampak a ne bi bilo lazje, ce bi se kar skliceval na absoluten path od tzameti.avi?

Ne drži popolnoma. Kernel je res patchan, SELinux pa ni torej, do naslednjega NULL ptr deref buga. >:D
Napaka je odpravljena (prakticno gre za one liner) in tudi pri naslednjem NULL ptr deref bugu bo veliko tezje tovrstne napake izkoristiti zaradi ostalih popravkov v jedru. Edino SELinux zna biti se vedno "odskocna deska". Ceprav v bistvu ne gre za bug v implementaciji, problem je, kolikor razumem, v default konfiguraciji, ki omogoca mapiranje naslova 0. Torej so userji takorekoc sami krivi.

fiction ::

IMHO SELinux ne pripomore kar tako k varnosti. Vazno je, da administrator sam definira neko smiselno varnostno politiko. Drugace je kot bi rekel: account brez passworda je nevaren, pogledal nek primer na netu, spremenil password v tisto iz primera in rekel uh, zdaj sem pa varen, ceprav bi jasno se vedno (skoraj) vsak vedel geslo.

BTW: Zanimiv mitigation za RH EL
Ce to prav razumem, s tem samo "prepoves" oz. preprecis nalaganje modulov, ki implementirajo vulnerable protokol. Torej EL po defaultu sploh ni ranljiv dokler admin ne naredi npr. "modprobe bluetooth". Vecja modularnost je tu zelo koristna. Ali to narobe razumem in se ob npr. socket() lahko sam nalozi ustrezen modul za tisti protokol? No s tem workaroundom se zmeraj resis problem, samo to bi pomenilo da je EL vseeno vulnerable.

denial ::

Ceprav v bistvu ne gre za bug v implementaciji, problem je, kolikor razumem, v default konfiguraciji, ki omogoca mapiranje naslova 0. Torej so userji takorekoc sami krivi.


Are you serious??? Kajti v tem primeru so za ActiveX/Autoruns/non-LUA... buge krivi uporabniki sami, saj uporabljajo default konfiguracijo. Don't blame MSFT!!!

Pa še to, če ovveride LSM restrikcij ni dokumentiran s strani SELinux razvijalcev potem gre za bug. V nasprotnem je feature.
SELECT finger FROM hand WHERE id=3;

Zgodovina sprememb…

  • spremenil: denial ()

fiction ::

Sem poskusil pognati kot navaden user testni programcek, ki je naredil:
printf("%d\n", socket(PF_BLUETOOTH, SOCK_DGRAM, 0));
in bluetooth modul se je kar avtomaticno naloadal. Kako to tocno deluje?
S tistim v modprobe.conf je zadeva failala (sem dobil -1) in bluetooth se ni nalozill, niti kot root ni vec deloval /sbin/modprobe bluetooth. Torej, ce imas vse potencialno ranljive zadeve prevedene kot modul in jih ne rabis, lahko resis problem kar tako, da naredis rmmod in potem prepoves njegovo ponovno nalaganje.

fiction ::

Are you serious??? Kajti v tem primeru so za vse buge v IE/AX/Autoruns... krivi uporabniki, ki uporabljajo default konfiguracijo in ne MSFT.
Jah sej za nekaj stvari najbrz tudi so, ne pa za vse. V bistvu je to res precej dvorezen mec, default konfiguracija bi morala biti ok. Ampak po drugi strani bi pa npr. program tudi lahko enforcal tako kot to, da si user spremeni pass tudi to, da user res prebere konfiguracijo (i_read_the_config=true). Nekateri featurji imajo lahko precej hude dolgorocne posledice, ceprav so smiselni po defaultu. Razen ce bi bila default konfiguracija res OpenBSD style brez vsega zaradi varnosti.

Pa še to, če ovveride LSM restrikcij ni dokumentiran s strani SELinux razvijalcev potem gre za bug. V nasprotnem je feature.
True. Samo userjem v bistvu vseeno ni treba cakati na nek update programa, naceloma je problematicna samo dokumentacija in/ali privzete nastavitve.

karafeka ::

a@gentoo ~/wunderbar_emporium $ ./wunderbar_emporium.sh
[+] MAPPED ZERO PAGE!
unable to find a vulnerable domain, sorry

In kaj naj bi to pomenilo ?

a@gentoo ~/wunderbar_emporium $ uname -a
Linux gentoo 2.6.23-gentoo-r9 #6 Thu Jan 15 13:10:42 CET 2009 i686 Intel® Celeron™ CPU 1300MHz GenuineIntel GNU/Linux
a@gentoo ~/wunderbar_emporium $ cat /proc/sys/vm/mmap_min_addr
cat: /proc/sys/vm/mmap_min_addr: No such file or directory

Aja, nimam pulseaudio in ne sellinux.

Zgodovina sprememb…

  • spremenil: karafeka ()

Pithlit ::

a@gentoo ~/wunderbar_emporium $ ./wunderbar_emporium.sh
[+] MAPPED ZERO PAGE!
unable to find a vulnerable domain, sorry

In kaj naj bi to pomenilo ?

a@gentoo ~/wunderbar_emporium $ uname -a
Linux gentoo 2.6.23-gentoo-r9 #6 Thu Jan 15 13:10:42 CET 2009 i686 Intel® Celeron™ CPU 1300MHz GenuineIntel GNU/Linux
a@gentoo ~/wunderbar_emporium $ cat /proc/sys/vm/mmap_min_addr
cat: /proc/sys/vm/mmap_min_addr: No such file or directory

Aja, nimam pulseaudio in ne sellinux.


Saj jaz tudi ne. Nimam SELinux, nimam PulseAudio, nimam /proc/sys/vm/mmap_min_addr... pa so rekli da imam (pre)star kernel... pa se izkaže da imam novejšega kot ti (2.6.25). In exploit deluje.

Sklepam da so tile pogoji bolj fuzzy kot so ljudje mislili. Nekako mislim da je tukaj še nekaj kar pač dela galamo pa še noben ni najdu. Imam pa mplayer... mogoče pa, glede na to da mplayer ni lih najbol secure, je to en faktor ki ga je treba upoštevat?
Life is as complicated as we make it...

fiction ::

a@gentoo ~/wunderbar_emporium $ ./wunderbar_emporium.sh
[+] MAPPED ZERO PAGE!
unable to find a vulnerable domain, sorry

In kaj naj bi to pomenilo ?
To pomeni afaik, da nimas supporta za noben protokol, ki pusti pointer po nesreci na NULL. Torej ne v jedru, ne kot modul nimas bluetooth, ipx, x25, scpt itd. podpore oz. imas eksplicitno prepovedano nalaganje teh modulov. Page 0 se je dal mapirati, kar pomeni, da bi se dal exploitati kaksen NULL pointer deref bug. Tudi tvoje jedro je naceloma ranljivo, ampak ranljiva koda se sploh ne uporablja (najbrz sploh ni prevedena) in si zato varen.
Iz exploit.c:
const int domains[][3] = { { PF_APPLETALK, SOCK_DGRAM, 0 },
        {PF_IPX, SOCK_DGRAM, 0 }, { PF_IRDA, SOCK_DGRAM, 0 },
        {PF_X25, SOCK_DGRAM, 0 }, { PF_AX25, SOCK_DGRAM, 0 },
        {PF_BLUETOOTH, SOCK_DGRAM, 0 }, { PF_IUCV, SOCK_STREAM, 0 },
        {PF_INET6, SOCK_SEQPACKET, IPPROTO_SCTP },
        {PF_PPPOX, SOCK_DGRAM, 0 },
        {PF_PPPOX, SOCK_DGRAM, PX_PROTO_OL2TP },
        {DOMAINS_STOP, 0, 0 }
        };

Pithlit: Ne, mplayer nima nobene veze. Uporablja se samo za tisti (lame) ASCII art show. Exploit bi delal tudi brez tega. Ce nimas mmap_min_addr
potem se da izkoriscati brez cesar koli NULL pointer dereference buge. Drugo vprasanje pa je, ce sploh uporabljas kodo, ki je ranljiva.

Zgodovina sprememb…

  • spremenil: Primoz ()

zee ::

@denial: ne vem, ce deluje. na moji instalaciji ne deluje, verjetno tudi zato, ker sem obtical sredi nadgradnje in je nisem imel se casa dokoncati.

:-/
zee
Linux: Be Root, Windows: Re Boot
Giant Amazon and Google Compute Cloud in the Sky.

Pithlit ::

Pithlit: Ne, mplayer nima nobene veze. Uporablja se samo za tisti (lame) ASCII art show. Exploit bi delal tudi brez tega. Ce nimas mmap_min_addr
potem se da izkoriscati brez cesar koli NULL pointer dereference buge. Drugo vprasanje pa je, ce sploh uporabljas kodo, ki je ranljiva.


Že, že... ampak. Imam več ali manj enak setup kot karafeka. Noben od naju nima SELinux ali PulseAudio, noben od naju nima /proc/sys/vm/mmap_min_addr. Jaz sem exploitable, on pa ne. Torej tile pogoji niso edini. Lahko je sicer kakšna razlika med 2.6.23 in 2.6.25, ampak tudi to je že nek drugi pogoj, ki ni 'dokumentiran'.

*edit* To... ali pa ta exploit example izrablja še kak drug bug in doseže isti rezultat.
Life is as complicated as we make it...

Zgodovina sprememb…

  • spremenila: Pithlit ()

fiction ::

Jaz sem exploitable, on pa ne.
Oba sta teoreticno exploitable, samo on ni vulnerable, ker nima prevedenih ranljivih zadev. Torej, ce bi on hotel uporabljati npr. bluetooth (druge zadeve so bolj eksoticne ampak se vedno po vecini po defaultu prisotne), bi si moral prevesti kernel modul in ga naloziti. Kakor hitro bi to naredil, bi bil tudi on vulnerable. Da se da bug izkoristiti je pa ze znano, ker lahko mmap()-as page 0. Ce se to ne bi dalo sta se PulseAudio in SELinux.

Ranljiva (torej da imajo napako) so pa vsa Linux jedra, ne glede na karkoli. Edina sreca, ki jo lahko imas je pac da tistih delov, ki so ranljivi pri sebi ne uporabljas. Lahko da je to zaradi distribucije. Samo po drugi strani pa to tudi pomeni komplikacije, ce hoces npr. uporabiti bluetooth. Na drugih distribucijah imas ze preveden modul, ki se avtomatsko nalozi, ko ga rabis. Tam lahko eksplicitno v modprobe.conf prepoves tisti modul pa si tudi resil zadevo, pri njemu pa sploh ni modula!

karafeka ::

Ja, jaz sem si sam prevedel kernel in sem zadeve, ki jih nimam izključil (kar pomenil, da nimam podpore za bluetooth (in ostale "domene" v exploit.c) niti v kernelu niti kot modul).

zee ::

Amen.
zee
Linux: Be Root, Windows: Re Boot
Giant Amazon and Google Compute Cloud in the Sky.

Pithlit ::

Ja, jaz sem si sam prevedel kernel in sem zadeve, ki jih nimam izključil (kar pomenil, da nimam podpore za bluetooth (in ostale "domene" v exploit.c) niti v kernelu niti kot modul).


Hja... enako... no, vsaj v grobem. Bomo pa malo bolj podrobno pogledal ko bootnem škatlo, pa 'poročam' kasneje.
Life is as complicated as we make it...

Bistri007 ::

Kot berem te ranljivosti nastanejo pri uporabi večinoma uporabniških programov (mplayer, bluetooh), torej so serverji varni?
Največja napaka desetletja je bila narejena 4. novembra 2008
Oni so goljufali in Alah je goljufal, Alah je najboljši prevarant. (Koran 3:54)
Citiraj svetega očeta Benedikta XVI. in postani "persona rudis"...

fiction ::

Kot berem te ranljivosti nastanejo pri uporabi večinoma uporabniških programov (mplayer, bluetooh), torej so serverji varni?
Narobe beres :) In ne, serverji niso nujno varni. Mplayer nima nobene veze z ranljivostjo, niti nima noben uporabniski program.

Problem je v bistvu v sendfile() sistemskem klicu oz. bolj podrobno v sock_sendpage(). Pri raznih protokolih lahko povzrocis, da se ops ne nastavi kot bi bilo treba, ampak ostane NULL. Ko poklices sendfile() nad takim socketom pride do dereferenciranja NULL pointerja. Sicer je res, da so to bolj eksoticne zadeve, ampak ponavadi imajo GENERIC kerneli od distribucij vse stvari prevedene kot modul. Se pravi tudi ce nimas dejansko bluetooth strojne opreme, bluetooth socket lahko ustvaris (kernel module se takrat avtomatsko naloada). Pa to ni edini primer s katerim lahko zafrknes sock_sendpage().

Ranljiv nisi takrat, ce si sam poskrbel za prevajanje kernela in teh stvari nisi vkljucil ne v jedro niti ne kot modul (oz. si potem eksplicitno prepovedal nalaganje le-tega).

Kdaj ta issue lahko izkoristis je pa spet druga zgodba. Tu imas, ce uporabljas novejse jedro z mmap_min_addr nastavljeno na > 0 in nimas defaultno skonfiguriranega SELinuxa prednost.

Zgodovina sprememb…

  • spremenil: fiction ()

denial ::

Fedora 11...



Zakaj potem tole? PAE enforcing ;)
SELECT finger FROM hand WHERE id=3;

Zgodovina sprememb…

  • zavarovalo slike: gzibret ()

Pithlit ::

Meh... IRDA domain zgleda dela drmr kle... oh ja, bomo porihtal ob priliki.
Life is as complicated as we make it...

Jst ::

openSuse64, default install.

kernel 2.6.27.7-9-default;
mmap_min_addr 0.

./wunderbar_emporium.sh: line 20: ./exploit: Permission denied
Islam is not about "I'm right, you're wrong," but "I'm right, you're dead!"
-Wole Soyinka, Literature Nobelist
|-|-|-|-|Proton decay is a tax on existence.|-|-|-|-|

Jst ::

Zakaj pa meni javi permission denied? Prvo sem mislil, da zato, ker imam 64bitno verzijo, a sem ravnokar prebral, da bi exploit moral normalno delovati.
Islam is not about "I'm right, you're wrong," but "I'm right, you're dead!"
-Wole Soyinka, Literature Nobelist
|-|-|-|-|Proton decay is a tax on existence.|-|-|-|-|

karafeka ::

daj pravice za zagon exploit.c uprabniku s katerim zaganjaš skripto.
Verjetno si snemal dol s drugim uporabnikom, kot pa zdaj ko zaganjaš.
1
2
»


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

Še ena ranljivost v Linux jedru

Oddelek: Novice / Varnost
284400 (3341) fiction
»

Nova resna ranljivost v Linux jedrih 2.4 in 2.6 (strani: 1 2 )

Oddelek: Novice / Varnost
7310513 (7911) karafeka
»

Linux varnost (strani: 1 2 )

Oddelek: Informacijska varnost
557102 (5642) fiction
»

Na BlackHatu prikazano kako zaobiti Microsoftovo 'killbit' zaščito

Oddelek: Novice / Varnost
73641 (2711) denial
»

Nice summer reading

Oddelek: Informacijska varnost
172427 (1864) poweroff

Več podobnih tem