Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

WinSock / "Hakerzy"? - O co chodziło autorowi / jak pisać bezpiecznie?

Ostatnio zmodyfikowano 2023-03-04 15:14
Autor Wiadomość
befejak
Temat założony przez niniejszego użytkownika
WinSock / "Hakerzy"? - O co chodziło autorowi / jak pisać bezpiecznie?
» 2023-03-04 13:25:47
Witam, udało mi się już stworzyć "szkielet" programu o którym pisałem wcześniej
 -> "Edytor Tekstu od zaplecza"

Jestem już w stanie wyświetlać mój własny tekst na ekranie, korzystam z mojej własnej "czcionki" oraz stringów.
 a do wyświetlenia używam BitBlt z WinApi.

Tak to wygląda na obrazku: https://ibb.co/pL0pwW8 ( ibb.co to strona z darmowym hostingiem obrazków )

Wiem że mój program ma jeszcze sporo niedociągnięć, jak np. "Spacja" jest jednym pełnym koloru blokiem ale jest to
 tylko kwestia czasu aby zrobić "obrazek" jak powinna wyglądać spacja itp.


Ostatnio przeglądałem Cpp0x w poszukiwaniu odpowiedzi jak wykorzystać WinApi do wysłania wiadomości na inny komputer
 Mam dwa komputery i chciałbym aby jak napiszę coś w moim edytorze tekstu na Komputerze (A) aby pojawiło się to na Komputerze (B)

Innymi słowy coś w stylu "Chatu"


Trafiłem na ten artykuł: https://cpp0x.pl/kursy/Kurs-WinAPI-C++/Zaawansowane/Winsock/371

Autor na samym końcu mówi: "W obu przypadkach zakładamy, że otrzymane dane to stringi zakończone znakiem zerowym – w przypadku "prawdziwej" aplikacji oczywiście nie możemy tak robić, bo hakerzy dobiorą nam się do skóry :-)."


Przeczytałem artykuł i dodałem nową klasę do mojego projektu, wszystko kompiluje się bez problemu ale zanim zacznę
 łączyć się z drugim komputerem ( a raczej próbować ) chciałbym wiedzieć co autor miał na myśli przez te słowa.

Nie bardzo rozumiem czemu "Hakerom" miałoby to być pomocne.

Chciałbym wiedzieć jak mógłbym napisać kod który byłby "bezpieczniejszy", szukałem kolejnego artykułu na temat WinApi
 tutaj na Cpp0x ale nic nie znalazłem :/ Win Sock wydaje się całkiem skomplikowany i zanim zacznę robić z nim coś bardziej
 zaawansowanego chciałbym mieć 100% pewności że wszystko robię dobrze.
P-180022
DejaVu
» 2023-03-04 13:30:54
W pierwszej kolejności powinieneś się skupić na tym, aby umieć programować komunikację sieciową tj. wysyłać i odbierać dane przy założeniu, że producentem i odbiorcą są Twoje aplikacje. Dopiero potem możesz zacząć uczyć się o bezpieczeństwie.

Natomiast, jeżeli chodzi o wzmiankę o bezpieczeństwie to wyobraź sobie sytuację, w której 'bezgranicznie' ufasz temu co przyjdzie przez sieć. Jeżeli zakładasz, że tekst musi być zakończony zerem, a 'haker' napisze własną aplikację, która tego zera nie będzie wysyłała to wchodzisz w obszar, w którym w najlepszym przypadku uzyskasz 'crash' aplikacji, a w najgorszym wykonają się jakieś instrukcje, które zostaną wysłane sieciowo w postaci tekstu, a memory overflow umożliwi wykonanie czegoś szkodliwego.

Ja bym Ci zapewne polecał wysyłanie wiadomości w formacie json, bowiem możesz walidować 'czy wiadomość jest poprawnym jsonem', jeżeli tak to przetwarzasz pola wiadomości. W przyszłości będziesz mógł poczytać o szyfrowaniu kanału sieciowego/wiadomości, co umożliwi Ci znacznie bezpieczniejszą komunikację. Generalnie długa droga przed Tobą. Nie da się zrozumieć całej domeny 'security' czytając jeden czy pięć postów z jakiegokolwiek forum.

Skup się na osiąganiu małych celów, a 'bezpieczeństwo' umieść na końcu listy jak to robią wszystkie firmy, aby w ogóle mieć szansę zaistnieć na rynku.
P-180023
befejak
Temat założony przez niniejszego użytkownika
» 2023-03-04 13:52:21
Obecnie wydaje mi się że nie mam nawet szans rywalizować z takim N++ czy VS.
 Piszę tą aplikację bardziej dla własnej nauki niż dla zaistnięcia na rynku.

Obecnie skupię się więc na tym aby najpierw tekst z komputera (A) pojawił się na komputerze (B)
 Wszystko kompiluje się bez problemu ale nie wykonałem jeszcze żadnego testu.


Mam tylko jedno pytanie odnośnie przykładu który podałeś DejaVu.

Jeśli dobrze rozumiem "bytesRecv = recv( mainSocket, recvbuf, 32, 0 );"
Odczytuje Max. 32 znaki z MainSocket, znaki przekazuje do recvbuf i zwraca ilość znaków w bytesRecv?

Czy nie zapobiegnie temu zwykłe sprawdzenie
if( recvbuf[ bytesrecv-1 ] != '\0' ) return false;


Cóż, najpierw poprawię czcionkę aby nie pojawiały się błędy, dodam kursor ( migającą kreskę w miejscu pisania )
 I postaram się wysłać jakiś tekst na Komputer (B), a potem poszukam jakiegoś artykułu albo
 konferencji na YT na temat bezpieczeństwa ( mam nadzieję że są jakieś - sporo ich widziałem już )
P-180024
pekfos
» 2023-03-04 15:14:09
potem poszukam jakiegoś artykułu albo konferencji na YT na temat bezpieczeństwa ( mam nadzieję że są jakieś - sporo ich widziałem już )
Tu nawet nie chodzi o bezpieczeństwo, tylko o pisanie poprawnego kodu. Jeśli robisz założenia co do danych wejściowych i w żaden sposób ich nie weryfikujesz, to jest to zwyczajny błąd. Błędne dane, złośliwe lub nie, mogą się pojawić na wejściu programu i powinieneś sobie z nimi zawsze poradzić.
Czy nie zapobiegnie temu zwykłe sprawdzenie
if( recvbuf[ bytesrecv-1 ] != '\0' ) return false;
Jeśli wcześniej sprawdziłeś że bytesrecv jest większe od zera, to taki test wystarczy. Nie powinieneś jednak polegać na tym że TCP dostarczy konkretne długości danych. Jeśli wyślesz więcej niż te 32 bajty, to dostaniesz z tego recv() tyle ile się zmieści do bufora i nie będzie zera na końcu, chociaż jest to fragment poprawnych danych. Najlepiej wywal te zero i korzystaj z długości danych którą dostajesz. Oczywiście nie przekazuj tego bufora w miejsce które oczekuje napisu zakończonego zerem, chyba że zarezerwujesz więcej miejsca i sam te zero postawisz.
Nie bardzo rozumiem czemu "Hakerom" miałoby to być pomocne.
Ta seria może być ciekawa, żeby wyrobić sobie trochę wyobraźni o tym co może pójść nie tak. Jest o tym jak można było znaleźć błąd CVE-2021-3156 w sudo i wypracować atak pozwalający na eskalację uprawnień do roota:
https://www.youtube.com/playlist?list=PLhixgUqwRTjy0gMuT4C3bmjeZjuNQyqdx
P-180025
« 1 »
  Strona 1 z 1