本节书摘来自华章计算机《威胁建模:设计和交付更安全的软件》一书中的第3章,第3.2节,作者:[美] 亚当·斯塔克 更多章节内容可以访问云栖社区“华章计算机”公众号查看。
3.2 假冒威胁
假冒威胁就是假装自己是别的人或实体。表3-1列举了假装称自己是Acme.com、winsock.dll、奥巴马、警察、尼日利亚反欺诈集团等示例,每个都是代表假冒威胁的一个子范畴。例如第一个示例,假装称自己是Acme.com(或者Google.com等)是在网络上伪装一个实体的身份。没有一个第三方权威调停机构负责告诉你,Acme.com就是我写的这些字母所表示的网址。这与第二个示例不同,Windows操作系统中含有一个winsock.dll,操作系统扮演第三方权威调停机构的角色让你找到winsock。如果你有自己的动态链接库(DLL),那么你得保证只有通过恰当的路径(%installdir%dll)才能访问它们;否则,一些人就会在你的工作目录中放一个文件代替这个动态链接库,并用你的代码去做他们想要做的事(UNIX和LD_PATH存在类似问题)。第三个示例,假冒奥巴马,是指假装成某个特定的人。与之对比的是第四个示例,假装自己是美国总统或尼日利亚反欺诈集团。在上述这些情况中,攻击者都是要假装成某个角色。这些假冒威胁具体在表3-2中列出。
https://yqfile.alicdn.com/64b02db773dc759f8d8f30038ee7a292610bcdb4.png" >
3.2.1 在同一台机器上假冒一个进程或文件
如果攻击者在某个进程实际运行之前就创建了文件,而当你的代码也需要创建新文件,攻击者就可能提供你的代码处理的数据,被认为是你的代码(初始化进程或线程)写下的数据,从而使得数据被信任。类似地,如果管道、本地过程调用等的文件权限没有被很好地管理,攻击者会接管那个端点,欺骗随后该端点所有的进程等。
在远程机器上假冒进程或文件的方法有两种:一种是在目标机器(可能已经获得了管理员的权限)上创建假冒的文件或过程;一种是假装自己就是目标机器,这在后面将介绍。
3.2.2 假冒一台机器
攻击者可在不同层的网络协议栈中假冒远程机器。这些假冒攻击会影响你的客户端、服务器端或对等端的代码运行环境。攻击者在本地可以发起假冒ARP请求,也能够发起假冒IP数据包,也可以发起假冒DNS数据包。DNS欺骗可能会发生在你DNS正向和反向查询的时候。攻击者可以对你的正向DNS查询请求假冒一个回复,这正是攻击者所希望的操作。攻击者还可以修改所控制机器的DNS记录,当你反向查询(把IP转化成完全限定域名FQDN)时,他们的DNS服务器会返回一个不是他们所控制的域名——例如,宣称update.microsoft.com的地址是10.1.2.3。当然,攻击者一旦成功假冒了一台机器,就可能在那台机器上假冒或充当中间人。这种威胁也会进一步变种为偷取机器的密码值等身份认证信息,并滥用这些信息作为假冒攻击的一部分。
攻击者还可从更高层面上进行欺骗。例如,钓鱼攻击(phishing attack)包括很多假冒行为。通常假冒“你的”银行的邮件或该银行的网站。当有人点击查看了该邮件,点击链接和访问该银行,输入他们的身份认证信息,这些信息将被发送到假冒的网站。最后,攻击者只需登入你的银行账号,将你的钱转到他们自己或同伙的账户上。(可能是一个攻击者,也可能是一伙攻击者,并约定各人所负责完成的任务。)
3.2.3 人员假冒
人员假冒主要包括进入某人的账户和使用别人的账户进行伪装。网络钓鱼是进入别人账户的常用方法。然而,目前还没有什么手段能够阻止别人设立假冒的账户。例如,攻击者可以在LinkedIn、Twitter或Facebook上设立账户,可以假装是你或是本书作者Adam Shostack,或是某个想要把钱移到国外的富有且被废黜的王子等。