Jak uczyć się „hakować” aplikacje… ?

By | 15 lutego 2018

Jak wspomaniałem w jednym z poprzednim wpisów oraz na stronie „O mnie„, obecnie zajmuję się szeroko pojętym bezpieczeństwem aplikacji. Nie zawsze tak było. Przez pronad 13 lat byłem programistą i pisałem różne aplikacje, w wielu różnych językach. Czasami zdarzało się, że w jednym czasie wykorzystywałem 4: PHP, SQL, Java, Visual Basic (był taki czas w 2005 roku 😉 ). Rozwijałem swoje umiejętności jako programista i projektant oprogramowania. Zacząłem myśleć na poważnie o zostaniu architektem i w tym kierunku się rozwijałem.
W pewnym jednak momencie szło mi to jednak coraz bardziej opornie – miałem wrażenie, że to staje sie nudne. I wtedy zostałem dołączony do zespołu, który miał doraźnie zajmować się opiniowaniem aplikacji pod kątem ich bezpieczeństwa. Najpierw jako programista, a z czasem programista-bezpiecznik 😉 . Spodobało mi się. W pewnym momencie postanowiłem zmienić kierunek swojej kariery i skierowałem ją na tory bezpieczeństwa. Było to mniej więcej 3 lata temu. Zgrało się to ze zmianą pracy, gdzie zostałem zatrudniony jako specjalista od bezpieczeństwa aplikacji webowych i osoba, która, jako były programista, łatwiej dogada się z innymi programistami, gdy będzie im trzeba tłumaczyć zawiłości bezpieczeństwa tworzonych przez nich rozwiązań.

Dojście do tego punktu wymagało ode mnie sporo nauki, gdyż bezpieczne programowanie wymaga trochę innej wiedzy, niż to co wiedziałem do tej pory. Zacząłem sporo czytać. Pierwszą książką o bezpieczeństwie była „Splątana sieć” Michała Zalewskiego – guru bezpieczeństwa przeglądarek. Kolejna to „The Web Application Hacker’s Handbook” i „The Browser Hacker’s Handbook” polecone przez Piotra Koniecznego na szkoleniu o testowaniu aplikacji webowych (polecam szkolenie!!!!). Wtedy pierwszy raz spotkałem się z Kali Linux i labami, gdzie można uczyć się hackować aplikacje w praktyce.

Praktyka, to najlepszy sposób aby uczyć się o bezpieczeństwie. Z resztą ogólnie praktyka to najlepszy sposób nauki. Zapisałem się do kilku portali, które oferują zadania z zakresu bezpieczeństwa, ale dwa polecam najbardziej: Rozwal.to od sekrurak.pl i hack.me . To na początek. Tutaj można nauczyć się podstaw wyszukiwania podatności i ich exploitowania. Zadania ułożone mają różny stopień trudności i dotyczą różnych aspektów bezpieczeństwa, więc każdy znajdzie coś dla siebie. Rozwiązując zadania trzeba poszukać jakiś niuansów w programowaniu w danym języku (np. proglemy z porównaniami zmiennych w PHP), dzięki czemu uczymy się też elementów danego języka bądź dokładniej poznajemy jak działają pewne oczywiste dla programisty funkcje języka.

Jakiś czas temu zainteresowałem się „wyzwaniami” na portalu hackerrank.com, ale na razie leży nieruszane, choć zadania wyglądają ciekawie.

Jeśli chodzi o laby, to mam w swoim Backlog’u zadanie stworzenia swojego własnego laboratorium z dwoma maszynami (jeden Linux i jeden Windows). Niestety ostatnio trochę brak mi na to czasu, ale na 100% to zrobię. Jakiś czas temu zacząłem też myśleć o zadaniach z konkursów CTF (Capture The Flag). Tam można nauczyć się chyba najwięcej w dość krótkim czasie, ale wymaga to sporych umejętności i wolnego czasu w weekendy (choć jeśli zadania są dostępne, to także po zakończeniu konkursu można z nimi powalczyć). Nie mam własnej drużyny oraz do żadnej nie należę, ale aby rozwiązywać zadania wcale nie musimy być wieloosobowym zespołem. Chodzi przecież o naukę, a nie nagrody. Przynajmniej na razie 😉

Po ponad 3 latach pracy z bezpieczeństwem zacząłem tez myśleć certyfikacji, a co za tym idzie o szkoleniach pod konkretne certyfikaty. Tutaj nie mam doświadczenia i na razie zbieram tylko opinie na temat różnych ścieżek i staram się wybrać najbardziej korzystną ofertę. Jednym z kryteriów wyboru jest to, czy dane szkolenie udostępnia laboratorium do nauki. Wszystko staram się podporządkować praktyce.

Na razie tyle. W pewnym momencie pewnie więcej napiszę o certyfikacji i możliwych ścieżkach i organizacjach je oferujących. Tymczasem do poczytania.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *