C++ kierunki rozwoju oraz związek z security

0

Hej,

Ostatnio zastanawiałem się nad ścieżką mojego rozwoju. Bardzo lubię programować w C++ i Pythonie. Wciągnęła mnie też bardzo branża bezpieczeństwa. Szczególnie RE i ogólnie programowanie niskopoziomowe. Stąd od niedawna czerpię dużo frajdy z uczenia się Assembly. Słyszałem, że zostać pentesterem jest dość ciężko. Pomyślałem sobie, że skoro i tak muszę znać bardzo dobrze język C++ to czemu by się nie przyłożyć, żeby dostać pracę na stażu tym bardziej, że programista C++ jak najbardziej by mi odpowiadał. W związku z tym mam do Was kilka pytań. Jakie biblioteki, albo jakie książki polecilibyście mi przeczytać odnośnie bezpieczeństwa komputerowego ? (chodzi mi o C++, a nie bezpieczeństwo aplikacji webowych). Jakie według Was są kierunki rozwoju w C++ np embeded itd i jakich frameworków/bibliotek się używa w każdej z tych specjalizacji? I jeszcze jedno pytanie. Myślę trochę nad gamedevem, a aplikacjami desktopowymi. Zastanawiam się czy jakbym już miał np zacząć programować w gamedev to lepiej zacząć w czymś niskopoziomowym bardziej np. OpenGL lub Vulkan czy lecieć z Unreal Engine?

2

Staraj się koncentrować na pojedynczej specjalności.

1 Do RE, dobrym punktem wejścia są ćwiczenia. Ściągnij sobie małe programy z ograniczonymi funkcjami (wersje demo?) i postaraj się je odblokować, modyfikując kod lub dodać swoje funkcje.
Najprościej to wedle mojej opinii, będzie stary windows + IDA + dobry hexedytor.
2 Pentesty - dobrym / najprostszym przedwstępem jest poczytanie książek o metasploicie i starym standardzie PTES. Na dzisiaj jest mało prawdopodobne że unikniesz Web'a przy czymś takim.
Czasami są oferty pracy do zespołów pentesterów. Prawie zawsze lokalnie co oznacza, że w większym mieście łatwiej.
3 Co masz na myśli bezpieczeństwo komputerowe?
4 Z mojego punktu widzenia - Embedded - to zależy. Czasem jest attiny i kod w asm (bo w C się nie mieści) czyli AVR,PIC, masz też z armów STM z różnymi bibliotekami, może być Altera, LPC nawet Snapdragony. Tutaj raczej nie unikniesz ciągłej nauki.
Procesor/płytka prawie zawsze wybierany/a jest cenowo. A biblioteki do nich często różne.
System i biblioteki w procesorach ARM, to bardzo często linux, ponieważ można konfigurować _SC_CLK_TCK(w czasie kompilacji jądra) oraz wybierać sposób priorytetowania procesów w sposób dynamiczny. I robi nam się real time.
Za to rzadko się spotykam z używaniem gotowych rozwiązań, takich jak Arduino,malinka, czy odroid. (własne trzeba certyfikować, ale i tak wychodzi taniej).
5 Gamedev jest mi obcy.
Możesz nauczyć się OpenGL 2.0> (o ile dobrze pamiętam), to zobaczysz jak można wykonywać swój kod na karcie graficznej, czym są vertexy i shadery oraz jak działają pozostałe funkcje karty.

0

Przede wszystkim dziękuje za obszerną wypowiedź. Jeżeli chodzi o punkt 1 to na razie jeszcze wstrzymam się z RE i spróbuję potworzyć trochę większe programy w Assembly. Co do następnego punktu to planowałem właśnie kupić coś w tym rodzaju. Faktycznie tutaj nie sprecyzowałem chodziło mi o książki zajmujące się bezpieczeństwem komputerowym i korzystające z języka C++. Objaśniające jak np. można używać C++ w security.
Sporo tego nawet w embeded. Ale przejrzę to wszystko co mi poleciłeś. Kiedyś właśnie robiłem na Arduino, ale to chyba bardziej taki wstęp do pracy w embeded czyli budujący myślenie (jak to działa ? itd), żeby potem z większą świadomością zabrać się na mikrokontrolery. Rozumiem w sumie faktycznie dobrze zacząć od OpenGL, bo potem można mieć bardziej szersze i świadome spojrzenie na to jak to wszystko działa. A co sądzisz o QT? Warto się uczyć?

4

Jeżeli chcesz się rozwijać w kierunku security by finalnie zajmować się tym zawodowo to ograniczanie się do C++ jest błędem. Język to tylko narzędzie, nie ograniczaj się do jednego, szczególnie w security.

2

@lu7x00 arduino traktuję jako zabawkę. Czasami jednak, jest możliwość zobaczenia czegoś profesjonalnego na podstawie tego zestawu.
Arduino stosuję, gdy chcę wykonać coś bardzo szybko i nie interesują mnie pozostałe rzeczy.

Książki tak jak napisał @several .
Z tego co mi się kojarzy (coś blisko c++):

  1. Hacking: The Art of Exploitation - jon ericksona. (C/perl - nie wiem czy dobrze pamietam) - najlepiej tą pierwszą wersję.
  2. The Antivirus Hacker’s Handbook - Joxean Koret. Taka do poduchy. Coś mi się kojarzy, że było tam trochę c++ (ale pewny nie jestem).

Kilka lat temu korzystałem z QT wersji 4/5. W firmie z wykupioną licencją do użytku komercyjnego. Zrezygnowaliśmy po pewnym czasie ze względu na pewne denerwujące błędy (coś było z QTestem,QXml i jeszcze kilkoma rzeczami, dokładnie nie pamiętam). Możliwe, że od tamtego momentu wiele się poprawiło, ale nie jestem na bieżąco.
Hobbystycznie coś tam czasem napiszę na szybko w QTCreatorze :)

0

Dzięki bardzo. Na pewno skorzystam z tych książek. Przede wszystkim z tej pierwszej (Hacking: The Art of Exploitation)

2

Niskopoziomowe security to kierunek, w którym też się staram rozwijać i według mnie, żeby być w tym naprawdę dobrym to trzeba wiele czasu spędzić na grzebaniu we wnętrzach programów. Tzn. musisz zwracać uwagę na szczegóły związane z tym jak działa OS w kwestii obsługi pamięci, przydzielania jej dla procesów, jak działa procesor itp.

Piszę to nadal z perspektywy ucznia, nie eksperta, ale mi dużo pomogło pisanie mniejszych programów w Asmie. @Gynvael Coldwind pisał kiedyś, żeby w Asmie pisać mniejsze programy i analizować jak się zachowują - to jest świetna praktyka. Twórz programy, odpal jakieś gdb pod Linuxem albo OllyDbg pod Windowsem i analizuj jak zachowuje się stos przy wywoływaniu funkcji, heap przy alokacji i zwalnianiu obiektów.

Jak już będziesz w tym mniej więcej obyty to możesz zabrać się za poznawanie wektorów ataków typu Stack based Buffer Overflow, Format String, potem przechodzisz do tego jak działa ASLR i ogólne zabezpieczenia OS'ów, a potem jak je obchodzić. Przede wszystkim to co przeczytasz o atakach/obronie maszyn stosuj w praktyce i podglądaj wszystko pod debugerem. Nie możesz sobie pozwolić na to, żeby używać exploitów z bazy Metasploita i nie rozumieć dlaczego działają. Jak chcesz być dobrym w low-level security musisz szczegółowo znać swój target ataku, bo tylko tak znajdziesz w nim słabsze strony. Im lepiej coś znasz tym większe szanse na udany atak/obronę.

Na koniec polecam https://picoctf.com/. Jakbyś się gdzieś zatrzymał to na necie jest bardzo dużo writeupów zadań także picoctf jest świetnym źródłem nauki tych kategorii security, które Cię interesują. :)

1

root-me.org ciekawa strona podstawowych exploitów i podatności nauki.

2
Shizzer napisał(a):

Piszę to nadal z perspektywy ucznia, nie eksperta, ale mi dużo pomogło pisanie mniejszych programów w Asmie. @Gynvael Coldwind pisał kiedyś, żeby w Asmie pisać mniejsze programy i analizować jak się zachowują - to jest świetna praktyka. Twórz programy, odpal jakieś gdb pod Linuxem albo OllyDbg pod Windowsem i analizuj jak zachowuje się stos przy wywoływaniu funkcji, heap przy alokacji i zwalnianiu obiektów.

Wszystko fajnie, jednak dlaczego polecasz coś (mowa o OllyDbg) co wydaje się być porzucone od dawna. Są o wiele lepsze i utrzymywane projekty służące do tego celu jak opensource'owy x64dbg. Ze swojej strony do nauki RE polecałbym wzięcie na warsztat Crackmes (zacząć od tych najłatwiejszych, potem iść w stronę coraz bardziej trudnych). Niektóre z nich są naprawdę fajne i zaskakujące i sporo można się nauczyć. A na start nadają się idealnie.

0

@Shizzer dzięki za rady. No właśnie miałem taki plan przymierzać się do analizy programów, bo cienko u mnie z tym. Zrobienie zadania z RE bardzo łatwego zajęło mi chyba z pół godziny. Dzięki za informację tak się składa, że szukałem czegoś co będzie pokazywało działanie stosu, bo wiele rzeczy robię na stosie i trudno mi je zweryfikować. Szczególnie kiedy są to liczby. Tak się składa, że mam dwa podręczniki do RE, ale strasznie ciężko mi idzie ze względu na słabą znajomość Assembly.
@ Szalony Programista a to wiem korzystałem przy webowce z root-me

0

No te crackmes wygląda bardzo fajnie. Spróbuje coś zrobić z tego, ale pewnie będę potrzebował się podszkolić z Assembly

1

Moim zdaniem to jeśli chcesz poważnie interesować się RE, to assembler jest podstawą. Niestety dekompilatory nie są na wysokim poziomie, więc możesz je sobie darować.

Cracmes ma ten plus, że zazwyczaj nie trzeba się przedzierać przez megabajty zdesaseblowanego kodu. Możesz zacząć od najprostszych pisanych w czystym WinApi których exek waży dosłownie 10KB, tam łatwo znajdziesz interesujący Cię fragment kodu. Później spróbuj łamać crackme z zabezpieczeniami. Wbrew pozorom takie programy potrafią być przydatne, ponieważ w podobny sposób mogą być zabezpieczone różnego rodzaju wirusy przed analizą. Nie mniej jednak przygotuj się na ciężką drogę i wiele nauki.

2

Minął rok. Pobawiłem się bezpieczeństem i bardzo mi się podoba. Aktualnie mam dwie dorywcze prace w Security. Dziękuje wszystkim za pomoc

1 użytkowników online, w tym zalogowanych: 0, gości: 1