Комментарий к «Как попасть на дачу президента в пять часов утра»

    Было бы странно, заниматься поиском ошибок в программах и при этом пройти мимо этой статьи.

    Хочу оставить ряд комментариев. Основной их смысл, что это не похоже на страшные закладки. Мне этот код больше напоминает какой-то тестовый прототип, а не готовое приложение. Так что возможно не всё так страшно, как преподносит автор в статье. Во-первых, код содержит ошибку и случайные числа используются всегда. В реальности мимо такого вряд ли прошли в процессе тестировании системы. А во-вторых, существует такое понятие как «сертификация программ». И приведенный фрагмент кода — первый кандидат на обнаружение.

    Мой скепсис касательно величины угрозы


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

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

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

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

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

    Первое. Это похоже больше на прототип, а не оконченное решение


    Для начала, рассмотрим этот фрагмент кода:

    unsigned short Hours, Minutes;
    ....
    bool hungrytest = Hours && Hours > 5 && Hours < 6 &&
                      Minutes > 0 && Minutes < 30;
    ....
    CreatePoint_(post, advangle,
                 hungrytest ? PureDataRFZY_[posrt].r_fr : random(100));
    

    Автор статьи возможно слабо знаком с языком Си++ или был недостаточно внимателен. На самом деле, нет никакой уязвимости системы утром с 5.01 до 5.29. Если уж на то пошло, система уязвима круглосуточно.

    Выражение написано неправильно. Обратите внимание, что переменная 'Hours' имеет целочисленный тип. Это значит, что какое бы значение не хранилось в переменной Hours, условие «Hours > 5 && Hours < 6» всегда является ложным.

    Это значит, что переменной 'hungrytest' всегда присваивается значение 'false'. И как следствие функция random(100) вызывается независимо от текущего времени.

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

    Этот и другие приведенные фрагменты кода на мой взгляд говорят, что этот какой-то недоделанный прототип. Конечно, у меня слишком мало данных, но ощущение именно такое.

    Например, предупреждение «ОАО НПП… не оплатило разработку....». Как по мне, что эта некая защита на всякий случай, вставленная в прототип, выданный кому-то «на попробовать».

    Жесткий сетевой адрес 192.168.88.88 скорее всего сделан для удобства отладки. И так далее. Или этот фрагмент кода вообще просто ещё не был дописан на тот момент.

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

    Второе. Подобные программы положено сертифицировать


    Ответственное программное обеспечение проходит сертификацию. Я мало знаком с этой областью, но знаю, что сертификация существует и код с явными закладками её не пройдёт.

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

    Это кстати отличает подобные инструменты от классических анализаторов кода, таких как например наш PVS-Studio. Мы ориентируем PVS-Studio для регулярного поиска новых ошибок. А инструменты сертификации мало пригодны для такого режима в силу большого количества выдаваемой информации. Поэтому, как я понимаю, их принято применять к коду уже законченного программного проекта.

    Разработкой таких инструментов в нашей стране занимаются такие компании как Эшелон (АК-ВС), Positive Technologies и так далее.

    В том числе эти инструменты укажут на участки кода, где используются такие функции как rand(), random() и так далее. Это явно делается, раз удалось найти закладку в банковском ПО, о которой я упоминал в самом начале статьи.

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

    Заключение


    Статья «Как попасть на дачу президента в пять часов утра» получилась очень интересной. Выражаю автору благодарность. В статье поднята интересная тема, можем ли мы доверять системам, ответственным за безопасность.

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

    С другой стороны, описанные закладки хорошо показывают, как важно проводить аудит программного обеспечения и подвергать его сертификации. И слава бога, в случае важных программ, такая сертификация осуществляется.
    PVS-Studio
    360.88
    Static Code Analysis for C, C++, C# and Java
    Share post

    Comments 24

      +15
      Он явно бы не прошел сертификацию.

      Слышал я как-то истории о том, как сертификация у продуктов безопасности проходит (связанные с биометрией или шифрованием). Берётся код, ставиться на полку. Чтобы если что — можно было всё проверить. В реальности код никто не смотрит. Да и как ты поймаешь ошибку в сложной мат-модели, если автор захотел её запрятать.
      Конечно, наверное какие-то продукты особой важности могут честно сертифицироваться. Но это сколько денег нужно потратить и времени. Это нужно в каждой мат модели разобраться, в каждой подгоночной константе.
        +22
        Конкретно мне доводилось участвовать в разработке ПО для определенного типа оборудования, поставляемого в МВД и ФСБ.
        Процесс сертификации комплекса прошел мимо меня и как сообщило позже руководство, сертификат мвд был получен на весь комплекс и распространялся в т.ч. и на ПО, при этом (со слов руководителя) на сертификацию передавали только release-версию ПО, т.е. никаких исходных кодов.

        PS: Ах да, забыл сказать, в той компании никакого ревью кода не делалось и в продашкн вполне могла попасть версия, содержащая
        «ОАО НПП… не оплатило разработку....».
          +22
          Проблема в том, что именно вот такой тестовый прототип возможно и есть «работающее» приложение.
            –20
            Похоже на скрытую (не очень хорошо) рекламу PVS-Studio.
              +36
              Это блог PVS-Studio… За блог платится денежка регулярно.
              Уверяю вас, это делается не для того, чтобы потом в блоге писать посты на отвлеченные темы…
              Не буду тыкать пальцем, но есть несколько примеров, когда в блоге компании публикуется совершенно сухая и не интересная инфа…
              Блог PVS-Studio ведется для рекламы соответствующего софта. Это никогда не скрывалось. Но делается это интересно и познавательно.
                +6
                Хорошо, просто я бы ничего не написал бы, если бы в этой статье прочёл что-нибудь новое, кроме того, что было в комментариях к обсуждаемой статье.
                Рекламируйте, на здоровье, ничего не имею против.
              +6
              Сертифицированная и применяемая вплоть до документов «Особой Важности» МСВС пробивалась существовавшими в паблике на момент применения уже несколько лет эксплойтами. В том числе local privilege escalation через уязвимости в практически окаменелой версии ядра. Не говоря уже про что-то типа shellshock.
              Обновления на места внедрения МСВС с грифом включительно выше «Секретно» доставляются (если доставляются вообще) редко чаще раза в год.
              А какое-то узкоспециальное ПО по «тендеру»? Пфффф.
                0
                В вооруженных силах все компьютеры с чувствительными данными отключены от внешней сети физически, и в них не положено втыкать неведомую фигню. Если необходим доступ в сеть — используется отдельный компьютер.
                  +4
                  А так же уровень защищенности объекта регламентирует размер огороженной территории. Я все это знаю. Только это никак не увеличивает осмысленность «сертификации» ПО в РФ.
                    0
                    Сертификация подразумевает соответствие определенным требованиям, которые от программы к программе могут отличаться разительно. В случае разработки под заказ получается банальная приемка ПО. Вероятно, Вы имели в виду качество аудита приложений. В любом случае, интересно было бы узнать от Вас о разнице в осмысленности процесса «тут» и «там».
                +13
                Извините, конечно, но это не пост, а какая-то фигня. Взят и так всем очевидный факт и обсасан разными словами на несколько тысяч знаков.
                  +5
                  Лет 10 назад я начал искать заказы на одном известном сайте для фрилансеров. Рейтинг начал быстро расти, так как я специализировался на одной сложной CMS, которая в тот начинала становиться популярной, но была очень сложной для установки и расширения. Там применялись очень продвинутые решения, некоторые из которых до сих пор не реализованы в других системах, но она была очень сложной для понимания и разработки, поэтому найти разработчиков было сложно и я не испытывал недостатка в заказах.

                  В какой-то момент небольшая компания из США предложила мне разработать нестандартный продукт для данной CMS. Разработал за неделю прототип и отправил заказчику. Спустя несколько дней заказчик присылает список доработок/исправлений, со скриншотами для наглядности. На скриншотах видна адресная строка браузера, в которой виден трехбуквенный домен одной из очень серьезных государственных организаций США… У них немного таких трехбуквенных организаций, в одной из них небезызвестный Сноуден работал…

                  Открываю сайт компании и читаю, что они разрабатывают софт для серьезных гос. учреждений США, поверхностно упоминается система, которую я делаю, говорится, что они сертифицированы по всяким серьезным стандартам безопасности… Исправил указанные недостатки, и больше они ко мне не обращались. А что мне еще оставалось делать? Расскажи кому — не поверят.

                  Единственное, что пришло мне в голову — недобросовестный или ленивый сотрудник не мог справиться с работой, и пошел на фрилансерский сайт.

                  Так что бардак происходит и там, где есть сертификации, и даже там, где, казалось бы, намного более серьезное отношение к безопасности.
                    0
                    Надеюсь бэкдор оставили?
                      0
                      Ради чего? Работаешь ведь не только за деньги, но и на репутацию. Бэкдор бы мне ничего не дал, кроме потенциальных проблем:
                      — подмоченную репутацию
                      — потенциальные проблемы при попытке получить визу в США
                      — возможность попасть в тюрьму в США если я вдруг решу туда поехать

                      Да и просто совесть бы мучала. Непонятно, какие блага бы я от этого получил. Узнал бы о том, как они ловят преступников? Список сотрудников? Мне это ни капли не интересно.

                        0
                        >Непонятно, какие блага бы я от этого получил.
                        Это зависит, что под благами понимать, если чисто материальные, то, конечно, никаких. А если к материальному добавить идеальное и задать вопрос: «как я могу помочь Родине в случае чего» то ответ кардинально меняется.
                          +2
                          Это шутка? Вы когда за границу отдыхать едете, стремитесь сфотографировать военные объекты или как-нибудь подгадить «вероятному противнику»?

                          Я просто по-другому отношусь к жизни и к людям. Для меня все люди одинаково важны: и те, что живут здесь, и те, что живут там. У меня нет причин делать плохое людям «там» потому что я живу «здесь».
                      0
                      Вспоминается «Требуется опытный хакер. Просьба контакты оставлять на www.micorosoft.com».
                      +8
                      Вы слишком хорошо думаете о том, как сдаются (и принимаются) подобные комплексы.
                        +4
                        Читал и смеялся. В стране, где откат на откате и откатом погоняет, есть нормальная сертификация безопасности? Её кот наплакал даже на западе.
                          +6
                          Вполне могла быть следующая ситуация:

                          Для получения госзаказа делается силами студентов этакая демка, в которой фактически никакой логики — только красивый интерфейс. А когда заказ получается, проект делается по человечески. Я, будучи студентом, однажды разрабатывал некое банковское ПО аналогичного качества.

                            +3
                            Про то, как сертифицируют, я помолчу. Достаточно знать, как стандарты разрабатываются, по которым потом сертификация происходит.
                            • UFO just landed and posted this here
                                0
                                Не хочется разрушать веру в деда мороза, поэтому просто намекну, что сертификация происходит с участием коньяка и довольно быстро. Не знаю, почему принят коньяк, а не водка, но так уж у нас повелось.
                                  0
                                  Работал несколько лет в конторе, которая продавала софт, сертифицированный во ФСТЭК (ФАПСИ) и ФСБ.
                                  Весь нюанс в том, что сертификация длится несколько месяцев, а в сертификате пишется конкретная версия ПО, например «3.7.3». Другая версия уже официально не считается сертифицированной. На диске с ПО наклеена голографическая этикетка, контрольная сумма дистрибутива вписана в сертификат.
                                  Вопрос в том, что делать, потом, если в сертифицированной версии находятся и исправляются критические ошибки. Ответ простой, появляется версия 3.7.3 (build 3434). Наверное не стоит объяснять, что никакими контрольными суммами новая версия не проверяется. Заказчики всё прекрасно понимают и закрывают на это глаза, потому что никто не готов ждать ещё полгода, пока ошибки исправятся и появится новая сертифицированная версия.

                                  Only users with full accounts can post comments. Log in, please.