Kategorie
Bez kategorii

Jak zacząć pracę w IT?

Jak zacząć pracę w IT?

Ostatnio coraz częściej spotykam się z pytaniem “jak zacząć pracę w IT”. Słyszę to pytanie od moich znajomych, ich znajomych i coraz częściej widzę je w różnych sieciach społecznościowych. Widząc jak z czasem coraz więcej ludzi postanawia zainteresować się tą dziedziną, postanowiłem spróbować coś podpowiedzieć w tej kwestii w ramach tego podcastu. Pragnę jednak z góry ostrzec, że odpowiedź na to pytanie nie jest prosta, ponieważ przekwalifikowanie to proces złożony z kilku kroków i wymagający czasu. Nie ma też jednego niezawodnego sposobu przejścia do IT. Myślę, że każdy kto przeszedł już tę drogę może sam opowiedzieć własną historię. Postanowiłem wszystkie własne przemyślenia na ten temat podsumować w tym odcinku licząc na to, że komuś z Was się przydadzą.

W branży IT pracuje bardzo wiele wyspecjalizowanych inżynierów jak na przykład programiści, administratorzy, inżynierzy DevOps, architekci baz danych, testerzy i wielu innych. Są jednak również liczni pracownicy nietechniczni jak choćby rekruterzy, menedżerowie, marketingowcy, handlowcy i tak dalej. Ta druga grupa pełni nieraz bardzo istotną rolę jak na przykład wyjaśnianie nietechnicznemu klientowi jak działa produkt, albo znajdują odpowiedniego specjalistę technicznego, który rozwiąże problemy klienta. Śmiem twierdzić, że bez właśnie tych nietechnicznych pracowników firmy kontraktorskie lub consultingowe nie miałyby tak dużego wzięcia w dzisiejszych czasach. Obie grupy specjalistów, ci techniczni i ci nietechniczni idealnie się uzupełniają i wspólnymi siłami popychają do przodu proces tworzenia niezwykłych produktów. Zatem zanim zaczniecie szukać pracy w IT zadajcie sobie pytanie, czy aby na pewno chcecie wykonywać pracę techniczną. W IT można przecież wykonywać ciekawe zadania, ale jedynie orientować się w technologiach, bez dokładnej ich znajomości. Jeśli lubicie codziennie rozmawiać z nowymi ludźmi i jak to się mówi “znacie się na ludziach”, może warto zostać rekruterem. Jeśli lubicie chodzić na spotkania z klientem, słuchać jego potrzeb i przekazywać je programistom może warto zostać menedżerem projektu. Lubicie porządkować pracę innych, jesteście poukładani i macie posłuch wśród ludzi, może warto zostać Scrum Masterem dzięki którym całe firmy działają sprawniej. Oczywiście każda z tych ról wymaga innego poziomu wiedzy technicznej, jednakże wystarczy tutaj tylko pewne zorientowanie w temacie. Zatem pierwszy krok w drodze do znalezienia pracy w tej branży to zadanie sobie pytania “czy na pewno chcę zajmować się zagadnieniami technicznymi” ponieważ ta branża również potrzebuje ludzi o innych specjalizacjach. Dopiero po szczerym przemyśleniu tematu można przejść dalej.

Załóżmy, że jednak po namyśle postanawiacie wykonywać pracę techniczną. Postanawiacie zająć się programowaniem, administrowaniem czy jakimś innym kierunkiem inżynierskim. Jak pewnie wiecie, technologie rozwijają się bardzo szybko, dla tego w trakcie Waszej pracy będziecie musieli się cały czas dokształcać i uczyć nowych rzeczy niezależnie którą ścieżkę wybierzecie. Z tego również względu będziecie musieli dogonić swoich rówieśników, którzy już w branży pracują. Możliwe w związku z tym jest, że pierwsze miesiące w nowej pracy będą intensywne. Szczególnie jeśli dostaniecie pracę w startupie, bo tam tempo prac jest większe niż w dużych firmach. W dużych korporacjach natomiast zazwyczaj presja jest znacznie mniejsza, ale i tempo rozwoju osobistego jest mniejsze. Nie mam tutaj jednoznacznej odpowiedzi która opcja jest lepsza na pierwszą pracę. Zazwyczaj w startupie można bardzo szybko zdobyć umiejętności, których w korporacji można by się uczyć nawet 2-3 razy dłużej z różnych względów. A co za tym idzie potencjalne zarobki rosną również znacznie szybciej. Trzeba jednak się nastawić na to, że nieraz po powrocie do domu trzeba będzie coś doczytać albo czegoś się pouczyć. Osobiście polecam rozpoczęcie kariery w startupie, ale każdy musi sam podjąć taką decyzję.

Niezależnie czy będziecie pracować w startupie czy wielkiej międzynarodowej korporacji i niezależnie jaką ścieżkę rozwoju wybierzecie, jest pewien zestaw umiejętności, które musi posiąść każdy

techniczny pracownik. Niezależnie czy zajmiecie się testami, programowaniem gier czy czymkolwiek innym, musicie znać kilka podstawowych narzędzi.

Pierwsze narzędzie to git. Wiecie pewnie, że aplikacje czy skrypty się pisze w formie odpowiednio przygotowanych plików tekstowych, które nazywamy kodem źródłowym. Ale czy zastanawialiście się jak ten kod się rozwija? Przecież na tych samych kodach źródłowych pracuje kilka osób w zespole. Jeden dopisuje jakąś funkcjonalność, drugi poprawia jakiś błąd, a trzeci testuje jakiś zupełnie nowy pomysł na optymalizację. Przecież każdy z tych ludzi zmienia nieraz te same pliki tekstowe. Wydawałoby się więc, że już po dwóch dniach każdy z nich będzie miał inaczej działający kod a nikt nie będzie miał efektu pracy ich wszystkich. Otóż ten właśnie problem rozwiązuje system kontroli wersji git. Git został stworzony przez samego Linusa Torvaldsa twórcę Linuxa. Git jest narzędziem, które między innymi właśnie zbiera zmiany w kodzie naniesione przez wielu programistów i łączy je w jedną całość. Dzięki temu kod możne być rozwijany przez ludzi w dowolnej części świata, którzy nawet nie musieli się nigdy widzieć na oczy. Git jest dzisiaj podstawą do bardzo wielu jeszcze nowocześniejszych technologii, które wykraczają poza zakres tego odcinka. A skoro jest podstawą do innych technologi, nie sposób go uniknąć. Dla tego warto zacząć się go uczyć jeszcze przed rozpoczęciem poszukiwan pracy w IT.

Kolejną rzeczą jaką musimy traktować poważnie jest system kontroli zadan. Każda firma zajmująca się IT korzysta z jakiegoś rozwiązania tego typu. Praca praktycznie każdego technicznego pracownika w tej branży przebiega według takiego samego schematu. Pracownik zagląda na listę zadan, które powinien wykonać w tym tygodniu, bierze zadanie o aktualnie najwyższym priorytecie i kiedy je wykona pisze krótki komentarz po czym zamyka je. Z punktu widzenia takiego pracownika jest to właściwie zalogowanie się na odpowiednią stronę, przesunięcie prostokącika z nazwą zadania z kolumny “do zrobienia” do kolumny “w trakcie” a potem przesunięcie do kolumy pod tytułem “zrobione”. Niby prosta czynność i wydaje się początkowo bezcelowa. Zaręczam jednak, że wcale nie jest bezcelowa. Ktoś kto przygotował nam te zadania i nieraz znajduje się w innym kraju codziennie ogląda postęp prac zespołu. Jeden rzut oka na tablicę z zadaniami bardzo mu pomaga w dalszym planowaniu prac. Jeśli nie aktualizujemy swojej tablicy z zadaniami to nie dość, że utrudniamy pracę swoim przełożonym to jeszcze dajemy do zrozumienia, że nic nie zrobiliśmy. Lepiej poważnie traktować takie tablice i jeszcze przed rozpoczęciem pracy zapoznać się z jednym z takich systemów śledzenia zadan. Wystarczy pół godziny pobawić się jakąś aplikacją jak na przykład Trello i już będzie wiadomo jak będziemy wykonywać zadania w praktycznie każdej firmie. Niby proste, ale czasem trudno się do tego przyzwyczaić. Dla tego zachęcam do zaczęcia już teraz.

Należy przyznać, że praca w IT przyciąga introwertyków. Muszę jednak ostrzec tych, którzy są już wręcz aspołeczni i za wszelką cenę pragną uniknąć kontaktu z ludźmi. Praca w IT to dość często praca zespołowa. Bardzo rzadko zdarza się być jedyną osobą odpowiedzialną za jakiś obszar. Zazwyczaj należymy do zespołu, z którym musimy współpracować. Nie oznacza to, że całe 8 godzin będziemy w kilka osób pisać kod. Raczej chodzi o to, żeby nie obawiać się zapytać kogoś z zespołu o pomoc lub wyjaśnienie jakiejś sprawy, kiedy już sami nie dajemy rady rozwiązać jakiegoś problemu. Nieraz też będzie sytuacja, kiedy w kilka osób będziecie próbować rozwikłać jakiś problem. Ogólnie rzecz ujmując będziecie mieć czas na wykonywanie swoich zadan samodzielnie, ale przygotujcie się również na współpracę, ponieważ cała siła w zespole, który gra do tej samej bramki.

Ostatnia rzecz, którą należy bezwzględnie posiadać to samodzielność. Bez wątpliwości w pierwszych dniach a może i tygodniach pracy na nowym stanowisku wiele rzeczy będzie się wydawać niejasnych i niezrozumiałych. To naturalne. Nawet doświadczeni programiści zadają pytania swoim młodszym kolegom, którzy dłużej pracują w tym konkretnym projekcie. Jednakże wszystko ma swoje granice i Wasze pytania powinny być poprzedzone próbą samodzielnego zmierzenia się z problemem. Jeśli

zadacie komuś z zespołu pytanie, czemu coś zostało zaprogramowane w dany sposób, prawdopodobnie udzieli Wam wyczerpującej odpowiedzi. Jednakże, jeśli zapytacie, jak działa jakaś ogólnodostępna biblioteka, możecie się liczyć z asertywną odpowiedzią w stylu “przeczytaj dokumentację” albo “zapytaj wujka Google”. Pamiętajcie, że bardzo dużo wiedzy jest już w Internecie a bardzo duża ilość darmowych kodów jest dostępna wraz z dokumentacjami. Warto też od razu w nowej pracy zapytać, gdzie jest dokumentacja do produktu, który rozwija firma. Nieraz się okaże, że takiej nie ma, ale to już inny problem. W każdym razie zanim zapytacie kogoś z zespołu o dowolną rzecz, spróbujcie sami odpowiedzieć sobie na pytanie poprzez wszystkie znane Wam sposoby. Pamiętajcie, że Wasi nowi znajomi z pracy i szef również obserwują, czy się uczycie i będą oczekiwać, że z czasem liczba Waszych pytan spadnie do minimum.

Jeszcze na koniec jeden komentarz odnośnie umiejętności. Pewnie nieraz spotkaliście się z taką opinią, że praca w IT, a szczególnie na stanowisku programisty wymaga znajomości matematyki. Moim zdaniem ten mit zrodził się w czasach, kiedy w szkołach średnich pisaliśmy jakieś proste programy do obliczania pola trójkąta czy tam innej figury geometrycznej. W prawdziwej pracy programisty wymagane są zupełnie inne umiejętności, jak na przykład modyfikowanie kodu do bardziej zwięzłej i czytelnej formy, albo wyszukiwanie błędów logicznych w kodzie. Oczywiście są i tacy programiści, którzy programują modele matematyczne, ale coraz częściej tę rolę przejmują analitycy czy statystycy. W dzisiejszych czasach nie oczekiwałbym od programisty umiejętności rozwiązywania równan różniczkowych. Ci ludzie na codzien borykają się z zupełnie innymi problemami, niż matematyka. W związku z tym, jeśli chcecie zostać programistami, lepiej skupcie się na algorytmice a nie matematyce.

Wymieniliśmy kilka ogólnych umiejętności pracowników IT. Skupmy się teraz na tym co robić, kiedy już dokonacie wyboru swojej specjalizacji. Nieraz pytanie jakie zadają mi znajomi chcący się przebranżowić brzmi “z jakich źródeł się uczyć?”. Zazwyczaj oczekują odpowiedzi w stylu “przeczytaj książkę x”, albo “zapisz się na kurs y”. Jednak z góry muszę rozczarować oczekujących takiej prostej odpowiedzi. Nieraz spotkałem się z kandydatami świeżo po weekendowym kursie, którzy niestety nie znali podstaw. Nieraz też spotykałem ludzi po kilkuletnich studiach z informatyki nie znających wyżej opisanego systemu git. Z drugiej strony natknąłem się parę razy na młodych ludzi jeszcze w wieku licealnym którzy w pewnych obszarach onieśmielali wiedzą. Kluczem do zdobycia wiedzy w temacie nie jest wybranie odpowiedniego źródła, ale pokora do jej zgłębiania. Zawsze będzie coś nowego do nauczenia się, zawsze będzie jakaś nowa technologia do okiełznania. Nawet eksperci dość często doczytują na temat najnowszych zmian w technologiach, bo po prostu inaczej nie da się za tym nadążyć. W związku z czym, zamiast pytać skąd się uczyć, po prostu uczcie się tak, jak Wam najdogodniej. Nieważne czy są to internetowe kursy, książki, dokumentacje czy co tam jeszcze. Jeśli macie jakichś znajomych już od dawna zajmujących się IT, zapewne usłyszycie od nich coś w stylu “nie ma sensu uczyć się z książek, bo one się szybko deaktualizują”. I co prawda należy się zgodzić z takim zdaniem, to należy pamiętać o jednej rzeczy. To zdanie płynie z ust doświadczonych nieraz specjalistów. Oni mogą nową technologię poznać w ciągu tygodni a czasem nawet dni. Im faktycznie wystarczy przeczytanie paru artykułów i na zasadzie podobienstnwa do czegoś z czym mieli już do czynienia poradzą sobie doczytując dokumentacje na bieżąco. Jeśli jednak jesteście nowicjuszami, nie zrobi Wam to różnicy, jeśli przeczytacie dwuletnią książkę. W koncu chodzi o to, żeby zacząć swoją pierwszą pracę a nie zostać mistrzem technologii w kilka dni. Zatem uczcie się tak, jak Wam wygodnie i co najważniejsze, bądźcie pokorni, nie udawajcie, że wiecie wszystko. Szczególnie jak dojdzie do rozmowy rekrutacyjnej.

Kolejne pytanie, które kilka razy już dostałem od zainteresowanych przekwalifikowaniem brzmi “czy warto zdobywać certyfikaty”. Tutaj akurat moje zdanie jest jednoznaczne. Myślę, że na początek

kariery jak najbardziej warto zdobyć jakiś certyfikat nawet jeszcze przed rozpoczęciem pierwszej pracy. Jest jednak pewien warunek. Certyfikat, który chcecie zdobyć musi być rozpoznawalny na świecie i mieć jakąś wartość. Nikomu nie zaimponujecie certyfikatem uczestnictwa w jednodniowym kursie obsługi Linuxa. Jeśli chcecie pokazać, że faktycznie już coś umiecie, wyszukajcie w sieci frazę “najlepsze certyfikaty z Linuxa” albo “Najlepsze certyfikaty dla programisty Java” i tak dalej. Szukajcie na stronach anglojęzycznych. Dość szybko wyrobicie sobie zdanie co w Waszej dziedzinie zainteresowania jest obecnie uznawane za wartościowe. Pewnie nieraz znajdziecie ranking 10 najlepszych certyfikatów dla danej specjalizacji. Wybierzcie coś z pierwszej trójki i zacznijcie się przygotowywać. Osobiście preferuję certyfikaty, które były poprzedzone egzaminem typu “hands-on” czyli takiego, kiedy dostajemy laptopa, problem do rozwiązania i mamy jakiś ograniczony czas na jego rozwiązanie. Jednakże certyfikaty uzyskane po egzaminie z pytaniami zamkniętymi też nieraz są dobrze odbierane. Warto jeszcze wspomnieć, że egzaminy dość często są płatne a im wyższy poziom zaawansowania egzaminu tym cena jest wyższa. Myślę jednak, że potraktowanie jednego z takich podstawowych egzaminów jako inwestycji będzie dobrym kierunkiem. Ostatecznie, jeśli pracodawca zobaczy CV bez doświadczenia w branży, ale ciekawy certyfikat w odpowiedniej sekcji, może uznać, że ma do czynienia z człowiekiem, który już podjął jakiś wysiłek i wydal pieniądze na szkolenie się w dziedzinie. Czyli musi to traktować poważnie. Na pewno pracodawca nie przejdzie koło takiego CV obojętnie.

Jest jeszcze jedna rzecz, którą zawsze doradzam swoim znajomym, którzy chcą się przebranżowić, szczególnie jeśli ich praca wiązać się będzie z częstym obcowaniem z kodem. Zatem przede wszystkim programiści, ale także i inne specjalizacje mogą skorzystać z tej rady. Pamiętacie, kiedy na początku tego odcinka wspominałem o systemie kontroli wersji git? Udowodnijcie, że umiecie się nim posługiwać, oraz pisać czytelne kody. Stwórzcie własne repozytorium kodu na GitHubie i udostępnijcie je publicznie. Jako programiści możecie w nim umieścić jakiegoś prostego klona Ubera. Jako inżynierzy DevOps możecie umieścić jakiś kod konfigurujący infrastrukturę w chmurze. Wykażcie się pomysłowością. Nie zakładajcie, że Wasz kod będzie przez kogoś wykorzystywany produkcyjnie. Jedynie stwórzcie swoje własne repozytorium i pochwalcie się nim pracodawcy. Nawet jeśli pracodawcy się nie spodoba Wasz kod, możecie zapytać co jest w nim nie tak i pewnie udzieli Wam porad jak go poprawić. W efekcie na kolejne spotkanie rekrutacyjne będziecie mieć już lepszy kod i co najważniejsze, wiedzę zdobytą za darmo od kogoś doświadczonego. Zachęcam do tworzenia swoich własnych repozytoriów i udostępniania ich światu nie tylko na początku swojej kariery, ale i przez cały czas jej trwania. To genialny sposób na uzyskiwanie porad od najróżniejszych ludzi w Internecie.

Dochodzimy do momentu, kiedy zostajecie zaproszeni na rozmowę kwalifikacyjną. Szczerze mówiąc w tej branży nie ma jakiegoś stałego schematu takich spotkan. Czasem rozmowy są jednoetapowe, czasem i trójetapowe. Czasem jesteśmy proszeni o rozwiązanie jakiegoś problemu poprzez napisanie kodu, czasem tylko jesteśmy pytani jak byśmy dany problem rozwiązali i tak dalej. Nieważne jaki byłby przebieg takiej rozmowy rekrutacyjnej, mam tylko jedną radę. Szczerość zawsze popłaca. Kiedy ktoś zada pytanie, na które nie znacie odpowiedzi, powiedzcie szczerze, że nie wiecie i krótko dajcie znać jakie kroki byście podjęli, aby się dowiedzieć, gdyby taki problem naprawdę miał miejsce w Waszej pracy. Zwykłe “nie wiem, ale sprawdziłbym dokumentację albo wyszukał w internecie” nieraz wystarczy. Na rozmowach rekrutacyjnych bardzo rzadko trafiają się tacy kandydaci, którzy już mają całkowitą wiedzę w tematach, które akurat są potrzebne w danym projekcie. Czasem ludzie z wieloletnim doświadczeniem nie znają odpowiedzi na podstawowe pytania, ponieważ na przykład z używanych w projekcie 8 technologii, mieli do czynienia z sześcioma. Zatem jeśli czegoś nie wiecie, szczerze to przyznajcie. Techniczny pracownik natychmiast zauważy próbę wymyślenia czegoś na poczekaniu.

Mam nadzieję, że te kilka ogólnych rad pomoże Wam znaleźć swoje nowe miejsce w tym niezwykle dynamicznym świecie. Jak zawsze przy poszukiwaniu pracy w zupełnie nowej branży, początkowo trzeba poświęcić trochę czasu, aby dogonić tych, którzy już pracują. Każdy zaczyna trochę inaczej, jedni zaczynają wysyłać CV wcześniej, inni później. Ja mogę jedynie zapewnić, że jeśli weźmiecie do serca wymienione przeze mnie porady, Wasze szanse na znalezienie swojej pierwszej pracy na stanowisku technicznym znacząco wzrosną. Może nawet ośmieli Was to do wynegocjowania trochę wyższej pensji. Życzę więc powodzenia w uczeniu się nowych rzeczy i poszukiwaniu nowej wymarzonej pracy. Życzę również sukcesów na nowym stanowisku, kiedy już to nastąpi. Może kiedyś spotkamy się przy jakimś projekcie i nawzajem nauczymy się czegoś od siebie?

Kategorie
Bez kategorii

Czy Twój telefon Cię śledzi?

Czy Twój telefon Cię śledzi?

Wsiadamy do samochodu, wpisujemy do aplikacji adres budynku, do którego chcemy jechać, po czym wygodnie jedziemy do celu przy swojej ulubionej muzyce. Prowadzeni jesteśmy przez nasz smartfon, który zna nasze położenie i dokładną drogę do celu. Nic nadzwyczajnego jak na 21. wiek.

  • Ale w jaki sposób nasz telefon zna naszą lokalizację?
  • Czy używa do tego celu jednej technologii czy wielu?
  • I co najważniejsze, jaką faktycznie cenę płacimy za ten luksus nawigowania nas do celu?

Nasza lokalizacja jest bardzo cenną daną, ponieważ dużo o nas mówi. Na jej podstawie można dość precyzyjnie określić nasze nawyki i preferencje. Technologii śledzenia posiadaczy smartfonów jest kilka, dla tego możliwości poznania nas i wykorzystania tych danych są dość okazałe. Przyjrzyjmy się wszystkim metodom jakich używają nasze telefony, aby śledzić naszą lokalizację.

GPS

Zacznijmy od najbardziej oczywistej metody śledzenia lokalizacji naszego smartfonu, czyli GPS. Global Positioning System został wprowadzony w latach 70 ubiegłego stulecia w celu umożliwienia Departamentowi Obrony USA określania lokalizacji w czasie rzeczywistym. Każdy nowoczesny smartfon jest wyposażony w odbiornik fal radiowych działających w częstotliwościach GPS. Aby system działał prawidłowo, nasz smartfon musi być w zasięgu przynajmniej czterech satelitów GPS i odbierać nadawane przez nie fale radiowe. Satelita zna swoje dokładne położenie oraz czas nadawania wiadomości poprzez te fale. Znając czas nadania wiadomości z satelity, dokładne jej położenie w tym czasie oraz czas propagacji fal, można określić odległość odbiornika, czyli naszego smartfona, od satelity. Mając przynajmniej cztery takie odległości, można dość łatwo obliczyć długość i szerokość geograficzną oraz wysokość elipsoidalną. Innymi słowy w zasadzie wszystko co jest nam potrzebne do obliczenia naszej lokalizacji z dokładnością do metra, to wiadomość otrzymana z czterech satelitów. Zwracam tutaj uwagę, że nasz smartfon jedynie odbiera i interpretuje sygnały, które są dostępne prawie w każdym miejscu na powierzchni ziemi. Obecnie na orbicie krąży kilkadziesiąt satelitów GPS, więc nie ma obawy, że nie będziemy w zasięgu przynajmniej czterech, jeśli nie będziemy osłonięci budynkami. GPS pomimo swojego wieku nadal jest jednym z najbardziej dokładnych i wydajnych systemów lokalizacji. Kilka razy zetknąłem się ze zdziwieniem, dla czego podczas wejścia na pokład samolotu i włączeniu “trybu samolotowego” nadal telefon zna lokalizację. Otóż “tryb samolotowy” w naszych smartfonach wyłącza tylko odbiór i nadawanie na częstotliwościach sieci komórkowych, oraz czasem wifi i bluetooth. Nie ma nic wspólnego z GPS. Dla tego też, jeśli nasz telefon ma włączony “tryb samolotowy” ale jako urządzenie cały czas działa, nadal może zbierać dane z satelitów i określa położenie. Po wylądowaniu, kiedy ma już dostęp do Internetu, może równie dobrze udostępnić całą zapamiętaną historię do aplikacji, którym udostępniliśmy usługi lokalizacji do wglądu. Włączenie “trybu samolotowego” tak naprawdę tylko blokuje możliwość pobrania mapy cyfrowej na tle której wyświetla się ta ładna kropeczka reprezentująca naszą lokalizację w naszej aplikacji do nawigacji. Lokalizowanie nas przez GPS można wyłączyć tylko wtedy, kiedy w ustawieniach naszego telefonu przełączymy “usługi lokalizacji”. Wtedy tylko nasz telefon przestanie odbierać fale radiowe z satelitów GPS.

 

Sieć komórkowa

Aplikacje, których używamy dość często proszą nas o dostęp do naszych lokalizacji, aby te dane monetyzować. Dostawcy reklam wiedzą, że GPS może nie sprawdzić się w budynkach podziemnych albo takich o bardzo grubych ścianach. I tutaj z pomocą przychodzi kolejna metoda śledzenia naszej lokalizacji, czyli sieci komórkowe. Każdy telefon posiada numer IMEI, czyli International Mobile Equipment Identity. Numer IMEI jest wyjątkowy dla każdego urządzenia mobilnego na świecie, niezależnie od firmy, która takie urządzenie wyprodukowała. Dodatkowo, każda karta SIM ma wyjątkowy numer IMSI czyli Internationa Mobile Subscriber Identity. Aby telefon działał prawidłowo, czyli żeby dało się faktycznie do kogoś zadzwonić, musi połączyć się ze stacją bazową telefonii komórkowej. Zapewne każdy z Panstwa widział niejeden masz telekomunikacyjny z kilkoma bądź kilkunastoma nieraz antenami skierowanymi w różne strony. To właśnie stacja bazowa. Czasem w naszym zasięgu znajduje się jedna taka stacja, a czasem ich kilka. Aby przez telefon można było dzwonić, musi on bez przerwy sprawdzać, ile stacji bazowych jest w jego zasięgu. Dla tego regularnie co sekundę wysyła swój IMEI oraz IMSI w powietrze, aby poinformować stacje bazowe, że jest w pobliżu. Każda stacja bazowa w zasięgu odpowiada, aby można było określić, która z nich jest najbliżej. Na każdej z tych stacji bazowych pozostaje informacja, “urządzenie z tym IMEI oraz z tym IMSI było w pobliżu w tych godzinach”. Ale jakby tego było mało, naszą lokalizację można określić za pomocą tzw. triangulacji. Jeśli na podstawie mocy sygnału z danej stacji jesteśmy w stanie określić odległość od telefonu, to już przy danych z trzech takich stacji za pomocą prostej geometrii możemy określić dość dokładne położenie. Znamy dokładne położenie stacji bazowych i znamy odległość telefonu od każdej z nich. Dysponując zatem danymi o położeniu stacji bazowych oraz historią wysyłanych identyfikatorów IMEI oraz IMSI, można odtworzyć z dość dużą dokładnością, gdzie dany telefon się znajdował i w jakim czasie. Zarówno telefon może trzymać historię odwiedzanych stacji bazowych, jak i operator sieci komórkowych musi przynajmniej jakiś czas trzymać historię logowan telefonów do stacji bazowych. Czy producent telefonu albo operator sieci komórkowej monetyzuje zebrane lokalizacje? Powtórzę tylko, że są to dość cenne dane, bo ujawniają nasze nawyki konsumenckie. Wiedząc jakie miejsca odwiedzamy, można poznać nasze zainteresowania i podsunąć nam odpowiedną reklamę lub ofertę.

WiFi

Czasem zasięg telefonii komórkowej również potrafi zawodzić, ale nie jest to problemem dla dzisiejszej technologii. Istnieją jeszcze inne metody lokalizowania urządzen. WiFi jest jedną z nich. Tak samo jak w IMEI oraz IMSI w sieciach komórkowych są niepowtarzalnymi identyfikatorami urządzenia oraz karty SIM, tak w dla WiFi takim identyfikatorem jest adres MAC oraz BSSID, czyli Basic Service Set Identifier. Jeśli idziemy przez miasto z naszym telefonem i mamy włączone WiFi to możemy nawet nie podłączać się do żadnego routera, ale nasz telefon, cały czas będzie skanować pobliską przestrzen w poszukiwaniu punktu dostępu. Nasze telefony w celu zlokalizwania najbliżej położonych punktów dostępowych (czyli na przykład routerów bezprzewodowych) bez przerwy wysyłają w świat swój wyjątkowy numer MAC. Jeśli jakiś punkt dostępowy otrzyma taką wiadomość, odpowie swoim wyjątkowym numerem BSSID. BSSID jest też rutynowo wysyłany w przestrzen bez wcześniejszej prośby, jeśli domyślne ustawienia nie zostały zmienione. Idąc przez miasto możemy natrafić na dziesiątki albo i setki takich punktów dostępowych. Nasz telefon może zapamiętać całą historię znalezionych punktów i udostępnić ją zainstalowanym aplikacjom. Takie dane później w połączeniu z danymi z GPS oraz sieci komórkowej zostają geograficznie scalane i budowane są globalne mapy punktów dostępowych WiFi. Takie globalne mapy zawierają wszelkie informacje jakie udało się zebrać poprzez zwykłe nasłuchiwanie komunikacji między smartfonami a punktami dostępu nawet jeśli nie były połączone. Jedynie próbowały sprawdzić co jest w ich otoczeniu. Globalne mapy punktów dostępu są cały czas aktualizowane. Można niektóre znaleźć w Internecie i obejrzeć za darmo. Zatem znowuż, posiadając historię pobliskich punktów dostępowych, które mijaliśmy w trakcie spaceru, możemy zostać zlokalizowani z dużą dokładnością. Im więcej punktów dostępu minęliśmy, tym dokładniej można nas namierzyć.

Bluetooth

Bluetooth jest kolejnym bardzo użytecznym narzędziem do lokalizowaniu nas. Bezprzewodowe słuchawki, zegarki czy inne urządzenia są faktycznie bardzo dogodne. Jednakże pod pewnymi względami bluetooth działa podobnie jak inne sieci bezprzewodowe. Kiedy tylko włączamy bluetooth na naszym urządzeniu, zaczyna ono natychmiast wysyłać w świat informację między innymi o modelu naszego telefonu oraz niepowtarzalny adres MAC. Tak, bluetooth też ma swój adres MAC, podobnie jak WiFi. Taki sygnał może być odebrany przez każdego, nawet zwykłego przechodnia, który też ma włączony bluetooth i nawet nie musi się z nami łączyć. Bluetooth 5.1 jako jeden z najnowszych standardów tej technologii jest w stanie lokalizować urządzenia z dokładnością do centymetra. Nic dziwnego, że w budynkach hoteli, centrach handlowych i innych dużych obiektach nieraz montuje się specjalne sygnalizatory bluetooth, które cały czas skanują otoczenie w poszukiwaniu pobliskich urządzen. Takie dane są wysyłane do serwerów o dużej mocy obliczeniowej i dalej przetwarzane w różnych celach. Czyż informacja o wszystkich odwiedzanych sklepach i spędzonym tam czasie nie jest łakomym kąskiem dla właściciela sieci centrów handlowych? Jeśli mamy aplikację danego centrum handlowego, możemy właśnie na podstawie w ten sposób zebranych danych otrzymywać powiadomienia o zniżkach na potencjalnie ciekawe dla nas produkty. Co prawda bluetooth można dość łatwo wyłączyć. Będzie się to wiązało z utratą połączenia ze słuchawkami bezprzewodowymi, ale w niektórych modelach telefonów bluetooth nadal będzie wysyłał swoje identyfikatory w świat. Trzeba zatem wyłączyć również skanowanie bluetooth w nieco głębszych ustawieniach, aby faktycznie to uniemożliwić.

Ultrasonic Cross-Device Tracking

Wymieniliśmy już chyba wszystkie technologie łączności bezprzewodowej. Jak widać wszystkie mogą posłużyć do śledzenia naszej lokalizacji. Ale jest jeszcze jedna technologia, która tak naprawdę nie kojarzy się za bardzo z łącznością. Jednakże jest bardzo skuteczna i co gorsza bardzo trudno stwierdzić czy i ewentualnie, kiedy używa jej nasz telefon. Technologia ta nie doczekała się jeszcze eleganckiej polskiej nazwy. Ultrasonic Cross-Device Tracking, czyli w skrócie uXDT to technologia, która może działać na prawie każdym urządzeniu. Może to być zarówno smartfon, tablet, laptop i w zasadzie cokolwiek wyposażonego w głośnik i mikrofon. Podstawą działania tej technologii są ultradźwięki wysyłane przez nadajnik oraz odbierane przez mikrofon naszego telefonu. Załóżmy, że oglądamy reklamę jakiejś popularnej sieci restauracji w telewizji i mamy przy sobie nasz smartfon z zainstalowaną aplikacją, również dostarczoną przez tę sieć restauracji. Jako że nasz telewizor jest wyposażony w głośniki, może w trakcie audycji reklamy wysłać dodatkowo dźwięki o bardzo wysokiej częstotliwości niesłyszane przez człowieka. Dźwięki te zostają przechwycone przez mikrofon naszego telefonu. Jeśli aplikacja tej sieci restauracji ma dostęp do mikrofonu, może otrzymać te dźwięki i odpowiednio je zinterpretować. W zależności od tego jak już jest zaprogramowana ta aplikacja, może dalej wysłać dane do analiz. Sygnały wysyłane w ten sposób mogą nieść raptem kilkanaście bitów na sekundę i na odległość kilku do kilkunastu metrów. Nie jest to za dużo, ale wystarczy do przekazania identyfikatora reklamy. Urządzenie z zainstalowaną aplikacją, czyli nasz smartfon, może po otrzymaniu identyfikatora wykonać takie czynności jak wysłanie na wskazane serwery reklamodawcy naszego numeru telefonu, lokalizacji czy wielu innych rzeczy. Dane o lokalizacji mogą pochodzić zarówno z pozostałych technologii, jak i być powiązane z identyfikatorem reklamy, na przykład dany identyfikator reklamy został wyemitowany tylko w danym miejscu. Co jest jeszcze bardziej atrakcyjnym dla reklamodawcy jest to, że niezależnie od producenta naszych urządzen czy danych ich logowan, będzie on w stanie powiązać wszystkie nasze urządzenia i na podstawie otrzymanych z nich danych utworzyć jeszcze dokładniejszy profil naszych nawyków konsumenckich. Do tej pory, jeśli używaliśmy kilku różnych urządzen, reklamodawca widział każde z nich jakby to była inna osoba. Na smartfonie oglądaliśmy zdjęcia kotów, na tablecie sukienki a na laptopie coś związanego z pracą. Z uXDT, reklamodawca jest w stanie powiązać wszystkie nasze urządzenia, żeby jeszcze lepiej nas profilować. Nadajnikiem ultradźwięków może być, także nasz laptop. Jeśli obejrzymy na nim reklamę albo po prostu wejdziemy na jakąś stronę internetową, która spowoduje wyemitowanie ultradźwięków przez jego głośniki, może również właśnie zachodzić profilowanie nas. Praktycznie każde urządzenie mogące nadawać reklamy jest w stanie nadawać sygnał uXDT. Dla tego też właściciele centrów handlowych, stadionów czy innych obiektów są zainteresowani tą technologią, żeby śledzić swoich klientów. Czy zdarzyło się komuś z Panstwa zobaczyć, że jakaś aplikacja na smartfonie używa mikrofonu choć wydawałoby się, że wcale tego nie potrzebuje? Może to być wskazówka, że aplikacja ma taką funkcjonalność. uXDT działa na większości głośników i większości mikrofonów dostępnych w sklepach. Nic dziwnego, że można tę technologię wykorzystać używając prawie każdego urządzenia mobilnego. Można powiedzieć, że używając tej technologii nasze telefony nie podsłuchują tego co mówimy, ale bez problemu mogą słuchać tego co inne urządzenia w niewielkiej odległości mają do powiedzenia. Jedynym sposobem zablokowania uXDT w aplikacjach na naszych smartfonach jest odłączenie lub ograniczenie ich dostępu do mikrofonu. Zachęcam do przejrzenia ustawien swojego telefonu i zwrócenia szczególnej uwagi czy pewne aplikacje nie mają takiego dostępu, choć zdają się go nie potrzebować.

Pamiętajmy...

Informacja o naszej lokalizacji jest bardzo cenna i dość łatwa do monetyzowania. Tak naprawdę poprzez zwykłe noszenie ze sobą naszych ulubionych urządzen, sami ją udostępniamy najróżniejszym podmiotom, przez co stajemy się jeszcze łatwiejszym celem reklamodawców. Technologii jest naprawdę wiele, a wszystkie używane jednocześnie stają się niezwykle potężnym i skutecznym narzędziem do profilowania klientów. Dla tego właśnie zatrudnia się całe zespoły specjalistów od statystyki. Big data to dziś duża branża i będzie się powiększać, gdyż pozyskiwanie danych o konsumentach staje się z czasem coraz prostsze. I czy się to nam podoba czy nie, chcąc zaznać chwili w samotności, zostawmy wszystkie nowoczesne urządzenia w domu, ponieważ nic nie jest lepszym szpiegiem, nisz nasze własne smart-gadżety.

Kategorie
Bez kategorii

Uważaj na te protokoły

Uważaj na te protokoły!

Wszyscy świadomie albo nieświadomie korzystamy z jakichś protokołów. Gdybyśmy chcieli z nich całkowicie zrezygnować musielibyśmy nie tylko zrezygnować z używania Internetu ale również z telefonu. Protokoły to standardy komunikacji obejmujące specyfikację sprzętu oraz wymiany danych między odbiorcą i nadawcą. Protokoły co do zasady programowane są w taki sposób, aby służyły użytkownikom długie lata i mogły być zachowane w trakcie aktualizacji programów, które je wykorzystują. Czyli aktualizując jakiś program z wersji 10 do wersji 11 możemy się spodziewać, że nowa wersja będzie używać dokładnie tego samego protokołu do swoich celów. Czyli program po aktualizacji uzyskuje nowe funkcjonalności, ale protokół, z którego korzysta bardzo często pozostaje taki sam. Ale mało kto mówi o tym, że tak samo jak oprogramowanie, protokoły również się starzeją i muszą co jakiś czas być aktualizowane. Taka potrzeba zachodzi faktycznie dość rzadko. Jednakże, jeśli wszystko wskazuje na to, że używamy jakiegoś starego protokołu, który jest już dzisiaj uznawany za niebezpieczny, albo doczekał się znacznie lepszego zamiennika, bardzo poważnie należy się zastanowić nad aktualizacją. W dzisiejszym odcinku wymienimy 5 protokołów, na które warto uważać z różnych powodów, a są nadal dość popularne.

Co do zasady protokoły aktualizowane są razem z oprogramowaniem albo systemem operacyjnym. Kiedy zaktualizujemy oprogramowanie po prostu wybierzemy w ustawieniach programów, z których protokołów chcemy korzystać. Z listy dostępnych protokołów należy po prostu wybrać ten, który będzie bezpieczniejszy, albo bardziej wydajny. Zatem jeśli ktoś z Panstwa używa jednego z protokołów, które zaraz wymienię zachęcam do przejrzenia alternatyw. Nie ma tu konieczności instalowania niczego poza oprogramowaniem a dobrym pomysłem jest dokonanie raz na rok przeglądu dostępnych protokołów w naszych programach.

FTP

Pierwszy protokół, na który zawsze należy uważać to FTP czyli File Transfer Protocol, niezwykle popularny protokół do przesyłania plików. Początki FTP sięgają wczesnych lat 70, kiedy to nazwa “Internet” dopiero się wykuwała w społeczności akademickiej, a o hakerach nie było za bardzo mowy. W tamtych czasach nie myślano za bardzo o tym jak zabezpieczyć dane w trakcie przesyłania między komputerami. I w ten sposób stworzono standard, który wszelkie nazwy użytkowników i ich hasła w trakcie autoryzacji przesyła otwartym tekstem. Nie są zaszyfrowane, więc każdy kto jest w stanie przechwycić naszą komunikację używającą tego protokołu bardzo łatwo przeczyta te poręczenia i jeśli będzie chciał, wszystko co pobieramy lub wysyłamy. FTP na swoje czasy był świetnym protokołem, ale na dzien dzisiejszy nie spełnia podstawowych standardów bezpieczenstwa. Wyobraźmy sobie taki scenariusz. Załóżmy, że posiadam swoją własną stronę internetową na jakimś serwerze. Wszelkie pliki z grafiką czy kodem tej strony wysyłam tam przez FTP. Ktoś podsłuchał moją komunikację i szybko poznał mój login i hasło. Chyba najprostsze co taki haker może zrobić to zalogować się na moją stronę i zacząć hostować jakąś zawartość, która zaszkodzi wizerunkowi firmy. Ale to byłoby chyba za proste. Przecież dość szybko się dowiem, że coś jest nie tak i szybko zacznę działać. Nauczę się, żeby więcej wagi przykładać do bezpieczenstwa i po prostu zacznę się przygotowywać na takie sytuacje. A co, jeśli haker będzie sprytniejszy? Zamiast robić coś co natychmiast przyciągnie uwagę postanowi umieścić na serwerze coś co długo pozostanie niezauważone. Może będzie to koparka kryptowaluty? Może dołączy serwer do botnetu, albo będzie wysyłać spam? Albo jeszcze gorzej, zacznie sprawdzać czy mój mail też nie ma takiego hasła jak do FTP. A jeśli nie mam wszędzie innego hasła to do ilu serwisów dałem mu w taki sposób dostęp? Scenariuszy mógłbym mnożyć znacznie więcej. FTP jest dzisiaj jednym z najmniej zabezpieczonych protokołów, a mimo to bardzo często spotykam się z jego rutynowym stosowaniem. Jeżeli dokładnie nie znam drogi komunikacji pomiędzy moim laptopem a serwerem docelowym, nie używam tego protokołu, gdyż jest to po prostu niebezpieczne. Istnieją dobre zamienniki dla FTP i są łatwo dostępne. Jeden nazywa się SFTP a drugi FTPS. Oba są de facto protokołem FTP, ale z dodatkowym tunelem szyfrującym zapewnianym przez inne, nowsze technologie. Protokoły te zapewniają bezpieczeństwo i pewność, że serwer, z którym się łączymy jest faktycznie tym, za którego się podaje. Zwykły FTP polegał po prostu na zaufaniu. Musieliśmy ufać, że serwer docelowy faktycznie jest tym za kogo się podaje. Ogólnie nie skreślam całkowicie FTP. Do transferowania jakichś publicznych danych albo wewnątrz jakiejś sieci prywatnej nadal może się przydać. Jedynie uczulam na aspekt bezpieczenstwa dotyczący internetu, czyli sieci niezaufanej. Jeśli nasza komunikacja przechodzi przez Internet, musimy zawsze brać pod uwagę, że ktoś może obserwować, a FTP nie zabezpieczy nas przed tym.

POP3

Drugim protokołem, którego już nie warto używać jest POP3 czyli Post Office Protocol wersja 3. Jest to już dość leciwy protokół służący do pobierania wiadomości e-mail z serwera za pomocą takich klientów poczty jak na przykład Thuderbird. Protokół ten ma dość ograniczone możliwości. Na przykład daje możliwość pobrania wiadomości e-mail wyłącznie w całości. Nie można pobrać samego nagłówka wiadomości za pomocą tego protokołu lub zrezygnować z pobierania rysunków, tym samy pobierając jedynie tekst. Ile to razy zdarzyło się nam otrzymać powiadomienie, że dostaliśmy wiadomość, która ewidentnie nas nie interesuje. Na przykład otrzymaliśmy ofertę zniżki na jakiś produkt i niefrasobliwie zapisaliśmy się na jakąś listę mailingową. Widząc nagłówek takiej wiadomości od razu wiemy, że za moment wyląduje ona w koszu. Niestety z protokołem POP3 możemy jedynie pobrać całą taką wiadomość na swoje urządzenia, po czym ją usunąć. Stwarza to dodatkowe zagrożenie. Jeśli wiadomość jest zainfekowana to pobierzemy ją do siebie w całości, razem ze złośliwym kodem. Jeśli skasujemy wiadomość od razu pewnie nic się nie stanie, ale po co stwarzać kolejne niebezpieczne sytuacje oraz generować niepotrzebny ruch w sieci?

W dzisiejszych czasach większość z nas posiada kilka kont e-mail. Nawet jeśli ktoś stara się minimalizować liczbę skrzynek mailowych to zazwyczaj posiada przynajmniej dwie, jedną prywatną i jedną do pracy. Jeśli użyjemy POP3 do synchronizowania naszych wiadomości z naszym komputerem, wszystkie te wiadomości wylądują w jednym katalogu. Tracimy w ten sposób naturalny podział maili na sprawy osobiste i służbowe. Dodatkowo prawie zawsze domyślnym ustawieniem klientów pocztowych jest pobranie wiadomości z serwera i skasowanie jej stamtąd. W efekcie tego mail, który otrzymaliśmy jest w zasadzie przenoszony i jak już trafi na jedno z naszych urządzen, nie może trafić na inne, ponieważ z serwera został już skasowany. Powstaje więc chaos w wiadomościach. Jedne mamy na smartfonie, inne na laptopie i jeszcze inne na tablecie. Nigdzie nie mamy wszystkich. Zazwyczaj klienta poczty można skonfigurować tak, aby jednak pozostawiał maile na serwerze, ale trzeba o tym zawsze pamiętać, kiedy tylko konfigurujemy nowego klienta, na przykład w nowym laptopie albo smartfonie. Dobrym zamiennikiem dla POP3 jest protokół IMAP. Rozwiązuje on wszystkie wyżej wymienione problemy. Może pobierać zarówno wiadomości całe jak tylko ich części. Możemy zatem widząc sam tytuł i nadawcę wiadomości zarządzić zdalne usunięcie wiadomości, bez potrzeby pobierania jej do siebie lokalnie. IMAP umożliwia synchronizowanie wielu katalogów i wielu skrzynek mailowych z zachowaniem struktury katalogów. Jeśli więc mamy kilka skrzynek mailowych i różne katalogi IMAP zachowa całą tę strukturę po synchronizacji. IMAP standardowo maile synchronizuje, czyli zrównuje stan nowszy ze starszym. Jeśli jakaś zmiana pojawiła się na serwerze, na przykład nowy mail, stan na naszym urządzeniu zostanie zakutalizowany. Natomiast jeśli to na naszym urządzeniu zajdzie zmiana, stan na serwerze zostanie zaktualizowany. Zatem aby coś skasować z serwera, wystarczy, że skasujemy to u siebie lokalnie. IMAP jest bez wątpliwości lepszym protokołem niż POP3, dla tego warto się nim zainteresować.

 

WEP

Trzeci protokół powinno się właściwie od razu wszędzie wyłączyć. Chodzi mianowicie o WEP czyli Wired Equivalent Privacy. Pamiętamy, że urządzenia bezprzewodowe łączą się z siecią za pomocą fal radiowych. Skoro są to fale radiowe, to żeby podsłuchać całą komunikację wystarczyłoby po prostu mieć antenę o odpowiedniej częstotliwości, stanąć z nią wystarczająco blisko i zacząć odbieranie. WEP został wprowadzony w 1997 roku w celu zabezpieczenia tej komunikacji. Skoro nie można ukryć nadajnika i odbiornika, należy wysyłane i odbierane wiadomości zaszyfrować. Dzięki temu po mino tego, że wiemy które urządzenie nadaje i które odbiera, nie będziemy wiedzieć jaka jest treść takiej komunikacji. Celem protokołu WEP było właśnie zapewnienie takiego szyfrowania. Niestety z czasem, kiedy moc obliczeniowa komputerów urosła, złamanie WEP stało się dość proste. Dzisiaj po zebraniu odpowiednio dużo danych za pomocą takiej anteny, proces łamania hasła może potrwać poniżej 60 sekund. Co prawda WEP od roku 2004 jest uznawany za przedawniony, nadal można się zetknąć z urządzeniami, które wciąż go używają. Zachęcam do niezwłocznego przejrzenia ustawien swojego routera WiFi i zastąpienia standardu WEP nowszym WPA2 i ustawieniem silnego hasła złożonego z przynajmniej 16 znaków. Jeśli Panstwa router wspiera jedynie standardy WEP lub WPA i nie wspiera przynajmniej WPA2, poważnie zastanowiłbym się nad wymianą takiego urządzenia na nowsze. Zachęcam do przeglądu swoich urządzen i oczywiście zmiany standardowego hasła na dłuższe i trudniejsze.

HTTP

Czwarty protokół, na który należy uważać to HTTP. To ten właśnie protokół, którego używamy do zaglądania na jakąś stronę internetową i również ten sam, którego zazwyczaj używają aplikacje naszych smartfonów, aby połączyć się ze swoimi serwerami. Na wstępie tutaj nadmienię, że nie da się całkowicie przestać korzystać z HTTP. W erze aplikacji webowych HTTP jest całkowitą podstawą. Pragnę jedynie uczulić Panstwa na różnicę pomiędzy HTTP oraz HTTPS. HTTPS to w zasadzie HTTP z dodatkowym tunelem szyfrującym gwarantującym bezpieczenstwo i umożliwiającym weryfikację czy serwer, z którym się łączymy jest faktycznie tym, za co się podaje. Kiedy łączymy się z jakąś stroną internetową przez HTTP, każde urządzenie na drodze komunikacji pomiędzy nami a serwerem jest w stanie “zobaczyć” to co robimy. HTTPS poprzez zapewnienie szyfrowania nie tylko ukrywa to wszystko, ale również umożliwia weryfikację nadawcy. Podawanie jakichkolwiek haseł przez HTTP lub pobieranie ważnych dla nas plików może być ryzykowne. Z drugiej jednak strony, jeśli szukamy strony internetowej naszego dentysty tylko po to, żeby znaleźć tam numer telefonu by się umówić na wizytę, można uznać, że dodatkowe bezpieczenstwo nie jest aż tak ważne. Oczywiście kwestię poczucia prywatności pozostawiam już każdemu słuchaczowi do oceny według własnych standardów. W każdym razie używanie HTTP bez dodatkowej warstwy bezpieczenstwa może być do zaakceptowania, w zależności od konkretnego przypadku. Niestety do dnia dzisiejszego widuję niezabezpieczone strony internetowe z formularzami kontaktowymi, gdzie trzeba podać swoje dane osobowe i numer telefonu. Odradzam ufanie takim stronom. Zapewnienie HTTPS jest już dzisiaj bardzo tanie, więc jego brak jest w mojej ocenie oznaką niedbalstwa. A rozpoznanie czy używamy HTTPS jest bardzo proste. Wystarczy w pasku URL na górze okna naszej przeglądarki poszukać kłódeczki albo symbolu certyfikatu. Kiedy to klikniemy powinniśmy być w stanie obejrzeć certyfikat bezpieczenstwa. Hasła, loginy, dane osobowe, finansowe czy właściwie cokolwiek co powinno pozostać niejawne powinno być przesyłane przez HTTPS a nie przez niezabezpieczone HTTP.

SMB

Ostatnim protokołem, na który trzeba uważać jest SMB w wersji 1. Pewnie część z Panstwa zastanawia się co to w ogóle jest SMB i do czego służy. Otóż SMB czyli Server Message Block to protokół wykorzystywany w systemach Windows do udostępniania plików i drukarek w sieci. Jest najpopularniejszym protokołem do takich zastosowan. Doczekał się już wersji 2 oraz 3 i nowszych. Jednakże z punktu widzenia bezpieczenstwa powinien nas najbardziej interesować SMB w wersji 1, czyli w skrócie SMBv1. Historia tego protokołu sięga wczesnych las 80 ubiegłego stulecia. SMBv1 został uznany za przedawniony w roku 2013 i na nowszych systemach operacyjnych nie jest domyślnie instalowany. Jednakże nadal wiele starych urządzen, jak na przykład drukarki sieciowe albo serwery plików wciąż używają tego protokołu. Większość ludzi uznaje, że skoro coś działa, to nie ma potrzeby jego wymieniania. I tak oto bardzo często utrzymujemy bardzo starą infrastrukturę, kiedy laptopy i smartfony wymieniamy znacznie chętniej. A żeby urządzenia te działały ze starą drukarką czy serwerem plików, nieraz sami świadomie uruchamiamy przestarzały protokół. W maju 2017 roku została opublikowana cała grupa podatności protokołu SMBv1, zwana EthernalBlue. Używając tych podatności, haker jest w stanie uruchomić praktycznie dowolny kod na serwerze obsługującym ten protokół albo spowodować zablokowanie łączności. Również w 2017 roku doszło do masowego ataku hakerskiego na komputery z systemem Windows, które używały tego protokołu. Maszyny te zostały zainfekowane złośliwym oprogramowaniem zwanym WannaCry albo WannaCrypt, który szyfrował całą zawartość ich dysków i żądał okupu za ich odszyfrowanie. Szacuje się, że zainfekowano w ten sposób około 300 tysięcy komputerów w prawie 100 krajach. Uczciwie należy tutaj przyznać, że korporacja Microsoft udostępniła poprawki do SMBv1, ale szacuje się, że wciąż narażonych może być około miliona starych urządzeń, które nie zostały zaktualizowane. Zachęcam do sprawdzenia czy przypadkiem jedno z Państwa starszych urządzeń nie używa SMB w wersji 1. Możliwe, że całe lata urządzenie będzie służyć bez problemów. Wystarczy jednak, że komuś znajomemu podamy hasło do wifi, albo sami w swoim laptopie przyniesiemy nieświadomie jakiś szkodliwy kod do domu i możemy paść ofiarą ataku. Nie warto ryzykować, szczególnie jeśli przechowujemy jakieś ważne pliki na serwerze z tym protokołem.

Zakończenie

Podobnie jak oprogramowanie, protokoły również się starzeją i są wycofywane. Wymienione wyżej nie wyczerpują listy podatnych lub przestarzałych protokołów nadal będących w użyciu. Jednakże pięciu wymienionych protokołów możemy nieświadomie używać w domu albo w biurze. Są w zasadzie częścią naszego codziennego życia, kiedy to inne, które postanowiłem pominąć mogą już należeć głównie do zainteresowań administratorów sieci. Ale niezależnie czy używamy swojej małej sieci domowej czy chodzimy do biura, powinniśmy uważać na wymienione protokoły. Jedne z nich mogą nam po prostu przedłużyć czas pracy, a inne narazić nas na duże straty. A to jak używamy swoich komputerów i jak zabezpieczamy swoją sieć, zależy już tylko od nas.

Kategorie
Bez kategorii

8 słów, które rozumiemy inaczej

8 słów, które rozumiemy inaczej

Chyba każda branża ma swoją własną terminologię i niekiedy własny żargon. IT nie jest wyjątkiem. Gdybym miał opisać, jak porozumiewają się informatycy powiedziałbym, że używają języka złożonego w 80% z języka polskiego i w 20% z mniej lub bardziej poprawnego języka angielskiego. Bardzo często w ich mowie pojawiają się również trzyliterowe skróty lub anagramy brane wprost z anglojęzycznych dokumentacji nowych technologii. Branża rozwija się od dawna bardzo szybko. Trudno się dziwić, że nazewnictwo jakiejś nowej technologii przyjmuje się natychmiast i nie ma czasu na tworzenie rodzimych wyrazów. Jednakże istnieją pewne wyjątki, z których całkiem spora część przyjęła się już lata temu. Inżynierzy IT nieraz używają słów, które brzmią dokładnie tak samo jak słowa używane na co dzień przez każdego, ale mają dla nich zupełnie inne znaczenie. Nieraz prowadzi to do nieporozumień. W dzisiejszym odcinku wymienię kilka słów, które informatycy rozumieją trochę inaczej niż wszyscy inni. Mam nadzieję, że po wysłuchaniu tego odcinka zrozumienie znajomego informatyka stanie się nieco prostsze.

1. Środowisko

Pierwsze słowo, które informatycy rozumieją inaczej niż ludzie niezwiązani z branżą IT to “środowisko”. Dla informatyka w pracy “środowisko” nie jest niczym związanym z naturą czy biologią. Dla informatyka środowisko jest raczej słowem używanym do opisania otoczenia działającej aplikacji, czyli można powiedzieć, że jej środowiska. Środowiskiem aplikacji może być zarówno system operacyjny jak i chmura czy serwerownia, w której wykupiono kolokację. Aplikacja, jako że można ją dowolnie kopiować, może mieć kilka takich środowisk. Na przykład jedno specjalnie stworzone po to, aby można było w nim spokojnie testować nowe zmiany w kodzie, bez obawy, że klient korzystający z niej zażąda zwrotu pieniędzy. Drugie takie środowisko można stworzyć specjalnie dla klienta, aby mógł z kolei on sobie spokojnie korzystać z aplikacji wiedząc, że nikt mu jej nie wyłączy testowo. Ostatecznie klientowi powinno się udostępniać produkt przetestowany i gotowy do używania. Środowisko jest ogólnie rozumiane jako otoczenie, w jakim działa dana aplikacja. Może zarówno chodzić o otoczenia bliższe, czyli na przykład system operacyjny, jak i dalsze, czyli choćby infrastruktura serwerowa. Środowisko dla informatyka jest dość szerokim pojęciem, dla tego nieraz wymaga doprecyzowania w rozmowie.

2. Produkcja

Drugie słowo, które informatycy rozumieją inaczej i które jest zarazem bardzo silnie związane ze słowem “środowisko” to “produkcja”. “Produkcja” to skrótowe określenie “środowiska produkcyjnego”. Skoro możemy mieć środowisko testowe, na którym zachodzą testy najnowszych zmian w aplikacji, to możemy również mieć i środowisko produkcyjne, czyli właśnie takie, z którego korzystają klienci. Na takim środowisku działa aplikacja z najnowszymi i przetestowanymi zmianami uznanymi za stabilne. Nieraz w firmach rozwijających jakieś aplikacje słyszymy zdanie “możemy te zmiany puścić na produkcję”. Oznacza to, że zmiany w kodzie wprowadzone przez zespół programistów zostały już przetestowane na środowisku testowym i można je udostępnić na “produkcji” czyli środowisku produkcyjnym, aby klient mógł z nich korzystać. Użytkownicy korzystający z aplikacji zawsze używają właśnie tej kopii aplikacji, która działa na środowisku produkcyjnym, czyli w skrócie “produkcji”.

3. Abstrakcja

Trzecie słowo, którego również często używamy i które zarazem jest iskrą zapalną dla nieporozumień jest słowo “abstrakcja”. Abstrakcja chyba większości ludzi kojarzy się z czymś wydumanym i nikomu niepotrzebnym, albo nurtem sztuki nowoczesnej. W IT to słowo ma zupełnie inne znaczenie. Wynika ono również ze specyfiki pracy programistów. Na całym świecie różne zespoły programistów w obrębie nawet jednej firmy nieraz zajmują się kompletnie różnymi, niezwiązanymi ze sobą zagadnieniami. Jedni zajmują się programowaniem komunikacji myszki na bluetooth z naszym laptopem, a inni zajmują się projektowaniem interfejsów graficznych. Wszyscy oczywiście pracują po to, aby gdzieś cała ich praca połączyła się w jeden spójny produkt, na przykład jakiś program. Ale zarówno programista od bluetooth nie będzie miał czasu na studiowanie interfejsu graficznego, jak i programista interfejsu graficznego może nawet nie mieć pojęcia jak działa bluetooth. Dla tego, każdy programista usiłuje swoją pracę zawrzeć w czymś co nazywamy właśnie “abstrakcją” lub “warstwą abstrakcji”. Programista bluetooth zamyka znaczną większość zaprogramowanych przez siebie funkcjonalności w sobie tylko znanych częściach kodu. Pozostałe części udostępnia tak, aby były bardzo proste do zrozumienia i użycia. Jeśli inny programista zajmujący się jakimś innym zagadnieniem będzie musiał skorzystać z bluetooth, ale bez zmieniania sposobu jego działania, jedyne co będzie musiał znać to te kilka prostych udokumentowanych funkcji. Nie będzie musiał studiować dokładnie tysięcy linii kodu jak działa bluetooth. Jedynie wykorzysta funkcje o tak opisowych nazwach jak “Połącz” albo “Rozłącz” itp. Jak dokładnie działają te funkcje i ile procesów w nich zachodzi już nie jest dla niego istotne. Więc osoba korzystająca z efektów pracy programisty bluetooth szybko połapie się w tym bez konieczności poznawania szczegółów implementacji. Dzięki temu również programista bluetooth może zająć się tylko blootothem, a programista z inną specjalizacją zajmie się swoimi obowiązkami. Takie zamykanie większej liczby funkcjonalności w pewnego rodzaju czarnej skrzynce nazywamy właśnie tworzeniem “warstwy abstrakcji”. Jeśli chcemy skorzystać z jakiejś funkcjonalności wystarczy, że użyjemy pewnego małego zestawu poleceń jakie oferuje czarna skrzynka, a co się w niej dzieje nie musi być nam znane. Można się nawet pokusić o stwierdzenie, że budowanie “warstw abstrakcji” w bardzo dużej mierze jest powodem, dla którego IT rozwija się tak szybko. Jeden programista zbuduje jedną warstwę abstrakcji, na jej podstawie drugi zbuduje kolejną, kolejny zbierze ich kilka i na ich podstawi zbuduje kolejne. Dzięki temu gdzieś na szczycie tych warstw powstają niezwykle skomplikowane programy, które łączą cały ogrom funkcjonalności i są coraz prostsze w obsłudze. Zatem pomimo tego, że słowo “abstrakcja” brzmi trochę groźnie, to tak naprawdę ma na celu opisanie procesu sprowadzania czegoś skomplikowanego, do prostej postaci, którą większość ludzi będzie w stanie intuicyjnie zrozumieć.

4. Obiekt

Skoro już mowa o abstrakcjach, to nie sposób pominąć czwartego słowa, czyli “obiektu”. Obiekt jest właśnie jednym ze sposobów tworzenia warstw abstrakcji. Gdyby programista miał zaprogramować samochód, stworzyłby obiekt, czyli taki wirtualny twór, który zawierałby dane, jak na przykład pojemność silnika czy prędkość maksymalną. Taki obiekt również miałby pewne funkcje jak na przykład “uruchom silnik” czy “przyspiesz”. Mając taki typ obiektu, programista może w bardzo prosty sposób stworzyć takich wirtualnych samochodów ile chce, i jedynie parametrami obiektu sobie regulować czy to samochód sportowy czy dostawczy. Gdyby programista chciał taki samochód zatankować, musiałby go zabrać do kolejnego obiektu typu “dystrybutor” i uruchomić funkcję “tankuj”. Warto tutaj zwrócić uwagę, że funkcja nazywa się “tankuj”. Nie jest to kilkanaście funkcji o nazwach “Wyłącz silnik”, “otwórz klapę”, “odkręć korek” i kilkanaście kolejnych, łącznie z “zapłać” na końcu. Wystarczy jedno proste “tankuj” i cały proces zostanie przeprowadzony zgodnie z najlepszą wiedzą programisty o tym modelu samochodu. Obiekty bardzo upraszczają pracę programistom. Nie dość, że zamykają dane o obiekcie w jego wnętrzu, to jeszcze zezwalają na działanie na ten obiekt poprzez funkcje, których szczegółów tak naprawdę nie musimy znać. Nieraz jak widzimy jakąś bardzo opisową nazwę funkcji jak “przyspiesz” nawet nie musimy się zastanawiać do czego służy i jak działa wtrysk paliwa. Po prostu wciskamy gaz i jedziemy szybciej.

 

5. Wyprodukować

Piąte słowo, które przede wszystkim programiści rozumieją inaczej to “wydrukować”. To słowo możemy w zasadzie przetłumaczyć sobie po cichu na słowo “wypisać”. W niezliczonych językach programowania funkcja “print” lub jej podobne funkcje dosłownie wypisują jakiś tekst do pliku lub na ekranie. Zazwyczaj jak programista uczy się nowego języka programowania, pierwsze co w nim robi to wykorzystuje funkcję print lub podobną do wypisania na ekranie słów “hello world” czyli “witaj świecie”. To już swego rodzaju tradycja. Jeśli ktoś z Państwa weźmie książkę o podstawach programowania w niemalże dowolnym języku, jest bardzo duża szansa, że na pierwszych jej stronach będzie gdzieś napisany kod print(“Hello World”). Po uruchomieniu takiego kodu na ekranie wyświetli się ten prosty napis “Hello World”. A skoro angielskie słowo “print” ma swój odpowiednik w języku Polskim, nieraz programiści mawiają, aby jakiś tekst wydrukować albo “wyprintować”. Mają wtedy na myśli zwykłe wypisanie na ekranie.

6. Wyjątek

Szóste słowo, o którym chciałem wspomnieć to “wyjątek”. Wyjątek jest dla programisty faktycznie czymś w miarę wyjątkowym, ale już w inny sposób niż byśmy chcieli. Wyjątek to pewnego rodzaju błąd, który zachodzi podczas działania programu. Kiedy programista wykonuje jakieś działania i zdaje sobie sprawę, że czasem nie wszystko może pójść zgodnie z planem, powinien przygotować swój kod na taką wyjątkową sytuację. Na przykład, jeśli wczytywany jest bardzo duży plik, programista może założyć, że na słabszych komputerach może dojść do całkowitego zapchania pamięci. W takim przypadku w trakcie takiego wczytywania system operacyjny zaraportuje wyjątek za dużego użycia pamięci przez aplikację. Obowiązkiem programisty jest na taką okoliczność przygotować zestaw procedur, które będą mieć na celu jakieś zaradzenie tej sytuacji, na przykład wczytanie tylko części pliku. W przeciwnym wypadku program może zostać siłą zamknięty. Zdarzyło się komuś z państwa zobaczyć powiadomienie o błędzie o treści “unhandled exception”? To właśnie jeden z takich wyjątków. A co gorsza, dla niego nie było zaprogramowanej żadnej procedury naprawczej. Dla tego często zaraz potem system sam wymusza zamknięcie takiego programu. Wyjątek zatem jest czymś bardzo istotnym dla programisty. Jest to faktycznie wyjątkowa sytuacja, ale niestety w tym złym znaczeniu. Ogólnie rzecz ujmując wyjątki mogą zarówno nieść informację o typie błędu, jak i być bliżej nieokreślone. Za każdym jednak razem programista musi być na to gotowy.

7. Serwer

Siódme słowo, które już niejednokrotnie sam wypowiadałem w poprzednich odcinkach to “serwer”. Słowo to najprawdopodobniej już wcześniej zrozumieli Państwo prawidłowo, ale jest jedna kwestia, która zasługuje na doprecyzowanie. Serwer może być maszyną fizyczną czy wirtualną, na której działa jakiś system operacyjny. Jednakże nieraz słowem “serwer” określamy aplikację serwerową, która czeka gdzieś na tym fizycznym serwerze na nowe zadania lub połączenia. Nieraz słyszymy od administratorów “na tej maszynie działa serwer poczty”. I właśnie w takim kontekście serwer poczty jest jakąś aplikacją pocztową działającą na jakimś serwerze. Czasami taka dwuznaczność wprowadza pewne zamieszanie, ale dość szybko można nauczyć się wyciągać z kontekstu o jaki serwer chodzi naszemu rozmówcy. W ostateczności można zawsze dopytać i nie jest to żaden wstyd.

8. Jądro 😀

Ostatnie słowo, które szczególnie często jest powodem nieco zabawnych sytuacji wśród informatyków jest “jądro”. Jądro systemu operacyjnego to taki program, który jest odpowiedzialny praktycznie za całą komunikację sprzętu elektronicznego jaki siedzi w naszych komputerach z zainstalowanym oprogramowaniem. Jest to w zasadzie podstawa systemu operacyjnego. Niejeden by powiedział, że jądro to w zasadzie jest system operacyjny a wszystko pozostałe jak interfejs graficzny, sterowniki i inne to już dodatki. Jądro czasem zwane również “rdzeniem” systemu działa prawie od samego momentu uruchomienia komputera. Nie możemy go wyłączyć bez zamykania wszystkiego innego. W praktycznie każdej czynności jaką robimy na naszych komputerach bierze udział jądro. Ostatecznie komputer to urządzenie elektroniczne, a nic z jego pomocą nie zrobimy, jeśli nie będziemy się z tą elektroniką porozumiewać. Jądro jest właśnie takim centrum komunikacji ze sprzętem. W systemach Linux jądro jest dość często aktualizowane jak inne oprogramowanie. Można w związku z tym trzymać kilka jego wersji u siebie lokalnie na wypadek, gdyby jakaś nowa nie zadziałała z jakiegoś powodu. Proszę się zatem nie zdziwić, jeśli znajomy informatyk, najprawdopodobniej administrator powie Państwu z pełną powagą, że musi usunąć sobie kilka jąder, bo są już stare i zajmują za dużo miejsca… Cóż, po angielsku jednak trochę sprytniej zostało rozwiązane to nazewnictwo. Dla tego nieraz używa się bezpośredniego zapożyczenia z języka angielskiego. I tak oto zamiast słowa “jądro” używamy słowa “kernel” – najpopularniejszego zamiennika.

I wiele, wiele więcej...

Słów inaczej rozumianych przez informatyków jest znacznie więcej. Aby poznać je wszystkie trzeba by pewnie zacząć pracować w tym zawodzie, do czego gorąco zachęcam. Mam nadzieję, że kilka z tutaj wymienionych słów pomoże trochę zrozumieć znajomych programistów, administratorów czy testerów, ponieważ IT coraz bardziej zaczyna się jawić jako tajemnicze i nieprzystępne. Może to właśnie za sprawą tak wielu warstw abstrakcji?

Kategorie
Bez kategorii

Co to są aplikacje webowe i jak się je rozwija?

Co to są aplikacje webowe i jak się je rozwija?

Nieraz słyszymy, że ktoś ma na smartfonie jakąś nową apkę, która rozwiązuje mu jakieś codzienne problemy lub coś ułatwia. Aplikacja do zamawiania taksówki, zamawiania jedzenia, kupna biletów do kina, nawigacji czy czego tam jeszcze. Ale tak naprawdę aplikacje mobile (czyli te zainstalowane na naszych smartfonach) to dość często programy do zdalnej obsługi aplikacji webowej, która działa gdzieś w Internecie. W takim podejściu aplikacja mobilna jest tworzona głownie dla wygody użytkownika, żeby w przyjemny i prosty sposób mógł za jej pośrednictwem korzystać z aplikacji webowej. Bez aplikacji webowej, aplikacja mobilna traci sens. Dostęp do Internetu mamy praktycznie wszędzie, więc nawet nie zawsze się zastanawiamy, która z naszych aplikacji mobilnych rozmawia z tą webową, a która działa samodzielnie. A to właśnie aplikacje webowe tak naprawdę wykonują największą pracę i rozwiązują problemy, po czym wysyłają tym mobilnym wyniki, które potem można ładnie wyświetlić. Opowiedzmy sobie czym są aplikacje webowe i jak się je rozwija.

Zacznijmy od podstaw. Aplikacja webowa to zbiór aplikacji serwerowych, które współpracują ze sobą w jakimś celu. Aplikacja webowa może składać się z takich aplikacji serwerowych jak baza danych, aplikacja do obsługi logiki biznesowej, aplikacja do obsługi płatności i dajmy na to aplikacja, która umożliwia wyświetlenie interaktywnej strony internetowej. Skoro aplikacja webowa składa się z kilku aplikacji serwerowych, możemy te serwerowe nazwać komponentami aplikacji webowej. Mamy zatem kilka komponentów, które działają na jednym serwerze lub kilku. Część z nich możemy rozwijać osobiście, a część możemy po prostu uruchamiać, korzystając z gotowych rozwiązan. Zadaniem programistów jest zapewnić odpowiednie sposoby komunikacji między tymi komponentami, a zadaniem administratorów i inżynierów chmury jest odpowiednio przygotować infrastrukturę i ją nadzorować.

Co do zasady aplikacje się pisze. Języków programowania jest wiele i zmieniają się z czasem jak prawie wszystko w tej branży. Możemy jednak na tym etapie wyróżnić dwie grupy języków.

Pierwsza grupa to języki interpretowane. Kiedy programista napisze kod takiej aplikacji, aby go uruchomić potrzebuje tak zwanego interpretera. Interpreter to taki program, który czyta kod źródłowy w formie tekstowej linijka po linijce i wykonuje na tej podstawie zaprogramowane instrukcje. Możemy zatem mieć cały kod źródłowy aplikacji, ale jeśli nie dysponujemy interpreterem, nic nam ten kod nie da, bo go nie uruchomimy. Poza interpreterem i kodem źródłowym aplikacji napisanej w takim języku musimy również posiadać biblioteki, których nasz kod używa. Biblioteka to po prostu zbiór funkcji i parametrów, z których korzysta aplikacja. Gdyby napisanie każdego programu na świecie wiązało się z tym, aby trzeba było za każdym razem na nowo określać standardy matematyki, zapisu do plików, odczytu, kalendarza i setek innych rzeczy, które wykonuje nasz program, proces rozwoju aplikacji trwałby długie lata. Dla tego, tworzy się biblioteki i w nich właśnie zamyka się jakiś zestaw funkcjonalności, który później inni programiści będą mogli wykorzystać w swoich projektach. Biblioteki mogą być zatem rozwijane niezależnie od aplikacji i używane w wielu różnych, niezwiązanych ze sobą aplikacjach.

Druga grupa języków to języki kompilowane. W tym przypadku zamiast interpretera potrzebny jest kompilator. Kompilator to również program, który czyta kod źródłowy aplikacji, ale zamienia go w tak zwany kod maszynowy. Ten właśnie proces nazywamy “kompilowaniem” kodu. Czyli innymi słowy z kodu źródłowego tworzymy plik, którego możemy już uruchomić. Po przeprowadzeniu kompilacji, do uruchomienia takiego programu kompilator już nie jest potrzebny. Jednakże i w tym przypadku zazwyczaj potrzebne są biblioteki. Biblioteki takich języków również są kompilowane, ale już nie możemy ich uruchomić bezpośrednio, ale za pośrednictwem napisanego przez nas programu, możemy skorzystać z ich funkcjonalności.

Skoro już wiemy, że mamy dwa rodzaje języków programowania do tworzenia aplikacji webowych, możemy się zastanowić jak się te aplikacje rozwija. Przyjmijmy na potrzeby tego odcinka, że rozwijam bardzo prostą aplikację webową, składającą się z tzw. “frontendu” czyli komponentu wyświetlającego interfejs graficzny i przyjmującego żądania od moich klientów, “backendu” czyli komponentu z zaprogramowaną całą logiką biznesową mojej aplikacji webowej oraz z bazy danych, która przechowuje dane o moich użytkownikach i wszelkie inne dane potrzebne do działania całej aplikacji. Aplikacje webowe oczywiście bywają znakomicie bardziej rozbudowane, ale my skupmy się na prostej aplikacji składającej się z tych trzech komponentów. Dwa z nich ewidentnie muszą być rozbudowywane przeze mnie, frontend i backend. To właśnie te komponenty stanowią o istocie mojej aplikacji webowej. Frontend wyświetla cały interfejs graficzny, składa żądania klientów w spójne struktury i wysyła je do backendu. Backend otrzymuje żądanie, konstruuje zapytanie do bazy danych, wysyła je i dalej wykonuje działania z otrzymanymi wynikami. Jeśli jest taka potrzeba to wysyła kilka zapytan do bazy. Kiedy już otrzyma wszystkie odpowiedzi, ponownie pakuje spójną odpowiedź i wysyła ją do frontendu. Frontend rozumiejąc odpowiedzi otrzymane z backendu wyświetla wyniki. Zobrazujmy to sobie na przykładzie. Niech ta rozwijana przeze mnie aplikacja webowa będzie służyła do rezerwowania i wypożyczania sprzętu narciarskiego. Wchodzimy na stronę internetową, na której można moją aplikację znaleźć. Naszym oczom się ukazuje ładny i kolorowy interfejs użytkownika. Jest to ta część frontendu, która pokazuje nam pola tekstowe lub inne, które możemy wypełniać określając w ten sposób to, co byśmy chcieli wypożyczyć. Kiedy w odpowiednie pola wpiszemy, że potrzebne są nam narty o konkretnych wymiarach oraz kask w rozmiarze S i kolorze zielonym, frontend zbierze te wszystkie informacje i wyśle do backendu. Backend wie jak sobie z takim żądaniem poradzić. Na podstawie podanych preferencji tworzy odpowiednie zapytanie do bazy danych, aby się dowiedzieć czy taki sprzęt jest dostępny w magazynie. Baza danych odpowiada, że narty będą dostępne, ale kasku w rozmiarze S i kolorze zielonym nie znaleziono. Backend zatem widząc, że nie ma kasku o takim kolorze, może wysłać ponowne zapytanie do bazy, ale już bez kryterium dotyczącego koloru. Kiedy otrzyma jakieś wyniki kompletuje odpowiedź do frontendu w którym podaje listę dostępnych nart (ponieważ głownie to nart szukaliśmy) i informację, że kasku w kolorze zielonym nie znaleziono, ale znaleziono kaski w innych kolorach. Dostarczy również listę znalezionych kasków. Frontend otrzymując tę odpowiedź wie jak zgrabnie przeprosić klienta za niedogodności i subtelnie zasugerować mu inne kaski. W opisanym przykładzie to ja jestem odpowiedzialny za frontend i backend. Bazę danych mogę sobie uruchomić jaką chcę. Obecnie są dostępne rozmaite bazy danych, więc nie ma większego sensu ich tworzyć samodzielnie. Jak zatem rozwija się te dwa pozostałe komponenty?

Załóżmy, że frontend rozwija zespół programistów Pythona, jednego z najpopularniejszych języków interpretowanych. Backend niech rozwija zespół programistów języka Go. Oba komponenty są rozwijane oddzielnie. Oczywiście nie jest możliwe w pełni uniezależnić od siebie te zespoły, ale do pewnego stopnia daje się to zrobić. Powiedzmy, że gdzieś w backendzie znaleziono błąd, który właśnie jeden z programistów poprawił. Wysyła zatem swoje zmiany w kodzie do systemu kontroli wersji kodu. Deklaruje, że zmiany, które wprowadził są gotowe do zaakceptowania i wprowadzenia do backendu na stałe. Ktoś z zespołu ogląda jego zmiany i w razie potrzeby nanosi pewne uwagi. Tym razem jednak nie ma uwag, ponieważ zmiana jest niewielka a błąd, jeśli nie zostanie szybko naprawiony, może spowodować wyciek danych osobowych klientów. Kolega z zespołu naszego bohatera zatem akceptuje zmiany w kodzie i wprowadza je na stałe do kodu tego komponentu. Na tym kroku konczą się wszelkie interakcje ludzkie. Wszystkie dalsze losy kodu są już zautomatyzowane.

Kiedy tylko system kontroli wersji kodu źródłowego odnotuje opisaną wyżej zmianę, uruchamia coś co w naszej nomenklaturze nazywane jest “pipeline” co można by dosłownie przetłumaczyć na słowo “rurociąg”. Niestety jednak polskie odpowiedniki nie zawsze się przyjmują w branżowej terminologii. Rzeczony „pipeline” jest procesem, który jest wykonywany, kiedy zajdą odpowiednie okoliczności. Zmiana kodu jak najbardziej może być jedną z takich okoliczności. W trakcie tego procesu, zachodzi bardzo wiele czynności. Między innymi komponent jest automatycznie kompilowany z użyciem nowego kodu oraz testowany. Potem cała aplikacja webowa jest umieszczana w specjalnie przygotowanym środowisku testowym, aby przeprowadzić testy integracji pomiędzy pojedynczymi komponentami. Następnie przeprowadzane są testy systemowe, które mają wykonać pewne działania oddziałujące na całość aplikacji w poszukiwaniu błędów. Potem są wykonywane kolejne testy a potem jeszcze więcej testów. Ogólnie rzecz ujmując im więcej testów zostanie przeprowadzonych, tym większa szansa, że błędy zostaną wykryte na wcześniejszym etapie, a nie wtedy, kiedy już aplikacja będzie dostępna dla klientów. Kolejność i zakres testów oczywiście zależy od konkretnej aplikacji webowej i od decyzji inżynierów testów.

W trakcie tego procesu również poza testami zachodzi coś, co dzisiaj stanowi rdzen nowoczesnego dostarczania aplikacji webowych. Zachodzi mianowicie konteneryzacja. Konteneryzacja to proces mający na celu zamknięcie komponentu aplikacji w specjalnie spreparowanym obiekcie, zwanym “kontenerem”. Kontener imituje system operacyjny i umożliwia uruchomienie w nim tego komponentu. Oczywiście można zadać pytanie po co w ogóle to robić, skoro możemy uruchomić dany komponent aplikacji webowej bez dodatkowych komplikacji. Zalet wbrew pozorom jest bardzo wiele. Przede wszystkim można za pomocą odpowiedniego zarządzania kontenerami uzyskać sporą odporność na awarie. Specyfika kontenera jest taka, że jeśli program w nim działający się wyłączy, system zarządzający kontenerami zauważy to zdarzenie i natychmiast zarządzi ponowne jego uruchomienie. Będzie ten proces powtarzać do skutku. Zatem jeśli komponent działa względnie prawidłowo i rzadko miewa awarie, nie powinno to zaszkodzić znacząco stabilności całej aplikacji webowej. Drugą zaletą stosowania kontenerów jest łatwość w migrowaniu aplikacji. Jeśli każdy komponent aplikacji działa jako kontener, przeniesienie go jest bardzo proste. Nieraz duże firmy posiadające bardzo duże aplikacje działające w chmurze decydowały się na zmianę dostawcy chmury. Przenoszenie kontenerów było w tym przypadku dość proste, czego nie zawsze można było powiedzieć o aplikacjach, które nie zostały skonteneryzowane. Trzecią zaletą jest potencjalna skalowalność. Kontener to co do zasady mały fragment aplikacji webowej, który powinien być w stanie działać zarówno w pojedynkę jak i jako jeden z setek takich samych kontenerów. Dla systemu zarządzającego kontenerami uruchomienie jednego czy setki kontenerów to jedynie kwestia ustawienia jednej liczby w konfiguracji. Możliwe jest również dynamiczne skalowanie liczby kontenerów w zależności od obciążenia aplikacji. Czwarta zaleta to utrzymanie porządku na serwerach. W dawnych czasach aktualizacja aplikacji bywała dość karkołomna. Tym bardziej jeśli programiści zaktualizowali jakieś biblioteki w swoich kodach albo zaktualizowali interpreter. Ogólnie z bardzo wielu powodów wszelkie zmiany na serwerze nieraz stanowiły wyzwanie, ponieważ trzeba było zmierzyć się z całą masą zależności. Kontenery rozwiązują ten problem już w przedbiegach. To właśnie w trakcie procesu konteneryzacji zarówno komponent aplikacji, jego biblioteki i wszelkie zależności, łącznie z interpreterem, jeśli jest potrzebny, są umieszczane wewnątrz kontenera. Innymi słowy prawidłowo zbudowany kontener powinien mieć absolutnie wszystko co jest potrzebne do uruchomienia komponentu, ale absolutnie nic więcej. Zatem aktualizacja aplikacji w systemie zarządzającym kontenerami wiąże się tylko z jednym czy kilkoma wpisami dotyczącymi wersji kontenera w konfiguracji, zamiast godzinami pracy administratora. System po prostu odnotuje, że od tej pory ma uruchamiać nowszy kontener i podmieni starsze kontenery na nowsze.

Wróćmy do naszego “rurociągu”, zwanego znacznie częściej “pajplajnem”. W trakcie tego procesu, kiedy już zmiany wprowadzone przez bohatera naszej opowieści zostały zaakceptowane, zachodzą liczne testy oraz konteneryzacja. Jeśli wszystko pójdzie zgodnie z planem nowa wersja backendu stanie się dostępna dla klientów, kiedy tylko proces dobiegnie koca. Do decyzji twórców takiej automatyzacji pozostaje czy udostępnienie klientom nowej wersji zajdzie od razu czy po jawnym wyrażeniu zgody na podmiankę.

Na dwie rzeczy warto zwrócić tutaj uwagę. Zespół programistów może prawie w pełni skupić się na rozwijaniu kodu. Pensje programistów wynoszą tyle ile wynoszą i dla tego świetnym sposobem na maksymalne wykorzystanie czasu specjalistów jest po prostu odsunięcie ich od problemów związanych z dostarczaniem usługi. Programiści jedynie dostarczają kod a każde ich poszczególne zadanie się kończy, kiedy testy przeprowadzane przez pipeline zakończą się pomyślnie. A skoro nie muszą testów wykonywać manualnie, będą mogli zaczynać kolejne zadania, skoro w tym czasie automatyczne testy będą zachodzić gdzieś na jakimś serwerze daleko stąd. Druga rzecz, o której warto nadmienić to fakt, że cała ta automatyzacja zdaje się wykonywać czynności z natury nudne. Chyba każdy pracownik, szczególnie bardziej ambitny, gdyby musiał kilka razy dziennie skopiować kod, skompilować go, przeprowadzić ręcznie kilkanaście testów, konteneryzować i tak dalej, dość szybko pożegnałby się z taką pracą. Automatyzacja ma przejmować od ludzi zadania nudne, żeby właśnie mogli zająć się tymi bardziej kreatywnymi czynnościami.

W dzisiejszych czasach przy rozwijaniu jakiegokolwiek kodu zmierzamy do pełnej automatyzacji praktycznie wszelkich procesów. Przyświeca temu prosta zasada “jeśli musiałeś coś zrobić więcej niż raz, to znaczy, że warto dla tego procesu rozważyć wdrożenie automatyzacji”. Chmura oraz rozmaite platformy umożliwiły automatyzację bardzo wielu procesów. Od takich prostych czynności jak powiadamianie o awariach, do stawiania i modyfikowania ogromnych infrastruktur w chmurze. Wiele firm zauważyło znaczące przyspieszenie w rozwijaniu swoich aplikacji, dzięki automatyzacji. Bez wątpliwości trend ten będzie zachowany. Pytanie tylko co nas czeka już w niedalekiej przyszłości, ponieważ technologie już dziś rozwijają się tak szybko, że trudno przewidzieć nawet najbliższe lata.

Kategorie
Bez kategorii

Co to właściwie jest chmura?

“Chmura” to bardzo szerokie pojęcie. Dość często się powtarza w kontekście rozwiązan IT. Tak często w nazwie aplikacji widzimy słowo „cloud”, że można by nawet nabrać wrażenia, że to takie hasło reklamowe, które ma zwabić klientów nowoczesnością. Jeśli coś ma w nazwie słowo “cloud” to pewnie jest bardziej niezawodne i dostępne z każdego zakątka świata. Prawda jest taka, że aplikacje działające w innym środowisku, które nie jest chmurą, mogą działać równie stabilnie i być równie dostępne. Jako użytkowników w zasadzie nie powinno nas kompletnie obchodzić, czy aplikacja działa w chmurze czy jakiejś innej infrastrukturze. Powinno nas tylko interesować, czy jest dostępna i spełnia nasze potrzeby. Fakt, czy działa w jakiejś chmurze powinien być dla nas wręcz nieistotny. To raczej inżynierowie firm IT powinni się tym zajmować, bowiem to oni są odpowiedzialni za działanie usług. Czemu zatem tak często się o tej chmurze mówi? Ponieważ potęgą chmury są niezliczone możliwości, które prawidłowo wykorzystane faktycznie mogą znacznie poprawić stabilność i wiele innych aspektów działania aplikacji. Możliwości te są na dodatek dostępne na kilka kliknięć, co jest bardzo dogodne. Ponadto chmura zapewnia duże możliwości optymalizacji kosztów, co jest szczególnie atrakcyjne dla firm płacących bardzo duże pieniądze za utrzymanie infrastruktury serwerowej. I w zasadzie to właśnie firmy powinny się bardziej interesować tym czym jest chmura i jak mogą ją wykorzystać, aby maksymalizować własne korzyści. Użytkownicy powinni tylko używać ich produktów. Wyjaśnijmy sobie czym tak naprawdę jest chmura i co może nam dać.

Aby zrozumieć czym jest chmura, cofnijmy się w czasie o około 20 lat. Wcielmy się w rolę przedsiębiorcy rozwijającego jakieś oprogramowanie. Załóżmy, że to oprogramowanie działa w standardowym modelu klient-serwer, czyli w takim, w którym musi istnieć jakiś serwer z uruchomioną aplikacją dostępny w Internecie. Z serwera zdalnie korzysta klient, czyli program obsługiwany przez użytkownika. Użytkownika nie interesuje, gdzie się fizycznie znajduje serwer, jedynie wie, że musi mieć dostęp do Internetu, żeby z aplikacji skorzystać i używa do tego właśnie zainstalowanego na swoim komputerze klienta. W takich okolicznościach nasz przedsiębiorca wie, że musi kupić kilka profesjonalnych maszyn, czyli właśnie serwerów, zamontować je gdzieś w odpowiednio przygotowanym do tego miejscu, zainstalować na nich system operacyjny, swoją aplikację serwerową oraz jakieś dodatkowe oprogramowanie do monitorowania tego wszystkiego. Większość z tych czynności przedsiębiorca może wykonać sam albo z pomocą swoich pracowników. Jednakże pojawiają się pewne problemy. Serwery z natury bardzo szybko się grzeją, potrzebują dużo prądu i zazwyczaj są bardzo głośne. Ze względu na to, że w biurze czasem dochodzi do odłączeń prądu w nocy a serwery muszą działać praktycznie bez przerwy, nasz bohater słusznie zauważa, że biuro nie jest najlepszym miejscem do przechowywania tych biznesowo krytycznych maszyn. Postanawia zatem wykupić kolokację swoich serwerów w pobliskim centrum danych. Sprowadza się to w zasadzie do tego, że pobliskie centrum danych udostępnia miejsce, prąd, dostęp do Internetu oraz chłodzenie w obrębie swojego budynku. Budynek jest oczywiście jeszcze dodatkowo odpowiednio chroniony i nadzorowany przez ochronę. Na koniec każdego miesiąca właściciel centrum danych przedstawia rachunek przedsiębiorcy. Kiedy tylko nasz przedsiębiorca zamontuje serwery w centrum danych zdalnie zarządza nimi i w razie potrzeby przychodzi na miejsce, jeśli jest taka potrzeba. Aplikacje serwerowe naszego przedsiębiorcy działają zatem na serwerach umieszczonych w centrum danych.

Opisany sposób utrzymania infrastruktury jest stosowany do dzisiaj. Każdy może zakupić serwer i umieścić go w wybranym centrum danych, po czym korzystać z niego jak tylko potrzebuje. Największą zaletą takiego podejścia jest pełna kontrola nad własnymi zasobami. Możemy kupić prawie dowolny serwer, zainstalować na nim dosłownie co chcemy, a jeśli jest serwerów kilka to możemy je łączyć praktycznie dowolną siecią. Aczkolwiek w tym aspekcie potrzebne nam będą jakieś uzgodnienia z pracownikami technicznymi centrum danych. Innymi słowy mamy pełną swobodę z pominięciem pewnych szczegółów wymienionych w regulaminie centrum danych albo możliwości technicznych. Taki typ infrastruktury, który jest praktycznie w całości zarządzany przez nas nazywamy “On-site” albo “on-premise”.

Pełna kontrola nad infrastrukturą “on-site” jest niewątpliwą zaletą, ale zwróćmy uwagę na wady takiego rozwiązania. Przede wszystkim czas aktywacji serwera może wynieść nawet kilkadziesiąt dni w zależności od wielkości zamówienia czy liczby dostępnych specjalistów. Infrastruktura tego typu wymaga sporo czasu i nieraz faktycznej wizyty na miejscu. Maszyny takie musimy również sami konfigurować od początku do końca, czyli od zamontowania na swoim miejscu, przez instalowanie systemu operacyjnego, wzmacnianie zabezpieczeń i na instalacji oraz zarządzaniu aplikacjami kończąc. Ogólnie rzecz ujmując im więcej mamy możliwości, tym więcej czasu spędzamy na odpowiednim doborze ustawień.

Możliwości konfiguracji są ogromne, ale tak naprawdę nikt nie korzysta z nich wszystkich. Jest ich po prostu zbyt wiele. Nie powinno zatem dziwić, że wielu przedsiębiorców z łatwością byłaby gotowa oddać część z tych ogromnych możliwości konfiguracji, które i tak nie zawsze dają wymierne korzyści, w zamian za szybkość rozwoju infrastruktury na swoje potrzeby. Chodzi przecież o szybkie zaspokojenie potrzeb swoich własnych klientów. Optymalizację przyspieszającą pracę serwerów o kilka procent, ale wymagającą długich godzin pracy, można sobie darować.

W lipcu 2002 roku korporacja Amazon, stworzyła coś co dzisiaj byśmy nazwali chmurą w modelu IaaS czyli “Infrastructure as a Service”. Jest to taki typ chmury, który pozwala w niemalże na kilka kliknięć stworzyć wirtualną infrastrukturę. Wirtualna baza danych, serwer plików, VPN, serwer aplikacji, autentykacji, sieć, która łączy te wszystkie usługi, monitoring, co tylko chcemy, możemy stworzyć w ciągu minut i łączyć ze sobą. Wszystko to utworzymy w postaci wirtualnej a o fizyczną infrastrukturę zadba dostawca chmury. Możliwości konfiguracji tych wszystkich usług będą faktycznie mniejsze niż gdybyśmy sami zarządzali tymi maszynami, ale większości użytkowników wystarczą w zupełności. A co najważniejsze, szybkość rozbudowywania infrastruktury będzie nieporównywalnie większa. To jednak nie wszystko. Jeśli optymalnie wykorzystamy zasoby i potencjał chmury, znacząco zredukujemy koszty. Załóżmy, że dzisiaj potrzebuję trzech serwerów, żeby moja firma działała prawidłowo. Moi pracownicy wykorzystują te serwery w 80%. Mam świadomość, że za tydzień przyjdzie kolejnych kilka osób zatrudnionych na trzymiesięczny kontrakt. W warunkach “on-site” musiałbym kupić im specjalnie dodatkowe serwery, które działałyby tylko krótki czas. Po wygaśnięciu kontraktu musiałbym serwery sprzedać. Chmura daje mi taką możliwość, że jeśli potrzebuję dodatkowych zasobów przez jakiś czas, po prostu je wykupuję w ciągu sekund, a kiedy nie są mi już potrzebne, oddaję je i już za nie nie płacę. Zapłacę tylko za liczbę godzin, w trakcie których korzystałem z nich. Cennik zazwyczaj jest godzinowy. Ale to nadal nie wszystko. Powiedzmy, że moja firma urosła i postanowiłem otworzyć biuro w innym kraju. Jeśli odpowiednio zarządzam swoimi zasobami chmury, jestem w stanie stworzyć kopię swojej infrastruktury za granicą i oddać ją do użytku pracownikom w innym państwie. To tylko kilka z dziesiątek możliwych scenariuszy zastosowania chmury typu IaaS w praktyce. Potęgą chmury jest automatyzacja, wirtualizacja, bogactwo dostępnych usług oraz możliwości łączenia ich ze sobą. Najbardziej popularne chmury typu “Infrastrucutre as a Service” to Amazon Web Services, Microsoft Azure oraz Google Cloud Platform. Są to tak zwane chmury publiczne, czyli dostępne dla każdego. Ale czy można mieć swoją własną chmurę? Jak najbardziej można. Projekt OpenStack rozwijany już od ponad 10 lat skupia się na stworzeniu oprogramowania umożliwiającego uruchomienie własnej chmury we własnym centrum danych. OpenStack jest również wykorzystywany komercyjnie, na przykład przez firmę OVH.

No dobrze, możemy automatyzować proces tworzenia, modyfikowania i nawet kasowania wirtualnych infrastruktur dzięki “Infrastructure as a Service”. Ale skoro już poświęciliśmy pewne możliwości konfiguracji w celu uzyskania większej szybkości rozwoju naszej firmy, czy możemy pójść jeszcze krok dalej? Czy można stworzyć pewne ramy dla aplikacji, którą rozwija nasza firma i po prostu wysłać taką aplikację do jakiejś platformy, nie przejmując się nawet i o wirtualne serwery? Otóż możemy. PaaS czyli “Platform as a Service” to taki typ przetwarzania w chmurze, który przenosi już nie tylko zarządzanie fizycznymi maszynami w ręce pracowników technicznych dostawcy chmury, ale również i zarządzanie częścią wirtualnych zasobów. Załóżmy, że rozwijam jakąś aplikację webową. Jeśli zdecyduję się na wykorzystanie jakiegoś modelu PaaS, moi programiści jedynie będą musieli odpowiednio przygotować kod aplikacji, żeby pasował do ram narzuconych przez platformę. Dalsze umieszczenie aplikacji na platformie i ewentualne jej migrowanie między podobnymi platformami stanie się banalnie proste. Co więcej, jeśli prawidłowo przygotuję swoją aplikację, platforma sama w dość inteligentny sposób będzie nią zarządzać. Na przykład, jeśli w aplikacji dojdzie do jakiejś awarii, platforma sama podejmie pewne działania zaradcze, jak choćby restart aplikacji. Jeśli platforma odnotuje wzmożony ruch w aplikacji na przykład związany z nagłym wzrostem zainteresowania aplikacją, w krótkim czasie automatycznie zostaną uruchomione kolejne zasoby, aby zapewnić płynność moim użytkownikom. Taka funkcjonalność jest szczególnie ważna w takie dni jak Black Friday, kiedy to liczba użytkowników korzystających z jakiegoś sklepu internetowego potrafi wzrosnąć kilkakrotnie w ciągu godzin. PaaS jest w stanie automatycznie dopasować zasoby do wymaganego zapotrzebowania, żeby w gorących okresach nikt nie poczuł, że strona wolno działa. Zasoby zostaną automatycznie zwolnione, kiedy przestaną być potrzebne. PaaS jest w stanie zrobić jednak znacznie więcej. Poza automatycznym skalowaniem zasobów, stwarza też duże możliwości wdrażania nowych zmian, kiedy tylko zostaną wprowadzone przez programistów. W warunkach “on-site” zmiana wersji oprogramowania potrafi być dość kłopotliwa. W warunkach PaaS proces można doprowadzić do całkowitego zautomatyzowania. Innymi słowy klienci mogą nawet nie zauważyć przerwy w dostawie usługi, kiedy to wersja oprogramowania została zmieniona w locie. Użytkownicy dostaną nowe funkcjonalności bez konieczności odcinania ich od konsumowania treści aplikacji, z której korzystają. Najczęściej pojawiającą się platformą tego typu jest technologia Kubernetes, która dziś robi ogromną karierę.

Ostatnim modelem przetwarzania w chmurze jest SaaS czyli “Software as a Service”. Jest to ten model, który właśnie najczęściej wszyscy otrzymujemy do użytku. Poprzednie modele leżą w zakresie zainteresowan programistów czy innych inżynierów IT, natomiast to ten właśnie model większości ludzi się kojarzy z chmurą. “Software as a service” to model, w którym dostawca aplikacji webowej, udostępnia użytkownikom po prostu funkcjonalności swojego produktu. Jaka jest infrastruktura fizyczna, sieci, serwery, systemy operacyjne, maszyny wirtualne, zarządzanie zasobami czy logika aplikacji, to wszystko pozostaje w gestii kogoś innego. Jeśli rozwijamy produkt w postaci SaaS, być może musimy znać te wszystkie aspekty jego działania albo przynajmniej ich część. Natomiast jeśli jesteśmy użytkownikami jakiejś aplikacji w modelu “Software as a Service”, interesuje nas jedynie jej używanie. Zatem jeśli następnym razem ktoś z panstwa ujrzy jakąś aplikację ze słowem “cloud” w nazwie i po wykupieniu dostępu otrzyma natychmiast dostęp do jej funkcjonalności, nie zastanawiając się, gdzie ona faktycznie działa, najprawdopodobniej jest to właśnie aplikacja w modelu SaaS. Kiedy zalogujemy się do takiej aplikacji, zdalna infrastruktura osadzona na fizycznych maszynach gdzieś setki kilometrów stąd dopasuje się automatycznie do naszych potrzeb. Być może aplikacja zażąda nowych zasobów, żeby zapewnić nam płynność. Być może dokładnie w trakcie naszej pracy wyjdzie nowa wersja aplikacji i zostanie na tych zdalnych zasobach zainstalowana tak, że nawet tego nie zauważymy. Być może w trakcie naszej pracy dojdzie do awarii części zasobów, a my nadal tego nie odczujemy, ponieważ zadania, które obsługiwały nasze zasoby zostały szybko przejęte przez inne maszyny. Wszystko to będzie dla nas nieodczuwalne, ponieważ tak właśnie powinna działać chmura, odsuwać od nas pewne problemy. Czy mogę sam stworzyć aplikację w modelu SaaS i udostępnić ją moim użytkownikom, tak, żeby zawsze ich doświadczenie było płynne i odporne na awarie? Mogę i do tego celu powinienem właśnie wykorzystać zasoby w chmurze, ponieważ to właśnie chmura daje mi tak szerokie możliwości.

Jak widać powiedzenie, że coś jest w chmurze może oznaczać różne rzeczy. Pewne jest jednak, że gdzieś poza naszą wiedzą zachodzą jakieś zautomatyzowane procesy mające na celu zapewnienie płynności i niezawodności użytkownikom. Procesy te mogą być związane z modyfikowaniem infrastruktury IT, na której działa aplikacja. To co widzimy w przeglądarce internetowej używając danej aplikacji to nieraz wierzchołek góry lodowej. Pod powierzchnią jest więcej, znacznie więcej technologii niż się wydaje. Dawniej infrastruktury były znacznie bardziej statyczne. Dzisiaj, zmieniają się, adaptują do potrzeb klientów i optymalizują koszty. Stały się niemal równie dynamiczne jak oprogramowanie. Dla tego tak wiele firm migruje swoje usługi do chmury, ponieważ to firmy właśnie powinny dostrzegać jej atrakcyjność. I co prawda chmura nie zawsze musi być idealnym rozwiązaniem dla każdego, doświadczenie mi podpowiada, że zdecydowana większość funkcjonalności może zostać przeniesiona. Szczególnie jeśli nie potrzebujemy bardzo specyficznych urządzeń. Nie musimy rozwijać własnego oprogramowania w ramach naszej działalności. Wystarczy, że nasza firma wykonuje jakieś czynności, które da się zautomatyzować. Wtedy również chmura może bardzo pomóc. I nie trzeba również być firmą z branży IT, aby to zrobić. Wystarczy, że jakaś czynność jaką wykonujemy powtarzalnie jest możliwa do zaprogramowania, wtedy warto takie zadanie oddać do chmury, żeby samemu zająć się czymś bardziej kreatywny. Możliwości leżą na stole i jest ich bardzo wiele. Trzeba je tylko przejrzeć i wyłonić te, które są dla nas najlepsze. A kreatywność ludzka nie zna granic. Zatem zachęcam do zapoznania się z niemalże nieograniczonymi możliwościami i wykorzystania ich do rozwiązania swoich problemów. Kto wie, może właśnie ktoś z państwa stworzy jakieś własne niepowtarzalne i innowacyjne rozwiązanie chmurowe, z którego potem wszyscy będziemy chcieli skorzystać?

Kategorie
Bez kategorii

10 prostych sposobów na poprawę swojego bezpieczeństwa

10 prostych sposobów na poprawę swojego bezpieczeństwa

Bezpieczenstwo w IT to bardzo szeroka dziedzina. Aplikacje oraz infrastruktury buduje się tak, aby ten aspekt pozostał nierozerwalny na każdym etapie procesu. Czasem poprawa bezpieczenstwa jest wynikiem odpowiedniego doboru parametrów w kodzie, a czasem – wnikliwej analizy i długich przygotowan. To jak inżynierowie różnych dziedzin IT projektują swoje rozwiązania pozostawmy specjalistom, ale pamiętajmy, że nawet najlepsi specjaliści nie obronią nas przed naszymi własnymi błędami czy pomyłkami. Wszyscy powinniśmy poważnie traktować swoje bezpieczenstwo ponieważ przekłada się ono także na bezpieczenstwo całego systemu a potem na innych użytkowników. Jako użytkownicy mamy co prawda bardzo niewielkie możliwości, ale dzięki temu możemy naprawdę niewiele robić, żeby robić to dobrze. Istnieje kilka prostych sposobów, które możemy wdrożyć choćby i w tej chwili, aby podnieść poziom swojego bezpieczeństwa. W dzisiejszym odcinku wymienimy ich 10.

1. Aktualizuj aplikacje i system operacyjny

Pierwszym sposobem na podniesienie poziomu bezpieczeństwa jest po prostu częste aktualizowanie swoich aplikacji oraz systemów. Dotyczy to laptopów, smartfonów i w zasadzie wszelkich możliwych urządzeń jeśli dają taką możliwość. Z prawie każdą aktualizacją otrzymujemy pakiet poprawek bezpieczeństwa. Czasem nawet mały pakiet poprawek może zaważyć o tym czy ktoś się do naszego urządzenia włamie czy nie. Można powiedzieć, że rozwijanie oprogramowania to w pewnym sensie wyścig. Wyścig pomiędzy dostawcami danej usługi, którzy na bieżąco szukają słabości w swoim kodzie i usiłują je naprawić, a hakerami, którzy nieustannie szukają tych samych słabości i usiłują je wykorzystać. Ignorując aktualizacje ułatwiamy pracę hakerom, ponieważ dajemy im więcej czasu, aby znaleźli podatności i odszukali nasze urządzenie z tą konkretną starą wersją oprogramowania. Zdecydowanie nie jest to strona wyścigu, po której chcielibyśmy się znaleźć. Zachęcam zatem do częstego aktualizowania swoich komputerów, smartfonów, urządzeń IoT, ale również do aktualizowania routerów i w zasadzie wszystkiego, co daje taką możliwość.

2. Twórz kopie zapasowe

Drugi sposób raczej nie kojarzy się wprost z bezpieczeństwem, ale zapewniam, że ma z nim wiele wspólnego. Chodzi mianowicie o częste tworzenie kopii zapasowych swoich danych. Administratorzy mawiają, że ludzie dzielą się na dwie grupy, ci, którzy robią kopie zapasowe, oraz ci, którzy kopie zapasowe robić będą. Pomijając oczywisty sarkazm w tym zdaniu, trzeba przyznać mu słuszność. Większość ludzi kopii zapasowych nie robi, dopóki w bolesny sposób się nie przekona o tym jak są ważne. Nasz laptop może zostać skradziony, dysk może zostać uszkodzony a nawet sami przez pomyłkę możemy skasować swoje ważne dane. W takich scenariuszach kopia zapasowa oszczędza nam dużo pracy. Ponadto, kopia zapasowa jest niezwykle pomocna, jeśli padniemy ofiarą jakiegoś ransomware. Jest to taki rodzaj złośliwego oprogramowania, które dokonuje szyfrowania naszych danych za pomocą nieznanego klucza oraz żąda okupu za ich odszyfrowanie. Jeśli mamy kopię zapasową swoich danych, możemy w takim wypadku po prostu całkowicie sformatować dysk twardy, dzięki czemu na pewno pozbędziemy się wirusa za darmo. Po instalacji systemu na nowo po prostu odzyskamy dane z kopii zapasowej. Tworzenie kopii zapasowej eliminuje bardzo wiele problemów jeszcze zanim powstaną.

3. Korzystaj z managera haseł

Trzeci sposób to korzystanie z menadżera haseł. Złych nawyków dotyczących haseł można wymienić pewnie wiele, ale moje 3 ulubione to: wymyślanie krótkich i prostych haseł, używanie tych samych haseł wszędzie, oraz zapisywanie haseł na kolorowych kartkach samoprzylepnych i przyklejanie ich do monitora. Prawidłowo używany menadżer haseł rozwiązuje wszystkie te problemy, choć przyznaję, że ten ostatni przykład jest dość ekstremalny. Jako zwolennik Open Source używam aplikacji Bitwarden. Jest to menadżer dostępny na macOS, Windows i Linux, ale również na systemy mobilne w ekosystemie Apple oraz Android. Dzięki takiemu menadżerowi haseł wystarczy pamiętać tylko jedno hasło, czyli hasło główne do otwarcia menadżera. Hasło główne jest zarazem kluczem szyfrującym do przechowywanych haseł, więc konieczne jest by było wystarczająco silne. Jeśli ma to być jedyne, lub jedno z bardzo niewielu haseł, które musimy pamiętać, polecam wymyślenie nawet paranoicznie długiego hasła, na powiedzmy 48 znaków. Kiedy to będziemy mieli, możemy skorzystać z wbudowanego generatora haseł i takie właśnie generowane hasła stosować już dalej wszędzie. Nie musimy ich pamiętać. Wystarczy wejść na jakąś stronę, rozpocząć rejestracje a Bitwarden sam zaproponuje wygenerowanie i zapamiętanie hasła, którego długość i poziom trudności możemy nawet sami określić. Kiedy się zgodzimy sam zacznie podpowiadać użytkownika i hasło na danej stronie. A co ważne, jeśli przypadkiem wylądujemy na jakiejś stronie spreparowanej, która wygląda identycznie jak ta, na której się zarejestrowaliśmy, Bitwarden nie podpowie hasła. Będziemy oczywiście mogli je wyciągnąć ręcznie, ale będzie to bardzo wyraźny znak, że prawdopodobnie coś jest nie tak i warto się zastanowić czy przypadkiem właśnie nie jesteśmy oszukiwani. Zatem menadżer haseł polecam od zaraz, ponieważ rozwiąże wiele problemów, łącznie z pewnymi nieoczywistymi problemami.

4. Stosuj autentykację dwuskładnikową

Czwartym sposobem podnoszenia stopnia bezpieczeństwa jest używanie weryfikacji dwuskładnikowej. Za każdym razem, kiedy dokonujemy logowania do jakiegoś serwisu, powinniśmy podać hasło oraz jeśli hasło jest prawidłowe, powinniśmy zostać poproszeni o podanie dodatkowego hasła jednorazowego. Takie hasło możemy dostać SMSem albo spisać je z aplikacji na smartfonie. Nie polecam jednak używania SMSów, ponieważ ten typ komunikacji nie jest szyfrowany. SMSy są wysyłane i odbierane w postaci otwartego tekstu. Co prawda hasło jednorazowe zwykle jest aktualne tylko 30 sekund, ale przecież w bezpieczeństwie nie chodzi o ułatwianie pracy hakerom. Hasła jednorazowe można generować za pomocą rozmaitych aplikacji mobilnych. Wybór aplikacji jest naprawdę duży, więc zachęcam do samodzielnego przejrzenia sklepu z aplikacjami i wybraniu czegoś co nam pasuje. Proszę tylko zwrócić uwagę na możliwość tworzenia kopii zapasowej swoich kodów. Jeśli nasze urządzenie mobilne nam zginie a nie będziemy mieli kopii, możemy mieć poważny problem z zalogowaniem się do naszych usług. Jednakże używanie haseł jednorazowych daje bardzo wysoki poziom bezpieczeństwa. Haker nie dość, że musi znać nasze długie i skomplikowane hasło, co już jest bardzo trudne, to jeszcze musi mieć fizyczny dostęp do naszego urządzenia mobilnego. Zatem zachęcam do przejrzenia wszystkich usług, których Państwo używają i uruchomieniu takiej weryfikacji, jeśli jest dostępna. Zwykle proces uruchamiania jest prosty i jesteśmy prowadzeni za rękę.

5. Zmień swój DNS

Piąty sposób, który jest obecnie nadal mało popularny to zmiana swojego DNS. Jeśli korzystamy z jakiegoś popularnego serwera DNS, albo tego, którego podsunął nam nasz dostawca Internetu, mamy bardzo duże prawdopodobnieństwo, że jesteśmy wystawieni na wszystkie wady tego systemu. DNS to w zasadzie taka książka telefoniczne Internetu. Jednym z jego zadan jest tłumaczenie nazw domen na numer IP. Czyli jeśli potrzebuję się połączyć ze stroną www.m-core.consulting najpierw mój komputer odpyta znany sobie serwer DNS, “jaki jest adres IP przypisany do domeny www.m-core.consulting”. Serwer DNS odpowie numerem IP. Więcej na temat samego DNS znajdziecie Państwo w drugim odcinku “IT Prostymi Słowami”. Skoro urządzenia w Internecie cały czas pytają serwery DNS o adresy IP, bo same go nie znają, to czemu by niektórych adresów nie blokować już na tym etapie? Powiedzmy, że jakiś haker stworzył stronę, która wygląda identycznie ze stroną jakiejś usługi, z której korzystamy. Zrobił ja tylko po to, żeby ktoś na taką stronę wszedł w pełni przekonany, że to prawidłowa strona i podał swój login i hasło. Haker takie poręczenia otrzyma i zacznie używać już na właściwej stronie do podszywania się pod swoją ofiarę. Taki sposób wyłudzania haseł nazywamy phishingiem. W samym 2021 roku wykryto około 2,5 miliona stron phishingowych. Dość skutecznie takie strony właśnie blokuje się na poziomie DNS. Czyli jeśli z jakiegoś powodu mój komputer zacznie próbować się połączyć ze stroną phishingową, zapyta DNS o IP takiej strony. Jeśli DNS wie, że taka strona jest spreparowana, zamiast odpowiadać numerem IP serwera, odpowie “nie ma takiej strony”. Wiele popularnych serwerów DNS po prostu odpowiada na praktycznie każde zapytanie DNS, nawet takie, które zaprowadzi nas do stron spreparowanych. Jeśli chcemy zwiększyć swoje bezpieczeństwo warto zmienić swój DNS na taki, który ma filtr niebezpiecznych stron. Z darmowych rozwiązań dobrze sprawdza się DNS firmy Cloud Flaire, ale ja osobiście preferuję płatne, aczkolwiek bardzo tanie rozwiązanie NextDNS, ponieważ również odcina sieci reklamowe. Czyli jeśli z dowolnego powodu mój komputer będzie chciał coś zrobić z jakąś siecią reklamową, na przykład pobrać reklamę, albo przypadkiem wejdę na stronę phishingową, NextDNS potraktuje je jak takie samo zło i odpowie, że taka strona nie istnieje. Na mojej przeglądarce internetowej nigdy nie ma reklam właśnie dzięki NextDNS. Zachęcam zatem do zmiany swojego DNS.

6. Szyfruj dysk

Kolejna metoda całe szczęście z czasem staje się coraz bardziej popularna. Chodzi tutaj o szyfrowanie swojego dysku. Jeśli nasz system operacyjny wspiera jakąś natywną technologię szyfrowania, warto z niej skorzystać. W najgorszym wypadku zmusi to nas tylko do podania jednego dodatkowego hasła. Jednakże, jeśli hasło to będzie wystarczająco silne, a ktoś po prostu skradnie nasz dysk, wysiłek jaki będzie musiał włożyć w odszyfrowanie takiego dysku będzie tak duży, że w praktyce kompletnie nieopłacalny. Łamanie haseł jest zawsze kwestią czasu. Jeśli ktoś takie hasło łamie nigdy nie wie jak długo to potrwa. Może jeszcze 5 minut, a może kwadrylion lat. Wymyślając silne hasło sprawiamy, że proces ten zajmie tak długo, że taki haker tylko będzie tracił czas i pieniądze na rachunki za prąd, ponieważ proces ten jest dość energochłonny. Użytkownicy macOS mogą zapoznać się z natywną technologią FileVault, a użytkownicy systemu Windows natomiast z technologią BitLocker aby zaszyfrować swój dysk. Jeśli z jakiegoś powodu technologia nie jest dostępna albo po prostu nie chcemy z niej korzystać, warto zapoznać się z technologią VeraCrypt, która działa na każdej platformie i jest dostępna za darmo. Zwracam uwagę, że jeśli zalogowanie się na naszego użytkownika na naszym laptopie wymaga hasła, wcale to nie znaczy, że dysk jest zaszyfrowany. Jednakże, jeśli hasło do logowania jest zarazem kluczem do rozszyfrowania naszego dysku, wtedy można uznać, że nasze dane są znacznie bardziej zabezpieczone.

7. Używaj wszelkich technologii zapewniających szyfrowanie typu end-to-end

Siódma metoda, która już może niestety wiązać się z trudnościami przekonania do niej swoich znajomych to używanie wszelakich technologii zapewniających szyfrowanie typu end-to-end. Jak pamiętamy z poprzedniego odcinka “IT Prostymi Słowami”, szyfrowanie end to end to taki typ szyfrowania, kiedy wyłącznie nadawca i odbiorca wiadomości mają dostęp do klucza szyfrującego, a nie dostawca usługi. Wiele osób używa dziś już bardzo wielu usług Internetowych na co dzień. Można powiedzieć, że nasze dane, nawet te prywatne są rozproszone po całym świecie i nie sposób ich wszystkich śledzić. Nasze dane mogą się fizycznie znajdować na dziesiątkach serwerów na całym świecie. Skąd wiemy jak bardzo administratorzy tych serwerów zabezpieczają swoje systemy? Skąd wiemy, czy akurat na jednym z tych serwerów nie doszło do włamania? Czy w takiej sytuacji zostalibyśmy o tym poinformowani? A nawet jeśli zostaniemy poinformowani, co z tego, jeśli dane są i tak już poza naszą kontrolą? Nie znamy odpowiedzi na wiele pytań. Dla tego też, jeśli już pojawia się potrzeba wysłania jakiegoś pliku, warto rozważyć używanie bezpiecznych komunikatorów internetowych, takich jak Signal czy Session. Maile można wysyłać zaszyfrowane technologią S/MIME albo OpenPGP. Jeśli nawet gdzieś na końcu świata ktoś włamie się na jakiś serwer, który akurat będzie przechowywał nasze dane, zobaczy tylko ciąg znaków i jakieś metadane. Warto jest sprawić, aby zatem mógł odczytać jak najmniej. Technologii jest naprawdę bardzo wiele i dotyczą nie tylko wymienionych przeze mnie zagadnień. Zachęcam do samodzielnego przeglądu strony PrivacyTools.io. Znaleźć można na niej bardzo wiele technologii przyjaznych naszej prywatności. Wiele z nich to technologie implementujące szyfrowanie end to end w standardzie. Wiele z nich również jest darmowych.

8. Usuwaj nieużywane aplikacje

Ósma metoda dotyczy porządkowania swoich aplikacji. Każdy z nas, kiedy kupi nowego laptopa z zainstalowanym systemem operacyjnym albo nowego smartfona, zobaczy, że jest na nim również zainstalowanych kilka aplikacji. Kiedy tak eksploatujemy nasze urządzenia często instalujemy różne aplikacje, które przez jakiś czas używamy, ale potem przestajemy, albo używamy raz na pół roku. Dobrą praktyką jest dokonywanie rutynowego przeglądu swoich aplikacji i usuwanie wszystkich, których się nie używa. Aplikacje mogą mieć miliony linii kodu, do którego często nie mamy wglądu. A nawet, gdybyśmy taki wgląd mieli, nie starczy nam czasu na studiowanie tego wszystkiego. Zawsze w pewnym momencie będziemy musieli zaufać programistom danej aplikacji, że produkt firmy, dla której pracują był przynajmniej zadowalająco przetestowany pod kątem bezpieczeństwa. Jednakże pewności nie możemy mieć nigdy. Złośliwe oprogramowanie, którym możemy zostać zainfekowani, może wykorzystywać podatności naszych zainstalowanych aplikacji. Dla tego też, jeśli jakiejś aplikacji nie używamy, warto ją usunąć, żeby minimalizować zagrożenie.

9. Blokuj dostęp aplikacji do mikrofonu/kamery, jeśli nie rozumiesz, w jaki sposób będą one wykorzystywane

Przedostatnia, czyli dziewiąta metoda również dotyczy regularnego audytowania swoich aplikacji. Kiedy już usunęliśmy nieużywane aplikacje, powinniśmy także przejrzeć pozostałe aplikacje pod kątem ich dostępów. Zasada głównie dotyczy smartfonów. Jeśli jakaś aplikacja zarządzająca zdjęciami potrzebuje dostępu do Internetu, do katalogu zdjęć i aparatu, można śmiało uznać, że takie uprawnienia powinna mieć. Jednakże, jeśli ta sama aplikacja prosi o dostęp do mikrofonu, a nie ma funkcjonalności nagrywania filmów, powinniśmy poważnie się zastanowić na odłączeniem takiego dostępu. Jeśli jakakolwiek aplikacja ma dostęp do zasobów, który naszym zdaniem nie jest jej potrzebny, albo dostęp ten nie jest dla nas zrozumiały, warto taki dostęp od razu odłączać. Jeśli naprawdę będzie w przyszłości potrzebny, zawsze może zostać przywrócony, ale zanim zrozumiemy po co na przykład dostęp do usług lokalizacji dla aplikacji wysyłającej e-mail, proponuję taki dostęp zablokować. Zasada ta wynika z tego, że dość często jako użytkownicy akceptujemy regulamin aplikacji nieczytając go. Zapewne, gdybyśmy go jednak przeczytali dowiedzielibyśmy się, że na przykład aplikacja w taki sposób nas śledzi, albo po prostu dodaje do naszych plików odpowiednie metadane. Ze względu na to, że prawie nigdy nie mamy czasu na pełne i wnikliwe przeanalizowanie działania aplikacji, najbezpieczniej jest po prostu ograniczyć zaufanie. Pamiętajmy, że metadane, które dostawca danej usługi od nas uzyskuje do śledzenia nas i profilowania, również mogą zostać kiedyś wykradzione nawet po latach składowania na serwerach dostawcy. Czy wszyscy dostawcy szyfrują swoje składowane dane? Pytanie niestety jest retoryczne.

10. Zachowuj spoków

Ostatnia metoda nie jest już związana z żadną technologią. Dotyczy bowiem już tylko i wyłącznie naszego nastawienia. Zasada brzmi “zachowaj spokój”. W dzisiejszych czasach jesteśmy zalewani różnymi próbami wyłudzeń. A to otrzymamy mail rzekomo z naszego banku, w którym rzekomy administrator prosi nas o nasze hasło, bo inaczej dojdzie do zablokowania naszego konta. A to otrzymujemy mail o tym, że jakiś serwis prosi o natychmiastową zmianę hasła z dowolnego powodu. Prób wyłudzenia jest dziś bardzo wiele. Jedyne co możemy zrobić, aby się przed tym chronić to zachować spokój. Administratorzy nigdy nie proszą o hasła, bo mogą je nadpisać w każdej chwili, zapewniając sobie dowolny dostęp do naszych danych. Po co mieliby prosić o nasze hasła? Próby wyłudzenia prawie zawsze mają element presji czasowej. Jeśli otrzymamy wiadomość, że jeśli czegoś nie zrobimy w ciągu 12 godzin, coś złego się stanie, ktoś kto nam tę wiadomość wysłał właśnie liczy na to, że damy się przestraszyć. Ufając, że kiedy klikniemy w podany link faktycznie zrobimy coś niewinnego, tak naprawdę odwiedzimy stronę internetową przekazującą nasze hasło hakerowi albo pobierzemy złośliwe oprogramowanie. Uczulam zatem do traktowania każdego otrzymanego maila i SMSa z dużą ostrożnością. W takich chwilach warto zadać sobie pytanie “Czy głównym celem tej wiadomości nie jest właśnie wywołanie we mnie emocji, żebym stracił czujność?”. W dzisiejszych czasach wyłudzenia haseł bardziej opierają się na psychologii społecznej i niestety żadne zabezpieczenia techniczne w tym nie pomogą. Pozostaje zatem nam tylko i wyłącznie nasza własna rozwaga i czujność.

Kategorie
Bez kategorii

Czy twoje dane są bezpieczne?

Czy twoje dane są bezpieczne?

Rozwój technologii spowodował, że wysłanie pliku czy wiadomości jest dziś możliwe dosłownie na dwa kliknięcia lub dwa dotknięcia ekranu dotykowego. Jesteśmy w stanie wysłać na drugi na koniec świata kawałek swojego wirtualnego życia w ciągu sekund. Jest to tak proste i powszechne, że nawet się nie zastanawiamy nad tym co się dalej dzieje z tymi wysłanymi danymi. Zatrzymajmy się na chwilę i zanim wciśniemy przycisk z napisem “wyślij”, zastanówmy się czy na pewno tylko my i adresaci mają wgląd do wysłanych przez nas danych.

Załóżmy, że chcę wysłać e-mail do jednego z moich znajomych. Prosta czynność, którą każdy z nas wykonuje wielokrotnie każdego dnia. Po prostu piszę kilka zdań, podaję adres, nadaję tytuł wiadomości i klikam “wyślij”. Zaraz po kliknięciu tego przycisku wiadomość zostaje zmieniona w zestaw pakietów i wysłana szyfrowanym łączem na serwer pocztowy, na którym mam swoją skrzynkę. Zaraz potem wiadomość zostaje skierowana również przez szyfrowane łącze do serwera odbiorcy a stamtąd może zostać odebrana przez adresata za pomocą jakiegoś klienta pocztowego. Zwróćmy uwagę, że w całym tym procesie mamy kilka szyfrowanych połączeń, dzięki którym nasze wiadomości mogą być bezpiecznie kopiowane między urządzeniami. Czyli jeśli kopiujemy wiadomość z serwera na serwer, lub z serwera na nasze urządzenie, wiemy, że w trakcie wędrówki pakietów przez Internet nasze dane są zabezpieczone. Ale co się dzieje z wiadomością przechowywaną na serwerze? Jest przecież tam również przechowywana na wypadek, gdybyśmy chcieli ją pobrać na kolejne urządzenie. A w tym przypadku jest przechowywana nawet na dwóch serwerach, tym ze skrzynką nadawcy i adresata. Czy wiadomość jest zaszyfrowana w trakcie spoczynku? Otóż, jeśli sami nie zadbaliśmy o to, wiadomość e-mail na serwerze jest przechowywana w postaci otwartego tekstu. Czyli kiedy tylko wiadomość pokona jakiś odcinek Internetu i trafi do jakiegoś punktu pośredniego, zostaje odszyfrowana i w takiej formie zapisana. Podobny proces zachodzi za każdym razem, kiedy wiadomość przechodzi do wielu odbiorców. Wtedy też jest zapisywana w postaci otwartego tekstu na każdym z serwerów konkretnych adresatów. Bardzo podobna sytuacja ma miejsce, jeśli piszemy z kimś za pomocą komunikatora internetowego. Wiele popularnych komunikatorów zapewnia szyfrowanie tylko w trakcie transmisji wiadomości, a nie w trakcie składowania danych.

Weźmy pod uwagę inny przykład. Złóżmy, że mam jakieś pliki w chmurze. Niezależnie od tego czy udostępniam je komuś znajomemu czy trzymam je tylko dla siebie, dość często pliki te również składowane są w postaci niezaszyfrowanej. Należy jednak tutaj nadmienić, że popularni dostawcy usługi przechowywania plików w chmurze dość często przekonują nas, że pliki są u nich przechowywane w postaci zaszyfrowanej. Jednakże tak samo często zapominają dodać, że klucz do odszyfrowania tych plików należy do nich. Czyli być może jeśli dojdzie do wykradzenia jakichś danych z ich serwerów, nikt z hakerów nie odczyta naszych plików, ale administratorzy usługi będą w stanie to zrobić, kiedy tylko zechcą. Takie podejście stwarza bardzo duże możliwości do profilowania i śledzenia użytkowników. W wiadomościach i plikach można wyszukiwać fraz, które odpowiednie algorytmy będą w stanie przetworzyć. Nasze zdjęcia można przeanalizować z użyciem sztucznej inteligencji w celu opatrzenia ich odpowiednimi etykietami. Dostawca usługi może na podstawie zebranych danych podsunąć nam odpowiednią reklamę albo po prostu sprzedać te dane dostawcom innych usług. Pomimo tego, że żaden człowiek prawdopodobnie nie ogląda naszych danych, to firma analizująca nasze dane wie o nas całkiem sporo.

Jak widać sam fakt zapewnienia swoim użytkownikom szyfrowanego połączenia rozwiązuje tylko część problemów. Zabezpiecza nas przed wścibskimi obserwatorami, którzy usiłują podejrzeć nasze działania w Internecie, ale nie rozwiązuje problemu bezpieczeństwa przechowywania danych. Dzieje się tak, ponieważ w wymienionych wyżej scenariuszach wszelkie klucze szyfrujące posiada dostawca usługi. Sposobem na zapewnienie sobie znacznie wyższego poziomu bezpieczeństwa jest po prostu

odwrócenie sytuacji. Jeśli staniemy się właścicielami swoich kluczy szyfrujących i zaszyfrujemy swoje dane zanim je wyślemy na chmurę, dostawca nie będzie miał możliwości otwarcia naszych plików. Taki sposób zabezpieczania danych nazywamy szyfrowaniem typu end-to-end. Jest to bardziej metoda a nie technologia, kiedy to właściciel pliku czy wiadomości ma w posiadaniu klucze szyfrujące a nie dostawca usługi. Przechowywanie kluczy na własną rękę oczywiście wiąże się z koniecznością odpowiedniego zadbania o bezpieczeństwo takich kluczy albo przynajmniej zapamiętaniem odpowiednio silnego hasła. Dodatkowo osoba, z którą będziemy korespondować musi umieć się taką technologią posługiwać. Zapewniam, że nie jest to jednak trudne. Nie musimy znać się na kryptografii żeby zabezpieczyć nasze dane i wiadomości. Jest to dość prosta czynność, która zajmuje sekundy, ale radykalnie podnosi poziom naszego bezpieczeństwa.

Co zrobić, żeby nasze szyfrowanie zadziałało naprawdę skutecznie? Poruszmy dwa aspekty, które są równie ważne, ale nie zawsze muszą występować jednocześnie. Po pierwsze musimy zadbać o silne hasła. W dzisiejszych czasach komputery mają tak dużą moc obliczeniową, że w dogodnych warunkach są w stanie dokonywać trylionów prób złamania hasła na sekundę. Algorytm łamiący hasło po prostu będzie próbować wykorzystać każdą możliwą kombinację znaków jako hasło. Robić to będzie to tak długo, aż w końcu któraś kombinacja zadziała do odszyfrowania danych. Jedyna właściwa kombinacja to nic innego jak nasze hasło. W praktyce złamanie hasła o długości 8 znaków może zająć mniej niż sekundę. Niestety nie istnieje hasło nie do złamania, ale istnieją hasła, których “odgadnięcie” taką metodą zajmie miliardy, albo jeszcze więcej lat. Hasła im dłuższe, tym lepsze. Dla tego najlepiej nie próbować wymyślić hasła w formie losowego ciągu znaków, ponieważ będzie trudne do zapamiętania. Najlepsze hasła są zarówno długie jak i łatwe do zapamiętania, dla tego powinniśmy o hasłach zacząć myśleć jak o całych zdaniach. Na przykład hasło “e=mc^2toMojeUlubioneRownanieEinsteina” ma 37 znaków, jest hasłem zdecydowanie łatwym do zapamiętania, ale na dzień dzisiejszy praktycznie niemożliwym do złamania. Osobiście rekomenduję hasła o minimalnej długości 24 znaków, które zawierają litery małe i wielkie, liczby oraz znaki specjalne. Silne hasła powinniśmy stosować wszędzie bez wyjątku, nie tylko w odniesieniu do naszego dzisiejszego tematu. Drugim aspektem szyfrowania typu end to end jest zrozumienie kluczy szyfrujących. Tak naprawdę wystarczy tylko wiedzieć, że w procesie brać udział będą dwa klucze. Klucz publiczny i prywatny. Oba te klucze to po prostu pliki tekstowe zawierające bardzo długie ciąg znaków. Swój klucz prywatny trzymamy tylko dla siebie a ten publiczny możemy udostępnić swoim adresatom. Najlepiej podczas faktycznego spotkania a nie za pośrednictwem Internetu. Od naszych adresatów również otrzymamy ich klucze publiczne. Kiedy nasz znajomy zechce wysłać do nas wiadomość, zaszyfruje ją używając do tego naszego klucza publicznego, którego udostępniliśmy mu wcześniej. My taką wiadomość otrzymamy i będziemy w stanie ją odszyfrować naszym kluczem prywatnym. Potem odpiszemy mu na wiadomość i zaszyfrujemy odpowiedź używając jego klucza publicznego. W zasadzie jest to cała wiedza teoretyczna, jaką musimy posiąść przed rozpoczęciem szyfrowania danych.

Istnieje dziś już wiele technologii przesyłania plików, wiadomości, maili w standardzie szyfrowania end to end. Do zaszyfrowania wiadomości e-mail możemy wykorzystać choćby technologię OpenPGP. Jest to technologia bardzo popularna i dostępna za darmo. Wystarczy użyć darmowego generatora do stworzenia pary kluczy, udostępnić klucz publiczny swoim znajomym i zacząć używać klienta pocztowego do szyfrowania wiadomości. Ważne jednak, że jeśli zdecydujemy się na ten standard musimy pamiętać o przekazaniu swojego klucza w bezpieczny sposób. Jeśli wyślemy taki klucz przez Internet i zostanie on przechwycony w drodze, możemy nie dość, że utracić bezpieczeństwo, to jeszcze mieć fałszywe jego poczucie, co jest jeszcze gorsze. Zatem pamiętajmy, żeby klucze generowane za pomocą technologii OpenPGP przekazywać w bezpieczny sposób. Drugą dość popularną metodą szyfrowania e-maili, aczkolwiek już nie darmową, jest technologia S/MIME.

W tym przypadku już nie musimy zadbać o samodzielne udostępnienie kluczy. Płacimy bowiem za to, żeby zewnętrzny organ bezpieczeństwa potwierdził autentyczność naszego udostępnionego klucza osobie, do której go wyślemy mailem. Proces ten zachodzi automatycznie. Jeśli ktoś z naszych znajomych korzysta z certyfikatu S/MIME i wyśle do nas e-mail, zobaczymy w naszym kliencie pocztowym w wiadomości od niego kłódeczkę, podobną do tej z paska URL przeglądarki internetowej, kiedy łączymy się za pomocą HTTPS. Będzie to znak, że wiadomość została podpisana certyfikatem S/MIME i otrzymując ją otrzymaliśmy również klucz publiczny nadawcy. Certyfikat S/MIME można wykupić już w cenie poniżej 50 zł za rok. Jeśli jednak nie mamy ochoty generować swoich własnych kluczy, możemy skorzystać z usług dostawców e-mail, którzy OpenPGP mają zaimplementowany w standardzie. ProtonMail jest jedną z takich usług. Ten szwajcarski serwis umożliwia szyfrowanie end-to-end wewnątrz swoich serwerów za pomocą tejże technologii. Więc jeśli ktoś z naszych kontaktów używa ProtonMail i wyśle nam wiadomość na naszą skrzynkę w obrębie tego dostawcy, wiadomość będzie zaszyfrowana. Jeśli jednak chcemy wysłać wiadomość poza serwery ProtonMail, musimy udostępnić swój klucz publiczny tak samo, jak byśmy to robili zwyczajnie korzystając z OpenPGP. Jak widać każda metoda ma swoje słabe i silne strony. Wybór zatem powinien być uzależniony od wielu czynników, łącznie z tym czego używają nasi znajomi.

Warto również pamiętać, że podczas wyboru technologii bardzo istotnym czynnikiem jest czy dana technologia jest dostępna na licencji Open Source. Jeśli kod aplikacji jest dostępny dla każdego do wglądu, to oczywiście jest dostępny również dla hakerów. Można w ten sposób faktycznie zidentyfikować słabości aplikacji, ale trzeba pamiętać, że nie tylko ludzie o złych zamiarach mają wgląd do kodu. Im więcej oczu może zweryfikować kod, tym większa szansa na znalezienie błędów. Z tego też powodu bardzo często korzystam z rozmaitych technologii na licencji Open Source i polecam je moim klientom. Również w temacie komunikatorów internetowych. Do komunikacji pisanej, oraz rozmów audio czy wideo z dostępnym szyfrowaniem end-to-end w standardzie można wykorzystać aplikację Signal. Aplikacja wymaga podania numeru telefonu do aktywacji, ale jest bardzo przyjazna w użytkowaniu. Funkcjonalności ma praktycznie takie same, jak większość popularnych komunikatorów. Należy jedynie pamiętać, żeby swoje kontakty weryfikować skanując kody QR na telefonach znajomych. Tylko wtedy mamy pewność, że nie doszło do przechwycenia kluczy. Signal jest przede wszystkim dostępny na smartfony, ale istnieje również wersja na Windows oraz macOS. Aby jeszcze zwiększyć swoje bezpieczeństwo i dodatkowo nawet dołożyć aspekt bardzo silnej anonimowości, można skorzystać z jakiegoś komunikatora bazującego na trasowaniu cebulowym. Session jest jedną z takich aplikacji. Pozwala wysyłać wiadomości tekstowe za pomocą sieci Lokinet, podobnej do sieci Tor, opisywanej w poprzednim odcinku. Zaprzęgnięcie do pracy tak potężnego narzędzia jak trasowanie cebulowe w komunikacji sprawia, że zarówno podsłuchanie wiadomości jak i zwykłe zidentyfikowanie kto z im rozmawia staje się wybitnie trudnym zadaniem. Na dzien dzisiejszy trudno znaleźć bardziej anominową i bezpieczną wymianę wiadomości tekstowych. Session ma jednak pewne wady, które są bardzo typowe dla wszelkich aplikacji korzystających z trasowania cebulowego. Przesyłanie danych zachodzi bardzo powoli i również dla tego aplikacja na dzień dzisiejszy nie pozwala na nawiązanie rozmowy głosowej.

Jeśli ktoś z Państwa przechowuje pliki w chmurze, zachęcam również do zapoznania się z aplikacją Cryptomator. Dzięki niej można w dość prosty sposób zaszyfrować swoje pliki w chmurze. Jeśli mamy już jakiś zasób dyskowy wykupiony u jakiegoś dostawcy, ale nie chcemy, aby dostawca ten miał wgląd do naszych plików, możemy przechowywać pliki zaszyfrowane naszym kluczem. Wystarczy wskazać aplikacji który katalog na naszym komputerze jest synchronizowany z chmurą, gdzie stworzyć dodatkowy wirtualny dysk, oraz wymyślić silne hasło. Od tego momentu możemy z dodatkowego wirtualnego dysku korzystać tak, jak z każdego innego, pamiętając, że każdy plik, który tam włożymy zostanie przez Cryptomatora zaszyfrowany i w takiej postaci wysłany na chmurę.

Wymienione w dzisiejszym odcinku technologie w żadnym wypadku nie wyczerpują tematu szyfrowania typu end-to-end. Możliwości jest znacznie więcej i ich wybór powinien zależeć od potrzeb użytkownika. Ale teraz zadajmy sobie pytanie “Jeśli nawet zaszyfruję wszystko co mogę, to czy stanę się całkowicie anonimowy?” Odpowiedź na to pytanie niestety nie jest taka prosta. Wykorzystując powyższe technologie i wiele innych, z pewnością radykalnie podniesiemy stopień bezpieczeństwa. Obejrzenie naszej korespondencji stanie się tak trudne, że w praktyce niewykonalne. Tak samo, jeśli dojdzie do wykradzenia naszych plików. Jeśli zaszyfrowaliśmy je wcześniej używając silnego hasła lub klucza, możemy właściwie założyć, że nikt ich nie odczyta za naszego życia, życia naszych prawnuków i wielu następnych pokoleń. Jednakże, nawet jeśli wszystko zaszyfrujemy to jakaś część komunikacji będzie musiała zachodzić na zasadach umożliwiających transport wiadomości. Wysyłając nawet zaszyfrowaną wiadomość, musimy ją do kogoś zaadresować. Adres wiadomości musi być dostępny do odczytu, bo inaczej nie byłoby wiadomo, gdzie tę wiadomość skierować. I kiedy szyfrujemy e-mail, dowolną technologią, tytuł wiadomości, adresat oraz nadawca są znane administratorom usług. Kiedy piszemy wiadomość na komunikatorze i nie jest to komunikator używający trasowania cebulowego, jakiś identyfikator adresata musi być dostępny, aby zapewnić odpowiedni transport wiadomości. Jeśli treść naszej wiadomości możemy nazwać “danymi”, to adresata, nadawcę czy czas nadania możemy nazwać “metadanymi”. Metadane to w zasadzie dane opisujące inne dane. Są one zazwyczaj znacznie mniejsze od danych, ale przechowują krytyczne informacje konieczne do zrealizowania usługi takiej jak dostarczenie maila. W dzisiejszych czasach szyfrowanie stało się już tak popularne i silne zarazem, że próby złamania szyfru stały się mało opłacalne. Oczywiście takie próby się mimo wszystko nadal podejmuje, ale zgromadzenie odpowiednio dużej bazy “metadanych” daje na nasz temat równie dużo informacji co samych treści naszych wiadomości. To jak często z kimś rozmawiamy, jak długo, jak wiele razy w ciągu dnia, czy w jakich porach dnia mówi bardzo wiele o typie relacji. Miejsca, które odwiedzamy w zależności od dnia i godziny są unikalnym identyfikatorem naszej osoby. Już w 2004 roku główny radca NSA Stewart Baker powiedział, że metadane mówią o nas kompletnie wszystko. Jeśli posiadamy wystarczająco dużo metadanych na czyjś temat, to tak na prawdę nie potrzebujemy danych, a w tym przypadku treści naszych wiadomości. Trasowanie cebulowe dzięki swojej zdecentralizowanej architekturze umożliwia przesyłanie danych z minimalną ilością metadanych, które dodatkowo są rozproszone i trudne do zebrania i powiązania. Jednakże mail, sms, rozmowy telefoniczne i wiele innych pozostają do wglądu administratorów i służb rządowych. Technologie szyfrowania end-to-end są niewątpliwie wielkim krokiem w dobrym kierunku, ale nie zawsze zapewniają całkowitą anonimowość, ponieważ ukrywanie metadanych w wielu zagadnieniach to nadal pieśń przyszłości. A zanim to nastąpi pamiętajmy o tym, jak wiele mówią o nas nasze metadane. Gen. Michael Hayden, były dyrektor NSA oraz CIA już w 2004 roku powiedział “we kill people based on metadata”. Jak widać metadane mówią o nas tak wiele, że pewne organizacje rządowe nie zawahają się podjąć ostatecznej decyzji o czyimś życiu, bazując tylko na metadanych.

Kategorie
Bez kategorii

Jak pozostać anonimowym w internecie?

Jak pozostać anonimowym w internecie?

Kiedy weźmiesz do ręki cebulę i zdejmiesz z niej jedną warstwę, pod spodem będzie kolejna warstwa, a pod nią kolejna. Co prawda każda kolejna warstwa prawdziwej cebuli jest coraz mniejsza i mniejsza, ale ta cebula, o której opowiemy w tym odcinku jest inna. Każda kolejna warstwa wygląda identycznie i jest takich samych rozmiarów, a w środku, pod tymi wszystkimi warstwami, które zdejmie jedynie specjalny klucz, znajduje się wiadomość. Ile warstw muszę zdjąć, żeby odczytać wiadomość? To wie tylko autor wiadomości.

Trasowanie cebulowe zostało po raz pierwszy zaimplementowane w latach 90-tych ubiegłego stulecia w Laboratorium Badawczym Marynarki Wojennej Stanów Zjednoczonych. Jego autorzy Paul Syverson, Michael G. Reed oraz David Goldschlag mieli na celu opracowanie protokołu sieciowego, który zapewni silną ochronę komunikacji wywiadu USA. Projekt był dalej rozwijany przez Defense Advanced Research Projects Agency (w skrócie DARPA) i w 1998 roku protokół został opatentowany przez Marynarkę Wojenną Stanów Zjednoczonych. W 2002 roku informatycy Roger Dingledine i Nick Mathewson dołączyli do Paula Syversona i na podstawie istniejącej technologii stworzyli najbardziej znaną implementację trasowania cebulowego, zwaną najpierw projektem Onion Routing a następnie Tor. Laboratorium Badawcze Marynarki Wojennej po pewnym czasie udostępniło kod źródłowy Tor na wolnej licencji, po czym w 2006 roku Dingledine i Mathewson, wraz z pięcioma innymi osobami, założyli organizację non-profit The Tor Project. Dzisiaj protokół Tor (czyli w skrócie The Onion Router) jest dostępny za darmo wraz ze swoim kodem źródłowym. Jest również dostępna przeglądarka internetowa Tor Browser, która wykorzystuje protokół Tor, oraz zapewnia pewne dodatkowe funkcjonalności jeszcze bardziej utrudniające śledzenie użytkownika w Internecie.

Tor nie jest jedynym protokołem trasowania cebulowego, jednakże jest najpopularniejszym. Opowiadając o trasowaniu cebulowym w tym odcinku “IT Prostymi Słowami” ograniczę się tylko do Tora. Temat jest równie ciekawy ze względów technicznych, jak kontrowersyjny ze względów na to, jak można Tora używać. Jest to bowiem potężne narządzie, które w niepowołanych rękach może wyrządzić pewne szkody. Wrócę do tego tematu w drugiej części tego odcinka.

Załóżmy, że chcę się połączyć ze stroną google.com. W normalnych warunkach taka komunikacja będzie zachodziła przez różne urządzenia, ale obie jej strony będą wiedzieć całkiem sporo o tej drugiej stronie. Google będzie wiedzieć kto jest moim dostawcą Internetu, mój dostawca Internetu będzie wiedział, że korzystam z usług Google. Dostawca co prawda raczej nie dowie się w jaki sposób korzystam z tych usług. Cały proces łączenia ze stroną google.com będzie szybki, będzie zachodził najkrótszą drogą i będzie zabezpieczony szyfrowaniem dzięki certyfikatowi, który dostanę ze strony google.com. Jeśli jednak postanowię do tego procesu użyć protokołu Tor, będzie to wyglądać inaczej. Ani mój dostawca Internetu nie będzie wiedział, że używam google.com, ani korporacja Google nie będzie wiedzieć kim jestem, ani kto jest moim dostawcą Internetu jeśli nie dokonam jawnego logowania do ich usług. Dodatkowo nawet jeśli gdzieś na drodze komunikacji pomiędzy moim laptopem a google.com znajdzie się jakiś wścibski administrator albo haker, jedyne co będzie wiedział to to, że w tym konkretnym połączeniu ktoś używa Tor. Brzmi niewiarygodnie? Wyjaśnijmy mechanizm, który za tym stoi.

Tor to nie tylko sam protokół, ale i rozbudowana społeczność. Każdy może stać się częścią tej społeczności i udostępnić swoje łącze. Tak się też dzieje. Użytkownicy z całego świata wydzielają kawałek swoich zasobów, żeby rozbudować sieć Tor. W ten sposób ich komputery stają się tzw. “węzłami” sieci. Rozproszone po całym świecie węzły są w dużej mierze siłą Tora, ponieważ komunikacja przechodząca przez te węzły może być praktycznie co chwilę kompletnie różna co bardzo utrudnia namierzanie użytkowników tej sieci. Czasem próbując się połączyć z google.com połączenie przejdzie przez Włochy, Stany Zjednoczone i jeszcze RPA, żeby dopiero potem zostać skierowanym do serwerowni korporacji Google. Jednakże mogę postanowić, żeby utworzyć nowe połączenie i tym razem pośredniczyć będą w tym węzły powiedzmy w Niemczech, Kanadzie, USA, żeby ostatecznie skierować połączenie do google.com. Takie połączenie, w którym wykorzystujemy dodatkowe węzły nazywamy w terminologii Tora “obwodem” albo “łańcuchem”. Ponadto, węzły w obwodzie nie działają jak zwykłe routery, które jedynie przekazują pakiety do kolejnego adresu. Kiedy dokonuję nowego połączenia z siecią Tor, automatycznie zostają wygenerowane klucze kryptograficzne, za pomocą których dokonuję szyfrowania. Domyślnie Tor wymaga 3 pośredniczących węzłów, więc załóżmy, że tak też jest i w moim przypadku. Skoro wiem, że w połączeniu udział wezmą 3 węzły pośredniczące, używam trzech kluczy i trzy razy szyfruję wiadomość do google.com za ich pomocą, jednego po drugim. Wysyłam moją wiadomość do pierwszego węzła. Węzeł ten zna tylko jeden z moich kluczy, więc jest w stanie odszyfrować wiadomość. Możemy żargonowo powiedzieć, że zdejmuje pierwszą warstwę szyfru. Czyta tę wiadomość i zauważa, że nic nie jest w stanie z nią zrobić, bo jest nadal zaszyfrowana. Może ją jednak skierować do kolejnego węzła. Następny węzeł dokonuje ponownie tej samej operacji. Skoro zna klucz do drugiej warstwy, zdejmuje ją i znowu widzi, że nie ma dla niego żadnego sensu, bo wiadomość nadal jest zaszyfrowana. Kieruje zatem znowu wiadomość do kolejnego węzła. Trzeci już z kolei węzeł otrzymuje wiadomość, odszyfrowuje ją trzecim kluczem. Tym razem wiadomość jest już zrozumiałą i brzmi “połącz mnie z google.com”. Węzeł dokonuje połączenia i kiedy otrzyma odpowiedź, ponownie szyfruje ją swoim kluczem i przekazuje do węzła Tor, od którego wiadomość dostał wcześniej. Następny węzeł szyfruje wiadomość swoim kluczem i ogólnie cały proces zachodzi po prostu na odwrót. Ostatecznie, kiedy ja dostanę odpowiedź i będzie ona zaszyfrowana trzema kluczami, będę w stanie ją odczytać, ponieważ tylko ja posiadam je wszystkie. W całym tym procesie każdy węzeł zna tylko część obwodu. Czyli pierwszy węzeł wie tylko kim ja jestem i do kogo ma skierować wiadomość ode mnie płynącą, ale nie ma pojęcia o tym, co się znajduje w wiadomości. Nawet jeśli ją odszyfruje kluczem, który posiada, nadal pozostały dwie warstwy szyfru. Ostatni węzeł, czyli ten, który już skieruje połączenie do google.com faktycznie wie jaka strona jest odwiedzana, ale nie wie przez kogo. Wie tylko z którego węzła sam dostał takie żądanie. Ze względu na takie wielokrotne szyfrowanie oraz tworzenie obwodów nieraz przechodzących przez cały świat wytropienie konkretnego użytkownika w Internecie jest niezwykle trudnym zadaniem. Można oczywiście próbować podsłuchać ruch bezpośrednio na wyjściu z mojego laptopa i bezpośrednio między węzłem koncowym i google.com. Byłoby to dość karkołomne zadanie, gdyż węzły zawsze są dobierane losowo, ale rzeczywiście teoretycznie istnieje możliwość skorelowania tych dwóch połączeń i powiązania ich ze sobą. Trzeba jednak pamiętać, że węzły Tor nie obsługują tylko nas. Zachodzi między nimi dość duży ruch sieciowy i każdy kto taki ruch obserwuje jedyne co widzi to zaszyfrowane wiadomości. Ciężko jest powiedzieć który pakiet pochodzi od nas, ponieważ ginie w natłoku milionów pakietów na sekundę. Na dodatek nigdy nie wiadomo na jakim etapie jest dana wiadomość. Może być zaszyfrowana jeszcze tylko jedną warstwą a może być zaszyfrowana nawet kilkunastoma, jeśli użytkownik sobie tego życzy. W praktyce wytropienie kogoś korzystającego z Tora jest możliwe, ale karkołomnie trudne. Cała ta anonimowość nie jest jednak całkowicie za darmo. Ze względu na wielokrotne przekierowywanie połączeń do losowych węzłów Tor, szybkość takiego połączenia jest znacznie mniejsza i spada wraz ze wzrostem liczby węzłów w obwodzie.

Jest jednak też pewna mroczna strona trasowania cebulowego, obok której trudno przejść obojętnie. Protokół Tor pozwala nie tylko na uzyskanie anonimowości dla zwykłych użytkowników, ale także dla serwerów. Ponieważ każdy, kto pojawia się w sieci Tor łączy się za pomocą kilku węzłów pośredniczących, pozostaje nieznany. Z podobnego mechanizmu może skorzystać serwer i tak jak ja łącząc się z google.com doprowadziłem do sytuacji, w której korporacja Google nie wie kim jestem, to Tor może także sprawić, że będę mógł się połączyć z pewnym serwerem, którego ani ja, ani korporacja Google nie będzie w stanie zlokalizować. Co więcej, nawet jeśli się z tym serwerem połączę to i ten serwer nie będzie wiedział kim ja jestem. Mowa tutaj o tak zwanym Dark Web. Jednakże prawidłowa nazwa jest inna. Serwis, który jest dostępny tylko w sieci Tor powinniśmy nazywać po prostu “ukrytym serwisem” lub “ukrytą usługą”. W takich ukrytych serwisach właśnie umieszcza się treści nielegalne, handluje nielegalnymi towarami i tak dalej. Samo używanie ukrytych serwisów nie jest jednak niezgodne z prawem. Każdy może postanowić udostępnić swój własny serwer HTTP jako ukryty serwis.

Proces łączenia z ukrytym serwisem jest dość skomplikowany i jego szczegóły wykraczają daleko poza zakres tego podcastu. Ograniczmy się zatem do dwóch najistotniejszych faktów dotyczących takiego połączenia. Pierwszy fakt jest taki, że aby skorzystać z takiego ukrytego serwisu, potrzebujemy pewnego szczególnego adresu, który wpiszemy w pasek URL. Tak samo jak zawsze w pasek ten wpisujemy adresy z końcówką “com”, “pl” czy inną, tak ukryte serwisy korzystają z adresów z końcówką “onion”. Adresy takie różnią się zazwyczaj od normalnych adresów dostępnych przez DNS, ponieważ są to ciągi znaków, będące pochodnymi kluczy publicznych ukrytych serwisów. Jeśli adres z końcówką “onion” wpiszemy w pasek URL zwykłej przeglądarki, zobaczymy błąd, ponieważ DNS nie zna takiej domeny najwyższego rzędu. Tylko przeglądarka Tor Browser będzie w stanie dokonać prawidłowego połączenia. Takie adresy nie są nigdzie publikowane i nie są też dostępne w wyszukiwarkach internetowych. Drugi fakt dotyczący połączenia z ukrytą usługą jest taki, że kiedy już obwód zostaje zestawiony, pomiędzy nami a serwerem znajduje się przynajmniej 6 węzłów Tora. Wynika to z implementacji protokołu. Zarówno klient jak i serwer ukrywają się za przynajmniej trzema węzłami, odpowiedzialnymi za kolejne warstwy szyfrowania. W przypadku połączenia z ukrytą usługą mamy sumę tych węzłów, dzięki czemu ani serwer, ani klient nie wiedzą nic o drugiej stronie.

Jak widać trasowanie cebulowe jest dość kontrowersyjne. Z jednej strony technologia ta pozwala chronić prywatność użytkowników Internetu, z drugiej jednak stwarza duże pole do nadużyć. Co jakiś czas słyszymy doniesienia medialne o tym, że CIA zamknęło jakąś stronę, na której handlowano narkotykami, bronią czy prowadzono inną nielegalną działalność. Prawie za każdym razem wywołuje to poruszenie i powrót debaty o tym czy Tor nie powinien zostać zdelegalizowany. Każdy ma prawo do własnego zdania na ten temat, ja jednak przytoczę słowa jednego z twórców Tora. W 2017 roku wspomniany wcześniej Roger Dingledine wystąpił na konferencji w Berlinie. Temat konferencji brzmiał “Czy wolność przetrwa cyfrową erę”. Roger opowiadał między innymi o ukrytych usługach Tora, sparafrazuję fragment jego wypowiedzi:

“Niedawno próbowaliśmy zweryfikować jaki udział procentowy w ruchu przez Tor jest faktycznie związany z ukrytymi usługami. Okazało się, że wynosi 2-3%, czyli około 98% użytkowników korzysta z Tora po to, żeby odwiedzić zwykłe strony, takie jak Twitter, Google, Facebook a tylko kilka procent odwiedza ukryte usługi. Więc następnym razem, kiedy zobaczycie rysunek góry lodowej w artykule BBC, w którym straszą was, że znacie tylko 4% Internetu a pozostałe 96% to Dark web, zastanówcie się jaki był tego cel”.

Kategorie
Bez kategorii

Czy VPN zapewnia anonimowość?

Czy VPN zapewnia anonimowość?

Nie jest już chyba żadną nowością czy zaskoczeniem, że nie możemy się czuć anonimowi w Internecie. Nawet jeśli nasza aktywność nie jest powiązana bezpośrednio z nami poprzez identyfikatory portali społecznościowych, nadal można nas identyfikować innymi sposobami, a jest ich kilka. Nasz dostawca Internetu doskonale wie na które strony wchodziliśmy czy z jakich serwisów korzystaliśmy. Jedni z Państwa powiedzą, że nie mają nic do ukrycia, inni, że są oburzeni brakiem prywatności. Niezależnie od tego do której grupy się Państwo zaliczają, warto mieć świadomość, że istnieją technologie, które dość szybko kojarzone są z prywatnością i anonimowością. Zastanówmy się, czy faktycznie je zapewniają.

Wirtualne Sieci Prywatne, czyli VPN. Gdybyśmy zaczęli losowych ludzi spotkanych na ulicy wypytywać czym według nich jest VPN, prawdopodobnie usłyszelibyśmy takie odpowiedzi jak na przykład “taka bezpieczna sieć, która ukrywa numer IP”, “metoda łączenia się z biurem” albo “taka sieć, dzięki której można być anonimowy”. I co prawda każda z tych odpowiedzi niesie ze sobą odrobinę prawdy, to brak pełnego kontekstu sprawia, że często nabieramy błędnego wyobrażenia o tym czym tak naprawdę jest, a także czym nie jest VPN. Usystematyzujmy sobie tę wiedzę tak, żeby po wysłuchania tego odcinka każdy z Panstwa sam mógł sobie odpowiedzieć na pytanie czy VPN faktycznie zapewnia anonimowość i prywatność.

Zacznijmy od tego czym jest VPN. VPN możemy sobie wyobrazić tak naprawdę jak każdą inną usługę typu klient-serwer. Nasz komputer jest klientem a serwer to po prostu inny komputer, który oczekuje na połączenia od klientów. Serwer dodatkowo weryfikuje klientów, którzy próbują się połączyć oraz zapewnia pewne dodatkowe funkcjonalności. Z punktu widzenia aplikacji VPN, korzystamy z usługi tak samo, jak z wielu innych. Po prostu łączymy się z serwerem. Jednakże efekt takiego połączenia jest na swój sposób wyjątkowy, ponieważ uzyskujemy dzięki niemu dostęp do dodatkowej sieci. Z punktu widzenia naszego urządzenia będzie to w zasadzie taka sama sieć jak każda inna. Są jednak dwa aspekty, które czynią tę sieć wyjątkową. Po pierwsze, dodatkowa sieć, będzie mogła fizycznie przebiegać przez dowolną liczbę pośredników, jak na przykład nasz dostawca Internetu, liczne systemy autonomiczne czy urządzenia pośredniczące, ale z naszej perspektywy jako użytkownika będzie widoczna jako sieć bezpośrednio połączona z naszym urządzeniem. Innymi słowy sieć, do której się połączymy może być fizycznie od nas oddzielona wieloma sieciami, ale dla nas będzie widoczna tak, jakbyśmy do niej byli podłączeni bezpośrednio. Drugi aspekt takiego połączenia to szyfrowanie. Cała nasza aktywność, która będzie zachodzić w tym dodatkowym wirtualnym połączeniu będzie szyfrowana w obie strony komunikacji na całej drodze pomiędzy serwerem a naszym klientem. Mawiamy, że takie połączenie, które tworzy dodatkową sieć wirtualną, a w tym przypadku również szyfrowaną, jest tak zwanym “tunelem”. Mówimy na to “tunel”, ponieważ w takim tunelu jesteśmy w stanie schować naszą komunikację, nawet jeśli strony internetowe, z którymi się kontaktujemy same nie zapewniają szyfrowania. Muszę jednak zwrócić uwagę, że tunel jest obecny jedynie pomiędzy serwerem a klientem. Zatem jeśli serwer przekazuje nasze połączenie gdzieś dalej, powinniśmy pamiętać o odpowiednich środkach bezpieczeństwa, jak choćby TLS. VPN uruchamia się tam, gdzie serwer może przekazywać nasze połączenia do jakiejś sieci zaufanej. I dochodzimy de facto do meritum zastosowań VPN. VPN ma najczęściej zastosowanie jako brama umożliwiająca połączenie z biurem czy jakąś zdalną infrastrukturą.

Aby usystematyzować naszą wiedzę o VPN i lepiej zrozumieć jego działanie, warto zrozumieć ogólny mechanizm łączenia się z tą siecią. Mechanizm jest dość podobny do “uścisku dłoni”, który opisywałem w poprzednim odcinku, jednakże jest jeszcze bardziej restrykcyjny. W tym przypadku zarówno klient jak i serwer posiadają swoje własne pary kluczy kryptograficznych. Czyli każda strona posiada swój własny klucz publiczny, który udostępnia drugiej stronie, oraz własny klucz prywatny, którego trzyma tylko dla siebie. Każdy klucz z pary działa tak, że jeśli zaszyfrujemy wiadomość jednym z nich, odszyfrować ją możemy za pomocą tego drugiego klucza. Czyli jeśli zaszyfrujemy wiadomość kluczem publicznym, odczytać ją może tylko właściciel klucza prywatnego i odwrotnie. Ze względu na to, że klucza prywatnego nigdy się nie udostępnia a publiczny może być ogólnodostępny, szyfrowanie za pomocą klucza prywatnego na ogół nazywamy “podpisywaniem”. Jeśli ktoś “podpisze” daną wiadomość swoim kluczem prywatnym, ktoś w posiadaniu klucza publicznego zawsze może zweryfikować, czy wiadomość została faktycznie podpisana odpowiednim kluczem. W procesie połączenia z VPN klient i serwer wymieniają się swoimi kluczami publicznymi. To tak, jakby np. serwer wysłał mi swój klucz publiczny mówiąc “masz tu mój klucz publiczny, szyfruj nim wiadomości, które będziesz adresować do mnie, bo tylko ja zrozumiem ich treść”. Dodatkowo obie strony komunikacji VPN posiadają certyfikat “urzędu certyfikacji”, dzięki któremu mogą zweryfikować wzajemnie tożsamość. Obie strony mogą mieć pewność, że klucz publiczny, który otrzymały od drugiej strony przez Internet, faktycznie należy do tej drugiej strony a nie został przechwycony gdzieś w drodze i podmieniony na jakiś klucz spreparowany. Kiedy obie strony zweryfikują się poprawnie, klient generuje losowy ciąg znaków, który zostaje zaszyfrowany kluczem publicznym serwera. Ciąg znaków jest wykorzystany do stworzenia wspólnego klucza sesji. Od tej pory zarówno klient jak i serwer używają do szyfrowania klucza wspólnego. W trakcie takiej sesji powstaje “tunel”, przez który przechodzą wiadomości tylko i wyłącznie szyfrowane kluczem ustalonym przed chwilą. Serwer staje się także routerem, czyli każde połączenie przechodzi przez niego i w razie potrzeby zostaje transmitowane dalej. Komercyjni dostawcy VPN działają tak, że pozwalają na puszczenie całego naszego ruchu przez ich serwery. Dla tego, jeśli połączymy się z serwerem w Madrycie, możemy w przeglądarce internetowej zobaczyć, że strony internetowe są w języku Hiszpnaskim. Dzieje się tak, ponieważ serwer w Madrycie jest teraz naszym routerem a strona, z którą się łączymy automatycznie dopasowała język do IP nadawcy. Kiedy jesteśmy połączeni z takim serwerem VPN w Madrycie, nasz dostawca Internetu wie tylko tyle, że korzystamy z serwera VPN, który stoi gdzieś w Madrycie. Nie wie nic poza tym. Jednakże całą naszą komunikację zna już wtedy dostawca VPN. Czyli w efekcie po prostu sprawiliśmy, że naszą aktywność w Intenecie zna po prostu ktoś inny. Co gorsza, dostawca VPN często wymaga rejestracji, co ułatwia mu powiązanie naszej osoby z konkretną aktywnością. Anonimowości w ten sposób zdecydowanie nie zyskujemy.

A teraz powiedzmy sobie czym VPN zdecydowanie nie jest i czego nie robi. Czasem można się zetknąć z opiniami “używam VPN, jestem bezpieczny”. Samo stwierdzenie “być bezpiecznym” brzmi szczerze mówiąc trochę zabawnie w kontekście komputerów, ale spróbujmy wymienić kilka najpopularniejszych mitów. VPN nie chroni nas przed szkodliwym oprogramowaniem. Jest to tak naprawdę tylko metoda przekazywania połączen przez szyfrowany tunel. Nie ma nic wspólnego ze skanowaniem czy blokowaniem jakiegokolwiek oprogramowania. Jeśli używając VPN nawiążemy połączenie z jakąś podejrzaną stroną, lub odbierzemy mail z wirusem, efekt będzie taki sam, jakbyśmy to robili bez VPN. Kolejny mit dotyczy anonimowości. VPN jej nie zapewnia. Skoro serwer VPN odgrywa rolę routera, to nadpisuje numer IP w trakcie trasowania. Serwer docelowy z którym się połączymy za pośrednictwem VPN faktycznie ujrzy numer IP serwera VPN. Warto zadać sobie jednak pytanie – co z tego. Znaczna większość internautów nie posiada publicznego numeru IP, a za każdym razem, kiedy internauta chce się z kimś połączyć, jego IP jest wielokrotnie nadpisywane przez routery, które i tak stoją na drodze do serwerowni jego dostawcy Internetu. W takich okolicznościach serwer docelowy, przed którym chcemy ukryć IP i tak zobaczy raczej jakieś IP należące do naszego dostawcy Internetu i w ten sposób nie powiąże naszej osoby z tą aktywnością. Może natomiast powiązać naszą osobę poprzez ciasteczka, które przechowuje nasza przeglądarka internetowa. Jeśli mamy w naszej przeglądarce zapamiętane ciasteczka, które mają za zadanie identyfikację klientów, serwer docelowy doskonale będzie wiedział, czy łączymy się przez VPN czy bezpośrednio. Poza tym, jeśli postanawiamy się zalogować za pomocą swoich osobistych poręczeń (użytkownik i hasło), cała anonimowość się koczy. Ostatecznie dokonaliśmy jawnego logowania i serwer wie, że to my, niezależnie czy przez VPN czy bezpośrednio. Zetknąłem się również ze stwierdzeniem, że VPN jest nielegalny. Jest to absolutna nieprawda. Niezliczone firmy korzystają z VPN, aby udostępnić swoje zasoby pracownikom pracującym zdalnie. VPN jest też intensywnie eksploatowany jako połączenia typu “site to site” czyli pomiędzy dwoma ośrodkami oddalonymi od siebie geograficznie, ale muszącymi pozostać w stałej łączności. Być może ten stereotyp się zrodził, kiedy ktoś używał tej technologii w złych celach.

Skoro już wiemy, że VPN tak naprawdę nie zapewnia anonimowości, zastanówmy się do czego możemy go wykorzystać. Kiedy jego zastosowanie ma sens? Najbardziej naturalnym przykładem zastosowania VPN jest zdalny dostęp do sieci biura. Załóżmy, że w biurze mamy bazę plików, bazę danych, oraz kilka komputerów. Z każdym z tych komponentów chcemy mieć możliwość się połączyć zdalnie. Jeśli nie mamy VPN, każdy komponent powinien być jakoś udostępniony i widoczny w Internecie. Wiąże się to z dodatkową konfiguracją usług, routera oraz co najgorsze, z dodatkowym ryzykiem, że ktoś znajdzie podatności i je wykorzysta do zaatakowania naszej infrastruktury. W takiej sytuacji lepiej by było wszystkie usługi działające w biurze pozostawić tak, żeby działały tylko w jego obrębie, ale udostępnić serwer VPN do Internetu jako jedyna usługa dostępna z zewnątrz. Uprawniony klient VPN mógłby się zalogować, przechodząc restrykcyjny proces autoryzacji i po jej zakończeniu korzystać z usług znajdujących się w biurze dokładnie tak, jakby się w nim znajdował fizycznie. Wymagałoby to oczywiście konfiguracji serwera VPN w swoim biurze.

VPN może być również użyteczny w trakcie korzystania z jakiejś niezaufanej sieci. Zdarzyło się komuś z Państwa podłączyć się do wifi w kawiarni i nie być zapytanym o hasło? VPN jest całkiem dobrą opcją, kiedy korzystamy z sieci, której nie do koca ufamy, ponieważ na pewnym odcinku zapewnia szyfrowanie. Jeśli ktoś w kawiarni spreparował punkt dostępu Wi-Fi, a my się do niego podłączymy, możemy być podsłuchiwani. VPN zapewni nam szyfrowanie nawet jeśli połączenie będzie przekazywane w formie otwartego tekstu. Znowuż, należy pamiętać, że szyfrowanie VPN zachodzi tylko na odcinku od klienta do serwera a nie dalej. Jeśli zatem nie mamy do końca pewności czy możemy podjąć takie ryzyko, lepiej po prostu się powstrzymać.

Zatem czy warto używać VPN żeby poczuć się bardziej anonimowo i bezpiecznie w Internecie? Nie, ponieważ VPN nie został stworzony z myślą o anonimowości. Możemy oczywiście ukryć naszą komunikację przed naszym dostawcą Internetu, ale będzie ona wtedy przeniesiona na dostawcę VPN. Skoro nie ufamy dostawcy Internetu, to czemu mamy ufać dostawcy VPN? Więcej uzyskamy poprzez zmianę nawyków, na bardziej ostrożne korzystanie z Internetu. VPN może tutaj tylko posłużyć jako dodatek.

Czy warto używać VPN, żeby korzystać ze zdalnych zasobów? Jak najbardziej, VPN powstał z myślą o stworzeniu bezpiecznego tunelu, dzięki któremu możliwe jest skorzystanie z nie tylko jednego, ale wielu zasobów zdalnej sieci. W pewnym sensie upraszcza infrastruktury IT, ponieważ zamiast udostępniać wiele usług w Internecie, pozwala udostępnić jedną, która niejako umożliwia hurtowo udostępnić je wszystkie i to w dość bezpieczny sposób.

Świat IT nie znosi próżni. Kiedy powstaje potrzeba, dość szybko pojawia się i narzędzie. Jest to cecha szczególnie charakterystyczna dla Open Source. Tak naprawdę w budowaniu infrastruktur IT problemem nie jest brak narzędzi, tylko znalezienie i dobranie odpowiednich narzędzi do swoich potrzeb. VPN zdecydowanie jest świetnym narzędziem do łączenia z sieciami, w których mamy jakieś ukryte usługi. Jednakże dla zachowania anonimowości istnieją znacznie lepsze narzędzia, o których porozmawiamy w kolejnym odcinku.