网站内容被篡改?数据库出现转储?神秘的文件不时出现?没错,这一切都意味着你的Web应用程序很可能已经受到黑客攻击——今天我们要探讨的就是判断这类问题的存在,并以具备通行性的方式加以解决。
当客户与我们的业务进行互动时,其首先接触到的往往正是Web应用程序。Web应用可以说是企业公众形象的关键性代表——但正是这种极高的曝光度也使其成为恶意人士们的主要针对对象。
大多数指向Web应用程序的攻击活动非常隐蔽而且难于发现。根据Verizon 2015数据泄露调查报告所言,目前攻击者们一旦侵入到企业内部环境,其潜伏而未被发现的平均周期长达205天——这显然构成了严重的安全问题。大多数企业其实根本无力主动发现自身已经被恶意人士所入侵的事实,直到他们接到执法部门或者愤怒客户发来的消息。
那么我们要如何判断自身的Web应用程序是否已经受到攻击?“当大家的Web应用程序被入侵,最重要的初始征兆就是其开始出现行为异常,”Information Security论坛管理负责人Steve Durbin指出。因此要想及时发现入侵事故,关键在于深入理解Web应用程序的正常行为状态,而后认真排查各类不合常理的运作表现。
在今天的文章中,我们将探讨五种可能预示着Web应用程序遭到入侵的显著征兆——而这也应该成为大家排查问题的最佳起点。除此之外,大家还能够从中了解到与Web应用程序安全保护相关的常识性建议,并利用它们更为准确地判断自身当前安全态势。
对应用程序进行监控可以说是大家揪出异常状况的最佳途径——是的,没有之一。
也许大家会发现自己的应用程序如今需要耗费更多时间来渲染由数据库提供的结果页面,且整个时间周期远高于过去。另外,应用程序也许会以预期不同的次数显示某些页面,或者将用户重新定向至完全不同的其它页面。也许网络流量会突然增加,但企业本身却没有任何合理的营销活动来支持这种莫名其妙的高访问量。举例来说,某家每天平均订单数量为50笔的小型在线店铺突然出现每天高达5000次的访问流量,那么别急着开心——这肯定是出了问题。
当然,这些还不足以完全证明我们的Web应用程序已经遭到攻击。缓慢的页面载入状况很可能源自某些临时性的网络连接问题——甚至是某些DDoS攻击,如果大家有理由相信攻击者可能采取这种手段的话。不过相比之下,积极采取行动进行调查肯定要比坐到更大的问题突然降临好得多。
如果应用程序将用户重新指向至其它页面,请务必马上调查其实际原因。这到底是恶意广告劫持页面功能所导致?还是页面中的代码最近进行过变更?抑或是数据库当中的信息遭到了篡改?总而言之,请大家养成利用正常行为对生产环境下的应用进行解析的好习惯,这样预期之外的状况会被立刻发现并接受我们的深入调查。
如果设置得当,那么日志信息将成为我们揪出攻击活动的宝贵矿脉。经过筛选的数据库日志能够昭示出与预期不符的查询活动,同时显示该信息的出现时间。如果数据库日志在短时间内显示出多项错误,这可能代表着某人正在应用程序当中游弋以搜寻——或者已经找到——SQL注入载体。这时我们需要回溯该数据库查询的具体来源,并确保相关应用程序以正确方式处理了这些输入请求。
我们的Web服务器软件能够通过系统FTP及HTTP日志记录下所有入站与离站网络连接(因此大家务必保证其处于启用状态)。通过提取与筛选,我们能够从这些日志中发现未经授权或者恶意活动所留下的踪迹。
Web服务器一般来讲只需要与内部数据库建立连接。如果出现了来自Web服务器并指向公共IP地址的离站网络连接,那么我们必须马上考虑其发生原因以及有可能代表的问题。某些没有正当理由的文件传输行为则昭示着有数据离开了该Web服务器。这可能会成为重要的线索,进而帮助我们发现攻击者从应用程序当中窃取数据并将相关内容发送至远程服务器的活动。
另外,不要单纯关注数据流出网络之外的状况,而忽略了业务环境内部的数据移动现象。如果Web服务器与其它内部网络资源进行过通信,例如用户文件共享与个人用户计算机,那么这可能代表着攻击者已经入侵到了企业内部环境当中并在网络内到处游荡。举例来讲,如果相关应用程序允许用户进行文件上传,那么请务必确保其使用专用的文件服务器而非企业内部的任意传输载体。
与服务器日志类似,应用程序日志也能够在出现问题时向大家发出提醒,当然前提是其经过正确设置并受到严格监控。请确保对管理员级别的任务进行应用日志记录,例如创建用户账户或者管理员账户。如果Web应用程序创建了管理员级或者具备其它权限级别的账户,请立即验证该账户的合法性——以避免高权限账户为攻击者所获取。
Web应用程序还应当显示管理员们的确切登录时间,这样大家才能够定期检查并发现在意外位置以及时段进行的访问操作。另外我们需要验证管理员账户的实际行为。一般来讲,不合常理的Web应用程序管理员账户操作往往意味着大家的业务环境已经遭遇到了恶意入侵。
如果我们发现表单提交相关错误数量增加或者在页面载入的过程当中出现大量错误的状况,那么很有可能意味着该应用程序正在尝试进行一些与原始设计不符的操作。如果大家遇到了这类错误数量增长的现象,请立即追踪触发这些错误的对应页面并排查其中可能被篡改的代码。
对Web服务器上的各项进程加以监控,这能够帮助大家快速了解服务器上未知进程的扩散或者已知进程在非正常时间段内运行等异常状况。一般来讲,未知进程的出现在很大程度上意味着我们的应用程序已经不再处于正常的受控范围之内。
一旦攻击者在服务器上获得了一个账户,那么其几乎已经能够为所欲为了。定期对服务器进行监控以掌握用户创建活动因而十分重要,特别是那些具备一定权限的用户账户。这些账户通常并非新近创建而成,因此我们有必要对全部账户进行筛查——无论其具体创建时间如何。如果特定用户不应要求提升自身权限或者root访问资格,但却出现了请求提交的情况,那么我们几乎可以认定其登录凭证已经为攻击者所窃取。
我们应当养成在Linux服务器上查看定时任务(即crontab)或者在Windows服务器上查看计划任务的好习惯,这能帮助大家切实掌握正常状况下的各条目运作情况。如果有新任务被添加进来,这可能意味着我们的Web应用程序正在进行一些预期之外的活动。也许最终大家会发现其根源只是一项临时性维护任务——但我们也不能排除这是攻击者在家中利用自己的手机从应用程序处定期获取来自命令与控制服务器新指令。攻击还可能会以自动化方式分批向远程服务器发送额外数据,这些都是值得关注的显著征兆。
Web应用程序当中几年以来始终未被修改过的文件是否会在近期显示出时间戳变更?如果我们的Web服务器没有经过正确配置或者应用程序当中存在安全漏洞,那么攻击者们很可能会对应用进行修改以运行他们的恶意代码。相关恶意代码往往会被注入至JavaScript或者经过重量写的模块。有鉴于此,大家需要检查时间戳以确保各文件没有在未经授权的情况下受到修改。如果文件已经遭到修改,那么请将其与原有版本进行比对,从而了解其中的具体变更内容。
目前有多款实用程序能够扫描应用程序,从而揪出其中的恶意代码。因此请定期运行以确保我们不至于遗漏任何重要的文件内容变更。(Sucuri就是这样一款出色的工具。)
另外,我们的Web服务器上是否出现了大量在正常使用情况下不可能存在的新文件?Web root当中出现新文件明显不属于正常情况,特别是在这些新文件属于脚本或者其它类型的可执行文件时。将文件添加至Web root下应当是一个经过详尽记录的过程,而且所有相关活动都应遵循既定计划的引导。如果大家在Web root或者服务器的其它位置发现了新文件,那么恭喜——您已经中招了。攻击者可能在利用大家的应用程序进行恶意软件传播,包括针对其它不知情网站的访问者或者运行脚本将其重新定向至其它位置。当然,新出现的文件也可能以纯文本格式出现,其中包含有攻击者已经收集到的各类有价值数据。
曾经有攻击者创建了一个全新目录,并在其中安装自己的应用程序。相较于直接与Web应用程序发生接触,他们更依赖于利用域以及服务器来运行自己的恶意工具。
如果大家的Web应用程序使用第三方插件,那么请检查这些插件以确保它们不会在未经提醒的情况下进行更新或者安装。千万不要随便安装此类插件,因为它们虽然能够让我们的网站看起来更酷炫,但同时也会给站点带来恶意代码入侵的可能性——因此大家必须以审慎的态度加以对待。以White Hat Security为代表的这类扫描工具能够切实帮助大家发现潜在的攻击性代码。
如果大家的应用程序遭到入侵并已经开始传播恶意软件,那么其它安全工具很有可能已经将其列入了高危名单。谷歌公司在汇总Chrome浏览器用户的使用经历并对高危页面进行屏蔽方面做得非常到位;当然,其它浏览器厂商也会定期更新自己的恶意站点黑名单。定期利用这些浏览器来检查自己的应用程序,观察其中是否给出了任何警示信息——或者直接利用谷歌推出的Safe powsing工具对自己的站点加以审查。
监控社交媒体及帮助台电子邮件以了解来自用户的真实声音。如果用户表示他们由于相关邮件被自动标记为垃圾邮件而无法进行密码重置,那么我们就应当考虑自己的应用程序是否已经被网络安全行业认定为垃圾邮件中继。
如果发现了安全问题的存在,我们应当立即对应用程序以及相关服务器进行备份,从而保留可供未来取证的重要信息。如果大家从某套备份处进行恢复,那么请确保该副本清洁无污染,这样我们才不至于在恢复的同时将恶意软件也一同引入了业务环境。找出受到感染的文件,并将其替换为安全清洁的版本。当然,这也意味着备份需要定期进行以满足当前业务的发展需要。
一旦应用程序已经恢复完成且不必要的文件被移除,请大家立刻变更全部现有密码,其中包括面向CMS、管理员账户以及其它所有个别服务的密码内容。另外,尽可能启用双因素难机制并设置VPN访问,这能够在保障应用程序安全的同时防止攻击者利用原有登录凭证重新侵入。
强化应用程序自身。移除其中不必要的权限,且永远不要使用默认密码。使用较难被猜到的目录路径是个不错的办法(最好不要使用/admin这种烂大街的路径,攻击者最先尝试的肯定就是这一控制面板存储位置)。对于PHP应用程序来讲,其能够在php.ini文件当中轻松启用安全模式。安全扫描工具也能够对应用程序当中的已知安全漏洞进行排查。
在我们的个人或者工作笔记本电脑中,大家肯定会使用反病毒软件、关注自己所下载的程序并定期对操作系统以及第三方软件进行更新。同样的作法也适用于Web服务器以及应用程序。定期更新第三方应用程序能够确保各类安全漏洞得到及时修复。服务器之上的现代反病毒工具亦可以捕获大多数公开的Web shell并检测到已经被安装在服务器当中的恶意软件。
在几乎所有情况下,我们都需要恢复应用程序并解决其中可能会被攻击者们所利用的漏洞。尽管从零开始重建服务器并设置应用程序的方式也是可行的,但这往往只是我们挽回局面的最后手段。如果没有及时更新且清洁安全的备份数据,那么全盘重来恐怕将是大家惟一的选项。另外,如果大家没有定期审视上文中提到的各项攻击者已然入侵的征兆,那么各位也根本无法意识到自己的应用程序需要修复。总之,这是一项艰难且综合性的任务,同志们加油!
原文标题:5 signs your Web application has been hacked