Igła w cyber-stogu
Oprogramowanie firmy Bosch zainstalowane w samochodach koncernu Volkswagen było bardzo przebiegłe. Rozpoznawało, czy pojazd jest poddawany testom w laboratorium, czy mknie po autostradzie. Zmieniało parametry pracy silnika tak, żeby w laboratorium ograniczyć wydzielanie szkodliwych substancji, a na szosie zapewnić maksymalną moc i sprawność jednostki napędowej. Dopiero specjalne badania przeprowadzone podczas normalnej eksploatacji pozwoliły zdemaskować tę sztuczkę.
Dlaczego nikt wcześniej tego nie wykrył?
Dlaczego nikt nie zażądał dostępu do kodów źródłowych oprogramowania, nie przejrzał ich i nie zauważył oczywistej machlojki?
Dlatego, że jest to niezwykle trudne i kosztowne. Przejrzenie milionów linii kodu w celu zrozumienia jego poprawnego działania i wykrycia działania niepożądanego wymaga nakładu pracy porównywalnego ze stworzeniem własnego oprogramowania.
Miliardy zatrutych źdźbeł
Złożoność problemu wyszukiwania niepożądanej funkcjonalności w sprzęcie elektronicznym i jego oprogramowaniu najłatwiej pokazać, przenosząc się ze świata układów scalonych, bitów i bajtów na tradycyjną polską wieś.
Wyobraźmy sobie gospodarstwo rolne, którego podstawę stanowi kilkusethektarowe, ciągnące się aż po horyzont pole uprawne. Jest upalny letni dzień, a na tym bezkresnym polu w równych rzędach stoją stogi. Nieruchomo, niczym żołnierze na defiladzie, gdy wykonywany jest hymn narodowy. Dziesiątki tysięcy starannie ułożonych snopków, z których każdy składa się z setek źdźbeł. Zimą to będzie pasza do wykarmienia pokaźnego stada zwierząt hodowlanych.
Wyobraźmy sobie teraz, że nocą na pole zakrada się zawistny sąsiad gospodarza i do któregoś ze stogów podkłada zarażone zjadliwym wirusem źdźbło. Jeśli choć jedno zwierzę je zje, to całe stado zachoruje i padnie. Obecność wirusa w źdźble można wykryć pod mikroskopem, ale… należy je WSZYSTKIE zbadać!
Zagadnienie wykrycia niepożądanej funkcjonalności w sprzęcie informatycznym jest właśnie tego typu zadaniem, tyle że miliony razy bardziej złożonym i kosztownym. Każdy z miliardów tranzystorów w układach scalonych i każdy z miliardów bitów oprogramowania może być wirusem, który upośledzi działanie urządzenia elektronicznego.
Sytuację pogarsza fakt, że najczęściej wrogowi nie chodzi o wywołanie natychmiastowej awarii sprzętu. W większości przypadków niepożądana funkcjonalność służy do skrytego wykradania informacji albo czeka na sygnał do destrukcyjnego ataku.
Miliardy wrogów
W powyższym rolniczym przykładzie gospodarz zna swoich sąsiadów, więc może stosunkowo skutecznie przeciwdziałać ich złowrogim planom. W cyberprzestrzeni jest inaczej. Cyberprzestrzeń to globalna wioska zasiedlona mieszkańcami o bardzo różnych intencjach. Wielu z nich nie ujawnia lub wręcz maskuje swoją tożsamość i miejsce prowadzenia działalności. W dodatku realizują ją nie bezpośrednio, ale za pomocą autonomicznego oprogramowania, które potrafi zarażać systemy na podstawie dość ogólnych reguł określonych przez atakującego.
W cyberprzestrzeni koszty ataku są bardzo małe, a koszty obrony niewspółmiernie duże. Skalę wyzwania doskonale ilustrują dwie liczby: jeden z dostawców oprogramowania antywirusowego podał, że każdego dnia analizuje około 350 tysięcy plików z podejrzaną zawartością i wykrywa co najmniej 10 tysięcy różnych przypadków oprogramowania o niepożądanej funkcjonalności. KAŻDEGO DNIA! Skala zjawiska jest trudna do wyobrażenia, a co dopiero do opanowania.
Uzasadnionym w tym miejscu wydaje się pytanie: dlaczego tak się dzieje i kto do tego dopuścił?
Odpowiedź jest stosunkowo prosta. Obecne powszechne cyber-niebezpieczeństwo jest wynikiem działania ludzi dobrej woli! I nie chodzi tu o tani sarkazm. Naukowcy, którzy tworzyli fundamenty wszechświatowej sieci wymiany danych i architekturę oprogramowania przeznaczonego do powszechnego użytku, skupiali się na dostarczeniu pożytecznych narzędzi swoim kolegom – ludziom otwierającym przed ludzkością nowe możliwości. Zapomnieli tylko, że społeczeństwa nie składają się jedynie z samych aniołów. Ich członkami są również złodzieje, oszuści i zabójcy.
Obecna architektura cyberprzestrzeni nie zapewnia jej użytkownikom praktycznie żadnego bezpieczeństwa. Wręcz przeciwnie – sprzyja osobom nieuczciwym ze względu na powszechną dostępność narzędzi informatycznych, łatwość podszywania się pod inne osoby oraz niedoskonałości oprogramowania realizującego podstawowe funkcje komunikacyjne.
Jak żyć?
Co zatem należałoby zrobić, żeby cyberprzestrzeń stała się bezpieczna?
Rozwiązaniem skutecznym byłaby radykalna jej przebudowa począwszy od fundamentów infrastruktury, a skończywszy na elementach wykorzystywanych przez wszystkich użytkowników sprzętu informatycznego. Niestety wygląda na to, że mimo istnienia technicznych możliwości, siła inercji związana z interesami producentów i konsumentów wykorzystywanych obecnie technologii jest zbyt duża. Bezkrytyczne stosowanie przez wiele państw rozwiązań firmy Microsoft jest znakomitym przykładem tego zjawiska. Ze wspomnianych wcześniej tysięcy zagrożeń wykrywanych codziennie przez specjalistów ponad 99% dotyczy systemu operacyjnego Microsoft Windows. Tymczasem polskie Ministerstwo Obrony Narodowej w swoich wytycznych od lat preferuje to właśnie oprogramowanie. Linux jest tylko tolerowany, choć w jego przypadku zagrożenia występują jedynie incydentalnie, a użytkownik może w pełni panować nad jego kodem źródłowym.
Rozwiązaniem na dziś – w sytuacji eksploatacji systemów o niedostępnych kodach źródłowych – jest dbanie o ich aktualność zgodnie z wytycznymi producenta, któremu z konieczności trzeba całkowicie zaufać.
Rozwiązaniem na przyszłość powinno być rozwijanie własnych opracowań opartych na sprawdzonych praktykach, algorytmach i protokołach. Takie podejście byłoby jednocześnie drogą ku gospodarce innowacyjnej, a nie odtwórczej, polegającej jedynie na weryfikacji i recenzowaniu czyichś dokonań podczas audytu zgodności i poprawności dostarczanych kodów źródłowych.