Door karma4: Hi 4amrak ik heb het je duidelijk proberen uit te leggen.
Duidelijk? Lees zelf dit nog eens:
Die context switching met de shellshock zit er in omdat poort 80 onder root draait alle poorten onder de 1024 hebben die eigenschap.
Wat bedoel je met "die context switching met de shellshock"? De rest van de zin refereert aan het feit dat poorten onder 1024 privileged zijn. Dat is geen eigenschap van shellshock, dat was een bug in bash om code te injecteren, en bash doet op zich zelf niets met HTTP-poorten, daar heb je webservers en dergelijke voor. Niet duidelijk.
Het binnenkomend verkeer van de tcpip poort onder root wordt interessant proces doorgegeven aan de http demon niet onder root.
De zin loopt tot en met het woord "interessant", maar vanaf "proces" blijkt hij grammaticaal zodanig te ontsporen dat ik geen idee heb wat er staat. Niet duidelijk.
Met dat doorgeven van root naar httpd daar zit het gebruik van de Shell.
Welk doorgeven van root aan httpd? Hoezo wordt root ergens aan doorgegeven? Bedoel je misschien dat httpd onder root draait en meerdere processen afsplitst die dat niet doen? Suggereer je dat
daar shell-code (bash, shellshock) een rol in speelt? Dat klopt niet, hoor. Wederom: niet duidelijk.
Met een handige string ging die Shell onder root leuke dingen doen. Met confinement kon hij in ieder geval niet daar buiten komen. Zonder confinement ligt het systeem open.
Je lijkt inderdaad te denken dat shellshock onder apache gevaarlijk was omdat data uit requests al in bash terechtkomt nog voor het bij processen die met minder rechten draaien terechtkomt. Je kan apache natuurlijk zo configureren dat alles onder root draait, maar dan zit je wel de defaultconfiguratie zoals ik die bij Linux-distro's heb gezien actief om zeep te helpen.
Apache/httpd draait typisch alleen een eerste proces als root. Dat opent logbestanden, opent poorten 80/443 (of andere) om nieuwe verbindingen op te ontvangen, maar handelt die niet zelf af. Het creëert andere processen die die open file descriptors erven, waaronder de TCP-sockets, en die kunnen vervolgens zelfstandig requests die daarop binnenkomen afhandelen. Ze laten echter
eerst de root-rechten vallen en draaien onder een user met beperkte rechten die bijvoorbeeld "nobody" of "www-data" heet. Als er (potentieel gevaarlijke) data zelfs maar een proces binnenkomt zijn de root-rechten al niet meer beschikbaar.
Het openen van een listen-socket is niet gevaarlijk, met die handeling ontvangt een proces nog geen data. Dat kan veilig met root-rechten uitgevoerd worden. Zoals gezegd erven afgesplitste processen die open socket, en die gaan pas handelingen doen waarmee data binnen kan komen
nadat ze hun rechten hebben verlaagd.
"Met het doorgeven van root naar httpd daar zit het gebruik van de Shell", schreef je. Los van dat er helemaal geen root aan httpd wordt doorgegeven, wat betekent dat überhaupt, komt er bij die hele rechtenverlaging geen shell-code kijken. Pas in de afhandeling van requests met lagere rechten komt
mogelijjk bash om de hoek kijken, maar alleen bij verouderde CGI-applicaties of als ontwikkelaars zo naïef zijn om externe programma's via een shell aan te roepen, iets wat altijd te vermijden is.
Nee, Karma, je was niet duidelijk.