【51CTO.com 独家特稿】来自于维基的解释说:ERP是企业资源规划的英文缩写,是基于计算机的资源管理系统,包括对有形资产、资金、材料、人力资源的企业管理软件。广义上的ERP涵盖了很多内容,CRM、人力资源管理,财务管理、生产制造管理等等很多内容。不管是ERP、CRM、SRM或者是其他一些类似的商业应用管理软件,都涉及到安全问题,因为他们存储了非常重要的业务数据,这些应用如果存在漏洞的话,都会对企业造成重大的经济损失。
一、ERP是安全的吗?
关于ERP的安全,一直以来都缺少足够的关注。在我接触的客户中,通常他们会对ERP安全持有三个态度:
1、第一个观点:ERP的业务应用程序都在内部网络里,因此是可信的。持有这种观点的人绝大多数是业务层面的高管,而非IT部门的主管。实际情况是,除非你还在大型机时代,不然的话你一定需要和别人互联。分支办事处、客户和供应商,以及银行、银联都会在你的网络里有接口,而且很多员工的办公电脑都可以连接到互联网,这就又多了一个高风险的互联网通道。我们在google上输入inrul:sap,就可以看到很多使用sap的内部页面。再比如图1,我们在一个shado的搜索引擎上,输入erp,可以轻易的搜索到很多国家的erp服务器,包括他们的ip,中间件,开发语言等信息。
图1 利用搜索引擎得到的ERP服务器信息
2、第二个观点:ERP是开发商的问题。持有这种观点的人认为,ERP的安全问题,开发商应该在设计之初就充分考虑到,并且确保了安全,持有这种观点的人一般都是对安全不太了解的IT主管。从技术的角度来说,开发商应该对他程序的错误和架构负责。但是,默认/不安全的配置、人为因素、补丁管理、策略和过程则是用户自己的问题。换句话说,即使代码是百分百安全的,在实施部署、日常运维中,你还是有很多机会可以犯错。
3、第三个观点:业务应用是内部的,而且非常具体,黑客不可能了解结构和用途。持有这种观点的人一般认为,系统都在公司内部运行,而且使用的平台也不是windows这种黑客所熟知的,因此他是封闭、隐藏的世界,因此可以高枕无忧。
真的可以高枕无忧吗?第一,越热门的产品越容易被黑客研究,从而招致更多的攻击,因为一旦攻击得手,其可复制性很大,可以获得更多战果。大家熟知的windows就是在这种攻防对抗中慢慢健壮起来的。国内现在的ERP市场,几个大型厂商的占用率非常高,这就提供了研究攻击的土壤。其二,ERP在过去几年的发展中,我们可以清楚的看到,企业发展壮大之后,不可避免的具有地域扩张的需要。所以它越来越依赖于互联网运行,即使现在没有,将来也会有,等到那个时候再来考虑安全问题,已经积重难返了,整改的代价会非常高。第三,不管是供应商还是用户,对安全的防御能力还停留在3-5年前的水平,买个防火墙,装个杀毒软件。他们不知道攻击早已经从2-4层转移到应用层攻击上了。
那么,ERP的主要安全问题是什么呢?根本原因有三个,第一就是ERP具有复杂的结构,系统越复杂,安全问题越难处理。也就是安全界常说的complexity kills security ,复杂性杀死安全。第二,安全层次覆盖网络、应用等各个层面。第三,管理员担心打补丁,会造成系统出问题,所以绝大多数ERP系统里都存在着很多漏洞。所以,从erp的安全生命周期来上来说,想要保证整体安全,要从两个方面来考虑,开发安全,实施部署的安全。
图2 ERP安全生命周期框架#p#
二、开发安全
图3 开发安全框架
这个图,实际上是针对程序员来说的,开发的安全。中间是最重要的数据。开发安全分两块,一个是代码漏洞,一个是前端漏洞。所谓前端漏洞,就是整个erp的前台,与用户交互的地方。
1、代码安全
在代码的漏洞上,根据常见的ERP安全问题,我们做了一个TOP10的排名。
图4 开发代码漏洞TOP10
例一:跨站。sap有很多跨站问题,最新发现的一个是在5月份,在RequestParts.htm页面上,有漏洞的变量是sap-ffield,这个页面是sap和互联网的接口交互的地方,通过这个跨站漏洞,可以绕过sap的跨站过滤,获取管理员的cookie。
- 提交:/sap(bD1lbiZjPTAwMA==)/bc/bsp/sap/icf/RequestParts.htm?sap-ffield=aaa=<img/src="asas"/onerror="alert('XSS')">
例子中使用简单的onerror,一个标准的事件属性,就可以绕过sap的过滤机制,由此可见sap的跨站过滤,应该是非常脆弱的。而且这个页面比较关键,它是互联网交互的,所以如果你google去搜这种页面,就有机会跨站,拿到管理员cookie,也就是说,你完全可以远程渗透sap。#p#
例二:信息泄露问题。
在Oracle财务软件的/pls/DAD/find_web.ping和/OA_HTML/jsp/fnd/fndping.jsp这两个页面上都有这个问题,这两个页面记录了连接的错误信息,而且错误信息非常详细,几点几分,Oracle的http服务器Apache某某版本,与某IP的连接出现问题,在Apache的日志中记录了这个问题,Apache的日志路径是什么,可以使用哪些debug命令来调试确认等等一系列信息。
例三:错误的访问控制/遍历
这个问题是NETWAVER里的,NETWAVER是sap的基本平台,sap所有的新产品都搭建在这个平台上。在NETWAVER里有个rfc库,库里有很多函数可以被调用,但是谁可以调用这些函数,只有几个账户可以调用。其中一个账户是SAPCPIC,他有个默认密码是admin。这个账户不是在线用户,就是说他不能直接登录,它就是用来执行rfc兼容命令的,可以做远程函数调用。使用这个权限你就可以获得共享内容。然后你还可以写idoc,这个idoc是sap的数据交换码,比方说你的商品价格,我就可以通过这个权限,把你的商品价格取出来,或者把你的商品价格改掉放进去。这个攻击就是利用这个账户,因为这个账户一般人根本不会用到,甚至都不知道密码是什么。
图5 NETWAVER中的错误访问控制/遍历漏洞
2、前端安全
图6 开发中的前端安全漏洞TOP10
这里都是和用户交互的地方,比如BS结构的浏览器页面,信息的传递都在这里。所以这里的风险级别都比较高,也是很多都可以远程去做的。#p#
例一:缓冲区溢出
该例参见宇文先生在09年的《大型企业之患!SAP安全之攻击客户端》这篇文章。http://netsecurity.51cto.com/art/200909/150135.htm,在第二段里,他提到了缓冲区溢出攻击的一个实例。
例二:默认密码
erp里因为账户、权限很多,也记不住,就有个很坏的习惯,把密码写在程序里,而且大多数也不怎么加密,嗅探就可以,而且呢,这种写法的还大多数都是连接数据库,你可以很容易成为他的dba。关于这点,我们在后面会详细提到。
三、安全的部署和实现
图7 安全的部署、实现框架图
在这一部分,是比较通用的:底层的网络,然后上面跑的系统,数据库、应用,在这里,他也有前端的漏洞问题,这就比开发安全要复杂一些。
1、网络层漏洞
图8 网络层漏洞TOP10
网络漏洞,这个大家都见的多了,一般的安全加固也在做这方面的事情。
例:监听SAP未加密的通信
在SAP网络中,使用
tcpdump -n -i eth0 'tcp[13] & 3 != 0 and (( tcp[2:2] >= 3200
tcp[2:2] < 3300) > or 5 ( tcp[2:2] >= 3600 tcp[2:2] < > 3700))'
进行监听,这个例子是监听tcp的3200,3600几个高端端口,这是NETWAVER的默认专用端口,在这个例子里,我们发现了HR系统的连接密码,权限是最大权限,可以获得hr系统的所有数据。#p#
2、操作系统漏洞
图9 操作系统层漏洞TOP10
在erp里面有个很大的问题就是默认密码,那在这一层上,实际上也有很多可利用的地方。这里列出了存储各类密码的不同路径,这是从sap手册上找到的,我相信大多数人不会改这些东西,你只要能够访问这些文件,你就可以拿到相关密码。虽然有的密码是加密的,但是他们的加密机制比较弱。
例:默认敏感文件
数据库文件(数据,加密的Oracle、SAP密码)
路径:/oracle/
SAP配置文件(加密的密码)
/usr/sap/
/usr/sap/
Configtool配置文件(加密的数据库密码)
\usr\sap\DM0\SYS\global\security\data\SecStope.properties
\usr\sap\DM0\SYS\global\security\data\SecStope.key
J2EE Trace文件(明文密码)
/usr/sap/
图10,在这个文件里抓到的用户名和密码
ICM(加密密码)
\usr\sap\DM0\SYS\exe\uc\NTI386\icmauth.txt #p#
3、数据库漏洞
图11 数据库漏洞TOP10
例一:Oracle开启不必要的服务
UTL_HTTP:UTL_HTTP可以读取Oracle里面的网页源码,这个参数比较危险,如果你学过oracle注入的话,这个参数是很常见的Oracle注入测试点,后来Oracle发现了这个问题,在11的版本里头,开始提供针对这个参数的访问控制,但是有多少人知道呢?又有多少人知道,而且会去进行访问控制呢?我看了很多的安全加固手册,对这个完全没有提及。
UTL_TCP:看名字你就知道,它是建立tcpip连接的,可以跨越数据库领域对外通信。他的出名是因为Voyager这个蠕虫,这个蠕虫会把dba的权限授给public,然后利用UTL_TCP去网上下载其他病毒,再然后把数据库的密码发送邮件给一个指定邮箱,06年1月份的时候,这个病毒大规模爆发,直到6月份,Oracle才发布了补丁。这些默认安装的服务,都是可以利用的。
例二:MSSQL的Master..xp_dirtree _\\fakesmb\sharee'
这是列目录,找共享,是常见的攻击命令,也是sql注入的常见用法,可以列出你根目录,再然后找到你的数据库,把它down下来慢慢破解。
例三:使用低权限 Oracle 数据库账户得到 OS 访问权限
这个例子在互联网上广为流传,文章名字就叫做《使用低权限 Oracle 数据库账户得到 OS 访问权限》。其原理:一般情况下,你去连接Oracle的SMB控制台,都需要DBA权限,但是还是有办法来获得权限的,那么这里就利用了Oracle的一个漏洞,在Oracle里面,任何用户都可以创建一个文本索引,并且发送文本查询。这就是这个漏洞的利用基础,然后你就能读到服务器上的远程共享,再通过远程共享,窃取你这台服务器的账户。
4、应用漏洞
图12 应用漏洞TOP10
应用漏洞实际上就和日常运维有很大关系了,比较危险的也是前3名,补丁,默认密码,权限设置。#p#
例一:默认密码
图13 默认密码
这里的SAP和DDIC是超级管理员,TMSADM是用来做通信管理的,SAPCPIC这个说过了,是rfc远程调用的,EARLYWATCH类似与日志审计账户。他们都有自己的初始密码,除了超级管理员的密码可能被改,其他被改的可能性不大。
5、前端漏洞
图14 前端漏洞TOP10
例:未加密
图15 缺少加密
sap怎么传输密码的呢,他有一个自己的协议叫DIAG,把数据包走diag传过去,因为他觉得diag是私有格式,所以认为很安全,密码就是简单的压缩一下传过去,但是这是可以被解压的,数据加密也是这样。那怎么解决呢?SNC,sap的一个身份验证机制,4.0版本以上开始提供。
webgui,这个对密码用了base64编码,简单的说,base64根本就不能算是个加密,它的主要作用也不是用来加密,它只能说,把密码变成人类不可直接读的文件,base64很容易破解。现在只有电子邮件才用它,因为它能保证数据在很多传递过程中不会出错。所以这个密码很容易就破解了,而且网上有很多工具。
RFC,这个我们说过了,远程调用的函数库,他的密码加密是异或运算一个已知的值,你知道知道这个值,你就非常轻松的运算出来明文,就算你不知道这个已知的值,如果他的密钥空间不够大,出现重复,仍然可被破解。无线的密码破解,其实也是和这个原理差不多,就是不断抓包,抓到一定数量时候,他就会有重复,然后破解。
Visual admin的控制台密码加密,用的是自己的专有算法,不过这个算法在08年前被破了,但是不好利用。
mobile的admin控制台:无加密。
【51CTO.com独家特稿,非经授权谢绝转载!合作媒体转载请注明原文出处及出处!】
【编辑推荐】