>Nulu uvidíte na většině systémů mající něco společného s Red Hatem (RHEL, CentOS, Fedora) případně s Novellem (SLES, openSUSE)
openSUSE 11.1 jadro 2.6.27.37 chyba nie je vid vypis…
cat /proc/sys/vm/mmap_min_addr
65536
peto@fodrek:~/Documents/Drazdany/Drazdany/plazma> uname -a
Linux fodrek 2.6.25.16–0.1-default #1 SMP 2009–10–15 14:56:58 +0200 x86_64 x86_64 x86_64 GNU/Linux
more /boot/grub/menu.lst
# Modified by YaST2. Last modification on Mon Nov 9 15:04:23 CET 2009
# THIS FILE WILL BE PARTIALLY OVERWRITTEN by perl-Bootloader
# Configure custom boot parameters for updated kernels in /etc/sysconfig/bootloader
default 3
timeout 8
gfxmenu (hd0,5)/boot/message
###Don't change this comment – YaST2 identifier: Original name: linux###
title Desktop – openSUSE 11.1 – 2.6.32-rc6–15
root (hd0,5)
kernel /boot/vmlinuz-2.6.32-rc6–15-desktop root=/dev/disk/by-id/scsi-SATA_WDC_WD2500YS-01_WD-WCANY3077952-part6 resume=/d
ev/disk/by-id/ata-WDC_WD2500YS-01SHB1_WD-WCANY3077952-part5 splash=silent showopts vga=0×31a
initrd /boot/initrd-2.6.32-rc6–15-desktop
........
###Don't change this comment – YaST2 identifier: Original name: linux###
title openSUSE 11.1 – 2.6.27.37–0.1 (default)
root (hd0,5)
kernel /boot/vmlinuz-2.6.27.37–0.1-default root=/dev/disk/by-id/scsi-SATA_WDC_WD2500YS-01_WD-WCANY3077952-part6 resume=/d
ev/disk/by-id/ata-WDC_WD2500YS-01SHB1_WD-WCANY3077952-part5 splash=silent showopts vga=0×31a
initrd /boot/initrd-2.6.27.37–0.1-default
.......
###Don't change this comment – YaST2 identifier: Original name: linux###
title Ec2 – openSUSE 11.1 – 2.6.27.37–0.1
root (hd0,5)
kernel /boot/vmlinuz-2.6.27.37–0.1-ec2 root=/dev/disk/by-id/scsi-SATA_WDC_WD2500YS-01_WD-WCANY3077952-part6 resume=/dev/d
isk/by-id/ata-WDC_WD2500YS-01SHB1_WD-WCANY3077952-part5 splash=silent showopts vga=0×31a
initrd /boot/initrd-2.6.27.37–0.1-ec2
###Don't change this comment – YaST2 identifier: Original name: linux###
title Rt – openSUSE 11.1 – 2.6.31-rc8-rt9–10
root (hd0,5)
kernel /boot/vmlinuz-2.6.31-rc8-rt9–10-rt root=/dev/disk/by-id/scsi-SATA_WDC_WD2500YS-01_WD-WCANY3077952-part6 resume=/de
v/disk/by-id/ata-WDC_WD2500YS-01SHB1_WD-WCANY3077952-part5 splash=silent showopts vga=0×31a
initrd /boot/initrd-2.6.31-rc8-rt9–10-rt
Tak se mi stalo něco horšího… něco ten soubor přepisuje při restartu a háže tam 0.
Vždy tam napíšu 4096, buď vypnu nebo restartuju a po přihlášení do konzole je tam 0. Jelikož mi systém nabíhá do konzole, ze které pak spouštím GDM, tak to přepisuje něco co se nastaruje během nabíhání nebo při přihlášení.
Lze nějak zjistit, který proces k tomu souboru přistupoval?
Neni tohle nahodou ta dira, ktera je i s exploitem znama z poloviny srpna (http://blog.cr0.org/…-due-to.html) a byla jiz v te dobe diskutovana, tusim i tady na rootu?
Reseni tehdy pokud vim spocivalo v nastaveni vm.mmap_min_addr = 4096 coz by odpovidalo popsane chybe. Nebo se jedna o neco noveho se stejnym resenim?
Ale tohle je nedorozumění – nulová stránka v žádném případě není součástí jádra. Dále, jádro se do paměťového prostoru aplikací mapuje i na jiných architekturách – ne proto, aby aplikace mohla přistupovat k jádru, ale naopak, aby jádro mohlo přistupovat k paměti aplikace. Ne, že by to nešlo jinak (i na 32bitu), viz např. 4G/4G patch, ale je to takový opruz, že se vám na to programátoři víte co… Například na MIPSu je rozdělení paměti dokonce zadrátované v architektuře.
Zabránit, aby jádro spouštělo kód z userspace, by šlo i na x86, ale zas to má svá ale.
Doporucuji napred se vzdelavat, testovat a pak odpovidat. Pak se nestane, ze ze sebe udelate osla ;-)
Linux mel toto jen jako option a ne jako opravu, takze default bylo nula. I kdyz to ted ma nastavane, tak staci stupidne napsany program (Wine), Pulseaudio (Ubuntu 8.04, 8.10 a kdovi kde jeste) a je to zpatky na nule a navic nektere distra to maji porad na nule. Takze to, ze Linus zacne tvrdit, ze ma nejakou opravu a pritom staci nainstalovat nejaky program aby se to znova zmenilo zpatky na nulu nepovazuji lide co tomu rozumi za opravu ;-) Oprava je neco takoveho, ze uz se s predchozim problemem nesetkate, coz neni v pripade Linuxu pravda. Navic ti co tu chybu zkoumali zjistili, ze RedHat (Fedora,…) se sice tvari jako ze tu volby ma zapnutou, ale skutecnost je uplne jina ;-) OpenBSD zkoumalo skoro dva roky jak tu opravu udelat tak, aby to bylo pouzitelne, bezpecne a neovlivnilo to ostatni programy. Timhle se Linux nezabyval a tezko nekdy bude, protoze si nemuze dovolit to opravit poradne.
Výsledek na Debian 5.0 (Lenny) s vlastně sestavovaným jadrem:
hulka@Axson:~$ uname -srm
Linux 2.6.29.6 x86_64
hulka@Axson:~$ cat /proc/sys/vm/mmap_min_addr
0
hulka@Axson:~$
Poslední dobou se chyby v linuxovém jádře objevují jak houby po dešti. Začínám být rozpačitý … je to dobře nebo špatně?
Otazka zni jestli se objevuji, nebo jsou tam pridavane.
Jestli je to stara chyba, ktera se objevi, tak je to myslim dobre, i kdyz ty updaty kernelu jsou docela otravne.
Jestli tam pridavaji nove a nove, tak je to spatne. :) Alespon pro mne, vzhledem k tomu ze aktualne umi kernel vse co potrebuji, takze mne osobne dalsi vyvoj nechybi. :P
Jde jen o politováníhodné opomenutí několika package mainteinerů. Je to o tom, že když člověk rozbalí zdrojáky nového kernelu, dělá make oldconfig a ono se ho to ptá na něco, o čem nemá ani páru, tak by neměl odentrovat defaultní 0, ale třísknout do otazníku a přečíst si, že:
CONFIG_DEFAULT_MMAP_MIN_ADDR:
This is the portion of low virtual memory which should be protected
from userspace allocation. Keeping a user from writing to low pages
can help reduce the impact of kernel NULL pointer bugs.
For most ia64, ppc64 and x86 users with lots of address space
a value of 65536 is reasonable and should cause no problems.
On arm and other archs it should not be higher than 32768.
Programs which use vm86 functionality or have some need to map
this low address space will need CAP_SYS_RAWIO or disable this
protection by setting the value to 0.
This value can be changed after boot using the
/proc/sys/vm/mmap_min_addr tunable.
…
Každý normální člověk, tam po přečtení tohodle přece na ia64/ppc64/x86 dá buď 65536 nebo číslo, které mu z nějakého důvodu příjde ještě lepší.
docela by me zajimalo odkud se vzala ta informace o /proc/sys/vm/mmap_min_addr na tom linkovanem blogu.
sedim tady na dosud nepatchnutem gentoo-cku s 2.6.30-r6 a ze zabavy jsem zkusil stahnout prvni exploit pro CVE-2009–3547 na ktery jsem na webu narazil a nestih jsem se divit:
$ cat /proc/sys/vm/mmap_min_addr
4096
$ whoami
domuize
$ gcc ImpelDown-2.6.31only.c -o imp
$ ./imp
$ whoami
root
je to prosim nekdo schopny reprodukovat?
pavel