The OpenNET Project / Index page

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

Атака через подстановку аргументов при использовании масок в командной строке

28.06.2014 09:54

Специализирующаяся на компьютерной безопасности компания DefenseСode обратила внимание на реальность эксплуатации особенностей обработки масок при выполнении утилит в командной строке. Суть проблемы в том, что при указании масок, таких как "*", осуществляется простая замена списка в командной строке, при которой имена файлов начинающиеся с символа "-" интерпретируются не как файлы, а как переданные утилите опции. Данное поведение до сих пор рассматривалось не как уязвимость, а как известная особенность командных интерпретаторов.

Например, если запустить "rm *" и в текущей директории окажется файл с именем "-rf", то будет применена опция "rm -rf", что приведёт к удалению не только файлов, но и директорий. Другим примером может послужить создание файла с именем "--reference=.file.php", что при выполнении команды "chown nobody:nobody *.php" (или "chmod 000 *") приведёт к смене владельца не на пользователя nobody, а на владельца файла ".file.php" (или к смене прав на права файла ".file.php", которые могут быть -rwxrwxrwx). Если этот файл является символической ссылкой на /etc/shadow и команда выполнена под пользователем root, то смена владельца/прав будет произведена и для /etc/shadow.

Исследователи из DefenseСode считают, что такое поведение следует рассматривать как уязвимость, в доказательство чего опубликовали технику атаки, которая может привести к выполнению кода при использовании утилиты tar. Если атакующий создаст файлы "--checkpoint=1" и "--checkpoint-action=exec=sh shell.sh", а администратор выполнит для архивирования типичную команду "tar cvvf archive.tar *", то после добавления одного файла в архив будет запущен скрипт shell.sh.

Аналогичного эффекта можно добиться при использовании утилиты rsync: создание файла "-e sh shell.c" и запуск "rsync -t *.c foo:src/" приведёт к выполнению скрипта "shell.c". Метод работает и для утилиты scp: создание файла "-o ProxyCommand shell.sh %h %p" и выполнение "scp * user@example.org:/var/www/" приведёт к запуску скрипта shell.sh и передаче ему в качестве аргументов имени хоста и номера порта. В качестве средства для защиты от подобных атак рекомендуется использовать "--" или "./" перед маской, например, "rm -- *" или "rm ./*".

  1. Главная ссылка к новости (http://blog.defensecode.com/20...)
Лицензия: CC BY 3.0
Короткая ссылка: https://opennet.ru/40100-shell
Ключевые слова: shell, security
При перепечатке указание ссылки на opennet.ru обязательно


Обсуждение (114) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.1, Аноним (-), 10:44, 28/06/2014 [ответить] [﹢﹢﹢] [ · · · ]  
  • +25 +/
    OMG, незнал что такое возможно
     
     
  • 2.7, Аноним (-), 11:23, 28/06/2014 [^] [^^] [^^^] [ответить]  
  • +/
    Ещё вот так можно: http://linsovet.org.ua/content/chmod-x-chmod
     
     
  • 3.17, Аноним (-), 13:53, 28/06/2014 [^] [^^] [^^^] [ответить]  
  • +/
    # stat -c '%A' ./chmod
    -rw-r--r--

    # /lib/x86_64-linux-gnu/ld-linux-x86-64.so.2 ./chmod --help
    Использование: ./chmod [КЛЮЧ]... РЕЖИМ[,РЕЖИМ]… ФАЙЛ
           или:    ./chmod [КЛЮЧ]… ВОСЬМ-РЕЖИМ ФАЙЛ…
           или:    ./chmod [КЛЮЧ]… --reference=ОФАЙЛ ФАЙЛ…
    Смена РЕЖИМА доступа к указанным ФАЙЛАМ.
    При задании --reference, установить режим
    указанных ФАЙЛОВ как у ЭФАЙЛА.

     
     
  • 4.59, Аноним (-), 21:24, 28/06/2014 [^] [^^] [^^^] [ответить]  
  • +6 +/
    > Использование: ./chmod [КЛЮЧ]... РЕЖИМ[,РЕЖИМ]… ФАЙЛ

    Русский chmod. Бессмысленно и беспощадно.

     
  • 2.12, бедный буратино (ok), 12:24, 28/06/2014 [^] [^^] [^^^] [ответить]  
  • –2 +/
    бывало, ловил. :) оттуда у меня и замена - на A в скриптах :)
     
  • 2.19, Журналовращатель (?), 13:59, 28/06/2014 [^] [^^] [^^^] [ответить]  
  • +/
    Не знал, что такое не возможно

    //fixed

     

  • 1.2, Аноним (-), 10:59, 28/06/2014 [ответить] [﹢﹢﹢] [ · · · ]  
  • +3 +/
    > [leon@defensecode WILD]$ strace rm *
    > execve("/bin/rm", ["rm", "DIR1", "DIR2", "DIR3", "file1.txt", "file2.txt",
    > "file3.txt", "-rf"], [/* 25 vars */]) = 0
    >              ^- HERE

    Во FreeBSD, кстати, не сработает.

     
     
  • 2.3, A.Stahl (ok), 11:00, 28/06/2014 [^] [^^] [^^^] [ответить]  
  • +15 +/
    Как и многое другое:)
     
     
  • 3.4, Аноним (-), 11:02, 28/06/2014 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Раньше считал это недальновидностью и непродуманностью UI, а оно вон как оказалось.
     
  • 2.16, vle (ok), 13:53, 28/06/2014 [^] [^^] [^^^] [ответить]  
  • +3 +/
    >> [leon@defensecode WILD]$ strace rm *
    >> execve("/bin/rm", ["rm", "DIR1", "DIR2", "DIR3", "file1.txt", "file2.txt",
    >> "file3.txt", "-rf"], [/* 25 vars */]) = 0
    >>              ^- HERE
    > Во FreeBSD, кстати, не сработает.

    Во FreeBSD в отличие от glibc несломанный POSIX getopt(3).
    Так что передастся rm-у "-rf" как опция или как файларгумент будет зависеть от того,
    на какое место она станет после раскрытия *.
    Но в целом "проблема" глобальна.

     
  • 2.23, Аноним (-), 14:27, 28/06/2014 [^] [^^] [^^^] [ответить]  
  • +/
    нужно ещё после -rf добавить оидн пусть как минимум
     
     
  • 3.28, pavlinux (ok), 15:02, 28/06/2014 [^] [^^] [^^^] [ответить]  
  • +3 +/
    Пусть - это ласковое название символа пробела?
     
     
  • 4.57, Аноним (-), 21:01, 28/06/2014 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > Пусть - это ласковое название символа пробела?

    Ну так "пустота" же.

     

  • 1.5, Аноним (-), 11:07, 28/06/2014 [ответить] [﹢﹢﹢] [ · · · ]  
  • –2 +/
    забавно.
     
  • 1.6, Аноним (-), 11:18, 28/06/2014 [ответить] [﹢﹢﹢] [ · · · ]  
  • +13 +/
    два минуса придумали как раз для этого, для разделения интерпретируемых аргументов и подставленных имён файлов
     
     
  • 2.8, Anonymus (?), 11:31, 28/06/2014 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Всё равно это бага, broken by design по ихнему. Интерпретатор понятия не имеет о назначении аргументов. Правильное решение когда программа сама обрабатывает маски, а не когда приходится вбивать слеш или заворачивать маску в кавычки. И, кстате, в некоторых случаях (а у некоторых -- очень даже во многих) легко напороться на дофига файлов и упереться в ограничение длины командной строки.
     
     
  • 3.9, Аноним (-), 11:35, 28/06/2014 [^] [^^] [^^^] [ответить]  
  • +6 +/
    для этого и придумали два минуса, всё что после них обрабатывается как имя файла, а реализовывать один и тот же алгоритм разбора масок в каждой программе достаточно глупо.
     
     
  • 4.10, Anonymus (?), 12:14, 28/06/2014 [^] [^^] [^^^] [ответить]  
  • –1 +/
    ага, C startup code в каждой программе вообще глупость, да?
     
     
  • 5.22, Аноним (-), 14:25, 28/06/2014 [^] [^^] [^^^] [ответить]  
  • +1 +/
    идиотское сравнение
     
  • 5.33, Аноним (-), 15:52, 28/06/2014 [^] [^^] [^^^] [ответить]  
  • +5 +/
    > ага, C startup code в каждой программе

    А в некоторых его может и не быть. Облом, правда? :)

     
  • 4.42, Ordu (ok), 17:51, 28/06/2014 [^] [^^] [^^^] [ответить]  
  • +/
    > для этого и придумали два минуса, всё что после них обрабатывается как
    > имя файла, а реализовывать один и тот же алгоритм разбора масок
    > в каждой программе достаточно глупо.

    Вообще-то, для решения этой проблемы были придуманы библиотеки, в т.ч. и shared библиотеки. И ведь в libc подобный алгоритм не был бы лишним, между прочим.

     
  • 4.65, Аноним (-), 01:15, 29/06/2014 [^] [^^] [^^^] [ответить]  
  • –1 +/
    > для этого и придумали два минуса

    А обрабатывать два минуса в каждой программе, это умно, ага.

     
     
  • 5.120, Аноним (120), 23:28, 29/06/2014 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > А обрабатывать два минуса в каждой программе, это умно, ага.

    man 3 getopt

     
     
  • 6.121, arisu (ok), 23:32, 29/06/2014 [^] [^^] [^^^] [ответить]  
  • +1 +/
    >> А обрабатывать два минуса в каждой программе, это умно, ага.
    > man 3 getopt

    cуровые джедаи не пользуются библиотеками. даже libc.

     
  • 3.20, Аноним (-), 14:21, 28/06/2014 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Работа с аргументной строкой как с монолитной raw строкой в принципе 'broken by design', случай с разворачиванием звёздочки только один из подобных негативных сайдэффектов. В нормальной архитектуре чанки аргументной строки должны быть теггированы.
     
     
  • 4.41, Ordu (ok), 17:47, 28/06/2014 [^] [^^] [^^^] [ответить]  
  • +/
    Если говорить о linux'е, то ни о каких монолитных raw строках речи не идёт. В помощь вам: man 2 execve.
    Затем, правда, мой склероз мне отказывает, и я уже не могу сказать, кто именно заполняет argv[] и envp[] для процесса -- libc или ядро, -- но даже если и libc, то всё равно речь идёт вовсе не о "монолитной raw" строке, но о argz/envz векторах, заботливо положенных ядром на стек. Что, вероятно, можно эксплуатировать, используя то, что символ '\0' имеет особое сакральное значение. Но, глядя на заголовок execve, признаемся себе, что вряд ли.
    Так что случай с разворачиванием звёздочки -- это негативный сайдэффект какой-то другой проблемы, и вовсе не фиктивной проблемы каких-то там "монолитных raw-строк".
     
     
  • 5.43, rob pike (?), 17:54, 28/06/2014 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Товарищ явно имел в виду что-то типа Windows Shell, чтоб шаг влево-вправо - расстрел.
     
     
  • 6.50, Crazy Alex (ok), 19:45, 28/06/2014 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Расстрелом делать не обязательно, но метаинформация - вообще штука хорошая
     
     
  • 7.85, rob pike (?), 11:18, 29/06/2014 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Для чего хорошая? В каких случаях хорошая?

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

    Тем более что пример-то - прямо перед глазами, Windows PowerShell же, в котором проще застрелиться (или, что чаще - написать скрипт прямо на С#) чем сделать что-то, чего разработчики не предусмотрели эксплицитно.

     
     
  • 8.95, Crazy Alex (ok), 14:54, 29/06/2014 [^] [^^] [^^^] [ответить]  
  • +/
    Сильно зависит от реализации, конечно, но в общем - Я бы предпочёл для любых слу... большой текст свёрнут, показать
     
     
  • 9.105, arisu (ok), 19:34, 29/06/2014 [^] [^^] [^^^] [ответить]  
  • +1 +/
    как минимум шелл ты себе можешь заменить на что угодно знаешь, он ведь не приби... текст свёрнут, показать
     
     
  • 10.136, Crazy Alex (ok), 04:42, 30/06/2014 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Мне не шелл бы, а соглашение о формате В идеале - поддержанная на уровне систем... текст свёрнут, показать
     
     
  • 11.137, arisu (ok), 04:47, 30/06/2014 [^] [^^] [^^^] [ответить]  
  • +1 +/
    так в чём проблема-то пишешь библиотеку сборки и парзинга твоего нового формата... текст свёрнут, показать
     
     
  • 12.154, Crazy Alex (ok), 10:10, 01/07/2014 [^] [^^] [^^^] [ответить]  
  • –1 +/
    А теперь расскажи, как мне сделать, чтобы можно было из любого процесса, как-либ... большой текст свёрнут, показать
     
     
  • 13.156, arisu (ok), 10:39, 01/07/2014 [^] [^^] [^^^] [ответить]  
  • +2 +/
    1 уговорить автора использовать твою библиотеку для получения параметров 2 на... большой текст свёрнут, показать
     
     
  • 14.163, Crazy Alex (ok), 14:48, 01/07/2014 [^] [^^] [^^^] [ответить]  
  • +/
    Не, я просто хочу более мощные механизмы В частности - мне не нравится, что куч... большой текст свёрнут, показать
     
     
  • 15.164, arisu (ok), 15:00, 01/07/2014 [^] [^^] [^^^] [ответить]  
  • +3 +/
    хуже в том, что без специнструментов с этими структурами уже ничего не сделаешь ... текст свёрнут, показать
     
     
  • 16.165, JL2001 (ok), 11:23, 14/07/2014 [^] [^^] [^^^] [ответить]  
  • +/
    в языках программирования это давно решено через Object toString и new Object ... текст свёрнут, показать
     
     
  • 17.166, arisu (ok), 11:31, 14/07/2014 [^] [^^] [^^^] [ответить]  
  • +/
    хорошо, что мы никогда не столкнёмся в реале, товарищ Беспроблемный ... текст свёрнут, показать
     
  • 9.128, vi (?), 00:25, 30/06/2014 [^] [^^] [^^^] [ответить]  
  • +/
    Послушайте Изя, он нас еще и коммерции учить будет ... текст свёрнут, показать
     
  • 9.140, rob pike (?), 05:41, 30/06/2014 [^] [^^] [^^^] [ответить]  
  • +/
    Теперь смотрим в сторону XML-RPC, и долго думаем почему он таки не взлетел Нет,... текст свёрнут, показать
     
     
  • 10.142, arisu (ok), 05:45, 30/06/2014 [^] [^^] [^^^] [ответить]  
  • +1 +/
    да даже если понимать 8212 это ужас интерфейсы, которые спрашивают интерфейс... текст свёрнут, показать
     
  • 10.155, Crazy Alex (ok), 10:21, 01/07/2014 [^] [^^] [^^^] [ответить]  
  • +/
    Он много почему не взлетел И потому что нефиг совать RPC туда, где должны быть ... большой текст свёрнут, показать
     
  • 9.167, Vkni (ok), 16:53, 14/07/2014 [^] [^^] [^^^] [ответить]  
  • +/
    Нет Это именно дурная идея PowerShell стоит на базе NET а, система типов кото... текст свёрнут, показать
     
  • 6.61, Аноним (-), 21:31, 28/06/2014 [^] [^^] [^^^] [ответить]  
  • +/
    > Товарищ явно имел в виду что-то типа Windows Shell, чтоб шаг влево-вправо - расстрел.

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

     
  • 6.74, Аноним (-), 01:42, 29/06/2014 [^] [^^] [^^^] [ответить]  
  • +/
    товарищ имел явно в виду только то что написал, а именно речь шла о протоколе пе... большой текст свёрнут, показать
     
     
  • 7.75, arisu (ok), 01:59, 29/06/2014 [^] [^^] [^^^] [ответить]  
  • +/
    опять эти улучшатели… всем лёнины лавры покоя не дают.
     
  • 7.86, rob pike (?), 11:24, 29/06/2014 [^] [^^] [^^^] [ответить]  
  • +/
    И получится у вас XML-RPC.
    Это именно то чего не хватало командной строке, да.
     
     
  • 8.89, all_glory_to_the_hypnotoad (ok), 12:15, 29/06/2014 [^] [^^] [^^^] [ответить]  
  • –1 +/
    В каком месте это хоть как-то похоже на xml-rpc Тут, конечно, понятно что ты хе... текст свёрнут, показать
     
  • 5.72, Аноним (-), 01:28, 29/06/2014 [^] [^^] [^^^] [ответить]  
  • +/
    если говорить о linux и юниксах, где значительная часть операций идёт через шел, то строки именно монолитные и в execve попадают порезанными примерно по пробелам шеллом. Покрути своей невнимательнйо мордочкой вверх и узри что речь идёт о sh.

    И эта порезка на части для execve() даже при правильном использовании без теггирования мало чем помогает. Как правильно выше заметили, вызывающая сторона ничего не знает о семантике аргументов (sh или ей аналогичный генератор строк), либо легко ошибиться с порядком и кол-вом - нет никаких способов защиты от таких распрастранённых ошибок.

     
     
  • 6.73, arisu (ok), 01:35, 29/06/2014 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > нет никаких способов защиты от таких распрастранённых ошибок.

    это у говнокодеров нет. у остальных нормальных людей есть конвенции по интерпретации параметров и волшебный параметр «--».

    тэгирование — это, конечно, стильно, модно и всё такое. а как тэгировать параметр «truiwghiuwhg»? это у меня кот пробежал? или это я файл такой создать хочу? или у меня уже есть такой файл, но я не его имел в виду, а вовсе даже выругался? угу, привет, очередные костыли для задания типов аргументов, экраны и прочая механика, которая уже и так есть. только на этот раз — с идиосткими усложнениями и тотальным ломанием интерфейсов, как любят хипстеры.

     
     
  • 7.76, all_glory_to_the_hypnotoad (ok), 02:04, 29/06/2014 [^] [^^] [^^^] [ответить]  
  • +2 +/
    обезьяна, ты что такая тупая -- всего лишь частный костылик который даже в сл... большой текст свёрнут, показать
     
     
  • 8.77, arisu (ok), 02:13, 29/06/2014 [^] [^^] [^^^] [ответить]  
  • –2 +/
    хм, а раньше ты таким идиотом не был или маскировался хорошо in either case f... текст свёрнут, показать
     
  • 8.78, vle (ok), 03:44, 29/06/2014 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Если разработчик вменяемый, он использует getopt 3 или getopt_long 3 В обоих ... текст свёрнут, показать
     
     
  • 9.88, all_glory_to_the_hypnotoad (ok), 12:12, 29/06/2014 [^] [^^] [^^^] [ответить]  
  • –1 +/
    точно прочитал мой коммент прежде чем отвечать ... текст свёрнут, показать
     
  • 6.83, Anonym2 (?), 10:52, 29/06/2014 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > если говорить о linux и юниксах, где значительная часть операций идёт через
    > шел, то строки именно монолитные и в execve попадают порезанными примерно
    > по пробелам шеллом. Покрути своей невнимательнйо мордочкой вверх и узри что
    > речь идёт о sh.
    > И эта порезка на части для execve() даже при правильном использовании без
    > теггирования мало чем помогает. Как правильно выше заметили, вызывающая сторона ничего
    > не знает о семантике аргументов (sh или ей аналогичный генератор строк),
    > либо легко ошибиться с порядком и кол-вом - нет никаких способов
    > защиты от таких распрастранённых ошибок.

    Вызывающая сторона как раз должна знать. И эта сторона - не sh. Однако sh делает некоторое сложнопредсказуемое для некоторых вызывающих сторон преобразование...

     
     
  • 7.107, Алексей (??), 21:09, 29/06/2014 [^] [^^] [^^^] [ответить]  
  • +/
    Так это вызывающие стороны мануал по шеллу не читали, поэтому трудно предсказывать
     
  • 6.90, Ordu (ok), 13:02, 29/06/2014 [^] [^^] [^^^] [ответить]  
  • +/
    Простите, я полагаю порезку примерно по пробелам неизбежной Можно конечно зам... большой текст свёрнут, показать
     
     
  • 7.91, rob pike (?), 13:35, 29/06/2014 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > кончится это неуёмным использованием xml'я во все щели

    Сейчас вам объяснят что раз угловых скобочек для тэгов не предлагалось в исходном сообщении, то подобные аналогии неуместны. И в википедию отправят.

     
  • 7.96, all_glory_to_the_hypnotoad (ok), 15:00, 29/06/2014 [^] [^^] [^^^] [ответить]  
  • –2 +/
    Ты ничего не разбиваешь пробелами в командной строке, это фикция в твоей голове ... большой текст свёрнут, показать
     
     
  • 8.98, Ordu (ok), 16:14, 29/06/2014 [^] [^^] [^^^] [ответить]  
  • +/
    ммм 1 Как это связано между собой 2 Вы не думали о том, чтобы заменить для... большой текст свёрнут, показать
     
  • 4.49, Crazy Alex (ok), 19:44, 28/06/2014 [^] [^^] [^^^] [ответить]  
  • +/
    Проблема в том, чтобы получить с правильной архитектурой ту же простоту... А так - согласен, парсинг текста - хороший фоллбек, но в большинстве случаев что-то более структурированное было бы неплохо иметь.
     
  • 3.67, arisu (ok), 01:19, 29/06/2014 [^] [^^] [^^^] [ответить]  
  • +/
    > И, кстате, в некоторых случаях (а у некоторых -- очень даже
    > во многих) легко напороться на дофига файлов и упереться в ограничение
    > длины командной строки.

    тридцать два килобайта. демоны, ЧТО можно делать с командной строкой, чтобы насрать туда тридцать два килобайта? точнее, каким дауном надо быть, чтобы развести у себя на технике такую помойку, которая раскроется на тридцать два килобайта?

     
     
  • 4.109, Алексей (??), 21:38, 29/06/2014 [^] [^^] [^^^] [ответить]  
  • +/
    ну во-первых не 32кб, реально можно столько использовать, на сколько памяти хватит. это вполне удобным бывает (чисто практически, а то что изначально механизм не предназначен был для больших объемов - так это эстетство уже).
     
     
  • 5.112, arisu (ok), 22:05, 29/06/2014 [^] [^^] [^^^] [ответить]  
  • +/
    реально это зависит от многих факторов, включая то, какой shell используется. на современных GNU/Linux с bash 32 килобайта точно пролазит, поэтому я взял это как минимум.
     
     
  • 6.125, Алексей (??), 00:03, 30/06/2014 [^] [^^] [^^^] [ответить]  
  • +/
    лимит - четверть максимального размера стека (RLIMIT_STACK), гарантируется не менее 128кб, по дефолту мне везде попадалось 2мб (макс. память, занятая аргументами execve, включая env). но это искуственное ограничение, в баше достаточно сделать ulimit -s unlimited, и пролезет столько, сколько памяти хватит. и сами данные не в стеке находятся (ограничение на аргументы ставится для того, чтобы обеспечить выделение памяти под стек).
     
     
  • 7.132, arisu (ok), 01:15, 30/06/2014 [^] [^^] [^^^] [ответить]  
  • +/
    про shell тактично не заметил?

    впрочем, я старпёр, предпочитаю ограничиваться 32kb.

     
     
  • 8.134, Алексей (??), 02:23, 30/06/2014 [^] [^^] [^^^] [ответить]  
  • +/
    так shell сам не ограничивает длину, ограничивает ядро и если уж старперствова... текст свёрнут, показать
     
     
  • 9.135, arisu (ok), 02:42, 30/06/2014 [^] [^^] [^^^] [ответить]  
  • +/
    lolwut O_O... текст свёрнут, показать
     
  • 7.149, all_glory_to_the_hypnotoad (ok), 22:47, 30/06/2014 [^] [^^] [^^^] [ответить]  
  • –1 +/
    >  и сами данные не в стеке находятся

    они находятся в стеке. Точнее вначале куска памяти, конец которого потом превращается в стек. С точки зрения дяра это всё стек.

     
  • 3.93, анон (?), 13:45, 29/06/2014 [^] [^^] [^^^] [ответить]  
  • +1 +/
    это "broken by design" обсуждается с конца 80-х и есть антидоты.

    плотно эти ребята занимаются безопасностью, если только открыли это для себя.

     
  • 3.147, Андрей (??), 19:56, 30/06/2014 [^] [^^] [^^^] [ответить]  
  • +/
    > Правильное решение когда программа сама обрабатывает маски

    Ну, т.е. как когда-то в DOS.

     
     
  • 4.153, arisu (ok), 00:41, 01/07/2014 [^] [^^] [^^^] [ответить]  
  • +2 +/
    >> Правильное решение когда программа сама обрабатывает маски
    > Ну, т.е. как когда-то в DOS.

    и в винде до сих пор.

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

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

     

     ....большая нить свёрнута, показать (58)

  • 1.11, Аноним (-), 12:20, 28/06/2014 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    > Например, если запустить "rm *" и в текущей директории окажется файл с именем "-rf"

    Ололо...

     
  • 1.13, бедный буратино (ok), 12:26, 28/06/2014 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    tar cf archive.tar *

    это же тар-бомба, которая крайне редко где применяется (а там, где применяется, уже один раз поймал и попортил себе систему :).

    обычно tar cf archive.tar archive, чтобы потом удобно распаковывать было.

     
     
  • 2.27, Xaionaro (ok), 14:49, 28/06/2014 [^] [^^] [^^^] [ответить]  
  • +3 +/
    Никогда не указываю «*» в таких командах. Во-первых не цепляет файлы «.*», во-вторых известно, что это ненадёжно (и небезопасно). Всегда тупо указываю путь к директории (и если это CWD, то тогда тупо «.»).
     
  • 2.34, Аноним (-), 15:54, 28/06/2014 [^] [^^] [^^^] [ответить]  
  • –1 +/
    > tar cf archive.tar *

    Знаешь, то что он тебе разъе... систему - к лучшему. Научишься вызывать программы нормально, наконец.

     
  • 2.38, cmp (ok), 16:46, 28/06/2014 [^] [^^] [^^^] [ответить]  
  • +6 +/
    угу, а еще ./*  разворачивается в ./-cheto-tam, то есть высосали из пальца проблему rm -rf *, времен 10-ти летней давности; а еще я читал историю в которой один мальчик набрал по приколу rm -rf * в корневой директории, мама позвола его обедать, а когда он вернулся, то нажал интер, чтобы разбудить комп и все убил;

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

     
     
  • 3.129, vi (?), 00:37, 30/06/2014 [^] [^^] [^^^] [ответить]  
  • +/

    > он вернулся, то нажал интер, чтобы разбудить комп и все убил;

    А почему не <CTRL>+<ALT>+<DEL>?

     

  • 1.14, Xasd (ok), 12:56, 28/06/2014 [ответить] [﹢﹢﹢] [ · · · ]  
  • +12 +/
    mv -t /blahblah -- *

    в чём проблема-то?

    всегда так делаю.. и всегда делал раньше...

    стоило ради этого писать новость?

    вы ещё написали бы новость о том типа "О БОЖЕ, ЕСЛИ НЕ ЗАЭКРАНИРОВАТь В PHP HTML-ВЫВОД ЗНАЧЕНИЯ ПЕРЕМЕННОЙ ТО ПОЛУЧИТСЯ XSS!!"

    ну детский сад же!

    # P.S.: а по теме говоря -- всё идёт из-за непонимания того кто именно обрабатывает этот <*> (его обрабатывает BASH, но кто-то может подумать что это аргумент для mv, по аналогии с Microsoft Windows cmd.exe) .

     
     
  • 2.36, pv47 (ok), 16:33, 28/06/2014 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > стоило ради этого писать новость?

    сугубо имхо, но, думаю, новость неспроста. где-то в недрах redhat планируется защита от таких "уязвимостей". например, перевод всех linux-утилит в стиль а-ля msdos, когда все маски обрабатываются не шеллом перед передачей команде, а самой командой. или вообще, systemd сочли законченным а поттернига занять нечем, и теперь он будет писать замену шеллу, в стиле PowerShell, с защитой от экранирования и пр.

    по сути, аналогия с php на 100% верна.

     
     
  • 3.138, rob pike (?), 05:21, 30/06/2014 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Там всё куда интересней.
    https://lwn.net/Articles/602579
     
     
  • 4.141, arisu (ok), 05:43, 30/06/2014 [^] [^^] [^^^] [ответить]  
  • +2 +/
    > Там всё куда интересней.
    > https://lwn.net/Articles/602579

    когда же он уже уйдёт пилить свой kerneld-то?

     
     
  • 5.144, rob pike (?), 08:54, 30/06/2014 [^] [^^] [^^^] [ответить]  
  • +/
    Одна из главных проблем с Леннартом - в том что все постоянно недооценивают уровень его притязаний.

    Он пойдет пилить только _meta_kerneld.

     
     
  • 6.145, arisu (ok), 09:09, 30/06/2014 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > Одна из главных проблем с Леннартом - в том что все постоянно
    > недооценивают уровень его притязаний.
    > Он пойдет пилить только _meta_kerneld.

    чёрт, да хоть universed, лишь бы побыстрее и подальше…

     
  • 2.146, PnDx (ok), 16:52, 30/06/2014 [^] [^^] [^^^] [ответить]  
  • +2 +/
      Дет.сад для того, кто успел перелопатить гору документации и протоптаться по граблям.
      До сих пор ньюбов тыкают в маны, не обладающие, между прочим, выражаясь на математический манер, ни свойством полноты, ни свойством связности. Редких приличных ресурсов типа xgu явно недостаточно для формирования системного мышления.

      ЧСХ, я тоже начинал с подобных ляпов. Причём, перелопачивание инета зачастую помогает формированию бажного мировоззрения. Чего стоит "#!/usr/bin/env python" в скриптах, потенциально вызываемых из крона (с вычищенным окружением).

     
     
  • 3.152, arisu (ok), 00:35, 01/07/2014 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > Чего стоит "#!/usr/bin/env python"

    вот этого достаточно, в принципе.

     
     
  • 4.157, Crazy Alex (ok), 10:59, 01/07/2014 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Знаешь, если выбирать между шеллом и питоном - то, пожалуй, питон всё же получше. Хоть инструменты приличные есть.
     
     
  • 5.158, arisu (ok), 11:03, 01/07/2014 [^] [^^] [^^^] [ответить]  
  • +/
    а зачем ограничивать выбор только ними двумя?
     
     
  • 6.162, Crazy Alex (ok), 14:36, 01/07/2014 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Хм, логично. Хотя даже в питонине именно для "клея" между вызовами внешнего софта слишком много синтаксиса. Вот одно время был для перла модуль, который пытался все не найденные функции разрешать в вызовы system - примерно такое в питон бы надо. Но там думать и думать, чтобы сделать всё аккуратно.
     

  • 1.26, Психиатр (ok), 14:48, 28/06/2014 [ответить] [﹢﹢﹢] [ · · · ]  
  • +2 +/
    > Специализирующаяся на компьютерной безопасности компания DefenseСode

    так вот где работает КЭП.

     
  • 1.29, pavlinux (ok), 15:07, 28/06/2014 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    > ... и команда выполнена под пользователем root

    Чо, опять рута надо?!

     
     
  • 2.31, Аноним (-), 15:29, 28/06/2014 [^] [^^] [^^^] [ответить]  
  • +1 +/
    >> ... и команда выполнена под пользователем root
    > Чо, опять рута надо?!

    Чтобы запустить бота под твоей учёткой рут нинужно.

     
     
  • 3.35, Аноним (-), 15:55, 28/06/2014 [^] [^^] [^^^] [ответить]  
  • +2 +/
    > Чтобы запустить бота под твоей учёткой рут нинужно.

    А можно мне копию бота "pavlinux"? Он такой клевый :).

     
  • 3.47, Аноним (-), 18:29, 28/06/2014 [^] [^^] [^^^] [ответить]  
  • +/
    Вы еще один ненужный кэп?
    Антивирус попова легко отлавливает таких ботов. Так что это неэффективно, кэп. Я могу написать такой анти вирус, если у вас болит.
     
     
  • 4.80, Аноним (-), 08:20, 29/06/2014 [^] [^^] [^^^] [ответить]  
  • +/
    А вот нас посетил бот Попoва :).
     

  • 1.39, Аноним (-), 17:14, 28/06/2014 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    Проблема из за того как аргументы обрабатывает сам getopt.h и то как они подаются в программу особенно если смешивать с getopt_long. Так как иногда не обязательно передавать полное имя аргумента чтобы он был воспринять программой
     
     
  • 2.53, Аноним (-), 20:20, 28/06/2014 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > "...как аргументы обрабатывает сам getopt.h"

    Красноглазик, getopt.h ничего не обрабатывает. Даже если смотреть на исходники :)

     

  • 1.40, Аноним (40), 17:18, 28/06/2014 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    На самом деле такие атаки вполне применимы на серверах хостинговых компаний. Там очень много скриптов автоматизации. Например такая частая штука как перенос аккаунта с сервера на сервер. Использование chown/chmod/rsync при таких операциях обычное дело и легко можно со стороны юзера инициировать атаку.

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

     
     
  • 2.44, pavlinux (ok), 17:59, 28/06/2014 [^] [^^] [^^^] [ответить]  
  • +/
    Пля, опять не работает. (Debian 6 LTS)
      
    /etc/ssh/sshd_config: line 102: Bad configuration option: ProxyCommand

     
  • 2.60, Xaionaro (ok), 21:26, 28/06/2014 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > На самом деле такие атаки вполне применимы на серверах хостинговых компаний. Там
    > очень много скриптов автоматизации. Например такая частая штука как перенос аккаунта
    > с сервера на сервер. Использование chown/chmod/rsync при таких операциях обычное дело
    > и легко можно со стороны юзера инициировать атаку.
    > Поэтому аргумент, что админу нужно смотреть и думать перед выполнением каждой команды,
    > не состоятелен. Не зная о таких методах атак легко напороться.

    От админа-идиота не спасёт ничего. И не надо портить систему в глазах нормальных админов потому, что админу-идиоту что-то не нравится.

     
  • 2.68, arisu (ok), 01:22, 29/06/2014 [^] [^^] [^^^] [ответить]  
  • +1 +/
    если там админы — дауны, то описаное в новости будет самой маленькой и самой неинтересной из вороха наличествующих там проблем.
     

  • 1.45, Kroz (??), 18:06, 28/06/2014 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    Как от этого защититься?
     
     
  • 2.46, pavlinux (ok), 18:09, 28/06/2014 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > Как от этого защититься?

    никого на сервер не пускать

     
  • 2.69, arisu (ok), 01:23, 29/06/2014 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > Как от этого защититься?

    купить где-нибудь рабочий мозг. или убить себя, это лучше и надёжней.

     
  • 2.110, Алексей (??), 21:50, 29/06/2014 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > Как от этого защититься?

    не использовать маски в шелл-скриптах (а там где нужно через командную строку передавать программе списки файлов - использовать для запуска например find ... -print0|xargs -r0 ..., чтобы ситуации с левыми символами в именах обрабатывались явным образом).
    а при интерактивной работе перед запуском команды маски удобно заменять на конкретные списки (в разных шеллах по-разному, но функция стандартная).

     

  • 1.48, Michael Shigorin (ok), 19:34, 28/06/2014 [ответить] [﹢﹢﹢] [ · · · ]  
  • +4 +/
    Здрасьте, не рассматривалось.  Они тоже вчера родившиеся убунтушники?

    Оригинал текста на http://docs.altlinux.org/archive/2.2/master/devel-html/ch03.html датируется примерно 2001 или 2002 годом, самое позднее.

     
     
  • 2.58, Аноним (-), 21:09, 28/06/2014 [^] [^^] [^^^] [ответить]  
  • +2 +/
    > Здрасьте, не рассматривалось.  Они тоже вчера родившиеся убунтушники?
    > Оригинал текста на http://docs.altlinux.org/archive/2.2/master/devel-html/ch03.html
    > датируется примерно 2001 или 2002 годом, самое позднее.

    Миш, через несколько лет жди новость: "британские учёные обнаружили, что если открыть окно с эмулятором терминала, то А-А-А-А-А СТРАШНО ТУТ ЖЕ МОЖНО ВСЁ СНЕСТИ СЕВ ПОПОЙ НА КЛАВИАТУРУ!!!".

    Ну или что-то в этом духе.

    В общем, береги свой моск, с годами он будет цениться всё больше отнюдь не из-за антикварности. :)

     
     
  • 3.161, Кирилл (??), 14:32, 01/07/2014 [^] [^^] [^^^] [ответить]  
  • +/
    > Миш, через несколько лет жди новость: "британские учёные обнаружили, что если открыть
    > окно с эмулятором терминала, то А-А-А-А-А СТРАШНО ТУТ ЖЕ МОЖНО ВСЁ
    > СНЕСТИ СЕВ ПОПОЙ НА КЛАВИАТУРУ!!!".

    Попой то ладно. Но работа со строкой параметров в интерпретаторах, действительно, безальтернативно опасна: нет выбора между сложным, но безопасным, или простым, но опасным. Эту особенность никак ни обойти, ни нивелировать невозможно. Увы.

     
  • 2.79, RNZ (ok), 05:42, 29/06/2014 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Да. Эти чудеги могли-бы "Advanced Bash-Scripting Guide" почитать, разделы 3 и 9.1.
     
     
  • 3.160, Кирилл (??), 14:28, 01/07/2014 [^] [^^] [^^^] [ответить]  
  • +/
    А вот представьте на секунду, что не только вы знаете об этом гиде. Более того, представьте, что баш не единственный интерпретатор на свете.
     

  • 1.64, Аноним (-), 00:39, 29/06/2014 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    О, УЖАС.

    1. man "--"

    2. Реальные перцы не используют "*".

    /thread

    // b.

     
  • 1.66, arisu (ok), 01:16, 29/06/2014 [ответить] [﹢﹢﹢] [ · · · ]  
  • +3 +/
    молодцы, чо. они, наконец, начали читать unix haters handbook, видимо. там их ещё много чудных открытий поджидает, ждём ещё пачку Ломающих Новостей.
     
  • 1.159, Кирилл (??), 14:17, 01/07/2014 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    Сей факт известен всем, кто хоть немного писал скрипты для bash-а. Проблема в том, что редко в каком языке вообще работа с вводом/вывод лишена такой же уязвимости.
     

     Добавить комментарий
    Имя:
    E-Mail:
    Текст:



    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

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