浅析弹子挂锁的攻击方式

本文用于讨论弹子挂锁攻击方式,请勿用于违法用途

Is key necessary to unlock?

Absolutely not.

一些废话

开锁这一技能在初中的时候跟一些不良同学学过

高中时开始熟练运用,如

  • 开空教室的门拿椅子
  • 体育课开器材室的门
  • 处理一些私人恩怨
  • etc.

但是从来都没有具体的了解过锁具的结构,就像大一时的我空知道web安全的漏洞,但是从来都没有去具体研究相关的函数或代码,自然而然地就对自己的学习产生了瓶颈

锁具的安全与网络安全有些类似,都应当默认外界的输入是不安全的,或许这就是安全的通性

网上搜了下"传授开锁技能触犯传授犯罪方法罪"的内容,所以写这篇文章的时候内心还是有些忐忑与疑惑的

忐忑

犯罪行为需要同时满足主观条件与客观条件

  • 主观上:本文仅在讨论弹簧锁的攻击方式
  • 客观上:本文仅在讨论弹簧锁的攻击方式

疑惑

开锁与Hacking有些类似,都是一种对于公共安全具有潜在威胁的行为,但是个人感觉后者的门槛与复杂程度还是比前者高一些

某些情况下传授开锁技能会触犯传授犯罪方法罪,那么传授网络安全技能呢?

貌似也会,因为听说过老师教学生两手之后学生端了学校的网站最后老师被请喝茶的事

如果这篇文章真的涉嫌触犯传授犯罪方法罪,那公布EXP跟写漏洞分析文章的是不是都得该挨个抓

弹簧锁结构概述

图绘制过程没有对锁具进行具体的测量,比例可能存在较大的误差

(弹子组部分为了方便所以把弹子画得平齐,现实中锁的弹子肯定是不齐的,而且是与钥匙的形状对应的)

LOCKED

UNLOCKED

Pin Tumbler

解锁步骤

  1. 钥匙插入锁芯,钥匙销与驱动销的空隙正好处于锁身与锁芯之间的截线,此时锁芯可以顺时针转动
  2. 锁芯顺时针转动时,锁芯上方的拨爪拨动锁舌的拨爪,向右压缩弹簧B,使锁舌向右移动
  3. 锁舌移动一定距离之后,锁舌解除了对于锁梁左侧的限制,在弹簧A的作用下弹出锁梁

至此,解锁完毕

Method 0

模拟锁芯转动

METHOD0

使用韧性强的铁丝(推荐伞的细伞骨)制成如图形状
利用杠杆原理拨动锁舌上的拨爪,压缩弹簧B,使锁舌向右移动,从而开锁

特殊情况

以上只是最普通的状况,个人手上的锁具不多,凭借自己的思考与观察得出以下两种特殊状况

防拨盖片

BUG0

锁芯与锁舌的之间个人感觉可以用防拨盖片挡住
一般来说,钥匙不会插入到这种深度的位置

双向锁舌

这个情况是基于手头上的一个锁具,纵向分布两组拨爪,分别对应两侧的锁舌

使用钥匙开锁时,顺时针转动锁芯带动两组拨爪,使两个锁舌对向移动,从而解锁

BUG1

如果是这种情况的话,单纯地将锁舌向右撬只会卡住锁梁的右边

破解方法

由于有两组拨爪,需要先撬动右边的锁舌,锁梁会在弹簧A的作用下向上移动,此时锁梁右侧不受锁舌限制,但锁梁左边会被限制,之后的步骤就不必多言

由于开锁类似于黑盒测试,无法看到锁的内部结构,所以只能收集一些信息来推断是否为双向锁舌
如果在尝试向右撬动锁舌后不能开锁,则需要考虑双向锁舌的情况
向左撬动锁舌,右侧锁梁会向上稍微移动一些距离,摁下后有清脆的金属撞击声,则为双向锁舌

Method 1

模拟钥匙

BUG1

这个基本是通用的方法,也是最靠技术的方法,先用挑勾将截线对齐,然后用铁片转动锁芯

其难度与弹子数成正相关

Method 2

推进锁舌

参考以下视频

https://www.youtube.com/watch?v=BEOWb68YumY

Method 3

强制破坏

使用两个扳手插入锁梁,使用杠杆原理来破坏锁体


写到最后发现这些东西跟Web安全在某些角度是相通的
先拆卸掉锁,然后观察结构,再去分析开锁的方法,就与白盒对应
直接开锁就像黑盒
我想,或许这种安全的共通性值得我花一生的时间去追求与探索


参考

挂锁的结构是怎样的 普通挂锁结构图详细科普
教你如何打开一把弹子锁
用了这么多年挂锁,你知道锁是怎么运转的吗?
维基百科
Open Lock with Soda Can