The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"OpenNews: Как сделать небольшую консольную напоминалку парол..."
Вариант для распечатки  
Пред. тема | След. тема 
Форумы Разговоры, обсуждение новостей (Public)
Изначальное сообщение [Проследить за развитием треда]

"OpenNews: Как сделать небольшую консольную напоминалку парол..."  
Сообщение от opennews on 19-Авг-03, 19:09 
В статье поедполагается описать опыт автора по изобретению велосипеда в
лице консольной напоминалки паролей. Велосипед изобретался по причине
неудовлетворённости найденными разработками в данном направлении.
Да и вообще немного и на пальцах, о том, как можно использовать PGP в
домашних условиях для шифрования важных данных.

URL: http://dev.sputnikmedia.net/~rulez/files/pgp.article.txt
Новость: http://www.opennet.ru/opennews/art.shtml?num=2793

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

 Оглавление

Сообщения по теме [Сортировка по времени, UBB]


1. "Как сделать небольшую консольную напоминалку паролей на осно..."  
Сообщение от John Doe email on 19-Авг-03, 19:09 
Внимание!!! Этот ╚чудо скрипт╩ больше похож на Троянского коня.
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

2. "Как сделать небольшую консольную напоминалку паролей на осно..."  
Сообщение от Sergey Shurin email on 19-Авг-03, 19:38 
Да ладно... :) Параноя это конечто неплохо, но надо ж чуствовать меру :)
Я думаю почти каждый(и я тоже) использует подобные "велосипеды" но вот человека не обламало описать процесс изготовления.
А трояна там никакого нету - там же 10 строк и из нестандартных команд - только gnupg - чем там троянить? :)
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

3. "Как сделать небольшую консольную напоминалку паролей на осно..."  
Сообщение от John Doe email on 20-Авг-03, 02:33 
Раз. Почему Троян?! Эта ╚полезная программа╩ содержит несколько ошибок (надеюсь, что неумышленных), используя которые злоумышленник может произвести несколько различных атак, в результате которых получит ╚защищенные╩ пароли. OpenNET довольно популярный ресурс среди администраторов, причем последние зачастую несильно высокой квалификации, и без разбора применяют приводимые решения. На скольких серверах окажется эта чудо программа, скажем, через неделю? На одном, на десяти, на сотнях┘

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

Три. Вот несколько атак навскидку:
1) ОШИБКА:
     Пароли длительное время доступны в открытом виде:
       cat ${FILE} | gpg -d  -q > /tmp/$$
   УСЛОВИЯ:
     Злоумышленник является пользователем root! А почему бы и нет?!
   АТАКА:
     Злоумышленнику нужно написать и запустить простенькую  программку, которая следит за вновь созданными файлами в директории /tmp, имена которых состоят из одних цифр ($$), и сохраняет их содержимое в надежном месте.
2) ОШИБКА:
     Пароли некоторое время доступны на чтение всем пользователям:
       cat ${FILE} | gpg -d  -q > /tmp/$$
       chmod 600 /tmp/$$
       ${EDITOR} /tmp/$$
   УСЛОВИЯ:
     Нужно угадать (предсказать) диапазон возможных значений PID▓а ╚чудо программы╩. umask пользователя использующего ╚чудо программу╩ должен быть на подобии 022.
   АТАКА:
     Злоумышленник создает файлы в директории /tmp имена, которых определяются диапазоном возможных значения PID▓а ╚чудо программы╩. Например, файлы /tmp/{23,24,25,26,27} для диапазона [23,27]. Причем файлы должны быть доступны на запись пользователю запустившему ╚чудо программу╩. Далее атакующий ╚следит╩ за этими файлами, - ждет, когда в каком-нибудь из них появятся пароли, то есть, выполнится команда cat ${FILE} | gpg -d  -q > /tmp/$$. Очевидно, что выполнение второй команды (chmod 600 /tmp/$$) завершится ошибкой, но ее результат не проверяется и в любом случае будет запущен текстовый редактор.
Внимание, вопрос. Заметит ли пользователь сообщение об ошибке? Пусть даже заметит. Если в файле паролей хранится пароль root▓а для какого-нибудь удаленного сервера, то программа злоумышленника может войти на этот сервер и просто сменить пароль root▓а. Очень вероятно, что данная процедура закончится до того как пользователь успеет разобраться, что вообще происходит.
3) ОШИБКА:
     cat /dev/null > /tmp/$$
     rm -rf /tmp/$$
   УСЛОВИЯ:
     Пока вы были в отпуске, винчестер, где хранились ╚защищенные пароли╩ посыпался bad block▓ами и его пришлось выкинуть.
   АТАКА:
     Атакующий подбирает выкинутый винчестер, и использую ╚недавние достижения NIST в туннельной электронной микроскопии╩ (Bruce Schneier, ⌠Applied Cryptography■, 2002) восстанавливает /tmp/$$.

Итого. Ошибки, допущенные в ╚чудо программе╩, - элементарны, поэтому и возникает ощущение, что это Троянский конь. Конечно, автор мог допустить их случайно, но тогда он совершенно некомпетентен в области, которую пытался осветить.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

4. "Как сделать небольшую консольную напоминалку паролей на осно..."  
Сообщение от Alexander Kulinich on 20-Авг-03, 08:08 
Всё так. Не спорю - варианты взлома хоть и достаточно абсурдны, но реальны.
Немного изменил скрипт:
#!/bin/sh
# Copyright (c) Alexander Kulinich <rulez@rulez.kiev.ua>
# senx  John Doe <jdatzmail.ru> for security check :)

FILE=~/.ssh/passwords
EMAIL="rulez@rulez.kiev.ua"
FIELDS='a:|r:|f:'
FIELDS_NUM=3
TMP_FILE=/tmp/`echo date | md5`

umask 22

if [ $# -eq 2 ]
then
        cat ${FILE} | gpg -d -q 2>/dev/null | \
                grep -A ${FIELDS_NUM} -E "$1 |$1$" | \
                grep " $2:"
else
        if [ $# -eq 1 ]
        then
                if [ $1 = '-e' ]
                then
                        cat ${FILE} | gpg -d  -q > ${TMP_FILE} && \
                        chmod 600 ${TMP_FILE} && \
                        ${EDITOR} ${TMP_FILE}
                        cat ${TMP_FILE} | gpg --encrypt --recipient ${EMAIL} > ${FILE}
                        cat /dev/urandom | tr -cd A-HJ-NP-Za-km-z1-9 | head -c1000  > ${TMP_FILE}
                        rm -rf ${TMP_FILE}
                else
                        cat ${FILE} | gpg -d -q  2>/dev/null | \
                                grep -A ${FIELDS_NUM} $1 | grep -E ${FIELDS}
                fi
        else
                echo USAGE: `basename $0` host [user]
        fi
fi

И, я не думаю, что на shell врядли получится написать что-то кардинально совершеннее в плане безопасности.
Основная проблемма - надо как-то передавать данные между редактором и gpg.
Пайп не выход - в редактор передать данные с его помощью можно, а забрать - врядли. Разве что редактор умеет выдавать на стандартный вывод отредактированный файл, нигде его не сохраняя. Я таких редакторов не знаю.

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

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

PS. Может вы мне подскажете, что за область я хотел осветить? :)

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

5. "Как сделать небольшую консольную напоминалку паролей на осно..."  
Сообщение от Alexander Kulinich on 20-Авг-03, 08:15 
Тьху, блин, пора спать :)
Естественно - не
TMP_FILE=/tmp/'echo date | md5'
а
TMP_FILE=/tmp/'date | md5'
или даже так:
TMP_FILE=/tmp/'echo `date`$$ | md5'
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

6. "Как сделать небольшую консольную напоминалку паролей на осно..."  
Сообщение от Alexander Kulinich on 20-Авг-03, 08:47 
RND_NUM=`cat /dev/urandom | tr -cd 5-9 | head -c1`                                                  TMP_FILE=/tmp/`echo $$ | md5 | tail -c${RND_NUM}``date | md5 | head -c${RND_NUM}`
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

14. "Как сделать небольшую консольную напоминалку паролей на осно..."  
Сообщение от John Doe email on 20-Авг-03, 21:05 
Забавно. Все приводимые заплатки выглядят внушительно (складывается ощущение, что проблемы решены), а на самом деле бесполезны.

1) Теперь открытые пароли хранятся не в /tmp/<число>, а в /tmp/<очень случайная строка символов>, но суть от этого не меняется √ некоторое время файл содержащий открытые пароли доступен не чтение всем пользователям! Нет ничего сложного в том, чтобы следить за всеми вновь создаваемыми файлами во временной директории. Соответственно злоумышленнику нужно успеть прочитать файл с паролями после выполнения команды cat ${FILE} | gpg -d  -q > ${TMP_FILE} и до выполнения chmod 600 ${TMP_FILE}. А это не так маловероятно, как может показаться на первый взгляд. Каждая из этих команд √ процесс, а первая и не один (правда, это неважно). Процесс создается относительно медленно. К тому же, атакующая программа может повысить свои шансы fork▓нувшись раз этак 10, а то и побольше.
ИТОГО. Файл с открытыми паролями должен располагаться в недоступном для остальных пользователей месте, а не в директории /tmp. Вопрос со ╚злым╩ root▓ом остается открытым.

2) Команда cat /dev/urandom | tr -cd A-HJ-NP-Za-km-z1-9 | head -c1000  > ${TMP_FILE}, по сути, ничем не отличается от cat /dev/null > /tmp/$$.
ИТОГО. Для чего создана утилита shred?

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

15. "Как сделать небольшую консольную напоминалку паролей на осно..."  
Сообщение от Alexander Kulinich on 21-Авг-03, 10:09 
1. Предложи лучшее решение на sh
2. По сути.
Как уде сказали - ложить можно в хоум - если на машине есть рут ещё у кого-то - не выход.
Если редактор - vim, то можно сделать такую фишку:

touch ${TMP_FILE} && \
chmod 600 ${TMP_FILE} && \
vim -c 'read !gpg -d  -q' ${TMP_FILE} && \
cat ${TMP_FILE} | gpg --encrypt --recipient ${EMAIL} > ${FILE}
сat /dev/urandom | tr -cd A-HJ-NP-Za-km-z1-9 | head -c1000  > ${TMP_FILE}
rm -rf ${TMP_FILE}

Но и тут если рут есть ещё у кого-то на долю сунды(в момент сохранения) в ${TMP_FILE} опять же оказываются пароли в чистом виде.
Утилиты shred я во FreeBSD не нашел, потому не игрался.

А к вопросу со "злым рутом" - "злой рут" может и скрипт подправить так, чтобы без извратов оно ему куда надо все пароли сложило.

Выход один - не иметь на машине других пользователей с рутовымы правами.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

18. "Как сделать небольшую консольную напоминалку паролей на осно..."  
Сообщение от Sergey Shurin on 21-Авг-03, 12:12 
> vim -c 'read !gpg -d  -q' ${TMP_FILE} && \

Small bug fix:
vim -c 'read !cat ${FILE} | gpg -d -q' ${TMP_FILE} && \

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

8. "Как сделать небольшую консольную напоминалку паролей на осно..."  
Сообщение от poige on 20-Авг-03, 11:23 
>В любом случае - я не ставил себе задачей написать универсальную и
>абсолютно безопастную утилиту, как не ставил задания писать Троянского

"безопасность". Нет там никакой "Т" inside. :)

/poige
--
http://www.i.morning.ru/~poige/

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

9. "Как сделать небольшую консольную напоминалку паролей на осно..."  
Сообщение от Sergey Shurin on 20-Авг-03, 11:52 

:))))))))))))

AHTUNG!!! Данный скрипт не рекомендуется использовать на машинах, на                                  
которых рут есть у кого-либо кроме вас - это вполне серьёзно.                                          
Кроме того дисковую систему, на которой использовался данный скрипт,                                  
нельзя выбрасывать. Её надо утопить в горячей домне, при этом убедившись                              
в _полном_ уничтожении. Иначе, злоумышленник, используя "недавние                                      
достижения NIST в туннельной электронной микроскопии (Bruce Schneier,                                  
Applied Cryptography, 2002)" сможет восстановить ваши пароли.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

7. "Как сделать небольшую консольную напоминалку паролей на осно..."  
Сообщение от Nikolaev D. email on 20-Авг-03, 08:59 
to:John Doe

Согласен, "чудо скрипт" - троян.
Принцип действия - социальный инжиринг.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

10. "Как сделать небольшую консольную напоминалку паролей на осно..."  
Сообщение от Аноним email on 20-Авг-03, 16:14 
Господа, насчет абстрактного злоумышленника... а кто мешает $HOME/tmp вместо /tmp использовать?
кажется никто
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

11. "Как сделать небольшую консольную напоминалку паролей на осно..."  
Сообщение от Nikolaev D. email on 20-Авг-03, 17:27 
>а кто мешает $HOME/tmp вместо /tmp использовать?
А то, что:
1. такой директории может не быть(но можно создать, а если $HOME - корень например ???)
2. Идеология не верна в принципе - если на ФС записан файл с НЕШИФРОВННЫМИ паролями, то rm -rf file удаляет метку, но не ДАННЫЕ. Уверенным можно быть, ТОЛЬКО после прохода dd по всему диску. А если $HOME монтируется по NFS к примеру ?

И вообще:
crypt > passwods.file
Вводим текст

crypt < passwords.file
получаем текст

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

12. "Как сделать небольшую консольную напоминалку паролей на осно..."  
Сообщение от Sergey Shurin on 20-Авг-03, 18:00 
Чего-то мне кажется, что чегo-то типа John the Ripper прочитает ваш password.file аж на ура :-\
В то время как ПГП с двухкилобайтным ключем ФСБ будет ламать пару недель.
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

13. "Как сделать небольшую консольную напоминалку паролей на осно..."  
Сообщение от Аноним email on 20-Авг-03, 18:53 
shred /dev/hda
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

16. "Как сделать небольшую консольную напоминалку паролей на осно..."  
Сообщение от Nikolaev D. email on 21-Авг-03, 10:14 
>Чего-то мне кажется, что чегo-то типа John the Ripper прочитает ваш password.file аж на ура

Полностью согласен - стойкость никакая. Так что пароли надо хранить в памяти человека :)

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

17. "Как сделать небольшую консольную напоминалку паролей на осно..."  
Сообщение от Андрей email on 21-Авг-03, 10:54 
И память перидически освежать - зажав ему (юзеру)пальцы в тиски, или иголки под ногти.....я просто про то что это всё класс , но мы прийдём всё к тому же - самое слабое место человек.
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

20. "Адрес статьи изменился"  
Сообщение от Alexander Kulinich on 16-Мрт-07, 12:45 
Новый адрес: http://rulez.kiev.ua/files/articles/pgp.html
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Оцените тред (1=ужас, 5=супер)? [ 1 | 2 | 3 | 4 | 5 ] [Рекомендовать для помещения в FAQ]




Спонсоры:
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2022 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру