Её дочь зовут Помогите! Меня заставляют подделывать паспорта

Специалист по безопасности под ником Droogie решил, что на его новом автомобильном номере должно быть написано NULL. В основном ради шутки, но был и скрытый смысл. Он надеялся, что благодаря такому хаку сможет избежать штрафов за превышение скорости (по понятной причине). Вышло совсем наоборот, о чём исследователь рассказал на хакерской конференции DEF CON 2019 в своём выступлении 11 августа (презентация "Go NULL Yourself or: How I Learned to Start Worrying While Getting Fined for Other’s Auto Infractions": pdf, зеркало).

В США вокруг автомобилей действует настоящий культ. Считается, что машина должна быть чуть ли не у каждого. Дороги и парковки занимают огромную площадь и ложатся бременем на горожан. Возле некоторых дорог даже нет пешеходных дорожек, а человек без машины воспринимается почти как неполноценный. Американцы всячески лелеют своих железных «коней»: наклеивают стикеры с лозунгами на бамперы и стёкла. А некоторые заказывают даже персональные номерные знаки.

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

«Я подумал: я крут, стану невидимкой, — говорит Droogie, который работает консультантом по безопасности в компании IOActive. — Вместо этого собрал все штрафы».


Droogie выступает на конференции DEF CON 2019. Фото: Jack Morse / Mashable

Droogie надеялся, что новый номерной знак сработает как в классической карикатуре «Мамины эксплоиты» на КДПВ. По его расчёту, база данных увидит NULL и не сможет обработать никакую квитанцию на штраф. К сожалению, произошло прямо противоположное.

Сначала хакер получил штраф за нарушение правил парковки. Затем, когда определённая база данных выданных штрафов связала номерной знак NULL с его адресом, она отправила ему все остальные штрафные квитанции, у которых не было реального номерного знака. Общая стоимость штрафов составила $12 049.


Фото: Jack Morse / Mashable

Droogie сказал аудитории DEF CON, что обратился с жалобой, но не получил сочувствия ни в Департаменте автомобильного транспорта Калифорнии (DMV), ни в полиции Лос-Анджелеса. Сотрудники обоих учреждений сказали ему просто сменить номерной знак на какой-нибудь другой. А хакер отказывается это делать и намерен добиваться справедливости, то есть исправления глючных компьютерных систем.

Droogie хотел перерегистрировать номерной знак на сайте DMV, но онлайновая система отказалась принимать NULL в качестве валидных входных данных (на скриншоте).


Фото: Jack Morse / Mashable

Хотя власти аннулировали первую порцию штрафов в размере 12 000 долларов, частная компания, которая управляет базой данных, не исправила проблему — и Droogie продолжает получать по почте новые штрафные квитанции. На текущий момент накопилось новых штрафов более чем на $6000.

P. S. В 1979 году (!) произошла похожая история. Парень подал заявление на регистрацию персонализированного номерного знака SAILING, там же в заявлении указал второй вариант BOATING. Оба варианта оказались заняты. Поскольку никаких других вариантов автовладелец не хотел, то далее указал NO PLATE — и ему действительно выдали номерной знак NO PLATE. В итоге ему пришло более 2500 квитанций об оплате штрафов за парковку, потому что если у нарушившей машины не было номерного знака, в компьютерную систему вносилось NO PLATE.

См. также:


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


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

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


  1. ks0
    14.08.2019 17:25
    +8

    Моя фамилия Итого!


    1. p0gank
      14.08.2019 17:33
      +17

      Не ходите с такой фамилией в налоговую.


      1. MaxVetrov
        14.08.2019 18:48

        А с фамилией «Вычет» можно?


        1. mig126
          14.08.2019 19:13

          Один раз можно, но потом налоговая сама к вам придёт.


    1. joffer
      15.08.2019 07:24

      на вас навесят Огого!)


  1. Dmitry88
    14.08.2019 18:28
    +2

    Поиск по NULL и поиск по строковому значению NULL разве не суть разные вещи?


    1. red_andr
      14.08.2019 19:09
      +1

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


      1. Mogwaika
        14.08.2019 19:35

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


        1. Wesha
          14.08.2019 20:06
          +2

          А зачем вообще это в одну переменную пихают, а не заводят отдельный бит валидности?

          Потому что систему писали люди, по уровню соображалки примерно аналичные описанным вот здесь. Слово "индиот" не зря придумано...


        1. red_andr
          14.08.2019 21:59

          Для простоты конечно же. Только вот подумать, чем эта простота обернётся, уже не могут.


        1. alexkmbkdr1
          16.08.2019 08:04

          Зачем вообще в этом случае что-то писать в поле номера. Номер не определен -пустое значение.


        1. ybqwer
          16.08.2019 16:02

          надо различать значение null и значение строки «null», в нормальном я.п. нет такой проблемы.


      1. deseven
        14.08.2019 22:22

        'NULL' != NULL
        Иначе у них реально отсуствует экранирование.


        1. Greendq
          16.08.2019 11:57

          Я вам больше скажу, в SQL даже NULL!=NULL :)


          1. Wesha
            16.08.2019 15:52

            Для SQL есть такое мнемоническое правило: NULL — он как ведьмин студень: превращает в себя всё, до чего только дотрагивается, поэтому (12345 = NULL) -> NULL.


      1. roscomtheend
        15.08.2019 10:51

        deseven


        Тут, похоже, на библиотеку разбора входящего XML/JSON, где вместо отсутствующего значения передаётся строка NULL и при встрече него зачем-то заносится NULL вместо строкового значения. Менять протокол обмена не хотят, поскольку это может быть обновление ещё и все камер (килер для хакера дешевле выйдет, Механик — редкий специалист, который в сервисе убьёт машину так, что будет выглядеть как поломка и она никогда не попадёт на дороги).


    1. shark14
      14.08.2019 19:17

      В PostgreSQL JSON — нет, например, поиск по not null значениям так записывается:
      where data->'someProperty' != 'null'


      1. vnai
        15.08.2019 07:24

        Может просто так надо: where data->>'someProperty' is not null


        1. SlavniyTeo
          16.08.2019 10:12

          Совершенно неожиданно, но 'null'::jsonb это совершенно не тот NULL, который Вы ожидаете пруф где-то здесь


          select (('{"a":2, "b": null}'::JSONB) -> 'c') is null -- TRUE
          
          select (('{"a":2, "b": null}'::JSONB) -> 'b') is null; -- FALSE


          1. vnai
            16.08.2019 12:08

            Если речь о текстовых полях, то почему не используется оператор ->> для получения текстового представления? В этом случае нет никаких проблем и проверка на null будет проводиться корректно.

            В вашем примере же всё логично, оператор -> выдаёт null, если поле отсутствует в json и 'null'::json, если оно имеет значение null. Иначе бы было невозможно различить две этих ситуации.


          1. ybqwer
            16.08.2019 16:04
            +1

            что значит сея белиберда?


  1. gridem
    14.08.2019 18:42

    Надо было назвать dev null, тогда бы было ok.


  1. johnfound
    14.08.2019 18:47
    +1

    Экранирование входных данных, это весьма неоднозначный путь.


    Просто никогда не создавайте SQL запросы в рантайме. Используйте SQL параметры и не будут проблемы.


    1. Peacemaker
      15.08.2019 15:37

      Я бы с радостью использовал параметры, если бы мог, используя параметры, записать выражение вида «SELECT * FROM table t WHERE t.Id IN (@Argument_name);
      Если так можно, то научите, пожалуйста.


      1. Bolterer
        16.08.2019 07:11

        Проблема как я понимаю в том что количество параметров заранее неизвестно? Если так, то стандартное решение сгенерировать коллекцию параметров и подставить в строку запроса имена параметров, а не их значения, например "select * from table where id in (@p1,@p2,...,@pn)". В этом случае использование параметров получается более громоздким чем обычно что раздражает программистов, но что поделать, безопасность требует жертв.


      1. mayorovp
        16.08.2019 08:38

        Ну, в SQL Server так можно. Но только в хранимках...


  1. denis-19
    14.08.2019 19:05

    Ссылка на полную презентацию хакера в pdf (DEFCON-27-droogie-go-null-yourself.pdf 48.2 MiB 2019-Jul-29 00:37).


  1. Sterhel
    14.08.2019 19:13
    +1


    1. rogoz
      15.08.2019 00:02

      del, картинка уже есть в теме


  1. ibragames
    14.08.2019 19:33
    +2

    «А некоторые заказывают даже персональные номерные знаки.»
    Вот чудные американцы, где еще такое увидишь)


    1. gatoazul
      14.08.2019 23:49

      На Украине тоже можно заказывать знаки с произвольными надписями


      1. RiseOfDeath
        15.08.2019 08:41

        В РФ ПДД тоже предусматривает существование таких знаков. Правда я вживую видел это только один раз (видимо дорого)


        1. artemerschow
          15.08.2019 10:51

          В РФ ПДД тоже предусматривает существование таких знаков
          Простите, но нет. Номерные знаки обязаны иметь вид соответствующий действующему госту. И ГОСТ Р 50577-2018, как и его предшественники, подобное не предусматривает. В живую вы могли видеть сувенирные номера, которые водитель навесил вместо своих в нарушение закона.


      1. m00r3ik
        15.08.2019 14:44

        Да, но к ним в комплекте всегда идут еще и «обычные» (именной к ним привязан), которые желательно возить в багажнике на случай пересечения границы или оформления ДТП


    1. thesun2003
      17.08.2019 10:32

      Например в Новой Зеландии. Можно заказать свой номер — стоит денег, но люди пользуются. Само собой, есть какие-то критерии и цены различные. Популярная штука.


  1. nick_gabpe
    14.08.2019 20:11
    +2

    А что если проехать под камерой с номером DROP TABLES Penalties;? :)


    1. w0den
      14.08.2019 20:27
      +2

      A new way of SQL Injection

      DROP DATABSE TABLICE


    1. arkamax
      14.08.2019 20:58

      В случае «успеха» — вероятно, обвинение по CFAA (если в штатах).


  1. pewpew
    14.08.2019 20:55
    +8

    У меня был забавный случай. На одной из прошлых работ банк выдал мне зарплатную карточку, нормер которой оканчивался на 0000. Как правило, это не представляло проблем. Но вот на заправке Лукойл терминал не принимал эту карту. Кассиры разводили руками и звали старших. Так, выяснилось, что на кассе есть расширенный режим, в который входят через F12. В этом режиме карта принималась. Этим знанием я иногда удивлял кассиров-практикантов.


    1. burzooom
      15.08.2019 09:37

      Я подозреваю, что на самом деле F12 делает сброс всей системы. Хорошая попытка, но нет


  1. panvartan
    14.08.2019 21:24

    The matrix has you


  1. iig
    14.08.2019 22:07

    "Я подумал: я крут, стану невидимкой, — говорит Droogie, который работает консультантом по безопасности в компании IOActive"


    Интересно, какого результата этот консультант ожидал? Что во всех полицейских базах произойдет деление на 0?


    1. Loggus66
      14.08.2019 22:52

      На что он надеялся:
      SELECT id, sum, plate, address WHERE plate IS NOT NULL; //формирование списка штрафов за сегодня по всем должникам и рассылка.
      Как было реально: по номеру система сформировала штраф и собрала в кучу все значения с NULL в поле, правда, как указали выше, так не дожлно быть, но на практике случилось.


      1. iig
        15.08.2019 12:47

        Не могу представить условий, в которых 'NULL' (строка) превратится в NULL (литерал).
        Скорее всего все он понимал, и задача стать невидимкой успешно выполнена. Его 'NULL ' успешно теряется среди тысяч нераспознанных номеров. Если бы он просто прицепил картонку с надписью NULL — прокатило бы (до первого живого полицая).


  1. Ob-iVan
    14.08.2019 22:42
    +1

    Произошедшее с героем статьи можно описать одним простым словом: довыпендривался ;)


    1. Wesha
      14.08.2019 23:55

      "И почему только в нашей стране слова "сильно умный нашёлся" являются оскорблением? " (с)


      1. Ob-iVan
        15.08.2019 15:58

        Быть умным и быть выпендрежником — не одно и то же, Вы не находите?
        Лично у меня среди знакомых есть и те, и другие. И это разные люди.
        Если бы этот «хакер» был умным, то видимо у него были бы нулевые штрафы, а не те, которые он получил в результате. Разве нет?


        1. Wesha
          16.08.2019 02:09

          Если бы этот «хакер» был умным, то видимо у него были бы нулевые штрафы

          А у Вас при попытке вмешаться в работу незнакомой Вам системы всё-всё с первого раза получается именно так, как Вы планировали?


          Длительное время я, приступая к анализу какой-либо системы, начинал с чего-то вроде "если бы мне нужно было решить задачу, которую решает эта система, я бы написал код так-то и так-то". Как я ошибался! Практически каждый раз выяснялось, что в исследуемой системе использовалось гораздо более дебильное менее элегантное и более дырявое решение :( Теперь я начинаю с посылки "как бы эту задачу решил жертва ЕГЭ средний идиот". (Как видите, в рассматриваемой системе/базе произошло именно это — сравнение со строковым значением "NULL" вместо типа NULL.) Возможно, хакер из статьи просто ещё не дорос до понимания этого.


          1. Ob-iVan
            16.08.2019 13:14
            -1

            Вы, на самом деле, все правильно написали. Если бы права позволяли, поставил бы стрелку вверх.
            Вы абсолютно правы в том, что хакер из статьи не дорос до анализа того, как может повести себя неизвестная ему система при поступлении в нее сформированных им исходных данных. Будь он более опытен, он бы легко пришел к выводу, что с определенной вероятностью суммы штрафов могут как уменьшиться, так и возрасти. Да и вообще может произойти много всего непредвиденного. Слишком непредвиденного, чтобы экспериментировать на своем «реальном аккаунте».
            Значит, одно из двух: либо он неадекватно оценил собственные силы, либо желание эффектно «понтануться» оказалось сильнее голоса разума.
            Оба этих варианта прекрасно подходят к портрету типичного «выпендрежника». В чем я данного персонажа и подозреваю.


  1. satie
    15.08.2019 01:52

    image


    1. DarkWolf13
      15.08.2019 15:28

      а «товарищъ» возможно знает структуру и систему.


  1. ybqwer
    15.08.2019 07:24

    молодец, буквально хакнул сам себя)) все хакерские умные штуки разбиваются о усколобость программеров для которых NULL это строка))


    1. RiseOfDeath
      15.08.2019 09:41

      Товарищ сам себе злобный Буратино.

      [offtopic]
      Как в старом анекдоте:
      Поломал хакер Вася своего провайдера, и сидит как дурак без интернета.
      [/offtopic]


      1. whiteodmin
        15.08.2019 13:58

        Никогда не слышал такого, в копилку, спасибо!


  1. nfw
    15.08.2019 08:42

    То есть в системе раз в месяц(?) собирается штрафов на 12000$ буквально никому, но всем плевать и никто даже не пытается их проверять?


    1. bRUtality
      15.08.2019 09:09

      Видимо, доработка стоит дороже…


    1. AstarothAst
      15.08.2019 10:39

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


      1. chapai22
        15.08.2019 12:10

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


        Вобще чувак попал адски. Если в полиции что то можно доказать (потеряв минимум полдня и предъявив машину) то штрафы передаются для обработки в частную компанию которой удалять и править совсем не упало (удалятся же реальные штрафы и значит процент). А потом это все передается на коллекшн и тем доказывать вообще дохлый номер — только через суд. По каждому штрафу. Каждому. И той частной — только суд.
        мало того что это дорого и очень затратно но даже по времени много. А машину у суда парковать геморрой.
        Штрафы из других штатов не передаются — но если заехать в Аризону или Неваду и там что то висит на NULL — то остановит первый же патруль который обратит внимание на номер. Причем разбираться на дороге не станет а отконвоирует. А за злостную неуплату вообще то тюрьма может и засветить. Вполне реально, особенно если через толл проехали или с криминалом связано.


        Как в ногу себе выстрелить только хуже.


        1. drobzik
          15.08.2019 15:40
          +1

          Вобще чувак попал адски

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


          1. chapai22
            15.08.2019 15:55

            Не стоит фантазировать на основе голливуда. Адвокат не окурок, на улице не валяется. Это минимум 400 баксов в час. И таких часов будет много, и все из своего кармана.
            За потерянное время никто компенсаций не платит, как и за моральный ушерб.
            Что вообще такое "моральный"? И причем здесь полиция.А реальный доказать надо.
            Причем даже если номер сменит, его адрес и имя уже связали с нулем — отмазываться долго. А по тому, что он хотел за спидинг тикетов не получать — настоящее приключение впереди.
            Так что как в стишке "его пример другим наука" и "на всякую хитрую попу что то найдется.."


        1. LeoXX
          15.08.2019 17:01

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


          1. chapai22
            16.08.2019 06:18

            Не всегда попытка хака системы будет безнаказанной.
            Был такой плакат — "не стой под стрелой" именно для такого случая.
            Представьте иной сценарий. Вам нравится военная форма и прочее хаки. Ходите только в этом и это круто. Но! не растет борода. Покупаете накладную, черную и густую, наклеиваете на суперклей и теперь хорошо.
            Затем по приколу меняете имя. Это законно, проблем нет, государство делает. Для полного веселья выбираете Шамиль Басаев. Нуачо? Имея ввиду всех надинамить — прийдет Омон/ФСБ а вы им в лицо "ха-ха-ха!" и они прикольно утрутся.


            Затем внезапно ночью к вам вламывается группа захвата, выносят окна и двери и мнут ребра. И никаких "хахаха" не получается. Глядь — ошибочка вышла. А через пару дней опять рейд и опять распластывают. И снова лицо синеет. Оказывается не так весело как задумывалось.


            На жалобу резонно говорят, да ошибка, — смените имя и не играйте с огнем и не подставляйтесь. Система задумывалась не для игрунов и хакеров а для дела.
            Но вы желаете быть шамилем басаевым и точка.
            Спрашивается, кто виноват? Государство что выдало вам новое имя? Или омон который исполняет свою работу, ее часть, не желая вам зла. Или программисты систем, которые реагируют на шамильбасаева (подтвержденного: форма, борода) посылкой сообщения омону.
            Или то, что система несовершенна как и все системы, но так как делали для другого то до вас лично, нарочно ищушего дырку, проблем не было.


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


            Возвращаясь к оригинальному случаю — государство имеет право выписывать штрафы и вам присылать. У вас есть законом даденая возможность оспорить и не платить. Что он и делал. Ушерба денежного нет.
            Компенсаций за ошибочно выписанный штраф и усилия на его оспаривание законом не предусмотрены (что логично, мало ли кто как устал при оспаривании).
            А в систему выписывания левых штрафов она сам залез, по доброй воле, причем не случайно.


    1. Seawind
      15.08.2019 13:55

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


  1. Pirozhok_s_pavidlom
    15.08.2019 12:39

    А если попробовать поменять Имя и Фамилию тоже на NULL?


  1. SIDS
    15.08.2019 12:39

    У меня др 29 февраля. Однажды году так в 2005 я ехал в Одессу на поезде. На границе с Украиной пограничник пытался зарегистрировать мой паспорт используя некий переносной терминал. Терминал не желал принимать дату рождения и ругался, что ее не существует.
    Пограничник тогда говорил, что если терминал дату не принимает — значит такой не существует, и у меня паспорт не действительный и вообще я — шпион.
    Иногда сложно распознать шутит ли пограничник или нет, сами знаете)) Но в страну пустили


    1. Areso
      15.08.2019 13:53

      Пограничник может шутить, а может не шутить. Самое главное правило — не шутить с пограничником.


      1. syrslava
        15.08.2019 13:55

        Он тоже умеет шутить, правда, со специфичным чувством юмора.


    1. mig126
      15.08.2019 17:53

      Т.е. день рождения вы отмечаете раз в четыре года? Не весело было наверное в детстве в такие моменты. :-/


  1. DarkWolf13
    15.08.2019 15:27

    с нашими системами распознавания номерных знаков такой фокус не случиться, но и экслоит тоже не получиться использовать. А может все-таки зря?


    1. shalm
      16.08.2019 01:31

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


      1. DarkWolf13
        16.08.2019 09:18

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


        1. shalm
          16.08.2019 10:06

          Система должна понять, что фотка проблемная прежде чем отправить её чекать вручную. Если есть способ избежать такого поворота, то будет работать. Кстати возможно все выписанные штрафы просматриваются вручную перед отправкой, а не какие-то особенные. Тут же стоит вопрос, можно ли заставить алгоритм ошибиться и не выписать штраф, потому что 1) вместо номера она распознала наклейку 2) текст на наклейке вызывает сбой. По идее до человека не должна потом дойти фотка, которая подлежит проверке.


          1. syrslava
            16.08.2019 13:30

            Вот за это мне нравится Хабр.


          1. mig126
            16.08.2019 13:53

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


            1. DarkWolf13
              17.08.2019 14:43

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


  1. shalm
    16.08.2019 09:47

    del


    1. MIKEk8
      16.08.2019 16:09

      '); DELETE * FROM comment where id = '20512511'; — а вдруг


      1. ybqwer
        16.08.2019 16:16

        нее, хабр это не нубский сайт и не допустит такой ошибки.


  1. OldGrumbler
    17.08.2019 10:25

    Мне давно уже интересно, что будет с сись-темами распознавания знаков при виде машины, расписанной разными случайными буквами и цифрами того же размера… («умный человек прячет дерево в лесу») )))