Linux

Teszt tippek a 2.6.0-test6-hoz (új scheduler)

Címkék

Mint azt az előző cikkben olvashattad, megjelent a 2.6.0-test6 Linux kernel, amelynek a legérdekesebb pontja talán Con Kolivas ütemező tuningja. Többször Con szemére hányták a kernel listán, hogy az interaktivitás mértékét jól mutató "audio ugrás" (audio skip teszt: a fejlesztők az utóbbi időben úgy tesztelték az ütemezőt, hogy kernelt fordítottak több szálon, és közben xmms-sel audiót hallgattak. Ha az mp3 lejátszás nem "ugrott" akkor a teszt sikerült) teszt rossz eredményeket hoz a Con féle tuninggal, azaz skip-el az audio lejátszás.

Az ok:

Az új ütemező úgy lett tervezve, hogy megmondja a különbséget az azonos "nice" szinten futó taskok között. Ez azt jelenti, hogy nem szabad az X szervert "renice"-olni -10 értékre anélkül, hogy mondjuk az Xmms-t ne "renice"-olnánk -10-re. A skip oka az, hogy egyes Linux disztribútorok úgy szállítják a rendszereiket, hogy az X szerver -10 "nice" értékkel fut (Pl. Debian), viszont az Xmms 0 "nice"-al indul. Ennek az az oka, hogy a 2.4-es kernel régi ütemezője még nem kezeli különbözően az egyenlő "nice" szinteket, ellenben az új ütemező már igen.

Magyarul: ha nem akarsz fals eredményeket kapni a 2.6.0-test6 új ütemezőjével, akkor ellenőrizd az alábbiakat:1.) nézd meg hogy az X nem fut-e -10 "nice"-on (ha igen akkor "renice"-old 0-ra)

2.) néhány shell +5-ös "nice" értékkel származtatja a processzeit, így az audio alkalmazások ezt megszenvedik

3.) ellenőrizd, hogy a merevlemezed, grafikus kártyád és a hangkártyád úgy működik-e, mint a 2.4-es kernellel működött (azaz a DMA működik-e, a grafika gyorsított-e, stb.)

Csak ezután bugreportolj a fejlesztőknek az audio teljesítményről.

Con Kolivas levele itt.

Linus Torvalds: Linux 2.6.0-test6

Címkék

"Ok, túl sok idő telt el a test5 és a test6 között újra, így a patch szép nagy. Sok driver frissült és sok architektúra javult, de sok kód érkezett Andrew Morton-tól is. A legemlítésreméltóbbak talán Con [Kolivas] ütemező változtatásai..."

Úgy néz ki, hogy Linus beolvasztotta Con Kolivas interaktivitást segítő ütemező tuningját. Szeptember elején még kérdéses volt, hogy melyik scheduler lesz a végleges 2.6.0 kernelben. Most úgy tűnik, hogy Molnár Ingo-féle O(1) ütemező + a Con Kolivas-féle tuning páros a nyerő."Szintén helyet kapott benne a 2.6.0 "must-fix" listájának egyik utolsó tagja is: a kiterjesztett 32-bit dev_t támogatás..."

"arm, s390, ia64, x86-64, és ppc64 frissítések. USB, pcmcia és i2c stuff. És egy nagy rész kódtisztítás."

Letölthető patch-2.6.0-test6.bz2, FULL

Linus levele, benne a változások listája itt.

Exec-shield vs. paxtest & libsafe

Címkék

Handler javaslatára teszteltem az exec-shield patchet (lásd előző cikk) két tesztprogrammal. A tesztprogramok a libsafe-2.0-16 és a paxtest-0.9.1 voltak. Az eredmények érdekesek. Lássuk a teszteket:

===========================================

sunshine:/home/trey/exec/libsafe-2.0-16/exploits# echo "2" > /proc/sys/kernel/exec-shield

sunshine:/home/trey/exec/libsafe-2.0-16/exploits# cat /proc/sys/kernel/exec-shield

2

===========================================

libsafe-2.0-16 (exec-shield teljes védelem):

---------------------------------------------------------------------

trey@sunshine:~/exec/libsafe-2.0-16/exploits$ ./canary-exploit

This program tries to use printf("%n") to overwrite the

return address on the stack.

If you get a /bin/sh prompt, then the exploit has worked.

Press any key to continue...

sh-2.05b$ exit

exit

trey@sunshine:~/exec/libsafe-2.0-16/exploits$

---------------------------------------------------------------------

---------------------------------------------------------------------

trey@sunshine:~/exec/libsafe-2.0-16/exploits$ ./exploit-non-exec-stack

This program demonstrates how a (stack) buffer overflow

can attack linux kernels with *non-executable* stacks.

This is variation on return-int-libc attack.

If you get a /bin/sh prompt, then the exploit has worked.

Press any key to continue...

sh-2.05b$ exit

exit

trey@sunshine:~/exec/libsafe-2.0-16/exploits$

---------------------------------------------------------------------

---------------------------------------------------------------------

trey@sunshine:~/exec/libsafe-2.0-16/exploits$ ./t1

This program tries to use strcpy() to overflow the buffer.

If you get a /bin/sh prompt, then the exploit has worked.

Press any key to continue...

Szegmens hiba

trey@sunshine:~/exec/libsafe-2.0-16/exploits$

---------------------------------------------------------------------

---------------------------------------------------------------------

trey@sunshine:~/exec/libsafe-2.0-16/exploits$ ./t1w

This program tries to use strcpy() to overflow the buffer.

If you get a /bin/sh prompt, then the exploit has worked.

Press any key to continue...

Szegmens hiba

trey@sunshine:~/exec/libsafe-2.0-16/exploits$

---------------------------------------------------------------------

---------------------------------------------------------------------

trey@sunshine:~/exec/libsafe-2.0-16/exploits$ ./t3

This program will exec() a new program. The new program will

overflow the buffer using strcpy().

If you get a /bin/sh prompt, then the exploit has worked.

Press any key to continue...

Szegmens hiba

trey@sunshine:~/exec/libsafe-2.0-16/exploits$

---------------------------------------------------------------------

---------------------------------------------------------------------

trey@sunshine:~/exec/libsafe-2.0-16/exploits$ ./t3w

This program will exec() a new program. The new program will

overflow the buffer using strcpy().

If you get a /bin/sh prompt, then the exploit has worked.

Press any key to continue...

Szegmens hiba

trey@sunshine:~/exec/libsafe-2.0-16/exploits$

---------------------------------------------------------------------

---------------------------------------------------------------------

trey@sunshine:~/exec/libsafe-2.0-16/exploits$ ./t4

This program will fork() child process, and the child

will overflow the buffer using strcpy().

If you get a /bin/sh prompt, then the exploit has worked.

Press any key to continue...

parent process terminating

trey@sunshine:~/exec/libsafe-2.0-16/exploits$

---------------------------------------------------------------------

---------------------------------------------------------------------

trey@sunshine:~/exec/libsafe-2.0-16/exploits$ ./t4w

This program will fork() child process, and the child

will overflow the buffer using strcpy().

If you get a /bin/sh prompt, then the exploit has worked.

Press any key to continue...

parent process terminating

trey@sunshine:~/exec/libsafe-2.0-16/exploits$

---------------------------------------------------------------------

---------------------------------------------------------------------

trey@sunshine:~/exec/libsafe-2.0-16/exploits$ ./t5

This program tries to use strcat() to overflow the buffer.

If you get a /bin/sh prompt, then the exploit has worked.

Press any key to continue...

Szegmens hiba

trey@sunshine:~/exec/libsafe-2.0-16/exploits$

---------------------------------------------------------------------

---------------------------------------------------------------------

trey@sunshine:~/exec/libsafe-2.0-16/exploits$ ./t6

This program tries to use scanf() to overflow the buffer.

If you get a /bin/sh prompt, then the exploit has worked.

Press any key to continue...

Szegmens hiba

trey@sunshine:~/exec/libsafe-2.0-16/exploits$

---------------------------------------------------------------------

===========================================

sunshine:/home/trey/exec/libsafe-2.0-16/exploits# echo "0" > /proc/sys/kernel/exec-shield

sunshine:/home/trey/exec/libsafe-2.0-16/exploits# cat /proc/sys/kernel/exec-shield

0

===========================================

libsafe-2.0-16 (exec-shield kikapcsolva):

---------------------------------------------------------------------

trey@sunshine:~/exec/libsafe-2.0-16/exploits$ ./canary-exploit

This program tries to use printf("%n") to overwrite the

return address on the stack.

If you get a /bin/sh prompt, then the exploit has worked.

Press any key to continue...

sh-2.05b$ exit

exit

trey@sunshine:~/exec/libsafe-2.0-16/exploits$

---------------------------------------------------------------------

---------------------------------------------------------------------

trey@sunshine:~/exec/libsafe-2.0-16/exploits$ ./exploit-non-exec-stack

This program demonstrates how a (stack) buffer overflow

can attack linux kernels with *non-executable* stacks.

This is variation on return-int-libc attack.

If you get a /bin/sh prompt, then the exploit has worked.

Press any key to continue...

sh-2.05b$ exit

exit

trey@sunshine:~/exec/libsafe-2.0-16/exploits$

---------------------------------------------------------------------

---------------------------------------------------------------------

trey@sunshine:~/exec/libsafe-2.0-16/exploits$ ./t1

This program tries to use strcpy() to overflow the buffer.

If you get a /bin/sh prompt, then the exploit has worked.

Press any key to continue...

sh-2.05b$ exit

exit

trey@sunshine:~/exec/libsafe-2.0-16/exploits$

---------------------------------------------------------------------

---------------------------------------------------------------------

trey@sunshine:~/exec/libsafe-2.0-16/exploits$ ./t1w

This program tries to use strcpy() to overflow the buffer.

If you get a /bin/sh prompt, then the exploit has worked.

Press any key to continue...

sh-2.05b$ exit

exit

trey@sunshine:~/exec/libsafe-2.0-16/exploits$

---------------------------------------------------------------------

---------------------------------------------------------------------

trey@sunshine:~/exec/libsafe-2.0-16/exploits$ ./t3

This program will exec() a new program. The new program will

overflow the buffer using strcpy().

If you get a /bin/sh prompt, then the exploit has worked.

Press any key to continue...

sh-2.05b$ exit

exit

You have new mail in /var/mail/trey

trey@sunshine:~/exec/libsafe-2.0-16/exploits$

---------------------------------------------------------------------

---------------------------------------------------------------------

trey@sunshine:~/exec/libsafe-2.0-16/exploits$ ./t3w

This program will exec() a new program. The new program will

overflow the buffer using strcpy().

If you get a /bin/sh prompt, then the exploit has worked.

Press any key to continue...

sh-2.05b$ exit

exit

trey@sunshine:~/exec/libsafe-2.0-16/exploits$

---------------------------------------------------------------------

---------------------------------------------------------------------

trey@sunshine:~/exec/libsafe-2.0-16/exploits$ ./t4

This program will fork() child process, and the child

will overflow the buffer using strcpy().

If you get a /bin/sh prompt, then the exploit has worked.

Press any key to continue...

sh-2.05b$ exit

exit

parent process terminating

trey@sunshine:~/exec/libsafe-2.0-16/exploits$

---------------------------------------------------------------------

---------------------------------------------------------------------

trey@sunshine:~/exec/libsafe-2.0-16/exploits$ ./t5

This program tries to use strcat() to overflow the buffer.

If you get a /bin/sh prompt, then the exploit has worked.

Press any key to continue...

sh-2.05b$ exit

exit

trey@sunshine:~/exec/libsafe-2.0-16/exploits$

---------------------------------------------------------------------

---------------------------------------------------------------------

trey@sunshine:~/exec/libsafe-2.0-16/exploits$ ./t6

This program tries to use scanf() to overflow the buffer.

If you get a /bin/sh prompt, then the exploit has worked.

Press any key to continue...

sh-2.05b$ exit

exit

trey@sunshine:~/exec/libsafe-2.0-16/exploits$

---------------------------------------------------------------------

Eredmény: bekapcsolt exec-shiled-del 10-ből 8 esetben nem adtak shell-t az exploitok, "csak" segfaultoltak. Kikapcsolt exec-shield-del 10 alkalomból 10-szer adtak shellt.


*************************************************

===========================================

sunshine:/home/trey/exec/paxtest-0.9.1# echo "2" > /proc/sys/kernel/exec-shield

sunshine:/home/trey/exec/paxtest-0.9.1# cat /proc/sys/kernel/exec-shield

2

===========================================

paxtest-0.9.1 (exec-shield bekapcsolva):

trey@sunshine:~/exec/paxtest-0.9.1$ ./paxtest

It may take a while for the tests to complete

Test results:

Executable anonymous mapping : Killed

Executable bss : Vulnerable

Executable data : Vulnerable

Executable heap : Killed

Executable stack : Killed

Executable anonymous mapping (mprotect) : Killed

Executable bss (mprotect) : Vulnerable

Executable data (mprotect) : Vulnerable

Executable heap (mprotect) : Vulnerable

Executable shared library bss (mprotect) : Vulnerable

Executable shared library data (mprotect): Vulnerable

Executable stack (mprotect) : Vulnerable

Anonymous mapping randomisation test : 8 bits (guessed)

Heap randomisation test (ET_EXEC) : 13 bits (guessed)

Heap randomisation test (ET_DYN) : 13 bits (guessed)

Main executable randomisation (ET_EXEC) : No randomisation

Main executable randomisation (ET_DYN) : 12 bits (guessed)

Shared library randomisation test : 12 bits (guessed)

Stack randomisation test (SEGMEXEC) : 17 bits (guessed)

Stack randomisation test (PAGEEXEC) : 17 bits (guessed)

Return to function (strcpy) : Vulnerable

Return to function (memcpy) : Vulnerable

Executable shared library bss : Vulnerable

Executable shared library data : Vulnerable

Writable text segments : Vulnerable

===========================================

sunshine:/home/trey/exec/paxtest-0.9.1# echo "0" > /proc/sys/kernel/exec-shield

sunshine:/home/trey/exec/paxtest-0.9.1# cat /proc/sys/kernel/exec-shield

0

===========================================

paxtest-0.9.1 (exec-shield kikapcsolva):

trey@sunshine:~/exec/paxtest-0.9.1$ ./paxtest

It may take a while for the tests to complete

Test results:

Executable anonymous mapping : Vulnerable

Executable bss : Vulnerable

Executable data : Vulnerable

Executable heap : Vulnerable

Executable stack : Vulnerable

Executable anonymous mapping (mprotect) : Vulnerable

Executable bss (mprotect) : Vulnerable

Executable data (mprotect) : Vulnerable

Executable heap (mprotect) : Vulnerable

Executable shared library bss (mprotect) : Vulnerable

Executable shared library data (mprotect): Vulnerable

Executable stack (mprotect) : Vulnerable

Anonymous mapping randomisation test : No randomisation

Heap randomisation test (ET_EXEC) : No randomisation

Heap randomisation test (ET_DYN) : No randomisation

Main executable randomisation (ET_EXEC) : No randomisation

Main executable randomisation (ET_DYN) : No randomisation

Shared library randomisation test : No randomisation

Stack randomisation test (SEGMEXEC) : No randomisation

Stack randomisation test (PAGEEXEC) : No randomisation

Return to function (strcpy) : Vulnerable

Return to function (memcpy) : Vulnerable

Executable shared library bss : Vulnerable

Executable shared library data : Vulnerable

Writable text segments : Vulnerable

Eredmény: a bekapcsolt exec-shield 4 exploitot "killelt" ki, míg kikapcsolt állapotban az összes teszt sebezhetőséget mutatott.


A tesztek azt igazolják, hogy van értelme patchelni a kernelt az exec-shield-del, hiszen negatív következménye nincs (vagy még nem jött elő), viszont néhány exploittal szemben hatékony lehet.

Tapasztalatok II: Exec Shield for Linux/x86

Címkék

Május közepén készítettem egy összefoglalást Mingo akkor megjelent exec-shield patchével kapcsolatban. Akkor nem voltak a legjobbak a tapasztalataim. A programok nagy része nem működött, és még filerendszer korrupciós hibák is adódtak, amit hajlamos voltam a patch számlájára írni. Most - tekinetettel az elmúlt napok b0f és patch fesztiváljára - Ingo kiadta az exec-shield patch legújabb verzióit a 2.4 és 2.6 kernelekhez.

Úgy döntöttem, hogy kipróbálom. Lássuk a tapasztalatokat. Összevetettem, hogy mi nem működött májusban (ami miatt aztán nem is használtam az exec-shield-et) és mi nem működik most. Tesztkonfiguráció:

Debian GNU/Linux Sarge

2.6.0-test5-exec-shield-nptl kernel

exec-shield-2.6.0-test5-G2 patch

Hogy telepítsem az exec-shield-et?

1.) Letöltöd a vanilla 2.6.0-test5 forrását innen

2.) Kibontod a /usr/src/ könyvtárba, készítesz rá symlinket "linux" néven

3.) cd /usr/src/linux

4.) wget redhat.com/~mingo/exec-shield/exec-shield-2.6.0-test5-G2

5.) cat exec-shield-2.6.0-test5-G2 | patch -p1

6.) konfigurálod a kernelt ízlés szerint

7.) make

8.) make modules_install

9.) lilo (vagy akármi)

10.) reboot az új kernellel

(Ha nem a 2.6-os kernelt futtatod, akkor töltsd le a vanilla linux-2.4.22-t, és a fent leírtak szerint patcheld meg a exec-shield-2.4.22-G2-vel)

Ellenőrizzük, hogy megy-e az exec-shield:

sunshine:# cat /proc/sys/kernel/exec-shield

2

Ez azt jelenti, hogy az exec-shield be van kapcsolva, és a "2"-es szinten fut. Három védelmi szintet különböztetünk meg:

"0": az exec-shield ki van kapcsolva, nincs védelem

"1": az exec-shield be van kapcsolva, de csak a PT_GNU_STACK végrehajtható állományokra [pl. azok a binárisok, amelyek a legújabb gcc-kkel vannak fordítva]

"2": teljes exec-shield védelem

Hogyan tudok váltani az egyes szintek között?

Például, az exec-shield kikapcsolása:

sunshine:# echo "0" > /proc/sys/kernel/exec-shield

sunshine:/# cat /proc/sys/kernel/exec-shield

0

Például, az exec-shield "1"-es szintre állítása:

sunshine:# echo "1" > /proc/sys/kernel/exec-shield

sunshine:/# cat /proc/sys/kernel/exec-shield

1

Rendben. Az exec-shield működik. Hasonlítsuk össze a májusi eredményekkel:

Ami nem működött májusban: Mozilla, Evolution, semmilyen Java alkalmazás, mert a Java VM nem indult, UT2003, Duke Nukem 3D, Xmms, szinte az összes GNOME alkalmazás, Galeon, MySQL

Ami jelenleg működik "2"-es szintű (azaz teljes exec-shield) védelemmel: OpenOffice.org, MPlayer, Evolution, xawtv, xmms, Mozilla, XChat, Abiword, cdrecord, JDictionary + Java VM j2re1.4.1_01, Unreal Tournament 2003 (natív linux), Frozen Bubble

szerver stuffok: mysql, apache, Postfix, Amavisd-new, Spamassassin

Ami csak az "1"-es szinten működött: Star Wars Jedi Academy (korábbi cikk) + winex 3.1, viszont "1"-es szinten kifogástalanul ment

A Jedi Academy-nél a jasp.exe-t nem engedte futtatni "2"-es szinten:

sunshine:~/.transgaming/c_drive/Program Files/Star Wars Jedi Knight Jedi Academy/GameData# winex jasp.exe

/usr/lib/transgaming/winex/bin/wine: can't exec 'jasp.exe': error=21

Konklúzió: Igen! Ez kell nekem. Minden tökéletesen fut, ha csak a b0f-ok közül egyet is megfog, már megérte patchelni. Egyetlen programnál kellett csak védelmi szintet csökkenteni, a többi program kifogástalanul működött. Arra kiváncsi lennék, hogy az MPlayer-ben levő b0f-ok ellen védelmet nyújtana-e a patch. Ha igen, akkor szerintem "highly recommended" minden desktop gépen.

(Feltéve, hogy a hosszabb távon történő tesztelés alatt nem mutat semmilyen rendellenességet. Azt figyelembe kell venni, hogy a patch alig 2 napos, így előfordulhatnak vele nem várt gondok is.)



Közben elkészültek a Exec-shield vs. paxtest & libsafe eredmények. Ingo kiadta az exec-shield patch következő verzióját, mert az előző bugos volt. Leteszteltem ezt a patchet is. Az eredmények sokkal jobbak. Eredmények itt. Exec-shield a 2.6.0-test6 kernelhez itt.

Massachusetts a Linux barátja

Címkék

Az AP jelentése szerint Massachusetts állam lehet az első az amerikai államok között, aki széles körben használja majd fel a Linuxot és egyéb nyílt forrású szoftvereket arra, hogy lecserélje a Microsoft operációs rendszereit és programjait.

Massachusetts kiállása a Microsoft ellen nem újkeletű. Massachusetts állam egyike volt annak a kilenc államnak, amelyek nem mentek bele a szoftvergyártó és az amerikai kormány tavalyelőtti megállapodásába a Microsoft ellen folyó anti-tröszt ügyben. A kilenc állam vélekedése szerint a Microsoft túlságosan is könnyen megúszta az ügyet, és komolyabb szankciókért a bírósághoz fordultak. Ebből a perből Bill Gates cége került ki nyertesen november elején, amikor is Colleen Kollar-Kotelly bírónő úgy döntött, hogy az eredeti megállapodás szerinti bírság elégséges és lezárta az ügyet.Annak idején kilenc államból hét úgy nyilatkozott, hogy nem támadja meg a döntést. Nyugat Virginia később foglalt állást. Massachusets állam vezetése az amerikai sajtóban akkor úgy nyilatkozott, hogy ha kell, akár egyedül is kiállnak a Microsoft ellen, hogy megakadályozzák a jövőbeni visszaéléseket.

Most úgy néz ki, hogy Massachusetts komolyan gondolja.

Követendő példa.

A cikk itt.

Mingo: Exec-Shield frissítések a 2.4 és 2.6 kernelekhez

Címkék

Molnár Ingo május elején bejelentette azt a patchét (korábbi cikk), amely védelmet nyújt a puffer vagy függvény mutató túlcsordulási hibák széles skálájával szemben, és megnehezíti a "shellcode" típusú exploitok futtatását. A patch neve Exec Shield for Linux/x86. Akkor a tapasztalataim nem voltak éppen a legjobbak az exec-shield-del kapcsolatban. Ahogy Mingo a levelében írja "Az egyes open source csomagokban újabban előforduló puffer túlcsordulási bug áradatban, számos kérést kaptam azzal kapcsolatban, hogy az exec-shield-et portolnák különböző népszerű kernelfákba." Az exec-shield legfrissebb verziója elérhető a 2.6.0-test5, 2.4.22, és 2.4.22-ac + NPTL kernelekhez.

LKML: 2.4 vs. 2.6-test

Címkék

Ahogy egyre jobban közeledünk a stabil 2.6-os kernel kiadása felé, úgy látnak egyre-másra napvilágot a 2.4 vs. 2.6 kernel tesztek. Cliff White készített néhány multiuser tesztet, összehasonlítva a stabil 2.4.23-pre5 kernelt a 2.6.0-test5 és 2.6.0-test5-mm4 fejlesztői kernelekkel.Ez eredmény szerint az 2.4-es kernel jobban teljesített Unipocesszoros rendszeren, viszont a 2.6-os kernel jobb volt a több processzoros gépeken.

A tesztek során a re-AIM tesztprogramot futtatta.

Az eredményeket megtalálod Cliff leveleében itt.

Az NTT csatlakozott az OSDL-hez

Címkék

Az NTT DATA INTELLILINK, a Japán vezető rendszerintegrátora csatlakozott az OSDL-hez (Japán). A lépés célja az volt, hogy a Linux felhasználása növekedjen a következő generációs telekommunkációs rendszerekben.Itt az a Dow Jones Business cikk, amely tegnap jelent meg, és arról számolt be, hogy a NTT erre a lehetséges hogy erre a lépésre szánja majd magát. Itt pedig az olvasható, hogy már csatlakozott is.