Strona używa cookies (ciasteczek). Dowiedz się więcej o celu ich używania i zmianach ustawień. Korzystając ze strony wyrażasz zgodę na używanie cookies, zgodnie z aktualnymi ustawieniami przeglądarki.    X

We need to go DeEPer, czyli o bezpieczeństwie, UAC i nie tylko

Do wpisu natchnęła mnie dyskusja sprzed kilku dni z działem IT pewnej sporej firmy -(ponad 500 desktopów i laptopów) gdzie na spotkaniu omawialiśmy plan migracji z Windowsa XP do Windows 7. W środowisku tym bardzo istotne jest bezpieczeństwo systemów, więc doszło do rozpisywania za i przeciw migracji do Windows 7, lub Windows 8, oraz system 32-bitowy vs. 64-bitowy. W momencie, kiedy podałem argument, że 64-bity dla Windowsa to rozsądniejsze rozwiązanie także ze względu na bezpieczeństwo, niektóry popatrzyli na mnie jak na idiotę...

Wirusy komputerowe , czyli co nam wyjada sernik z lodówki

Jeszcze kilka lat temu, tj. w czasach, kiedy MacGyver robił rakiety dalekiego zasięgu ze spinacza i długopisu a Marty McFly starał się wrócić do przyszłości, nie było tak powszechnego dostępu do internetu (może przez to, że internetj raczej jeszcze wtedy nie istniał), świadomość co do zagrożeń od strony szkodliwego oprogramowania była bardzo niska. Pod koniec lat 80-tych programista-matematyk Ś.P. Marek Sell zauważył, że całkiem intratnym zajęciem może być pisanie programów antywirusowych - co niektórzy podejrzliwie doszli też do wniosku, że samo pisanie wirusów też może przynosić korzyści.
W tym samym czasie ja, jako gówniarz masakrujący dżojstik na River Raid i Boulder Dash nie za bardzo rozumiałem, co to te wirusy i jedynie przeglądałem bazę wbudowanych w mks_vir demostracji nabijając się np. z robala zgrzytającego przez wbudowany w peceta głośnik „Precz z Wałęsą!” (Cysta.8045) - tak, był taki wirus i całkiem prawdopodobne, że powstał w Polsce...

Pierwszego i jedynego wirusa w mojej karierze IT złapałem około roku '96, kiedy przytargałem z giełdy komputerowej IMMORTALa. Działanie nie było aż tak destrukcyjne (w określonym dniu miesiąca przewijał się określony napis przez ekran), ale zmieniał od rozmiar plików wykonywalnych, ponieważ robal ię „doklejał” do exec'ów i com'ów. Wtedy też zacząłem trochę bardziej się tym interesować – szczególnie, co to jest przerwanie 21 (http://www.empik.com/jak-pisac-wirusy-dudek-andrzej,290277,ksiazka-p).
W obecnych czasach jako wirus komputerowy określa się każdego rodzaju szkodliwe, złośliwe oprogramowanie. Cytując Wikipedię:

Wirus komputerowy – program komputerowy, posiadający zdolność replikacji, tak jak prawdziwy wirus, stąd jego nazwa. Wirus do swojego działania potrzebuje i wykorzystuje system operacyjny, aplikacje oraz zachowanie użytkownika komputera.

Pan Marek Sell występując w telewizji starał się uświadomić, że jest wirus komputerowy to kawałek sprytnie napisanego kodu (autorzy to często genialni programiści) a nie świadomy byt, który powstał z nicości i zabłąkanych bitów.
Z mojego doświadczenia w IT stwierdzam jedno – skończyły się czasy, że po powrocie do komputera w autogamiczny sposób wskoczył jakiś paskud, który skonsumował już dwa talerze z dysku twardego a na deser wysssał zawartość BIOSu. W większości sytuacji nie są to samo replikujące się programy, ale wcześniej przygotowane ataki bazujący na znanym problemie PEBKAC.

Nie chcę się w tym wpisie nad tym rozwodzić (powstanie o tym osobny tekst), ale jak większość ludzi związanych IT wie, niektórzy nie powinni mieć dostępu do komputera. Nie ważne, jakby ich edukować, nawet 15 latach pracy z klawiaturą jak ktoś im w mailu napisze:

„w celu otrzymania szybszego dostępu do twarzoksiążki proszę wejść w ten czarny ekran i wpisać "net user %username% /del"
to wykonają to. Ci sami użytkownicy otworzą każdy możliwy załącznik, który będzie miał nazwę przecudny_kotek_uratowany_przez_strażaka.exe). W takiej sytuacji czego by nie robić, osoba odpowiedzialna za ten komputer - czy to dział IT w firmie, czy stryjek Andrzej obsługujący Windowsy całej rodzinie – zes.... zasmuci się a nic na to nie poradzi. Może ograniczać prawa użytkownika, instalować programy antywirusowe i restrykcyjnie ustawiać UAC, nic to raczej nie da.

Okno zamknięte a jednak ciągnie po nogach

Przez lata pracy z ludźmi mającymi czasem małe pojęcie o komputerach zrozumiałem, że tłumaczenie na przykładach ma ogromny sens. Czasem patrzę z przymrużeniem oka, jak na szkoleniach finansowanych z funduszy UE ludziom, którzy uważają za najbardziej skomplikowaną rzecz techniczną włączenie dekodera telewizji cyfrowej a tu nagle trzeba wytłumaczyć co to jest katalog i plik - slajdy porównują więc to do dokumentów w teczkach schowanych do szuflady. Dokładnie jest tak samo z systemem operacyjnym: jeżeli w domu o wstawienie okna poprosimy osobę, która zostawi ogromne szpary pod parapetem, dodatkowo użyje przy niskiej temperaturze złej pianki uszczelniającej to nic dziwnego, że są przeciągi a źle konserwowane uszczelki szybko parcieją i też może być mało przyjemnie w mroźne wieczory.

Dość istotna kwestia jest już podczas instalacji Windowsa dotycząca polityki edukacji użytkownika. Jesteśmy pytani o nowy login, hasło i od tego momentu większość pracuje na koncie z uprawnieniami administratora. W systemach z rodziny *nix (Ubuntu itp.) jesteśmy proszeni o podanie hasła administratora (root), a następnie utworzenie konta użytkownika 'zwykłego'. Nigdy nie mogłem zrozumieć, czemu użytkownicy działający przemienne zarówno na Linuksach, jak i Windowsach stosują dwie różne polityki - w jednym systemie restrykcyjne podejście, delikatne uruchomianie aplikacji potrzebujących większych uprawnień przez 'sudo' a magiczne 'su – root' to już całkowite igranie ze śmiercią – natomiast w przypadku Windowsa pierwsze co robią po instalacji systemu, to dodanie swojego użytkownika do grupy 'administrators' i wyłączenie wszelakich 'UAC-utrudnień', bo wyskakują, drażnią i złorzeczą...

Zejdźmy na chwilę na ziemię, bo nawet stąd słyszę szczęk ściskanych pośladów miłośników jajek Torvaldsa: tak, są oczywiście błędy Windowsa (tzw. luki zero-day), które przy braku firewalla i łatek pozwalają na zdalny, nieautoryzowany dostęp do systemu. To samo tyczy się niektórych kwestii architektury Windowsa, Internet Explorera oraz popularnych programów pisanych czasami przez ludźmi, którzy z takimi kwalifikacjami nie powinni ustawiać nawet pralki. Prawda jest natomiast taka, że od czasów Windowsa 7 (szczególnie 64-bitowego) nie jest wcale tak źle, jeżeli oczywiście stosujemy się do pewnej 'higieny' systemu. W większości sytuacji dochodzi właśnie do infekcji na własne życzenie, tj. poprzez uruchomienie złośliwego pliku wykonywalnego... starszych wersje Internet Explorera mają strukturę dobrego czedara – w połączeniu z wirtualną maszyną Java script i Adobe Flash, gdzie 'action script' może zostać zaprogramowany do prostego pominięcia DEP / ASLR tworzy się mieszakna wybuchowa.

UAC-sruac

UAC („User Account Control, czyli „Kontrola Konta Użyszkodnika”) to mechanizm, który wraz z wprowadzeniem Windowsa Vista wzbudził w 2006 roku pewnie więcej kontrowersji, niż 18-latek strzelający do kolegów z klasy w Niemieckim Emsdetten. Do dzisiaj wpisując w google „UAC Windows Vista” natrafimy głównie na poradniki „jak wyłączyć to wielkie G”, ale rzadko kto dokładnie omawia mechanizm działania całkiem niegłupiego rozwiązania. Dla końcowego użytkownika kojarzy się to głównie z wyskakującymi oknami o treści typu „ar ju siur, że jesteś siur, co do tego ostatniego siur, że chcesz uruchomić Winampa?”. Mówiąc wprost – rozwiązanie, które użytkownikowi przyzwyczajonemu do Windowsa XP i niższych, mającemu nawet uprawnienia administratora nie do końca pozwalało na wszystko w systemie spotkało się z ogromną dezaprobatą a w rzeczywistości jest swego rodzaju odpowiednikiem 'sudo' znamemu np. z Linuksów.
W Windows 7 handlowcy i PRowcy zmusili jednak architektów systemu do pewnych modyfikacji: „nie może tak być, żeby użytkownik musiał myśleć! Zróbcie coś z tym!”. No i w W7 rzeczywiście – jakby ciszej! Czasem program zapyta, ale najczęściej jeden raz i jest luz. Zastosowano pewien trik: sprawdzane jest, czy nowy program został podpisany cyfrowo przez Microsoft – jeżeli tak, to jest dla UAC na „białej liście” i 'hulaj dusza, piekła nie ma'. Czy to jest dobre? Jakbym był autorem malware, to jasne, że świetne rozwiązanie – ułatwi to klepanie kodu, wystarczy np. wykorzystać powłokę explorera, bo... jest przecież podpisana przez Microsoft.
Problemem są też programiści – ciągle spotykam się z „dużymi” aplikacjami, które wymagają pracy na koncie administratora, lub wyłączenia UAC. Nóż mi się w kieszeni otwiera, jak czytam artykuły, gdzie doświadczony programista (MVP!) zaczyna od zdania:

Od kiedy User Account Control (UAC) pojawiło się w Viście, wyłączanie tego ustrojstwa to pierwsza rzecz jaką robię po instalacji świeżego systemu.

Nadaje się na temat na kolejny wpis blogowy, ale pierwszy komentarz praktycznie w stu procentach pokrywa się z moją opinią:

Jest to kompletna ignorancja, brak zrozumienia logiki systemu, który daje programiście chleb, oraz brak poszanowania odbiorcy docelowego swoich programów.

Historia developerów “mądrzejszych” od twórców OS jest długa i zawsze na końcu ma taki sam smutny skutek: cierpi user.

Drogi czytelniku – jeżeli dotarłeś do tego miejsca to jesteś wielki, że poświęciłeś czas na czytanie tekstu, który w zamyśle miał zająć pół strony dokumentu w LibreOffice Writer. Muszę jednak przestrzec, teraz już będzie całkowicie nudno, bo technicznie.
Wrócę może do początkowej tezy, że Windows 64-bitowy jest moim zdaniem bezpieczniejszy. Zacznijmy od DEP (Data Execution Prevention), czyli mechanizmowi zapobiegania wykonywania kodu z segmentu danych. Najprościej mówiąc za pomocą sprzętowego rozwiązania (na poziomie procesora) jak i programowego można określić, że dany fragment pamięci nie może mieć wykonywalnego kodu. Przed pojawieniem się dodatku SP2 dla Windows XP (który ogromnie zmienił ten system) byle sploit mógł wykonać kod, który wcześniej wrzucił za pomocą VirtualAlloc (http://msdn.microsoft.com/en-us/library/aa366887.aspx) mimo tego, że 'fragment pamięci' pamięci był oznaczony tylko do odczytu (PAGE_READWRITE). Z chwilą pojawienia się w procesorach dla Intela wsparcie dla eXecute Disable (XD) a od strony AMD No Execute (NX) – zrobiło się trochę lepiej, nad PAGE_READWRITE czuwa sprzęt i system operacyjny. Z racji tego, że jestem za cienki w uszach, żeby zrozumieć to dokładnie (znam skutki działania, ale nie sam mechanizm), odsyłam do literatury fachowej a na dobry początek np. http://technet.microsoft.com/en-us/library/bb457155.aspx.
Wracając do Windowsa, w wersjach 32-bitowych domyślnie DEP jest wyłączany ze względu na problemy z kompatybilnością niektórych programów (wyżej wspomniany PEBKAC programistów). W 64-bitowym środowisku programy nie mogą ominąć tak prosto tego mechanizmu a przynajmniej mają to wyraźnie utrudnione.

Drugim, chyba ważniejszym mechanizmem wspomnianym przez jest ASLR (Address Space Layout Randomization). Chyba każdy mający styczność z komputerami spotkał się z magiczym określeniem „przepełnienie buforu”. Tutaj znowu wszyscy mogą winić programistów z Redmont, rzadko kto jednak pomyśli o programistach aplikacji, którzy pozwalają na „wciśnięcie” spreparowanego fragmentu kodu do pamięci. W sytuacji, gdy jeszcze następuje taka dogodność, że aplikacja ma prawa administratora i możemy przewidzieć, gdzie dokładnie znajdzie się ten kod w pamięci już prosta droga do uruchomienia go. W Windows często szukano takich dziur i z użyciem różnych rodzajów ataku jak np. return2libc (podmiana adresu powrotu tak, aby wskazywał na jakąś funckję)
W systemach 32-bitowych (począwszy od Visty) też jest zaimplementowane ASLR, ale to tylko namiastka tego, co daje 64-bitowa przestrzeń adresowa.

ASLR w połączeniu z DEP daje bardzo mocny mechanizm bezpieczeństwa i przez to jest głównym celem badań zarówno od specjalistów od bezpieczeństwa jak i „hakerów” - w większości sytuacji z marnym skutkiem. Czy można w domowych warunkach w jakiś sposób kontrolować, co się dzieje w tych mechanizmach i jak chroniony jest nasz system operacyjny? Oczywiście, ale bywa to upierdliwe, jednak raz nabyta umiejętność i np. utworzenie pewnych szablonów pozwala nam poczuć się pewniejszym – wymaga jednak pracy.

Rok temu januszek opisywał metodę niezbyt przyjazną użytkownikowi:

Są też metody jeszcze bardziej upierdliwe (ale świetne w środowisku produkcyjnym), jak np. EMET, oferujący bardzo głęboką ingerencję w DEP, SEHOP, ASLR, czy Pinning.

W następnym wpisie postaram się opisać jak kontrolować procesy i sprawdzać do czego mają "prawa" (Proces Explorer" ze zbioru Windows SysInternals nadaje się idealnie), oraz jak tworzyć "template" zarówno do zastosowań domowych jak i korporacyjnych.

 

windows bezpieczeństwo porady

Komentarze

0 nowych
patryk9200   8 #1 20.12.2013 19:10

Świetny wpis. W pełni się z Tobą zgadzam. Hejt na UAC jest bezzasadny i często się bierze z braku podstawowej wiedzy na temat bezpieczeństwa.

parranoya   9 #2 20.12.2013 19:27

Hm... Ciekawe.

Vanshei   15 #3 20.12.2013 19:37

UAC w Viście faktycznie był trochę upierdliwy ale obecnie jestem na Win8 i tutaj mi zupełnie nie przeszkadza więc go nie ruszam :)
I pytanie o EMET czy warto go stosować na systemie 32bit ?

  #4 20.12.2013 20:05

Ustawienia UAC w wypadku Windows 7 i Windows 8 warto zmienić... tzn. przestawić na max, wtedy działa jak w Winodws Vista.
A po więcej informacji o EMET zapraszam do mojego własnego wpisu ;)
http://www.dobreprogramy.pl/lukasamd/Dodatkowa-ochrona-systemu-Windows-z-EMET-En...

@Vanshei:
Warto.

kwpolska   6 #5 20.12.2013 20:18

> gdzie doświadczony programista (MVP!)

MVP to nie zawsze programista.

rgabrysiak   12 #6 20.12.2013 20:35

Świetnie się czytało, czekam na więcej.

xomo_pl   21 #7 20.12.2013 20:36

@Vanshei, "UAC w Viście faktycznie był trochę upierdliwy ale obecnie jestem na Win8 i tutaj mi zupełnie nie przeszkadza więc go nie ruszam :)"

nic dziwnego, MS pod wpływem leniwców, którym nie chce się wykonać dodatkowego kliknięcia obniżył zakres działania UAC, do takiego stopnia, że właściwe w ogóle nie chroni systemu... dlatego w ustawiwniach kont użytkowników po wgraniu 7/8 trzeba zmienić na max ustawienia UAC- to pierwsze co robię po instalacji 7 czy pierwsze co zrobiłem na tablecie z 8 (teraz 8.1)...

@bachus, świetny wpis :)

bachus   20 #8 20.12.2013 22:30

@lukasamd: dzięki za linka do Twojego wpisu, musiałem go kiedyś pominąć, więc już nie ma sensu, żebym o tym za bardzo pisał ;-)

  #9 21.12.2013 09:31

A ja jestem rozczarowany, że skończyłeś wpis tam gdzie powinna rozpoczynać się najciekawsza część czyli jak stworzyć odpowiednie template/kontrolę procesów i prawa dostępu.
Trzymam za słowo, że pojawi się dalsza część.

  #10 21.12.2013 14:28

Tylko co z tego, że to upierdliwe okienko wyskakuje, skoro za 3\5\18 razem user nie czyta komunikatu tylko klika "Tak"? Gimbazyliony wyskakujących okienek powodują, że uwaga usera zostaje uśpiona, bo i tak zgodzi się na wszystko. Dla 99% ludzie ważne jest, by program DZIAŁAŁ. Guzik ich obchodzą uprawnienia, bo z reguły nie wiedzą nawet, co to jest. System Windows powinien mieć bazę danych, w której byłaby lista dopuszczonych aplikacji - jeżeli raz user dopuści program, po co ma to robić za każdym następnym razem?

Na Viście UAC był "pain in ass" i nie dziwię się, że ogarnięte osoby (te które wiedzą, że odpalanie exeków z poczty od nieznanych adresatów to średni pomysł) to wyłączały. W Windows 7/8 jest już OK, funkcja ta nie jest nachalna i "atakuje" usera wtedy, gdy trzeba.

xomo_pl   21 #11 21.12.2013 16:03

@~~(niezalogowany) (#10)
jak nie czytają prostego komunikatu to mają później za swoje.
UAC na standardowych ustawieniach w Win 7 i 8 jest bezużyteczny bo praktycznie nie reaguje na 3/4 działań w systemie.
Ustawienie z visty sprawiało, że UAC zabezpieczał komputer o ile user nie klikał bezmyślnie co mu się podświetliło- w praktyce z włączonym UAC w Viście nic samo nie mogło się wgrać czy zmienić zaawansowanych ustawień komputera jeśli user nie kliknął tak na ekranie....

  #12 22.12.2013 09:38

@~~
Coś w tym jest. Powinna istnieć możliwość wstępnej konfiguracji systemu, gdy użytkownik ma czas. Bo jeśli w czasie pracy co chwilę wyskakują okienka to użytkownik przestaje je czytać, a czasem woli po prostu zaryzykować zawirusowanie systemu - ale zdążyć z wykonaniem pracy. Zazwyczaj jest wtedy spóźniony z czymś i chce nadrobić, a tutaj nagle wyskakuje jakieś okienko o potwierdzenie przywilejów.
Domyślam się, że złośliwy kod może się dokleić do pliku uruchamialnego lub biblioteki dll którą ładuje, ale z drugiej strony to okienko przecież mi nie pokazuje informacji, którymi mógłbym zweryfikować czy program został zmodyfikowany.
Czekam na informacje jak w Windowsie (najlepiej 8 lub 8.1) ustawić taką wstępną konfigurację. Przez ostatnie 3 lata używałem głównie Linuksa (albo na 10 minut uruchamiałe XP w maszynie wirtualnej), teraz też używam, ale niektóre programy są w wersji tylko dla MS Windows, więc i Windowsa zainstalowałem. O ile skonfigurować Linuksa umiem, to Windowsa już nie, dlatego czekam na dalszą część artykułu.

  #13 23.12.2013 14:32

W 100% zgadzam się, zwłaszcza z akapitem o klikających w pliki ladny_kotek.exe, ale...

Co z tego, że są UAC, ASLR, DEP, zapora, antywirusy itd, skoro jest wiele wybitnie sprytnych paskudztw, które te wszystkie zabezpieczenia sobie najzwyczajniej w świecie omijają! Sam usuwałem wirusy z komputerów klientów, gdzie były konta zwykłych użytkowników (nie administracyjne). Malware właził przez programy lub dodatki od firm trzecich (np przez WinAmp Remote czy Skype) lub przez protokół SMB i nadpisywał plik hosts, lub podmieniał sterowniki od sieciówek (czasem nawet nawet skutecznie infekował obsługę całego stosu TCP/IP). Programy antywirusowe albo tego nie widziały, albo rozkładały wirtualne ręce. Okienko UAC nawet się nie pojawiało. Trzeba było ręcznie podmieniać pliki systemowe z zapasowej kopii systemu, która zawsze miałem na pendrivie. Dobrze, że widuję takie rzeczy na kompach klientów, bo gdybym się na tym nie znał i sam złapał coś podobnego, to bym się pewnie zraził do komputerów.

Dimatheus   22 #14 03.01.2014 15:18

Hej,

Świetny wpis. Czekam z niecierpliwością na kontynuację. :)

Pozdrawiam,
Dimatheus

KyRol   18 #15 11.01.2014 17:21

"Mówiąc wprost – rozwiązanie, które użytkownikowi przyzwyczajonemu do Windowsa XP i niższych, mającemu nawet uprawnienia administratora nie do końca pozwalało na wszystko w systemie spotkało się z ogromną dezaprobatą a w rzeczywistości jest swego rodzaju odpowiednikiem 'sudo' znamemu np. z Linuksów. (...) Nóż mi się w kieszeni otwiera, jak czytam artykuły, gdzie doświadczony programista (MVP!) zaczyna od zdania:"

Nie podzielam poglądu. Po pierwsze, nie porównywałbym UAC do sudo, bo ten pierwszy nie dorasta nawet do pięt samemu sudo, gksu czy kdesu. UAC z windy wymaga kliknięcia na tak, zgodę można wyrazić skrótem alt+k lub tabem i spacją, w zależności od wersji systemu i rodzaju pop-upu. Dla kogoś, kto tworzy jakiegoś szkodliwca nie jest to nawet 5 minut roboty. Co do sudo, gksu czu kdesu - zawsze trzeba podać hasło, nie ma easy, ażeby odpowiednio mądrego robala zrobić trzeba znaleźć odpowiednio więcej furtek i przy tym nieźle się napocić.

Kolejnym świetnym przykładem na to jak m$ dba o zabezpieczenia czy kontrolę swojego systemu, jest tenże ciekawy przypadeczek: http://www.dobreprogramy.pl/Xubuntu-to-prawdziwy-Windows,News,6315.html

Moim zdaniem, windzie daleko do doskonałości pod względem zabezpieczeń, być może jeśli z wp m$ by zrobił desktop, to może i wtedy porównania do GNU/Linuksów miałby sens, jak dla mnie, na dzisiaj takie wpisy jak ten to bardziej próba pocieszania się, że m$ coś robi, gdy nie robi tak na prawdę nic, dlatego ja się nie dziwię postawie osób pełniących funkcję MVP.

Draqun   9 #16 06.07.2014 10:09

A ja tam UAC lubię. Szczególnie gdy wnerwia on on innych i przychodzą do mnie z płaczem :P Wtedy każę zaprząc do pracy szare komórki :)