/setintegritylevel

Przekonanie uzytkowników (a czesto i fachowców), ze Windows Vista to nie tylko taki „XP z Aero” jest zadaniem nielatwym. Czasem ci bardziej swiadomi wiedza wiecej i mówia, ze to taki „XP z Aero i Bitlockerem”. Tymczasem ilosc zmian wewnatrz systemu jest ogromna i stopniowe ich odkrywanie powinno kazdego specjaliste przekonac, ze ma do czynienia z zupelnie nowa jakoscia. Jedna z takich nowosci gleboko wszytych w system jest ochrona integralnosci, okreslana w angielskich wersjach systemu jako „integrity levels”. Ujmujac rzecz w najwiekszym skrócie, stwierdzic mozna, ze kazdy obiekt (na przyklad proces, galaz rejestru czy plik na dysku) ma swoja etykiete dotyczaca poziomu ochrony. System obsluguje szesc poziomów:

  • Trusted Installer
  • System
  • High
  • Medium
  • Low
  • Untrusted

Zwyklemu uzytkownikowi trudno w praktyce uzywac poziomów System i Untrusted, ale nie jest to zupelnie niemozliwe.

Zeby rozpoczac zabawe z poziomami ochrony, nalezy wiedziec jedna wazna rzecz: do takiej zabawy trzeba miec prawa. Wykonuje sie to oczywiscie w „Local Security Policy”, Local Policies, User Rights Assignement. Tam nalezy odnalezc pozycje “Modify an object label” I dodac uprawnionych uzytkowników.

Wracajac do rzeczy. O co chodzi z tymi etykietami? Chodzi o bardzo prosty mechanizm, znany w informatyce od co najmniej trzydziestu lat, dzieki któremu obiekty „mniej wazne” nie moga dlubac w obiektach „wazniejszych”. Wiedzac, ze mówiac o obiektach nalezy myslec na przyklad o procesach i plikach – cala idea robi sie malo skomplikowana i nietrudna do zrozumienia. Jestem uzytkownikiem. Mam etykiete „Medium”. Mój proces ma etykiete „Medium”.  Wazny dla systemu plik ma etykiete „System”. Efekt? Nie moge nic w nim zapisac. A dlaczego? Bo domyslnie Windows Vista przestrzega polityki „No Write Up” czyli zabron pisania w obiektach oznaczonych jako wazniejsze. Istnieja jeszcze polityki „No Execute Up” oraz „No Read Up”, których nazwy dosc jasno tlumacza sposób dzialania. Nalezy zdawac sobie sprawe, ze polityki te aktywuje sie indywidualnie i mozna równie dobrze równoczesnie wlaczyc wszystkie trzy jak tylko jedna. Lepiej wiedziec, ze dlubanie w tych akurat ustawieniach na produkcyjnym systemie moze skonczyc sie spektakularna katastrofa.

Tak naprawde, aby uproscic sytuacje, nie kazdy obiekt faktycznie ma etykiete.  Nie jest to powaznym problemem, bo system Windows Vista jest swiadomy takiej sytuacji i uznaje, ze obiekty bez etykiety tak naprawde sa obiektami o poziomie uprawnien „Medium”. W praktyce oznacza to, ze jak komus zostanie przyznana etykieta „Low” (na przyklad procesom z temporary Internet files) to pliki takie nie popsuja innych obiektów, nawet w sytuacji, kiedy te inne obiekty nie maja wlasnej etykietki.  Z drugiej strony, brak etykiety nie zabroni uzytkownikom ani systemowi dostepu, poniewaz nie byloby to specjalnie rozsadne.

Pora na maly test. Po kolei nalezy:

  1. Uruchomic dwie konsole. Jedna na prawach administratora a druga na prawach uzytkownika
  2. Utworzyc katalog na dysku c: i w nim dwa pliki
  3. Ustawic prawa plików na everyone:full control.
  4. Zapisac cos do plików jako administrator i jako uzytkownik
  5. Ustawic poziom ochrony jednego z plików na wysoki
  6. Cos dopisac do pliku jako administrator i jako uzytkownik i cos próbowac pomieszac
  7. Usunac pliki via GUI
  8. Zastanowic sie nad zaobserwowanym zachowaniem (najwazniejsze!)

 

Dla tych, którzy lubia miec latwo:

  1. Uruchomic cmd.exe
  2. Uruchomic cmd.exe jako administrator
  3. Jako uzytkownik zalozyc katalog  (md c:\ileveltest)
  4. W konsoli uzytkownika wpisac echo pierwsza linia > C:\ileveltest\test1.txt – to utworzy pierwszy plik
  5. W konsoli uzytkownika wpisac echo pierwsza linia > C:\ileveltest\test2.txt – to utworzy drugi plik
  6. W konsoli administratora wpisac icacls c:\ileveltest\*.* /grant:r everyone:f – to ustawi liberalne prawa ACL, które nie beda przeszkadzaly w dalszych eksperymentach
  7. W konsoli administratora ustawic etykiete dla pliku test1.txt: icacls c:\ileveltest\test1.txt /setintegritylevel h 
  8. W konsoli uzytkownika wpisac echo test z etykieta >> C:\ileveltest\test1.txt i zobaczyc, ze sie nie udalo
  9. Porównac zachowanie test1.txt i text2.txt z punktu widzenia konsoli zwyklego uzytkownika. Mozna spróbowac na przyklad ren c:\ileveltest\test1.txt nowy_test1.txt  albo del c:\ileveltest\test1.txt 
  10. Po wszystkim spróbowac skasowac z poziomu GUI (okna explorera) katalog ileveltest, tylko nalezy wczesniej sprawdzic czy zadna konsola nie ma aktywnej sciezki wewnatrz tego katalogu.

Co z tego wszystkiego wynika? Ano pare prostych wniosków:

  • Prawa NTFS to nie wszystko. Poziomy integralnosci tez skutecznie moga zabronic dzialania na obiektach.
  • Explorer jest swiadomy, ze poziomy takie istnieja i jak trzeba zastosowac poziom wyzszy niz uzytkownik posiada – wyswietli Secure Desktop Prompting czyli kawalek mechanizmu UAC
  • W Windows Vista pojawilo sie polecenie icacls.exe. Bylo juz cacls, xcacls, subinacl. Teraz jest kolejne i niemalo potrafi.

I wniosek ogólny postawiony na poczatku tekstu: W Windows Vista zmienilo sie troche wiecej niz na pierwszy rzut oka sie wydaje.

Autor: Grzegorz Tworek