Как стать автором
Обновить

Комментарии 100

Те, кто знает формат uue сразу заподозрит неладное. Так же, как и с base64.

Только вот тех кто знает про base64 в сотни или даже тысячи раз больше тех кто знает uue.
Поколение ФИДО не такое уж и маленькое: в конце 90-х в России еще было полно активных нод. Сомневаюсь, что разница в 3 порядка.

Разница даже больше.

Предлагаю перейти от обоюдных удтверждений а-ля «нутром чую» («Они не смогли ответить на вопрос Корнеева, каков физический смысл понятий „нутро“ и „чуять“, но подчеркнули, что Янус сам по себе представляет любопытнейший объект для исследования и что яблочко от яблони далеко не падает.» (с)) к реальным цифрам :) Для начала определимся с возрастом. В 1999 году в Москве еще было полно реально работающих нод, а к 2010 я о них уже не слышал. Далее волюнтаристки возьмем нижний возраст в 15 лет. Иными словами считаем, что если человек пришел в ФИДО в возрасте 15 лет и старше, то он помнит о UUEEncode / UUEDecode и даже как скачать видео в UUE на скорости 14400 через HST, а если младше или вообще не был в ФИДО, то не помнит. Соответственно тем, кому в 2000 было 15 лет, сегодня 36 лет и более, и они знают о UUE, те кто младше, не знают.
Теперь нам нужны данные по возрасту. И они у нас есть! Не конкретно по России, но есть. Вот здесь в исследовании участника Хабра приведена возрастная статистика StackOverflow
habr.com/ru/post/121830
А здесь сырые данные, на которых базируется исследование (линк из статьи)
spreadsheets.google.com/a/knego.net/spreadsheet/ccc?pli=1&hl=en_GB&key=tMbiortRI3It3qCitDBZEvA&hl=en_GB#gid=2
90-летних айтишников в количестве 34 штук отбрасываем как нерелевантную величину. Скорее всего это те, кто не захотел указывать свой возраст. Далее просто суммируем возраст из таблицы до 36 лет и после 36 лет. Получаем:
— количество участников младше 36 лет — 35929
— количество участников старше 36 лет — 1185
Разница, соответственно, в 30.31 раза. Т.е. меньше чем на два порядка. Да, много, но ни о какой разнице в сотни, а тем более тысячи и более (как вы удтверждаете) раз речь не идет.
Разница соответственно в 30.31 раза. Т.е. меньше чем на два порядка. Да, много, но ни о какой разнице в сотни, а тем более тысячи и более (как вы удтверждаете) раз речь не идет.
Так это при том, что вы заменили исходное «знает uue» на ваше «знает о uue» :)
Я вот о uue в общем-то знаю, и помню, что лет 15 назад что-то ююками получал и как-то их раскодировал. Но вот какие там допустимы символы — понятия не имею. В то же время с base64 все проще: буквы + цифры — это 62 символа. Даже с учетом того, что я опять же не помню все вариации base64 и то, какие именно там символы допустимы, все равно легко можно понять, что если в строке более двух других символов (помимо буквоцифр), то это не base64.
ак это при том, что вы заменили исходное «знает uue» на ваше «знает о uue» :)

Я, вероятно, не совсем понятно сформулировал. Под «Знает UUE» я понимаю, что человек знает о таком способе кодировки и понимает, что под внешне непонятной абракадаброй кроется что-то осмысленное. Не конкретные детали стандарта UUE, а, что если такой человек видит абракадабру и рядом буквы UUE, то у него возникнет идея, что это что-то в UUE кодировке, и это надо раскодировать. Если же человек не имеет представления о UUE, то скрытом за абаракадаброй значении он не подозревает, и далее все будет развиваться по запланированному автором статьи сценарию. Поскольку в ФИДО UUE было основным способом передачи бинарников через сообщения, я сделал допущение, что те, кто там был, о UUE точно знают, а те кто там не был, вероятно не знают. Далее я просто посмотрел распределение тех, кто был по возрасту в ФИДО, и кого там не было. Соотвественно получилось соотношение количества тех, кто не поймет, в чем тут подвох, к количеству тех, кто поймет, в чем тут дело.
человек знает о таком способе кодировки и понимает, что под внешне непонятной абракадаброй кроется что-то осмысленное. Не конкретные детали стандарта UUE
Так в статье ровно про это и написано :) Что если человек не знает детали стандарта, то он не увидит, что на самом деле это вовсе не uue, и ничего осмысленного (для uuencode) там нет. То есть он как раз и не поймет, в чем тут подвох, если деталей стандарта не знает :)

Да там стандарта-то полстраницы стандартного машинного текста! Помню, когда ещё не появились автопарсеры UUE-эх, писал на паскале собственный парсер, собирающий файлы из пронумерованных сообщений (объединял по сабжу, не обрабатывал возможные дупы и неправильную сортировку, зато обрабатывал — отбрасывал — ответы на сообщения). Примерно такой же base64, только с более широким словарём (или "букварём"?), и уж мягкого апострофа там точно быть ну никак не может ;-)

А заодно сделали допущение, что 100% подходящих по возрасту людей были в ФИДО (я подхожу, но не был).
Я почти подхожу, но про фидо только слышал, мой отец точно подходит под фидо, но он скорее всего даже не слышал. Хотя с компьютером почти с рождения общаюсь
Я подхожу по возрасту, был в ФИДО, но про UUE если и знал, то к текущему времени напрочь забыл о его существовании.
Хотя 2:461/91.20 накрепко засело в памяти. :))
Я тоже ;).

У меня, например, не было ни телефона, ни компьютера в те времена.
А когда всё это появилось (2001 год), то был уже модемный интернет.

90-летних айтишников в количестве 34 штук отбрасываем как нерелевантную величину. Скорее всего это те, кто не захотел указывать свой возраст.


У меня есть знакомый айтишник-железячник 70 с лишним лет от роду.
И он все еще продолжает активно работать.
В свое время он был молодым специалистом и у него были наставники из предыдущего поколения :)
Так дело как раз в том, что 70-летние, 71-летние и так далее там есть, но <10 человек каждого возраста (последний, где больше, это 61). А потом 34 90-летних и 139 91-летних.
Я имел в виду, что 90 -летние атишники вполне могут существовать, так как им в 50х было всего по 20...30 лет.
Конечно, могут. Но в той базе их должно быть 1-2, в крайнем случае 5-6. Т.е. строго говоря отбросив их всех, автор комментария неправ, но большую часть отбросить нужно.
Далее просто суммируем возраст из таблицы до 36 лет и после 36 лет.
Возраст сам по себе не показатель.
Я вот во второй категории, почти 40, но о ФИДО только слышал, в живую никогда не видел.
И из моих знакомых ровесников лично ни от кого не слышал, чтобы он пользовался ФИДО.
Соответственно тем, кому в 2000 было 15 лет, сегодня 36 лет и более, и они знают о UUE, те кто младше, не знают.

Мне в 2000 было 14 лет. И из моих одноклассников компьютеры были у 3 человек из 30, не говоря уж про интернет. Его тогда не было у большинства из тех, у кого были компьютеры. Так что ваш результат можно спокойно умножать на 30, не погрешив против истины. Потому что в те годы компьютер был роскошью, и чисто по возрасту считать некорректно.

Ну, ФИДО !== Интернет, но тут такое дело…
В целом, для ФИДО желательна была всё-таки линия связи (впрочем, без неё тоже можно было, но уже в формате извращений), а с телефонными линиями тогда тоже были проблемы.
Это сейчас за день придут Интернет подключат, а тогда годами ждали очереди на подвод телефонной линии от АТСки, и хорошо если она была не блокированная с соседями по площадке (которые тоже стояли в очереди).
тогда годами ждали очереди на подвод телефонной линии от АТСки

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


Я к тому, что надо не только популяцию считать, но и учитывать крайне низкое проникновение компьютерных технологий в то время. Доступность сильно возросла где-то к 2005 году, но тогда уже были в моде ICQ, веб-чаты, форумы.

В целом, для ФИДО желательна была всё-таки линия связи

Для интернета тогда тоже нужна была линия связи. Интернет у подавляющего большинства в около 2000 годах был диалап
Для начала определимся с возрастом. В 1999 году в Москве еще было полно реально работающих нод, а к 2010 я о них уже не слышал. Далее волюнтаристки возьмем нижний возраст в 15 лет


И они у нас есть! Не конкретно по России, но есть. Вот здесь в исследовании участника Хабра приведена возрастная статистика StackOverflow
habr.com/ru/post/121830


Вот только ФИДО в России появилось позже, чем зарубежом. И история немного отличается из-за факторов более серьезного отношения к легальности софта ранней монетизации различных сервисов (что у нас началось гораздо позже), поэтому переходили дольше и могли знать больше.
Сколько там было народу в том ФИДО?

Я, например, прошел мимо ФИДО стороной и почти не заметил, хотя еще в 1988 собралспаял свой первый компьютер и от ИТ тематики не отходил до сего момента.

А вот «молодежи» 2000+ сейчас в сети и тут на хабре — уже огромные толпы.

Напомнило анонсы в ФИДО: "Собирайтесь дети в кучу, я вам чучу заюючу"

и более злой вариант — «собирайтесь хабы в кучу, щас я своп вам заюючу» — вылезжий уже когда половина народа ушла в IP, и кинуть пару сотен мегов перестало быть проблемой.
Нод и сейчас довольно много. ФИДО живо!
over internet
Фидо в том виде, в котором оно есть сейчас, не имеет особого смысла…

Я вот только после этой статьи узнал, что есть такой формат


Кстати исследовать команду пробовал, но лениво. Я обычно догадываюсь, что обманка может быть с двойным дном и обычно не запускаю ничего на полезных машинах. Вот сейчас попробовал раскодировать в онлайн-декодере. Но UUE оказался невалидный, и я решил читать статью дальше :)


Надо подумать, можно ли как-то пошутить над теми, кто раскодирует онлайн…

То есть наличие eval вас не смущает ?

Если вы читали статью, то должны понимать, что eval тут просто в качестве наживки, а бомба заключается в наличии символов ` ` внутри строки аргумента.
Бывают и такие люди которые делают
wget xxx | bash
и они называют это devops
Если это с проверенного сайта, то да.
Или по вашему я должен параноидально проверять каждый установочный скрипт?
ну, прочесть содержимое и/или запустить на виртуалке не помешает.

А если не понимаешь "эту тарабарщину", а софт нужен?
Что запуск в виртуалке покажет? Писюны на всю консоль что ли ?

А чем это отличается от запуска программы без исходников? Или даже программы с исходниками, но которые вы не читали?

Потому что программы появляются не из ниоткуда. Скажем, репозиторий дистрибутива содержит программы, проверенные мейнтейнерами.
Другое дело скрипт, который непонятно кем и как написан и где выложен.

Поэтому предыдущий комментатор и сказал — с проверенного сайта. Разницы абсолютно никакой. Плюс, спрятать в shell-скрипте что-то вредоносное тривиально, а обнаружить это — совершенно нет.
Ну вот недавняя статья
habr.com/ru/company/macloud/blog/551990
Все 7 инсталлов предлагают загрузить мне некий sh и запустить его от рута.
Казалось бы, проверь домен, и если ты ему доверяешь — то все ок.
Проблема в том что в 6 из 7 случаев скрипт предлагалось грузить через голый http.
В общем страдает тут безопасность, даже при FQDN, которому вроде как можно доверять
Всё верно. Но всегда, в любом случае, всё сведется к доверию истончику. Я бы не доверял источнику с http)

Разница — в проверке подписей при установке из репозиториев. И это ключевое отличие.

Не особо. Авторство даёт очень мало гарантий. Вы не знаете как этот бинарник собирался (привет магический CI). Слово «сайт» очевидно подразумевает не домен, и его следовало бы заменить на «источник».

Если это инструкция установки с офф сайта, разве есть разница в выполнении этого или скачке бинарника? В обоих случаях то, что происходит не совсем контролируемо.

Уж колько раз бывали взломаны всякие «проверенные сайты™». Нет. Народ жизнь видимо не учит.

Раз взломаны были, значит могли и бинарники подменить, и в исходники влезть, и сертификаты угнать. Так что срочно форматировать диск, перечитывать исходники и собирать все с нуля от начала и до конца, никакого доверия.
Компилятор, очевидно надо тоже писать самому. И в процессорах тоже существуют проблемы разного характера, так что луче бы кремний самостоятельно добыть, очистить и т.д.

Вы, вероятно, про Thompson Hack

А еще есть люди которые запускают (О БОЖЕ) exe скачанные с "яндекса" по ссылке "бесплатно без смс".

Нет, ну что вы, так же ничего не получится. Правильно так:
wget xxx | sudo bash

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


Вот так правильно:


sudo wget xxx && sudo chmod 777 xxx && sudo ./xxx

Но на этом проблемы могут не закончиться. Бывает ведь что при подключении к хосту выскакивает надоедливая ошибка про невалидный TLS сертификат. Поэтому совсем надёжным будет такой способ запуска программы установки:


sudo wget --no-check-certificate xxx && sudo chmod 777 xxx && sudo ./xxx

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

Да, действительно, ошибочка вкралась, надо юзать курл:
curl -s xxx | sudo bash
Не совсем, как в лучших рекомендациях, конечно, но зато место на фс не нужно будет.

Когда у вас весь рабочий хард бекапится каждую ночь, можно что угодно запускать и как угодно. И вообще цена любой ошибки максимум пара часов.
На современных линуксах systemd маунтит прошивку биоса как часть файловой системы. Из-за чего rm -rf /* сделает из вашего компьютера тыкву.

Скорее всего вы что-то путаете.
Файлы прошивки BIOS не должны монтироваться, более того это адресное пространство должно быть недоступно в пространстве пользователя операционной системы.
Возможно вы имели ввиду монтирование переменных EFI в директорию sys. Но тут тоже, согласно UEFI спецификации, затирание этих переменных не должно быть критическим и при следующем запуске должны установиться значения по умолчанию.
Я в курсе, что был какой-то случай на компьютерах MSI, когда затирание переменных EFI приводило к краху, но это частный случай и ошибка разработчиков прошивок для компьютеров MSI.
Но мне кажется, что вышеобозначеная команда даже не дойдёт до директории sys, а споткнётся о невозможности удалить белочные устройства в /dev. Кроме этого может рано или поздно возникнуть ошибка ядра и далее не удасться породить новый процесс. Дальше только hard reset.
Поэтому ничего опасного, кроме удаления пользовательских файлов эта команда делать не должна.

Да, за давностью лет уже запамятовал конкретику. В любом случае rm -rf людям кирпичил ноутбуки:
github.com/systemd/systemd/issues/2402
poettering commented on 1 Feb 2016
To make this very clear: we actually write to the EFI fs in systemd. Specifically, when you issue «systemctl reboot --firmware» we'll set the appropriate EFI variable, to ask for booting into the EFI firmware setup. And because we need it writable we'll mount it writable for that.

Ну и ещё всякая мелочь, типа денег со счёта банка, данные карточек, и прочие безделушки :)

Это очень удобно, кстати. Особенно для скриптов, устанавливающих в систему ноду ботнета, например. Будет бекапиться каждую ночь и восстановится если какой-то шутник вдруг пришлёт очередной rm -rf /*

Даже зная про ююки, ' с ` можно по невнимательности и попутать. А если не попутал, то и про ююки можно не знать :)

Какие это трюки? Штатные вещи ж абсолютно. Любой админ это знает.

Сразу видно человека, не заставшего UUE :)

Не трюки, а ююки! ;)
Так в том-то и дело, что там не в UUE и не в base64 дело, это все обманка.
Весь секрет в ``
Да понятное дело. Обманка с UUE, потому что base64 со спецсимволами — это сразу очевидная какая-то фигня, а в UUE их полно, особых подозрений с первого взгляда не вызывает. Да и ` в UUE иногда может быть как padding. Тем более, что UUE сейчас видишь редко — начинаешь вспоминать, ага, вот там такое может быть, и размышляя про uue можно и забыть про бэктики в контексте шелла. Социнжиниринг этакий :)

Оно бывает raw без begin — вполне передавали файлы и так (я даже публиковал у себя так что-то короткое бинарное в ЖЖ когда-то), разве что ключик надо указать (на невнимательность/версию утилиты). А набор символов вполне UUE-шный. Для того, кто UUE пользовался минимум несколько лет назад, никаких подозрений.

Что-то я не понимаю, каким образом получится «проучить». Если человек сам умеет писать такие бомбы, то, думаю, ему хватит разума не запускать подобный код, какие бы там способы обертки не использовались. Ну а если это просто копипастер, то для него что первый вариант, что второй — одинаково непонятный.
А эту ловушку и не нужно запускать «как есть».
Если человек пытается отреверсить код, он в первую очередь попытается модифицировать его так, чтобы выяснить, что же там такое будет eval-иться. И вот при попытке это выяснить ловушка и сработает.
А можно для догоняющих среди отстающих не членов профсоюза подробно пояснить, что где чего значит? Пожалуйста.
Скрипт запускает форк-бомбу. Которая медленно, но верно вешает систему.
По ссылке на SuperUser подробно объясняется. В строку запрятана исполняемая подстрока `r()(r&r); r`, где определяется и запускается функция r, которая запускает саму себя и так дальше рекурсивно. Всё остальное для отвлечения внимания.
В строку запрятана исполняемая подстрока `r()(r&r); r`
Даже не знал, что такое бывает.
Когда я учился, у нас был класс из «троек», которые работали в основном под досом. Но один преподаватель внедрил туда Линукс и проводил на нём занятия. Он очень этим гордился и подчёркивал безопасность и защищённость Линукса. Рутовских прав студентам, разумеется, не давали.

Раз говорят, что защищено — то надо испытать! Пишу программу на C: while(1) fork(); Запускаю. Компьютер замедлился и постепенно завис, потом начали появляться предупреждающие надписи от ядра. Преподаватель долго просил не нажимать ресет: «Система справится с этим». Не справилась. Минут через 15 пришлось нажать. Преподаватель очень обиделся. Не рекомендую повторять.

Потом он квоты на процессы поставил или что-то ещё сделал, что форк-бомба уже не убивала компьютер.
limits он настроил, которые чуть ли не старше чем сам линух.
А дефолтных ограничений почему не хватало?
Так то и вправду странно что от простого пользователя можно убить систему форками.
так дефолты скорее всего unlimited…
А какой тогда в них смысл? Обычно они выставлятся в дефолте на некоторый уровень разумности который потом можно адаптировать по месту.
Хотя если рассказ о временах 90 годов, то тогда линукс без напильника просто был нерабочий из коробки.

Гляну на ulimits на проде и потупив глазки промолчу...

Это был, скорее всего, 1998 или 1999г.
Скажу более, в те времена (начало 90-х) в дистрибутиве линукса рутовый пароль был не то пустой, не то какое-то well-known слово, и в моё самое первое знакомство с линуксом какой-то «добрый человек», пользуясь этим, меня проучил: Я скачал образы нескольких дискет bootstrap'а, установил их, запустил инсталятор качать (по модему 14400(!)) и ставить остальной софт, а сам тем временем погрузился в эксперементы с командной строкой. Каково же было моё удивление, когда у меня не запустилась какая-то тривиальная команда типа ls, а диск затарахтел громче обычного… через некоторое время установка прервалась, а на диске не осталось практически ничего :( Пока я ставил linux, меня вычислили, зашли рутом, и запустили rm -rf /
В 2000м такая история пробегала: юный хакер зашёл в чат и стал хвастатья, что может завалить компьютер любого присутствующего, дайте ему только IP-адрес.

Кто-то дал ему адрес 127.0.0.1. Через пару секунд хакер ушёл в оффлайн. Снова появился, жалуется: что-то у него компьютер неожиданно сбился, но сейчас он точно взломает компьютер жертвы! И опять ушёл в оффлайн. Так повторялось несколько раз.

Я думал, это шутка, и рассказывать эту историю как будто она была взаправду несерьёзно.

Роскомнадзор об этой истории не знал до тех пор, пока не учинил холокост локалхоста.

Ну, 127.0.0.1 — это совсем очевидно. Чтобы охватить более широкую аудиторию, можно использовать адрес типа 127.194.221.93. Это притупит внимание, и человек может не заметить, что первый октет = 127.

боян с башорга?
Команда :(){ :|:& };: из КПДВ что-нибудь значит? На случайные символы не похоже.

Значит. Двоеточие в ней — имя функции. Можно заменить его на "r" и получится то же, что и в статье.

А вот в zsh подсветка синтаксиса от такого спасает.

Спасает. Очень полезная фича. Иллюстрация скриншотом, пожалуй, не помешает.


20210430-120527
zsh, powerlevel10k, zsh-syntax-highlighting, KDE/Konsole

Есть ещё вариант
0%0
Разве его не проще обфусцировать похожим образом?

Теперь надо придумать такую команду, которая бы обманывала тех, кто обманывает обманщиков

Не могу понять синтаксис использованной конструкции

r() ( commands )

Не ясно, почему вторая пара скобок тоже круглые
В баше синтаксис объявления функции имеет вид

function_name () { commands }

Т.е. вторые скобки должны быть {}
Но тем не менее, конструкция работает.

Там может быть любая блочная конструкция {}, (), циклы, if


r () while true; do echo 7; done; # тоже валидное объявление функции
Спасибо, ясно
Поэтому я нередко прописываю в etc/security/limits.conf строку
* soft nproc 1024
Интересная статья.

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