Co to jest kod powłoki?
Shellcode to sekwencja kodu maszynowego lub instrukcji wykonywalnych, która jest wstrzykiwana do pamięci komputera w celu przejęcia kontroli nad uruchomionym programem. W takim ataku jednym z kroków jest przejęcie kontroli nad licznikiem programu, który identyfikuje następną instrukcję do wykonania. Przebieg programu można następnie przekierować do wstawionego kodu. Uciążliwy kod maszynowy nazywany jest ładunkiem ataku i jest elementem powszechnie określanym terminem shellcode. Metodę tę często stosowano w celu przyznania atakującemu dostępu poprzez otwarcie powłoki poleceń systemu operacyjnego, więc ogólnie ataki polegające na wstrzykiwaniu kodu stały się znane jako shellcode.
Wykorzystywana luka polega zwykle na tym, jak program przypisuje pamięć, sprawdza ważność danych wejściowych i obsługuje błędy pamięci. Twórcy oprogramowania zazwyczaj mogą uniknąć tego zagrożenia, ściśle definiując dane wejściowe i odrzucając niewłaściwe wartości. Jeśli odznaczone, wartości wymagające więcej miejsca niż pamięć przydzielona dla tej wartości mogą zostać zaakceptowane. Powoduje to błąd zabezpieczeń zwany przepełnieniem bufora, w którym część danych jest zapisywana w lokalizacjach pamięci sąsiadujących z przydzieloną przestrzenią wartości. Po dokładnym zmanipulowaniu ta anomalia może pozwolić na wprowadzenie niepożądanego kodu.
Shellcode jest zwykle napisany w języku programowania z niskim dostępem do systemu, takim jak asembler, C lub C ++. Jednak w zależności od docelowej luki ten sam wynik można uzyskać, wstawiając kod dla interpretowanego języka skryptowego, takiego jak PERL, lub kodu bajtowego dla maszyny wirtualnej, takiej jak JAVA. Kod może zostać wszczepiony przed, w trakcie lub po przejęciu licznika programu. W ten sposób natrętny kod może być zawarty w pliku na docelowej maszynie lub przesyłany przez połączenie sieciowe w czasie rzeczywistym.
Lokalne exploity typu shellcode zostały zaprojektowane w celu zapewnienia atakującemu kontroli nad maszyną, do której on lub ona ma fizyczny dostęp. W tym przypadku celem może być na przykład utworzenie konta z uprawnieniami administratora. Podobnie, jeśli uruchomiony proces ma wysoki poziom uprawnień, udany exploit tymczasowo zapewni taki sam poziom dostępu do intruza.
Procesy uruchomione na zdalnym komputerze można wykorzystać przy użyciu standardowych protokołów sieciowych do komunikacji z komputerem docelowym. Kod shellowy połączenia zwrotnego instruuje maszynę docelową, aby zainicjowała połączenie z komputerem intruza. Jeśli intruz zainicjuje połączenie, kod nazywa się bindshell, ponieważ próbuje on przejąć kontrolę nad połączeniem sieciowym zwanym portem na zdalnej maszynie. Metoda łączenia z powrotem jest szeroko stosowana, ponieważ zapory ogniowe rzadko zabraniają połączeń wychodzących.