BASH must die

Иван Скляров

Xakep, номер #061, стр. 061-060-1

(sklyarov@real.xakep.ru)

Или как противостоять шеллкоду

Пожалуй, самая лакомая цель для хакера – это получение интерактивного доступа к командной оболочке атакуемой машины. Немалую роль в этом играют так называемые эксплоиты, открывающие доступ к оболочке через определенную уязвимость в одном из сервисов (демоне). Для защиты от таких атак разработаны специальные технологии. Пример этому: StackGuard, FormatGuard и OpenWall. В этой статье я хочу предложить еще один способ. Возможно, он уже где-то описан, однако мне еще не попадались подобные решения.

Суть способа

При обычном входе в систему после выполнения login и авторизации запускается командный интерпретатор с определенными правами (здесь и далее речь будет идти только о Linux-системах). Однако shellcode обходит авторизацию и выполняет /bin/sh с правами уязвимого демона (обычно root). Большинство известных шеллкодов для запуска оболочки пользуются следующим кодом (см. Phrack 49-14, «Smashing The Stack For Fun And Profit» by Aleph One):

Сишный шеллкод

#include <stdio.h>

int main() {

char *name[2];

name[0] = "/bin/sh";

name[1] = NULL;

execve(name[0], name, NULL);

}

Сразу возникает такая мысль: а что, если бы авторизация происходила не ДО запуска оболочки, а сразу ПОСЛЕ ее старта? В таком случае, даже после успешного выполнения шеллкода, хакеру все равно понадобятся знания логина и пароля! Однако на практике такой идеальный случай осуществить проблематично или просто невозможно. Но что нам мешает сделать двухступенчатую авторизацию?! Т.е. после прохождения login уже сама оболочка в обязательном порядке требует повторной авторизации. Конечно, это внесет некоторое неудобство в работу легального пользователя, однако практически на 100% отпугнет от системы полчище script-kiddies, которые как раз и являются самым большим проклятием для администратора. Рассмотрим реализацию этого способа на наглядном примере, а также выявим некоторые его плюсы и минусы.

Реализация способа

В общем случае можно обозначить два варианта:

1. Оболочка требует ввода логина и пароля (или только пароля), идентичных тем, которые вводились при прохождении login.

2. Оболочка использует отдельную систему авторизации и требует логин и пароль (или только пароль), отличающиеся от стандартных в /etc/shadow.

Второй способ лучше в плане безопасности, т.к. некоторые шеллкоды могут добавлять новую учетную запись в /etc/shadow. Понятно, что если система защищена с помощью второго способа, то все эти действия не будут иметь особого значения, т.к. для получения полноценного доступа к оболочке нужно будет знать ее собственную систему авторизации, которая может быть реализована совершенно непредсказуемым способом. Однако первый способ легче в реализации, поэтому я опишу именно его. Но в реальной системе лучше использовать второй вариант.

Для наглядности напишем прототип оболочки, выполняющий все ее основные функции (исходник можно взять на нашем сайте или на диске к журналу). Назовем нашу псевдооболочку - xsh (расшифровку аббревиатуры оставляю на твоей совести). Компиляция осуществляется следующей строкой: gcc xsh.c -o xsh -lpam -lpam_misc -lncurses –lreadline. Несмотря на то, что я называю xsh псевдооболочкой, на самом деле она является почти полноценным шеллом. В ней отсутствуют лишь некоторые возможности, присущие любой нормальной оболочке, а именно: конвейеры, перенаправления, фоновое выполнение команд и собственный язык скриптов. Кратко рассмотрим работу xsh.

Содержание  Вперед на стр. 061-060-2
загрузка...
Журнал Хакер #151Журнал Хакер #150Журнал Хакер #149Журнал Хакер #148Журнал Хакер #147Журнал Хакер #146Журнал Хакер #145Журнал Хакер #144Журнал Хакер #143Журнал Хакер #142Журнал Хакер #141Журнал Хакер #140Журнал Хакер #139Журнал Хакер #138Журнал Хакер #137Журнал Хакер #136Журнал Хакер #135Журнал Хакер #134Журнал Хакер #133Журнал Хакер #132Журнал Хакер #131Журнал Хакер #130Журнал Хакер #129Журнал Хакер #128Журнал Хакер #127Журнал Хакер #126Журнал Хакер #125Журнал Хакер #124Журнал Хакер #123Журнал Хакер #122Журнал Хакер #121Журнал Хакер #120Журнал Хакер #119Журнал Хакер #118Журнал Хакер #117Журнал Хакер #116Журнал Хакер #115Журнал Хакер #114Журнал Хакер #113Журнал Хакер #112Журнал Хакер #111Журнал Хакер #110Журнал Хакер #109Журнал Хакер #108Журнал Хакер #107Журнал Хакер #106Журнал Хакер #105Журнал Хакер #104Журнал Хакер #103Журнал Хакер #102Журнал Хакер #101Журнал Хакер #100Журнал Хакер #099Журнал Хакер #098Журнал Хакер #097Журнал Хакер #096Журнал Хакер #095Журнал Хакер #094Журнал Хакер #093Журнал Хакер #092Журнал Хакер #091Журнал Хакер #090Журнал Хакер #089Журнал Хакер #088Журнал Хакер #087Журнал Хакер #086Журнал Хакер #085Журнал Хакер #084Журнал Хакер #083Журнал Хакер #082Журнал Хакер #081Журнал Хакер #080Журнал Хакер #079Журнал Хакер #078Журнал Хакер #077Журнал Хакер #076Журнал Хакер #075Журнал Хакер #074Журнал Хакер #073Журнал Хакер #072Журнал Хакер #071Журнал Хакер #070Журнал Хакер #069Журнал Хакер #068Журнал Хакер #067Журнал Хакер #066Журнал Хакер #065Журнал Хакер #064Журнал Хакер #063Журнал Хакер #062Журнал Хакер #061Журнал Хакер #060Журнал Хакер #059Журнал Хакер #058Журнал Хакер #057Журнал Хакер #056Журнал Хакер #055Журнал Хакер #054Журнал Хакер #053Журнал Хакер #052Журнал Хакер #051Журнал Хакер #050Журнал Хакер #049Журнал Хакер #048Журнал Хакер #047Журнал Хакер #046Журнал Хакер #045Журнал Хакер #044Журнал Хакер #043Журнал Хакер #042Журнал Хакер #041Журнал Хакер #040Журнал Хакер #039Журнал Хакер #038Журнал Хакер #037Журнал Хакер #036Журнал Хакер #035Журнал Хакер #034Журнал Хакер #033Журнал Хакер #032Журнал Хакер #031Журнал Хакер #030Журнал Хакер #029Журнал Хакер #028Журнал Хакер #027Журнал Хакер #026Журнал Хакер #025Журнал Хакер #024Журнал Хакер #023Журнал Хакер #022Журнал Хакер #021Журнал Хакер #020Журнал Хакер #019Журнал Хакер #018Журнал Хакер #017Журнал Хакер #016Журнал Хакер #015Журнал Хакер #014Журнал Хакер #013Журнал Хакер #012Журнал Хакер #011Журнал Хакер #010Журнал Хакер #009Журнал Хакер #008Журнал Хакер #007Журнал Хакер #006Журнал Хакер #005Журнал Хакер #004Журнал Хакер #003Журнал Хакер #002Журнал Хакер #001