pobierz plik referatu - BDAS

Transkrypt

pobierz plik referatu - BDAS
Rozdział monografii: 'Bazy Danych: Struktury, Algorytmy, Metody', Kozielski S., Małysiak B., Kasprowski P., Mrozek D. (red.), WKŁ 2006
Rozdział 31
w
Przegląd zagrożeń w systemach informatycznych
i metod ochrony
w
1 Wstęp
da
.b
w
Streszczenie. Niniejszy rozdział opisuje zagadnienia związane z bezpieczeństwem systemów informatycznych, ze szczególnym uwzględnieniem metod
ochrony samej aplikacji przed niepowołanym użytkowaniem. Celem autorów
jest przedstawienie i opisanie niebezpieczeństw oraz zagrożeń na jakie narażone są współczesne systemy informatyczne, a także wskazanie możliwych
rozwiązań pomagających chronić gromadzone w nich dane. Autorzy postawili sobie za cel dokonanie przeglądu problematyki, począwszy od pojedynczej
aplikacji a na ochronie całego systemu skończywszy.
pl
s.
Systemy informatyczne wraz ze zgromadzonymi danymi stanowią niezwykle cenne dobro,
którego bezpieczeństwo powinno być zapewnione i pilnowane z użyciem możliwie jak największej ilości pewnych technik i sposobów. W szczególnych przypadkach – obejmujących
medyczne systemy informatyczne – gromadzone dane dotyczą zdrowia człowieka i jakiekolwiek manipulacje przez osoby nieupoważnione mogą narazić pacjenta na utratę zdrowia
czy nawet życia. Ponadto stanowią one niezwykle cenne źródło informacji statystycznych
na temat zachorowalności populacji, metod i skuteczności leczenia oraz zależności pomiędzy kosztem leczenia a jego skutecznością.
Ochrona danych, a co za tym idzie, bezpieczeństwo samego systemu informatycznego
jest wymuszona i prawnie regulowana przez ustawę o ochronie danych osobowych z dnia
29 sierpnia 1997r. W myśl artykułu 36 tej ustawy, administrator jest zobowiązany zabezpieczyć dane przed udostępnieniem ich osobą nieupoważnionym. Nawet nieumyślne niedopełnienie tego obowiązku podlega sankcjom prawnym (art. 52 tejże ustawy).
Paweł Mosz, Michał Momot, Aleksander Owczarek, Joanna Śledzik:
Instytut Techniki i Aparatury Medycznej ITAM, ul. Roosevelta 118, 41-800 Zabrze, Polska
email:{moszp, michalm, aleck, asledzik}@itam.pl
Aleksander Owczarek: Katedra i Zakład Bioniki, Wydział Farmaceutyczny i Oddział
Medycyny Laboratoryjnej
email: [email protected]
(c) Copyright by Politechnika Śląska, Instytut Informatyki, Gliwice 2006
Rozdział monografii: 'Bazy Danych: Struktury, Algorytmy, Metody', Kozielski S., Małysiak B., Kasprowski P., Mrozek D. (red.), WKŁ 2006
P.Mosz, M. Momot, A. Owczarek, J. Śledzik
2 Sieć
w
Złożoność współczesnych systemów informatycznych powoduje, że do ich pełnej funkcjonalności nie wystarcza już pojedynczy komputer, lecz wymagany jest cały szereg maszyn
połączonych i komunikujących się poprzez sieć. Z punktu widzenia bezpieczeństwa, podłączenie do sieci naraża system informatyczny na szereg niebezpieczeństw. Jednym z takich
niebezpieczeństw jest złośliwe oprogramowanie (malicious software), którego klasyfikacja
wygląda następująco [1].
− Masqueraders – programy udające przydatne aplikacje, w rzeczywistości zawierające kod, który w przypadku wywołania wykonuje niepożądaną lub szkodliwą czynność. Przykładem takich programów są konie trojańskie.
− Incapacitation – programy tej kategorii unieszkodliwiają system docelowy. Przykładem są bomby logiczne, fragmenty kodu zawartego w legalnym programie, które
przy określonych warunkach (obecność bądź brak pewnych plików, wystąpienie konkretnego dnia tygodnia bądź daty) doprowadzają do wykonania szkodliwych czynności. Innym przykładem są ataki DoS (Denial of Service), powodujące zawieszenie
systemu na skutek dużej ilości napływających danych.
− Corruption – Do tej kategorii zaliczamy wirusy, programy modyfikujące autoryzowane oprogramowanie poprzez wstawianie własnego kodu w kod innego programu.
Kod wirusa, oprócz przepisu na kopiowanie samego siebie, zawiera również pewne
określone, szkodliwe dla systemu działanie.
− Misuse/Usurpation – Do tej kategorii zaliczamy robaki, programy wykorzystujące
połączenia sieciowe do rozprzestrzeniania się z systemu na system. Szkodliwe działanie robaków może polegać jedynie na powielaniu samego siebie – robak po dostaniu się do systemu tworzy dwie kopie samego siebie, następnie każda z kopii tworzy
dwie kolejne kopie doprowadzając w ten sposób do wykorzystania całych zasobów
procesora i pamięci oraz do zapełnienia całych zasobów na dyskach twardych. Robak
może również zachowywać się jak wirus.
W celu uniknięcia skutecznego ataku na system przez złośliwe oprogramowanie stosuje
się następujące środki zaradcze [2].
− Ściany ogniowe – urządzenia, których jedynym przeznaczeniem ma być zapewnienie bezpieczeństwa lokalnej sieci podłączonej do internetu. Każdy łączący i rozpoczynający prace z systemem musi zostać zweryfikowny przez ścianę ogniową.
− Kontrola dostępu – właściwa identyfikacja i uwierzytelnianie użytkowników zapobiega przenikaniu złośliwego oprogramowania do wnętrza systemu. Środki zapewniające właściwa identyfikację i uwierzytelnianie to m.in. techniki ochrony haseł [3].
− Suma kontrolna – obliczenie sumy kontrolnej dla konkretnego pliku pozwala na detekcję ewentualnych zmian w kodzie programu, dokonanych przez złośliwe oprogramowanie.
− Skanery wirusów – aplikacje służące do detekcji złośliwego oprogramowania,
a w szczególności wirusów. Wykrycie odbywa się na podstawie sygnatury wirusa,
bądź też przy użyciu reguł heurystycznych. Bardziej zaawansowane skanery są
w stanie wykryć złośliwe oprogramowanie na podstawie jego działalności w systemie.
Kolejne zagrożenie dla systemów informatycznych stanowi nieautoryzowany dostęp do
systemu przez nie uprawione osoby. Typowe włamanie do systemu polega na uzyskaniu
dostępu do konta legalnego użytkownika lub administratora systemu przez osoby nieupoważnione. Z reguły przejęcie konta jest równoznaczne z nabyciem praw do wszystkich
usług i zasobów dostępnych dla jego właściciela. Najbardziej cenne są konta administrato-
da
.b
w
w
pl
s.
310
(c) Copyright by Politechnika Śląska, Instytut Informatyki, Gliwice 2006
Rozdział monografii: 'Bazy Danych: Struktury, Algorytmy, Metody', Kozielski S., Małysiak B., Kasprowski P., Mrozek D. (red.), WKŁ 2006
Przegląd zagrożeń w systemach informatycznych i metody ochrony
w
rów, które umożliwiają dostęp do wszystkich zasobów systemu. Do najczęściej stosowanych technik włamań do systemu należą [4], [5]:
− łamanie haseł dostępu – istnieje szereg wariantów zastosowania tej techniki uzależnionych od pewnych czynników. Jednym z nich jest próba wielokrotnego zdalnego
połączenia się z systemem i logowania się na konto istniejącego w systemie użytkownika. Warunkiem pomyślnego zalogowania jest znajomość identyfikatora konta
i hasła. Ten pierwszy uzyskuje się zazwyczaj przez adres e-mail dowolnego użytkownika, natomiast jako hasło podaje się kolejno wyrazy występujące w odpowiednio przygotowanym słowniku. Ręczne wykonywanie tego procesu jest niezwykle
czasochłonne dlatego stosuje się odpowiednie programy, które za pośrednictwem
serwerów proxy wykonują szereg połączeń w jednostce czasu;
− sniffing – polega na przechwytywaniu informacji przesyłanych za pośrednictwem
sieci. Może być prowadzony za pomocą urządzeń podsłuchowych, podłączonych do
sięci na drodze transmisji danych, bądź też przy użyciu zwykłych komputerów wyposażonych w odpowiednie oprogramowanie, które selektywnie odczytuje pakiety
danych przesyłane przez sieć. Wykorzystuje się tu fakt, że większość kart sieciowych
potrafi pracować w trybie mieszanym (promiscous mode) zezwalającym na odczyt
pakietów przesyłanych do innych maszyn w sieci, a nie tylko do własnych;
− spoofing – polega na podszywaniu się komputera pod inny. Odbywa się to poprzez
odpowiednią modyfikację pakietów IP, co powoduje, że komputer odbierający te
pakiety błędnie identyfikuje jego nadawcę. Przykładowy atak przy zastosowaniu tej
techniki przedstawiono na rys. 1.
da
.b
w
w
Rys. 1. Atak z wykorzystaniem techniki „spoofing”
pl
s.
Komputer (A) nawiązuje połączenie z serwerem (B), (X) stosując sniffing wyłapuje pakiety
dążące z (A) do (B). Po pewnym czasie wywołuje niestabilność połączenia pomiędzy (A)
i (B) poprzez podesłanie (A) odpowiednich, błędnych pakietów. Następnie sam – korzystając z poprzednio wyłapanych danych – wysyła prawidłowe pakiety do (B). Z punktu widzenia (A) wszystko wygląda na chwilowe kłopoty techniczne z połączeniem, natomiast (X)
pracuje w tym czasie na (B) jako autoryzowany użytkownik.
Celem uniknięcia skutecznych ataków przy zastosowaniu ww. sposobów stosuje się
odpowiednie techniki zabezpieczające. Przede wszystkim należy zadbać o odpowiedni dobór haseł; jako hasło nie powinno się wybierać potocznie stosowanych słów. Dodatkowo
należy zadbać aby w przypadku kilkukrotnego błędnego podania hasła konto użytkownika
przynajmniej czasowo zostało zablokowane. Uniemożliwi to poprawną pracę programom
wielokrotnie logującym się na konto użytkownika przy użyciu haseł pobieranych ze słownika. Celem uniknięcia sniffingu należy wszelkie dane przesyłane siecią wcześniej szyfrować. Kolejnym sposobem jest zablokowanie możliwości podglądania pakietów dzięki zastosowaniu aktywnych hubów, dzielących sieć na kilka wzajemnie nie widzących się podsięci. Ataki spoofing można częściowo zablokować stosując odpowiednio skonfigurowany
filtr pakietów, który blokuje wszystkie pakiety napływające z sieci publicznej, mające adres
źródłowy należący do komputera z sieci prywatnej. Bardziej zaawansowane przeciwdziałanie tego rodzaju atakowi wykonuje się przy pomocy odpowiednio skonfigurowanej ściany
ogniowej.
311
(c) Copyright by Politechnika Śląska, Instytut Informatyki, Gliwice 2006
Rozdział monografii: 'Bazy Danych: Struktury, Algorytmy, Metody', Kozielski S., Małysiak B., Kasprowski P., Mrozek D. (red.), WKŁ 2006
P.Mosz, M. Momot, A. Owczarek, J. Śledzik
3 Aplikacja zabezpieczona przed niepowołanym użytkowaniem danych
w
Niniejszy podrozdział obejmuje zagadnienia dotyczące bezpieczeństwa aplikacji zarówno
pod względem ochrony kodu przed niepowołanym odczytem jak i nielegalnym użyciem samej aplikacji. Ochrona kodu ma za zadanie chronić pomysły i rozwiązania algorytmiczne
zawarte w aplikacji przed niepowołanym użyciem przez osoby trzecie. Techniką umożliwiającą podgląd kodu jest tzw. „reverse engineering” polegający na uzyskaniu kodu źródłowego aplikacji z dostarczonego przez producenta kodu wykonywalnego. Narzędziami
umożliwiającymi zastosowanie tej techniki są dekompilatory oraz disassemblery. Innym
niebezpiecznym narzędziem z punktu widzenia bezpieczeństwa aplikacji są debugery,
programy umożliwiające śledzenie krok po kroku działania aplikacji. Istnieje kilka skutecznych metod obrony przed disassemblacją aplikacji jak również przed debugowaniem.
w
3.1 Kompresja aplikacji
da
.b
w
Kompresji poddają się wszystkie pliki, w tym także wykonywalne. Przy użyciu odpowiednich algorytmów, zawartość pliku wykonywalnego zostaje tak zmieniona, że poddanie go
procesowi disassemblacji dostarcza w wyniku nonsensowny kod źródłowy. Aplikacja poddana kompresji uruchamia się nieco dłużej ze względu na fakt, że po uruchomieniu jest
zdekompresowywana w pamięci do postaci ciągu instrukcji mogących być poprawnie interpretowanych przez procesor.
3.2 Makra przeciw disassemblacji
Zastosowanie instrukcji skoku „call” pod adres będący środkiem instrukcji powoduje, że
przykładowy kod uzyskany w procesie dissasemblacji (tabela 1).
Tabela 1. Kod uzyskany w procesie dissasemblacji.
Adres
Instrukcja
E803000000
D2EB
0B33
C04B4142
call 00000014
shr bl,cl
or esi, [ebx]
ror byte ptr
[ebx+41h],42h
pl
s.
0000000C
00000011
00000013
00000015
kod instrukcji
W trakcie wykonywania przez procesor, po napotkaniu i wykonaniu instrukcji skoku „call
00000014” ulegnie zmianie (tabela 2).
Tabela 2. Kod zmodyfikowany w wyniku napotkania instrukcji skoku.
Adres
kod instrukcji
00000014
00000016
00000017
00000018
33C0
4B
41
42
Instrukcja
xor
dec
inc
inc
eax,eax
ebx
ecx
edx
Oczywistym jest fakt, że kod uzyskany w procesie disassemblacji jest błędny.
312
(c) Copyright by Politechnika Śląska, Instytut Informatyki, Gliwice 2006
Rozdział monografii: 'Bazy Danych: Struktury, Algorytmy, Metody', Kozielski S., Małysiak B., Kasprowski P., Mrozek D. (red.), WKŁ 2006
Przegląd zagrożeń w systemach informatycznych i metody ochrony
3.3 Wykrywanie debugerów
w
Należy mieć świadomość, że działający równocześnie z aplikacją debuger jest oznaką, że
prawdopodobnie działanie aplikacji jest śledzone. Skuteczne wykrycie debugera jest więc
niezwykle istotne i umożliwia skuteczną obronę poprzez wymuszenie zakończenia działania debugera. Procesory x86 umożliwiają wykrycie aktywnego debugera, poprzez podgląd
zawartości rejestrów DRx będących rejestrami debugera. Standardowo wartość rejestru
DR7 jest ustawiona na 400h. Jakakolwiek inna wartość tego rejestru oznacza działający
w tle debuger. Kolejnym skutecznym sposobem umożliwiającym wykrycie aktywnego debugera jest próba wywołania określonej funkcji wchodzącej w skład bibliotek debugera –
jeśli próba się powiedzie, oznacza to aktywny debuger.
w
3.4
Ochrona przed nielegalnym użytkowaniem aplikacji
da
.b
w
Jednym z możliwych rozwiązań chroniących aplikację przed niepowołanym użytkowaniem
jest klucz programowy. Tego rodzaju zabezpieczenie realizuje się poprzez wprowadzenie
pliku będącego kluczem programowym w określone miejsce na dysku. Klucz programowy
opracowywany jest dla konkretnego użytkownika i dostarczany przez producenta oprogramowania. Aplikacja kontroluje jego obecność oraz zawartość i w przypadku gdy jest ona
nieprawidłowa, blokuje własne uruchomienie. Częsta praktyką jest umieszczanie w kluczu
programowym stałej służącej do odkodowania zaszyfrowanych części programu. Kolejną
skuteczną metodą ochrony aplikacji medycznej przed nielegalnym użytkowaniem jest
aktywacja on-line przez Internet (rys. 2).
pl
s.
Rys. 2. Aktywacja oprogramowania przez Internet
W trakcie instalacji użytkownik podaje swoje dane, następnie aplikacja łączy się z serwerem producenta gdzie dane użytkownika są weryfikowane i w przypadku ich potwierdzenia
aplikacja zostaje zarejestrowana. Aby uniknąć prób nielegalnej rejestracji poprzez symulację odpowiedzi serwera, w trakcie rejestracji serwer producenta może dodatkowo wysyłać
krótkie pliki danych bez których aplikacja nie może poprawnie funkcjonować.
Metodą uznawaną obecnie za najbardziej skuteczną jest zastosowanie klucza sprzętowego – niewielkiego urządzenia elektronicznego podłączanego do jednego z portów komputera. Ogólna zasada funkcjonowania tego typu zabezpieczenia jest prosta: aplikacja wysyła
do portu, gdzie podłączony jest klucz, pewne dane i oczekuje na określoną odpowiedź. Jeśli
jej nie otrzyma, nie zostanie uruchomiona. Producent dostarcza zatem wraz z aplikacją
klucz, bez obecności którego funkcjonowanie aplikacji nie jest możliwe. Każdy klucz posiada indywidualne cechy w postaci niepowtarzalnego numeru fabrycznego, co powoduje,
że dana instancja aplikacji może pracować tylko z jednym konkretnym kluczem. Unika się
313
(c) Copyright by Politechnika Śląska, Instytut Informatyki, Gliwice 2006
Rozdział monografii: 'Bazy Danych: Struktury, Algorytmy, Metody', Kozielski S., Małysiak B., Kasprowski P., Mrozek D. (red.), WKŁ 2006
P.Mosz, M. Momot, A. Owczarek, J. Śledzik
w
dzięki temu prób nielegalnego użytkowania aplikacji poprzez wykonanie duplikatu klucza.
Całość komunikacji pomiędzy aplikacją a kluczem jest kodowana. Najczęściej stosowanym
algorytmem kodowania jest DES (Data Encryption Standard) [6]. Skuteczność zabezpieczenia aplikacji kluczem programowym jest uzależniona od jego prawidłowego użytkowania. Niezwykle istotnym jest, aby sprawdzanie obecności klucza przez aplikację odbywało
się wielokrotnie i w różnych fragmentach programu, dzięki czemu znacząco utrudnia się
próbę modyfikacji kodu aplikacji celem ominięcia sprawdzania obecności klucza. Dodatkowym utrudnieniem jest wprowadzenie kontroli CRC zabezpieczającej przed dokonywaniem
zmian w kodzie aplikacji. Większość kluczy sprzętowych dysponuje również zapisywalną
pamięcią. Daje to możliwość umieszczenia wewnątrz tej pamięci kodów potrzebnych do
odkodowania ważnych części programu. Unika się dzięki temu prób emulacji klucza przez
inny program. Pamięć zapisywalna umieszczona w kluczu daje dodatkowo możliwość
umieszczenia tam części kodu aplikacji, bez których niemożliwe jest jej poprawne działanie.
w
w
4 Czynnik ludzki
Literatura
1.
3.
4.
5.
6.
7.
8.
Taxonomy of Threats and Security Services for Information Systems, Gulachenski and Cost,
(Working paper: Project No.:8353Z, Contract No.:DAAB07-94-C-H601), MITRE, 1994
Joint NEMA/COCIR/JIRA Security and Privacy Committee, Defending Medical Information
System Against Malicious Software, 2003
Niezgódka J., Jak bronić się przed hackerami, Komputerowa Oficyna Wydawnicza “HELP”,
Warszawa 1998
Stawowski M., Ochrona informacji w sieciach komputerowych. ArsKom, Warszawa 1998
Dudek A., Nie tylko wirusy, Wydawnictwo HELION, Gliwice 1998
Sadowski A., Wybrane zagadnienia kryptologii i ochrony informacji, Wydawnictwo HELION,
Gliwice 1999
Jakubski K. J., Przestępczość komputerowa jako nowe zjawisko kryminologiczne w Polsce.
Materiały ze szkolenia kadry kierowniczej PP COR, Lubostroń, 7-9 listopada 1997
Biuletyn Informatyki Medycznej 2/2005
pl
s.
2.
da
.b
Badania [7] wykazują, że większość (54%) awarii systemu spowodowana jest błędem człowieka. O odpowiedni poziom bezpieczeństwa systemu należy zadbać już we wczesnej fazie
projektowania, uwzględniając hierarchie użytkowników, dzięki której ogranicza się dostęp
do pełnej funkcjonalności systemu określonej grupie osób. Równie istotne jest czasowe wykonywanie kopii bezpieczeństwa danych przechowywanych w systemie, na nośnikach wymiennych (taśmach, płytach CD/DVD, dyskach wymiennych), bądź też użycie serwerów
lustrzanych (RAID) [8].
314
(c) Copyright by Politechnika Śląska, Instytut Informatyki, Gliwice 2006