ПО которое исправляет ошибки в себе самом

    Группа исследователей из MIT представили программное обеспечение, которое способно динамически исправлять ошибки и уязвимости. Исправлять способно в любом коде, не обязательно в себе самом. Исходники не нужны. Только под Windows.
    Читать дальше
    Поделиться публикацией

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

      +18
      Казалось бы, все замечательно, но если в логике приложения существует хотя бы одна обратная связь (не важно, положительная или отрицательная), то возможность применения алгоритма становится крайне сомнительной.

      До тех пор, пока обратной связи нет — да, мы имеем простой «черный ящик», а алгоритмы коррекции в черных ящиках в принципе известны.

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

        "...Our current monitors have no false positives in that they never classify a normal execution as failed. But they are also only designed to detect a specific class of errors (heap buffer overflows and illegal control flow transfers). ClearView is not designed to eliminate all failures, only those that a monitor detects."
          +2
          Ну, я думаю, ты должен понимать, что приложений без обратных связей достаточно мало. К ним так или иначе относятся только школьные задачки вида «введите x и получите x в кубе». К ним же так или иначе относятся чистые функциональные задачи (те самые, которые поддаются идеальному распаралеливанию и так далее), и то далеко не все, потому что функциональщина допускает обратные связи, хоть и на другом уровне.

          Другой вопрос — если существует какой-то метод разбития логики приложения на отдельные домены «черных ящиков», где количество обратных связей равняется нулю. Для любого приложения эту задачу можно выполнить, но насчет автоматического режима есть у меня большие сомнения.
            –1
            Вы бы педеэфку почитали, там есть примеры успешного наложения патчей на Фаерфокс.

            И кстати, что за обратные связи, это когда ввёл x — получил x^-3?
                –3
                Парсер — лох, гуглхром — тоже.

                В общем, вы меня поняли.
                  0
                  Хм, т.е. если напишу такой код:

                  int square = 2;
                  while (square < max_int / 2) square *= 2;
                  


                    0
                    Хром — лох :)

                    Если я всё же напишу такой код, то он уже причисляется к магической обратной связи или нет?
        –6
        А как у авторов дела с StarForce, Securom итд? Неужели их система может править и ошибки в ПО защищенном такими системами? :)
          +3
          Софт, для которого это реально применимо, обычно не защищают старфорсами и прочей мишурой.
            +1
            Не обижайтесь, но вы не понимаете о чем идет речь.
            +4
            Deployed Software — это вроде как «развернутое\внедренное програмное обеспечние», а комерческое оно или нет — дело десятое.

            Эрланг с его замечательной виртуальной машиной, умел такое еще в 80х (замену кода без перезапуска системы).

            Однако технология интересная. Пойду читать ПДФ.
              –1
              Вот-вот, а потом с человечеством случаются всякие Терминаторы и Матрицы, где машины поработили людей!
              А все от лени и нежелания самим исправлять свои же ошибки. Хотя бы в коде программ.
                –2
                Всего 4 комментарий, в уже вспомнили про Терминатор и Матрицу, хабр исправляется.
                0
                Интересно, а как быть с законностью всего этого? Вносить правки в какой-нить MS System Center или VMWare Workstation…
                  +10
                  Roses are red,
                  Violets are blue,
                  In Soviet Russia
                  Programs write you.
                    +6
                    Глубоко не вникал в пдф, но всё же кажется, что результат сомнителен. Реально, что может исправить такой подход — ошибки программирования в следствие не внимательности. Исходя из их же примера:
                    У v есть n вариантов значений c, которые наблюдались {c1,c2,... ,cn}
                    if! (v == c1 || v == c2 ||… || v == cn) then v = ci

                    Я так понимаю при v от 0 до 100, если вдруг получилось, что v -1, то видимо v должно быть 0 или ещё какой нибудь из n вариантов. Или как ещё предлагают
                    if v is the target of a call instruction simply skips the call
                    Если параметр v является результатом функции (вольный перевод), то просто не исполняйте функцию. Или как вариант просто выходит с функции в момент возможной ошибки
                    if! (v == c1 || v == c2 ||… || v == cn) then return

                    То есть Deployed Software просто «скрывает» возможные ошибки и падения. Если у вас в коде ошибка её обойдут, позволив программе продолжить. Грубо говоря если есть exception, то ему подставят try-catch. Результат же программы может измениться и вообще ввести пользователя в ложное состояние нормальной работы.
                    Допустим в бухгалтерии считают зарплаты, а у одного сотрудника из-за штрафов получилось -1000. Программа посмотрит и скажет, что наблюдавшиеся значения всегда были положительными так что давайте ка я заменю — на +?
                      –1
                      А что правильное решение. После этого сотрудника можно сажать за несанкционированное изменение зарплаты через уязвимость в программе устранения уявзимостей. Что сотрудник ушедший в минус вполне заслуживает. ;)
                      –1
                      Матрица всё ближе.
                        +1
                        Вот это уже зачатки AI. Давно говорили, что AI начнется с того, что станет развивать сам себя, без человеческого вмешательства.
                          0
                          «исправлять» и «развивать» — все ж разные понятия. Тут вся фишка на выделении нормального состояния и связанных с ним ограничений (ну и на устранении ситуации, когда ограничения нарушаются). До развития это очень-очень далеко. Хотя сама идея, определенно, оч хороша.
                          –1
                          не матрица, а SkyNet…
                            –1
                            мне нужна твоя куртка и мотоцикл )))
                            0
                            Да ну, стрёмно. Я б посмотрел, кто такую систему пустит биллинг автоматически патчить…

                            Идея хороша, но я представляю себе как появляются ошибки и какие они бывают — чтобы их исправить, надо голову поломать, чтобы это вот так, да ещё и тут чтобы не отвалилось… Не говоря уже о том, что можно конфигурацию, например, изменить, а «система» полезет в бинарники это исправлять?

                            В общем, пока что-то не верится в такое. Тупо отслеживать переполнения — ещё куда ни шло (хотя, если пользоваться проверенными библиотеками, проблема остро не стоит), а чтобы волшебно исправлять что угодно, как описано в статье… Не верю.
                              0
                              откуда тут мысль у товарищей про «все-что-угодно, даже если ошибки будем прятать и скрывать»?.. Эта штука просто позволяет меньше копаться ручками и справлять нудные однотипные ошибки из-за невнимательности, и сигналить (патчи-то полуавтоматические, как я понял) об ошибках вообще.
                                +1
                                Я просто считаю, что тут надо тестовые системы развивать, а не запускать автоматику править бинарники. Возможно, я неправ — покажет время.
                                Но моя точка зрения — самое слабое звено человек. Но и самое сильное звено — тоже человек. Так вот, разрабатывая такие системы, мы становимся слабее. «нудных однотипных ошибок» быть не должно. Должен быть правильный копипаст (ну сниппеты, они моднее) хорошего оттестированного кода.

                                В общем — есть true-путь и false-путь. И сама идея автоматической правки бинарников относится, скорее, ко второму. Хотя, повторюсь, это тоже метод и время покажет, насколько он в конкретных условиях будет работать. Идея интересная, но кричать про прорыв ещё рано.
                                  +1
                                  «Переходим на темную сторону силы»)))
                              +2
                              А кто будет патчить патчилку ?)
                                +1
                                Баян жеж. А точнее — выжимка из источников (см по тексту).

                                Что такое «отловить инварианты»? Это когда 1000 раз прошла одна ветка исполнения, и 1 раз другая. С точки зрения подхода, вторая — выбивается из массы, следует фиксить. Особенно наглядно — если ветка 2 не была явно зашита в высокоуровневом коде, а, например, переход на обработчик исключения. Никакой анализ исполнения тут уже ничего внятного не даст (или, что хуже, приведет к неверным действиям).

                                Реальные баги сложнее переполнения буфера такое ПО в принципе отловить не сможет. Потому что для этого надо обладать хотя бы минимумом знаний о предметной области. Это как бы и не плохо, просто сферический вакуумный патчер получился у ребят.
                                  +1
                                  Почти как в Крикунах ;)
                                    +1
                                    Почему-то Norton CrashGuard вспомнился.
                                    На моей памяти ни разу реально не помог — программа все равно падала, просто чуть позже :)
                                      0
                                      >Ещё два шага и программы будут писать сами себя.
                                      Не 2, а 122, не путайте теплое с мягким
                                        0
                                        >уязвимости обнаруженные на одном из хостов, автоматически накатываются на все остальные
                                        заплатки видимо накатываются
                                          –1
                                          Так зарождался Скайнет, туруруру-туруру-ру… :-)
                                            0
                                            Все как-бы ругают и полны скептицизма, тем не менее, без таких промежуточных шагов не прийти к результату. Как в науке, и отрицательный результат — тоже результат.

                                            Эдисон, когда изобретал лампочку, перепробовал все вещества, содержащие углерод. Когда его спросили, не жалеет ли он о потраченном времени, он ответил: «Нет, ведь теперь я знаю, что это не работает!».
                                              0
                                              Лучше — только коробочка с кнопкой <<КАЙФ>>.
                                                0
                                                вместо того, чтобы строить дороги изобретают вездеходы

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

                                                Самое читаемое