导语:POS系统是我们日常生活中常见的一种系统,文章对POS系统的架构和攻击原理进行了分析。
简介
POS系统是指通过自动读取设备(如收银机)在销售商品时直接读取商品销售信息(如商品名、单价、销售数量、销售时间、销售店铺、购买顾客等),并通过通讯网络和计算机系统传送至有关部门进行分析加工以提高经营效率的系统。我们日常生活中最常见的POS系统可能就是商店的收银机,这属于有线POS机,但是其实POS系统的种类有很多,比如快递小哥的使用的就是移动POS机。本文对攻击POS系统进行了研究。
针对POS系统攻击的研究其实有很多。比如2014年的时候,Lucas Zaichkowsky做了一些关于POS系统的研究,分析了一些POS设备安全相关的事件。发现magstripe卡含有未加密的敏感数据,这也就可以克隆magstripe卡,EMV芯片含有未加密的magstripe数据,同样可以从RAM中进行复制。
支付处理架构
POS软件的支付处理架构如图所示:
图1. 支付处理架构
支付处理的流程如下:
第一步,用户会在商户的POS设备上刷卡来购买商品,POS设备就会发送信用卡的数据来商户的POS系统。
第二步,POS系统会连接到PSP(支付服务提供商),由PSP去根据信用卡的品牌和种类去联系收单机构来授权该交易。
第三步,收单机构用该信用卡公司的网络来信用卡的发行商通信,发行商会通过信用卡公司的网络来返回给收单机构有个授权状态。
第四步,收单机构会把授权状态传递给PSP,然后转发给POS系统和设备,最终完成交易。这个通讯的过程非常快,只需要几秒钟。
SAP案例分析
研究人员想要进行深入研究,所以对针对零售科技的软件提供商进行了分析,分别是Cegid Group, MI9 Retail (Raymark), ECRS, Manthan Systems, Celerant Technology, SAP, Aptos, Oracle, PCMS Datafit, MicroStrategy。这前十的软件提供商包括大型企业和中型企业。文中以SAP为例进行了分析。
从SAP官方了解到,SAP POS是一种C/S POS解决方案(如图2)。SAP POS的应用范围也包括石油、天然气等行业。这些应用是在32位和64位Windows平台上运行的,是用C++语言编写的。
SAP POS的架构是POS解决方案的一个典型方案,含有商户客户端应用、商户服务端应用和管理应用。客户端应用运行在商户POS系统上来处理POS交易的商店,商户服务端运行在商户办公区来服务连接、运行和管理需求,管理应用主要负责中央控制。
图 2. SAP POS架构
商户配置器和Xpress服务器
商户配置器是用来配置POS系统的带有GUI的软件,配置的内容包括用户、终端、PLU、安全设置等。系统管理员使用友好的接口可以进行各种配置。之后,配置器会将这些设置保存为一个特殊的文件newparm.trg,并保存在PARM目录中。管理员需要将这些配置文件拷贝到Xpress服务器中。
文件的作用是类似一个触发器。Xpress服务器应用每30秒搜索一次文件,如果找到了触发文件,就会检查更新并应用到所有的参数文件中。之后,服务器会删除newparm.trg文件。PARM目录存放这些配置文件,比如cnummask.cmk是负责在账单上对信用卡号打码的,cashier.clg含有POS系统管理员和出纳员的信息。
Xpress服务器和商户管理
商户管理是配置商户信息的有图形界面的软件,所有的功能可以根据端口分为两部分:
第一部分是数据库端口。商户管理软件聚合了所有的商户配置器,它是直接与数据库进行交互的。
第二部分是端口2202。在检测到该端口后,会检查标准用户接口并扫描可用端口。该端口不会验证内部连接,所有人都可以与之通信。当与该端口通信时,就会返回一个welcome消息。Help命令会显示一些操作,一共有超过17个函数。一些函数非常重要,可以让用户查询出纳员的行为,在无需认证的情况华打开和关闭步骤,并关闭服务器。在逆向了负责2202端口的xps.exe库后,研究人员找到了17个函数还有57个私有函数。
这是一个APM-VALIDATE-PASSWD方法:
APM-VALIDATE-PASSWD [store_number] [thread] [region_number] [login];[password]
命令一发送,服务器就会返回结果。对不同的服务器会有不同的响应,而且没有尝试次数的限制。攻击者可以暴力破解的次数是15次,如果返回给攻击者的code是10,就是说该用户没有登录,1表示密码错误,0表示正确。
重置命令也是一样的,当重置的密码与原密码一样的话,该命令是不执行的。
用这些函数还可以在服务器端进行无验证的文件读操作。
File –open方法是用来打开服务器上的文件的。
FILE-OPEN [file-path] [mode]
Mode的默认值是r,可以接受的有r,w,a,r+,w+,a+。错误的模式会破坏Xpress服务器应用,导致没有mode参数的验证,并在fopen()函数中翻译。如果一切运行正常,系统就会返回文件的id来调用该文件。下一步就是调用FILE-READ方法来读取文件的内容。
POS客户端和Xpress服务器
POS客户端连接商户服务器并与之通过2200端口通信。交易、配置和维护数据通过该端口传输。每天商户管理员第一次打开终端时,会发送一个请求,请求的内容大致为“Hey, Server, I woke up, send me new parameters, pleeease”。当商户管理员关机时,会把日志文件发送到服务器。
研究人员截取了客户端和服务器之间的流量发现,当POS终端发送一个特殊的包给Xpress服务器时,响应的包是文件的内容。
如果用另外一台机器来执行该操作,会返回同样的结果。攻击者可以读取服务器文件系统上的任意文件了。
在研究中,发送的包的格式为:
图 3. 发送的包
包中一共有5个元素:
Tepe是消息的类型; Len是消息的长度; Where是数据存储的本地路径; What是目标文件路径; End是0,0,只有在响应消息中才会更改。
对协议的逆向分析发现,攻击者可以做的事情不止于读取文件,还可以任意写文件。
为了在服务器上写任意文件,需要在2200端口上发送三个包:
第一个是发送文件的类型和包长度,Xpress服务器上的文件路径,文件的本地路径,发送数据的大小和静态空值; 第二个是文件数据类型包,含有内容长度,和要写入的内容。 第三个是end of file消息。之后,Xpress服务器应用会响应一个Good消息,然后服务器上就会出现一个新的文件。如果发送的文件大小错误,Xpress应用会删除目标文件。所有的这些操作都是没有验证的情况下进行的。
除了这些以外,攻击者还可以匿名进行文件读、写和删除操作。
攻击向量
攻击者想要访问本地商户网络,那么可能的攻击向量有哪些呢?首先由很多的POS客户端,二维码读码器等连接到POS客户端。一些小工具是放置在商户大厅的,而且基本上没有什么保护。这样,攻击者就可以运行脚本来替代这些设备了。
研究人员发现SAP POS的4个现状:
商户配置工具创建配置文件,如果Xpress服务器在特殊目录下发现了newparm文件就会应用他们。 用2200端口可以在Xpress服务器上任意下文件。 POS客户端开机后会更新参数。 POS终端可以通过Telnet和2202端口进行开启和关闭。
根据这些,研究人员发现了如何进行攻击:
1. 攻击者可以用2200端口在Xpress服务器上写配置文件,配置文件可能是不同的。攻击者可以改变打印在收据上的卡号隐藏的位数,还可以改变商品的价格,关闭数据库中对敏感信息的加密灯; 2. 攻击者可以用2200端口在xpress服务器上写newparm.trg文件; 3. 可以在数据库中写文件; 4. 用Telnet2202端口发送close term消息给xpress服务器; 5. 用telnet端口发送open term消息给Xpress服务器; 6. Xpress服务器应用打开POS终端; 7. POS终端发送请求到Xpress服务器,下载攻击者的配置并应用。
需要注意的是每天营业结束后,所有的终端都会关机并在第二天打开。当Xpress服务器应用开始或者更新参数时,就会搜索home目录下的XPSPARM.bat” 和“StopTN.bat文件。如果搜到了,文件就会自动执行,攻击者就可以上传这种特殊的脚本。
加密
SAP POS使用的加密工具是TWSecurity,该工具会对每个密码创建一个特殊的安全容器。该容器与SAP POS元素的内容相同,包括client, xpress server, store manager和configurator。加密会在每个阶段进行,根据文档,下表中的内容是经过加密的。
表 2. 加密的内容
在CryptoRegister表里有一些列和存储的步骤,这些都是受到加密等级影响的。比如,雇员的密码用hash值保存,信用卡的reference号用3DES密文保存。这样安全吗?
加密token和加密的函数是管理员在商户配置器中进行设置的。加密token会转换成一个ASCII码文件,并发送给Xpress服务器。攻击者可以将token篡改为空,这样就可以在之后的交易和过程中关闭加密机制。
那么数据库中存储和加密的信息安全吗?利用TWSecurity工具,安全容器只是系统注册表中的一些行。TWSecurity工具工具可以为加密创建新的密钥,并用新的密钥来加密敏感数据。也就是说,该工具连接到数据库,获取密文,用旧的密钥解密,并用另一个密钥加密一次,然后更具数据库。
攻击者可以用该工具来从内存中窃取明文文本数据。在Frida的研究中,用Python库来进行测试,该方法还是很有效的。
安全补丁
2017年7月,SAP发布了Missing Authentication checks in SAP Point of Sale (POS) Retail Xpress Server 补丁。补丁中含有14个文件,会替换POS系统中原来的文件。主要的可执行文件有xps.exe和xpsctrl.exe。该补丁的主要思想是攻击者是否可以在2202端口发送消息,并控制POS终端,所以需要对该端口进行访问控制。该描述说明该补丁修复会产生一个新的参数,该补丁会决定IP地址,并接受与Xpress服务器的连接。默认值是localhost,但是该补丁忽视了一个问题,那就是该问题不只存在于2202端口,也不存在2200端口。而且2200端口给攻击者的机会更多。通过这些接口,攻击者可以绕过防护机制。
本地商户管理器
当商户管理器应用连接到Xpress服务器,服务器会检查IP地址是不是localhost,如果不是就拒绝连接。假设只有本地应用和用户能够与该端口进行通信,攻击者可以使用2200端口发送命令到Xpress服务器在2202端口上连接服务器,并绕过验证机制。
远程商户管理器
第二种方法是在另一台机器上安装本地商户管理器。当商户管理器连接到2202端口时,Xpress应用就会打开配置文件“local.ini”,并从中提取BACKOFFICEIPADDRESS参数,与入口IP地址就行比对。为了绕过该验证机制,攻击者可以读取local.ini文件的当前配置,用恶意IP地址替换正确的IP地址,并重写该文件。这样,Xpress服务器应用就会认为攻击者的IP是合法的。
结论
总的来说,如果2200端口没有bug的话,安全补丁是可以保护系统抵御外部攻击者的。POS系统存在漏洞的也不止SAP这一家,本月Oracle就爆出漏洞,影响万台POS设备。