3D Печать со злым умыслом

У меня есть несколько странная просьба. Я изучаю уязвимость 3D-принтеров и хотел бы знать, есть ли способ отключить концевые выключатели, например, Ender 3 в G-коде.

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

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

, 👍6

Обсуждение

Вы проводили фундаментальные исследования, например, изучали список gcodes, распознанных ender3?, @user10489

Я не думаю, что мы должны использовать 3D-печать Stack Exchange для разработки публичного плана для хакеров, чтобы уничтожить 3D-принтеры людей, @ChinchillaWafers

Я думаю, что важно знать, что gcode может установить вашу температуру на то, что может повредить принтер. Но точно так же я не думаю, что вы должны печатать gcode от кого-то другого, кто не прошел через ваш собственный слайсер с вашей собственной тонкой настройкой для вашего принтера., @user10489

@ChinchillaWafers информация о том, как это сделать, уже общедоступна, так как каждый Gcode и его функции доступны на сайте поставщика прошивки: https://marlinfw.org/meta/gcode/ Вектор угрозы исходит в первую очередь от незащищенных веб - интерфейсов. Но физический доступ к принтеру не предотвратит вопиющего злоупотребления и злоупотреблений. Если хакер имеет физический доступ к вашему принтеру - у вас есть большие проблемы, чем у кого-то, кто пытается запустить вредоносный gcode. Кроме того, школы могут захотеть узнать, "как" ученик может уничтожить принтер и что искать. (Жесткое правило отсутствия внешнего Gcode устраняет эту угрозу.), @OneWasNotEnough

Просто мои мысли... У меня возникает искушение поднять этот вопрос исключительно из-за его дерзости, а также из-за его полезности для того, чтобы люди знали, что вы можете полностью уничтожить принтер, если не позаботитесь об используемом (G -) коде. Кроме того, это привело к очень полезному ответу (и, надеюсь, к другим). Другие отрицательные голоса, если они даны из - за отвращения к теме, я думаю, могут быть немного несправедливыми-если бы это было на Мете, то да, отвращение может быть продемонстрировано голосованием вниз, но на главном сайте даунвоты должны быть из-за отсутствия исследований и т. Д., И кажется, что ОП имеет по крайней мере, провел небольшое исследование., @Greenonline

Этот вопрос на самом деле является хорошим началом для размышлений о том, "как снизить риски и разработать модель угроз для защиты вашей печатной фермы", хотя и сформулирован как " можно ли сделать это, чтобы повредить принтер?", @Trish


3 ответа


9

Этика и обоснование:

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

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

Это также проблема для станков с ЧПУ и другого оборудования. Прошивка существует не для того, чтобы защитить вас. Если вы попросите систему поместить шпиндель в XYZ_POS, задача устройства состоит в том, чтобы доставить вашу торцевую фрезу стоимостью 300 долларов в деталь так же целесообразно и непосредственно, как вы ей сказали. Он не держит вас за руку.

В результате, вероятно, лучше всего, чтобы никто не запускал предварительно скомпилированный G-код. Вы должны использовать STL и сгенерировать свой собственный G-код. Это не только позволяет вам правильно настроить печать для вашего конкретного принтера, но и предотвращает поломку принтера гадостями.

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

Чтобы помочь вашему исследованию: большинство "безопасных" средств предотвращают даже прикосновение к машине с внешним кодом. Весь код должен быть сгенерирован на доверенных и изолированных машинах доверенными лицами. Нет никакой гарантии, что "доверенный" человек не сможет выполнить работу, которая приведет к краху их 300 000 - долларовой мельницы с ЧПУ и нанесет ущерб, но это может иметь серьезные последствия.

Чрезвычайно трудно "порвать" принтер, выключив торцевые крышки.

Вы можете отключить физические конечные точки с помощью простой команды M121.

Однако это делает только так много.

С M121принтер действительно уязвим только до того, как он будет возвращен домой. Большинство принтеров автоматически возвращаются домой при запуске печати или отказываются печатать до тех пор, пока не окажутся дома. Если выдача M121 затем произвольно попытается протаранить его мимо endstop, он будет продолжаться до тех пор, пока не подсчитает шаги до значения программного endstop [XYZ]_MIN_POS до [XYZ]_MAX_POS.

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

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

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

Однако вы можете заставить его работать как старый принтер при условии, что он не имеет стойлового или аварийного срабатывания (как у Prusas по умолчанию), выпустив M211 S0.

Это отключает конечные точки программного обеспечения. И должен позволять ему постоянно пытаться достичь значения, запрограммированного в G-коде. Он должен продолжать считать, пока не доберется до XYZ_POS, а затем, наконец, остановиться.

Нанесет ли это ущерб? Может быть. Если ось Z находится высоко и она может физически достаточно сильно вдавиться в печатное полотно,это может привести к повреждению hotend. Однако, как правило, большинство принтеров сконструированы (в наши дни) так, что ось Z не может зайти слишком далеко в печатный стол и нанести (слишком большой) ущерб. Модифицированные принтеры могут быть уязвимы, если они модифицируют стол, но физически не ограничивают слишком глубокое опускание оси Z. Кроме того, когда принтер автоматически подключается к печати, он обычно устанавливает ноль на конечную остановку до того, как полезная нагрузка может быть запущена, что дает возможность вернуться домой и разрешить только экскурсию к позиционерам оси. Когда это происходит, на самом деле не может произойти никаких повреждений, кроме перегрева шаговых двигателей/драйверов и возможного повреждения ремней безопасности.

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

Как можно реально порвать принтер? Если у вас есть физический доступ к нему - у вас есть полный контроль над ним. Просто физически находясь рядом с ним, вы можете просто выбросить его в окно. Это произвольно - пытаться запустить любой код. Но если вы пытаетесь исследовать, как субъект угрозы может испортить чей-то принтер?

Томас Сандладерер сделал отличное видео об этих уязвимостях (специфичных для 3D - принтеров) здесь:

В своем видео он прямо говорит об угрозе запуска предварительно сформированного G-кода из открытых источников. (То, что вы не должны делать - то, что никто не должен делать)

Заключение:

В области безопасности физический доступ к системе со стороны ненадежного лица или запуск ненадежного кода на компьютере не допускаются.

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

Я не буду рассказывать вам, как "по-настоящему разорвать" 3D-принтер, поскольку в Интернете есть множество страшных историй о том, что принтеры загораются, не говоря уже об угрозе запуска какого-то случайного кода на вашем принтере. Как это сделать - в открытом доступе. Вы просто должны понять это сами.

Урок здесь прост: просто не запускайте предварительно скомпилированный G-код.


,

Если вы хотите разорвать принтер, я предлагаю молоток., @user10489

Отключение конечных остановок обычно приводит к тому, что принтер просто теряет след источника, когда принтер пытается пройти мимо конечной остановки., @Perry Webb

Самый верный способ нанести значительный ущерб-это, вероятно, напечатать твердый блок пластика, а затем медленно опустить в него хотенд, продолжая выдавливать. Это не зависит от обхода конечных точек, потому что объект, который вы нажимаете, не является частью принтера, а чем-то динамически созданным., @R.. GitHub STOP HELPING ICE

@R..Видео GitHubSTOPHELPINGICE Thomas, которое я представил в своем ответе, демонстрирует эту концепцию. :), @OneWasNotEnough


2

Потенциальная угроза?

Я могу себе представить, что это потенциальная угроза для принтеров, которые работают в среде, где есть много людей, использующих принтер, где есть доступ к SD-карте (например, школы, библиотеки или производственные помещения). Для изменения настроек с помощью G-кода потребуется буквально запустить файл на SD-карте при следующей загрузке принтера. Как вы можете себе представить, довольно легко изменить координаты начала координат - это обсуждалось в предыдущих вопросах, - а также скорости, состояние конечной остановки и значения ускорения.

Уничтожит ли это принтер?

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

Ограничивается злым умыслом?

Нет, управляя Ultimaker 3 Extended для ассоциации персонала, я могу по опыту сказать, что для того, чтобы испортить принтер, не требуется вредоносный код или намерение. Работа из дома из-за мер COVID-19 (моя работа нуждается в том, чтобы те, кто может работать дома, оставались дома, чтобы позволить тем, кто управляет машинами и испытательным оборудованием, ходить на работу и соблюдать правила x человек на y квадратный метр, которые установило правительство) Я был далеко от UM3E, чтобы найти его в ужасном состоянии год спустя. Оказалось, что были люди, которые не имели опыта в нарезке, используя неправильный тип материалов для нарезки по отношению к тому, что было загружено в машину... (мы работаем с материалами, не являющимися ультимейкерами, поэтому материал не распознается RFID-считывателем). Теперь принтер находится под замком...

,

Бедный печатник! Надеюсь, вы сможете его спасти., @Trish


3

Физический доступ хуже

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

Если вы действительно хотите испортить его только с помощью удаленной команды позже, вы не просто запустите произвольный G-код, вы замените прошивку на ту, которая выглядит и чувствует себя так же, но не содержит ни тепловой защиты от побега, ни Maxtemp. Таким образом, машина просто попытается нагреться до произвольной температуры по команде, что сделает ее потенциально опасной для пожара. В худшем случае установить плохую прошивку так же просто, как вставить подготовленную SD-карту и заставить принтер запустить обновление прошивки до вашей модифицированной версии!

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

Доступ к сети достаточен

Давайте для убедительности предположим, что все, что у нас есть, - это удаленный терминальный доступ к принтеру. Не обязательно видео обратная связь, просто терминальный доступ, например, через Octoprint. Этого достаточно для отправки произвольного G-кода, а некоторые комбинации могут быть совершенно разрушительными - вот почему удаленные серверы печати обычно защищены паролем и никогда не должны быть общедоступными!

С помощью правильного терминала изменить EEPROM очень просто

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

Вы беспокоитесь о неправильной команде

Теперь худшая команда, которая с плохим намерением может уничтожить принтеры, - это команда M500 для сохранения измененных значений в EEPROM. Это может привести к проблемам, если G-код перед командой содержит код, изменяющий основные настройки, которые не заблокированы прошивкой.

Например, M301 с бессмысленными значениями может вызвать очень плохую настройку PID, которая может привести, в зависимости от того, как они настроены, к массовому превышению целевой температуры, регулярному срабатыванию защиты от теплового побега или просто к плохим отпечаткам. При определенных плохих настройках и отключенном ГТО принтер может стать пожароопасным.

Из-за проблем, которые могут вызвать M500M301), Prusaprinters не позволяет загружать любой g-код, содержащий эту команду, но лучшая защита от этой команды-никогда не запускать G-код, который вы не компилировали сами.

Блокировка вредоносного G-кода

Некоторые компании, опасаясь случайных команд M500 или других команд, изменяющих настройки, отключили EEPROM. Это, однако, значительно усложняет обслуживание, но предотвращает изменение критических настроек вообще - теперь они исправлены в прошивке и должны быть изменены путем перекомпиляции и загрузки измененной прошивки. Если все сделано правильно и в сочетании с надлежащим физическим контролем доступа к возможности загрузки встроенного ПО (например, герметичная панель обслуживания), это может в значительной степени предотвратить появление вредоносного G-кода.

,