Partyflock
 
Forumonderwerp · 737543
Waarschuw beheerder
Heeft iemand dit al eens voor elkaar gekregen????


Heb dr problemen mee, om het goed te krijgen.


Je moet het gewoon in /etc/fstab kunnen zetten, waarna je het mounten kunt.

Maar getverderrie, het wil niet! :S


Daarom maar ff vragen......

Miss is dr iemand anders die het gebruikt.
Waarschuw beheerder
Ja, de oude kernel kan je laten staan.

Pax is net iets anders. Het zijn veiligheidspatches die zorgen voor een non executable stack. Hiermee kan je voorkomen dat buffer overflow vulnerabilities geexploid worden.

Buffer overflowing is een redelijk lastig iets om te begrijpen (iig om het 100% te snappen), maar ik zal een poging doen het simpel uit te leggen. Bij elke functie aanroep in een programma wordt er weer binnen een nieuwe scope gewerkt, waarbij parameters worden meegegeven. Deze gegevens worden op de zogenaamde stack (lees: stapel) gezet, bij het beeindigen van de functie worden deze gegevens weer van de stapel gehaald.

In deze stack staat ook een return address, zodat bekend is naar welke plaats teruggekeerd moet worden. Nu is het soms mogelijk om dit adres (wat eigenlijk gewoon een plekje in het geheugen is) te overschrijven naar iets anders. Door dit te doen is de flow van het programma aan te passen, je kunt dus het programma verder laten gaan op een geheugenadres naar keuze! Dit is mogelijk doordat je in C op laag niveau met het geheugen werkt. Als ik een string (lees character array) definieer van 100 karakters, kan ik er ook 110 in schrijven. Als ik dat doe ben ik aan het buffer overflowen. Indien ik de data die ik erin schrijf EXACT goed kies, kan ik bovengenoemd return adres met een waarde naar keuze overschrijven.

Dit is dus alleen echt handig, als ik er ook voor zorg dat ik code naar keuze (assembly) in het geheugen weet te schrijven. Dat kan als ik dus de assembly code ook als data meegeef in een parameter. Het enige probleem is dan dat ik EXACT moet weten op welk geheugenadres die code komt te staan, maar er zijn trucjes om dat wat eenvoudiger te maken (oa mbv NOP commando's).

Het resultaat is dus dat een buffer overflow vulnerability misbruikt kan worden om 'malicious code' uit te voeren. Dit heeft vergaande gevolgen als het een programma betreft wat suid root is, welke dus onder de rechten van root draait.

Meer info over buffer overflows kan je hier vinden:

http://www.insecure.org/stf/smashstack.txt

Pax zijn kernel patches die ervoor zorgen dat de stack waar de data opgeslagen wordt als Non Executable gemarkeerd wordt. Een eventuele buffer overflow kan dan niet meer exploited worden. Overigens heeft XP sinds SP2 ook een dergelijk mechanisme ingebouwd.



PS: Ik hoor het graag als er foutjes in bovenstaande uitleg zitten...
Waarschuw beheerder
Zoiets als Pax zit al id 2.6.x kernels zeker.....

Omdat ik op die site, waar Esdee een link voor gaf, alleen patches voor 2.4.x kernels zie.

Maar ik begrijp wel wat je bedoelt. Niet helemaal hoe het in zn werk zit, maar wel wat de bedoeling is van Pax.
Waarschuw beheerder
Voor zover ik weet zit er in 2.6 niet zoiets als PaX en is er ook een versie voor 2.6.x

PaX is btw onderdeel van GRSecurity. GRSecurity is ook gewoon voor 2.6.10 te downloaden.
laatste aanpassing
Waarschuw beheerder
Ah, ok.

Hmmm miss wel slim van mij om me hoofd server te gaan patchen.

Maar, als ik al moeite heb met kernel compileren, hoe zal me dat patchen dan vergaan? O:)


Ach gewoon proberen denk ik dan. Als het mis gaat wil ik altijd wel graag weten WAAROM het mis gaat..... :D

Kernel compilen wel vaker gedaan, maar ging iedere keer wat fout op 1 of andere manier. :S

Toen kwam ik erachter dat het gewoon via Yast gaat, en heb er verder eigenlijk niet naar om gekeken.

Maar wil het toch een x gedaan hebben.
Vanavond moet het maar gebeuren. :)

Maar ik wil eigenlijk op de oude kernel terug kunnen vallen. Als het weer mis gaat om eoa reden, dat ik niet alles weer opnieuw hoef te installen. En ik heb ook een hele berg zelf gecompileerd, en dat moet dan ook weer opnieuw. Maar dat heb ik sneller klaar, dan wanneer ik alles bij Windows opnieuw moet doen.
Bedoel dr verder niks mee.... ;)
Waarschuw beheerder
Dan doe je toch iets fout onder Windows als je sneller je hele linux installatie gecompileerd hebt op een p1 133 (toch?) :)
Waarschuw beheerder
Nee, das me file servertje.

Ik ben nu op me AthlonXP 2600+ bezig.... :D

Ik heb op de P1 alleen default install draaien, met NFS en SMB /CIFS server. Zonder Xfree86, alleen console. (Zonder monitor zelfs..... :) ) Deze pak ik over ssh heen.

Nee, op die AthlonXP moet het allemaal gebeuren.
En als je deze topic leest, weet je wat ik zo ongeveer heb staan.....
Waarschuw beheerder
Je uitleg over stackoverflows klopt, alleen kunnen overflows op meer segmenten plaats vinden dan alleen de stack.
Stackoverflows zijn wel vaak het makkelijkste om te exploiten.

Maar PaX is veel meer dan alleen een non-exec stack.

Alleen de stack non-exec zetten heeft namelijk weinig zin:
een attacker kan 9 van de 10 gevallen zijn code op .data/heap kwijt, en het is ook mogelijk om functies die al in meegelinkte libraries of in het programma zelf zitten te gebruiken.

Bijv. door in system() van libc returnen en dan een shell spawnen. Het probleem is dat de code van libc altijd executable moet zijn.

PaX zorgt dat het voor een attacker (bijna) onmogelijk is om nieuwe code in het huidige process te introduceren, door processen die zich 'verdacht' gedragen te killen.

- PaX restrict mmap() (een functie om geheugen te mappen, hiermee zou het dus mogelijk zijn nieuwe geheugen te mappen, en PROT_EXEC als flag te geven, waardoor het executable word.)

- mprotect() (een functie om de flags van pages te wijzigen, als je alleen een non-exec stack heb, kan een attacker in deze functie returnen in libc, en zo de stack weer terug executable zetten, (schijnt nog op openbsd te werken :)

- PaX randomized het base address van alle segmenten.
(Dit maakt het voor een attacker bijzonder kut om zijn shellcode terug te vinden, jumpen naar een verkeerd address zal in een segmentation fault eindigen.)

- PaX randomized het base address van shared libraries

[esdee@flopppp src]$ ldd /bin/ls|grep libc
libc.so.6 => /lib/i686/libc.so.6 (0x2fd01000)
[esdee@flopppp src]$ ldd /bin/ls|grep libc
libc.so.6 => /lib/i686/libc.so.6 (0x280d1000)


PaX is lang niet waterdicht, maar het legt de lat een stuk hoger. Ik heb eigelijk nog nooit in public een PaX-evading exploit gezien. Alhoewel het waarschijnlijk wel mogelijk is. Zoals je ziet is het base-address van glibc nog best te bruteforcen, maar met een info leak (een soort bug waarbij het bijv. mogelijk is om remote geheugen uit te lezen) zal het niet al te moeilijk worden om PaX te verslaan.

Als de daemon ook nog eens fork()-ed heeft de attack onbeperkt aantal pogingen om addressen goed te gokken. fork() moet volgens posix een exact kopie van het process image maken, en dat doet het dus ook, dus childs zijn niet opnieuw random. Ik denk dat het mogelijk is om dmv. bepaalde process informatie kan achter halen, (bijv. link_map, een linked list waarin alle gelinkte libraries + hun base address staan), waardoor je alsnog een klassieke 'return-into-libc' attack te doen.

Ik heb iig nog nooit een publieke betrouwbare exploit gezien die PaX verslaat, dus met PaX zit je al redelijk goed. Het is kleine moeite om deze patch even toe te passen, en het maakt het voor een attacker een stuk moeilijker.

Het beschermt je alleen niet tegen bijv. php bugs of onveilige wachtwoorden :-)

De reden waarom ik het overigens steeds over 'PaX' heb ipv 'grsecurity' is omdat spender niet de auteur is van PaX en gewoon deze patches bij grsecurity heeft toegevoegd. De echt auteur blijft kennelijk liever wat meer op de achtergrond.
Waarschuw beheerder
Aha, nou dan gaat deze tante mooi ff haar kernel vd hoofdserver patchen... :P 8)


Ik hoef alleen maar dat script, waar narotic link van gaf, aan te roepen cq opstarten?
Vraag geldt nat. ook voor jou narotic... ;)
laatste aanpassing
Waarschuw beheerder
goede zaak :)

Je kan die patch toepassen door hem in /usr/src te zetten en dan het volgende commando uit te voeren:

patch -p0 < pax-linux-2.6.7-200411061335.patch


Je moet hem dan wel bij 'make menuconfig' enablen.
Waarschuw beheerder
Vraag geldt nat. ook voor jou narotic...


Ik heb nog nooit zelf GRSecurity geinstalleerd, ik hou me dus wijselijk stil ;)

* gaat na zn film eens rustig dat stukje van eSDee doorlezen ;)
Waarschuw beheerder
Hahaha kijkse.......



Ik ga ook lekker film kijken.
De rest komt morgen allemaal wel weer......

;)
Waarschuw beheerder
Ahh, ik ga na de film nog wel ff verder :) Eindelijk een begin gemaakt op de goede weg wat betreft een projectje :)
Waarschuw beheerder
Ik zat me wat af te vragen.....

Voor die GmailFS ben ik Fuse nodig. Dit word als kernel module gecompileerd, zoals ik heb begrepen.

Kan ik die source niet toevoegen id kernel source?
Zodat ik dat in 'make config' als module kan mee compileren?

Hetzelfde idee als met Pax. Dan voeg je ook sources toe, welke je daarna in 'make config' moet enabelen.....

Nu ik erover nadenk.....
Je kan ook drivers toevoegen, en laten mee compileren.
Waarschuw beheerder
Ik weet niet of het kan, maar waarom zou je dat willen? Zoveel voordelen zitten er niet tussen een monolithische en microkernel (modulaire kernel). Bovendien zul je ook niet altijd FUSE gebruiken toch? MAW, mount je continu je gmailfs?
Waarschuw beheerder
Nee, ik wil een modulaire kernel. Sommige dingen zitten 'ingebakken' en dingen die ik miss een keertje nodig heb, worden als module gecpmpileerd.

Ik denk dat Fuse ook maar als module moet, maar ik ben m wel elke dag nodig.... Maar is niet continu gemount......

Ach probeer maar eens wat....
Mocht ik het toch anders willen, kan dat altijd nog.

Ik ga eerst gewoon kernel compilen. (Ja dat moet nog steeds.... :S Dr komen steeds dingen tussendoor.... :) )
Daarna compile ik Fuse als kernel module.

Daarna zien we wel weer verder. :)
Waarschuw beheerder
Nou ik heb m gecompileerd...


Boot ie op, geen probleem verder, en dan pats, blijft ie hangen. Kan eoa module niet laden.

Ik heb eea uitgezocht, en het schijnt dat initrd er voor zorgt dat de module om het file systeem te kunnen lezen, word ingeladen op een RAM disk. Evenals de kernel zelf.

Klopt het dat alleen EXT2 default in de kernel zelf zit?

Ik gebruik zelf JFS, ook voor root dir. JFS compileer ik als module mee.
Kan het zijn dat wanneer ik JFS in de kernel zelf compileer, dat ik initrd niet nodig ben?

Dit is zoals ik et nu begrijp:

Eerst word initrd opgestart vanuit GRUB.
Initrd zorgt ervoor, dat de kernel ih geheugen word geladen, met de modules om het filesysteem van root te kunnen lezen. Daarna word de kernel opgestart.

Maar ik heb ook begrepen dat het anders kan.
Ik het andere geval start GRUB gelijk de kernel op, en niet initrd.

Maar kernel compileren, gaat verder goed. Krijg geen errors iig.
Wat ik moet doen snap ik tot zover dan ook nog wel.
Heb ook verschillende config scripts geprobeerd. Geloof dat ik xconfig dan toch wel het makkelijkste vind.
Alleen wanneer je met screen, of over console compileerd, kun je dat niet gebruiken. :S
Maar ze komen allemaal op hetzelfde neer, dus dat is niet echt een ramp. :)

Enigste waar ik mee zit dus, is dat ie niet opboot.... :(

Om een lang verhaal kort te maken: Heb ik het opgelost wanneer ik die JFS id kernel zelf compileer, en niet als module?