写点什么

一张“Null”车牌引发的天价罚单

使用 Null 做自定义车牌,成功命中车管所系统漏洞,所有未填车牌的罚单都是我的了

2019 年 9 月 02 日

一张“Null”车牌引发的天价罚单


Joseph Tartaro 是一位软件安全领域专家,出于职业癖好,他把自定义车牌号跟自己的工作联系在了一起:自定义了一张 Null 车牌。从此以后,他收到了各种各样的罚单,总额超过 12049 美元,更悲剧的是:他不知道今年能否重新登记换牌,所以这个罚单数字可能会继续增加下去。


Joseph Tartaro 是一位美国软件安全领域的专家,他坦言自己没想过自找麻烦,但一次“个性化”的“骚操作”还是让他陷入了麻烦的旋涡当中。因为他“欺骗”了信息系统,最终也遭到了“反噬”。


2016 年年底,Tartaro 决定要注册一块有个性的车牌。作为一名软件安全方面的专家,他有着许多技术人独有的职业癖好:比如希望车牌号能够与工作联系在一起,可以是分段错误(SEGFAULT) 或者与其他漏洞相关的东西。他从“null pointer”开始想,很快,“NULL”这个词引起了他的兴趣。他觉得这个很有意思:


“我可以给我老婆注册一块 VOID 车牌,这样我们的车道就变成了 NULL 和 VOID 了”。


当然,这里面是有其深层含义的。Tartaro 在最近的一次 Defcon 黑客大会上说,“null”在很多编程语言中是一个文本字符串,用来表示空值或未定义的值。在很多计算机中,null 就是 void。也就是说,他跟她老婆其实是二位一体的存在,公不离婆秤不离砣,颇有点程序员式的浪漫。


但很快,他就觉得这个车票号不浪漫了。Tartaro 表示,因为这个骚气十足的车牌号,自己突然之间面临总额 12049 美元的交通罚款。而且,他还不确定今年是否可以重办汽车登记。他掉入了一个恶梦般的死循环,不知道罚单什么时候才会不再向他飞过来。


我太难了。


在不久前的 Defcon 黑客大会上,Tartaro 坦白了自己的初衷:通过 NULL 车牌来逃避罚单。在他看来,这样的车牌号被输入数据库后,根本就查不到违规行为。


我不觉得这是个问题。


但他后来又说,现在他关心的不是最初的这个恶作剧想法,而是加州机动车驾驶管理处(DMV)的网站在一开始怎么会允许他注册 NULL 车牌。


这是你的问题,你必须解决!


Tartaro 在使用 NULL 车牌的第一年并没有出什么状况,但到了 2017 年需要重新注册的时候,DMV 网站不再接受 NULL 车牌。网站告诉他,他输入的车牌和机动车号是无效的,不过他仍然可以凭着流水号进行注册,所以 Tartaro 也就没有多想。


但令他没有想到的是,2018 年初,他收到了一张罚单,说他的车牌上没有合法的注册贴条。Tartaro 怀疑有人拆了他的注册贴条装在自己车牌上了。他本来想一查究竟,替自己“平反”,但想想罚款只有 35 美元,也就没有深究。


这不是我的错。


紧接着,一打又一打的罚单接连飞进他家的收件箱:违停,37 美元的、60 美元的、74 美元的、80 美元的,从夫勒斯诺市到兰丘库卡蒙加市。但问题是,Tartaro 说他从来就没有开车去过夫勒斯诺市。


我再说一遍,这不是我的错。


很显然,Tartaro 并没有开着车到处违规。在支付了第一张 35 美元的罚款之后,他发现自己的个人信息在数据库里可能已经与 NULL 关联在一起了。这意味着只要交警忘记在罚单上填写车牌号,这张罚单就变成 Tartaro 的了。这些罚单是开给本田车、丰田车和奔驰车的,但 Tartaro 的车是英菲尼迪。


罚单是由一家叫“罚单处理中心”(CPC)的私营公司开出的,这家公司主要负责处理违停罚单。但 Tartaro 说,与这家公司的交涉并没有什么用:“我打电话给这家公司,他们说我必须证明这几百张罚单不是我的。我试着和经理谈,但他的意思好像是要我把所有罚单都邮寄给他们”。


CPC 的嘴脸让 Tartaro 感到特别生气,他觉得他们给他的态度就是:


这个问题不需要商量,都听我的。


Tartaro 没有把罚单都邮寄给他们,因为他怕这些纸质罚单被弄丢了。第二天,在这家公司网站上公布的罚单清单中,有一张罚单让 Tartaro 感到很奇怪。他之前曾经给了这家公司一张罚单,是开给一辆本田汽车的。但是,网站上公布的那张罚单写的却是他的英菲尼迪和机动车号。


Tartaro 说,“我手上的罚单明明是这样的,怎么到了他们那边说变就变了呢”!这家公司的一名员工表示,虽然她也知道 Tartaro 的这种情况,但她也无能为力。


Tartaro 又与 DMV 取得联系,经过一番交涉,把罚款减到了 6262 美元,但这些罚单也只是截止到上个礼拜,关键问题并没有解决:新的罚单继续向他飞过来。


我不管几个,我要全部搞定,我再说一遍,全部搞定,不要再问我几个,全部,听懂了吗!全部搞定!


不过,Tartaro 似乎并不是很担心,毕竟这家公司是私营的,他可以继续与 DMV 交涉,将新的罚单取消掉,虽然有点麻烦,但还不至于到了天要踏下来的地步。尽管罚单不断,但他在去年还是成功注册了他的车子。但就在 Defcon 大会召开之前,Tartaro 收到了 DMV 的通知,说如果他要想重新注册他的车子,必须支付一部分罚款。


Tartaro 说:


现在 DMV 要强制执行这些罚单,如果我不支付罚款,就没办法注册我的车子。但我不能支付这些罚款,因为一旦付了,就等于承认这些罚单都是我的,那么其他所有的罚单也就都变成我的了。我想我陷入了大麻烦。


不过,最近这个情况有所好转。上个周日,Tartaro 算了一下罚款总额还有 6000 多美元,但到了周二,当 WIRED 网站的工作人员向 CPC 公司询问 NULL 车牌罚款金额时,只剩下 140 美元。


大部分的罚单没有了,Tartaro 感到很开心,但他仍然要支付剩下的 140 美元罚款。而且这并不代表后面不会有新的罚单进来。


另外,想要找到好的解决办法也很难。DMV 发言人 Marty Geenstein 表示,“Tartaro 的罚单是由当地停车管理部门发出的,这超出了 DMV 的处理权限范围。只要他支付了罚款,我们的系统就可以正确识别他的车牌,并允许他在线重新注册”。


不管是不是想要恶作剧,Tartaro 在一开始使用 NULL 车牌就是在玩火。WIRED 前记者 Christopher Null(他的名字中刚好也有 Null)说:这些年来,这类问题越来越严重。MVP(最小可行产品)概念的盛行导致很多糟糕的代码在经过全面测试之前就进入市场,这些 bug 不可避免地会给小部分人带来麻烦。Null 自己也曾遇到过无数这类烦恼,比如美国运通公司会把他名字里的姓去掉,美国银行拒绝接收他的电子邮件,因为他的邮箱域名是 nullmedia.com


“他这是自找的,我觉得 NULL 能给你带来的只有错误、奔溃和大麻烦”。


我不要你觉得,我要我觉得。


Tartaro 说他决定留着这款车牌,但绝对不是为了要炫耀什么。他说,“我仍然会收到别人的罚单。从使用这个车牌的第一刻开始,我就知道,后面会发生一些事情,一些令人感到困惑的事情。但是,在这个问题得到妥善解决之前,我不想把这张车牌换掉,否则我会感到不舒服”。


同种操作,不同结果

Raven Felix Null 来自美国,他曾在 Reddit 上分享自己“欺骗”电脑系统的故事:成年之后,他就将姓氏改为「Null」这个单词,它与许多电脑程式不相容,因此许多系统不会将他当做一个人来看待。


这种程式设计错误意味着,当一位员工将 Null 这个单词当做姓氏输入系统之后,系统会将这个单词识别为「资料空缺」,并拒绝验证它。这种 Bug 常常使得 Raven 不必为他买的东西付钱。也因此,他可以免费在多间旅馆住宿,可以一分钱不花租 2 辆汽车,甚至还能躲掉昂贵的牙齿治疗费用。由于「姓氏栏不能为空」这个规定,他已经占到了不少便宜。给他登录资讯的人只能稍后再弄,但其实他们之后没有也无法登录他的资讯。他得意地说道:


如果遇到那种一定要当面登录资讯的员工,我通常会指控他们欺压我,并威胁要因他们歧视我的名字而採取法律手段。这时值班的经理通常会给我想要的东西,并随后再登录资讯,如今的人非常害怕公关问题。


事实上,很少有人会真的把「Null」作为名字,而且解决这个问题真的不那么容易。此前,一位名叫 Jennifer Null 的女性试图在线购买机票,她在大多数网站上都遇到了出错信息,她被告知在姓一栏没有输入任何字符,要求她重试一次。她的麻烦不仅仅限于购买飞机票,还有在政府网站上填报纳税信息。


聪明的各位 InfoQer 们,你们有哪些可以让系统报错的名字吗?你觉得这些名字该怎么让系统正确识别呢?欢迎留言分享!


原文链接:

How a ‘NULL’ License Plate Landed One Hacker in Ticket Hell


2019 年 9 月 02 日 17:517995
用户头像
小智 前 InfoQ 主编

发布了 399 篇内容, 共 316.6 次阅读, 收获喜欢 1757 次。

关注

评论 4 条评论

发布
用户头像
字符串是怎么解析到Null关键词的呢?
2020 年 12 月 04 日 08:20
回复
用户头像
译者明学满分
2019 年 09 月 03 日 10:24
回复
作者加的哈哈
2019 年 09 月 04 日 15:09
回复
用户头像
null在中国应该叫空吧,大家好,我是xx空
2019 年 09 月 02 日 19:27
回复
没有更多了
发现更多内容

跟我一起基于 Karma 搭建一个测试环境 (中)

Jack Q

前端进阶训练营 Karma 测试框架搭建

同行分析优化

誓约·追光者

Sparksql 优化

Linux数据流重定向

王坤祥

Linux linux操作

散列表高级应用之把用户访问记录优化到极致

架构师修行之路

哈希表 数据结构与算法

360 Atlas生产环境使用心得

心平气和

MySQL 分库分表 Proxy Atlas

TCP/IP学习(1):创建套接字

申屠鹏会

TCP 网络 TCP/IP

瀑布模型总结

我是程序员小贱

误执行 rm -fr /*,我删删删删库了,要跑路吗?

小林coding

Linux 程序人生 Shell linux命令

突破内存限制的高性能排序

架构师修行之路

平时开发Git常用的小技巧

zui.zhang

git rebase

Linux后台开发高频题目总结

我是程序员小贱

学习总结 -- Week 10

吴炳华

直播技术的背后--RTMP协议

soolaugust

直播 RTMP

Linux之crontab命令

王坤祥

Linux crontab

深挖502和504

书旅

nginx 服务器 HTTP 状态码

Newbe.Claptrap 框架如何实现在多种框架之上运行?

newbe36524

Docker 云计算 微服务 .net core ASP.NET Core

gRPC在Spring Cloud中的应用

xcbeyond

Java gRPC SpringCloud

范型的下一步

申屠鹏会

golang 翻译

在龙门吊上,看到破浪而来的智能时代

脑极体

TypeScript 设计模式之观察者模式

pingan8787

typescript 前端 设计模式

k8s-client-go源码剖析(一)

LanLiang

go 开源 Kubernetes 容器 源码剖析

webbench源码阅读

我是程序员小贱

开发者关系(DevRel)的新手指南

开发者关系

开发者关系 开发者运营 技术运营 开源社区

翻译:如何编写Golang代码(How to Write Go Code)

申屠鹏会

golang 翻译

今天给二叉树加个BGM,二叉树唱歌了!

我是程序员小贱

为什么你做的 Excel 表不好用?

Tony Wu

效率工具 产品设计 Excel ER图

二叉树的遍历(前序、中序、后序)

申屠鹏会

golang 算法 二叉树

troubleshoot之:GC调优到底是什么

程序那些事

性能分析 jvm调优 GC调优

计算机网络基础(十九)---传输层-TCP的拥塞控制

书旅

TCP 协议栈 网络层

TOGAF认证不只一个,您考的是哪个?

周金根

对待一件事,从不喜欢再到喜欢,转变需要多大

良知犹存

程序人生

演讲经验交流会|ArchSummit 上海站

演讲经验交流会|ArchSummit 上海站

一张“Null”车牌引发的天价罚单-InfoQ