Перейти к содержимому

Chebuya

Пользователи
  • Публикации

    609
  • Зарегистрирован

  • Посещение

  • Победитель дней

    72

Сообщения, опубликованные пользователем Chebuya


  1. 2 минуты назад, eu_tomat сказал:

    Чтобы отправить оригинальный код, его надо где-то хранить. Все известные мне способы хранения можно либо выявить, либо противодействовать им. А где предлагаешь хранить оригинальный код ты?

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


  2. 30 минут назад, eu_tomat сказал:

    Итак, идея: запрашивать по сети не контрольную сумму EEPROM, а полное содержимое. Чем ответит взломщик?

    Но кто будет запрашивать? Если запрашивать будет сервер, вроде схемы загрузки по сети (потенциально небезопасная EEPROM -> содержимое -> сервер) тогда это не имеет смысла, т.к взломщик может просто отправить оригинальный код.

     

    33 минуты назад, eu_tomat сказал:

    Предлагаю сыграть в игру. Накидывайте возможные варианты защиты, а я скажу как им противодействовать. А можно и наоборот. Главное, сохранить состязательность. Это позволит по-новому взглянуть на старые идеи.

    Первое, что мне пришло в голову - это в целом не давать компьютерам биос, и вставлять еепрому только на этап загрузки системы. Как сказал fingercomp в IRC - просто поставить eeprom в readonly режим, и физически при старте системы просто сверять адреса компонентов. Остальные варианты представить сложно, потому что в основном защита будет строится на обфускации и спагетти-коде.   

    • Нравится 1

  3. Только что, ProgramCrafter сказал:

    Немного не в теме: имеется в виду программная подмена компонента или вставка нового EEPROM?

    И кто должен убедиться в неизменности EEPROM: сам робот/дрон/кто-то там или компьютер, общающийся с ним по сети?

    Fingercomp в IRC уже написал мне об неправильно поставленном вопросе.

    В общем: убедится в неизменности EEPROM должен сам игрок при включении компьютера, на счет подмены: имеется в виду либо вставка нового компонента, либо подмена окружения, либо изменение самого кода eeprom напрямую (впрочем, eeprom можно установить в readonly, но едва ли это поможет, если подменили физический компонент)


  4. 31 минуту назад, Mihis сказал:

    Думаю можно постоянно чекать чексум EEPROM. Если изменилась - значит EEPROM был подменен.

     

    getChecksum():string

    https://ocdoc.cil.li/component:eeprom

    а что если сам component.eeprom был подменен физически? нечему проверять checksum. Нужно как-то "секретно" индицировать, что это наш eeprom, а не EEPROM злоумышленника.


  5. Сидя уже 5 час над этой задачей, адекватных решений не пришло в голову.
    Вопрос таков: каким образом можно обезопасить окружение на уровне компонента EEPROM, например, если нам нужно удостоверится, что текущий component.eeprom не был подменен как и его код? Не думаю, что это может помочь, если злоумышленник достаточно заинтересован во взломе.

    Какие практики первыми приходят в голову? Обфускация кода/держать EEPROM под подушкой? В irc-канале #oc не нашел ничего интересного по этому поводу, поэтому, предлагаю обсудить здесь.


  6. 32 минуты назад, ProgramCrafter сказал:

    Главное, чтобы оператор АЭС не задумал посмотреть что-нибудь на рабочем компе. :)

    Иначе с реактором может случиться бо-ольшой бабах...

    это не проблема "песочницы" непосредственно, TLWY может вылетать просто так, если сервер очень сильно тормозит. К тому же, это не проблема песочницы, а в целом внутриигровой среды OC. С таким же успехом можно запустить while true do end и говорить "а у меня комп сломался!!!".

    • Спасибо 1

  7. 3 минуты назад, eu_tomat сказал:

    А каким образом внутри пользовательского кода OpenComputers можно реализовать механику TLWY?

    Есть блокирующие вызовы, которые не вызывают TLWY, но позволяет в цикле выполнять код без задержки. Насколько помню, код вроде while true do computer.beep() end будет выполняться бесконечно, но мы можем подменить computer.beep на свой, с задержкой.

     

    9 минут назад, eu_tomat сказал:

    И кроме стандартного while true do end можно придумать много других скриптов с тем же эффектом. Как предлагаешь бороться с ними?

    А какая разница, как синтаксически выражен бесконечный цикл? Если компьютер не yield'ится - сам machine.lua выкинет TLWY, который отловится pcall'ом (не всегда, конечно, но в большинстве случаев отлавливается)

     

    11 минуту назад, eu_tomat сказал:

    А в худшем случае лагающий сервер выключит комп раньше. А ещё можно получить бан от админа.

    Как раз поэтому есть TLWY, который поможет избежать выключения компьютера/бана от админа. Если компьютер вообще выключился - это должны были сойти все звезды, не вижу особых проблем. Если говорить о теории, то конечно, абсолютно гарантировать отлавливание TLWY нельзя, но на практике обычного pcall'а достаточно. Сайт этим и так подпортит себе репутацию.

    • Нравится 1
    • Спасибо 1

  8. 1 минуту назад, AtomicScience сказал:

    Ну, это защита не от вредительского кода типа filesystem.delete("/"), а скорее от недостоверной информации и спама. Вдруг кто-то начнет рассылать порно-баннеры, блокирующие компьютер бесконечным циклом?

    сделать внутри песочницы свой TLWY, блокирующие вызовы - подменить, стандартный while true do end отлавливается pcall'ом.

    • Спасибо 1

  9. В 25.02.2021 в 13:25, AtomicScience сказал:

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

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

    • Нравится 1
    • Спасибо 1

  10. 1 минуту назад, Del сказал:

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

    Сейчас я вроде-как сделал сворачивание, а вот разворачивание - уже проблема. То что нужно напечатать - печатается, а консоль(эта штука с /home$) ломает ВСЁ


    можно будет реализовать функции status, например. На слушателях писать не очень удобно.


  11. 14 минуты назад, ECS сказал:

    Хотя это было на старых версиях опеноси, возможно, сейчас что-то фиксанули. Ну и мелочи типа отсутствия глобальных component/computer/unicode, которые опеноська зачем-то скрывает из _G, тоже изрядно напрягали

    это решил я достаточно кардинально

    • Нравится 1

  12. 3 часа назад, ECS сказал:

    Кек, зашибенски. А как ты решил проблемы вылетов подмененного опеносевского computer.pullSignal в песочнице?

    а они должны были быть? прямо openos'овский пуллсигнал внутрь и пробросил..

    • Ха-ха 1

  13. 12 часа назад, ECS сказал:

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

    Скрытый текст

    2021-04-11_20-05-36.gif

    ¯\_(ツ)_/¯

    • Одобряю 1

  14. 5 минут назад, kaka888 сказал:

    Если речь о командах в чате (/msg, /list, /call, /money, /ban и пр.), то не может. Робот может писать в [локальный] чат только ОБЫЧНЫЕ сообщения, ну и, в некоторых случаях, видеть какие команды вводят игроки на всём сервере.

    Чисто технически, если играешь в одиночке/админ на сервере - то вполне реально.
    runCommand(command:string):number, string

    • Нравится 2

  15. 2 минуты назад, eu_tomat сказал:

    @hohserg А что за компонент enderchest_1 присутствует в коде?

    это fallback, на сервере, где играем, почему-то вместо ender_tank пишет как enderchest_1. Так же почему-то напрямую через метод enderchest_1 нельзя узнать количество жидкости, поэтому нужен жидкостный контроллер ¯\_(ツ)_/¯

    • Нравится 1
    • Спасибо 1

  16. В 31.12.2020 в 09:33, Bs0Dd сказал:

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

    В 256 байт умещается ~20 ников средней длины. Вполне себе адекватное количество ников, обычно, в доме не живет больше 4-5-6 человек. Говорю как человек, который делал это: 

     

    • Нравится 1

  17. 15 часов назад, eu_tomat сказал:

    Вероятность спавна дисков с программами в сундуках подземелий задаётся параметром lootProbability в файле конфигурации OpenComputers.cfg. В комментарии к этому параметру также приведены справочные значения для спавна железа, золота и алмазов.

    Самая бесполезная вещь, что можно найти в сундуках. Из ключа и любой дискеты (Например, OpenOS) можно сделать любую дискету. Просто кладем дискету и ключ рядом, и перекрафчиваем до тех пор, пока не будет нужная.

×
×
  • Создать...