Aplikacje, systemy i sieci są narażone na różnorodne ataki cybernetyczne, takie jak łamanie haseł, ataki słownikowe i wyszukiwanie wszechobecne.
W przeszłości firmy nie oczekiwały od programistów dogłębnej wiedzy na temat zagadnień bezpieczeństwa, ponieważ za to odpowiadali eksperci ds. bezpieczeństwa. Jednak dzisiaj jednym z najważniejszych zadań programistów jest oczyszczenie kodu z typowych błędów. Ogólnie rzecz biorąc, aplikacje napotykają dwa główne problemy związane z bezpieczeństwem.
Pierwszym problemem są ukryte luki w frameworkach, bibliotekach lub narzędziach używanych przez programistów do tworzenia oprogramowania.
Drugim problemem jest słabe kodowanie, które czyni oprogramowanie podatnym na cyberataki.
To tylko niektóre z programów shareware służących do wyznaczania celów, z których możesz skorzystać.
Obecnie większość ataków na infrastrukturę i sieci przedsiębiorstw jest realizowana poprzez ukryte luki w aplikacjach systemów klienckich lub serwerowych.
Dlatego jako programista istotne jest posiadanie pełnych informacji o wektorach ataków, aby nieumyślnie nie stworzyć dostępu hakerom podczas kodowania programów.
Aplikacje i związane z nimi wyzwania
Codzienne aplikacje są narażone na wiele rodzajów cyberataków. Hakerzy, podobnie jak zwykli użytkownicy, instalują i uruchamiają oprogramowanie, sprawdzają jego działanie, a następnie szukają luk w oprogramowaniu. Ponieważ profesjonalni hakerzy są ekspertami w programowaniu, mają dogłębną wiedzę na temat koncepcji programowania i sposobów wykorzystywania luk w zabezpieczeniach.
Nawigacja w katalogu
Twórcy aplikacji internetowych i administratorzy sieci zawsze obawiają się ataków na Directory Traversal. W tym ataku hakerzy oceniają system plików serwera WWW, aby móc wstrzykiwać złośliwe polecenia do wiadomości HTTP. W tej technice haker próbuje kilka razy przetestować adres internetowy, aby dostać się do struktury katalogów internetowych serwera.
Po wejściu do katalogu cofa się kilka razy, aby dotrzeć do katalogu systemu operacyjnego i wykonać polecenia na poziomie aktywnego systemu. Aby przeciwdziałać atakom polegającym na przeszukiwaniu katalogów, należy upewnić się, że systemy są zaktualizowane za pomocą poprawek zabezpieczeń i szukać listy blokowanych znanych znaków w adresach URL.
Ataki wtryskowe
Największym problemem, z jakim borykają się aplikacje, są ataki typu „wstrzykiwanie”. Ataki polegające na wstrzyknięciu występują z różnych powodów. Może to na przykład wystarczyć do wyodrębnienia informacji. W tym przypadku oprogramowanie aplikacyjne służy jako pośrednik w ataku na bazę danych. Hakerzy wykorzystują tę technikę do wstawiania różnego rodzaju kodu programowego zamiast danych, na które oprogramowanie czeka. Ataki wtryskowe dzielą się na następujące typy.
Wstrzyknięcie SQL
Programiści używają strukturalnego języka zapytań (SQL) do implementowania okien dialogowych w bazach danych. Aplikacje internetowe i korporacyjne używają strukturalnego języka zapytań do pobierania danych z baz danych. Prawie wszyscy eksperci baz danych i programiści WWW są zaniepokojeni tym atakiem.
Na przykład możesz mieć oprogramowanie biurowe przechowujące informacje w bazie danych. Program używa języka zapytań do pobierania tych danych z baz danych i wyświetlania informacji. W atakach polegających na wstrzykiwaniu syntetycznego zapytania haker wykorzystuje polecenia tego języka do manipulowania danymi w bazie danych.
W tej metodzie haker wprowadza do programu standardowy kod języka zapytań i dba o to, aby program wysłał powyższe polecenia do bazy danych.
Haker wprowadza instrukcje SQL w miejscu, którego nie spodziewają się programiści lub administratorzy baz danych, np. w polach nazwy użytkownika i hasła na stronie logowania.
Rysunek 1 przedstawia przykład ataku polegającego na wstrzyknięciu kodu SQL. Na tym rysunku zobaczysz stronę logowania oczekującą na otrzymanie nazwy użytkownika i hasła. Kiedy użytkownik wprowadza informacje w tych polach, informacje te są umieszczane w instrukcjach SQL, dzięki czemu użytkownik może uwierzytelnić się i zalogować.
Poleceniem używanym w tym celu jest polecenieselect, które służy do wyszukiwania informacji w bazie danych. Gdy użytkownik kliknie przycisk LOGON, polecenie Choose próbuje znaleźć nazwę użytkownika i hasło wpisane w programie.
Rysunek 1
W powyższym przykładzie haker musi upewnić się, że po uruchomieniu okna dialogowego uzyska pożądany rezultat, ponieważ nie zna prawidłowej nazwy użytkownika i hasła, więc próbuje wprowadzić kod SQL jako hasło, aby móc się zalogować. Na przykład jedną z powszechnych technik stosowanych w tym polu jest wstawienie poleceń bazy danych w polu hasła, aby pomyślnie przeprowadzić atak polegający na wstrzyknięciu kodu SQL:
pass” lub 1=1 —
Słowo pass to coś, co haker wpisuje jako swoje hasło, które nie zadziała, ponieważ haker nie posiada konta w aplikacji. Instrukcja 1 = 1 jest używana jako warunek w instrukcji Select, ale nie jest testowana jako rzeczywiste hasło.
Punktem krytycznym jest znak „” używany do zamknięcia polecenia wyboru. Symbole „-” na końcu tego polecenia oznaczają komentarz i zwykle nie stanowią problemu. Jest jednak pewien subtelny punkt. W kodzie głównym programista używa znaku „ „” w rzeczywistym poleceniu wyboru, gdzie znak ten określa koniec tego polecenia.
Teraz dwa znaki „-”, które w prawdziwym świecie są używane tylko przez programistów do publikowania komentarzy, ignorują kontynuację oryginalnego polecenia Select w górnym wierszu. Dlatego w przypadku złego kodowania technika ta umożliwia hakerowi zalogowanie się.
Kolejnym poważnym wyzwaniem stojącym przed programistami baz danych jest zmiana przez hakerów ceny towarów w sklepie internetowym. Poniższe polecenie umożliwia zalogowanie się, ale wykonuje również zaktualizowaną frazę, która zmienia cenę wszystkich książek z tabelą tytułową na 50 centów:
pass” lub 1=1; zaktualizuj tytuły, ustaw cenę = 0,5 —
Innym ryzykiem związanym z aplikacjami jest wywoływanie poleceń systemu operacyjnego lub serwerów baz danych w celu utworzenia kont użytkowników. Na przykład poniższe polecenie jest wewnętrzną procedurą składowaną w
Przywołanie SQL Server umożliwia twórcy bazy danych wywołanie polecenia systemu operacyjnego w celu zebrania informacji. W powyższym przykładzie haker tworzy w systemie Windows swoje konto o nazwie SQL, aby móc za jego pomocą zalogować się do docelowej witryny. Na szczęście tej techniki nie można używać od wersji SQL Server 2005, ponieważ procedura jest przechowywana
Funkcja xp_cmdshell jest domyślnie wyłączona i z tego powodu nie powinna być włączana.
pass’ ;exec master ..xp_cmdshell „użytkownik sieciowy z hasła SQL /add” –
Poniższe polecenie wykorzystuje tę samą technikę co poprzednio, aby dodać konto do grupy administratorów systemu lokalnego. Dzięki temu haker otrzyma tylne drzwi z pełnymi możliwościami zarządzania. Techniki tej można również użyć, gdy włączona jest funkcja xp_cmdshell, podczas gdy w nowszych wersjach SQL Server jest ona domyślnie wyłączona.
pass’ ;exec master ..xp_cmdshell „administratorzy grup lokalnych sieci z SQL /add” –
Jak możemy zapobiec pomyślnej realizacji ataków polegających na wstrzykiwaniu SQL?
Jak wspomniano, oprogramowanie bezpieczeństwo jest jednym z głównych zadań programistów, ponieważ eksperci ds. bezpieczeństwa mają ograniczone możliwości poradzenia sobie z tym modelem ataku. Dlatego, aby chronić aplikacje oparte na danych, należy wziąć pod uwagę następujące kwestie:
- Oczyszczanie: Programiści muszą zidentyfikować i wyczyścić wszelkie dane wejściowe użytkownika, które mogą wykonać kod SQL, używając wzorców, takich jak wyrażenia regularne. Na przykład muszą usunąć średnik i dwa myślniki z danych wejściowych.
- Walidacja: programiści muszą zweryfikować dane wejściowe i upewnić się, że liczba znaków, które można zaimportować, oraz rodzaj używanych znaków są ograniczone.
- Zapytania parametryczne: Stosowanie zapytań parametrycznych oznacza, że dane wejściowe nie są wysyłane bezpośrednio do instrukcji SQL, lecz wysyłane jako parametr do polecenia i akceptowane są tylko określone wartości. Jeżeli wartość parametru jest prawidłowa, jest ona wykonywana za pomocą instrukcji SQL. Schemat parametrycznych okien dialogowych jest jednym z najważniejszych tematów w świecie programowania.
Wstrzykiwanie bibliotek z łączem dynamicznym
- Wstrzyknięcie biblioteki DLL (Dynamic Link Library) następuje, gdy aplikacja musi załadować bibliotekę DLL do swojej przestrzeni adresowej i wykonać kod DLL. Kod w bibliotece DLL może być złośliwym kodem, który haker chce wykonać w systemie. Jest to złożony i subtelny wektor ataku; Dlatego jeśli programista nie uwzględni mechanizmu dynamicznej walidacji bibliotek podczas budowania aplikacji, zostanie on pomyślnie zaimplementowany.
Wstrzyknij lekki protokół dostępu do katalogów
(Wstrzykiwanie lekkiego protokołu dostępu do katalogów)
- Atak polegający na wstrzyknięciu protokołu dostępu lekkiego ma miejsce, gdy haker wypełnia formularz internetowy, który zazwyczaj wykorzystuje dane z formularza do wysyłania zapytań do bazy danych poprzez wywołanie protokołu LDAP. W tym przypadku haker wprowadza żądaną treść i kontroluje ją, a serwer ją uruchamia. Mimo to, ponieważ twórca aplikacji nie zatwierdził żadnego z danych wejściowych, hakerowi uda się wykonać polecenia.
Wstrzykiwalny zastrzyk języka znaczników
(Wstrzykiwanie rozszerzalnego języka znaczników)
- Atak polegający na wstrzykiwaniu Extendable Markup Language (XML) jest podobny do wstrzykiwania Square Code i LDAP, z tą różnicą, że haker wprowadza do programu kod XML. Wystarczy zweryfikować informacje, aby uniemożliwić pomyślne wdrożenie tego modelu ataków w celu rozwiązania tego problemu. Jeśli twórca aplikacji nie zweryfikował wprowadzonych danych, haker może manipulować procesem wykonywania aplikacji, wstrzykiwając dane XML.
Ataki związane z przepełnieniem bufora
Ponieważ większość aplikacji jest napisana w językach programowania C i C++, hakerzy wciąż próbują szczęścia w przeprowadzaniu ataków polegających na przepełnieniu bufora. Przepełnienie bufora ma miejsce wtedy, gdy haker wysyła do programu wiele informacji i powoduje przepełnienie bufora danych. Bufor to obszar pamięci głównej używany do przechowywania informacji wysyłanych do aplikacji. Wyobraźmy sobie poduszkę niczym szklankę wody o określonej pojemności, gdy wleje ona do szklanki więcej wody niż pojemność. Atak przepełnienia bufora robi dokładnie to samo. Rysunek 2 przedstawia prosty przykład udanej realizacji tego ataku.
Rysunek 2
Jeśli haker może przechowywać informacje w pamięci poza strefą buforową, może wykonać dowolny kod za zgodą administratora. Oprogramowanie narażone na ten wzorzec ataków to aplikacje lub usługi działające w tle systemu operacyjnego.
Dlaczego w aplikacjach występują luki?
Możesz zapytać, dlaczego te ataki są skuteczne. Jest kilka powodów. Zazwyczaj hakerzy spędzają dużo czasu pracując z technologiami, aby dowiedzieć się, gdzie są słabe strony technologii i jak je wykorzystać do przeprowadzania szkodliwych działań.
Ponadto programiści i rozwój oprogramowania zespoły celowo umieszczają backdoory w swoich produktach, aby móc w przyszłości wprowadzić niezbędne zmiany w aplikacjach. Czasami hakerom udaje się zidentyfikować i wykorzystać te backdoory. Dlatego programiści są zmuszeni wypuszczać łatki zamykające te tylne drzwi.
Najważniejsze powody powodzenia ataków na aplikacje to:
- Niewłaściwe zarządzanie danymi wejściowymi: Zarządzanie danymi wejściowymi i ich ocena to kolejne kluczowe zadanie programistów i programistów. Ilekroć dane są wysyłane do programu, programista musi je sprawdzić i upewnić się, że są odpowiednie.
W takim przypadku użytkownik zamiast przetwarzać informacje wyświetla błąd, jeśli dane są nieprawidłowe. Jeśli programista nie zatwierdzi wprowadzonych danych, hakerzy mogą wprowadzić do programu złośliwe dane, aby kontrolować oprogramowanie w niepożądany sposób.
-
Niewłaściwe zarządzanie błędami: Zarządzanie błędami to kolejne krytyczne zadanie programistów. Programiści muszą zadbać o to, aby poprawić wszelkie błędy wygenerowane w programie i odpowiednio nimi zarządzać, aby program nie napotkał poważnych problemów. Nieprawidłowo obsłużony błąd może prowadzić do nadużyć w programie. Dodatkowo pomocne byłoby szukanie wykrywania błędów po zakończeniu kodowania oprogramowania.
-
Konfiguracja domyślna: Podczas instalowania oprogramowania lub systemów należy w miarę możliwości zmieniać domyślną konfigurację. Pomocna byłaby zmiana ustawień domyślnych, aby hakerzy mieli mniejsze szanse na infiltrację programów. Hakerzy znają domyślne ustawienia produktów i uczą się, jak korzystać z ustawień domyślnych w celu wykorzystania systemów.
-
Nieprawidłowa lub zła konfiguracja: większość ataków hakerskich jest przeprowadzana z powodu niedokładnych lub nieodpowiednich systemów operacyjnych i projektów aplikacji. W przypadku niezbędnego oprogramowania, takiego jak SQL Server, Exchange Server i tym podobne, należy upewnić się, że masz poprawną konfigurację.
-
Słaby szyfr: Jednym z największych problemów aplikacji jest brak wiedzy programistów w zakresie stosowania algorytmów kryptograficznych. Niestety, niektóre aplikacje używane przez systemy operacyjne Windows i Android korzystają ze słabych technologii lub protokołów szyfrowania. Na przykład niektóre aplikacje i oprogramowanie sprzętowe używają algorytmu symetrycznego DES lub 3DES do szyfrowania danych. To szyfrowanie jest niewystarczające i należy je zastąpić potężniejszymi algorytmami, takimi jak AES. Innym przykładem jest zastąpienie słabszych protokołów szyfrowania, takich jak TLS 1.0 i TLS 1.1, nowszą wersją TLS 1.3.
-
Zagrożenia dnia zerowego: Jedną z najczęstszych luk w zabezpieczeniach, które nękają wiele firm, jest zagrożenie dnia zerowego, które odnosi się do nieznanej luki w zabezpieczeniach, o której sprzedawca jeszcze nie wie lub odkrył ją dopiero niedawno. W Day Zero Vulnerability nie ma wystarczająco dużo czasu na wypuszczenie łatki, w związku z czym hakerzy mogą z niej skorzystać w krótkim czasie. Najlepszym sposobem przeciwstawienia się temu atakowi jest zastosowanie systemów wykrywania i zapobiegania włamaniom.
ostatnie słowo
Bezpieczeństwo to jeden z najczęściej pomijanych aspektów tworzenia aplikacji, z którego korzystamy na co dzień. Niezbędne jest zrozumienie, w jaki sposób hakerzy infiltrują infrastrukturę firmy i wyrządzają jej poważne szkody poprzez aplikacje działające w systemach. Kluczowy punkt dyskusji rozwój oprogramowania aplikacyjnego to zrozumienie, że możesz wykonywać swoją pracę jako programista i przeprowadzać testy bezpieczeństwa zaprojektowanego oprogramowania po ukończeniu projektu oprogramowania ze szczególną starannością i obsesją.
Ponadto zestaw wytycznych, list kontrolnych i szablonów pomaga uniknąć typowych błędów podczas kodowania. Należy jednak pamiętać, że każdy język programowania ma swoje wzorce bezpieczeństwa, które nie mają zastosowania do wszystkich języków programowania. Na przykład C # Sharp upraszcza programistom proces kodowania, wprowadzając koncepcję zwaną Garbage Collection. Natomiast języki takie jak C nie mają takiej funkcji, a programiści muszą zwalniać pamięć podczas alokacji pamięci do obiektów dynamicznych.
Pobierz bezpłatne motywy WordPress PremiumPobierz bezpłatne motywy WordPress PremiumPobierz zerowe motywy WordPressPobierz motywy WordPresskurs udemy do pobrania za darmopobierz oprogramowanie lenevoPobieranie premium motywów WordPresskurs udemy do pobrania za darmo