计算机科学速成课 Crash Course Computer Science 第三十二集 黑客&攻击 Hacker & Cyber Attacks

计算机科学速成课 Crash Course Computer Science

第三十二集 黑客&攻击 Hacker & Cyber Attacks

社会工程学

黑客入侵最常见的方式不是通过技术,而是欺骗别人,这叫“社会工程学”(social engineering),欺骗别人让人泄密信息,或让别人配置电脑系统,变得易于攻击。

网络钓鱼

最常见的攻击是网络钓鱼(phishing),你可能会进入一个像官网的网站,实际上是个假网站,当你输入用户名和密码时,信息会发给黑客,然后黑客就可以假扮你登陆网站。即使成功率只有1/1000,发一百万封钓鱼邮件,也有一千个账户中招。

假托

另一种方法叫假托(pretexting),攻击者给某个公司打电话,假装是IT部门的人,攻击者的第一通电话一般会叫人转换,这样另一个人接的时候,电话看起来像是内部的,然后让别人把电脑配置得容易入侵,或是让他们泄露机密信息,比如密码或网络配置。

木马

木马(trojan horses)也是常见手段,木马会伪装成无害的东西,比如照片或发票,但实际上是恶意软件。恶意软件有很多种,有的会偷数据比如银行凭证,有的会加密文件,交赎金才解密,也就是“勒索软件”。

如果攻击者无法用木马或电话欺骗,攻击者只能被迫用其他手段,方法之一是暴力尝试,尝试所有可能的密码,直到进入系统,大多数现代系统会加长等待时间,来抵御这种攻击,每次失败就加长等待时间,甚至失败超过一定次数后完全锁住。

NAND镜像

最近出现一种攻破方法叫“NAND镜像”,如果能物理接触到电脑,可以往内存上接几根线复制整个内存,复制之后暴力尝试密码,直到设备让你等待,这时只要把复制的内容覆盖掉内存,本质上重置了内存,就不需要等待,可以继续尝试密码,这项方法在iphone 5C上管用,更新的设备有机制阻止这种攻击。

如果你无法物理接触到设备,就必须远程攻击,比如通过互联网。远程攻击一般需要攻击者利用系统漏洞,来获得某些能力或访问权限,这叫“漏洞利用”(exploit)。

缓冲区溢出

一种常见的漏洞利用叫“缓冲区溢出”(buffer overflow),缓冲区是一种概称,指预留的一块内存空间。假设我们在系统登陆界面要输入用户名和密码,在幕后,系统用缓冲区存输入的值,假设缓冲区大小是10,在缓冲区前后有其他数据,当用户输入用户名和密码时,这些值会复制到缓冲区,然后验证是否正确,缓冲区溢出正如名字所暗示的:它会溢出缓冲区,在这个例子中,超过10个字符的密码会覆盖掉相邻的数据,有时只会让程序或系统崩溃,因为重要值被垃圾数据覆盖了,系统崩溃是坏事。

攻击者可以更巧妙地利用这个漏洞注入有意义的新值到程序的内存中,比如把“is_admin”的值改成true,有了任意修改内存的能力,黑客可以绕过“登录”之类的东西,甚至使用那个程序劫持整个系统。

边界检查

有很多方法阻止缓冲区溢出,最简单的方法是在复制之前先检查长度,这叫“边界检查”。许多现代编程语言自带了边界检查,程序也会随机存放变量在内存中的位置,比如我们之前假设的“is_admin”,这样黑客就不知道应该覆盖内存的哪里,导致更容易让程序崩溃而不是获得访问权限。

程序也可以在缓冲区后留一些不用的空间,然后跟踪里面的值,看是否发生变化,如果发生了变化,说明有攻击者,这些不用的内存空间叫“金丝雀”(canaries)。

代码注入

另一种经典手段叫“代码注入”(code injection),最常用于攻击用数据库的网站,几乎所有大网站都用数据库。假设网页上有登陆提示,当用户点击“登录”时,值会发到服务器,服务器会运行代码,检查用户名是否存在,如果存在,看密码是否匹配,为了做检查,服务器会执行一段叫“SQL查询”的代码,首先语句要指定从数据库里查什么数据,还要指定从哪张表查数据,最后,服务器不想每次取出一个巨大密码列表,包含所有用户密码,所以用 username = ‘用户名’ 代表只要这个用户,用户输的值会复制到“SQL查询”,还要注意,SQL命令以分号结尾。

破解这个的做法是把“SQL命令”输入到用户名里,当服务器把值复制到SQL查询中,比如我们注入了命令“drop table users”将会删掉 users 这张表,这会造成很多麻烦。

在很多网站,用户名和密码表单不让你输入特殊符号,比如分号或者括号,作为第一道防御。好的服务器也会清理输入(sanitize),比如修改或删除特殊字符,然后才放到数据库查询语句里。

危害

管用的漏洞利用(exploits)一般会在网上贩卖或分享,如果漏洞很大则可能造成很大的危害。当软件制造者不知道软件有新漏洞被发现了,那么这个漏洞叫“零日漏洞”(zero day vulnerability),所以保持系统更新非常重要,很多更新都是安全性补丁,如果有足够多的电脑有漏洞,让恶意程序可以在电脑间互相传播,那么叫“蠕虫”(worms)。

如果黑客拿下大量电脑,这些电脑可以组成“僵尸网络”(botnet),可以用于很多目的,比如发大量垃圾邮件,用别人电脑的计算能力和电费挖bitcoin,或者发起“拒绝服务攻击”(Distributed Denial of Service——DDoS)攻击服务器,DDoS就是僵尸网络里的所有电脑发一大堆垃圾信息,堵塞服务器,要么迫使别人交钱消灾,或纯粹为了作恶。

发布了36 篇原创文章 · 获赞 5 · 访问量 5230

猜你喜欢

转载自blog.csdn.net/qq_43413123/article/details/104771093