Kryptograficzny System Plików pod Linuxem - Jak To Zrobiæ

Autor: Alexander O. Yuriev, alex@bach.cis.temple.edu
Wersja polska: Krzysztof G. Baranowski KGB@rubikon.net.pl
v1.1 12 Maja 1997


W dokumencie opisano jak skompilowaæ, zainstalowaæ i ustawiæ Kryptograficzny System Plików (zwany dalej CFS - przyp. tłumacza), który został napisany przez Matta Blaze z AT&T, pod Linuxa.

1. Wprowadzenie

Nastêpujące oświadczenie skopiowane zostało bezpośrednio z CFS 1.12 i opisuje zastrzeżenia co do używania CFS.

2. O CFS

CFS umożliwia niezależne od aplikacji szyfrowanie/deszyfrowanie danych na powłoce struktury plików i nie wymaga modyfikacji kodu istniejącego już systemu plików, ani żadnych modyfikacji jądra systemu. Symetryczne szyfrowanie zawarte w głównym strumieniu CFS bazuje na zmodyfikowanym standardzie DES pracującym w trybie CBC, który czyni brutalny atak przeciwko 56-bitowemu kluczowi DES prawie niemożliwym. Struktura CFS zastêpuje główny strumieñ DES, szyfrem Fast-DES albo jakimkolwiek innym szyfrem, w doskonały, bezpośredni sposób. Gdybyś był zainteresowany przeczytaj Białą stronê o CFS.

3. KOMPILACJA I INSTALACJA CFS.

CFS nie skompiluje siê "samo" pod Linuxem. Podążaj za niniejszymi instrukcjami, jeśli chcesz uruchomiæ CFS na swoim Linuxie. Jest kilka metod osiągniêcia tego celu, ale najprostsza bazuje na modyfikacjach przeprowadzonych przez Olafa Kircha. Jego wersja CFS jest dostêpna z: ftp.mathematic.th-darmstadt.de.

Olaf podpisał zmodyfikowane archiwum. Podpis PGP dla zmodyfikowanej wersji cfs-1.1.2 można otrzymaæ z: ftp.mathematic.th-darmstadt.de.

W trybie jednego użytkownika, skompiluj cfs za pomoca komendy "make". (przeczytaj najpierw odpowiednie pliki, tzn. README, Changes itp. - przyp. autora). Po kompilacji, zainstaluj: cfsd, cdetach, ccat, cmkdir, cname i cattach do katalogu /usr/local/sbin - właścicielem tych plikow niech bêdzie root, a grupa, do której muszą one należeæ to wheel. Nadaj plikom atrybuty 551.

Dla bezpieczeñstwa można wygenerowaæ sumy kontrolne MD5, na czystych binariach. Nastêpnie skopiuj te pliki razem z "md5sum", na media takie jak płyta CD, albo dyskietka i zabezpiecz ją przed zapisem.

Utwórz katalog /.cfsfs, który bêdzie używany przez serwer CFS. Niech właścicielem katalogu bêdzie root, grupa root, a jego atrybuty niech wynoszą: 000. Utwórz katalog /securefs, ktory stanie siê korzeniem drzewa Kryptograficznego Systemu Plików.

Dodaj nastepującą liniê do /etc/rc.d/rc.local:

echo -n "Inicjacja Kryptograficznego Systemu Plików: "
if [ -x /usr/local/sbin/cfsd ]; then
/usr/local/sbin/cfsd > /dev/null
echo -n "cfsd "
/bin/mount -o
port=3049,intr localhost:/.cfsfs /securefs
echo -n "loopback"
echo "done"
else
echo "Nie zainstalowano poprawnie Kryptograficznego System Plików"
fi

Użytkownicy Red Hata powinni dodaæ plik "cfsfs", który znajduje siê na koñcu tego dokumentu do katalogu /etc/rc.d/init.d. Nastêpnie utworzyæ dołączenie symboliczne "S65cfsfs" i umieściæ go w odpowiednim katalogu startowym, np. rc3.d używając komendy:

ln -s /etc/rc.d/init.d/cfsfs S65cfsfs

we właściwym katalogu startowym. Nastêpnie należy dodaæ liniê:

/.cfsfs localhost

w pliku /etc/exports. Na koñcu dodaj liniê:

portmap: 127.0.0.1

do pliku /etc/hosts.allow.

Teraz powinieneś zrestartowaæ komputer. Po jego uruchomieniu, użyj komendy mount żeby sprawdziæ, czy CFS pracuje. Jeśli wszystko zadziałało, powinieneś zobaczyæ nową nastêpującą liniê po wykonaniu komendy mount.

localhost:/.cfsfs on /securefs type nfs(rw,port=3049,intr,addr=127.0.0.1)

4. TWORZENIE KATALOGU CFS

Żeby utworzyæ szyfrowany katalog o nazwie "sekret" użyj komendy:

cmkdir sekret

Zostaniesz poproszony o podanie i zweryfikowanie hasła. Jeżeli to sie uda, utworzony zostanie katalog "sekret", który pojawi sie w bieżącym katalogu. Katalog ten bêdzie zawierał zaszyfrowane dane, które bêdzie można normalnie przeglądaæ pod warunkiem, że dołączymy ten katalog do drzewa CFS.

Żeby można było swobodnie korzystaæ z informacji zawartych w katalogu, trzeba dołączyæ go do drzewa katalogów zarządzanych przez CFS za pomoca komendy:

cattach sekret Tajne

CFS poprosi Ciê o podanie hasła dostêpu. Jeżeli bêdzie siê ono zgadzało z hasłem podanym przy tworzeniu katalogu "sekret", dane zawarte w tym katalogu bêdą dostêpne w niezakodowanej formie w /securefs/Tajne, TYLKO dla użytkownika, który podał właściwe hasło dostêpu. (nawet root nie może odczytaæ tych plików ;-) - przyp. tłumacza)

Zauważ, że dołączenie katalogu do drzewa CFS, może zająæ nawet minutê. (u mnie na P133/16MB RAM zajmuje nie wiêcej niż 5 sekund). Od tej pory możemy korzystaæ z katalogu /securefs/Tajne jak z każdego innego katalogu.

Kiedy skoñczymy pracê powinniśmy użyæ komendy:

cdetach Tajne

żeby uniemożliwiæ dostêp do danych. Komenda ta usuwa katalog "sekret" z listy katalogów zarządzanych przez CFS, co uniemożliwia odczytanie informacji w tym katalogu, gdyż są one zakodowane. Aby znowu umożliwiæ sobie dostêp do danych należy użyæ komendy "cattach".

5. OCHRONA CFS

Aby umożliwiæ użytkownikom dostêp do zaszyfrowanych danych, CFS wymaga od użytkownika hasła, które jest używane do wygenerowania zestawów kluczy.

Zdobycie hasła przez niepowołane osoby pozwala intruzom odczytaæ zaszyfrowane dane, dlatego jest niezwykle ważne, aby użytkownik we własnym interesie chronił hasło dostêpu. Istnieją dwie możliwości zdobycia Twojego hasła przez intruzów:

  1. Sniffing
  2. Atak przeciwko protokołowi.

Informacje zawarte poniżej mogą zostaæ użyte, aby zmniejszyæ prawdopodobieñstwo skutecznego ataku przeciwko CFS.

  1. Upewnij siê, że binaria CFS są oryginalne:
    1. upewnij siê, że: cattach, ccat, cmkdir, cname, cfsd i cdetach nie zostały zastąpione "koniami trojañskimi", które zapisują hasła dostêpu,
    2. upewnij siê, że CFS serwer (cfsd), nie został w jakiś sposób zmodyfikowany i że szyfruje dane poprawnie,
    3. atak przeciwko "cdetach" zazwyczaj wymaga małej modyfikacji kodu, która chroni klucze dostêpu przed zniszczeniem i pozwala intruzowi uzyskaæ kontrolê nad zakodowanymi danymi. Najprostszym sposobem na upewnienie siê, ze binaria nie zostały podmienione, jest zlinkowanie ich statycznie i umieszczenie na płycie CD. Inny sposób, to zlinkowanie statyczne, wygenerowanie sum kontrolnych za pomocą programu MD5 i umieszczenie ich na dyskietce zabezpieczonej przed zapisem. Przed użyciem CFS w systemie, zamountuj dyskietkê i sprawdź czy sumy kontrolne zgadzają siê; w razie potrzeby zastêpując podmienione programy ich oryginalnymi wersjami.
  2. Uważaj na programy zapisujące do pliku dane wpisywane z klawiatury, tzw. keyboard grabbers i zawsze stosuj siê do poniższych zasad:
    1. kiedy wpisujesz hasło w oknie xterm-a, upewnij siê, że xterm jest oryginalny i używaj bezpiecznej klawiatury "Secure keyboard". To uniemożliwi przechwycenie hasła przez wyżej opisane programy,
    2. wpisuj hasła do terminali przyłączonych bezpośrednio do portów szeregowych systemu, gdy są one dostêpne,
    3. upewnij siê, że konsole (pty i tty) są ustawione tak, aby uniemożliwiæ innym odczytanie twojego hasła.
  3. Nigdy nie wpisuj hasła poprzez sieæ, nawet jeśli znajduje siê ona za firewallem i wiesz, że nikt podłączony do sieci nie używa sniffera. Tyczy siê to także sieci używających, tzw. scramble routers, ponieważ nie masz pewności, ze routery używają odpowiednio silnej enkrypcji, nie mają "tylnych drzwi" albo innych dziur, które pozwoliłyby intruzowi pokonaæ enkrypcjê routera. Jeżeli jednak musisz podaæ hasło poprzez sieæ, rób to tylko zaszyfrowanym kanałem pomiêdzy hostami. (najbardziej znany i popularny jest (ssh) secure shell - przyp. autora)
  4. Zawsze używaj komendy cdetach, kiedy nie pracujesz z danymi. Nawet kiedy przerywasz pracê na kilka minut.

5.1 ZNANE PROBLEMY Z CFS

W tym momencie jedyny znany problem, to komunikat "Permission denied", kiedy próbujesz dostaæ siê do plików na płycie CD.

6. PODZIÊKOWANIA

Niżej wymienieni ludzie przyczynili siê do powstania tego dokumentu: Topher Hughes z Dickinson College, Elie Rosenblum z Montgomery Blair High School, Mario D. Santana z Florida State University, Daniel P Zepeda i Olaf Kirch.

====================[początek pliku cfsfs]======================
#!/bin/sh
#
# $Header: /Secure/secure-doc/linux/CFS/RCS/CFS-Doc,v 1.
4 1996/03/15 04:49:37 alex Exp alex $
#
# cfsfs Kryptograficzny System Plików
#
# Autor: Alexander O. Yuriev <alex@bach.cis.temple.edu>
#
# Derived from cron
# Source function library.

. /etc/rc.d/init.d/functions

# See how we were called.

case "$1" in
 start)
        echo -n "Uruchamianie Kryptograficznego Systemu Plików: "
        if [ -x /usr/local/sbin/cfsd ]; then
                /usr/local/sbin/cfsd > /dev/null
                /bin/mount -o port=3049,intr localhost:/.cfsfs /securefs
                echo "done"
        else 
         echo -n "Nie zainstalowano poprawnie Kryptograficznego Systemu Plików"
        fi
        touch /var/lock/subsys/cfsfs
        ;;
 stop)
        echo -n "Zamykanie Kryptograficznego Systemu Plików: "
        umount /securefs
        killproc cfsd
        echo
        rm -f /var/lock/subsys/cfsfs
        ;;
 *)
        echo "Użycie: cfsfs {start|stop}"
        exit 1
esac

exit 0

====================[koniec pliku cfsfs]======================

7. DODATEK A

Jak najwygodniej posługiwaæ siê CFS...

Copyright (C) 1997 by Krzysztof G. Baranowski (KGB@rubikon.net.pl)

Ponieważ ciągłe używanie komend "cattach","cdetach" i przechodzenie pomiêdzy wieloma odległymi od siebie katalogami może byæ na dłuższą metê mêczące i może zniechêciæ użytkownika od używania CFS, postanowiłem napisaæ ten dodatek, w którym przedstawiê naprawdê bardzo proste porady, dziêki którym bêdzie można zhumanizowaæ pracê z CFS.

A zatem zacznijmy od początku. Najwygodniej jest utworzyæ w domowym katalogu użytkownika ukryty katalog, w którym bêdziemy trzymaæ wszystkie zakodowane pliki. Wiąże siê to jednak z ryzykiem. Bo jeżeli ktoś pozna nasze hasło dostêpu to bêdzie mógł swobodnie manipulowaæ naszymi plikami.

Z drugiej strony posiadanie wielu katalogów może przyprawiæ użytkownika o ból głowy, gdyż bêdzie on musiał zapamiêtaæ ogromną ilośæ haseł. A minimalna długośæ hasła dostêpu do każdego katalogu wynosi 16 (szesnaście) znaków. ;-)

Pozostañmy wiêc przy jednym katalogu. Zatem piszemy:

/home/kris$ cmkdir .xfiles

Zakładam, że użytkownik ma login: kris, a jego katalog domowy to /home/kris i używa bash'a jako domyślnego shella. Nastêpnie CFS poprosi nas o hasło, które musi składaæ siê przynajmniej z 16 znaków. Po weryfikacji hasła nasz tajny katalog ".xfiles" zostanie utworzony:

Nastêpnie dopiszmy dwa aliasy do pliku ".bashrc":

alias dekoduj='cattach /home/kris/.xfiles tajne'
alias koduj='cdetach tajne'

W tym przypadku katalog, w którym bêdziemy mogli przeglądaæ odkodowane pliki posiada nazwê "tajne", a jego scieżka dostêpu to: /securefs/tajne.

Oczywiście nazwê możemy sobie wybraæ dowolną. :-)

Nastêpnie w naszym domowym katalogu utwórzmy dołączenie symboliczne do katalogu /securefs/tajne za pomocą komendy:

/home/kris$ ln -s /securefs/tajne tajne

Wybór nazwy dołączenia także zależy od użytkownika. I to wszystko. Od tej pory używanie CFS staje siê dziecinnie proste.

Jeśli chcemy dostaæ siê do naszego zakodowanego katalogu wpisujemy:

/home/kris$ dekoduj

i podajemy hasło. Komenda "cd tajne" od razu przenosi nas tam gdzie trzeba, gdzie możemy buszowaæ sobie do woli :-), a "cd .." przenosi nas z powrotem do katalogu domowego. Proste i praktyczne. Po zakoñczeniu pracy wpisujemy:

/home/kris$ koduj

I już nikt nie odczyta naszych danych, włącznie z nami, chyba że użyjemy jeszcze raz komendy "dekoduj".

Na koniec mała uwaga. Kopiowanie, przenoszenie plików, przechodzenie do katalogów bêdących pod kontrolą CFS może byæ trochê opóźnione. Związane jest to z enkrypcją/dekrypcją dokonywaną w czasie rzeczywistym. No to bawcie siê dobrze.