Filesystem Security door ron[-at-]xsguard.com Inhoud: 1.Inleiding 2.permissies 1.algemene permissies 2.suid / sgid permissies 3.Encryptie 1.Inleiding Deze text heb ik geschreven omdat veel mensen nogal weinig aandacht besteden aan het beveiligen van hun eigen bestands systeem terwijl dit relatief simpel is. Als eerste begin ik over de permissies die je kan zetten en ten tweede begin ik over de encryptie die je kan gebruiken om een bestandssysteem te beveiligen. 2.Permissies 1. Algemene permissies Bij een goede filesystem security implementatie zijn een aantal dingen belanrijk, waaronder de rechten, zorg er bij de rechten altijd voor dat gebruikers niet meer rechten hebben dan dat ze nodig hebben en dat bestanden niet onnodig meer flags geset hebben dan dat ze nodig hebben. Laten we een voorbeeld bekijken van een rechten systeem: ls -l /home/xs1mpl3 -rwxrwxrwx 1 xs1mpl3 xs1mpl3 8735721 Jan 13 14:17 file1 -rw-r-r-- 1 xs1mpl3 xs1mpl3 3544236 Jan 13 12:25 file2.txt -rwsrwxr-x 1 xs1mpl3 xs1mpl3 228461 Jan 13 14:57 file3 Wat zegt dit? De eerste waardes (-rwxrwxrwx) geven de permissies opgevolgd door het cijfer 1 omdat het 1 bestand is dan de user en group, vervolgens de grote van het bestand, de tijd en de bestandsnaam. De permissies werken als volgt: je hebt 10 vakjes, de eerste is voor een bitsetting om hem bijvoorbeeld sticky te maken. Deze functie is inmiddels niet meer nodig en hoeft ook niet meer gebruikt te worden. Dan krijg je 3 setjes van 3 vakjes, die representeren de rechten voor 3 groepen. De eerste groep in kwestie is "eigenaar", dus de eerste 3 vakjes staan voor de eigenaar van de file. De tweede groep is de "groep", dus de tweede 3 vakjes staan voor de gebruikers in dezelfde groep als de eigenaar. De derde groep is "de rest", dus als je in de 3e categorie zit, ben je geen eigenaar en zit je niet in dezelfde groep. Laten we eens gaan kijken naar de permissies van file 1: -rwxrwxrwx oftewel: bit eigenaar groep anderen - rwx rwx rwx Wetende dat: r = read w = write x = execute s = suid (Set Userid execution) g = sgid (Set Groupid execution) S = sticky (file blijft in het geheugen na executie voor performance) d = directory Dus nu kunnen we veilig zeggen dat file1 door iedereen aangepast, uitgelezen en uitgevoerd mag worden. In sommige situaties is dit niet nodig of zelfs niet wenselijk, denk aan uw eigen boekhouding bijvoorbeeld, dus dan wilt u graag dat niemand de inhoud van uw bestand ook maar kan zien, hoe pakken we dat aan? We gaan de permissies wijzigen van uw bestand. Als we dit willen gaan doen moeten we gaan werken met het commando "chmod". De syntax van chmod: chmod [permissies] file of dir permissies worden vooral in octaal meegegeven dus het is handig om het volgende lijstje te weten: r (read) = 4 w (write) = 2 x (execute) = 1 en als extra bit kun je meegeven wat voor extra permissies hij moet hebben (suid, sgid) sgid = 2 suid = 4 De permissies die je zet moet je dus optellen Wil je graag dat iets read en execute is wordt dat 4+1 = 5 moet iets read en write zijn is dat 4+2 = 6 Wil je ook nog suid of sgid gaan zetten moet je dat als eerste getal meegeven en krijg je 4 getallen in plaats van 3. pas hier echter heel goed mee op!! ga niet zomaar sgid of suid bitjes zetten(zie volgende hoofdstuk) . Dus als we de permissies van ons bestand willen wijzigen in: -rwxr-xr-x (eigenaar mag alles, groep en anderen alleen lezen en uitvoeren) Doen we: chmod 755 file1 Dit geeft de file: -rwxr-xr-x willen we alleen maar read en write voor de eigenaar en de rest alleen read? Dan doen we: chmod 644 file1 Dit geeft de file: -rw-r-r-- wil je bijvoorbeeld alleen zorgen dat de eigenaar alles mag, de rest niets? Dan doen we: chmod 700 file1 Dit geeft de file: -rwx------ 1. Permissies 2. suid / sgid suid en sgid bitjes zijn ervoor om te zorgen dat een bestand uitgevoerd wordt onder de rechten van de eigenaar(suid) en de groep(sgid). Dit is echter heel gevaarlijk, want een gebruiker kan (per ongeluk) alternatieve opdrachten uitvoeren onder de permissies van de eigenaar. Laten we ons voorstellen dat we deze file hebben: -rwsr-xr-x 1 root root 8735721 Jan 13 14:17 eenfile dan voer ik de inhoud van bestand "eenfile" uit met de permissies van root. Dit kan schadeloos zijn, maar in sommige gevallen kan dit problemen opleveren. Een (kwaadwillende) gebruiker kan de complete controlle over uw systeem overnemen En dit is niet de bedoeling uiteraard. Wat kunnen we hier aan doen? Voer het volgende commando uit: find / -perm 4000 -o -perm 2000 -exec ls -ad {}\; > suid.files en bekijk in je bestand "suid.files" welke bestanden allemaal een suid of sgid bitje gezet hebben. Systeem bestanden die standaard zijn zoals passwd vereisen een suid bit om goed te kunnen functioneren. Maar er kunnen bestanden op uw systeem staan die dit niet vereissen, die u dan kunt verwijderen met het volgende commando: chmod -s Dit is stap 1 naar een veilige computer en zorgt er voor dat er 1 weg minder is voor de hackers op hun missie naar "root". 2. Encryptie Hier wil ik toch een stukje over vertellen omdat het eigenlijk simpel op te zetten is en het is weer een extra laagje beveiliging over de bestanden die je graag veilig wilt bewaren. De crypto die je kan gebruiken is XOR, DES en none. Dit kun je als je een beetje handig bent met kernel compilen en updaten uitbreiden met een hele hoop encryptie manieren zoals 3DES, BLOWFISH, TWOFISH, SERPENT en nog veel meer soorten encryptie. Kijk in de manpages van losetup hiervoor, Als je linux_utils update met de crypto patch erover, kun je mits je in je kernel de encrypties hebt aangezet in de crypto API, gebruik maken van de andere encrypties. Je hebt 2 vormen om je bestanden te encrypten. De eerste is het direct beveiligen van een partitie, en de tweede vorm is het beveiligen middels een bestand. Om een bestandssysteem te beveiligen moet je hem door je loopback device heenhalen zodat je daar de encryptie erover kan gooien. Dit gebeurt middels het commando "losetup". Dit ziet er ongeveer zo uit: /dev/ (partitie in gewone tekst) \/ /dev/ (hier word de tekst door encryptie heen gehaald) \/ /mnt/ (na het mounten van /dev/loop0 staat hier de data) en voor een bestand: /pad/naar/ (dit is bijvoorbeeld een leeg bestand) \/ /dev/ (hier wordt de tekst door de encryptie heen gehaald) \/ /mnt/ (na het mounten is hier je partitie te vinden) Hier volgen een tweetal voorbeelden om je data te beveiligen: Maak een crypto partitie, in dit geval /dev/hda3: 1. zet je loopback device ertussen #losetup -e XOR /dev/loop0 /dev/hda3 password: 2. maak een bestandssysteem door de loopback device #mkfs -t ext2 /dev/loop0 #mount /dev/loop0 /mnt/crypted -t ext2 # nu kunt u data kopieren naar uw encrypted partitie in /mnt/crypted. Om hem te ontkoppelen: #umount /mnt/crypted #losetup -d /dev/loop0 in het vervolg koppelt u het gewoon aan zoals u hem heeft opgezet alleen slaat u de stap met mkfs over. Nu gaan we een bestand gebruiken om een encrypted bestandssysteem te maken: 1. maak een bestand met random data die 1024 bytes groot is: #dd if=/dev/urandom of=/tmp/cryptfile bs=1024 count=20000 2. Zet je loopback device ertussen: #losetup -e XOR /dev/loop0 /tmp/cryptfile password: 3. Maak hier een bestandsysteem op aan: #mkfs -t ext2 /dev/loop0 4. Mount als laatste je loop device in een bestaande directory: #mount /dev/loop0 /mnt/crypted -t ext2 # om hem te koppelen / ontkoppelen gebruik je dezelfde manier als de vorige techniek. Dit is alles wat u moet doen om een encrypted filesystem te gebruiken. Zoals u ziet is het niet moeilijk en voorkomt dat uw bestanden door iedereen gelezen kunnen worden. Ik hoop dat iedereen iets veiliger omgaat met zijn lokale bestandssysteem en dat iedereen na het lezen van deze tutorial eens even zijn bestandssysteem aan een kleine security update onderwerpt. Mocht u nog vragen hebben of suggesties hoe ik deze tutorial kan uitbreiden, mail dit even naar ron[-at-]xsguard.com. --Ron (XS1mPl3)