co to jest Code Injection i jak można go uniknąć
luki w zabezpieczeniach Code Injection to ogólny termin opisujący luki, które mogą być wykorzystane przez atakującego do wstrzyknięcia i wykonania złośliwego kodu.
luka ta występuje zwykle z powodu braku niezaufanej walidacji danych. Aplikacje, które bezpośrednio oceniają kod bez uprzedniej walidacji, byłyby podatne na tego typu ataki.
wstrzykiwanie kodu jest czasami mylone z innymi lukami, takimi jak i wstrzykiwanie poleceń. Należy zauważyć, że Code Injection to inny rodzaj luki, w której atakujący wstrzykuje kod zamiast poleceń systemu operacyjnego. Oznacza to, że jeśli chodzi o luki w zabezpieczeniach Code Injection, atakujący jest ograniczony przez funkcjonalność języka aplikacji.
ograniczenia atakującego
wykorzystując takie luki, atakujący są ograniczeni przez funkcjonalność języka aplikacji (takiego jak PHP / Python). Jednak w większości przypadków atakujący może być w stanie wykorzystać funkcjonalność interpretera, aby przejść od wstrzykiwania kodu do wstrzykiwania poleceń.
na przykład, jeśli atakujący wstrzyknie kod PHP do aplikacji internetowej, atakujący będzie ograniczony funkcjonalnością dostępną przez interpreter PHP. Gdy wystąpi atak injection, interpreter PHP wykona wstrzyknięty kod i w zależności od funkcjonalności interpretera, atakujący może wykorzystać funkcje wykonawcze programu dostępne w PHP, takie jak system() lub shell_exec w celu wykonywania poleceń systemowych.
wpływ iniekcji kodu
wpływ udanego ataku może się różnić w zależności od kilku czynników, takich jak język używany przez aplikację, Funkcjonalność dostępna przez aplikację itp.
jednak w większości przypadków udany atak może całkowicie zagrozić poufności, integralności i dostępności aplikacji i jej danych.
przykład
wyobraź sobie aplikację internetową, która przekazuje niezaufane dane, takie jak dane wejściowe użytkownika do funkcji PHP eval (). Funkcja eval() po prostu ocenia ciąg znaków jako kod PHP, o ile ma prawidłową składnię PHP i kończy się średnikiem.
<?php
$backup = “”;
$input = $_GET;
eval (“\$backup = \$input;”);
?>
ponieważ aplikacja przekazuje dane wejściowe użytkownika do niebezpiecznej funkcji PHP eval() i nie jest przeprowadzana Walidacja, aplikacja byłaby podatna na ataki typu Code Injection.
atakujący może wykorzystać tę słabość, dostarczając dane wejściowe 1; phpinfo (); jak pokazano poniżej:
https://example.com/index.php?arg=1;https://example.com/index.php?arg=1; phpinfo();
wykonuj polecenia systemu operacyjnego
po sprawdzeniu luki atakujący może kontynuować wykonywanie poleceń systemowych, wykorzystując funkcje interpretera, które umożliwiają wykonywanie poleceń. W tym przypadku używana jest funkcja system ().
https://example.com/index.php?arg=1;https://example.com/index.php?arg=1; system (‘whoami’);
polecenie whoami wypisuje nazwę użytkownika bieżącego użytkownika podczas wywoływania. Oznacza to, że gdy aplikacja
przekaże dane wejściowe użytkownika do funkcji eval (), interpreter PHP wykona polecenie whoami na bazowym systemie operacyjnym
.
gdy atakujący może wykonać polecenia systemowe, może kontynuować zdobywanie interaktywnej powłoki na podatnym systemie
i przeprowadzać inne ataki na inne systemy w obrębie wewnętrznej sieci zagrożonego systemu.
zapobieganie
niezależnie od używanego języka, luki w zabezpieczeniach kodu można uniknąć, postępując zgodnie z najlepszymi praktykami
opisanymi poniżej:
- unikaj oceny niezaufanych danych
◦ o ile nie jest to bezwzględnie wymagane, nie należy bezpośrednio Oceniać niezaufanych danych przy użyciu niebezpiecznych funkcji, takich jak eval(). * Traktuj wszystkie dane jako niezaufane
Note zauważ, że niezaufane dane nie odnoszą się tylko do danych wejściowych dostarczonych przez formularze HTML. Informacje kontrolowane przez użytkowników, takie jak pliki cookie, nagłówki żądań HTTP i przesłane pliki, powinny być traktowane jako niezaufane.
- Sprawdź poprawne dane
◦ zawsze sprawdzaj poprawność danych wejściowych użytkownika po stronie serwera.
◦ jeśli użytkownik ma przesłać dane wejściowe w określonym formacie, takim jak data, kod pocztowy, numery, adres e-mail
itp., upewnij się, że dane wejściowe użytkownika odpowiadają oczekiwanemu formatowi.
If Jeśli aplikacja oczekuje wartości w ograniczonym zestawie opcji, postępuj zgodnie z podejściem białej listy i upewnij się, że
przesłane dane wejściowe są jedną z dozwolonych opcji.
- Utwardz tłumacza
◦ na przykład, funkcjonalność interpretera PHP powinna być ograniczona do minimum, które jest wymagane do działania aplikacji. Może to znacznie utrudnić atakującym wykonywanie poleceń systemowych. Na przykład funkcje wykonywania programu PHP mogą zostać wyłączone poprzez modyfikację php.plik ini.
- analiza statyczna
◦ wykonuj analizy statyczne w celu zidentyfikowania luk w zabezpieczeniach związanych z niebezpieczną oceną.
◦ przeprowadzanie regularnych ocen podatności na zagrożenia i testów penetracyjnych w celu identyfikacji i łagodzenia takich słabych punktów.