face

Не всякий баг вреден

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

Дело было так. Фирма X (конкретное название во сне не фигурировало) захватила здоровенный кусок рынка мобильных телефонов. Чуть ли не каждый второй телефон в стране был моделью Y этой фирмы. Была только одна позиция, по которой фирма X проигрывала конкурентам: у них в телефонах была возможность загружать приложения — у кого-то Java, у кого-то Symbian, — а у X никакой платформы для загружаемых приложений не было. Фирма X могла бы выпустить новую модель телефона, но большинство пользователей были до поры до времени довольны моделью Y, и немногие из них стали бы покупать новый телефон только ради загружаемых приложений. А между тем, фирме X загружаемые приложения были весьма нужны, ведь на них можно зарабатывать. Рассматривался вариант бесплатного обновления прошивки существующих телефонов модели Y в сервис-центрах, но и этот вариант оказался неудовлетворительным: сервис-центры в регионах большой страны работают так долго, что исполнения этой бесплатной услуги пользователю пришлось бы ждать неделями, так что едва ли многие пользователи воспользовались бы такой возможностью. (Это на самом деле так. Когда мне потребовалось перезалить прошивку в порядке гарантийного ремонта, телефон мне вернули через месяц.)

Решение, которое в итоге было претворено в жизнь, нашли вовсе не маркетологи, а программисты. Один из них, услышав о данной проблеме, в шутку предложил свой вариант решения, и сам не предполагал, что его воспримут всерьёз. Дело в том, что незадолго до этого программист работал с исходниками прошивки для модели Y, внося в них изменения для использования в готовящейся к выпуску модели Z. Пересматривая код, он обнаружил ошибку в процедуре обработки цепных (chained) входящих SMS. Определённым образом некорректно сформированное цепное сообщение могло вызвать переполнение буфера, что приводило к теоретической возможности для злоумышленника исполнять произвольный программный код. Об этой уязвимости никто не знал, и случайно такая ситуация могла бы возникнуть в одном случае из миллиарда. Идея программиста состояла в том, чтобы использовать найденную уязвимость для удалённого обновления прошивки.

Так и было сделано. Естественно, ни о какой уязвимости пользователям не сообщалось. Фирма X просто предложила каждому желающему за символическую плату в $1 произвести «дистанционное обновление программного обеспечения мобильного телефона», после которого у телефона появятся новые возможности, в том числе возможность загрузки приложений. Для обновления требовалось отправить со своего телефона SMS на специальный номер (это было нужно для того, чтобы невозможно было отправить обновление в качестве сюрприза соседу). После этого на телефон пользователя приходило цепное сообщение, эксплуатирующее уязвимость (exploit). Оно состояло из нескольких секций и содержало минимальный загрузчик, которому передавалось управление. Загрузчик использовал GPRS, чтобы загрузить с сервера фирмы X новую прошивку (именно на оплату этого трафика и шёл один доллар, который фирма X передавала сотовому оператору). После проверки контрольной суммы прошивка прописывалась во флеш-память, и телефон перезапускался. (Для предотвращения неполной записи прошивки из-за разряда батареи, перед записью загрузчик требовал подключить зарядное устройство.) Кроме поддержки платформы для загружаемых приложений, новая прошивка содержала и другие изменения, в числе которых было, во-первых, исправление для упомянутой уязвимости, чтобы она не могла быть использована кем-либо ещё раз, а, во-вторых, возможность загрузки по GPRS новых прошивок и их установки (естественно, перед установкой проверяется электронная подпись файла). На всякий случай.

In English: Not Every Bug is Bad
  • Current Music: Avril Lavigne - Losing Grip
Х-хе, здОрово! Цуть-цуть подправить и получится фантастический рассказ.
Re: Мысль!
Можно, конечно, но только надо основную сюжетную линию вместе обсуждать.
Re: Мысль!
А ты когда-нибудь так уже делал? В смысле, писал рассказ вместе с кем-нибудь?
Re: Мысль!
К сожалению, нет. Хотя мне было бы очень интересно попробовать. Тем более с тобой, т.к. в случае написания рассказа с тобой в соавторстве меньше вероятность получить от тебя унизительные 4/10 за язык. :)
Re: Мысль!
Эти четыре из десяти ты мне теперь будешь вечно помнить. Я уже и сам-то
забыл, почему решил так поставить.

Попробовать-то интересно, вот только я не понимаю, как это. У меня всегда
в голове не укладывалось, как люди могут писать что-то вместе, например,
Стругацкие, Ильф и Петров -- как они работали?
Re: Мысль!
Стругацкие собирались вместе на полпути между Москвой и Ленинградом (там есть какой-то населённый пункт, название не помню), обсуждали идею и основную сюжетную линию, после чего разъезжались: один — в Москву, другой — в Ленинград. Ч/з какое-то время собирались опять, обсуждали повторно и начинали писать по след. схеме: полчаса один диктует, другой печатает, затем менялись ролями.
Лукьяненко с Васильевым, насколько я знаю (хотя не уверен в этом на все 100), придумав сюжет, распределяли кто какой эпизод будет писать, после чего компилировали.
На счёт Ильфа и Петрова — не знаю, врать не буду.
А мы с тобой какую-нибудь свою схему придумаем.
Re: Мысль!
Осталось дело за малым -- придумать, о чём писать. То, что я увидел во
сне, -- это ведь не сюжет. Это технические детали, которые могут удачно
оттенить сюжет, но не более того. Художественные произведения ведь пишутся
о людях, а не о телефонах.
Re: Мысль!
Категорически согласен с тобой! У меня уже даже кое-какие мыслишки проклёвываются. Надо будет встретиться и обсудить за рюмочкой чая.
Кстати, может быть нагрянуть к тебе в гости завтра?
Re: Мысль!
Завтра -- неудачный день. Удачные дни начинаются с понедельника следующей
недели. ;-)
Re: Мысль!
То есть extreme (точнее, pair) programming придумали Стругацкие...
Re: Мысль!
А четыре из десяти ты мне дважды поставил! Не прощу! :Е
Когда я на работе, у меня регулярно появляется мысль хакнуть собственную домашнюю машину, потому что я никак не соберусь поднять на ней ssh-сервер :)
Reply to your post...
А тебе известна какая-нибудь уязвимость, позволяющая это сделать?

Re: Reply to your post...
А что мне мешает специально ее посеять? Моя машина, что хочу, то и делаю :)
Reply to your post...
Специально посеять можно только заранее, но раз уж делать что-то заранее, то, может, просто поставить sshd?

Re: Reply to your post...
На самом деле регулярно что-нибудь да появляется для того, что стоит на моей машине.
Re[2]: Reply to your post...
А вообще, стоит развить это направление мысли: умышленное использование непреднамеренных уязвимостей в собственной системе.
Re: Re[2]: Reply to your post...
Под девизом: «Кто нам мешает, тот нам поможет.»