Шелл-код (англ. shellcode, код запуску оболонки) — це двійковий виконуваний код, який зазвичай передає управління командному процесору, наприклад '/bin/sh' в Unix shell, 'command.com' в MS-DOS і 'cmd.exe' в операційних системах Microsoft Windows. Шелл-код може бути використаний як корисне навантаження експлойта, який забезпечує зловмиснику доступ до командної оболонки (англ. shell) у комп'ютерній системі.

При експлуатації віддаленої уразливості шелл-код може відкривати заздалегідь заданий порт TCP уразливого комп'ютера, через який буде здійснюватися подальший доступ до командної оболонки, такий код називається - код прив'язки до порту (англ. port binding shellcode). Якщо шелл-код здійснює підключення до порту комп'ютера атакуючого, що проводиться з метою обходу брандмауера або NAT, то такий код називається зворотною оболонкою (англ. reverse shell shellcode).

Принцип роботи ред.

Шелл-код зазвичай впроваджується в пам'ять експлуатованої програми, після чого на нього передається управління шляхом переповнення стека, або при переповненні буфера в купі, або використовуючи атаки форматного рядка. Передача управління шелл-коду здійснюється перезаписом адреси повернення в стеку адресою впровадженого шелл-коду, перезаписом адрес функцій, що викликаються  або зміною обробників переривань. Результатом цього є виконання шелл-коду, який відкриває командний рядок для використання зловмисником.

Виявлення ред.

Зловмисники пишуть шелл-коди, часто використовуючи прийоми, що приховують їх атаку. Вони часто намагаються з'ясувати, як системи виявлення вторгнень (СВВ) розпізнають будь-яку вхідну атаку. Типова СВВ зазвичай переглядає всі вхідні пакети в пошуках структури, специфічної для шелл-коду (часто великий масив сміттєвих кодів, у найпростішому випадку NOP-ів); якщо вона знаходить таку структуру, пакет знищується до того, як він досягне своєї мети. Слабкість позиції системи виявлення вторгнень в даному випадку полягає в тому, що вона не здійснює достатньо ретельного аналізу, інакше він займе дуже багато часу і, таким чином, сповільнить з'єднання з інтернетом.

Шелл-код майже завжди містить рядок з ім'ям оболонки. Всі вхідні пакети, що містять такий рядок, завжди розглядаються як підозрілі в очах СВВ. Також деякі програми не приймають не алфавітно-цифрове введення (вони не приймають символів, що виходять за рамки набору a-z, A-Z, 0-9 та кількох інших символів.)

Для проходження через всі ці заходи, спрямовані проти вторгнення, зловмисники використовують шифрування, самопереробний код, поліморфний код і алфавітно-цифровий код.

Дивись також ред.

Посилання ред.

  • Steve Hanna (2004). Shellcoding for Linux and Windows Tutorial with example windows and linux shellcode. Архів оригіналу за 25 серпня 2011. Процитовано 30 сентября 2007.
  • Designing Shellcode Demystified. Архів оригіналу за 25 серпня 2011. Процитовано 19 квітня 2018.