Я уже давно ничего не писал об ИИ или о том, как мы (не) используем его для разработки в нашем проекте curl. Больше откладывать нельзя. Хочу продемонстрировать вам наиболее значительный эффект, который ИИ может оказать на curl сегодня, подкрепив его примерами.

▍ Охота на баги


Наша программа охоты на баги подразумевает выплату реальных вознаграждений хакерам за то, что они сообщают об уязвимостях безопасности. Шанс заработка привлекает определённое число «искателей удачи». Это люди, которые, по сути, просто грепают паттерны в исходном коде или в лучшем случае выполняют какое-то несложное сканирование безопасности. После этого, не проводя никакого дальнейшего анализа, они сообщают о своих открытиях в надежде, что смогут получить денежную награду.

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

На данный момент по результатам охоты мы выплатили более $70 000. Всего мы получили 415 отчётов об уязвимостях. Из них в конечном итоге подтверждено было 64. При этом 77 оказались информативными, то есть обычно указывали на баги или аналогичные проблемы. Оставшиеся 66% оказались не связаны ни с проблемами безопасности, ни с типичными багами.

▍ Приукрашенный мусор хуже всего


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

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

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

▍ Отчёты, сгенерированные ИИ


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

Сегодня пользователи, похоже, предпочитают задействовать доступные LLM, скармливая им фрагменты кода curl и затем отправляя вывод в качестве отчёта об уязвимости. Усложняет обнаружение подобных фейков то, что пользователи также копируют и вставляют в отчёт какие-то свои формулировки. Это, конечно, разбавляет вывод ИИ, но мусор всё равно остаётся мусором.

▍ Выявление мусора, сгенерированного ИИ


Люди, участвующие в охоте на баги, зачастую не говорят бегло по-английски, и порой сложно с ходу понять, что они имеют ввиду. В таких случаях может потребоваться несколько уточнений, чтобы всё достаточно прояснить. Это, естественно, абсолютно нормально и приемлемо. Язык и культурные различия выступают реальными преградами.

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

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

▍ Пример A: отчёт о раскрытии изменений кода


Осенью 2023 года я предупредил сообщество о скором обнародовании уязвимости CVE-2023-38545, серьёзность которой мы оценивали высоко.

За день до её публикации, один из пользователей Hackerone прислал отчёт: уязвимость и соответствующие изменения кода Curl CVE-2023-38545 обнародованы в интернете.

Звучало довольно угрожающе, и в случае истинности оказалось бы ощутимой проблемой.
Тем не менее в отчёте присутствовали типичные галлюцинации ИИ: в нём смешивались и сопоставлялись факты и подробности из старых отчётов о безопасности, создавая что-то новое, никак не связанное с реальностью. Изменения кода на тот момент не были обнародованы в интернете. Фактически раскрытые изменения касались предыдущих, более старых проблем. Как, собственно, и предполагалось.

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

▍ Пример B: уязвимость переполнения буфера


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

Утром 28 декабря 2023 года пользователь отправил на Hackerone такой отчёт: уязвимость переполнения буфера при обработке WebSocket. В моей временно́й зоне тогда было утро.

Опять же, одно только название уже звучит серьёзно. Поскольку наш код WebSocket всё ещё экспериментальный, и в программу охоты на баги не включён, я отнёсся к отчёту расслабленно. Его прислал незнакомый мне пользователь, но «репутацию» на Hackerone он имел неплохую — это был не первый его отчёт о безопасности.

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

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

Спустя полтора часа я просмотрел код, не нашёл никаких проблем, ещё раз перечитал его, потом ещё и ещё… Где, чёрт возьми, здесь переполнение буфера, о котором говорит отправитель? Тогда я разместил под присланным сообщением первый комментарий с просьбой прояснить, где конкретно происходит указанное переполнение.

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

Не знаю наверняка, были ли ответы пользователя сгенерированы конкретно LLM, но есть несколько признаков того.

▍ Бан таких пользователей


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

Я обратился к разработчикам Hackerone с просьбой расширить функциональность.

Обновление: такая функция существует, просто я искал её не там…

▍ Взгляд в будущее


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

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

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

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

Обсуждение темы на Hacker news.

Telegram-канал со скидками, розыгрышами призов и новостями IT ?

Комментарии (21)


  1. ImagineTables
    18.08.2024 11:43
    +10

    Странно обвинять LLM в отсутствии интеллекта. Всё равно, что обвинять в этом табуретку. Кто сказал, что он там должен быть? Ах, маркетологи? Ну так, как говорил профессор Стравинский у Булгакова, «Не всему же нужно верить».

    LLM это очень простой алгоритм, который продолжает начатый текст на основе статистических закономерностей. Если верить Джону Кармаку, который недавно тоже ударился в их разработку, базовое ядро там измеряется всего тысячами строк. За качество человеческих иллюзий отвечает не алгоритм, а то, что любая тема кем-то когда-то обсуждалась. Как у «Акинатора» )) Так откуда у одних людей наивная уверенность, что усреднение отчётов статметодами может сгенерировать новый отчёт об ошибке, а у других — что первые заслуживают хоть какой-то критики? Автор, вроде, нашёл, где у него кнопка бана )))

    Кстати, почему с ними не бороться, как в старом анекдоте: «Ищем телепата на большую зарплату. Обращаться сами знаете куда»? В смысле, сделать публичный стенд, кто его пробил, от того и принимать отчёты? (Я не спец по безопасности).


    1. d-sh
      18.08.2024 11:43
      +9

      Никто не знает что такое интеллект и как он работает. Может так же как ллм. Результаты деятельности подозрительно похожи.


      1. vlad4kr7
        18.08.2024 11:43

        Никто не знает, но все им пользуются?!

        парадокс


        1. Wesha
          18.08.2024 11:43
          +1

          Никто не знает, но все им пользуются?!

          Вы сейчас описали примерно 95% современных технологий.

          Разработчики, конечно, знают — однако где те разработчики?


          1. vlad4kr7
            18.08.2024 11:43

            Ответ на ваш вопрос: gtihub -> owner/commiters

            Никто не знает, но все им пользуются?!

            со 'все', я наверное погорячился, извините


            1. Wesha
              18.08.2024 11:43

              gtihub -> owner/commiters

              Узнайте мне, пожалуйста, кто ответственен за недавний баг в антивирусе, который полмира положил. /s


              1. vlad4kr7
                18.08.2024 11:43

                вам положил, или полмира?

                • положил девелопер, ну бывает

                • полмира - только и исключительно 'эффективные' манагеры, в первую очередь из микрософта


                1. Wesha
                  18.08.2024 11:43

                  положил девелопер

                  Ну так я и говорю — имя, фамилия, явки, адреса, пароли, это ж так просто! (Ну, Вы говорите.)


                  1. vlad4kr7
                    18.08.2024 11:43

                    Ключ от квартиры кошелька


      1. ImagineTables
        18.08.2024 11:43

        Может так же как ллм.

        Нет, не может. Для LLM нужны готовые датасеты — тексты, созданные человеком. LLM их миксует, и — какой сюрприз! — смесь внезапно оказывается похожа на тексты, созданные человеком.

        Откуда датасеты для интеллекта взяла природа? Добрый боженька написал?


        1. acc0unt
          18.08.2024 11:43

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

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

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


          1. Wesha
            18.08.2024 11:43

            А также
            — Не умеют считать
            — Не умеют считать
            — реагируют только на слова "пух" и "железо", при этом начисто игнонируя числа.
            — реагируют только на слова "пух" и "железо", при этом начисто игнонируя числа.

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

            Вот поэтому и есть мнение, что человек — это симбиоз примата (той самой "тушки", "железа") и мозгового слизня (нейросетки в его черепушке, "софта").


            1. acc0unt
              18.08.2024 11:43

              Вбейте в гугл про токенизацию и авторегрессию что ли.

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

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


              1. Wesha
                18.08.2024 11:43

                Я в курсе всего того, что Вы сказали. Я не к тому, что "я не знаю, как это работает", а к тому, что до "интеллекта" ему ещё как пешком до Луны.


                1. acc0unt
                  18.08.2024 11:43

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


                  1. Wesha
                    18.08.2024 11:43

                    Такие претензии возникают от того, что постоянно возникают новые персонажи с воплями "смотрите, оно всё могёт!!!111", а когда им на конкретных примерах демонстируешь, что ни фига не могёт и ни фига не всё (причём именно по той причине, что Вы выше указали) — то очень сильно удивляются.


          1. ImagineTables
            18.08.2024 11:43

            Так и людей тоже целенаправленно обучают на данных, созданных другими людьми.

            Это так, но откуда взялись первые знания? И как очень простые знания типа розжига огня превратились в изощрённые знания типа ОТО и КМ? Считается, что такое происходит в ходе эволюции. Мышление — эволюционный процесс. А что есть эволюционного в LLM? НИ-ЧЕ-ГО.


  1. ainu
    18.08.2024 11:43

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

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


    1. killyself
      18.08.2024 11:43
      +1

      Потому что очень многим пользователям гпт именно того и хочется, вот они и подменяют действительное, а потом грустят, когда сам инструмент с себя пытается сорвать иллюзию


    1. Filipp42
      18.08.2024 11:43

      А какие паттерны вам кажутся самыми полезными?


  1. Panzerschrek
    18.08.2024 11:43

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