Патч — это данные , которые предназначены для использования для изменения существующего программного ресурса, такого как программа или файл , часто для исправления ошибок и уязвимостей безопасности . [1] [2] Патч может быть создан для улучшения функциональности, удобства использования или производительности . Патч обычно предоставляется поставщиком для обновления программного обеспечения, которое он предоставляет. Патч может быть создан вручную, но обычно он создается с помощью инструмента, который сравнивает две версии ресурса и генерирует данные, которые могут быть использованы для преобразования одной в другую.
Обычно исправление необходимо применять к конкретной версии ресурса, которую оно должно изменить, хотя есть и исключения. Некоторые инструменты исправления могут определять версию существующего ресурса и применять соответствующее исправление, даже если оно поддерживает несколько версий. По мере выпуска большего количества исправлений их совокупный размер может значительно увеличиваться, иногда превышая размер самого ресурса. Чтобы справиться с этим, количество поддерживаемых версий может быть ограничено, или вместо этого может быть предоставлена полная копия ресурса.
Патчинг позволяет изменять скомпилированную ( машинный язык ) программу, когда исходный код недоступен. Это требует глубокого понимания внутренней работы скомпилированного кода, что сложно без доступа к исходному коду. Патчинг также позволяет вносить изменения в программу без ее перекомпоновки из исходного кода. Для небольших изменений может быть более экономичным распространять патч, чем распространять полный ресурс.
Хотя часто предполагается, что исправление проблем, плохо разработанный патч может привести к появлению новых проблем (см. регрессии программного обеспечения ). В некоторых случаях обновления могут намеренно нарушать функциональность или отключать устройство, например, удаляя компоненты, на которые поставщик обновлений больше не имеет лицензии. Управление исправлениями является частью управления жизненным циклом и представляет собой процесс использования стратегии и плана того, какие исправления следует применять к каким системам в указанное время. Обычно исправление применяется с помощью программного управления к компьютерному хранилищу , чтобы оно было постоянным. В некоторых случаях исправление применяется программистом с помощью инструмента, такого как отладчик, к компьютерной памяти , и в этом случае изменение теряется при повторной загрузке ресурса из хранилища.
Патчи для проприетарного программного обеспечения обычно распространяются как исполняемые файлы, а не как исходный код . При запуске эти файлы загружают в память программу, которая управляет установкой кода патча в целевую программу(ы) на диске.
Патчи для другого программного обеспечения обычно распространяются в виде файлов данных, содержащих код исправления. Они считываются программой -утилитой исправления , которая выполняет установку. Эта утилита изменяет исполняемый файл целевой программы — машинный код программы — обычно путем перезаписи его байтов байтами, представляющими новый код исправления. Если новый код помещается в пространство (количество байтов), занимаемое старым кодом, его можно вставить путем перезаписи непосредственно поверх старого кода. Это называется встроенным исправлением. Если новый код больше старого, утилита исправления добавит загрузочную запись(и), содержащую новый код, в объектный файл целевой программы, подлежащей исправлению. Когда запускается исправленная программа, выполнение направляется в новый код с инструкциями ветвления (переходами или вызовами), исправленными в том месте в старом коде, где необходим новый код. На ранних 8-разрядных микрокомпьютерах, например, Radio Shack TRS-80 , операционная система включает утилиту PATCH/CMD, которая принимает данные исправлений из текстового файла и применяет исправления к исполняемым двоичным файлам целевой программы.
Код исправления должен иметь место(а) в памяти для выполнения во время выполнения. Встроенные исправления не представляют сложности, но когда требуется дополнительное пространство памяти, программист должен импровизировать. Естественно, если программист исправления является тем, кто первым создал код для исправления, это проще. Опытные программисты планируют заранее эту потребность, резервируя память для последующего расширения, оставляя ее неиспользованной при создании своей финальной итерации. Другие программисты, не вовлеченные в первоначальную реализацию, стремясь включить изменения в более позднее время, должны найти или освободить место для любых дополнительных необходимых байтов. Наиболее удачным возможным обстоятельством для этого является случай, когда процедура, которую нужно исправить, является отдельным модулем. В этом случае программисту исправления нужно просто настроить указатели или индикаторы длины, которые сигнализируют другим системным компонентам о пространстве, занимаемом модулем; затем он может свободно заполнить это пространство памяти своим расширенным кодом исправления. Если процедура, которую нужно исправить, не существует как отдельный модуль памяти, программист должен найти способы уменьшить процедуру, чтобы освободить достаточно места для расширенного кода исправления. Типичные тактики включают сокращение кода путем поиска более эффективных последовательностей инструкций (или путем перепроектирования с использованием более эффективных алгоритмов), сжатие строк сообщений и других областей данных, вынесение функций программы на запоминающее устройство большой емкости (например, на дисковые оверлеи) или удаление функций программы, которые считаются менее важными, чем изменения, устанавливаемые с помощью исправления.
Небольшие исправления машинного кода в памяти можно вручную применить с помощью системной отладочной утилиты, такой как отладчики DDT CP/M или DEBUG MS -DOS . Программисты, работающие с интерпретируемым BASIC, часто использовали команду POKE для изменения функциональности системной служебной процедуры или самого интерпретатора.
Патчи также могут распространяться в форме модификаций исходного кода. В этом случае патчи обычно состоят из текстовых различий между двумя файлами исходного кода, называемых « diffs ». Эти типы патчей обычно выходят из проектов программного обеспечения с открытым исходным кодом . В этих случаях разработчики ожидают, что пользователи сами скомпилируют новые или измененные файлы.
Поскольку слово «патч» несет в себе коннотацию небольшого исправления, большие исправления могут использовать другую номенклатуру. Объемные исправления или исправления, которые существенно изменяют программу, могут распространяться как « пакеты обновления » или как «обновления программного обеспечения». Microsoft Windows NT и ее преемники (включая Windows 2000 , Windows XP , Windows Vista и Windows 7 ) используют терминологию «пакет обновления». [3] Исторически IBM использовала термины «FixPaks» и «Corrective Service Diskette» для обозначения этих обновлений. [4]
Исторически поставщики программного обеспечения распространяли исправления на бумажной ленте или на перфокартах , ожидая, что получатель вырежет указанную часть оригинальной ленты (или деки) и вставит исправление (отсюда и название) в заменяющий сегмент. Позднее для распространения исправлений использовалась магнитная лента. Затем, после изобретения съемных дисководов, исправления поступали от разработчика программного обеспечения на диске или, позднее, на CD-ROM по почте . С широко распространенным доступом в Интернет загрузка исправлений с веб-сайта разработчика или через автоматизированные обновления программного обеспечения часто становилась доступной для конечных пользователей. Начиная с Mac OS 9 от Apple и Windows ME от Microsoft , операционные системы ПК получили возможность получать автоматические обновления программного обеспечения через Интернет.
Компьютерные программы часто могут координировать исправления для обновления целевой программы. Автоматизация упрощает задачу конечного пользователя – ему нужно только выполнить программу обновления, после чего эта программа гарантирует, что обновление цели происходит полностью и правильно. Пакеты обновления для Microsoft Windows NT и ее преемников, а также для многих коммерческих программных продуктов используют такие автоматизированные стратегии.
Некоторые программы могут обновляться через Интернет с минимальным вмешательством со стороны пользователей или вообще без него. Обслуживание серверного программного обеспечения и операционных систем часто происходит таким образом. В ситуациях, когда системные администраторы контролируют несколько компьютеров, этот вид автоматизации помогает поддерживать согласованность. Применение исправлений безопасности обычно происходит таким образом.
С появлением более емких носителей информации и более высокой пропускной способности Интернета стало обычным делом заменять целые файлы (или даже все файлы программы) вместо изменения существующих файлов, особенно для небольших программ.
Размер патчей может варьироваться от нескольких байт до сотен мегабайт ; таким образом, более значительные изменения подразумевают больший размер, хотя это также зависит от того, включает ли патч целые файлы или только измененную часть(и) файлов. В частности, патчи могут стать довольно большими, когда изменения добавляют или заменяют непрограммные данные, такие как графические и звуковые файлы. Такие ситуации часто возникают при исправлении компьютерных игр . По сравнению с первоначальной установкой программного обеспечения, исправления обычно не требуют много времени для применения.
В случае операционных систем и программного обеспечения серверов , исправления играют особенно важную роль в исправлении дыр в безопасности. Некоторые критические исправления связаны с проблемами с драйверами. [5] Для исправлений может потребоваться предварительное применение других исправлений или могут потребоваться предварительные или одновременные обновления нескольких независимых программных компонентов. Для облегчения обновлений операционные системы часто предоставляют автоматические или полуавтоматические средства обновления. Полностью автоматические обновления не смогли получить широкую популярность в корпоративных вычислительных средах, отчасти из-за вышеупомянутых сбоев, но также и потому, что администраторы опасаются, что компании-разработчики программного обеспечения могут получить неограниченный контроль над их компьютерами. [ необходима цитата ] Системы управления пакетами могут предлагать различные степени автоматизации исправлений.
Использование полностью автоматических обновлений стало гораздо более распространенным на потребительском рынке, во многом благодаря [ нужна цитата ] тому факту, что Microsoft Windows добавила их поддержку [ когда? ] , а Service Pack 2 для Windows XP (доступный в 2004 году) включил их по умолчанию. Осторожные пользователи, особенно системные администраторы, склонны откладывать применение исправлений до тех пор, пока они не смогут проверить стабильность исправлений. Microsoft (W)SUS поддерживает это. В случаях больших исправлений или существенных изменений дистрибьюторы часто ограничивают доступность исправлений квалифицированным разработчикам в качестве бета-тестирования .
Применение исправлений к прошивке создает особые проблемы, поскольку часто включает в себя предоставление совершенно новых образов прошивки, а не применение только отличий от предыдущей версии. Обычно исправление состоит из образа прошивки в виде двоичных данных вместе со специальной программой, предоставленной поставщиком, которая заменяет предыдущую версию новой версией; обновление BIOS материнской платы является примером распространенного исправления прошивки. Любая непредвиденная ошибка или прерывание во время обновления, например отключение питания, может сделать материнскую плату непригодной для использования. Производители материнских плат могут установить меры безопасности для предотвращения серьезных повреждений; например, процедура обновления может создать и сохранить резервную копию прошивки для использования в случае, если она определит, что первичная копия повреждена (обычно с помощью контрольной суммы , такой как CRC ).
Видеоигры получают исправления для исправления проблем совместимости после их первоначального выпуска, как и любое другое программное обеспечение, но они также могут применяться для изменения правил или алгоритмов игры . Эти исправления могут быть вызваны обнаружением эксплойтов в многопользовательском игровом опыте, которые могут быть использованы для получения несправедливых преимуществ перед другими игроками. Часто могут быть добавлены дополнительные функции и настройки игрового процесса. Эти виды исправлений распространены в шутерах от первого лица с возможностью многопользовательского режима , а в MMORPG , которые обычно очень сложны с большим объемом контента, почти всегда в значительной степени полагаются на исправления после первоначального выпуска, где исправления иногда добавляют новый контент и возможности, доступные игрокам. Поскольку баланс и справедливость для всех игроков MMORPG могут быть серьезно повреждены в течение короткого промежутка времени эксплойтом, серверы MMORPG иногда отключаются с коротким уведомлением, чтобы применить критический патч с исправлением.
Компании иногда выпускают игры , зная, что в них есть ошибки. Скорпиа из Computer Gaming World в 1994 году осудил «компании — слишком многочисленные, чтобы перечислять их все — которые выпускают некачественный продукт, зная, что они могут обойтись патчами и обновлениями, и которые делают из своих клиентов « платных тестировщиков». [6]
Патчи иногда становятся обязательными для исправления проблем с библиотеками или частями исходного кода для программ, которые часто используются или находятся в обслуживании. Это часто происходит в очень крупных программных проектах, но редко в мелкомасштабной разработке.
В проектах с открытым исходным кодом авторы обычно получают исправления или многие люди публикуют исправления, которые исправляют определенные проблемы или добавляют определенную функциональность, например, поддержку локальных языков за пределами локали проекта. В примере из ранней разработки ядра Linux (отмеченного публикацией полного исходного кода) Линус Торвальдс , первоначальный автор, получил сотни тысяч исправлений от многих программистов для применения к своей оригинальной версии.
Apache HTTP Server изначально развивался как ряд патчей, которые Брайан Белендорф собрал для улучшения NCSA HTTPd , отсюда и название, которое подразумевает, что это коллекция патчей ( «патчированный сервер» ). В FAQ на официальном сайте проекта говорится, что название «Apache» было выбрано из уважения к индейскому племени коренных американцев Apache . Однако первоначально на сайте проекта было дано объяснение «патчированный сервер». [7]
Исправление или обновление Quick Fix Engineering (обновление QFE) — это единый накопительный пакет, включающий информацию (часто в виде одного или нескольких файлов), которая используется для решения проблемы в программном продукте (например, ошибки в программном обеспечении). Обычно исправления создаются для решения конкретной ситуации клиента. Microsoft когда-то использовала этот термин, но прекратила его в пользу новой терминологии: General Distribution Release (GDR) и Limited Distribution Release (LDR). Однако Blizzard Entertainment определяет исправление как «изменение, внесенное в игру, которое считается достаточно критическим, чтобы его нельзя было отложить до обычного обновления контента».
Точечный релиз — это второстепенный релиз программного проекта, особенно тот, который предназначен для исправления ошибок или выполнения небольших очисток, а не для добавления существенных функций . Часто бывает так, что в одном крупном или мелком релизе можно исправить слишком много ошибок, что создает необходимость в точечном релизе.
Временное исправление программы или временное исправление продукта (PTF), в зависимости от даты, является стандартной терминологией IBM для одного исправления ошибки или группы исправлений, распространяемых в форме, готовой к установке для клиентов. PTF иногда называли «ZAP». [8] Клиенты иногда объясняют аббревиатуру в шутливой манере как постоянное временное исправление или, что более практично, вероятно, this fixes , потому что у них есть возможность сделать PTF постоянной частью операционной системы, если патч исправит проблему.
Защитный патч — это изменение, применяемое к активу для исправления слабости, описанной уязвимостью. Это корректирующее действие предотвратит успешную эксплуатацию и устранит или снизит способность угрозы использовать определенную уязвимость в активе. Управление патчами является частью управления уязвимостями — циклической практики выявления, классификации, устранения и смягчения уязвимостей.
Исправления безопасности являются основным методом исправления уязвимостей безопасности в программном обеспечении. В настоящее время Microsoft выпускает исправления безопасности раз в месяц (« вторник исправлений »), а другие операционные системы и программные проекты имеют группы безопасности, занимающиеся выпуском наиболее надежных исправлений программного обеспечения как можно скорее после объявления об уязвимости. Исправления безопасности тесно связаны с ответственным раскрытием информации .
Эти исправления безопасности имеют решающее значение для обеспечения того, чтобы бизнес-процессы не пострадали. В 2017 году компании были атакованы вирусом-вымогателем под названием WannaCry , который шифрует файлы в определенных версиях Microsoft Windows и требует выкуп через BitCoin. В ответ на это Microsoft выпустила исправление, которое останавливает работу вируса-вымогателя.
Пакет обновления или SP или пакет функций (FP) представляет собой набор обновлений, исправлений или улучшений программного обеспечения, поставляемых в виде одного устанавливаемого пакета. Компании часто выпускают пакет обновления, когда количество отдельных исправлений для данной программы достигает определенного (произвольного) предела или когда выпуск программного обеспечения показал себя стабилизированным с ограниченным количеством оставшихся проблем на основе отзывов пользователей и отслеживания ошибок, например Bugzilla . В крупных программных приложениях, таких как офисные пакеты, операционные системы, программное обеспечение баз данных или сетевое управление, не редкость иметь пакет обновления, выпущенный в течение первого года или двух после выпуска продукта. Установка пакета обновления проще и менее подвержена ошибкам, чем установка множества отдельных исправлений, тем более при обновлении нескольких компьютеров по сети, где пакеты обновления являются обычным явлением.
Неофициальный патч — это патч для программы, написанный третьей стороной вместо оригинального разработчика . Подобно обычному патчу, он устраняет ошибки или недостатки. Примерами являются исправления безопасности специалистами по безопасности, когда официальный патч от самих производителей программного обеспечения занимает слишком много времени. [9] [10] Другими примерами являются неофициальные патчи, созданные игровым сообществом видеоигры , которая перестала поддерживаться. [11] [12]
Monkey patching означает локальное расширение или изменение программы (влияющее только на работающий экземпляр программы).
Hot patching , также известный как live patching или динамическое обновление программного обеспечения , представляет собой применение исправлений без выключения и перезапуска системы или соответствующей программы. Это решает проблемы, связанные с недоступностью сервиса, предоставляемого системой или программой. [13] Метод может использоваться для обновления ядра Linux без остановки системы. [14] [15] Патч, который может быть применен таким образом, называется hot patch или live patch . Это становится обычной практикой в сфере мобильных приложений. [16] Такие компании, как Rollout.io, используют метод swizzling для доставки hot patchs в экосистему iOS. [17] Другим методом hot patching приложений iOS является JSPatch. [18]
Поставщики облачных услуг часто используют горячее обновление, чтобы избежать простоев клиентов при обновлении базовой инфраструктуры. [19]
В вычислительной технике slipstreaming — это процесс интеграции исправлений (включая пакеты обновлений ) в установочные файлы исходного приложения, в результате чего возможна прямая установка обновленного приложения. [20] [21]
Природа slipstreaming подразумевает, что он требует первоначальных затрат времени и работы, но может сэкономить много времени (и, соответственно, денег) в долгосрочной перспективе. Это особенно важно для администраторов, которым поручено управлять большим количеством компьютеров, где типичной практикой установки операционной системы на каждый компьютер будет использование исходного носителя и последующее обновление каждого компьютера после завершения установки. Это займет гораздо больше времени, чем начать с более актуального (slipstreamed) источника и необходимостью загрузки и установки нескольких обновлений, не включенных в slipstreamed источник.
Однако не все исправления можно применить таким образом, и одним из недостатков является то, что если обнаружится, что определенное исправление является причиной последующих проблем, то это исправление нельзя будет удалить без использования оригинального, не интегрированного источника установки.
Системы обновления программного обеспечения позволяют пользователям и разработчикам программного обеспечения управлять обновлениями. В киберпандемии Petya 2017 года система обновления финансового программного обеспечения «MeDoc», как говорят, была скомпрометирована для распространения вредоносного ПО через свои обновления. [22] [23] В блоге Tor эксперт по кибербезопасности Майк Перри утверждает, что детерминированные , распределенные сборки, вероятно, являются единственным способом защиты от вредоносного ПО, которое атакует процессы разработки и сборки программного обеспечения , чтобы заразить миллионы машин в одном, официально подписанном, мгновенном обновлении. [24] Менеджеры обновлений также позволяют быстро и широко применять обновления безопасности. Менеджеры обновлений Linux , такие как Synaptic, позволяют пользователям обновлять все программное обеспечение, установленное на их машине. Такие приложения, как Synaptic, используют криптографические контрольные суммы для проверки исходных/локальных файлов перед их применением, чтобы гарантировать надежность против вредоносного ПО. [25] [26]
Некоторые хакеры могут взломать законный канал обновления программного обеспечения и внедрить вредоносный код . [27]
Удалите исправления драйвера High Definition Audio KB835221 и KB888111 [...]
{{cite web}}
: CS1 maint: бот: исходный статус URL неизвестен ( ссылка )Еще один неофициальный патч был выпущен для устранения критической уязвимости в браузере Internet Explorer от Microsoft.
[...]поклонники трилогии Myth продвинули эту идею на шаг дальше: у них есть официальный доступ к исходному коду игр Myth. Организованная под названием MythDevelopers, эта полностью добровольная группа программистов, художников и других талантливых людей посвящает свое время улучшению и поддержке дальнейшего развития серии игр Myth.
[...] что никаких дальнейших патчей для названия не будет. Сообщество было предсказуемо расстроено. Вместо того чтобы отказаться от игры, пользователи решили, что если Activision не собирается исправлять ошибки, то они это сделают. Они хотели спасти игру, заставив Activision открыть исходный код, чтобы она могла оставаться живой после того, как Activision потеряет интерес. С некоторой помощью членов команды разработчиков, которые были активны на форумах фанатов, они в конечном итоге смогли убедить Activision выпустить исходный код Call to Power II в октябре 2003 года.