Cyberbezpieczeństwo

1

Witam wszystkich

Prosiłbym Was o pomoc w kwestii kolejności nauki tematów, które są niezbędne do pracy jako specjalista do spraw cyberbezpieczeństwa. Tematem interesuję się w zasadzie od niedawna, ale praktycznie każdą wolną chwilę staram się przeznaczyć na poszerzenie wiedzy w tej kwestii. Z tego co udało mi się dowiedzieć, aby zostać specjalistą od cyberbezpieczeństwa powinienem nauczyć się poniższych tematów (kolejność jest przypadkowa, nie miałem na myśli posortowania od najważniejszego punktu do najmniej ważnego):

  • nauka systemu operacyjnego Linux
  • programowanie, mam tutaj na myśli głównie język Python, mniej PHP
  • SQL i bazy danych (rzecz jasna ten temat musiałbym umieć bardzo dobrze)
  • bardziej szczegółowe działanie Windowsa
  • sieci komputerowe
  • inżynieria wsteczna
  • kryptografia
  • poznanie technologii serwerów (Windows Server i tym podobne)

Jak widać jest tych punktów dość dużo i być może jest ich jeszcze więcej. Dlatego mam prośbę do wszystkich, którzy mają styczność w pracy
z cyberbezpieczeństwem lub siedzą w tym temacie dość długo, aby pomogli mi w jakiej kolejności uczyć się wszystkich tych rzeczy. Chodzi mi
o uporządkowanie nauki tych tematów.
Na ten moment poznaję komendy Linuxa, czyli po prostu uczę się obsługi powłoki bash. (bez wchodzenia w programy służące do pentestów, bo na to jeszcze za wcześnie) Dodatkowo znam C++ i JS na poziomie podstawowym. Dodam jeszcze, że cyberbezpieczeństwo to nie jest jakiś mój "wymysł", a marzenie
i dążę do jego spełnienia. Potrzebuję tylko pomocy, żeby poukładać sobie kolejność nauki wyżej wymienionych tematów (które są bardziej ważne, a które mniej) Z góry dziękuję za każdą wartościową odpowiedź.

Pozdrawiam

2

Moim zdaniem jesteś za mało specyficzny, cyberbezpieczeńswo to szeroka dziedzina.
Co dokładnie chciałbyś robić?
Na szybko mogę wymyślić przynajmniej kilka ścieżek związanych z cyberbezpieczeństwem, a jednak kompletnie od siebie różnych.

  • Administracja sieci - głównie znajomość systemów i sieci, więc tutaj Twoja lista jest w miarę ok.
  • Szukanie dziur w oprogramowaniu - przede wszystkim programowanie niskopoziomowe + poprzedni punkt
  • Pisanie programów antywirusowych - programowanie nisko lub wysokopoziomowe, w zależności od konkretnego profilu.
  • Praca przy algorytmach szyfrujących - zapewne głównie matematyka.
0

Myślałem nad administracją sieci. To znaczy wyobrażałem sobie, że praca specjalisty od cyberbezpieczeństwa polega na zarządzaniu sieciami, a dodatkowo dochodzi do tego tzw. "legalny włam". Chodzi tutaj o zlecenie na mocy, którego można sprawdzić podatność aplikacji na ataki przestępców. Myślę jednak, że bliżej jest mi do administracji sieci.

Nie można połączyć w jedno np. dwóch ścieżek, które wymieniłeś powyżej? Np. administrację sieci z szukaniem luk w oprogramowaniu?

1

Ogólnie dobrze kombinujesz, ale SQL specjalnie nie jest potrzebny, a kryptologia to do nauczenia się, tylko na studiach.
Na początek administrowanie linuxem, sieci i python.

Polecam ci książkę Praktyczna analiza pakietów.

0
sqlka napisał(a):

Ogólnie dobrze kombinujesz, ale SQL specjalnie nie jest potrzebny, a kryptologia to tylko na studiach.
Na początek administrowanie linuxem, sieci i python.

Polecam ci książkę Praktyczna analiza pakietów.

Dziękuję za odpowiedź.

Co do książek na razie przeczytałem jedynie "Sztukę Podstępu", która oczywiście wprowadza w świat socjotechniki. Aktualnie przerabiam książkę związaną z bashem.
Po nauce basha planowałem zakupić tę książkę: https://helion.pl/ksiazki/cisza-w-sieci-michal-zalewski,bekomp.htm

Miałem też w planach naukę Pythona z darmowego PDFa: https://pl.wikibooks.org/wiki/Zanurkuj_w_Pythonie (chodzi głównie o to, żeby nie wydawać tak dużo pieniędzy na książki)

Co do porównania obu książek tej, o której napisałeś/aś i tej, którą ja planowałem zakupić do zagłębienia się w tajniki sieciowe. Która będzie lepszym rozwiązaniem pod względem efektywności edukacji?

3
  1. @sqlka racji nie ma, (no)SQLinjection to jest dość popularny błąd i jeśli ktoś chce sie bawić w pentesting to trzeba to trochę ogarniać
  2. Kryptografia tak samo -> błędów związanych z niepoprawnym użyciem krypto jest cała masa.
    Ja zamiast czytania książek zalecałbym jednak praktykę. Klepanie zadań z jakiegoś root-me.org czy podobnej strony (można ich sporo znaleźć na wechall), granie w CTFy itd. A skille będziesz nabierać niejako "przy okazji".
0
Shalom napisał(a):
  1. @sqlka racji nie ma, (no)SQLinjection to jest dość popularny błąd i jeśli ktoś chce sie bawić w pentesting to trzeba to trochę ogarniać
  2. Kryptografia tak samo -> błędów związanych z niepoprawnym użyciem krypto jest cała masa.
    Ja zamiast czytania książek zalecałbym jednak praktykę. Klepanie zadań z jakiegoś root-me.org czy podobnej strony (można ich sporo znaleźć na wechall), granie w CTFy itd. A skille będziesz nabierać niejako "przy okazji".

Co do książki, którą przytoczyłem we wcześniejszym poście to służyłaby mi ona jako poszerzenie wiedzy na temat sieci i zaspokojenie własnej ciekawości.

Praktyka oczywiście będzie wdrożona jeśli chodzi o rozwiązywanie problemów CTF-ów.

Ale zawsze mnie ciekawiło jak to jest np. z językiem programowania jeśli chodzi o praktykę. Mam takie podejście, że obawiam się pisać programy nie znając podstaw języka. Tzn chciałbym się nauczyć Pythona i większość doświadczonych programistów radzi, żebym pisał kod, ale nie znając podstaw jak się za to zabrać? Według mnie książka jest pomocna. Traktuję ją jako pomoc naukową przy rozwiązywaniu danego logicznego problemu, czyli jak zaimplementować dany kod. Książki są stworzone po to żeby pomagały właśnie w takich sytuacjach dlatego wydaję mi się, że lepiej ją mieć niż nie mieć. Dlaczego więc niektórzy odradzają książki do programowania?

16

Lista kroków do nauki cyberbezpieczeństwo:

  1. Przestać używać słowa cyber. Większość (wszyscy?) technicznych ludzi od IT security używa go najwyżej ironicznie. Poważnie, to bardzo głupio brzmi :P.

Alternatywy: bezpieczeństwo IT, bezpieczeństwo oprogramowania, bezpieczeństwo teleinformatyczne, bezpieczeństwo sieciowe i inne (lepiej brzmią po angielsku though).

  1. Zdecydowanie się co konkretnie w security chce się robić - albo chociaż byciem świadomym alternatyw.

To szeroka branża i z osób w moim pokoju można spokojnie zebrac 4 osoby z których każda ma zupełnie inne skille i robi zupełnie co innego, a wszystkie technicznie pracują w bezpieczeństwie.

To znaczy wyobrażałem sobie, że praca specjalisty od cyberbezpieczeństwa polega na zarządzaniu sieciami, a dodatkowo dochodzi do tego tzw. "legalny włam"

Przykładowo, największa sieć którą zarządzałem to mój domowy router :P. (ok, na takim 4p jest wirtualna sieć /16, ale to sie nie liczy)

Z ważniejszych nurtów:

  • Reverse Engineering - niskopoziomowa analiza programów binarnych. Najważniejsza: znajomość asemblera, niskopoziomowych języków typu c, obsługi debuggerów/disasemblerów, działania systemu operacyjnego.
  • Binary Exploitation - niskopoziomowe szukanie dziur w programach. Najważniejsze: wszystko to co na Reverse Engineering, plus fuzzowanie i inna automatyzacja, plus techniki exploitacji podatności.
  • Bezpieczeństwo aplikacji webowych - włamywanie się/naprawianie luk na stronach. Najważniejsze: znajomość protokołów sieciowych (głownie HTTP), javascriptu, modelu bezpieczeństwa web, najlepiej PHP, SQL i całej rodziny.
  • Bezpieczeństwo sieci - fancy nazwa na admina mającego pojęcie że jest coś takiego jak security :P. Najważniejsze: bycie adminem, plus dobra znajomość linuxa i jego hardeningu (i ratowania systemu w razie ataku)
  • Audyty kodu źródłowego - przeglądanie kodu źródłowego, często też ustalanie procedur/procesów/norm/takich tam. Najważniejsze: wysokopoziomowe rozumienie jak powstają błędy, dobra znajomość swojego języka, znajomość klas podatnośći i jak powstają błędy
  • Forensics - informatyka śledcza. Najważniejsze: znajomość formatów plików, orientowanie sie co może się znajdować w RAM/HDD i gdzie (najlepiej: internalsy systemu) no i procedur do obsługiwania się z nimi (typu: obsługa blokera).
  • Kryptografia - pominę bo nie o to Ci chodzi pewnie :P

I pewnie jeszcze parę rzeczy by sie dało wyróżnić. Każda z tych to spokojnie może być ścieżka kariery i nie da rady się w całości jej nauczyć.

Oczywiście nie trzeba robić jednej (/me by się podpisał pod kilkoma, bo wszystko ciekawe ;], ale nie da się robić wszystkiego.

  1. Rozpoczęcie nauki

Odnosząc moje specjalizacje do Twoich punktów:

  • nauka systemu operacyjnego Linux - tylko dla admina w zasadzie ściśle potrzebne. Ale dobra znajomość obsługi linuxa z punktu widzenia użytkownika to coś jak umiejętność czytania bez mówienia na głos u dorosłego - da się jakoś żyć bez, ale bardzo głupio to wygląda. Szczególnie że to nic trudnego ;].

  • programowanie, mam tutaj na myśli głównie język Python, mniej PHP - umiejętnośc skryptowania w czymś się przydaje w zasadzie zawsze. No i python to dobry wybór niezależnie czy dla programisty czy do security. Polecam niezależnie od wyboru drogi ;].

  • SQL i bazy danych (rzecz jasna ten temat musiałbym umieć bardzo dobrze) - z tym bardzo dobrze to bym nie przesadzał. Naprawdę ważne tylko dla ludzi od web security (i trochę dla admina ofc).

  • Bardziej szczegółowe działanie Windowsa - niewiele mówiący punkt ;]. Zupełnie inne rzeczy są ciekawe z punktu widzenia forensics, a inne dla reverse engineera, a inne dla admina. O ile nie planujesz pisać własnego rootkita (spoiler: obecnie bardzo trudne, oraz i tak nie warto) to raczej nie szedłbym w to na początku. Oczywiście podstawy jak procesy, wątki, pamięc wirtualna to podstawa, ale no.

  • sieci komputerowe - dobrze wiedzieć jak działają sieci, ale nie przesadzałbym na razie. Przy web app security to jest zbyt niskopoziomowe, a przy RE zazwyczaj nieważne.

  • inżynieria wsteczna - tylko dla inżyniera wstecznego

  • kryptografia - tylko dla kryptografa

  • poznanie technologii serwerów (Windows Server i tym podobne) - po co O_o. Chyba że chesz być adminem Windows Serverów, ale nie polecam.

(podaj która specjalizacja Cię interesuje to napiszę więcej)

3
  1. "Cyberbezpieczeństwo" to taki popularny, trochę marketingowy, termin przydatny dla użytkowników portali społecznościowych.
    Można to postudiować w różnym zakresie i niektórzy nawet na tym zarabiają. No w sumie też ciekawy, ale chyba nie tego chcesz się uczyć.

Wg mnie obejmuje:

  • kontrolę prywatności (transmisji, publikacji)
  • phishing
  • ochronę antywirusową
  • ochronę dostępu (np. 2-krokową)
  • ochronę tożsamości
  • ransomware

Można o tym pisać i się doktoryzować. Ale wg mnie mało ambitne - przynajmniej w zakresie popularnonaukowym.

  1. Kolejny obszar to bezpieczeństwo aplikacji. Tutaj potrzebna jest umiejętność programowania:
  • inżynieria wsteczna
  • exploity
  • bezpieczeństwo aplikacji webowych
  • itd - to wszystko co powinno interesować programistę przynajmniej na poziomie podstawowym
  1. Kolejny obszar to bezpieczeństwo systemów informatycznych w firmie. Zakres dla "security officer'a".
  • kontrola dostępu, autoryzacje, uwierzytelnianie
  • fizyczne sposoby kontroli dostępu (karty, tokeny, klucze, zamki czasowe itd)
  • gwarancja dostępności systemów - kopie zapasowe, high-availability
  • monitoring, hardening, strategia aktualizacji i śledzenia błędów bezpieczeństwa
  • logowanie: rotacja, archiwizacja, kontrola dokładności
  • pod-systemy prewencyjne: śledzenie integralności systemu, auto-lockouty
  • ogólnie bezpieczeństwo: aplikacji, systemu operacyjnego, sieci
  1. (ew.) podstawy teoretyczne: algorytmy i protokoły, kryptografia, teoria liczb, algebra itd.

Tu masz przykładowy link do studiów podyplomowych: http://www.agh.edu.pl/ksztalcenie/oferta-ksztalcenia/studia-podyplomowe-kursy-doksztalcajace-i-szkolenia/cyberbezpieczenstwo/
Kiedyś u klienta spotkałem gościa z zakresu (3). Dla mnie trochę taki BHP-owiec po właśnie takim rocznym kursie. Może wiedział więcej, może mniej.
Programowanie to zależy który z tych zakresów Cię interesuje. Python przyda się w (2) i (4). W (1) i (3) wg mnie nie musisz umieć programować.

0

Dziękuję obu panom za obszerne odpowiedzi.

Widzę, że powtarza się temat wyboru specjalizacji. Przemyślałem sprawę i wybrałem, że moim celem byłoby opanowanie nurtu, który zwie się Binary exploatation. Dodam, że wybór tej specjalizacji nie przyszedł od tak. Zawsze chciałem zgłębiać tajniki systemów operacyjnych i interesowała mnie analiza plików pod kątem niskopoziomowym, nie wiedziałem tylko jak nazwać taką specjalizację spod szerokiej gamy nurtów wywodzących się z jak się dowiedziałem "ogólnej nazwy" ITSecurity.

Niskopoziomowe sprawy interesują chyba większość osób, które zdecydowały się na łączenie swojego życia zawodowego z informatyką. Ja mam jednak ten problem, że lekko obawiam się "wejścia" w naukę tych języków niskopoziomowych. Słyszałem, że są dość trudne do opanowania i tutaj mam prośbę do @msm, abyś bardziej szczegółowo opisał temat Binary exploatation. Zależy mi szczególnie na tym jak zacząć uczyć się tego niełatwego i dość obszernego tematu tak żeby mieć "dobry start". Jeśli dostanę pomoc odnośnie nauki tegoż tematu zacznę działać. Dodam, że mam problem z tym 'jak zacząć naukę', a nie
z tym, że 'mam się uczyć', żeby nikt tego nie zrozumiał źle. :)

0

Spróbuj swoich sił tutaj, fajne zadanka :)

https://pwning2016.p4.team/

0

http://overthewire.org/wargames/
oraz zagadnienia z certyfikatu CISSP

0

Chodzi mi głównie o naukę języków takich jak Assembler/C/Python w praktyce, ale w odniesieniu tylko do Binary Exploatation. Nie wiem jak się za to zabrać, bo normalnie programista klepie kod i wymyśla projekty w ten sposób ucząc się języka. Tutaj myślę, że mam trudniej wymyślić coś w czym praktycznie mógłbym uczyć się języków niskopoziomowych. (wiem, że Python jest wysokopoziomowy, jego teraz nie wliczałem) Dlatego kieruję się do osób, które mają doświadczenie w temacie Software Security. Potrzebuję pomysłów na rozpoczęcie nauki wyżej wymienionych języków, tak żeby nauka była jak najbardziej efektywna pod względem kierunku w jakim chcę się rozwijać.

0

@Shizzer: Wiem, że binary exploitation jest najlepsze, ale niestety najtrudniejsze.

Ja w życiu nie znalazłem żadnego błędu, strasznie trudne i coraz bezpieczniejsze aplikacje.
Ale z webówki to od groma, tam łatwiej takie błędy wychaczyć, ale i tak coraz trudniej.

A błędy jak już się znajdą, to są naprawdę zaawansowane.

Więc tak jak ci już pisałem: https://pwning2016.p4.team/

Tu masz zadanko z re za 50 punktów banalne do rozwiązania nawet bez umiejętności.
Te za 100 pkt trochę wymaga analizy.

A te za 150pkt to exploitacja.

Masz jeszcze kilka błędów bezpieczeństwa z web, dość prostych.
Z krypto też powinieneś sobie poradzić.

Powinieneś ogarnia różne opcje, bo umknie ci dużo interesujących błędów.
I też robotę łatwiej znajdziesz jak będziesz wymiatał na ctfach, a tam błędy są celowo umieszczone, bo bez sensu tak by było.

Na start mi się wydaje najlepsze, zadania fajne potem można coś trudniejszego.

1

Ponieważ zawodowo obraca się w tych klimatach to uważam, że w Cyberbezpieczeństwo trzeba wchodzić z dużym doświadczeniem zawodowym. Popracuj najpierw trochę jako administrator i programista i dopiero wtedy zabieraj się za cyberbezpieczeństwo.

0

Mam 17 lat więc czasu na naukę mam dużo. Dlatego usiłuję uzyskać odpowiedź odnośnie nauki Assemblera/C/Pythona. Chcę się dowiedzieć jakie projekty praktyczne pisać żeby ukierunkowywać się na Binary Exploatation?

Oczywiście do nauki języków dochodzą zadania z CTF-ów i Overthewire dlatego dziękuję wszystkim za linki.

1

Słyszałem, że są dość trudne do opanowania i tutaj mam prośbę do @msm, abyś bardziej szczegółowo opisał temat Binary exploatation

Oho, ambitnie.

Przede wszystkim, to dość raczej temat. Z jednej strony, wielu najzdolniejszych i najlepszych ludzi w branży w tym siedzi (prywatnie jestem fanem naszego rodaka j00ru). Z drugiej strony, zapotrzebowanie nie jest aż takie duże, więc ciężko się przebić.

Temat jest trudny, bo wcześniej trzeba znać chociaż podstawy Reverse Engineeringu (patrz: http://gynvael.coldwind.pl/?lang=en&id=664), a później dopiero da się nauczyć podstaw exploitacji (na przykład z zadań CTFowych, albo stron z zadaniami.

W dodatku czasy kiedy exploity pisało się reversując ręcznie programy powoli mijają - teraz większość błędów znajduje się przy pomocy fuzzera (np. AFL) i dużej mocy obliczeniowej. Polecam prezentację znajomego z pracy który zna się na tym bardziej niż ja:

(przekazałem Kamilowi link do tematu swoją drogą, może będzie miał coś ciekawego do powiedzenia).

PS. A poza tym, w sumie Pijany Lew dał dobrą radę:

https://pwning2016.p4.team/

Na tej stronie jest kilka zadań z których większość jest w miarę prosta (w porównaniu do typowych CTFowych). A rozwiązanie ich pozwoli na "liznięcie" kilku różnych typów sectity i, być może, zainteresowanie się czymś konkretnie.

Inna opcja, bez autopromocji, to ofc. np wspomniane http://overthewire.org/wargames/, https://www.tdhack.com/, enigmagroup, albo jedna z wielu stron z zadaniami tego typu.

3

@msm mnie zatriggerował, więc parę rzeczy ode mnie:

Warto również brać udział w niektórych konferencjach - bardzo wartościowe i za darmo jest Security BSides, które jest za tydzień :)

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.