The OpenNET Project / Index page

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



Вариант для распечатки  
Пред. тема | След. тема 
Форум Разговоры, обсуждение новостей
Режим отображения отдельной подветви беседы [ Отслеживать ]

Оглавление

Атака через подстановку аргументов при использовании масок в..., opennews (??), 28-Июн-14, (0) [смотреть все]

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


6. "Атака через подстановку аргументов при использовании масок в..."  +13 +/
Сообщение от Аноним (-), 28-Июн-14, 11:18 
два минуса придумали как раз для этого, для разделения интерпретируемых аргументов и подставленных имён файлов
Ответить | Правка | Наверх | Cообщить модератору

8. "Атака через подстановку аргументов при использовании масок в..."  +1 +/
Сообщение от Anonymus (?), 28-Июн-14, 11:31 
Всё равно это бага, broken by design по ихнему. Интерпретатор понятия не имеет о назначении аргументов. Правильное решение когда программа сама обрабатывает маски, а не когда приходится вбивать слеш или заворачивать маску в кавычки. И, кстате, в некоторых случаях (а у некоторых -- очень даже во многих) легко напороться на дофига файлов и упереться в ограничение длины командной строки.
Ответить | Правка | Наверх | Cообщить модератору

9. "Атака через подстановку аргументов при использовании масок в..."  +6 +/
Сообщение от Аноним (-), 28-Июн-14, 11:35 
для этого и придумали два минуса, всё что после них обрабатывается как имя файла, а реализовывать один и тот же алгоритм разбора масок в каждой программе достаточно глупо.
Ответить | Правка | Наверх | Cообщить модератору

10. "Атака через подстановку аргументов при использовании масок в..."  –1 +/
Сообщение от Anonymus (?), 28-Июн-14, 12:14 
ага, C startup code в каждой программе вообще глупость, да?
Ответить | Правка | Наверх | Cообщить модератору

22. "Атака через подстановку аргументов при использовании масок в..."  +1 +/
Сообщение от Аноним (-), 28-Июн-14, 14:25 
идиотское сравнение
Ответить | Правка | Наверх | Cообщить модератору

33. "Атака через подстановку аргументов при использовании масок в..."  +5 +/
Сообщение от Аноним (-), 28-Июн-14, 15:52 
> ага, C startup code в каждой программе

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

Ответить | Правка | К родителю #10 | Наверх | Cообщить модератору

42. "Атака через подстановку аргументов при использовании масок в..."  +/
Сообщение от Orduemail (ok), 28-Июн-14, 17:51 
> для этого и придумали два минуса, всё что после них обрабатывается как
> имя файла, а реализовывать один и тот же алгоритм разбора масок
> в каждой программе достаточно глупо.

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

Ответить | Правка | К родителю #9 | Наверх | Cообщить модератору

65. "Атака через подстановку аргументов при использовании масок в..."  –1 +/
Сообщение от Аноним (-), 29-Июн-14, 01:15 
> для этого и придумали два минуса

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

Ответить | Правка | К родителю #9 | Наверх | Cообщить модератору

120. "Атака через подстановку аргументов при использовании масок в..."  +1 +/
Сообщение от Анонимemail (120), 29-Июн-14, 23:28 
> А обрабатывать два минуса в каждой программе, это умно, ага.

man 3 getopt

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

121. "Атака через подстановку аргументов при использовании..."  +1 +/
Сообщение от arisu (ok), 29-Июн-14, 23:32 
>> А обрабатывать два минуса в каждой программе, это умно, ага.
> man 3 getopt

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

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

20. "Атака через подстановку аргументов при использовании масок в..."  +2 +/
Сообщение от Аноним (-), 28-Июн-14, 14:21 
Работа с аргументной строкой как с монолитной raw строкой в принципе 'broken by design', случай с разворачиванием звёздочки только один из подобных негативных сайдэффектов. В нормальной архитектуре чанки аргументной строки должны быть теггированы.
Ответить | Правка | К родителю #8 | Наверх | Cообщить модератору

41. "Атака через подстановку аргументов при использовании масок в..."  +/
Сообщение от Orduemail (ok), 28-Июн-14, 17:47 
Если говорить о linux'е, то ни о каких монолитных raw строках речи не идёт. В помощь вам: man 2 execve.
Затем, правда, мой склероз мне отказывает, и я уже не могу сказать, кто именно заполняет argv[] и envp[] для процесса -- libc или ядро, -- но даже если и libc, то всё равно речь идёт вовсе не о "монолитной raw" строке, но о argz/envz векторах, заботливо положенных ядром на стек. Что, вероятно, можно эксплуатировать, используя то, что символ '\0' имеет особое сакральное значение. Но, глядя на заголовок execve, признаемся себе, что вряд ли.
Так что случай с разворачиванием звёздочки -- это негативный сайдэффект какой-то другой проблемы, и вовсе не фиктивной проблемы каких-то там "монолитных raw-строк".
Ответить | Правка | Наверх | Cообщить модератору

43. "Атака через подстановку аргументов при использовании масок в..."  +1 +/
Сообщение от rob pike (?), 28-Июн-14, 17:54 
Товарищ явно имел в виду что-то типа Windows Shell, чтоб шаг влево-вправо - расстрел.
Ответить | Правка | Наверх | Cообщить модератору

50. "Атака через подстановку аргументов при использовании масок в..."  –1 +/
Сообщение от Crazy Alex (ok), 28-Июн-14, 19:45 
Расстрелом делать не обязательно, но метаинформация - вообще штука хорошая
Ответить | Правка | Наверх | Cообщить модератору

85. "Атака через подстановку аргументов при использовании масок в..."  +2 +/
Сообщение от rob pike (?), 29-Июн-14, 11:18 
Для чего хорошая? В каких случаях хорошая?

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

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

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

95. "Атака через подстановку аргументов при использовании масок в..."  +/
Сообщение от Crazy Alex (ok), 29-Июн-14, 14:54 
Сильно зависит от реализации, конечно, но в общем - Я бы предпочёл для любых случаев иметь формализованный вариант и текущий как фоллбек. Потому что одно дело - быстро наляпать одноразовый скрипт для известных данных, а другое - какие-то долго/часто используемые инструменты или программы со сложным выводом вроде ps.

И, право, я не вижу ничего ужасного в том, чтобы отдавать вывод какого-нибудь PS в формате protocol buffers или аналогичном - с именованными и типизированными полями. И параметры командной строки иметь умные, со стандартно задаваемыми списками значений, без возни с кавычками и апострофами и так далее. А заодно - вместо sh/bash - что-нибудь хотя бы на уровне питона. Ну чтобы хоть арифметика нормальная была, переменные, контейнеры ключ-значение и т.д.

А PowerShell - это всего лищь паршивая реализация, и только. Майкрософт вообще угробила кучу хороших идей убогой релаизацией - хотя бы идею компонентной ОС вспомнить, когда у большинства майкрософтовских продуктов COM-интерфейсы дают все возможности гуя и даже большие - но при этом пользоваться этой мерзостью предельно неприятно. Тужа же - OLE.

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

105. "Атака через подстановку аргументов при использовании..."  +1 +/
Сообщение от arisu (ok), 29-Июн-14, 19:34 
как минимум шелл ты себе можешь заменить на что угодно. знаешь, он ведь не прибит гвоздями к ядру.

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

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

136. "Атака через подстановку аргументов при использовании..."  –1 +/
Сообщение от Crazy Alex (ok), 30-Июн-14, 04:42 
Мне не шелл бы, а соглашение о формате. В идеале - поддержанная на уровне системы метаинформация для пайпов, чтобы реципиент мог узнать хоть что-то о получаемом потоке данных не полагаясь на его контент (который, разумеется, может быть каким угодно). К примеру, уметь устанавливать писателем и получать читателем mimetype или что-о подобное. Дальше - делать форк coreutils, умеющий это дело понимать.

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

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

137. "Атака через подстановку аргументов при использовании..."  +1 +/
Сообщение от arisu (ok), 30-Июн-14, 04:47 
> Мне не шелл бы, а соглашение о формате.

так в чём проблема-то? пишешь библиотеку сборки и парзинга твоего нового формата, пишешь шелл, который её использует — телемаркет! ну, и дальше усердно пишешь обёртки.

но всё это лишнее, на самом деле. по крайней мере, для консоли — лишнее.

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

154. "Атака через подстановку аргументов при использовании..."  –1 +/
Сообщение от Crazy Alex (ok), 01-Июл-14, 10:10 
А теперь расскажи, как мне сделать, чтобы можно было из любого процесса, как-либо оплучившего fd, узнать, в каком формате  через него данные ждать. Ну, то есть можно в /tmp пытаться что-то вроде базы держать, но маразм же. А иначе - смысла не имеет, выдумывать способ детектирования - это нарываться на проблемы.

Что до консоли - я вообще не уверен, что она должна оставаться в нынешнем виде. Зачем нужна текстовая консоль, если везде графические терминалы? А вот иметь не тупой поток байт, а структуру - команды, коды возврата и история их stdin/stdout/stderr по отдельности (и не забываем - этот вывод тоже структурирован, что позволяет, например, сделать разумный фолдинг), те самые шелл-паттерны a-la списки файлов, выбираемые в каком-то своём интерфейсе и отображаемые соответственно, и так далее - было бы куда как интереснее. Например, в половине случаев те же severity levels консольного лога было бы удобнее в консоли обрабатывать, а не в приложении, когда нагрузку лог создаёт малую, а просто вывод флудит. А так - надо - открыл топ-левел, глянул, что нужно, закрыл и дальше смотришь одним глазом на консоль.

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

156. "Атака через подстановку аргументов при использовании..."  +2 +/
Сообщение от arisu (ok), 01-Июл-14, 10:39 
> А теперь расскажи, как мне сделать, чтобы можно было из любого процесса,
> как-либо оплучившего fd, узнать, в каком формате  через него данные
> ждать.

1. уговорить автора использовать твою библиотеку для получения параметров.
2. написать очередную обёртку самому.

> Что до консоли - я вообще не уверен, что она должна оставаться
> в нынешнем виде. Зачем нужна текстовая консоль, если везде графические терминалы?

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

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

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

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

163. "Атака через подстановку аргументов при использовании..."  +/
Сообщение от Crazy Alex (ok), 01-Июл-14, 14:48 
Не, я просто хочу более мощные механизмы. В частности - мне не нравится, что куча инфы безвозвратно теряется при вываливании в байтовый поток, а я потом об это бьюсь, пытаясь понять, где там разделяются поля, где невесть что в имени файла, где формат поменялся потому что локаль не та и где я поставил три, а не четыре бэкслэша и поэтому экранирование кривое. Я, право же, не вижу, чем пачка инструментов, умеющих обрабатывать структуру, хуже такой же пачки, обрабатывающей текст, в который эту же структуру упростили. При том, что если нужен тупой текст, а получил структуру - это делается тривиально, а вот наоборот - шиш.

Мощность и выразительность при этом ни разу не теряются. Простота - сами тулзы (там, где разбор формата) получаются чуть сложнее, зато избавляем пользователя от кучи рутинных проблем и даём новые возможности. А как и насколько использовать эти возможности собственно в шелле/терминале - вот здесь уже дело хозяйское. Хоть вываливай как раньше, хоть делай возможность свертки вывода каждой команды и красивые диалоги выбора файлов - на усмотрение.

Ответить | Правка | К родителю #156 | Наверх | Cообщить модератору

164. "Атака через подстановку аргументов при использовании..."  +3 +/
Сообщение от arisu (ok), 01-Июл-14, 15:00 
хуже в том, что без специнструментов с этими структурами уже ничего не сделаешь. а текст можно руками напечатать и глазами прочитать. поэтому текст — универсален, хоть и немного неудобен временами. а спецструктуры — нет.

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

Ответить | Правка | К родителю #163 | Наверх | Cообщить модератору

165. "Атака через подстановку аргументов при использовании..."  +/
Сообщение от JL2001 (ok), 14-Июл-14, 11:23 
в языках программирования это давно решено через Object.toString() и new Object(string)
не придумывайте граблей там где их нет

дико люто бешено не хватает нормально представления данных в консоли
на работе занимаюсь программированием и башобвязкой своих сервисов

Ответить | Правка | К родителю #164 | Наверх | Cообщить модератору

166. "Атака через подстановку аргументов при использовании..."  +/
Сообщение от arisu (ok), 14-Июл-14, 11:31 
хорошо, что мы никогда не столкнёмся в реале, товарищ Беспроблемный.
Ответить | Правка | К родителю #165 | Наверх | Cообщить модератору

128. "Атака через подстановку аргументов при использовании масок в..."  +/
Сообщение от vi (?), 30-Июн-14, 00:25 

> Майкрософт вообще
> угробила кучу хороших идей

Послушайте Изя, он нас еще и коммерции учить будет ;)

Ответить | Правка | К родителю #95 | Наверх | Cообщить модератору

140. "Атака через подстановку аргументов при использовании масок в..."  +/
Сообщение от rob pike (?), 30-Июн-14, 05:41 
> И, право, я не вижу ничего ужасного в том, чтобы отдавать вывод
> какого-нибудь PS в формате protocol buffers или аналогичном - с именованными
> и типизированными полями.

Теперь смотрим в сторону XML-RPC, и долго думаем почему он таки не взлетел.

> А PowerShell - это всего лищь паршивая реализация, и только.

Нет, не только.

> Майкрософт вообще угробила кучу хороших идей убогой релаизацией - хотя бы идею компонентной
> ОС вспомнить, когда у большинства майкрософтовских продуктов COM-интерфейсы дают все возможности
> гуя и даже большие - но при этом пользоваться этой мерзостью предельно неприятно.

Только если не понимать как она работает и пытаться её использовать через десяток кривых прокладок типа С++ с MFC.


Ответить | Правка | К родителю #95 | Наверх | Cообщить модератору

142. "Атака через подстановку аргументов при использовании..."  +1 +/
Сообщение от arisu (ok), 30-Июн-14, 05:45 
> Только если не понимать как она работает и пытаться её использовать через
> десяток кривых прокладок типа С++ с MFC.

да даже если понимать — это ужас. интерфейсы, которые спрашивают интерфейсы у интерфейсов, и всё это надо руками рефкаунтить, и… и ну его нафиг, такой хлебушек.

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

155. "Атака через подстановку аргументов при использовании масок в..."  +/
Сообщение от Crazy Alex (ok), 01-Июл-14, 10:21 
Он много почему не взлетел. И потому что нефиг совать RPC туда, где должны быть сообщения, и потому что сам формат ужасен и в принципе не пригоден для быстрого обмена, особенно бинарными данными. И вообще XML-RPC - это не о том. Я не предлагаю на всё наклепать жесткие прототипы, а просто если есть в выводе поля - их аннотировать и разделять. То есть прилетает ридеру что-то - он в глаза может формата не знать, но если ему нужно поле "foo" - он смотрит в заголовок, видит, как это поле выгрести из структуры и выгребает. Ничего из возможностей того же grep и прочих утилит это не отменяет, просто избавляет от игр с разделителями, экранированием и тому подобным.


И с COM - та же проблема, что с XML-RPC - чересчур переусложнено, рефкаунтинг, RPC там, где сервер может и не ответить, и так далее.

Ответить | Правка | К родителю #140 | Наверх | Cообщить модератору

167. "Атака через подстановку аргументов при использовании масок в..."  +/
Сообщение от Vkni (ok), 14-Июл-14, 16:53 
> А PowerShell - это всего лищь паршивая реализация, и только.

Нет. Это именно дурная идея. PowerShell стоит на базе .NET'а, система типов которого крайне устарела, и многое не поддерживает. Чтобы заменить bash по удобству, нужно иметь что-то по мощности системы типов не уступающее Хаскеллю. Да и по другим параметрам bash на объектно-ориентированный язык не заменяется.

Ответить | Правка | К родителю #95 | Наверх | Cообщить модератору

61. "Атака через подстановку аргументов при использовании масок в..."  +/
Сообщение от Аноним (-), 28-Июн-14, 21:31 
> Товарищ явно имел в виду что-то типа Windows Shell, чтоб шаг влево-вправо - расстрел.

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

Ответить | Правка | К родителю #43 | Наверх | Cообщить модератору

74. "Атака через подстановку аргументов при использовании масок в..."  +/
Сообщение от Аноним (-), 29-Июн-14, 01:42 
> Товарищ явно имел в виду что-то типа Windows Shell, чтоб шаг влево-вправо - расстрел.

товарищ имел явно в виду только то что написал, а именно речь шла о протоколе передачи аргументной строки. а не о форме реализации ui. PS в этом срезе ничего принципально не меняет.

В реализации к execve() кроме массива строк с аргументами добавляется ещё один массив с тегами, каждый тег чиселка чего-то означающая. По умолчанию все теги RAW, тогда программа должна интерпретировать их как делала это раньше. Кромe RAW могут быть другие хинты типа PATH, OPT, VALUE мб ещё несколько хинтов, много их не нужно. Вот и вся технология теггирования, полностью совместима со старым методом передачи аргументов и даёт возможность новому ПО не натыкаться на типичные проблемы. Это уже ответ на вопрос ниже как бы не поломать гибкость.

Ответить | Правка | К родителю #43 | Наверх | Cообщить модератору

75. "Атака через подстановку аргументов при использовании..."  +/
Сообщение от arisu (ok), 29-Июн-14, 01:59 
опять эти улучшатели… всем лёнины лавры покоя не дают.
Ответить | Правка | Наверх | Cообщить модератору

86. "Атака через подстановку аргументов при использовании масок в..."  +/
Сообщение от rob pike (?), 29-Июн-14, 11:24 
И получится у вас XML-RPC.
Это именно то чего не хватало командной строке, да.
Ответить | Правка | К родителю #74 | Наверх | Cообщить модератору

89. "Атака через подстановку аргументов при использовании масок в..."  –1 +/
Сообщение от all_glory_to_the_hypnotoad (ok), 29-Июн-14, 12:15 
В каком месте это хоть как-то похоже на xml-rpc? Тут, конечно, понятно что ты херню несёшь составленную из незнакомых слов, но может потрудишься хотя бы в википедию сходить и сделать сравнение.
Ответить | Правка | Наверх | Cообщить модератору

72. "Атака через подстановку аргументов при использовании масок в..."  +/
Сообщение от Аноним (-), 29-Июн-14, 01:28 
если говорить о linux и юниксах, где значительная часть операций идёт через шел, то строки именно монолитные и в execve попадают порезанными примерно по пробелам шеллом. Покрути своей невнимательнйо мордочкой вверх и узри что речь идёт о sh.

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

Ответить | Правка | К родителю #41 | Наверх | Cообщить модератору

73. "Атака через подстановку аргументов при использовании..."  +1 +/
Сообщение от arisu (ok), 29-Июн-14, 01:35 
> нет никаких способов защиты от таких распрастранённых ошибок.

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

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

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

76. "Атака через подстановку аргументов при использовании..."  +2 +/
Сообщение от all_glory_to_the_hypnotoad (ok), 29-Июн-14, 02:04 
> это у говнокодеров нет. у остальных нормальных людей есть конвенции по интерпретации параметров и волшебный параметр «--».

обезьяна, ты что такая тупая? '--' всего лишь частный костылик который даже в случае с передачей путей подходит не для каждой команды. И конвенций нигде никаких нет.

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

ну ты то со своей головой дружишь или совсем никак? Если передаёшь какой-то аргумент программе, то должен знать что передаёшь. Хотя бы должен занть что из передаваемого ключи, а что нет. Для хинтов этого хватит.

Если передаёшь аргумент из другой программы, например через execve(), то всегда знаешь как правильно расставить хинты. sh всегда может правильно расставить хинт для подстановки звёздочек и глоббинга. Придумать ui, который сможет догадываться где опции и где нет тоже можно.

Программы с далеко идущими сайдэффектами в свою очередь (rm, например) могут отказываться что-то делать с непроставленными тегами.

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

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

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

77. "Атака через подстановку аргументов при использовании..."  –2 +/
Сообщение от arisu (ok), 29-Июн-14, 02:13 
хм, а раньше ты таким идиотом не был. или маскировался хорошо? in either case: fuck you.
Ответить | Правка | Наверх | Cообщить модератору

78. "Атака через подстановку аргументов при использовании..."  +1 +/
Сообщение от vle (ok), 29-Июн-14, 03:44 
>> это у говнокодеров нет. у остальных нормальных людей есть конвенции по интерпретации параметров и волшебный параметр «--».
> обезьяна, ты что такая тупая? '--' всего лишь частный костылик который даже
> в случае с передачей путей подходит не для каждой команды.

Если разработчик вменяемый, он использует getopt(3) или getopt_long(3).
В обоих случаях наличие "--" гарантировано.
В случае getopt(3) гарантировано по POSIX.

Ответить | Правка | К родителю #76 | Наверх | Cообщить модератору

88. "Атака через подстановку аргументов при использовании..."  –1 +/
Сообщение от all_glory_to_the_hypnotoad (ok), 29-Июн-14, 12:12 
точно прочитал мой коммент прежде чем отвечать?
Ответить | Правка | Наверх | Cообщить модератору

83. "Атака через подстановку аргументов при использовании масок в..."  +1 +/
Сообщение от Anonym2 (?), 29-Июн-14, 10:52 
> если говорить о linux и юниксах, где значительная часть операций идёт через
> шел, то строки именно монолитные и в execve попадают порезанными примерно
> по пробелам шеллом. Покрути своей невнимательнйо мордочкой вверх и узри что
> речь идёт о sh.
> И эта порезка на части для execve() даже при правильном использовании без
> теггирования мало чем помогает. Как правильно выше заметили, вызывающая сторона ничего
> не знает о семантике аргументов (sh или ей аналогичный генератор строк),
> либо легко ошибиться с порядком и кол-вом - нет никаких способов
> защиты от таких распрастранённых ошибок.

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

Ответить | Правка | К родителю #72 | Наверх | Cообщить модератору

107. "Атака через подстановку аргументов при использовании масок в..."  +/
Сообщение от Алексей (??), 29-Июн-14, 21:09 
Так это вызывающие стороны мануал по шеллу не читали, поэтому трудно предсказывать
Ответить | Правка | Наверх | Cообщить модератору

90. "Атака через подстановку аргументов при использовании масок в..."  +/
Сообщение от Orduemail (ok), 29-Июн-14, 13:02 
> если говорить о linux и юниксах, где значительная часть операций идёт через
> шел, то строки именно монолитные и в execve попадают порезанными примерно
> по пробелам шеллом. Покрути своей невнимательнйо мордочкой вверх и узри что
> речь идёт о sh.

Простите, я полагаю порезку "примерно по пробелам" неизбежной. Можно конечно заменить "примерно пробелы" "примерно запятыми", или "примерно точками с запятой", но, по-моему, ничего от этого коренным образом не изменится: процесс парсинга скрипта/командной строки неизбежен. Будем ли мы дополнять его тегированием, или не будем, но резать строку на части всё равно придётся, потому что я вбиваю команды разбивая отдельные части пробелами.

> И эта порезка на части для execve() даже при правильном использовании без теггирования
> мало чем помогает.

Расскажите мне, как вы планируете тегировать поток черектеров проходящий через pipe. Ведь список аргументов может генерироваться сторонним процессом, и передаваться в качестве аргументов целевому. Можно не тегировать pipe, можно просто договориться, что через пайп можно передавать лишь аргументы отличные от опций. Но это тоже ведь не совсем удачно, а если я дополняю в стороннем процессе каждый аргумент опцией-"тегом", поясняющей что это за аргумент? Ну, например, генерирую последовательность: --ifile=a --ofile=b --ifile=c --ofile=d...

Отмечу, что теги придётся уметь хранить и в файле, потому, что создавая список файлов/опций для вызова программы (б.м. многократного), бывает удобно складывать список опций/файлов в файлик, по одной на строке. Отмечу, что механизм тегирования будет необходим в виде самостоятельного механизма, который я, как пользователь командной строки, должен иметь возможность использовать тогда, когда мне это удобно, потому что случается собирать аргументы из данных имеющих строковый или числовой тип. То есть из строк и чисел я хочу получать, по-желанию, имя файла или просто аргумент, так как я захочу, а не так как решит "эвристика" программы, которая будет заниматься тегированием.

В общем я к тому клоню, что если начать тегировать, то кончится это неуёмным использованием xml'я во все щели. Быть может, разработчики-таки придумают свой синтаксис, покомпактнее xml'я, но, боюсь, сильно лучше от этого не станет. От читабельности вывода программ придётся отказаться точно. Может это и к лучшему, но до тех пор, пока вы бестолково рассуждаете о том, как бы было хорошо, если бы кто-нибудь сделал хорошо, оценить ваши идеи мы не можем. Чтобы донести свои идеи до окружающих, надо писать код, вы ведь в курсе этого?

И, между прочим, чтобы решить описанную выше проблему, я могу предложить вам следующий скрипт в cron'е: find / -name '-*' -exec rm -rf -- {} \; Решение половинчатое, правильнее было бы на уровне vfs запретить создание файлов начинающихся с -. Но это уже для тех, кому больше всех надо. Отмечу что такое решение, по сравнению с вашим существенно проще и убивает проблему на корню, а не переносит её в другую плоскость. Создаётся, правда, второстепенная проблема -- невозможность иметь в файловой системе файлы начинающиеся с '-', но это не столь критично, по-моему: мне не приходилось сталкиваться с файлами, чьё имя начиналось бы с -.

Ответить | Правка | К родителю #72 | Наверх | Cообщить модератору

91. "Атака через подстановку аргументов при использовании масок в..."  +1 +/
Сообщение от rob pike (?), 29-Июн-14, 13:35 
> кончится это неуёмным использованием xml'я во все щели

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

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

96. "Атака через подстановку аргументов при использовании масок в..."  –2 +/
Сообщение от all_glory_to_the_hypnotoad (ok), 29-Июн-14, 15:00 
> Будем ли мы дополнять его тегированием, или не будем, но резать строку на части всё равно придётся, потому что я вбиваю команды разбивая отдельные части пробелами.

Ты ничего не разбиваешь пробелами в командной строке, это фикция в твоей голове. Даёшь одну монолитную строчку интерпретатору который решает как её бить на части. Обычно твоя интуитивная фикция совпадает с тем, что делает (ba)sh интерпретатор, но не всегда.

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

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

Всем срать что ты там делаешь у себя в командной строчке. (ba)sh используется для автоматизации различных процессов и большая часть проблем возникает именно здесь, а не у тебя в ручном режиме. Оснвная задача теггированя это дать возможность защиты от ошибок в автоматике.

> Расскажите мне, как вы планируете тегировать поток черектеров проходящий через pipe. Ведь список аргументов может генерироваться сторонним процессом, и передаваться в качестве аргументов целевому.

Я то тут причём? Мне лично до одного места как ты будешь решать эту проблему. Каждый делает всё в меру своего идиотизма. Даже сейчас так никто не делает если хоть как-то обеспокоен проблемами безопасности. В процесс переадются какие-то структруированные, либо скалярные тривиальные, данные на основе которых уже происходит генерация опций.

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

> Отмечу, что теги придётся уметь хранить и в файле, потому, что создавая список файлов/опций для вызова программы (б.м. многократного), бывает удобно складывать список опций/файлов в файлик, по одной на строке.

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

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

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

Например

rm -rf some_path

в теггированном виде будет как

[ ('-rf', OPT), ('some_path', RAW)]

или

[ ('-rf', OPT), ('some_path', VALUE)]

или, если bash сделал свой комплит

[ ('-rf', OPT), ('some_path', PATH)]

или в легаси режиме

[ ('-rf', RAW), ('some_path', RAW)]

> В общем я к тому клоню, что если начать тегировать, то кончится это неуёмным использованием xml'я во все щели. Быть может, разработчики-таки придумают свой синтаксис, покомпактнее xml'я, но, боюсь, сильно лучше от этого не станет.

у вас в голове всё смешалось в одну кучу. Прежде чем рассуждать нужно разобраться где есть что.

> И, между прочим, чтобы решить описанную выше проблему, я могу предложить вам следующий скрипт

это не решение, это последние беспомощные вопли утопающего.

Ответить | Правка | К родителю #90 | Наверх | Cообщить модератору

98. "Атака через подстановку аргументов при использовании масок в..."  +/
Сообщение от Orduemail (ok), 29-Июн-14, 16:14 
> Немного отхотя от темы замечу, что у шелла есть достаточно данных для
> анализа вводимой строки и теггирования её частей. Например, шелл всегда знает
> что является результатот глоббинга, знает через autocomplete что ожидается в какой-то
> позиции - через свою же подстановку путей или через вспомогательный скрипт,
> который делает некий синтаксический разбор и уже имеет теггированные части.
> Всем срать что ты там делаешь у себя в командной строчке. (ba)sh
> используется для автоматизации различных процессов и большая часть проблем возникает именно
> здесь, а не у тебя в ручном режиме. Оснвная задача теггированя
> это дать возможность защиты от ошибок в автоматике.

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

1. Как это связано между собой?
2. Вы не думали о том, чтобы заменить для себя sh на что-нибудь другое. На python/ruby/php... На что-нибудь, что позволит вам при написании автоматизирующих скриптов, использовать более удачный интерфейс, который сможет исправлять недостатки? По-моему, это было бы правильно, ведь sh, всё же, не зря сокращение от shell -- это, в первую очередь, интерактивная командная строка.

>> Расскажите мне, как вы планируете тегировать поток черектеров проходящий через pipe. Ведь список аргументов может генерироваться сторонним процессом, и передаваться в качестве аргументов целевому.
> Я то тут причём? Мне лично до одного места как ты будешь
> решать эту проблему. Каждый делает всё в меру своего идиотизма.

Тогда поясните цели, которыми вы руководствуетесь, выступая здесь.

>> Отмечу, что теги придётся уметь хранить и в файле, потому, что создавая список файлов/опций для вызова программы (б.м. многократного), бывает удобно складывать список опций/файлов в файлик, по одной на строке.
> Аналогично, фантазии гогнокодера нет предела. Нормальные люди в файлах хранят структруированные
> данные на основне которых можно генерировать аргументы.

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

>> я, как пользователь командной строки, должен иметь возможность использовать тогда, когда мне это удобно, потому что случается собирать аргументы из данных имеющих строковый или числовой тип.
> Уже выше писал как это работает. Теги это хинты назначаения частей строки,
> не знаю почему вдруг у вас голове они стали типами.

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

> Легаси код, или в случае невозможности проставить тег, ставит неопределённый тег RAW.

Это понятно. Но было бы неплохо, если бы хотя бы что-нибудь гарантированно имело бы тег, отличный от RAW. Например, чтобы опции команды, гарантированно имели бы тег OPT. Иначе какой смысл во всём этом тегировании?

>> В общем я к тому клоню, что если начать тегировать, то кончится это неуёмным использованием xml'я во все щели. Быть может, разработчики-таки придумают свой синтаксис, покомпактнее xml'я, но, боюсь, сильно лучше от этого не станет.
> у вас в голове всё смешалось в одну кучу. Прежде чем рассуждать
> нужно разобраться где есть что.

Несмотря на это ваше заявление, я всё же остаюсь при мнении, что вы не представляете себе проблему во всей её сложности. Вы понимаете, что для решения вашей проблемы, придётся заталкивать в язык шелла типизацию? То есть, переменные типа RAW, хранящие строки неопределённого назначения, переменные типа OPT, в которых идёт накопление опций для команды, которая будет запущена ниже. Заодно уж тогда, придётся завести переменные типа INT, и пр, дабы получив себе геморрой связанный с типизацией, иметь возможность извлечь из него максимум удобств. Опять же возникает вопрос: может вы используете не тот инструмент, для решения задач? Может на самом деле, взять python и написать в нём целый API заменяющий вызов system, который будет реализовывать эти самые типы данных, и по типам раскидывать опции и не-опции в командной строке так, чтобы запускаемая программа не путалась бы в соплях?

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

Обоснуйте.

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

49. "Атака через подстановку аргументов при использовании масок в..."  +/
Сообщение от Crazy Alex (ok), 28-Июн-14, 19:44 
Проблема в том, чтобы получить с правильной архитектурой ту же простоту... А так - согласен, парсинг текста - хороший фоллбек, но в большинстве случаев что-то более структурированное было бы неплохо иметь.
Ответить | Правка | К родителю #20 | Наверх | Cообщить модератору

67. "Атака через подстановку аргументов при использовании..."  +/
Сообщение от arisu (ok), 29-Июн-14, 01:19 
> И, кстате, в некоторых случаях (а у некоторых -- очень даже
> во многих) легко напороться на дофига файлов и упереться в ограничение
> длины командной строки.

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

Ответить | Правка | К родителю #8 | Наверх | Cообщить модератору

109. "Атака через подстановку аргументов при использовании..."  +/
Сообщение от Алексей (??), 29-Июн-14, 21:38 
ну во-первых не 32кб, реально можно столько использовать, на сколько памяти хватит. это вполне удобным бывает (чисто практически, а то что изначально механизм не предназначен был для больших объемов - так это эстетство уже).
Ответить | Правка | Наверх | Cообщить модератору

112. "Атака через подстановку аргументов при использовании..."  +/
Сообщение от arisu (ok), 29-Июн-14, 22:05 
реально это зависит от многих факторов, включая то, какой shell используется. на современных GNU/Linux с bash 32 килобайта точно пролазит, поэтому я взял это как минимум.
Ответить | Правка | Наверх | Cообщить модератору

125. "Атака через подстановку аргументов при использовании..."  +/
Сообщение от Алексей (??), 30-Июн-14, 00:03 
лимит - четверть максимального размера стека (RLIMIT_STACK), гарантируется не менее 128кб, по дефолту мне везде попадалось 2мб (макс. память, занятая аргументами execve, включая env). но это искуственное ограничение, в баше достаточно сделать ulimit -s unlimited, и пролезет столько, сколько памяти хватит. и сами данные не в стеке находятся (ограничение на аргументы ставится для того, чтобы обеспечить выделение памяти под стек).
Ответить | Правка | Наверх | Cообщить модератору

132. "Атака через подстановку аргументов при использовании..."  +/
Сообщение от arisu (ok), 30-Июн-14, 01:15 
про shell тактично не заметил?

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

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

134. "Атака через подстановку аргументов при использовании..."  +/
Сообщение от Алексей (??), 30-Июн-14, 02:23 
так shell сам не ограничивает длину, ограничивает ядро.
и если уж старперствовать по-полной, то лучше ограничиться 4кб :)
Ответить | Правка | Наверх | Cообщить модератору

135. "Атака через подстановку аргументов при использовании..."  +/
Сообщение от arisu (ok), 30-Июн-14, 02:42 
> так shell сам не ограничивает длину

lolwut?! O_O

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

149. "Атака через подстановку аргументов при использовании..."  –1 +/
Сообщение от all_glory_to_the_hypnotoad (ok), 30-Июн-14, 22:47 
>  и сами данные не в стеке находятся

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

Ответить | Правка | К родителю #125 | Наверх | Cообщить модератору

93. "Атака через подстановку аргументов при использовании масок в..."  +1 +/
Сообщение от анон (?), 29-Июн-14, 13:45 
это "broken by design" обсуждается с конца 80-х и есть антидоты.

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

Ответить | Правка | К родителю #8 | Наверх | Cообщить модератору

147. "Атака через подстановку аргументов при использовании масок в..."  +/
Сообщение от Андрей (??), 30-Июн-14, 19:56 
> Правильное решение когда программа сама обрабатывает маски

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

Ответить | Правка | К родителю #8 | Наверх | Cообщить модератору

153. "Атака через подстановку аргументов при использовании..."  +2 +/
Сообщение от arisu (ok), 01-Июл-14, 00:41 
>> Правильное решение когда программа сама обрабатывает маски
> Ну, т.е. как когда-то в DOS.

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

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

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

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

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

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




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

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