简介
近期,“5.33亿Facebook用户的电话号码遭泄露”之类的报道占据了各大社交网络的新闻头条。实际上,早在2020年,这些泄密信息就已经被黑客出售了;只是最近这些数据被免费发布到了一个黑客论坛上,其中包括用户的手机号码以及其他相关信息。这则消息甚至催生了像https://haveibeenzucked.com这样的网站,大家可以通过它们检查自己的Facebook数据是否已经泄露。另外,大家也可以通过https://haveibeenpwned.com检查相关泄露情况。
我的数据被泄露了吗?
有些用户可能会很担心:他们能用我的电话号码做什么?我需要更换自己的电话号码吗?而另一些天真的用户则认为:事情还没有严重到这个地步,因为自己的Facebook密码还没有落到他们手里。
不幸的是,这次事件不仅对用户隐私造成了巨大影响,同时,这些信息还可能被用于各种恶意目的,如诈骗电话、跟踪、保险市场研究等。我想深入考察这些问题,以及在仅仅拥有目标的电话号码的情况下,攻击者能够发动哪些攻击。因此,在这篇文章中,我将深入研究一些与SIM卡有关的问题,其中会涉及一些物理攻击、软件攻击和其他可用的攻击途径。
只需电话号码便可发动的攻击
考虑到Facebook的数据泄露,我们都知道,这些信息将有助于建立一个坚实有力的跳板,以进行多种攻击,包括但不限于:
-
社会工程攻击:一种众所周知的技术,用于通过人类互动来获取信息。为此,攻击者会首先研究受害者的个人行为,然后引导受害者泄露敏感信息;就这里来说,攻击者完全可以通过网络发动这种攻击。通常情况下,受害者在被心理操纵策略欺骗后,最终会泄露敏感信息。具体来说,攻击者可以通过一个(或多个)电话呼叫和/或SMS来实现攻击。这些攻击通常是通过冒充某手机号码来进行的,这样受害者更容易上当。
-
SMS重路由攻击:不久前,一个名为Lucky225的黑客引发了人们对某运营商安全问题的关切——该问题允许某人接收/访问发送给其他人SMS。不过,请不要将其与SIM卡交换或短信劫持漏洞相混淆;这个漏洞之所以能够被发现,要归功于Sakari平台中的一个功能缺陷。Sakari是一家为企业提供短信重路由、短信营销和群发信息服务的公司。显然,由于Sakari平台缺乏双因素身份验证机制,使得Lucky225能够读取目标电话号码的所有SMS。事实上,攻击者只需将受害者的电话号码添加到平台上,就可以读取所有受害者的SMS,也就是说,只需几美元,攻击者就可以冒充目标号码的所有者。老实说,在我阅读这篇文章之前,我从未听说过这种类型的攻击:https://www.vice.com/en/article/y3g8wb/hacker-got-my-texts-16-marges-sakari-netnumber。出于好奇心,我尝试在https://sakari.io网站上创建一个帐户,但在发表这篇博客文章时,该功能已经不可用了。尽管可能会有其他类似的公司提供该项服务,但许多运营商,如AT&T、Verizon和T-Mobile已经修复了这一漏洞。另外,Sakari公司目前已经实现了一个多因素身份验证/验证解决方案。
-
SIM卡交换攻击:对于这种攻击来说,攻击者需要设法冒充某个电话号码的所有者,例如利用伪造的文件欺骗运营商,最终将所有权转移到一个新的SIM卡上,从而获得一个新的电话号码。利用这种攻击手法,攻击者能够接管受害者的账户,或者在最坏的情况下,设置能够非法转移受害者的资金。
-
SIM劫持(SIM Jacker)攻击:这是2019年公布的一个漏洞,目前仍然威胁着许多SIM卡的安全。为了发动这种攻击,攻击者会向受害者发送一条或多条短信,其中携带专门为攻击名为S@T Browser的SIM卡应用程序(或其他程序)而精心构造的恶意指令;这些短信可以触发SIM卡事件。因此,攻击者可以利用这种手法实现对手机的逻辑操作。我花了许多时间来研究这种攻击手法,以充分理解它;下面是我自己的总结记录,以及我已经设法完成的事情,还有尚未实现的目标。
我需要强调一个事实,即在一个现实中的电话系统网络上进行安全测试时,一定要事先获得许可。任何未经邀请的电话系统网络测试都是违法的。在没有授权的情况下,不允许进行的安全测试包括:改变射频信道、嗅探电话系统数据,等等。
强烈建议在进行任何形式的测试之前,先搞清楚自己正在做什么。毫无疑问,本文绝不纵容非法测试。
SIM卡盗窃
用户识别模块(Subscriber Identification Module,SIM)
SIM卡(用户识别模块),也被称为UICC(通用集成电路卡),实际上就是一台小型计算机,尽管它的尺寸有限,却能让世界各地的用户之间进行非常快速和有效的无线通信。在下图中,通过全球智能手机的销售情况,我们就能了解SIM卡流行情况。
2007年至2021年全球智能手机销量,图片来自https://www.statista.com
SIM卡实际上就是一台小型电脑,里面存储着各种数据,并可以对其进行相应的管理。存储在SIM卡中的数据包括身份验证密钥(Ki,用于对移动网络进行身份验证的128位值),以及一个被称为国际移动用户身份(IMSI)的唯一号码(64位),允许识别位于封闭蜂窝网络中的用户的身份。蜂窝网络由一个(或多个)蜂窝塔和/或基站(BTS)组成,支持进行语音和数据传输。有时,手机的无线电信号覆盖范围可以达到8公里,这要视地区而定。
英国的GSM天线
意大利的GSM天线
SIM卡还可能含有电话联系人和其他特定于用户的数据。此外,诸如112、113和/或991之类的紧急号码也保存在SIM卡上。
存储在SUT上的紧急号码
因此,SIM卡就是不同国家的数十亿人口袋里的计算机,并根据司法管辖区、通信监管机构(例如 Ofcom、联邦通信委员会或 AGCOM)的相应规定,而使用不同的编码和频率。
由于某种原因,手机正在变得越来越大,而SIM卡却随着时间的推移不断缩小,具体如下所示:
通用或全尺寸SIM卡,1991/1992 (53.98 x 85.6mm)
标准或迷你SIM卡,1996(15 x 25mm)
微型SIM卡,2003 (12 x 15mm)
Nano SIM ,2012 (8.8 x 12.3mm)
嵌入式SIM卡或eSIM ,2016
测试的SIM卡的类型
虽然SIM卡的接触类型可能会因制造商的偏好而不同,不过,由于明显的原因,SIM卡的引脚布局方式却都是相同的。
SIM卡的引脚布局
当我们在谈论外形因素时,我开始以“科学”的名义,用丙酮溶解SIM卡;虽然还没有从中得到任何感兴趣的东西,但这个过程却是相当有趣的。
几分钟后,SIM卡的塑料部分开始溶解。
从丙酮溶液中取出“清爽”的SIM卡芯片。
SIM卡的X光图像,显示了芯片和连接情况(https://en.wikipedia.org/wiki/SIM_card)。
最后,SIM卡上的每个引脚都有特定的功能,有些是用来充当电源的,有些是用来传输数据的。读者可以从下面的地址找到更多的细节:https://pinoutguide.com/Memory/SmartCardIso_pinout.shtml。
由于这里感兴趣的是SIM卡的内容,而非其物理特性,所以,我们决定通过PC/SC终端Gemalto PC Twin Reader和名为SIMspy II的取证工具来分析SIM卡的内容。通过该工具返回的结果,可以清楚地看到信息存储在一个目录结构中。
SUT(SIM Under Testing)的目录结构是使用SIMspy II识别出来的。
用SIMspy II从SUT中提取的加密密钥(Kc)和其他信息。
SUT(SIM Under Testing)上的数据被组织成由三种类型的文件组成的树层次结构:
- 主文件(MF)
- 基本文件(EF)
- 专用文件(DF)
类似的目录结构也可以在智能卡或信用卡/借记卡中找到,因此,制造商用名为ATR(复位应答)的输出消息来配置每张卡。此消息包含有关卡本身、其通信参数和协议的相关信息。在卡片激活过程中,ATR被用来识别所支持的传输协议和每个卡会话开始时的通信参数,例如,当SIM卡被访问时。
实际上,ATR检查也可以通过在线解析器来完成。这种方式,对于更好地了解ATR包含哪些信息,以及哪种卡片与之相关联还是很方便的。关于ATR的详细信息,请参阅https://smartcard-atr.apdu.fr/parse?atr=3b9f96801fc68031e073f62113675602220080010127。
对于ATR示例3B9F96801FC68031E073F62113675602220080010127,下面对其中部分字节进行详细介绍:
- 字节1:TS=0x3B——正向连接
- 字节2:T0=0x9F——格式字符
- 字节3:TA(1)=0x96——接口字符
- 字节4:TD(1)=0x80——接口字符(所支持协议的相关信息)
- 字节5:TD(2)=0x1f——接口字符(所支持协议的相关信息)
- 字节6:TA(3)=0xC6——历史字符(SIM卡类型,例如C2:普通SIM+OTA,C3:STK SIM…))
- 字节7:0x27——卡的功能(Card capabilities)
- 字节8:TCK=0x27——校验和
有关ATR的更多详细信息,请参阅以下页面:https://www.programmersought.com/article/85154738501/。
假设我们分析的系统的顶级目录是由斜杠(/)指定的,它被称为主文件(MF)。它包含从属目录,也称为专用文件(DF)和基本文件(EF),在那里可以找到移动网络运营商(MNO)和用户的大量敏感信息。
基本文件的类型分为透明类型、线性类型或循环类型,具体解释如下:
- 透明类型:文件内容可以看作是一个字节字符串。
- 线性固定长度类型:文件内容可以看作一个长度固定的记录序列。
- 线性可变长度类型:文件内容可以看作一个记录序列,但长度是可变的。
- 循环类型:可以将文件看作一个以时间顺序存储的"环"状记录,并且空间占满后,允许新纪录覆盖旧的记录。
在接收到ATR之后,MF(3F00)将被自动选中,并成为当前目录。
SIM卡的树形层次结构
我通过一个名为SIMTester的开源安全工具对SUT进行了各种模糊测试,以期望能够识别更多的文件,提取更多的信息,并最终了解它们的用途。
下面是使用SIMTester识别存储在SUT上的一些文件(以及它们的相对路径)的一个例子。
通过应用协议数据单元(APDU)命令,又称C-APDU(Command Request APDU)命令,我们从找到的文件中提取了一些存储在SUT中的数据。APDU是一种命令响应协议,用于调用智能卡或类似设备上的相关功能。
APDU命令结构由两部分组成:
命令:由4字节的头部(类别、指令、参数1、参数2)+ 数据体组成
响应:由2字节(SW1,SW2)组成。响应也可以在其数据字段中存放一个字节序列。例如,在提取智能卡或类似设备的数据时,就可以这样做。
以下是可用的APDU命令清单:
SELECT
STATUS
READ BINARY
UPDATE BINARY
READ RECORD
UPDATE RECORD
SEEK
INCREASE
VERIFY ADM
VERIFY CHV
CHANGE CHV
DISABLE CHV
ENABLE CHV
UNBLOCK CHV
INVALIDATE
REHABILITATE
RUN GSM ALGORITHM
SLEEP
GET RESPONSE
需要说明的是,这些命令是用PyAPDUTool工具发送的——这个工具不仅可以通过读卡器与SIM卡进行通信同时,还能用于提取和更新存储在SUT中的数据。
作为一个例子,下面的视频显示了如何访问主文件3F00,然后访问专用文件 "GSM"(7F20),最后服务基本文件 "SPN"(6F46),并从中提取十六进制格式的字符串 "giffgaff"(67 69 66 66 67 61 66 66)。在本例中,SUT被标记为 "Giffgaff"(Giffgaff是一个总部设在英国的移动网络公司)。输出的最后两个字节(90 00)是响应数据(SW1,SW2),表明APDU命令成功执行,没有出错。
访问文件3F00/7F20/6F46,并通过PyAPDUTool发送APDU命令来检索SIM卡的SPN。
接下来的视频,则演示了如何使用前面提到的各种工具来更新SUT上的电话簿条目。请注意,该过程需要物理访问SIM卡。
通过PyAPDUTool发送APDU命令来更新电话簿条目
此外,PyAPDUTool提供了一个非常有用的工具,我们将通过它来解析响应数据的特定部分,即定义为SW1(状态字节1:命令处理状态)和SW2(状态字节2:命令处理限定符)的尾部两字节。PyAPDUTool的SW Lookup工具在处理有效的SW尾部时,会返回一条参考信息,以帮助我们更好地了解当前的操作情况。对于无效的SW尾部,返回的参考信息为“Unknown Error”。下面将给出一些示例,以展示PyAPDUTool的SW Lookup工具是如何解释SW响应的。
PyAPDUTool的SW Lookup工具确认APDU命令正确执行的例子
用PyAPDUTool的SW Lookup工具解析APDU响应的例子
遇到无效SW尾部时,PyAPDUTool的SW Lookup工具返回的参考消息
关于APDU命令的更多细节,读者可参考以下网址:https://cardwerk.com/smart-card-standard-iso7816-4-section-6-basic-interindustry-commands。
AT命令
有时候,我们也可以通过AT命令来操作某些SIM卡的数据,这种命令也叫Attention Commands(一种最初用于调制解调器的命令语言,见Hayes命令集)。对于这一步,必须要借助于调制解调器。下面是一张图片,显示了我常用的设备:Arduino 2009 + Hilo Sagem或USB调制解调器(比如Tigo, TIM)。
实际上,这项工作也可以通过任何支持AT命令的ME来完成。不过,仍然需要对SIM卡进行物理访问。下面是关于如何确保设备兼容和支持AT命令的一些说明。
/*
1. Connect your phone to a computer host via USB.
2. Open a terminal
*/
lsusb -v|less
lsusb命令的输出可能因手机而异,这里使用的是三星S6,它支持AT命令。
接下来,我们要与调制解调器建立通信,这里使用的是Minicom:
首先,在终端运行下列命令terminal
minicom -D /dev/ttyACM0
Minicom命令可以通过按 CTRL+A <key> 来调用。
然后,执行下列按键操作:
/* Open Minicom Helper */
CTRL+A Z
/* Turn ON/OFF Echo (repeat this step twice if you see double input) */
E
下面的例子,用于说明如何从SIM卡中提取信息:
// Temporary Mobile Subscriber Identity (TMSI)
// Only first 8 characters (4 bytes)
AT+CRSM=176,28448,0,0,11
// Ciphering key Kc
// Remove last two characters (1 byte)
AT+CRSM=176,28448,0,0,9
// ARFCN
// The second value
AT+KCELL=0
在三星S6上,通过Minicom从SIM卡中提取TMSI和Kc
有关AT命令的更多细节,请参阅https://www.electronicsforu.com/resources/gsm-at-commands。
SIM应用工具包(STK)
对于某些SIM卡来说,还提供了额外的功能,允许用户出于维护目的或为改善和促进用户体验而设计的服务(例如,信贷、天气、银行等)远程访问网络运营商。SIM小程序通常用于完成这些任务。SIM小程序是安装在SIM卡存储器上的应用程序,它可以使用STK中的一组命令和过程,而STK还提供了相应的机制,使得安装在SIM卡中的应用程序能够与任何兼容ME进行交互;因此,它还提供了对外通信的能力。
有时候,STK应用程序还可以通过ME的主菜单或设置菜单进行访问。在少数情况下,需要使用非结构化补充业务数据(USSD)代码来访问STK应用程序(这些代码通常为一组数字,只不过前面和/或后面带有散列号#和星号*)。
Pixel 4a上的SIM工具包应用(STK)菜单图标
诺基亚3330上的SIM工具包应用(STK)菜单项
通过使用USSD代码*888#在三星S6上访问SUT STK应用程序
STK提供的SIM卡,也可以通过检查名为DF_GSM(3F00/7F20)的目录来识别,该目录包含“GSM SIM服务表”,其中存放的是所有网络相关信息。通过这个表,我们还可以了解SUT所使用的服务,具体如下列所示。
用SIMspy II识别SUT上的STKs相关服务
在这个截图中,涉及的服务/应用包括:
*
SMS小区广播数据下载,用于向特定区域内的所有移动设备(ME)发送信息。
SMS点对点数据下载,用于初始化SIM卡。
主动式SIM,定义了SIM和ME之间的通信协议。此外,它还提供了SIM卡可以直接在手机上发出的各种命令,包括:DISPLAY TEXT、PLAY TONE、RUN AT COMMAND、SETUP A CALL、SEND SHORT MESSAGE、SEND DTMF,等等。
TAR(Toolkit Application Reference,TAR)
为了准确识别基于工具包机制的服务/应用(如SMS-Cell Broadcast Data Download、SMS-Point-to-Point Data Download、Proactive SIM等),并正确地确定其生成的软件包的目的地,我们需要借助于一个独特的数字或数值范围,即所谓的TAR(Toolkit Application Reference,TAR)。这意味着,TAR可用于唯一地标识服务和/或应用程序。一个TAR的值可以从000001到FFFFF不等。关于TAR的值及其相关类别的更多细节,可以在下面的列表中找到。
Tar: 000000, 类别:卡片管理器
Tar: 000001至AFFFFF, 类别:由第一级应用发行方指定
Tar: B00000至B0FFFF,类别:远程文件管理(RFM)
Tar: B10000至B1FFFF,类别:支付应用
Tar: B20000至BFFEFF,类别:RFU
Tar: BFFF00至BFFFFF,类别:专有工具包应用
Tar: C00000至FFFFFF,类别:由第一级应用发行方指定
TAR不仅可以触发网络运营商用来与SIM卡进行远程通信的特性和服务/应用程序的功能,还能用于安装额外的应用程序,并管理其内容。除非知道并提供ADM密钥,否则的话,我们是无法访问存储在这些TAR中的数据的。另外,蛮力破解ADM密钥的可行性不大,因为通常最多允许5-8次尝试。并且,如果无法提供有效的ADM密钥,很可能导致不可逆转的故障。同时,只有先激活并分配相应的服务/应用程序后,才能加以使用。
由于安全措施不力,在某些情况下,一些TAR(及其相关的服务/应用)可以被远程访问,并且无需提供ADM密钥。这可以通过使用精心构造的短信来加以实施。这些短信通常会很长,而短信的字符是有限制的(一般最长为140字节,包括标题),所以,我们需要设法将其串联起来。
为了找到含有安全隐患的SIM卡,我开始疯狂地收集各家运营商的商业SIM卡。幸运的是,我家里有许多SIM卡存货,都是我之前研究用过的。尽管其中某些卡已经过期,无法在蜂窝网络上了,但仍然保存完好,值得再仔细瞧瞧。
另外,我还在网上买了很多SIM卡(为了收集这些卡,花了我好几个月的时间)。其中,一些SIM卡是住在其他国家的朋友寄来的,更多的卡仍在邮寄途中。我买的几张SIM卡比较陈旧,可以考虑用于收藏;因此,它们已经无法在网络上使用了,但这并不妨碍用于研究。对于大多数卡来说,每张SIM卡上都需要有一些余额,否则,激活过程和进一步的测试都是不可能的。
部分SIM卡
其他SIM卡
在这次研究过程中,我已经测试了60多张SIM卡,其所属网络和国家如下所示:
*
Giffgaff(英国) 16
Lebara(英国) * 8
O2 (英国) * 6
T-Mobile (英国) * 5
Lyca Mobile(英国) * 4
Smarty (英国) * 3
VOXY (英国) * 2
EE (英国) * 2
沃达丰 (英国) * 2
3 (英国) * 2
Tesco Mobile (英国) * 2
Wind Tre (意大利) * 2
Talk Home (英国) * 1
ASDA Mobile(英国) * 1
VOXY(意大利) 1
Vodacom (坦桑尼亚) * 1
Salt Mobile (瑞士) * 1
Natel (瑞士) * 1
Kölbi(哥斯达黎加) * 1
由于应用程序缺乏保护措施,我的许多SIM卡似乎都容易受到SIM卡劫持攻击。为了识别易受攻击的应用程序,我查询了安装在SUT中的应用程序使用的所有TAR,以识别那些返回响应而不涉及任何安全机制(例如,KIC和KIK)的应用程序。之后,又使用SimTester找出了各种易受攻击的TAR。这些TAR与专门用于远程文件管理(RFM)的值相关联,可以通过OTA SMS进行访问,同时,还可以用于传输推送命令。不用说,每张SIM卡都具有不同的生产日期和上市日期。可悲的是,许多易受攻击的SIM卡仍然可以在市面上流通。下面的截图,展示了识别这些缺乏保护措施的TAR的过程,以及SimTester在测试易受攻击的SIM卡时的输出内容。
使用SIMTester的话,TAR扫描过程比较费时
可能易受RAM攻击的SIM卡
易受RFM攻击的SIM卡示例(B00001/2:SIM,B00010:USIM)
容易受到基于S@T Browser的SIMjacker攻击的SIM卡
测试方法
在测试过程中,我使用了一个功能受限的NowSMS演示版本,来考察空中传输(OTA)以及如何使用SMSS远程触发易受攻击的SIM卡上的服务/应用程序。NowSMS是一个SMS&MMS网关解决方案(功能完整的版本售价449,00USD)。
NowSMS SMS&MMS网关软件GUI及其Web界面
NowSMS服务器软件被安装在我的笔记本电脑(网关)和客户端,我使用的手机为三星S6(GSM调制解调器)。
三星S6上的NowSMS调制解调器
在此过程中,我通过F-BUS数据线(型号为DAU-05B)和USB到RS232转换器,并结合dct3-gsmtap实用程序,将SMS发送到一部连接至笔记本电脑的诺基亚3330(著名的诺基亚3310的变种)手机上,同时,我还借助于著名的Wireshark实用程序来嗅探通信流量。
诺基亚3330上的串行引脚
诺基亚F-BUS USB电缆插在电池和串行引脚之间
搭建环境
这样的话,只要在诺基亚3330上启用名为NetMonitor的秘密菜单后,就可以捕获收发的GSM数据了。这个过程可以用一个叫做Gnokii的工具来完成。
以明文形式接收短信的示例
实际上,在各种诺基亚手机都提供了NetMonitor菜单,它由一组显示屏组成,我们可以通过它们来访问有关SIM卡、手机和网络的各种信息。下面是可用显示屏的列表;有关诺基亚NetMonitor菜单的更多详细信息,请访问: http://www.nobbi.com/download/nmmanual.pdf。
Display 1: Serving cell info
Display 2: More info about serving cell
Display 3: Serving cell, 1st and 2nd neighbour
Display 4 & 5: 3rd to 8th neighbour cell
Display 6: Network selection display
Display 7: System information bits for the serving cell
Display 10: Paging Repetition Period, TMSI, Location Update Timer, AFC and AGC
Display 12: Ciphering, hopping, DTX Status and IMSI
Display 13: Uplink DTX switching display
Display 14: Toggle Screening Indicator
Display 17: Switch ‘BTS Test’ Status
Display 18: Lights status control
Display 19: Toggle Cell Barred Status
Display 20: Charging state
Display 21: Constant voltage charging display
Display 22: Battery full detection
Display 23: Battery and phone state monitor
Display 24: BSI values
Display 30: Audio API register display
Display 34: FBUS display
Display 35: Reasons for SW resets
Display 36: Counters for resets
Display 39: Information about reasons for call clearing
Display 40: Reset handover counters
Display 41 (Single-band): Handover display
Display 41 (Dual-band): Handover display, INTER CELL
Display 42 (Dual-band): Handover display, INTRA CELL
Display 43 L2 display
Display 44: Toggle revision level
Display 45: Toggle transmitter functionality
Display 51: SIM information
Display 54: Block display 1
Display 55: Block display 2
Display 56: Block display 3
Display 57: Memory status before reset
Display 60: Reset counters to zero
Display 61: Search and reselection counter display
Display 61 (Dual-band): Search and reselection counter display
Display 62: Neighbour measurement counter display
Display 63: Call attempts counters
Display 64: Location Update attempts counters
Display 65: SMS attempts counters
Display 66: SMS timeout counters
Display 70: Temporary counters of DSP
Display 71 & 72: Control DSP audio enhancements 1 & 2
Display 73: Generic display for DSP Audio Enhancements
Display 74: DSP audio enhancements 1 (DRC)
Display 75: Audio path status
Display 76: Ear (= SownLink) audio display
Display 77: Microphone (= UpLink) audio display
Display 78: DSP audio enhancements (AEC)
Display 79: Audio equalizer display
Display 80: Reset and restart timers
Display 81: Enable or disable timers
Display 82: Test timer display
Display 83: Control of task information displays
Display 84, 85 & 86: Information about tasks
Display 87: Information about OS_SYSTEM_STACK
Display 88: Information of the current MCU and DSP software versions
Display 88 (Nokia 9210): Version information for organizer part
Display 89: Information of the current HW and TXT versions
Display 89 (Nokia 9210): Version information for the phone part
Display 96 (Nokia 3210): receiver temperature
Display 99 (Nokia 7110): FBUS mode and Accessory mode
Display 100 (Nokia 7110, 62XX): Internal memory usage, overview
Display 102 (Nokia 9210): last data call type
Display 103 (Nokia 9210): last MT call type
Display 107 (Nokia 62XX): Voice dialling feature
Display 110 to 115 (Nokia 7110, Nokia 62XX): Internal memory usage, detail
Display 130 (Nokia 7110): Slide open counter
Display 132 (Nokia 3310): Call information
Display 133 (Nokia 3310): Charger information
Display 240 (No output): Clear counters and start timers
Display 241 (No output): Disable the NetMonitor menu
Display 242 (No output): Disable R&D field test displays
在诺基亚3310上访问NetMonitor秘密菜单的显示屏01
在诺基亚3310上访问NetMonitor秘密菜单的显示屏11
在诺基亚3310上访问NetMonitor秘密菜单的显示屏62
显示屏17是NetMonitor菜单的后续隐藏选项,并且,我们可以通过使用蜂窝塔ID号作为联系电话号码在联系人列表的位置33处创建名为“BTS TEST”的SIM电话簿条目来启用显示屏17。这也可以通过使用gnokii来实现,并使用下面的内容作为电话簿条目:
// Entry Name; Cell ID, Location; Position; Shortcut
BTS TEST;113;SM;33;5
通过显示屏17,我们可以将ME“绑定”到一个手机基站,并且在使用该功能时,不会与相邻基站共享信息,同时仍然可以顺利地发送和接收数据。我们知道,IMSI-catcher伪装成基站的时候,受害者因为其更强的信号而与之连接,因此,显示屏17肯定是我们的考察重点之一。
通过显示屏3发现,当BTS TEST被关闭时,信息会在邻近基站之间共享
启用“BTS TEST”功能后,我们就可以在频道113上运行(在前面的截图中可以看到ID为113的基站)
一旦ME被强制连接到ID为113的基站,基站之间就不再共享数据了
短信服务(SHORT MESSAGE SERVICE,SMS)
短信可以通过ME、电脑或服务器发送,并被传送到一个短信服务中心(SMSC),最后由该中心将其传送到目的地。虽然发送/接收短信的整个过程貌似简单,却涉及多种角色和路由,以区分短信类型,事实上,短信服务是由两种服务组成的:
短信接收(SM MT),这项服务是指在用户ME上接收短信。在这种情况下,短信类型被定义为SMS-DELIVER。
短信发送 (SM MO),这项服务是指在用户ME上发送短信。在这种情况下,短信类型被定义为SMS-SUBMIT。
在某些情况下,SMSC会向ME发送方发送一个后续的SMS,定义为SMS-STATUS-REPORT,以确认目的地地址(DA)成功收到了SMS。
SMS-SUBMIT和SMS-DELIVER过程
关于短信的更多细节,请访问https://en.wikipedia.org/wiki/GSM_03.40。
所有使用NowSMS发送的外发短信,都会展示在管理员的Web界面上,并按照GSM 7位标准以协议数据单元(PDU)的格式进行编码。这意味着所有的PDU短信都可以被分析、反向、定制和重用。
PDU信息可以通过USB调制解调器(或兼容电话)使用Minicom发送。下面是一个例子,用于说明如何使用Minicom发送SMS-SUBMIT PDU,其中包含文本“Hello SensePost”。
AT+CMGS=27 // Lenght of Octets (70 chars / 2 - 8 SMSC)
>079144872000626001000C9144573227562000000FC8329BFD064DCBEE7919FA9ED301 // Here it is necessary to press Ctrl+Z instead of pressing ENTER
下表对有效载荷的各个部分(八位字节)进行了解释。关于SMS PDU解码器,其实很容易从网上找到,例如:https://www.diafaan.com/sms-tutorials/gsm-modem-tutorial/online-sms-submit-pdu-decoder/。在构建正确有效载荷的时候,也可以借助于现成的工具,比如python模块SMS PDU(安装命令为pip install smspdu)。
八位字节:07,说明:地址长度
八位字节:91,TP字段:地址类型,说明:91表示国际(81表示国内)
八位字节:国际为448720006260,国内为7008022660F(F == 填充),TP字段:SMSC,说明:国际(+447802002606)
八位字节:01,TP字段:TP-MTI,说明:消息类型指示符SMS-SUBMIT(21 SMS-SUBMIT +请求报告状态)
八位字节:00,TP字段:TP-MR,说明:消息说明
八位字节:0C,说明:以半八位字节为单位的地址长度
八位字节:91,TP字段:地址类型,说明:91表示国际
八位字节:441122334455,TP字段:TP-DA,说明:目的地址(+441122334455)
八位字节:00,TP字段:TP-PID,说明:协议标识符
八位字节:00,TP字段:TP-DCS,说明:数据编码方案
八位字节:0F,TP字段:TP-UDL,说明:用户数据长度
八位字节:C8329BFD064DCBEE7919FA9ED301,TP字段:TP-UD,说明:用户数据(Hello SensePost)
实际上,SMSC也可以省略(00)。在这种情况下,它是将使用默认值;它被保存在SIM卡上(EFSMSP-SM服务参数)。
通常情况下,一旦从ME收到短信,就会自动保存到SIM卡中。在接收短信后,用户可以决定是删除还是保留SMS。同时,SMS的类型可以用来确定SMS的保存位置。
- Class 0:这种类型的短信将直接显示到接收者的手机屏幕上,而不需要用户交互。不过,短信将在很短的时间后自动删除(默认为5分钟,但也可以设置为0秒,这将导致不可见的短信),除非用户决定保留它。若要使用这种类型,数据编码方案(TP-DCS)字段必须设置为10。
- Class 1:这种类型的短信将存储在设备内存或SIM卡中。对于这种类型,TP-DCS字段必须设置为11。
- Class 2:当SMS消息包含SIM卡数据时,需要使用这种类型。对于这种类型,数据编码方案(TP-DCS)字段必须设置为12。
- Class 3:这种类型的短信一旦收到,就被转发到外部设备。对于这种类型,TP-DCS字段必须设置为13。
下面给出了一个简单的Class 0 PDU SMS(我们没有针对其他SMS类型进行额外的测试)示例,以及利用该功能的例子。
AT+CMGS=28
0001000C914411223344550010114676788E064D9B53500B34A7D7E96D
常规的Class 0 SMS
基于Class 0 SMS的SMiShing示例(请不要汇款,这不是我的真实银行账户)
虽然以下设置仅适用于旧手机(主要是诺基亚),但仍不失为通过短信发送WAP OTA服务设置好例子:
<!-- TP-USER-DATA -->
<?xml version="1.0"?>
<!DOCTYPE CHARACTERISTIC-LIST SYSTEM "file://c:/settingspush/settings.dtd" >
<CHARACTERISTIC-LIST>
<CHARACTERISTIC TYPE="ADDRESS">
<PARM NAME="BEARER" VALUE="GSM/CSD"/>
<PARM NAME="PROXY" VALUE="52.85.104.62"/>
<PARM NAME="CSD_DIALSTRING" VALUE="+44123456"/>
<PARM NAME="PPP_AUTHTYPE" VALUE="PAP"/>
<PARM NAME="PPP_AUTHNAME" VALUE="stutm"/>
<PARM NAME="PPP_AUTHSERCRET" VALUE="password123"/>
<PARM NAME="CSD_CALLTYPE" VALUE="ANALOGUE"/>
<PARM NAME="CSD_CALLSPEED" VALUE="AUTO"/>
</CHARACTERISTIC>
<CHARACTERISTIC TYPE="URL" VALUE="https://sensepost.com"/>
<CHARACTERISTIC TYPE="NAME">
<PARM NAME="NAME" VALUE="SensePost:)"/>
</CHARACTERISTIC>
<CHARACTERISTIC TYPE="BOOKMARK">
<PARM NAME="NAME" VALUE="Wap"/>
<PARM NAME="URL" VALUE="https://sensepost.com"/>
</CHARACTERISTIC>
</CHARACTERISTIC-LIST>
// First PDU SMS
AT+CMGS=155
>0051000C9144571651228900F5A78C0B0504C34FC002000304020101062C1F2A6170706C69636174696F6E2F782D7761702D70726F762E62726F777365722D73657474696E67730081EA01016A0045C60601871245018713110335322E38352E3130342E36320001872111032B343431323334353600018722700187231103737475746D00018724110370617373776F726431323300018728720187
// Second PDU SMS
AT+CMGS=123
>0051000C9144571651228900F5A75D0B0504C34FC0020003040202296A01018607110368747470733A2F2F73656E7365706F73742E636F6D0001C608018715110353656E7365506F73743A29000101C67F0187151103737475746D3A2900018717110368747470733A2F2F73656E7365706F73742E636F6D00010101
设置WAP OTA服务
小结
在这篇文章中,我们介绍很多与SIM卡有关的内容,有些涉及硬件,有些涉及软件内部机制(包括如何与SIM卡上的应用程序进行互动和测试),最后,我们还考察了与短信有关的信息——利用这些知识,我们就可以发送自己“制作”的短信。
顺便说一句,我们将在下一篇文章中为读者献上更加精彩的内容!