(六)工业领域网络攻击分析
传统IT系统中安全的三要素由高到低排列分别是保密性(Confidentiality,C)、完整性(Integrity,I)、可用性(Availability,A)。
① 保密性:是指保证信息不被非授权访问,即使非授权用户得到信息,也无法知晓信息内容,因而不能非法使用。保密性通常通过访问控制阻止非授权用户获得机密信息,通过加密变换阻止非授权用户获知信息内容。
② 完整性:是指维护信息的一致性,即信息在生成、传输、存储和使用过程中不应该发生人为或非人为的非授权篡改。信息的完整性包括两个方面:一是数据完整性,主要指数据没有被(未授权)篡改或损坏;二是系统完整性,主要指系统未被非法操纵,按既定的目标运行。
③ 可用性:是指保障信息资源随时可提供服务的能力特性,即授权用户可根据需要随时访问所需信息。可用性是信息资源服务功能和性能可靠性的度量,涵盖物理、网络、系统、数据、应用和用户等多方面的因素,是对信息网络总体可靠性的要求。其中,可用性也称有效性,指信息资源可被授权实体按要求访问、正常使用或在非正常情况下能恢复使用的特性。其保证系统在运行时能正确存取所需信息,当系统遭受意外攻击或破坏时,可以迅速恢复并能投入使用。在工业领域,生产连续性一般是指不接受中断,若需要中断,则必须提前规划,不允许生产系统随意重新启动。
企业开展工业信息安全防护的最终目标是免受网络攻击或减少网络攻击造成的损失,保障企业业务运营的连续性;对于行业和国家,做好工业信息安全工作则事关经济良好运行、国家安全和社会稳定。如前所述,从传统信息安全的角度出发,开展信息安全工作的目标就是保证信息资产的“CIA”三元组:保密性、完整性、可用性。但对于工业控制系统而言,系统可用性至关重要,应用于工业领域时,特别是生产环节,则需要调整为“AIC”(如图1-16所示),即工业领域更关注可用性,其次是完整性,最后才是保密性。
图1-16 工业信息安全“AIC”示意
完整性是指信息在传输、交换、存储和处理过程中,保持信息不被破坏或修改、不丢失和信息未经授权不能改变的特性。同样,从生产的角度看,完整性也是十分重要的,直接影响产品的“良品率”。随着工业领域数字化转型的深入,工业领域管理、运维、市场等数据的保密性也正在成为工业信息安全关注的焦点。保密性是指不将有用信息泄露给非授权用户的特性,可以通过信息加密、身份认证、访问控制、安全通信协议等技术实现。
随着安全形势的不断演变和安全需求的发展,在“AIC”基本特性的基础上,强调保证数据安全、共享安全,数据权属等的可控性、不可否认性、可审计性、可鉴别性等特性也逐步被单独地研究和应用。
1.常见的网络攻击类型
(1)中间人攻击
中间人攻击是“间接”的入侵攻击方式。所谓“中间人”,是指通过各种技术手段将受攻击者控制的一台计算机虚拟放置在网络连接中的两台通信计算机之间(如图1-17所示),这台受攻击者控制的计算机就被称为“中间人”。攻击者控制的计算机与通信的两端分别创建独立的联系。对下,篡改上位机的控制指令,使PLC脱离管理员的控制,破坏生产;对上,显示系统正常运行,延迟管理员发现安全威胁的时间,从而造成更大的破坏。中间人攻击可以概括为一种“欺上瞒下”的攻击手段。
图1-17 中间人攻击原理
中间人攻击的步骤可以简要概括为以下4步。第一步,获取PLC、上位机的设备型号、IP地址、常用端口号等信息,这是建立连接的必要前提。第二步,进行ARP地址欺骗,建立连接,捕获流量数据。第三步,对捕获的流量数据进行分析,查找用于控制的功能码或其他关键参数,并进行篡改。第四步,发动攻击,发送篡改或原来的数据包导致系统运行异常。
(2)模糊测试(Fuzz Testing)攻击
工业控制系统的模糊测试原本是一种测试方法,指自动化生成可用于输入被测试工业控制系统或设备的测试数据,进而检验工业控制系统或设备的安全性。而模糊测试攻击则利用相同的手段达到破坏系统运行的目的。模糊测试攻击的原理如图 1-18所示。
图1-18 模糊测试攻击原理
(3)口令爆破攻击
口令爆破攻击基于身份验证漏洞。身份验证是网络互联条件下授予指定用户控制权限前,证明网络或系统上用户身份的过程。若用户身份验证系统存在使用简易密码等漏洞,则很容易被非授权用户猜解,或攻击者从其他渠道获取了某系统存储的大量的用户密码对,由于用户常常在不同的系统中使用相同的身份验证信息,因此攻击者可发动撞库攻击,爆破登录口令。这两种方式都可能导致攻击者打穿或绕过身份验证过程,非法获取系统控制权限。因此,若使用者的密码设置简单或在多个系统中使用相同的密码,则可成为攻击者的攻击切入点。
(4)勒索软件攻击
勒索软件(Ransomware)是一种流行的木马病毒,通过骚扰、恐吓甚至采用绑架用户文件等方式,使用户数据资产或计算资源无法正常使用,并以此为条件向用户勒索钱财。用户数据资产包括文档、邮件、数据库、源代码、图片、压缩文件等多种文件。赎金形式包括真实货币、等价的比特币或其他虚拟货币。
当前勒索软件攻击肆虐,甚至已形成了“三重勒索”的攻击模式。据国家工业信息安全发展研究中心统计,2020年工业领域的勒索软件攻击事件共33起,远超2016—2019年的事件数量总和;近些年针对工业实体的勒索软件攻击暴增500%以上,其中,制造业是发生勒索软件攻击事件最多的行业,攻击数量占比高达36%。
2.常见的网络攻击过程
攻击者在掌握对应漏洞的条件下可以发起上述攻击,但在实际过程中,攻击者会先实施攻击目标确认、位置隐藏、威胁信息收集、漏洞扫描、漏洞利用等步骤,为发动攻击打好基础,便于其后续实施恶意操作并放大破坏效果。
(1)攻击目标确认
攻击者在发起攻击前,需要先明确攻击的目标。攻击的目标主要由中断、拒绝和操纵组成。
① 中断:包括画面中断和控制中断。
② 拒绝:包括拒绝接收画面、拒绝接收控制指令、拒绝接收功能安全指令。
③ 操纵:包括画面操纵、控制操纵、传感器与仪器仪表操纵、功能安全操纵。
(2)位置隐藏
发起攻击前,攻击者通常会使用如下技术隐藏真实的IP地址,从而规避法律惩罚。
● 利用被侵入的主机作为跳板。
● 在安装Windows的计算机内利用WinGate软件作为跳板。
● 利用配置不当的Proxy作为跳板。
● 更老练的黑客会使用电话转接技术隐蔽自己。常用的手法包括:利用800号电话的私人转接服务连接因特网服务提供商(Internet Service Provider,ISP),然后盗用他人的账号上网;通过电话连接一台主机,再经由主机连接互联网。
(3)威胁信息收集
在信息收集阶段,攻击者会从技术上制定渗透计划,使攻击行动更具可行性。信息收集的方式主要分为3种。
① 被动收集信息:通过第三方渠道收集信息,完全不与被攻击对象产生交互,这种信息收集方式安全,但信息不一定完全准确。
② 半主动收集信息:和被攻击对象交互,但流量是正常的访问流量,比如正常使用浏览器打开被攻击对象的网页,这种正常的用户行为是很难被提前甄别的。
③ 主动收集信息:直接和被攻击对象交互,如端口扫描、子域名穷举等,这种行为通常会被入侵检测系统(Intrusion Detection System,IDS)和防火墙拦截,所以在主动收集信息时最好不要触发任何报警机制。
通过应用Nmap、Shodan、Burp Suite、sqlmap等收集的信息一般包括如下内容。
● 通过DNS和IP地址收集目标网络信息。
● Google Hacking查询子域名、子目录、敏感文件、通信信息、注入点。
● 子域名获取。
● 收集目录结构。
● 端口、服务、指纹识别。
● 安全漏洞信息等。
(4)漏洞扫描
漏洞是指系统存在的弱点或缺陷,系统对特定威胁攻击或危险事件的敏感性,或进行攻击的威胁作用的可能性。漏洞可能来自应用软件或操作系统设计时的缺陷或编码时产生的错误,也可能来自业务在交互处理过程中的设计缺陷或逻辑流程上的不合理之处。
漏洞扫描与漏洞挖掘是两个概念,漏洞挖掘一般是指通过模糊测试的方法,构造一系列无规则的“坏”数据“插入”工业控制设备,观察其运行状态,以发现潜在的故障。如果故障可被重复利用并能导致控制设备的宕机、DoS等异常现象,则推断这是一个漏洞,也就是我们常常闻之色变的“零日”漏洞。
但在工业控制系统中,漏洞挖掘会给正在运行的生产过程带来威胁,因此一般采用漏洞扫描的方式。漏洞扫描能够把已经公开的漏洞通过漏洞库信息匹配等已知、确定的方法展现出来。
(5)漏洞利用
这里以经典的、广泛存在的SQL漏洞利用为例进行介绍。SQL注入是指Web应用程序对用户输入数据的合法性没有进行判断或过滤不严,攻击者可以在Web应用程序中事先定义好的查询语句的结尾添加额外的SQL语句,在管理员不知情的情况下实现非法操作,以此欺骗数据库服务器执行非授权的任意查询,从而进一步得到相应的数据信息。SQL注入原理如图1-19所示。
图1-19 SQL注入原理
sqlmap是一款开源的渗透测试工具,可用于自动化的检测,利用SQL注入漏洞获取数据库服务器的权限。它具有功能强大的检测引擎,可提供针对各种不同类型数据库的渗透测试的功能选项,包括获取数据库中存储的数据、访问操作系统文件,甚至可以通过外带数据连接的方式执行操作系统的命令。其目前支持的常见的数据库有MySQL、Oracle、PostgreSQL、Microsoft SQL Server、Microsoft Access等。常用的爆破命令如图1-20所示。
图1-20 常用的爆破命令
sqlmap -u "url"结果如图1-21所示,可以看到,数据库管理系统的类型为Microsoft Access。sqlmap -u "url" --tables获取数据库中的表,如图1-22所示。sqlmap -u "url" -T表名 --columns 获取数据库某个表中的字段,如图1-23所示。sqlmap -u "url" -T 表名 -C字段名 --dump 获取表中字段具体的值,如图1-24所示。
图1-21 获取数据库管理系统类型
图1-22 获取数据库中的表
图1-23 获取admin表中的字段
图1-24 获取admin表中字段具体的值
防范SQL注入攻击通常可以采取以下5种措施。
① 定制黑、白名单:将对数据库的常用请求定制为白名单,一些攻击频繁的攻击限制其为黑名单。
② 限制查询长度和类型:由于SQL注入过程中需要构造较长的SQL语句,可对不常用的查询类型进行限制。
③ 数据库用户的权限配置:根据程序要求为特定的表设置特定的权限,降低普通用户的权限,使得攻击者即便获取了此账号信息,也无法进行破坏性操作。
④ 限制目录权限:管理员在互联网信息服务中为每个网站设置好执行权限,Web目录应至少遵循“可写目录不可执行,可执行目录不可写”的原则,在此基础上,对各目录进行必要的权限细化。
⑤ 输入过滤:在网页代码中对用户输入的数据进行严格过滤,如危险字符过滤或语句过滤。