概述
SAP的企业资源规划(ERP)系统已成为企业各项关键业务:财务管理、薪资管理、人力资源管理、供应链管理、客户关系管理等的基础平台。然而,在每个SAP的安装实施过程中,都会基于客户的需求进行不同程度的客户化。通常使用ABAP程序来调整SAP系统以满足客户的需求,而且还能更好的定制SAP的实施及应用。然而,有缺陷的ABAP代码却有可能给开发人员非法访问SAP系统关键资源的机会。ABAP程序的安全漏洞,如果没有被很好的控制,将会造成关键数据丢失、经济损失等严重后果,甚至需要承担法律责任,因为这些代码漏洞违反了法律规定。

简介
  SAP的企业资源规划(ERP)系统被全球大部分的企业级公司所采用。在这样的企业级环境中,加强SAP应用的安全性有着很重要的意义。SAP系统是企业各项关键业务:财务管理、薪资管理、人力资源管理、供应链管理、客户关系管理等的基础平台,因此SAP安全也尤为重要。任何未知的缺陷或漏洞都会导致灾难性的后果,并会为之付出昂贵的代价。
  SAP安全主要包括SAP授权、密码策略、角色分配不当或权限过大、安全策略失效等方面。如果能对解决上述方面的问题并对其进行监控,就能保障企业的相对安全。但是,这些漏洞却往往会被忽视而且很少受到仔细的检查。那些运行在公司服务器上的,由公司内部和外部人员开发的代码就存在这样的情况。
  在每个SAP的安装实施过程中,都会基于客户的需求进行不同程度的客户化。除调整基础的SAP系统以满足客户的规范要求外, 公司的开发人员还会编写一些功能程序来定制SAP的安装,而他们使用的编程语言是ABAP —— SAP的主要的,并且在不断发展的编程语言。

虽然公司可能会遵循严格的软件开发流程,还会有测试和质量保证等阶段,但ABAP代码却很少会被开发者之外的其他人进行逐行的代码审查。所以,无论对ABAP程序进行多少测试,实际上只有开发者自己才知道这些代码到底有多安全。如果不对代码进行严格仔细的审查,有缺陷的ABAP代码就很可能给开发人员非法访问SAP系统关键机密资源的机会。ABAP程序的安全漏洞,如果没有被正确的处理,将会造成关键数据丢失、经济损失等严重后果,甚至需要承担法律责任,因为这些代码漏洞违反了法律规定

常见的ABAP漏洞

ABAP程序的漏洞很难被标准编译器或代码分析器检测到,因为这些漏洞并不是因语法错误产生的,它们更像是普通的编程步骤或一些预置程序,这些预置可能是开发者的疏忽,也可能是开发者故意留在系统中以备以后利用。我们一起来看看这些常见ABAP程序漏洞:

SQL Injection
定义
  SQL注入是一种攻击应用服务器或web网站的方式,是通过尝试在普通用户的输入内容中嵌入SQL语句,来操纵Open SQL语句的执行内容。下面的例子演示了一个普通的SQL语句是如何被用于进行SQL注入攻击的:

正常SQL语句
SELECT * FROM table WHERE name = 'userinput'.

被攻击者用SQL注入修改后的语句
SELECT * FROM table
WHERE name = ' a'; DROP TABLE users;
             SELECT *
               FROM  table1
             WHERE name = '%''.

上面的示例中,攻击者没有输入应用或web网站的用户名,而是使用了SQL注入攻击,用红色部分嵌入SQL的文本替换了用户名。这样,SQL语句的查询结果就从简单的读取用户名与用户输入相匹配的数据,变成了先读取用户名是’a’的数据,然后再删除用户表,最后再读取表’table1’中的所有数据。攻击者已经很轻松地获取到了未授权的特定表的数据,还删除了包含所有用户信息的表。

对业务有何影响?

此漏洞会导致数据被破坏或SAP数据库中的数据被恶意篡改。这也会使公司信誉受损,并因此影响公司收益。举例说明SQL注入攻击者会做些什么事情:
攻击者使用你们公司的在线商店来购买产品。如果在付款流程中的某个web页面不够安全,攻击者用下面的语句来替换他的用户名:
a'; SELECT *
      FROM  CreditCardInfo
      WHERE name = '%'
这样,攻击者就能成功地获取了您公司所有注册用户的信用卡信息。

如何修复漏洞?
在ABAP代码中,用户输入的所有内容都应该在插入于SQL语句前进行验证和清理,以便移除伪装成用户输入的各种恶意代码和命令。

未进行授权检查

定义
  在ABAP程序或报表程序中,能够调用SAP事务处理命令。通常,这些事务处理命令是在SAP GUI客户端中被调用的,而且需要用户拥有执行命令所必需的权限。但是,在ABAP代码中,如果开发者在调用前没有明确的进行权限检查,那么无论当前用户是否有执行权限,上面的SAP事务处理命令都会被执行。下面的例子演示了调用SAP事物处理命令而没有进行权限检查:
    CALL TRANSACTION ‘SU10’.
上面这行ABAP代码调用了SAP事务处理命令’SU01’——用来集中管理维护用户的命令,却没有对当前用户是否有权执行进行检查。

对业务有何影响?
这一漏洞将导致未经授权地执行SAP事务处理命令,进而非法的访问SAP数据,甚至篡改数据。而且,机密数据丢失或公司系统被渗透,将导致客户信心下降。客户信心动摇又将会长期影响公司收益。在大部分这样的案例中,这样操作还是违反法律规定的。下面这个例子说明未进行授权检查会怎样:

一个普通用户执行上面的ABAP 程序,到了运行事务代码’SU01’那一步,这个用户本身是没有权限执行’SU01’的,但是因为这个ABAP代码没有授权检查,他现在却获得了这种权限,这样做是绝对违反法律规定的。

如何修复漏洞?
  在ABAP代码中所有调用SAP事务处理命令的地方,都需要事先进行详细的授权检查,以确认当前用户是否拥有执行此命令所必须的权限。这个修复上面ABAP代码的简单方法是,在原来的代码:
        CALL TRANSACTION ‘SU10’.
增加一段AUTHORITY-CHECK代码:
        AUTHORITY-CHECK OBJECT 'S_TCODE
               ID 'TCD'
               FIELD 'SU10'.
IF sy-subrc = 0.
CALL TRANSACTION 'SU10'.
ENDIF.
这样就可以在调用前确定当前用户是否有权执行。

硬编码的用户凭证

定义
    在ABAP代码中,用户安全凭证不是动态检查的而是硬编码写死在程序中的。例如:
IF sy-uname = 'JOHNSMITH'.
        CALL TRANSACTION ‘SU01’.
ENDIF.

对业务有何影响?

这将会允许用户轻松地通过检查,而不是真正的使用用户自己的身份进行认证和检验。在这样的例子中,很可能导致某个用户获取到SAP数据库中未被授权访问的数据。这样的非法访问数据会使公司蒙受经济损失,动摇客户信心,也同样违反了法律规定。举例说明:
  John Smith是一家ABAP软件开发公司的开发人员,您将您公司ABAP开发外包给了这家公司。John 恰好在您公司的这个项目中工作。John在他编写的一个偶尔会用到的、用于记录他在此项目工作时间的普通程序中,包装了一段’SU01’调用的代码。通过上面的硬编码,使得只在他登录时,程序在会调用’SU01’命令。而后,John Smith 使用这个程序时就不仅是用它记录工作时间了,还进入了您公司的SAP系统’SU01’命令,他就可以创建新用户或修改您公司的用户数据。这当然也绝对是违反了法律规定的。

如何修复漏洞?
所有的硬编码的用户凭证都必须用对当前用户的动态检查来替换。这样才能使授权检查真正地起到安全保护作用,而不仅仅是一个假象

跨站脚本

定义
  跨站脚本是一种攻击方式,它通过在Web页面的用户输入内容中嵌入恶意脚本来进行攻击。一旦这样的页面被加载,恶意代码将会在用户的浏览器中执行。这些脚本利用了web应用的安全漏洞,绕过常规的浏览器强制加载的安全机制,来进行恶意攻击。

对业务有何影响?
  如果通过跨站脚本攻击成功地嵌入的恶意脚本被执行了,那攻击者就能获取到存储于浏览器会话中的用户或应用的机密信息。这将会导致用户身份被盗用或数据被破坏,以致造成经济损失、法律责任甚至失去品牌价值等严重后果。下面示例说明这一漏洞的严重性:
  一个黑客来到您公司的在线商店中,想要在付款页面嵌入一些恶意脚本。通过跨站脚本这种方式,他成功的将恶意代码嵌入其中。从这以后,每当有客户在您公司的在线商店购买商品时,客户的所有订单信息包括信用卡信息都被发送到黑客的服务器上,而不是您公司的服务器上了。

如何修复漏洞?
  跨站脚本攻击也是一种代码注入攻击方式,所以应该在ABAP程序使用用户输入内容前,对其进行的严格检查和清理,这样才能去除嵌入其中的危险代码

危险的ABAP命令
定义
  一些ABAP命令允许访问文件系统或执行底层操作系统命令。这就会有潜在危险,所以它们是不应该出现在ABAP代码中。

对业务有何影响?
  如果不仔细检查,这样的ABAP命令会变的非常危险,它们可能会被用来删除或修改操作系统文件或者SAP数据。这将会危害整个公司和公司的各种宝贵数据的安全,并因此会损害公司在客户中的声誉,减少预期收益。下面的例子演示这一漏洞的危害:
  一名您公司ABAP外包项目的开发人员,在他编写的一个简单的ABAP程序中,包含了一个’DELETE DATASET’的命令,而这个程序却是您公司员工经常使用的程序。这个程序仅仅被这个开发人员更新了一下就发送给您公司来使用。当公司内的员工使用新更新的程序时,像删除这样的攻击会不知不觉的发生。

如何修复这样的漏洞?
应该尽量少使用这些命令,并仔细的审查代码,以保证这些命令不会被恶意使用

生成Open SQL
定义
  Open SQL允许用户使用可动态生成的SQL语句,以便在运行时完成装配,而不是编译时生成。如果用户输入的内容恰好是生成的SQL语句的一部分,并且没有被很好的检查和清理,就会导致用户读取或修改SAP数据中的关键数据,甚至会在其中插入一些假数据。这有一个动态生成Open SQL语句的例子:
SELECT * FROM (mytable) WHERE NAME = (username).

对业务有何影响?
如果通过用户输入能修改后台Open SQL语句,就会导致关键业务数据被盗、被修改甚至被删除。SQL注入攻击是这种利用SQL语句使用不当来进行攻击的一个通用模式。同样的,这种数据被非法访问的事情将损害公司在客户中的声誉,给公司造成经济损失,还可能承担法律责任。举例说明:

在你的ABAP程序中有如下的Open SQL语句:
SELECT * FROM SSNDETAILS WHERE NAME = (usernameval).
变量’usernameval’原本是取自用户输入内容的。一个心怀不满的员工,没有输入他的用户名,而是输入了一段恶意字符,使上面的语句变成了这样:
SELECT * FROM SSNDETAILS WHERE NAME = ‘%’.
这样他获得了所有员工的社保信息,而不只是他自己的信息。

如何修复漏洞?
  应该尽量少使用动态生成的Open SQL语句,如果必须使用,则应该在使用前对用户输入的内容进行严格检查和清理。

ABAP命令注入(程序)
定义
动态ABAP命令像:POOL, PERFORM 和 GENERATE SUBROUTINE,通常被用来在运行时生成并执行ABAP代码。如果这样的命令和用户的输入一起使用,将是非常危险的事情。

对业务有何影响?
  如果用户的输入内容和这些动态的ABAP命令一起使用,而用户输入内容又没有任何的后期处理流程或清理,就会导致SAP数据库数据被非法读写,甚至会随机执行一些危险SAP系统命令。未经批准地访问数据可能会使公司在客户中信誉扫地,即使没有也会严重损害公司的信誉。还会给公司还来经济损失,而且大多数还会承担法律责任。举例说明:
  一个心怀不满的员工在一个经常使用的ABAP程序中嵌入了一个动态命令,这个程序将会在某个特殊时间(比如当他被解雇的时候),删除关键的系统数据。而当这灾难性的毁灭发生或漏洞被发现时,他已经远走高飞了。

如何修复漏洞?
  使用动态ABAP命令的地方应该被控制在尽可能少的情况中,而且无论什么时候使用,都应该对用户输入的内容进行严格检查以保证里面不会有潜在的恶意命令。

ABAP命令注入(报告)
定义
  和在ABAP程序中使用动态ABAP命令一样,有一些命令像:INSERT REPORT 和 GENERATE REPORT被用于在运行时动态生成REPORT程序。如果有和用户的输入内容一起使用,则用户可能会通过运行动态REPORT来获得SAP数据库中的关键数据。

对业务有何影响?
  如果用户的输入内容和这些动态的ABAP命令一起使用,而用户输入内容又没有任何的后期处理流程或清理,这可能会导致SAP数据库数据被非法读写,甚至会随机执行一些危险SAP系统命令。未经批准地访问数据可能会使公司在客户中信誉扫地,即使没有也会严重损害公司的信誉。还会给公司还来经济损失,而且大多数还会承担法律责任。举例说明:
  一个对公司不满的员工,在一个他经常使用的程序中嵌入了动态ABAP命令,这个命令会生成一个所有的员工社保信息的报告。然后他像往常一样进入程序,浏览了包含所有员工社保信息的报告。这绝对是法律不允许的。

如何修复漏洞?
  使用动态ABAP命令的地方应该被控制在尽可能少的情况中,而且无论什么时候使用,都应该对用户输入的内容进行严格检查以保证里面不会有潜在的恶意命令。

上面这些,只是选择了ABAP程序漏洞中一小部分进行了介绍。大部分都是因编程疏忽、单纯无知的错误或恶意代码而引起的程序漏洞。这些程序漏洞,能够通过仔细的逐行的代码检查来发现。然而,通过人工进行代码检查可是相当耗时的,因为,一个公司里定制开发的ABAP代码库中会有成千上万行的ABAP代码!

如前所述,大约80%的SAP客户都有自己定制开发的程序。这些程序大部分都是用ABAP或WebDynpro 来开发。这些定制开发过程中的质量保证流程通常只是在将程序发布到生产环境前,进行功能性的质量检查。而对跨站脚本、未授权检查、SQL注入等安全漏洞方面进行的检查,却大部分都没有进行过。

一些客户会希望通过一些黑盒测试来发现大部分关键的安全漏洞。但是,黑盒测试只能确认一部分问题。

ABAP程序中的七大危险漏洞相关推荐

  1. ABAP 程序中退出操作(CHECK, EXIT, RETURN, LEAVE PROGRAM...)

    ABAP 程序中退出操作(CHECK, EXIT, RETURN, LEAVE PROGRAM...) 这里总结一下几个常用的退出操作: CHECK.(SAP官方推荐只在循环中使用) 1)CHECK ...

  2. php act index漏洞,浅析PHP程序中的目录遍历漏洞

    这类漏洞主要是存在与基于PHP+TXT结构的程序中,漏洞代码也是来自于一个国外的BLOG,代码如下: $act=$_GET['act']:if($act==''){ include("blo ...

  3. 如何找到 AWS 环境下应用程序中易于得手的漏洞?

     聚焦源代码安全,网罗国内外最新资讯! 编译:代码卫士 本文作者介绍如何从AWS环境下的应用程序中找到易于发现的漏洞.如下是全文. 毋庸置疑,云环境已主导当前市场.服务提供商中,AWS 的地位正在上升 ...

  4. 目录遍历漏洞:入侵检测php程序中的目录遍历漏洞,目录浏览(目录遍历)漏洞

    目录浏览(目录遍历)漏洞 来源:信管网 2019年08月26日 [所有评论] 目录浏览漏洞属于目录遍历漏洞的一种 目录浏览(目录遍历)漏洞 目录浏览漏洞是由于网站存在配置缺陷,导致网站目录可以被任意浏 ...

  5. GS01创建信息集及其他GROUP在ABAP程序中的调用方法

    1.函数'G_SET_GET_ALL_VALUES'使用 实例 DATA: t_set_values TYPE TABLE OF rgsb4. DATA: wa_set_values LIKE LIN ...

  6. ABAP程序中调用不同类型的函数弹出不同的消息对话框

    一组有用的用户交互窗口函数 显示多条消息 SAP系统用的是这个函数:C14Z_MESSAGES_SHOW_AS_POPUP POPUP_TO_CONFIRM_LOSS_OF_DATA 显示有YES/N ...

  7. java内存漏洞_处理Java程序中的内存漏洞

    Java 程序中也有内存漏洞?当然有.与流行的观念相反,在 Java 编程中,内存治理仍然是需要考虑的问题.在本文中,您将了解到什么会导致内存漏洞以及何时应该关注这些漏洞.您还有机会实践一下在您自己的 ...

  8. 小米预装的安全应用程序中存在漏洞

    清明三天在外,手机编辑,见谅 本文原文链接: https://research.checkpoint.com/vulnerability-in-xiaomi-pre-installed-securit ...

  9. ABAP报表中负值展示问题的处理方法

    现象描述 在使用ABAP报表展示数据的时候会涉及到金额类字段,在手动计算金额的时候,有时会发生存在负值而无法正常展示的情况.  处理过程 ABAP报表的数据展示常用的方法有两种,分别是表控制和ALV ...

最新文章

  1. Windows 10 Anaconda Python 3.7 安装 MXNet GPU版
  2. 用 PHP 读取 XML
  3. 10G DB_LINK的问题
  4. 周四话分析:数据驱动,如何塑造下一个“教育领头羊”?
  5. 关于oracle监听程序的相关问题及解决方法
  6. js(Dom+Bom)第一天(1)
  7. 东八区转为0时区_格林尼治时间转换为北京时间
  8. 抢注“哔哩哔哩”商标卖成人用品?A站回应:不符合价值观 已申请注销
  9. 『商务口语』2010.01.11--你要在这里停留多久?
  10. DEV C++的OPENGL环境配置
  11. 奇幻RPG(人物构建 与 Abstract Factory模式)
  12. 学习opencv:PS滤镜—曝光过度
  13. 关于大数据后端粉丝交流群
  14. 函数式编程(JAVA)——Stream流
  15. 客户端服务端交互实现
  16. 共享单车项目数据可视化+需求策略分析
  17. 轻松bypass360网站卫士WAFSQL注入防护
  18. Mac快捷键:文本,浏览器页面,终端terminal
  19. easy php moodle,Windows 环境下配置easyphp+moodle方法及设置外部IP访问方法
  20. 各类学习网站分享和好用的工具及插件

热门文章

  1. 51单片机系列——基础指令
  2. “物联网”架构有多重要?
  3. MySQL: Connection Refused,调整 mysql.ini中的 max_connections
  4. 阿里云,我的一些看法
  5. 找找 Spring Event 源码中各种设计模式的使用
  6. Microsoft Dynamic CRM 2013安装
  7. 2012年度IT博客大赛【星光评委】申请说明
  8. WEB应用之网页数据分析工具
  9. 北京年会和关于数据仓库板块的思考
  10. scikit-learn一般实例之一:绘制交叉验证预测