21.1 恶意代码
恶意代码对象:包括广泛的代码形式的计算机安全威胁,这些威胁利用网络、操作系统、软件和物理安全漏洞对计算机系统散播恶意载荷。
•计算机病毒和特洛伊木马,依靠用户对计算机的不当使用在系统间传播。
•蠕虫,则依靠自身的力量在脆弱的系统间传播。
21.1.1 恶意代码的来源
早期:恶意代码的编写者都是相当有经验(可能误入歧途)的软件开发人员,他们会为自己精心构思的、富有创意的恶意代码感到骄傲。
现在:一些脚本小子,他们并不理解安全漏洞的内在机理,只会从网上下载随时可用的软件(或脚本程序),利用这些软件对远程系统进行攻击。
高级持续性威胁(APT,Advanced Persistent Threat):
是富有经验的对手,拥有先进的技术和雄厚的资金,这些袭击者通常是军事单位、情报机构,或可能隶属于政府机构的影子团体。
APT攻击和其他恶意软件作者之间的主要区别:
恶意软件:恶意软件开发人员通常掌握软件供应商不知道的零日漏洞。因为供应商没有意识到漏洞,所以没有补丁,而且漏洞是非常有效的。
ATP:由APT构建的恶意软件具有高度针对性,旨在只影响少数的敌方系统(通常小到一个!),很难防御。
21.1.2 病毒
计算机病毒有两个主要功能:传播和破坏。
•传播功能,定义了病毒如何在系统之间扩散,从而感染每一台计算机。
•破坏,病毒的有效载荷通过执行病毒作者预谋的恶意行为来释放它的破坏力,从而破坏系统或数据的保密性、完整性和可用性。
1. 病毒传播技术
借助粗心的计算机用户交换磁盘、共享网络资源、发送电子邮件或执行其他试图共享数据的活动进行传播。
病毒一旦到达新的系统,就会使用某种传播技术感染新的受害者并扩展其触及范围。
4种常见的传播技术:主引导记录感染、文件程序感染、宏病毒、服务注入。
(1)主引导记录病毒(Master Boot Record, MBR)
主引导记录病毒是已知最早的病毒感染形式。
这些病毒攻击MBR——可启动介质(例如,硬盘、软盘或DVD)上计算机用于在启动过程中加载操作系统的部分。
由于MBR 非常小(通常只有512 字节),因此它装不下实现病毒传播和破坏功能所需的全部代码。
为避开空间的限制,MBR 病毒将主要的代码保存在存储介质的其他部分。
系统读取受感染的MBR时,病毒会引导系统读取并执行存储在其他地方的代码,从而将病毒加载到内存,并可能触发病毒有效载荷的传播。
大多数MBR 病毒在系统之间通过用户不经意地共享被感染的介质进行传播。
如果在启动过程中被感染的介质在驱动器中,目标系统就会读取被感染的MBR, 将病毒加载到内存中,
进而感染目标系统硬盘的MBR, 并伺机感染其他计算机。
(2)文件程序感染病毒
•可执行文件,在操作系统执行这些文件时被激活。
在Windows 系统上,可执行文件的扩展名是exe和com。
文件程序感染病毒的传播程序可能只对可执行程序做少许改动,从而植入病毒需要复制和破坏系统的代码。
某些情况下,病毒实际上可能用被感染的版本替换整个文件。
标准的文件程序感染病毒没有使用障眼法,例如隐形或加密,通过比较感染前后的文件(如大小和修改日期)或散列值查出病毒。
•同伴病毒,是自包含的可执行文件,利用与合法的操作系统文件类似又稍有不同的文件名来躲避检查。
同伴病毒依靠基于Windows 的操作系统在执行程序时与命令关联的默认文件扩展名(.com、.exe 和bat, 并且遵循这个顺序)进行操作。
例如,如果在硬盘上有一个名为game.exe 的程序,那么同伴病毒可能使用名称game.com。
如果你打开命令行工具并输入game, 操作系统将执行病毒文件game.com, 而不是你实际要执行的文件game.exe 。
对于在命令行工具中执行文件时要避免快捷方式并且使用具体的文件名。
(3)宏病毒
一些应用程序为了自动执行重复任务而实现了某些脚本功能。这些功能常使用简单却有效的编程语言,例如Visual Basic for Applications(VBA)。
虽然宏的确为计算机用户提供了提高生产率的巨大机会,但它们也将系统暴露给另一种感染手段——宏病毒。
宏病毒最早出现在20 世纪90 年代中期,它采用拙劣的技术感染Microsoft Word 文档。
虽然宏病毒比较简单,但由于当时反病毒机构没有预见到,反病毒软件对它们没有任何防护,因此这些病毒得到快速传播。
宏病毒很快变得越来越普遍,供应商匆忙升级他们的反病毒软件,使之能扫描应用文档中的宏病毒。
1999 年, Melissa 病毒通过Word 文档传播,它利用Microsoft Outlook 中的安全漏洞进行复制。
2000 年初,臭名昭著的I Love You 病毒步其后尘,也利用相似的漏洞进行传播。快速蔓延的病毒困扰了我们很多年。
在20 世纪后期出现了一系列宏病毒后,高效的软件开发人员对宏开发环境进行了重大改变,
限制了不受信任的宏在没有用户明确许可的情况下运行的能力。导致宏病毒的数量急剧减少。
(4)服务注入病毒
最近爆发的恶意代码使用另一种技术感染系统并逃脱检测——将自己注入可信的系统进程中,如svchost.exe 、winlogin.exe 和explorer.exe。
通过破坏这些可信进程,恶意代码可绕过主机上运行的反病毒软件的检测。
保护系统免受服务注入的最佳实践:
确保浏览Web 内容的所有软件(如浏览器、媒体播放器、帮助应用程序)都打上最新的安全补丁。
2. 容易受到病毒攻击的平台
如同大多数宏病毒感染那些运行流行的Microsoft Office 应用程序套件的系统一样,
大多数计算机病毒被设计成破坏世界上最流行的操作系统Microsoft Windows 。
由AV-Test.Org 在2017 年进行的分析中,研究人员估计77%的恶意软件以Windows 平台为目标。
这是一个重大变化,在过去几年中,有超过95%的恶意软件是针对Windows 系统的;
这种变化反映了恶意软件已经开始瞄准移动设备和其他平台。
值得注意的是,仅在2016 年,针对Mac 系统的恶意软件就增加了三倍,而针对Android设备的恶意软件变体数量在同一年翻了一番。
底线是所有的操作系统用户都应该了解恶意软件的威胁,并确保有足够的保护。
3,反病毒机制
流行的计算机反病毒软件:
Microsoft Security Essentials、McAfee Antivirus、Avast Antivirus、Trend Micro Antivirus、ESET NOD32 Antivirus、Sophos Antivirus、Symantec Norton Antivirus;
大多数杀毒软件都使用特征型检测的方法来识别系统中潜在的病毒。
反病毒公司维护着一个庞大的数据库,这个数据库中包含所有已知病毒的特征。
依赖于反病毒软件及其设置,反病毒软件能够定期扫描存储介质,对所有包含与标准匹配的数据的文件进行扫描。
反病毒软件包采取的措施:
• 杀毒:如果软件可清除这些病毒,就对这些被感染的文件进行杀毒,并且将系统还原到安全的状态。
• 隔离:如果软件识别了病毒但是不知道该如何消除,可能会隔离这个文件,直至用户或管理员介入。
• 删除:如果安全设置策略没有提供隔离或文件超出了预定义的危险阈值,反病毒软件可能删除这些被感染的文件,以试图保持系统的完整性。
特征型反病毒软件:有效性只依赖于病毒库的有效性,需要经常更新病毒库(通常按年付费)。
基于启发式的机制分析软件的行为,寻找病毒活动的迹象。例如试图提高特权级别、掩盖电子踪迹,以及更改不相关的或操作系统的文件。
常见策略是系统隔离可疑文件,并把它们发送到恶意软件分析工具,在一个隔离但被监控的环境中执行它们。
如果该软件在运行过程中表现可疑,则把它添加到整个组织的黑名单中,快速更新反病毒签名以应对新威胁。
现代反病毒软件能检测、删除和清除系统上的大量不同类型的恶意代码。
可提供针对蠕虫、特洛伊木马、逻辑炸弹以及其他电子邮件或Web承载代码的防护。
当怀疑网上存在新的恶意代码时,最佳做法:
1.联系反病毒软件供应商,咨询当前针对新威胁的防护状态,不要坐等下一次定期或自动特征字典更新。
2.不轻易相信第三方关于反病毒解决方案所提供保护状态的言论。
3.关注反病毒软件供应商在确定新的重大威胁的第一时间向客户发出的警报。
其他安全软件包(如Tripwire,一种流行的数据完整性保证软件包)也提供了辅助的反病毒功能。
Tripwire:被设计成用于警示管理员发生未授权的文件修改,常用于检测对Web 服务器的破坏和类似的攻击。
不过,如果关键的系统可执行文件(如command.com)被突然修改,那么Tripwire 也可能提供某些病毒感染的警告。
这些系统通过维护存储着系统中所有文件散列值的数据库进行工作。
比较散列值,判断文件是否被修改:
通过比较这些归档的散列值与当前计算的文件散列值,就可检测出两个时间段之间所有被修改的文件。
在最基本的层面上,散列是用来汇总文件内容的数字。只要文件保持不变,散列将保持不变。
如果文件被修改,即使是几个字节,散列也将发生明显变化,表明文件已被修改。
除非该操作似乎可解释(例如,发生在安装新软件、操作系统补丁程序的应用或类似的更改之后),可执行文件的突然更改可能是被恶意软件感染的迹象。
4. 病毒技术
以下4种病毒类型使用高超的技术企图逃避检测。
(1)复合病毒
复合病毒使用多种传播技术试图渗透只防御其中一种方法的系统。
例如,1993年发现的Marzia 病毒通过为每个文件添加2048 个字节的恶意代码来感染关键的COM 和EXE文件,最明显的就是系统文件command.com。
这个特征说明它是一种文件程序感染病毒。
此外,Marzia 病毒在感染系统两个小时后,它会向系统的主引导记录写入恶意代码,这说明它也是一种引导扇区病毒。
(2)隐形病毒
隐形病毒通过篡改操作系统欺骗反病毒软件,使其认为一切正常,从而将自己隐藏起来。
例如,隐形的引导扇区病毒可能利用恶意代码覆盖系统的主引导记录,随后还通过修改操作系统的文件访问功能来覆盖自身痕迹。
当反病毒软件请求MBR的副本时,被修改的操作系统提供它所期望看到的版本:也就是没有任何病毒特征的未被感染的MBR。
然而,系统在启动时会读取被感染的MBR, 并将病毒加载到内存中。
(3)多态病毒
在系统间传输时修改自身的代码,每次感染新的系统后,病毒的特征都略有改变。
多态病毒制造者就是希望通过连续改变特征使基于特征的反病毒软件失效。
然而,反病毒软件供应商识破了许多多态病毒技术的代码,因此目前使用的反病毒软件版本都能检测出已知的多态病毒。
剩下唯一要担心的是,为阻止多态病毒的攻击而生成必要的特征文件,这会花费供应商较长的时间,因此可能导致多态病毒在很长一段时间范围内仍在网上肆无忌惮地运行。
(4)加密病毒
加密病毒使用加密技术来躲避检测。
加密病毒的外部表现很像多态病毒,每个感染系统的病毒都有不同特征。
加密病毒不是通过改变代码来生成这些修改过的特征,而是修改在磁盘上的存储方式。
加密病毒使用一个很短的、被称为病毒解密程序的代码段,这个代码段包含必要的密码信息,用于对存储在磁盘其他地方的主病毒代码进行加载和解密。
每个感染过程都使用不同的密钥,这使得主代码在每个系统上都呈现出完全不同的样子。
不过,病毒解密程序往往包含特征,因此加密病毒很容易被最新的反病毒软件识破。
5. 骗局(hoax)
几乎每个电子邮件用户都曾经收到过朋友转发来的邮件或者有关Internet存在最新病毒威胁的警告。
这个传闻中的“病毒“总是那些目前尚未发作但极具破坏性的病毒,没有任何反病毒软件能够检测和/或删除它们。
有关这种骗局的一个著名示例是欢乐时光(Good Times)病毒警告,最早1994 年出现在互联网上,至今依在传播。
恶意软件恶作剧传播通过:邮件、Facebook 、Twitter 、WhatsApp 、Snapchat 和其他社交媒体和消息平台传播。
21.1.3 逻辑炸弹(Logic bomb)
逻辑炸弹的特征:在满足特定条件之前,处于休眠状态的恶意代码。
大多数逻辑炸弹都由软件开发人员编入用户定制的应用程序中,目的是在被突然解雇时破坏公司的工作。
21.1.4 特洛伊木马
系统管理员经常警告计算机用户,不要从互联网下载并安装软件,除非能够保证来源绝对可靠。
许多公司严禁安装任何未经IT 部门预先筛选的软件,这样的策略能够最小化组织的网络被特洛伊木马破坏的风险。
特洛伊木马也是一种程序,它表面友善,但实质上包括了恶意有效载荷,具有对系统或网络的潜在破坏能力。
(1)无害的木马(目的是通过访问web页面获得浏览量,获取广告收入)
例如, 2002 年网上出现的一系列木马,这些木马声称为PC 用户提供在计算机上运行为Microsoft Xbox 设计的游戏的能力。
当用户运行这个程序时,它什么也不做。
不过,它向Windows 注册表插入一个值,导致计算机每次启动后都打开指定的Web 页面。
该特洛伊木马的制作者们希望通过Xbox 木马接收到大量对其Web页面的浏览,从而获得广告收入。
不过令他们遗憾的是,反病毒专家们很快就发现了他们的真实企图,并且关闭了相关的网站。
(2)流氓杀毒软件:声称是反病毒软件,欺骗用户安装它。
它通常伪装成一个弹出广告,并模仿成安全警告的外观和感觉。
一旦用户安装了,它就会窃取个人信息或提示用户付款以“更新“流氓杀毒软件。“更新”只是禁用木马!
(3)勒索软件:感染目标计算机,然后用只有恶意软件创建者知道的密钥加密存储在系统上的文档、电子表格和其他文件。
这样将导致用户无法访问他们的文件,并收到一条不祥的弹出消息,如果不在指定时间内支付赎金,文件将被永久删除。
用户只有支付赎金才能重新获得对他们文件的访问。最著名的勒索软件是Crypto locker。
21.1.5 蠕虫
蠕虫,不需要人为干预就可以自己传播。
互联网蠕虫是互联网上发生的首例主要的计算机安全事件。
从那时起,成百上千个蠕虫(有成于上万个变种)开始在互联网上散播它们的破坏力量。
1. CodeRed 蠕虫
2001年夏天,CodeRed 蠕虫在未安装补丁程序的Microsoft Internet Information Server(IIS)Web 服务器之间快速传播,受到了媒体的极大关注。
CodeRed 渗透系统后执行三个任务:
• 随机选择成百上千个IP 地址,探测这些主机运行的IIS版本是否存在漏洞。
有漏洞的系统很快就会被感染。因为每个被感染的主机都会继续寻找更多目标,CodeRed 的破坏范围呈爆炸性增长。
• 破坏本Web 服务器上的HTML 页面,将正常的内容替换为指定的文本(网页篡改)。
• 向系统植入一个逻辑炸弹,这个逻辑炸弹将向198.137.240.91 发起拒绝服务攻击,该地址当时属于白宫主页的Web网站服务器。
反应敏捷的政府Web 网站管理员在实际攻击发生前便改变了白宫的IP地址。
应对方法:
确保连在Internet 上的系统打了最新的安全补丁。
2. 震网病毒(Stuxnet)
在2010年,名为震网的蠕虫在互联网上出现。
高度复杂的蠕虫使用多种高级技术来传播,包括多个以前未披露的漏洞。
震网病毒使用以下传播技术:
• 在本地网络上搜索未受保护的管理共享系统
• 利用零日漏洞攻击Windows服务器上的服务和打印机后台处理程序
• 使用默认的数据库密码连接系统
• 通过U盘进行传播
震网病毒标志着恶意代码世界里的两个主要演变:
使用蠕虫对设施进行严重的物理破坏,以及在国家之间的战争中使用恶意代码。
21.1.6 间谍软件与广告软件
• 间谍软件
会监控你的动作,并向暗中监视你活动的远程系统传送重要细节。
例如,间谍软件可能等待你登入某个银行站点,随后将你的用户名和密码传给间谍软件的作者。
此外,间谍软件也可能等你在某个电子商务站点输入信用卡号,然后将卡号传给在黑市进行贩卖交易的骗子。
• 广告软件
使用多种技术在被感染的计算机上显示广告,最简单的广告软件会在你访问Web时在屏幕上弹出广告。
更恶毒的广告软件则可能监控你的购物行为,并将你重定向至竞争者的Web站点。
21.1.7 零日(Zero-Day)攻击
系统受零日漏洞影响的主要原因有两个:
• 新发现的恶意代码与发布补丁和反病毒更新之间的延迟。这是脆弱性窗口。
• 部分系统管理员没有及时更新
零日漏洞的防御措施应该包括:
强大的补丁管理程序、最新的反病毒软件、配置管理、应用程序控制、内容过滤和其他保护。
当相互结合使用时,这些重叠控制增加了至少一个检测和阻止安装恶意软件的尝试的可能性。
21.2 密码攻击
攻击者用于获取合法用户密码并访问系统的三种方法:密码猜测攻击、字典攻击、社会工程学。
这类攻击多依赖于脆弱的密码存储机制。例如,网站在单个文件中保存MD5的散列。
如果攻击者能操纵Web 服务器软件或操作系统以获取文件的副本,则可使用它来进行攻击。
21.2.1 密码猜测攻击
在这种最基本的密码攻击类型中,攻击者只是试图猜测用户的密码。
无论进行了多少次安全性教育,用户还是经常使用脆弱的密码。
如果攻击者能获得授权系统用户的列表,那么他们常能快速找出正确的用户名(在大多数网络中,用户名包含用户名字的第一个字母,后面紧跟着他们的姓氏)。
利用这些基本信息,攻击者就可以猜测用户的密码。
最常用的弱口令形式:
用户姓氏、名字或用户名,还包括生日、周年纪念日、社会保险号、电话号码和ATMPIN。
例如,为了便于记忆,用户mchapple 可能使用密码elppahcm。遗憾的是,这个密码也很容易被猜到。
如果没有猜出来,那么攻击者会转而使用互联网上最常见密码的列表。”最常见的密码"边栏列出了其中一些密码。
21.2.2 字典攻击
许多Unix 系统在所有系统用户可访问的/etc/shadow 文件中存储用户密码的加密版本(/etc/shadow 只有root 用户才能访问)。
为提供某些安全性级别,这个文件并不包含实际的用户密码;但包含通过单向散列函数获得的散列值。
当用户试图登入系统时,访问验证程序使用相同的散列函数处理用户输入的密码,然后与/etc/shadow 文件中存储的散列值进行比较。如果这两个值匹配,就准许用户访问系统。
密码攻击者使用自动化工具(如John the Ripper)运行自动的字典攻击,字典攻击利用了这种机制的漏洞。
攻击者采用一个包含成千上万词汇的大型字典文件,然后针对这些词汇运行加密函数,以获得加密的等值效果。
接着,John the Ripper 程序在密码文件中查找与加密字典相匹,配的加密值。
查到某个匹配时,John the Ripper 程序会报告用户名和密码(明文形式),攻击者便获得了对系统的访问权限。
下列出破解工具的一些高级特性:
• 重新排列字典词汇的字母
• 为字典词汇附加数字
• 将字典词汇中出现的每个字母0 都替换为数字(或用数字1 替换字母L)
• 采用某些形式组合两个字典词汇
彩虹表攻击,是字典攻击的一种变体,旨在减少对散列密码进行暴力攻击所需的时间。
攻击者采取一个常用密码列表,然后通过与系统使用的相同散列函数来处理这些密码,生成这些密码的散列值,称为彩虹表。
在密码散列的简单实现中,攻击者可简单地搜索包含在彩虹表中的值的散列值列表来确定用户密码。
21.2.3 社会工程学
社会工程学是攻击者获得系统访问权限最有效的工具之一。
通过电话询问用户的密码,就像技术支持人员或其他权威机构声明他们立即需要这些信息一样。
网络钓鱼电子邮件,用假冒的网站欺骗用户输入他们真实的用户名和口令。
网络钓鱼往往针对金融服务类网站,获取用户凭据后可以快速转移他的账户余额。
除了骗取用户密码,网络钓鱼攻击通常还用来让用户安装恶意软件或提供其他敏感的个人信息。
网络钓鱼消息变得越来越复杂,并且被设计成与合法通信非常相似。
例如,图21.1 所示的钓鱼消息发送给数于名接收者,代表其本身是来自社会安全管理局的官方通信。
用户点击链接后就会被重定向到一个捕获他们敏感信息的恶意网站。
钓鱼也有许多变体。其中一些如下:
• 鱼叉式网络钓鱼攻击(Spear phishing)
攻击者专门针对个人进行的研究。他们可能包括个人信息,旨在使消息显得更加真实。
指利用木马程序作为电子邮件的附件,发送到目标电脑上,诱导受害者去打开附件来感染木马。
• 钓鲸攻击(Whaling attack)
是发送给高价值目标的鱼叉式网络钓鱼攻击的一个子集,如高级管理人员。
•语音网络钓鱼攻击(Vishing)
使用语音通信中的仿冒技术,例如电话。
对密码(通常针对网络)的安全性来说,社工的威胁依旧很严重,例如在他人“闲谈“中获得敏感的个人信息。
攻击者有时可以获得敏感的网络拓扑图或配置信息,在计划对组织进行其他类型的攻击时非常有用。
•垃圾搜寻
攻击者通过搜索目标公司的垃圾,寻找敏感信息。
这种技术很容易被碎纸机和擦除电子媒体所击败,但垃圾搜寻者的努力仍可能取得惊人的成功。
21.2.4 对策
所有安全措施的基石都是教育。
安全人员应该经常提醒用户选择安全密码的重要性。
首次加入组织时加以培训。
定期接受最新的培训,即使培训只是来自管理员发送的警示相关威胁的电子邮件。
• 为用户提供建立安全密码所需要的知识
• 告诉他们攻击者在猜测密码时所使用的技术
• 为用户提供一些如何建立强密码的建议
最有效的密码技术之一是使用某种记忆手段,如设想一个容易记忆的句子并利用每个词的首字母建立密码。
例如,将句子MysonRichardlikestoeat4pies变为密码MsRlte4P,这是一个很难破解的密码。
存储密码的工具:
PasswordSafe和LastPass 是两个常见的工具。
这些工具允许用户为他们使用的每个服务创建独特的、强大的密码,而不必死记硬背。
最常见错误,是建立一系列强密码,并将它们分发给用户(随后禁止用户改变分发给他们的密码)。
难于记忆的密码导致用户将密码写在便签上,并将其粘贴在计算机键盘下面。
21.3 应用程序攻击
21.3.1 缓冲区溢出
缓冲区溢出漏洞存在于当开发人员没有正确验证用户的输入,以确保以适当的大小输入时。
输入太大"溢出“原有的缓冲区,覆盖了内存中的其他数据。
例如,如果一个Web表单有一个域与后端的变量关联,该变量仅允许输入10个字符,
但表单的处理器没有验证输入的长度,操作系统可能简单地将数据写入留给该变量的空间,对存储在内存中的其他数据可能造成损害。
在最糟的情况下,该数据可用来覆盖系统代码,允许攻击者利用缓冲区溢出漏洞在服务器上执行任意代码。
只要允许用户输入变量,编程人员就应当采取有效措施,从而满足下列各项条件:
• 用户输入的长度不能超过存放它的缓冲区的大小(例如,将一个具有10 个字母的单词输入到最多容纳5个字母的字符串变量中)。
• 用户不能向保存输入值的变量类型输入无效的值(例如,将一个字符输入到一个数字型变量中)。
• 用户输入的数值不能超出程序规定的参数范围(例如,用”也许”来回答结果只能为“是“或“否”的问题)。
缓冲区溢出:
是软件开发中最古老也最常见的,至今仍是非常流行的问题。
主要原因:由于应用程序中输入检查不正确。
21.3.2 检验时间到使用时间(Time Of Check to Time Of Use, TOCTOU或TOC/TOU)
检验时间到使用时间问题是一个时间型漏洞,当程序检查访问许可权限的时间远早于资源请求的时间时,就可能出现这种问题。
例如,如果操作系统针对用户登录建立了一个综合的访问许可权限列表,并在整个会话期间查询这个列表,就存在TOCTOU漏洞。
如果系统管理员取消了某个特殊权限,这个限制只有在用户下次登录时才会起作用。
如果在用户登录时正好发生取消访问许可权限的操作,那么用户能否访问资源就是不确定的。用户只需要一直保留会话,新的限制就不会起作用。
21.3.3 后门
后门是没有被记录到文档中的命令序列,允许软件开发人员绕过正常的访问控制。
在开发和调试过程中,后门常用于加快工作流程并避免强制程序开发人员不断地对系统进行身份验证。
开发人员在系统上线后仍在系统中留下这些后门,可以在出现意外故障时使用,也可在系统处理他们没有访问权限的敏感数据时进行“偷看"。
除了开发商的后门外,许多恶意代码感染系统后也会创建后门,允许恶意代码的开发者远程访问受感染的系统。
无论怎样,后门不被记录到文档中的性质使其成为系统安全的严重威胁,在后门未被记录到文档中但又被遗忘时更是如此。
如果开发人员离开了公司,他们就可以利用后门访问系统、搜索机密信息或参与破坏活动。
21.3.4 权限提升和rootkit
攻击者一旦在一个系统上站稳脚跟,他们通常会迅速向第二目标迈进——将他们的访问权限从普通账号提升为管理员权限。
权限提升攻击的常见方法之一是使用rootkit 。
rootkit 可从互联网上免费获得,它利用操作系统已知的漏洞。
攻击者经常通过使用密码攻击或社会工程学攻击获得系统的普通账号,然后利用rootkit 将访问权限提高到root级别。
预防方法:
关注厂商针对操作系统发布的最新补丁程序,而且及时更新补丁。
21.4 Web 应用的安全性
21.4.1 跨站脚本
当Web应用程序包含反射式输入类型时,就容易出现跨站脚本(XSS)攻击。
通过使用HTML标记<SCRIPT>与</SCRIPT>, 就可以在Web页面嵌入一些脚本。
跨站脚本攻击防御:
在创建允许用户输入的Web应用程序时,必须执行输入验证。
最基本的做法是:不允许用户在可反射输入字段中输入<SCRIPT>标记。
最佳解决方案应当是:首先确定允许的输入类型,然后通过验证实际输入来确保其与指定的模式相匹配。
例如,如果Web 应用程序具有一个允许用户输入年龄的文本框,那么应当只接受一到三位数字作为输入,其他输入则被视为无效。
21.4.2 跨站请求伪造(简称为XSRF 或CSRF 攻击)
XSS攻击,利用用户在网站上执行用户计算机上的代码的信任。
XSRF攻击,利用远程站点在用户系统中对用户执行命令的信任。
XSRF攻击通过合理地假设用户经常同时登录不同的网站工作。
攻击者在第一个网站上嵌入代码然后发送命令到第二个网站。
当用户点击第一个站点上的链接时,在他或她不知不觉中向第二个站点发送命令。
如果用户恰好登录到第二个站点,则命令可能成功执行。
例如,攻击者想从用户的账户中窃取资金,攻击者可能进入在线论坛并发布一条包含链接的消息。
这个链接实际上是一个直接链接到资金转移网站的链接,它发布一个命令将资金转移到攻击者的账户。
然后攻击者离开论坛上张贴的链接,等待不知情的用户浏览并点击链接。
如果用户恰好登录到银行网站,则转账成功。
CSRF 防御:
创建Web应用程序,在链接中嵌入攻击者不知道的安全令牌。
另一个保障是网站检查从最终用户接收到的请求中的引用URL, 并且只接受源于他们自己站点的请求。
21.4.3 SQL 注入攻击
SQL注入攻击也使用了Web应用程序不期望的输入,用于获得对内部数据库的未授权访问。
1. 动态Web 应用程序
静态web:显示银行位置、营业时间以及服务等信息的静态页面。
动态web:检索到包含个人账户信息的动态内容。
如果Web 应用程序存在缺陷,就可能导致某些使用SQL 注入攻击的用户能够以不期望和未授权的方式篡改数据库。
1. SQL 注入攻击
SQL 注入攻击使恶意攻击者能够违反如图21.2 所示模型的隔离,从而直接完成攻击内部数据库的SQL事务。
在前面的例子中,银行客户可能输入账户,从而有权使用检索当前账户细节的动态Web 应用程序。
Web 应用程序则可能使用下面的SQL 查询形式获取账户信息,这里的<number>是客户在Web 表单中输入的账号:
SELECT*
FROM transactions
WHERE account number='<number>'
注意:只要每条语句都以分号结束,数据库就能同时处理多条SQL 语句。
如果Web 应用程序没有执行适当的输入验证操作,用户完全可能在由Web 服务器执行的语句中插入自己的SQL 代码。
例如,假设用户的账号为145249, 那么可输入下面的语句。'145249'; DELETE* FROM Transactions WHERE 'a';='a'
Web 应用程序随后将这些输入嵌入先前SQL 语句的<number>字段中,从而得到下面这样的语句:
SELECT*
FROM transactions
WHERE account_ number ='145249'; DELETE* FROM transactions WHERE 'a'='a'
调整格式之后的语句如下所示:
SELECT*
FROM transactions
WHERE account_ number ='145249';
DELETE*
FROM transactions
WHERE 'a'='a'
这是一个包含两条语句的有效SQL 事务。
第一条语句从数据库检索被请求的信息;
第二条语句则删除数据库中存储的所有记录。
2. 防御SQL 注入攻击
SQL 注入攻击的防御:
(1)使用准备好的语句。
开发人员应充分利用准备好的语句来限制应用程序执行任意代码的能力。
包括参数化查询和存储过程,将SQL 语句存储在数据库服务器上,由数据库管理员和具有适当访问权限的开发人员修改。
调用已准备语句的Web应用程序可将参数传递给它,但不会更改SQL 语句的底层结构。
(2)执行输入验证。
输入验证能够限制用户在表单中输入的数据类型。
具体到上面的SQL 注入攻击示例,从输入中去除单引号字符就能成功地防御SQL注入攻击。
输入验证的最强和最安全的形式是白名单验证,其中开发人员指定预期输入的确切性质(例如,小于1024 的整数或小于20个字符的字母数字串),并且在提交到数据库之前,验证用户提供的输入与预期的模式是否匹配。
(3)限制用户特权。
Web服务器使用的数据库账户应当只有最小的权限。
如果Web 应用程序只需要检索数据,数据库账户就应当仅具有检索能力。
例如,账户只拥有SELECT 权限,执行DELETE 命令就会失败。
21.5 侦察攻击
执行侦查可让攻击者找到弱点,利用他们的攻击代码直接发起攻击。
三种自动侦察技术:
• IP探测
• 端口扫描
• 漏洞扫描
21.5.1 IP探测(也称为IP扫描或ping扫描)
IP探测通常是针对目标网络实施的一种网络侦察类型。通过这种技术,自动化工具试图ping某个范围内的所有地址。
对ping请求进行响应的系统被攻击者记录下来以便进一步分析。没有响应的地址被认为不能加以利用并被忽略。
防护方法:禁用ping功能,至少应当针对网络外部的用户禁用这个功能。
21.5.2 端口扫描
攻击目标的类型:Web 服务器、文件服务器或其他执行关键操作的服务器是主要目标。
为缩小搜索范围,攻击者会使用端口扫描软件探测网络中所有存活的系统并确定每台计算机上运行的服务。
例如,如果攻击者将Web服务器作为攻击目标,他们就运行端口扫描软件来探测开放80 端口的系统。
防护方法:禁用系统中的不必要服务。
21.5.3 漏洞扫描
比较流行的工具包括:Nessus 、OpenVAS 、Qualys、Core Impact、Nexpose
这些软件包含已知的漏洞库,通过探测目标系统来定位安全缺陷。
防护方法:操作系统打上最新的安全补丁,定期漏洞扫描识别漏洞并修复。
21.6 伪装攻击
为获得对没有访问资格的资源的访问权限,假冒具有适当访问许可权限的人。
攻击者借用合法用户和系统的身份得到第三方的信任。
两种常见的伪装攻击:IP 欺骗和会话劫持
21.6.1 IP 欺骗
在IP 欺骗攻击中,怀有恶意的人重新配置他们的系统,使其具有可信系统的IP 地址,然后试图获得访问其他资源的权限。
在许多没有安装阻止这种通信类型发生的适当过滤器的系统中,你会惊奇地发现IP 欺骗非常有效。
系统管理员应该在每个网络的边界配置过滤程序,从而确保数据包至少符合下列标准:
• 具有内部源IP地址的包不能从外部进入网络。
• 具有外部源IP地址的包不能从内部离开网络。
• 具有私有IP地址的包不能从任何一个方向通过路由器(除非被允许作为内部配置的一部分)。
这三条简单的过滤规则能阻止绝大多数IP 欺骗攻击、并大大提高网络的安全性。
21.6.2 会话劫持
怀有恶意的人中途拦截已授权用户与资源之间通信数据的一部分,然后使用劫持技术接管这个会话并伪装成已授权用户的身份。
下面列出一些常见技术:
• 捕获客户端与服务器之间身份验证的详细信息,并使用这些信息伪装成客户端的身份。
• 欺骗客户端,使其认为攻击者的系统是与之通信的服务器,并在客户端与服务器建立合法连接时作为中间人,然后断开服务器与客户端的连接。
• 使用没有正常关闭连接的用户的cookie 数据访问Web 应用程序。
防护手段:
• 行政管理性控制措施(例如,防重放身份验证技术)
• 应用程序控制措施(如在一段适当的时间内使cookie失效)
21.8 考试要点
理解病毒使用的传播技术。
病毒使用4 种主要的传播技术来渗透系统并传播恶意载荷,这4 种技术是文件程序感染、服务注入、主引导记录感染和宏病毒,从而渗透系统和扩散它们的病毒载体。我们需要理解这些技术以有效地保护网络上的系统免受恶意代码侵犯。
知道反病毒软件如何检测已知病毒。
大多数反病毒软件使用特征型检测算法寻找已知病毒的指示模式。为防止新产生的病毒,定期更新病毒定义文件是必不可少的。
基于行为的检测技术也变得越来越普遍,反病毒软件监视目标系统中的异常活动,或者阻止或标记目标以进行调查,即使软件不匹配已知的恶意软件签名。
解释攻击者使用的破坏密码安全的攻击技术。
密码是目前最常见的访问控制机制,也是必不可少的,所以需要知道如何保护它们,以防止攻击者破坏它们的安全性。
知道如何进行密码破解、字典攻击和社会工程学攻击,诸如钓鱼攻击也可以打败密码的安全性。
熟悉各类应用程序攻击,攻击者使用这些攻击来攻击编写拙劣的软件。应用程序攻击是现代最大的威胁之一。
攻击者还利用后门、rocrrou 漏洞以及rootkit 来获得对系统的非法访问。
安全专家必须对每种攻击和相关控制措施有清晰的理解。
理解常见Web 应用程序的漏洞及对策。
由于许多应用程序转移到Web 上,开发人员和安全专业人员必须了解存在于当今环境中的新攻击类型,以及如何防范它们。
两个最常见的例子是跨站脚本(XSS)攻击和SQL 注入攻击。
知道攻击者准备攻击网络时使用的侦察技术。
在发起攻击前,攻击者用IP 扫描寻找网络中存活的主机。
这些主机随后会遭到端口扫描和漏洞探测,从而使攻击者能够定位目标网络中有可能被攻击的脆弱点。
应该在理解这些攻击后帮助网络抵御这些攻击,限制攻击者可能收集的信息。