工控安全(十)——移动通信基础

 

如今5g加工业成了热门话题,我们也有必要了解一下移动通信方面的知识,这次就为大家介绍一下GSM,也就是第二代通信技术2g的基础知识。

GSM全称为Global System for Mobile Communications,也就是我们俗称的2g,虽然看上去有些古老,但一方面,其中的设计思路还值得我们学习;另一方面,GSM现在还存在伪基站这一重要的安全问题。而且根据目前的规划,2g并不会退出,仍然会作为我们日常使用的重要部分,所以我们很有必要了解其基础知识和原理。

网络上对于伪基站的技术文章不少,但是对于原理介绍的还不多,所以这篇文章主要会给大家简单介绍GSM的组成、原理、安全性等问题,由于篇幅所限,尽可能进行缩减,如果文中有不正确的地方,希望各位大佬多多包涵。

 

GSM基础设施

所谓的移动通信,其实和我们平常的wifi无线上网有异曲同工之妙,其基本网络结构都是类似的,我们就从wifi来进行知识的迁移。

以我们实验室为例,假设j13教学楼有一台学院交换机接入外部网络,一层楼有一台楼层交换机,楼层交换机分出网线接入实验室的傻瓜交换机,在用傻瓜交换机网线接入家用路由器,实现wifi上网。基本网络结构如下图所示(实线代表有线连接,虚线代表无线连接)

截屏2020-01-27下午4.53.20.png

相比大家对于上面的网络都很了解,现在我们就来给他们改改“名字”,实现j13的小型GSM移动通信。

首先终端方面显然就是手机等支持sim卡的设备了,而家用路由器就是我们平常所说的基站,他的全名应该是Base Transceiver Station,家用路由器我们知道最大的功能就是用来和设备进行无线通信,通俗点说就是上网的,基站的功能也是如此,此外基站还需要具有功率控制、切换基站的功能。

  • 基站与终端之间的“接口”也就是我们常说的空中接口,我们常说的CDMA、FDMA都是在这一部分用的,我们将在原理部分具体介绍
  • 所谓功率控制也很简单,你手机需要时时刻刻知道自己能不能连上基站、时刻准备被别人呼叫或者呼叫别人,而在打电话过程中也要考虑是否时刻保持高功率消耗,在考虑到手机那聊胜于无的电池容量,功率控制是很有必要的
  • 切换基站,我们每个家用路由器的覆盖范围都是有限的,当你实验室太大时(当然我们实验室没有,哈哈哈哈)就需要多个路由器进行覆盖,但我们终端移动过程中就需要在几个路由器中进行选择了,这就是切换基站。

光有基站不行,基站这个单位太小了,就像是实验室的交换机一样,每一个实验室都有,别说全学校的通信了,就是我们J13一栋教学楼几十个实验室的互联,这线就数不清了。咋解决?就要发挥计算机人必须要有的思维了——加中间层,一层不行,我再加一层,在网络通信中我就在傻瓜交换机上在搞一层交换机,比如一层楼一个,这线的数量不就少了吗?而且这个交换机负责管理一层楼,我们可以把一些安全策略、调度策略放在他身上,对应到GSM,这就是BSC基站控制器(Base Station Controller)。

当我们从426进到428实验室,发现426的基站功率小了,但428的基站功率大了,这时候就要进行基站的切换,BSC就帮我们具体来完成。

当然以楼层为单位直接接入到广袤的互联网中,显然是有问题的,我们还是希望对于外界j13教学楼是一个“整体”,而j13也可以作为一个管理单位,进行内部的记录、管理,并且万一出了什么问题,也可以直接定位到是sdust的j13,所以就有了学院交换机,来汇聚各个楼层。对应到GSM也就是MSC移动交换中心(Mobile Switching Center),而刚才的定位功能对于移动通信则更为重要,你要跟人打电话,那我必须要找到目标的位置,所以还有个叫做VLR拜访位置寄存器(Visitor Location)的设备来记录你到了j13来进行通信。

除此之外我们都知道打电话还得判断你是不是合法,也就是鉴权,除此之外还得知道你是从哪来的(想想手机的归属地查询?),这俩设备分别叫做AC鉴权中心(Authentic Center)和HLR归属位置寄存器(Home Location Register),当然这就不需要j13在操心去做了,有一个就行,用到了j13的设备就去查查即可。

如此,我们就可以通过修改我们原有的wifi网络得到我们移动通信拓扑图了,如下所示:

截屏2020-01-27下午5.12.23.png

 

GSM通信原理

通过上图我们知道,基站与BSC、MSC这些都是线缆连起来的,所以这些部分就和我们网络中的万兆、千兆、百兆一样,更新换代需要大换血,受限制很大(反正我们实验室还没用上千兆)。而基站与手机之间就是无线通信,相当于家用路由器的工作,我们都知道家用路由器更新换代可是快啊,换个路由器就能享受到MIMO、wifi6等体验,同样基站也是这样,所以我们将关注点重点放在基站上,更具体地说,是上面提到过的空中接口。接下来我们还是借助路由器来进行知识的迁移。

实验室的路由器买回来配置好,我们会发现有2.4g、5g俩无线网络(机器支持IEEE802.11ac标准),这里就是指通信所用的频率,我们要想实现无线通信就需要借助电磁波,将信息在某段频率上发射出去。这段频率就叫做带宽(也叫做频谱带宽),我们就用W表示,我们用C表示信息传输速率,我们理想当中就该是带宽越大信息传输速率越大,但是在传输过程中电磁波之间也会产生干扰,比如蓝牙、Zigbee也是在2.4g工作,必然会和wifi有些冲突,反正最后得到的C必然没那么简单,香农大佬已经为我们做好了这方面的研究,也就是著名的香农公式:

C=W*log₂(1+S/N) (bit/s)

S/N代表的就是信噪比,可以看到,不管我们的噪声多恐怖(N比S大很多很多),只要我们的W能做到够大,那就必然能够实现C大的,不管是wifi还是GSM,这个公式都是至关重要的。

知道了这些,我们也可以猜测wifi既然传输信息那么快,那它的W肯定不小,但是我们现在GSM只需要打电话发短信,还没到上网的3G年代的,所以不需要多快,就分配个200khz吧(GSM就是200khz)。那么问题来了,这200khz从哪来,随便分啊?

首先给个前提,频率越高的地方能给的带宽就越多。wifi用的是2.4g和5g,5g频率高也就更快,但真正用过的人都知道,5g的虽然快但隔个墙就完蛋了,wifi甚至还出过60g的标准,但是你转个身背对着路由器就完蛋了。这是因为电磁波的频率越高波长越短,穿透能力就越弱。所以我们不能盲目追求频率高,还得考虑到我们GSM应用的复杂环境。

假设我们选好了一个合适的频率(我国的GSM频率在900m左右),上级部门大笔一挥给了我们1M的带宽,我们来算算,一个通信是200k,1m就5个,也就是说我们只能同时容纳5个人通信,这白干了?规划了半天就我们实验室这几十号人用都不行,显然不靠谱。

这时候又要发挥我们计算机人的思维了——复用,翻翻《计算机网络》课本,其实我们把1m分为5个200k就是频分复用FDM(Frequency-division multiplexing),那我们还可以在时间上进行复用TDM,反正只要我切换的够快,用户就追不上我,GSM将一段时间划分为8个slot,一个slot是0.577ms,这样就也可以实现5*8=40人了,只要基站布置在合适的范围内,基本就可以满足需求了。

实际上wifi同样借助了复用技术,还使用了OFDM、MIMO等技术,以后有机会再细聊。

当然还没有那么简单,我们要实现打电话前,我们还需要一系列的准备工作才能真正确定开始打电话。准备的过程自然也需要通信,所以我们就单独拿出一个slot来做这些准备工作,这个slot有多种信道,我们叫他0号slot,下面简单介绍一下。首先说明,手机给基站通信叫做上行,基站跟手机通信为下行。下面就来介绍一下这些工作:

  • 既然我们有FDM,那我们就需要锁定我们需要的通信的频率范围,实际上就是手机在整个频率范围内搜索,直到确定合适的200k为止,即FCCH频率校正信道(Frequency Correction Channel)
  • 同理我们有TDM,所以我们需要与基站同步时间,进而保证每个slot都是同步的,即SCH同步信道(Synchronization Channel)
  • 同步时间后我们还需要选择一个slot来进行通信,就需要RACH随机接入信道(Random Access Channel),这是上行独有的
  • 申请到slot后基站确定了要返回结果,需要AGCH,这自然是下行独有的
  • 基站还要告诉手机这地方的规矩,BCCH广播信道(Broadcast Channel)。
  • 我们要找到被呼叫的目标,这是PCH寻呼信道(Paging Channel),他和上面那俩伙计也被说成是CCCH公共控制信道(Common Control Channel)
  • ICH空闲信道(IDLE Channel),表示

这些就构成了一个用来管理的slot,真正的GSM中有51个,实际上就是上面几种channel的组合。

其余的7个slot就都作为普通通信来用了吗?当然可以,但是我们要注意到,普通的通信可以大致分为信息量小(如短信等)和信息量大(如通话)两类,如果是发个短信,你说你占用一个slot,那也太浪费资源了,所以我们又拿出了一个一号slot来专门处理这些信息量较小的请求。

  • SDCCH独立专用控制信道(Stand-Alone Dedicated Control Channel),当我们需要传输信令(信令实际上就是管理消息,比如鉴权等等操作)、短信、LAC location area code位置区码时就走这个信道

那问题又来了,用户打电话的时候还想要发短信咋办?假如说用户在2号slot通话,但是发短信又要去占用一号slot的一个信道,多不合适啊,所以我们在别的slot留了一点点资源,如果用户需要打电话时发短信,就用他的slot留下来的信道即可

  • SACCH信道(Slow Association Control Channel),类似上面的SDCCH。

当然,对于0、1以外的slot我们统称为TCH业务信道(Traffic Channel)。

 

GSM鉴权及伪基站攻击

首先要说最重要的一点,GSM的鉴权是单向的,也就是手机把自己的信息收拾收拾打包发给基站,然后等待对方,但手机自己是没办法对基站进行检查的,所以就会导致伪基站问题。

  • IMSI,sim卡的号码,公开的,就相当于我们身份证号
  • Ki,唯一客户鉴权键,sim卡存着,AC也存着,相当于一个密码
  • RAND,AC生成的随机数,128位
  • A3、A8和A5算法,都是加密算法
  • SRES,Ki和RAND通过A3算法生成的,这玩意一次性的
  • Kc,Ki和RAND通过A8算法生成的,64bit,存在sim卡中,可多次使用
  • TMSI,临时的身份证号

当手机开始要通信时,要先受到“检查”,主要有以下几步:

  • 看看是不是“熟人”,手机在SABM帧(SACCH,SDCCH承载)中有个CKSN字段,如果不为0那就是上次的Kc,说明来过,检查和MSC/VLR的Kc是否一致即可,不对或者没有分配过就进入下一步
  • 手机发给MSC/VLR自己的IMSI或者是TMSI
  • VLR得到Kc和SRES,并和RAND组成三元组保存在MSC中
  • MSC告诉手机RAND和CKSN
  • 手机计算出SRES,发送给MSC
  • MSC检查,如果对了就接入网络

image.png

说到这大家可能也都看出来了,伪基站的原理其实并不复杂,我们所要做的就是在前几步随便发送一些信息,最后只要告诉手机检查通过即可,手机在整个过程中没有对基站有过任何“怀疑”。归纳起来就是四步:

  • 得到真实的信息,我们通过一台正常设备就可以做到
  • 伪基站设备调高功率吸引手机,原理上面我们上面说过了
  • 鉴权,实际上就是最后告诉手机通过了验证即可
  • 实施欺诈

说到这大家会发现,A3、A8算法都用到了,还差个A5算法没有出现,实际上A5算法是用来加密的

image2.png

基本算法如上,是一种对称加密,非常好理解。

至于具体的伪基站操作流程,国内漏洞盒子团队有一系列文章;而在伪基站的识别预防等方面阿里安全有优秀文章,大家可以自行搜索查看细节。

 

总结

虽然移动通信对于工业、物联网更多起到的是连接的作用,安全性并不是我们关注的重点,但是我认为还是有必要对于基础的知识和原理以及安全问题有一定的了解,如果以后有机会还有继续对这方面进行研究。

(完)