run-parts в базовом пакете entware был виде скрипта

Аватара пользователя
ZigZag
Сообщения: 263
Зарегистрирован: 28 окт 2015, 03:43

Сообщение ZigZag » 09 апр 2021, 12:14

Понадобилось мне использовать run-parts и для уточнения деталей вызвал "run-parts --help". Раз вызвал, два вызвал. Молчит и всё тут. Запустил strace на run-parts и стало ясно почему он молчал. Это оказался не бинарник/симлинк, а скрипт run-parts

Код: Выделить всё

#!/bin/sh
#
# runparts.sh by macsat@macsat.com
# intended for use with cron
#
# based on rc.unslung by unslung guys :-)
#
if [ -z "$1" ]
then
echo "Usage : $0 "
fi

RUNDIR=$1"/*"

for i in $RUNDIR ;do

# Ignore dangling symlinks (if any).
[ ! -f "$i" ] && continue

case "$i" in
*.sh)
# Source shell script for speed.
(
trap - INT QUIT TSTP
set start
. $i
)
;;
*)
# No sh extension, so fork subprocess.
$i start
;;
esac
из entware (/opt/bin у меня прописан вначале PATH, т.к. я ему доверял) который на исполнение начал запускать файлы из корня (сам я был в home-директории, глубоко в /data). А в корне c правами +x лежали файлы init* (и в частности /init) которые скрипт отправил на выполнение. Учитывая, что /system у меня был смонтирован в rw для настройки скриптов init.d, которые должен был инициализировать НОРМАЛЬНЫЙ run-parts, лишних седых волос и отложенных кирпичей у меня прибавилось. Пока неизвестно, каковы последствия выполнеия этих скриптов (я процесс остановил на выполнении скрипта /remount.sh, когда на нём strace подвис т.к. судя по всему скрипта не существовало), но после выполнения того, что выполнилось, на экране нарисовался приветственный стартовый экран обнулённого ведра, в /data/data была чистота девственной системы (никаких лишниих приложений). Окончательно потеряв надежду и решив, что всё навернулось я ребутнул смарт (ssh что интересно, продолжал работать, хоть и сыпал ошибками, что не может писать историю туда, куда он ранее её спокойно писал). К счастью, всё осталось на месте (видать на место текущей системы тогда замонтировался блок с чистой версией ведра или типа того). Тем не менее, хотелось бы разобраться, что произошло при выполнении init скриптов и каковы последствия. Для этого я приаттачил /init* файлы и тот strace-лог. Знаю что этого маловато, но у меня самого сейчас плохо получается что-то анализировать после произошедшего. Тем более после произошедшего не по моей вине. Такой подставы я не ожидал. Честно. Я не ожидал, что вместо run-parts будет скрипт. Который вытворит ТАКОЕ.

И сколько там ещё таких скрипто-подарочков вместо бинарей ?

upd: Судя по всему на выполнение из имевшихся в корне +x файлов пошёл только /init. Хотя неизвестно, отработали ли в фоне запущенные ранее до конца копии run-parts или так же залипли при попытке выполнить /remount.sh)
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Последний раз редактировалось ZigZag 10 апр 2021, 03:19, всего редактировалось 1 раз.
Keenetic Omni II [v2.13.C.0.0-1]; Zyxel Keenetic [V1.00(BFW.4.4)D0]

Аватара пользователя
Zyxmon
Администратор
Сообщения: 1858
Зарегистрирован: 09 авг 2015, 14:33

run-parts в базовом пакете entware был виде скрипта. ЗА ЧТО :( ?

Сообщение Zyxmon » 09 апр 2021, 12:36

ZigZag, очень эмоционально и непонятно. run-parts уже 6 лет как скрипт из состава cron - https://github.com/Entware/rtndev/tree/ ... cron/files
Попал туда из Entware-ng/ где так же не менялся 6 лет - https://github.com/Entware/entware-ng-r ... cron/files

Аватара пользователя
Zyxmon
Администратор
Сообщения: 1858
Зарегистрирован: 09 авг 2015, 14:33

run-parts в базовом пакете entware был виде скрипта. ЗА ЧТО :( ?

Сообщение Zyxmon » 09 апр 2021, 12:38

Подозреваю, что так было в optware, откуда он и перекочевал.

Аватара пользователя
ZigZag
Сообщения: 263
Зарегистрирован: 28 окт 2015, 03:43

run-parts в базовом пакете entware был виде скрипта. ЗА ЧТО :( ?

Сообщение ZigZag » 09 апр 2021, 12:47

Zyxmon писал(а):Источник цитаты ZigZag, очень эмоционально и непонятно.
Ну так я думал, что всё навернулось медным тазом. А ближайший бэкап датирован более чем полугодом назад. До сих пор отхожу.
Zyxmon писал(а):Источник цитаты run-parts уже 6 лет как скрипт из состава cron - https://github.com/Entware/rtndev/tree/ ... cron/files Попал туда из Entware-ng/ где так же не менялся 6 лет - https://github.com/Entware/entware-ng-r ... cron/files
Дык я ж не знал этого. У меня там же был нормальный run-parts в составе busybox'a от Стериксона и я было хотел открыть по полному пути, но поленился и поплатился. cron я использовал, да. Но мне было достаточно правок конфигов и переменных и я ни разу не столкнулся с run-parts из entware/optware
Zyxmon писал(а):Источник цитаты Подозреваю, что так было в optware, откуда он и перекочевал.
В любом случае это вылезло мне боком. Хотя к счастью, вроде всё обошлось, но произошедшее и возможные последствия до сих пор неясны. Буду потихоньку разбираться. Возможно мне просто повезло (а может и нет). Укого-то в корне могут оказаться более агрессивные +x файлы, нежели те, что были у меня.

p.s. А что непонятно то ? Запустил run-parts, он начал выполнять файлы из корня. Проскочив файлы без разрешения на вполнение он приступил к +x файлам, первый из которых был /init. Далее init что-то накуролесил, экран подвис, а после я обнаружил приветсвенное окно сброшенного Андроида. Листинг /data/data (ssh продолжал работать) показывал будто систему сбросили.Далее ребут и вроде бы всё на месте (фух).
Keenetic Omni II [v2.13.C.0.0-1]; Zyxel Keenetic [V1.00(BFW.4.4)D0]

Аватара пользователя
Zyxmon
Администратор
Сообщения: 1858
Зарегистрирован: 09 авг 2015, 14:33

run-parts в базовом пакете entware был виде скрипта. ЗА ЧТО :( ?

Сообщение Zyxmon » 09 апр 2021, 19:01

Нужно просто добавить exit после `echo "Usage : $0 "`

PS В Entware не предполагают, что установлен busybox (пакет Entware). Вот то, что в PATH впереди /opt - спорно, обсуждали. Возможно предубеждали о последствиях.
PPS В android я всегда /opt/etc/profile редактирую.

Аватара пользователя
ZigZag
Сообщения: 263
Зарегистрирован: 28 окт 2015, 03:43

Сообщение ZigZag » 10 апр 2021, 03:19

Нужно просто добавить exit после `echo "Usage : $0 "`
Я как бы доступа к репозиториям не имею. Может имеет смысл ТАМ поправить (по хорошему стоило бы этот предохранитель включить в скрипт изначально) ? Если на эти грабли наступил я, высока вероятность, что на них наступит кто-то ещё (или уже наступал, но не оставил багрепорт). А у себя я вчера тупо выставил права "600" на скрипт и пока забыл про него, ибо в от cron'a мне запуск из интервальных папок был не нужен (я их ещё после установки зачистил), а если бы понадобился, я бы его сам через нормальный run-parts реализовал бы.
В Entware не предполагают, что установлен busybox (пакет Entware).
Даже если так, запуск скрипта run-parts, который можно перепутать с одноимённой утилитой может привести к плачевным последствиям.
Вот то, что в PATH впереди /opt - спорно, обсуждали. Возможно предубеждали о последствиях.
Видимо это обсуждение прошло мимо меня. Обычно, если чудила бинарь из entware я просто использовал иную, standalone или из комплекта того или иного busybox. Но чтобы мне вместо привычной бинари попался под руку скрипт, такого ещё не было (как я уже писал выше, такой подставы я не ждал). Это как если бы я рассчитывал забить молотком гвоздь в стену, а вместо этого снёс её т.к. это оказался не обычный молоток, а закамуфлированный молот Тора :lol:

Есть ли ещё где в пакетах подобные сюрпризы со скриптами, дублирующими имена популярных утилит, которые могут выкинуть что-нибудь "этакое" ?

upd: Поправил очепятки.
Последний раз редактировалось ZigZag 10 апр 2021, 11:57, всего редактировалось 2 раза.
Keenetic Omni II [v2.13.C.0.0-1]; Zyxel Keenetic [V1.00(BFW.4.4)D0]

Аватара пользователя
Zyxmon
Администратор
Сообщения: 1858
Зарегистрирован: 09 авг 2015, 14:33

Сообщение Zyxmon » 10 апр 2021, 10:22

На гитхабе исправил, в репу выложил.
Маловероятно, что подобное еще есть - но в /opt/bin и /opt/sbin будет несколько сотен скриптов, если установить все пакеты. Может какой и "вредоносный", дублирующий, если запустить неправильно или без параметров. 99% из них от авторов бинарников.
Вы первый, кто за 10 лет существования Entware обнаружил такое.

Аватара пользователя
Zyxmon
Администратор
Сообщения: 1858
Зарегистрирован: 09 авг 2015, 14:33

Сообщение Zyxmon » 10 апр 2021, 10:24

В optware кстати правильная версия 12 летней давности - https://github.com/Optware/Optware-ng/b ... /run-parts

А вот отсюда (точнее с известного ранее форума asus-wl500) все и было, скорее всего, взято.
https://user.su/system/index.php?id=18
Настройка роутера WL500g Premium

Аватара пользователя
ZigZag
Сообщения: 263
Зарегистрирован: 28 окт 2015, 03:43

Сообщение ZigZag » 10 апр 2021, 12:10

Zyxmon писал(а):Маловероятно, что подобное еще есть - но в /opt/bin и /opt/sbin будет несколько сотен скриптов, если установить все пакеты. Может какой и "вредоносный", дублирующий, если запустить неправильно или без параметров. 99% из них от авторов бинарников.
Ясно. Значит точной информации по этому вопросу нет. Ну да ладно, потом организую чекер, который будет в связке с for'ом, if'ом и hexdump'ом будет проверять содержимое /opt и выяснять бинари или скрипты там лежат и сигналить мне, если там есть скрипт (по каждому персонально). Буду делать прогон после установки каждого нового пакета (да, буду дуть на воду)
Zyxmon писал(а):Вы первый, кто за 10 лет существования Entware обнаружил такое.
Может кто ещё напарывался на такое, но просто не проассоцировал что запуск run-parts мог вызвать подобное (я его с strace'ом после 2-х молчаливых запусков в фоне запустил), а у кого-то он отработал в режиме патча Бармина и владельцу могло быть уже не до разборок, что там к чему произошло :/ Либо как вариант, он просто поленился отписаться.

В любом случае, теперь я буду параноить, всмысле буду осторожней в этом вопросе :lol:
Keenetic Omni II [v2.13.C.0.0-1]; Zyxel Keenetic [V1.00(BFW.4.4)D0]

Аватара пользователя
Zyxmon
Администратор
Сообщения: 1858
Зарегистрирован: 09 авг 2015, 14:33

Сообщение Zyxmon » 10 апр 2021, 12:39

ZigZag писал(а):Источник цитаты Может кто ещё напарывался на такое

На роутерах (в 99% случаев) корневая файловая система readonly. На NAS ах в корне обычно нет исполняемых файлов. На андроиде /system и /vendor по идее почти всегда readonly.
Если вдруг что найдете - пишите.


Вернуться в «Entware на Android»

Кто сейчас на конференции

Всего 0 посетителей :: 0 зарегистрированных, 0 скрытых и 0 гостей (основано на активности пользователей за последние 5 минут)
Больше всего посетителей (162) здесь было 16 ноя 2019, 17:33

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 0 гостей