本页面只读。您可以查看源文件,但不能更改它。如果您觉得这是系统错误,请联系管理员。 ====== SVN安全配置 ====== ==== 1、SVN简介 ==== ---- Subversion,简称SVN,是一个开放源代码的版本控制系统,相对于的RCS、CVS,采用了分支管理系统,它的设计目标就是取代CVS。互联网上越来越多的控制服务从CVS转移到Subversion。 Subversion使用服务端—客户端的结构,当然服务端与客户端可以都运行在同一台服务器上。在服务端是存放着所有受控制数据的Subversion仓库,另一端是Subversion的客户端程序,管理着受控数据的一部分在本地的映射(称为“工作副本”)。在这两端之间,是通过各种仓库存取层(Repository Access,简称RA)的多条通道进行访问的。这些通道中,可以通过不同的网络协议,例如HTTP、SSH等,或本地文件的方式来对仓库进行操作。 ==== 2、SVN服务器架设 ==== ---- 安装SVN <code bash>#yum install subversion</code> 测试是否安装成功 <code bash>#svnserve --version</code> 如果显示了版本信息则表示安装成功 创建仓库 <code bash>#svnadmin create /home/svn/repo</code> 给svn设置密码 修改配置文件/home/svn/repo/conf/svnserve.conf 去掉 <code bash>#[general]</code> 前面的#号 匿名访问的权限,可以是read,write,none,默认为read <code bash>anon-access = none</code> 认证用户的权限,可以是read,write,none,默认为write <code bash>auth-access = write</code> 密码数据库的路径 <code bash>#password-db = passwd</code> 去掉前面的# 修改配置文件passwd <code bash>#vim /home/svn/repo/conf/passwd</code> =前面是用户名,后面是密码: <code bash> [users] name = password </code> **启动SVN服务器** 对于单个代码仓库 <code bash>#svnserve -d -r /home/svn --listen-host 192.168.1.100</code> svn默认端口是3690,在防火墙上开放这个端口。 <code bash> /sbin/iptables -A INPUT -i eth0 -p tcp --dport 3690 -j ACCEPT /sbin/service iptables save </code> 把/var/www/html/目录导入到svn的repo目录下 <code bash> svn import /var/www/html/ file:///home/svn/repo -m "test" </code> ==== 3、错误配置及利用 ==== ---- SVN导致的漏洞主要有两类: - SVN未设置密码并允许匿名访问。 - 发布代码时使用了SVN co并且未限制对服务器上的.svn文件夹的访问。 SVN未设置密码并允许匿名访问将导致重要的源代码、数据库连接信息和服务器配置信息等敏感信息泄露,进而可能将导致服务器沦陷。 发布代码时使用了SVN co时服务器将导出一个带.svn文件夹的目录树,.svn文件夹中有包含了用于版本信息追踪的“entries”文件。如此时未限制对服务器上的.svn文件夹的访问便可被用于摸清站点结构。 更严重的问题在于,SVN产生的.svn目录下还包含了以.svn-base结尾的源代码文件副本(低版本SVN具体路径为text-base目录,高版本SVN为pristine目录),如果服务器没有对此类后缀做解析,黑客则可以直接获得文件源代码。 如果解析了该后缀,可能会有文件解析的漏洞,可能会有扩展解析漏洞,找地方上传xxx.php.gif也许就可以直接得到webshell了。 附上个遍历.svn/entries展现网站目录结构的两个脚本: [[http://static.wooyun.org/20141017/2014101714374572884.zip|svn遍历脚本]] ==== 4、实际案例 ==== ---- [[http://www.wooyun.org/bugs/wooyun-2013-020861|【盛大180天渗透纪实】第四章.SVN猎手 (某站SVN信息泄露+设计问题导致服务器沦陷)]] [[http://www.wooyun.org/bugs/wooyun-2013-018998|爱拍svn泄露,有被脱裤危险,想起了csdn....]] [[http://www.wooyun.org/bugs/wooyun-2013-026351|优酷某分站SVN信息及某sql文件泄漏]] [[http://www.wooyun.org/bugs/wooyun-2012-012665|淘宝网某应用svn信息导致代码泄露]] [[http://www.wooyun.org/bugs/wooyun-2012-012321|鲜果网怕是所有应用要沦陷了?]] ==== 5、修复方案 ==== ---- 设置SVN密码,并将匿名访问用户的权限设置为none。 发布代码时使用svn export导出,而不要使用svn co检索,防止泄露目录结构。 svn export使用示例 <code> svn export [-r 版本号] http://路径 [本地目录全路径] --username 用户名 svn export [-r 版本号] svn://路径 [本地目录全路径] --username 用户名 svn export 本地检出的(即带有.svn文件夹的)目录全路径 要导出的本地目录全路径 </code> 如果已经线上的生产环境已经有了.svn目录不想删掉可以在服务器上设置禁制访问此目录: Apache,设置.htacess: <code> <Directory ~ "\.svn"> Order allow,deny Deny from all </Directory> </code> Nginx,设置配置文件: <code> location ~ ^(.*)\/\.svn\/ { return 404; } </code> ==== 6、相关资源 ==== ---- [[http://subversion.tigris.org/|Subversion官方网站]] [[http://www.ibm.com/developerworks/cn/java/j-lo-apache-subversion/|用Apache和Subversion搭建安全的版本控制环境]] [[http://blog.csdn.net/kangquan2008/article/details/8070391|centos svn安装及配置与使用]] [[http://www.cnblogs.com/aLittleBitCool/archive/2011/07/09/2101602.html|linux下svn常用指令]] [[http://www.wooyun.org/bugs/wooyun-2012-05539|WooYun: .svn目录未设权限限制的漏洞利用总结]]