七.恶意代码及防范技术与漏洞挖掘技术

7.1 恶意代码的概念

7.1.1常见名词举例

计算机病毒

是一种计算机程序代码,它递归地复制自己或其演化体。病毒感染宿主文件或者某个系统区域,或者仅仅是修改这些对象的引用,来获得控制权并不断地繁殖来产生新的病毒体

蠕虫病毒

主要在网络上进行复制

逻辑炸弹

通常是合法的应用程序,在编程时写入一些“恶意功能”

特洛伊木马:

隐藏在一个合法的躯壳下的恶意代码

漏洞利用

漏洞利用代码(exploit code)针对某一特定 漏洞或一组漏洞

下载器

通过破坏杀毒软件,然后再从指定的地址下载大量其他病毒、木马进入用户电脑

玩笑程序

7.1.2恶意代码的危害

  • 破坏数据
  • 占用磁盘存储空间
  • 抢占系统资源
  • 影响计算机运行速度

7.1.3恶意代码的命名规则

1
<病毒前缀>.<病毒名>.<病毒后缀> 

病毒前缀是指一个病毒的种类

病毒名是指一个病毒的家族特征,是用来区别和标识病毒家族的

病毒后缀是指一个病毒的变种特征,是用来区别具体某个家族病毒的某个变种的

7.2 恶意代码的生存原理

7.2.1恶意代码的生命周期

•设计期:用编程语言制造一个恶意代码

•传播期:通过不同的途径散布和侵入受害系统中

•感染期:找到自己依附或隐藏的宿主,并实施依附或隐藏

•触发期:满足触发条件时,恶意代码进入运行期

•运行期:恶意代码的恶意目的得以展现

•消亡期:恶意代码被检测出来,并应用相应的手段进行处理

7.2.2恶意代码的传播机制

  • 恶意代码传播主要是通过复制文件、传送文件、运行程序等方式进行。

  • 主要传播机制

​ 互联网

​ 局域网

​ 移动存储设备

​ 无线设备和点对点通信系统

7.2.3恶意代码的感染机制

感染执行文件

主要感染.exe 和 .dll 等可执行文件和动态连接库文件

根据恶意代码感染文件的方式不同,可以分为外壳型恶意代码、嵌入型恶意代码、源代码型恶意代码、覆盖型恶意代码和填充型恶意代码等

感染引导区

如果恶意代码感染了引导区,开机后,它被读入内存时,杀毒软件还没有读入内存,恶意代码就获得了系统控制权,改写操作系统文件,隐藏自己

感染结构化文档

宏病毒是一种寄存在文档或模板的宏中的恶意代码。一旦打开这样的文档,其中的宏就会被执行,于是宏病毒就会被激活,转移到计算机上,并驻留在Normal模板上。从此以后,所有自动保存的文档都会“感染”上这种宏病毒,而且如果其他用户打开了感染病毒的文档,宏病毒又会转移到他的计算机上

7.2.4恶意代码的触发机制

  • 恶意代码在传染和发作之前,往往要判断某些特定条件是否满足,满足则传染或发作,否则不传染或不发作或只传染不发作

  • 日期触发

  • 时间触发

  • 键盘触发

  • 感染触发

  • 启动触发

  • 访问磁盘次数触发

  • 调用中断功能触发

  • CPU型号/主板型号触发

    被恶意代码使用的触发条件是多种多样的,而且往往不只是使用上面所述的某一个条件,而是使用由多个条件组合起来的触发条件

7.3 恶意代码的分析与检测技术

7.3.1恶意代码的分析方法

静态分析法:

在不执行恶意代码的情况下进行分析。

可以分为源代码分析、反汇编分析、二进制统计分析三种情况

动态分析法:

通过检测恶意代码执行的过程,分析执行过程中的操作。

在实际应用中,一般将恶意代码分析方法分成三类:

基于代码特征的分析方法

  • 首先,获取一个病毒程序的长度,根据长度可以将文件分为几份
  • 然后,每份中选取通常为16或32个字节长的特征串
  • 最后,将选取出来的几段特征码及它们的偏移量存入病毒库,标示出病毒的名称

基于代码语义的分析方法

  • 通过各种渠道收集到最新的未知恶意代码样本时,进行文件格式分析
  • 对样本文件的属性进行查看分析
  • 对样本的行为进行分析,分析它的本地感染行为,以及网络传播行为
  • 通过静态反汇编工具(IDA等)对的恶意代码程序的PE文件进行反汇编
  • 通过动态调试对恶意代码加载调试,进一步分析代码的操作

基于代码行为的分析方法

基于以下理论展开:软件行为= API + 参数

about软件行为:

六大类常见软件恶意行为

  • 修改注册表启动项
  • 修改关键文件
  • 控制进程
  • 访问网络资源
  • 修改系统服务
  • 控制窗口

7.3.2 恶意代码的检测方法

  • 基于特征码的检测法

  • 启发式检测法

​ (通过对某种恶意代码调用内核函数的名称和次数进行分析,建立恶意代码内核函数调用集合,比较待查程序调用的内核函数和数据库中已知恶意代码的内核函数调用集合的贴近度)

  • 基于行为的检测法

  • 完整性验证法

  • 基于特征函数的检测方法(发现调用危险的特殊函数)

7.4 恶意代码的清除与预防技术

7.4.1恶意代码的清除技术

  • 选择适当的封锁策略

​ 鉴别和隔离被感染主机

​ 阻塞发送出的访问

​ 关闭邮件服务器

​ 断开局域网与因特网的连接

  • 感染来源线索的收集和处理

  • 杀除与恢复

7.4.2恶意代码的预防技术

  • 使用反病毒软件
  • 阻塞可疑文件
  • 限制使用不必要的具有传输能力的文件
  • 安全处理邮件附件
  • 避免开放网络共享
  • 使用Web浏览器的安全机制限制移动代码
  • 设置邮件客户端

7.5 漏洞的基本概念

漏洞( Vulnerability),是指计算机系统安全方面的缺陷,使得系统或其应用数据的保密性、完整性、可用性、访问控制等面临威胁。

许多安全漏洞是程序错误导致的,此时可叫做安全缺陷(Security bug),但并不是所有的安全隐患都是程序安全缺陷导致的。

POC (Proof of concept)是对某些想法的一个较短而不完整的实现,以证明其可行性,示范其原理,其目的是为了验证一些概念或理论。概念验证通常被认为是一个有里程碑意义的实现的原型 。

在计算机安全术语中,概念验证经常被用来作为0day、exploit的别名。(通常指并没有充分利用这个漏洞的exploit)

漏洞利用 (Exploit,简称为EXP)是计算机安全术语,指的是利用程序中的某些漏洞,来得到计算机的控制权(使自己编写的代码越过具有漏洞的程序的限制,从而获得运行权限)。在英语中,表示为了利用漏洞而编写的攻击程序,即漏洞利用程序。

零日漏洞 (zero-day vulnerability、0-day vulnerability)通常是指还没有补丁的安全漏洞,而零日攻击(zero-day exploit、zero-day attack)则是指利用这种漏洞进行的攻击。提供该漏洞细节或者利用程序的人通常是该漏洞的发现者。

7.6 漏洞挖掘技术的定义及分类

漏洞挖掘 是指查找目标系统中可能存在的漏洞,在这个过程中,需要运用多种计算机技术和工具。

根据挖掘对象的不同,漏洞挖掘一般可以分为两大类,即基于源代码的漏洞挖掘基于目标代码的漏洞挖掘。

对于基于源代码的漏洞挖掘来说,首先要获取系统或软件的源代码程序,采取静态分析动态调试的方式查找其中可能存在的安全隐患。但大多数商业软件的源代码很难获得,一般只有一些开源系统能为挖掘者提供源码,如LINUX系统,所以目前基于源代码的挖掘一般都是LINUX系统及其开源软件。对于不能提供源码的系统或软件而言,只能采用基于目标代码的漏洞挖掘方法,该方法一般涉及程序编译器、计算机硬件指令系统、可执行文件格式等方面的分析技术,实现难度较大

WEB漏洞 通常是指网站程序上的漏洞,可能是由于代码编写者在编写代码时考虑不周全等原因而造成的漏洞,常见的WEB漏洞有Sql注入、Xss漏洞、上传漏洞等。

XSS (Cross-Site Scripting),跨站脚本,因为缩写和 CSS重叠,所以只能叫 XSS。跨站脚本是指通过存在安全漏洞的Web网站,在用户的浏览器内运行非法的HTMLJavaScript进行的一种攻击。

SQL注入 就是指Web应用程序对用户输入数据的合法性没有判断,前端传入后端的参数是攻击者可控的,并且参数代入数据库查询,攻击者可以通过在不同的SQL语句来实现对数据库的任意操作。

CSRF(Cross-Site Request Forgery)中文意思为跨站请求伪造,通常缩写为CSRF或者XSRF,是一种对网站的恶意利用。CSRF通过伪装成受信任用户请求受信任的网站。CSRF难以防范,危险性比XSS更高。

SSRF(Cross-Site Request Forgery)中文为服务器端请求伪造,是一种由攻击者构造请求,由服务端发起请求的安全漏洞。一般情况下,SSRF攻击的目标是外网无法访问的内部系统。

文件上传漏洞 是在上传文件时,如果服务器代码未对客户端上传的文件进行严格的验证和过滤,很容易造成可以上传任意文件的情况,包括上传脚本文件(asp、aspx、php、jsp等格式的文件)。非法用户可以利用上传的恶意脚本文件控制整个网站,甚至控制服务器。这个恶意的脚本文件,又被成为WebShell,也可将WebShell脚本称为一种网页后门,WebShell脚本具有非常强大的功能,比如查看服务器目录、服务器中的文件,执行系统命令等。

命令执行 应用程序有时需要调用一些执行系统命令的函数,如在PHP中,使用system、exec、shell_exec、passthru、popen、proc_popen等函数可以执行系统命令。当黑客能控制这些函数中的参数时,就可以将恶意的系统命令拼接到正常命令中,从而造成命令执行攻击,这就是命令执行漏洞。

逻辑漏洞 就是指攻击者利用业务的设计缺陷,获取敏感信息或破坏业务的完整性。一般出现在密码修改、越权访问、密码找回、交易支付金额等功能处。其中越权访问又分为水平越权和垂直越权。

7.7 漏洞挖掘技术的一般流程

阅读规则确定测试范围

信息搜集-子域名收集

工具:DNS枚举:一台服务器、一个工具

​ DNSenum是一款非常强大的域名信息收集工具。它能够通过谷歌或者字典文件猜测可能存在的域名,并对一个网段进行反向查询。它不仅可以查询网站的主机地址信息、域名服务器、邮件交换记录,还可以在域名服务器上执行axfr请求,然后通过谷歌脚本得到扩展域名信息,提取出域名并查询,最后计算C类地址并执行whois查询,执行反向查询,把地址段写入文件。

在Kali Linux安全渗透教程新手版中讲解过该工具的基本使用。这里讲解一下该工具的字典破解子域名功能。

首先使用-f选项指定一个常见子域名字典文件;然后使用-u选项,设置字典文件更新方式。当设置a,则将本次执行过程中,从其他图形获取的子域名添加到该文件中。这样,就相当于维护了字典文件。

​ 坑: 1.泛解析 2.不够全面

子域名收集–泛解析问题

信息搜集-C段资产收集

信息搜集–移动端资产收集

信息搜集–同备案号资产收集

7.8 漏洞挖掘技术的常用方法和工具

黑盒测试指把被测试目标看做一个黑盒子,对于内部结构、运作情况是不可见的。模拟黑客的攻击行为,找出目标点存在的漏洞

在黑盒漏洞挖掘中,必须要做的事就是对目标资产的收集,收集的资产越多,越容易挖出漏洞

白盒审计是已知源代码,根据源代码审计漏洞

审计方法简介

1.定位敏感关键字,回溯参数传递过程

2.定位敏感功能点,通读功能点代码(系统重装、文件上传、文件功能管理、登录认证、密码找回、订单支付)

3.通读全文

方法1 优势在于能快速审计,代码量小,容易找到漏洞点,但是也容易忽略很多漏洞,如逻辑漏洞无法这样审计得到

方法2 优势在于代码量比通读全文小,能审计出逻辑漏洞

方法3 不会出现忽略漏洞的情况,但是代码量大,耗费时间长

信息收集

(列出信息收集需要收集的点)

1.查询网站whois信息,从whois和网站中获取注册者的电话、姓名、邮箱等信息方便后期社工钓鱼生成专属密码字典等
2.shadon、fofa等网络资产搜索引擎,天眼查网站的相关产权获得一些资产、github敏感信息泄露、各种网盘搜索引擎、微信公众号、服务号、小程序、app等
3.查看网站旁站和子域名(主站一般防护都挺严),网站都查询一下网站指纹是否存在通用CMS漏洞
4.查看服务器操作系统版本,Web中间件,网站语言等等,看看有没有可以利用的Web中间件漏洞
5.网站目录扫描,看看有没有敏感信息和接口泄露,如网站管理后台、网站源码备份、git泄露、phpinfo等
6.用JSFinder从网站JS里面提取信息,看有没有敏感接口和链接,顺便在收集一下子域名看有没有之前漏掉的
7.使用全球ping查看网站是否存在cdn(CDN是指内容分发网络)
8.端口扫描,查看有无可利用端口,如ftp、ssh的弱口令,rsync、Redis、docker等的未授权访问等

(rsync是linux系统下的数据镜像备份工具)

关于扫描

whois

它能查询到域名注册者的信息

Dirbuster&御剑

这两款工具都是网站目录扫描工具,可以扫描敏感信息及接口

Google hacking

可以用来指定搜索语法搜索自己想要的内容,如网站后台搜索,子域名搜集,具体事物的信息收集

whatweb

可以用来获取目标网站web容器,操作系统,ip地址,是否有某cms指纹等等信息

JSFinder

可以用来从网站js里面提取敏感接口和子域名

nmap

可以用来进行端口扫描以及探测存活主机

awvs

用来进行漏洞扫描

xray

可以直接用来进行漏洞扫描

关于审计

phpstorm

既然要审计代码,那么要有一款好的ide,如phpstrom、vscode等,结合Xdebug方便跟踪调试代码

rips

rips能够自动审计,给出一些可能存在漏洞的地方以及漏洞类型,然后人为去验证判断,能减少很多审计时间

Seay源代码审计系统

类似于rips也是一款自动审计工具

八.隐私威胁与保护

隐私保护技术

隐私保护技术是指一系列用于保护用户隐私信息安全的技术手段,主要包括加密技术、身份识别技术、数据去标识化技术等。隐私保护技术的发展在一定程度上可以保护个人隐私信息免受不法侵害,起到保障用户权益和数据安全的作用。

具体来说,隐私保护技术发展的作用包括:

数据加密保护:通过加密技术,对数据进行加密后再传输,可以有效防止数据在传输过程中被窃取或篡改。

匿名化处理:通过数据去标识化技术,将用户的个人信息和身份与特定的行为或数据解耦,从而保护用户的个人隐私。

身份验证技术:使用生物特征识别、二次验证等技术确保用户的身份安全,防止非法用户冒充他人身份。

隐私政策和控制:通过隐私政策和隐私控制工具,用户可以了解数据收集和使用情况,并自主选择是否分享个人信息。

安全存储和访问控制:通过访问控制和安全存储技术,确保个人敏感信息只能被授权人员访问,避免数据泄露。

隐私保护技术涉及的密码技术内容主要包括同态加密、环签名技术、安全多方计算和零知识证明等。

密码知识

  1. 在区块链中应用

​ 同态加密首先运用在云计算和大数据中。对于区块链技术,同态加密也是很好的互补。使用同态加密技术,运行在区块链上的智能合约可以处理密文,而无法获知真实数据,极大地提高了隐私安全性。

​ 对于区块链网络用户来说,希望提交到区块链网络中的数据安全性能得以保证,尤其是重要敏感数据的安全性,应避免恶意的信息泄露和篡改。同态加密技术能够使用户的密文数据在区块链智能合约中密文运算,而非传统的明文运算。这样的优点是,用户将交易数据提交到区块链网络之前,可使用相应的加密算法对交易数据进行加密,数据以密文的形式存在,即使被攻击者获取,也不会泄露用户的任何隐私信息,同时密文运算结果与明文运算结果一致。

  1. 同态加密在区块链中的具有如下应用:

    数据隐私保护:在区块链中,大量的交易和数据需要被记录和验证,而同态加密技术可以确保这些数据在被存储和共享时保持加密状态,仅有授权用户才能访问和运算。

    智能合约安全性:智能合约是区块链中一种自动执行合约的机制,同态加密可以用于保护智能合约中的敏感数据,确保合约的安全性和隐私性。

    隐私保护的数据共享:区块链上的数据共享有时需要保护数据的隐私性,而同态加密可以使多方在密文状态下共享和处理数据,以保护数据隐私。

    安全数据分析:利用同态加密技术,区块链可以实现对加密数据集合进行计算分析,避免泄露隐私信息的同时仍然可以获得有用的数据分析结果。

零知识证明

指的是证明者能够在不向验证者提供任何有用的信息的情况下,使验证者相信某个论断是正确的。零知识证明实质上是一种涉及两方或更多方的协议,即两方或更多方完成一项任务所需采取的一系列步骤。证明者向验证者证明并使其相信自己知道或拥有某一消息,但证明过程不能向验证者泄漏任何关于被证明消息的信息。

零知识证明:零知识,即在证明的过程中不透露任何内情。通俗的来讲,就是既证明了自己想证明的事情,同时透露给验证者的信息为“零”。

证明举例

(1)用户在系统注册时,系统不会保存用户的密码明文,而是保存了密码的哈希值;用户在登录系统时,只需要输入注册时的密码,系统会根据用户输入密码产生的哈希值与系统数据库保存的哈希值进行比对。如果一致,则系统认为——当前登录用户知道该账号的密码。

这样,用户不需要告诉网站密码,就能证明自己的身份。这其实就是一种零知识证明。

(2)B确定该房间内有某一物体,A用自己拥有的钥匙打开该房间的门,然后把物体拿出来出示给B,从而证明自己确实拥有该房间的钥匙。在整个证明的过程中,B始终不能看到钥匙的样子,从而避免了钥匙的泄露。

(3)A要去公司实习,公司要求A在校所有功课没有挂科,才有资格加入公司。A虽然所有功课都没有挂科,但都在61、62左右徘徊;A不想让公司看到自己的成绩单,于是A委托学校开了一个证明:证明A在校所有功课全部及格。并交到了公司,加入了公司。

这样,A既没暴露自己的确切考试成绩,又向公司证明自己满足要求。这其实就是零知识证明。

4)A拥有B的公钥,A没有见过B,而B见过A的照片,偶然一天2人见面了,B认出了A,但A不能确定面前的人是否是B,这时B要向A证明自己是B,也有2个方法。

①B把自己的私钥给A,A用这个私钥对某个数据加密,然后用B的公钥解密,如果正确,则证明对方确实是B。

②A给出一个随机值,并使用B的公钥对其加密,然后将加密后的数据交给B,B用自己的私钥解密并展示给A,如果与A给出的随机值相同,则证明对方是B。

第二种方法属于零知识证明。

零知识证明的特点:

(1)隐私保护:零知识证明允许在不泄露敏感信息的前提下向他人证明某个主张的真实性,从而保护了个人的隐私和数据安全。

(2)不可伪造性:零知识证明要求证明者以一种无法被伪造的方式向验证者证明某个主张的真实性,确保了证明的可靠性和完整性。

(3)交互式验证:零知识证明通常需要证明者和验证者之间进行多轮的交互式通讯和计算,以确认证明的有效性。

应用场景:

(1)身份验证:用户可以使用零知识证明向服务提供者证明自己拥有正确的身份信息,而无需透露具体的个人信息。这有助于保护用户的隐私并防止身份盗窃。

(2)支付系统:在电子支付系统中,用户可以使用零知识证明向商家证明自己有足够的资金进行支付,而无需透露具体的账户余额或其他财务信息。这有助于保护用户的财务隐私并提高支付系统的安全性。

(3)知识产权保护:企业可以使用零知识证明来保护自己的知识产权,例如专利、商标或版权。他们可以证明自己拥有某个专利或商标的权利,而无需公开具体的专利内容或商标细节。

(4)区块链应用:零知识证明在区块链技术中也有着广泛的应用。例如,在加密货币交易中,用户可以使用零知识证明来证明自己拥有足够的加密货币进行交易,而无需透露具体的交易历史或地址余额等信息。这有助于提高交易的隐私性和安全性。

应用实例:

目前ZCASH(大零币)使用零知识机制来证明交易有效,在ZCASH中,摒弃了之前的UTXO方式,而是使用了一种基于UTXO,被称为NOTE(支票)的新方式代替。NOTE代表了当前账户对资产的支配权,与UTXO不同,账户余额的存储方式不再是“未消费的交易输出”,而是“未被作废的支票(NOTE)”;一个NOTE是由所有者公钥PK、所拥有金额V、和唯一区分支票的序列号r组成,表示为NOTE=(PK, v, r)

ZCash交易分为两类:透明地址交易和隐藏地址交易。透明地址交易的输入、输出直接是可见的NOTE信息;隐藏地址交易,输入和/或输出的地址和金额是隐藏的。

在ZCASH的隐藏地址交易中,交易的输入输出不再是明文的NOTE,而是NOTE的签发和废弃通知。如下图:

1.png

左侧代表的是“签发的新的NOTE”,右侧代表的是“作废的NOTE”。每次进行转账,就会把转账方的NOTE放到作废列表里,代表此NOTE已经作废,同时为收款方创建一张等额的NOTE。这样就实现了“资产的转移”,并且由于都是记录的NOTE的哈希值,因此并不知道被废弃的和新签发的NOTE的内容,这样就做到了隐藏交易双方及交易细节。

矿工如何确认这些匿名交易?

在矿工确认交易时,转账方会提供一个证明P,能够证明:转账方通过金额V、公钥PK、支票序列号r计算后的哈希值,与在签发列表中存在的哈希值一致,这足以证明转账方的NOTE存在。这样既没有泄露转账方的信息,又证明了NOTE存在。

矿工确认NOTE存在后,就会在作废列表中查询,如果没有此笔NOTE的作废记录,则证明转账方NOTE有效(防止双花)。然后再在作废列表中,把当前NOTE的序列号哈希计算后的值记录在作废列表中,表明此笔NOTE已经作废,同时为收款方签发新的NOTE。

至此,就可以在区块链中应用零知识证明来保护交易双方隐私了。

环签名技术

环签名解决的问题是,我对你说了一句话,但是你只知道是某一群人中有人对你说了这句话,而不知道这群人里具体哪个人说的。简言之就是,我把自己藏进了人群里。环签名通过将实际签名者的公钥藏进一个公钥集合,来达到保护签名者身份的目的。

环签名具有保护签名者隐私和身份匿名的特性,适用于需要保护参与者身份和行为隐私的场景。通过环签名技术,签名者能够在不暴露自己身份的情况下签署消息,确保数据的安全性和隐私性。

环签名也被称为 CryptoNote,由群签名演化而来,典型的应用案例是门罗币。群签名是利用公开的群公钥和群签名进行验证的方案,其中群公钥是公开的,群成员可以生成群签名,验证者能利用群公钥验证所得群签名的正确性,但不能确定群中的正式签名者。可是群管理员可以撤销签名,揭露真正的签名者群签名,这是群签名的关键问题所在。

环签名方案则去掉了群组管理员,不需要环成员之间的合作,签名者利用自己的私钥和集合中其他成员的公钥就能独立的进行签名,集合中的其他成员可能不知道自己被包含在了其中。这种方案的优势除了能够对签名者进行无条件的匿名外,环中的其他成员也不能伪造真实签名者签名。外部攻击者即使在获得某个有效环签名的基础上,也不能伪造一个签名。

  1. 匿名性保护。环签名可以防止交易链上的身份追踪:在使用环签名进行交易签名时,签名者的身份被隐藏在一个成员固定大小的环中,无法被外部观察者追踪。因此,交易链上的身份追踪变得更加困难,保护了用户的交易隐私和身份隐私。并且签名者可以在一个匿名的环中签署交易,使得用户在区块链上的交易活动不会暴露其真实身份,提高了用户交易的匿名性。

  2. 数据隐私保护。环签名可以保护交易内容的机密性:环签名技术不仅可以保护用户的身份隐私,还能保护交易内容的机密性。即使区块链上的所有交易信息都是公开的,但通过环签名,交易内容仍然可以保持加密私密状态,不易被外部方获取。

  3. 抗审查性保护。环签名可以防止审核和审查:通过环签名技术,区块链中的交易可以在签署者身份的保护下完成,无法被审查者追踪。这使得黑客、监视者和第三方无法通过分析区块链中的信息来获取用户的隐私信息。

  4. 信任建立。环签名可以建立信任:通过提高用户的身份和数据隐私保护水平,环签名技术有助于建立用户和社区之间的信任关系。用户可以更加放心地在区块链上进行交易和参与各种智能合约活动

隐私威胁与保护

数据泄露是指系统信息被未经授权的人或组织获取,这可能导致各种威胁问题。数据泄露引起隐私威胁的主要原因:

网络安全漏洞:许多网站和应用程序可能存在安全漏洞,这些漏洞可能被黑客利用来窃取用户数据。

人为错误:个人或组织在处理敏感信息时可能会犯错。

恶意软件:病毒、间谍软件等恶意软件可以窃取系统的敏感数据。

社交工程攻击:黑客通过欺骗手段诱使个人泄露自己的敏感信息,例如通过假冒的电子邮件或电话请求密码重置。

不安全的网络连接:在公共Wi-Fi网络上进行敏感操作可能会导致数据被截获。

区块链面临的一些隐私威胁:

交易信息隐私泄露:区块链上的交易信息,如发送者、接收者和交易金额,可能会被泄露。为了保护这些信息,可以采用混币、环签名和机密交易等技术。

智能合约隐私漏洞:智能合约可能存在漏洞,如果被黑客利用,可能会导致系统崩溃或交易数据泄露。为了防范这一风险,可以采用零知识证明、多方安全计算、同态加密等技术来保护合约数据。

链上数据隐私泄露:区块链上的交易数据虽然与用户身份信息分离,但仍有可能通过分析交易模式来追踪用户的身份。为了进一步保护隐私,可以采用账本隔离、私有数据和数据加密授权访问等解决方案。

以下从用户身份隐私、交易隐私、网络隐私、通信隐私几个方面分析区块链技术隐私泄露问题

用户身份隐私

​ 用户身份隐私主要是指交易双方的地址信息,其本质是双方公钥的哈希值。在早期时候,因为这种地址的匿名特性,交易的所有数据都是公开的。但随着技术的发展,可以通过拓扑学、社会学、统计学以及溯源技术等一系列知识,分析得到交易双方在现实世界的真实信息,用户的隐私信息更会受到极大的威胁。

最常用的解决方案主要是混币机制,也就是将多笔交易混合在一起,切断加密货币中交易方与接收方的联系,提高加密货币的隐私性和匿名性。

混币过程的执行可以由可信第三方或者是某种协议执行,根据这种特性,混币机制也可分为基于中心化结点的混币机制和去中心化的混币机制。

基于中心化的混币机制:其本质是单纯地将一笔资金在多个地址中多次转移,实现简单、易于操作,在现有的各类数字货币系统中具有极高的适用性。但中心化混币机制普遍存在额外收费和时延问题,第三方节点的可信度也得不到保证,以此也容易引发第三方盗窃资金、泄露混币过程的风险。盲签名技术虽然可以降低混币过程泄露的风险,但又会引起混币计算代价增高。

去中心化的混币机制:整个过程由混币协议实现,不需要第三方节点的参与,能有效避免中心化混币机制出现的问题,可去中心化混币机制的计算成本要更高,服务效率也更加较为低下。而且这一种机制仍然不能说是绝对安全,比如无法保证所有参与混币的用户守信、混币用户信息易泄露、容易遭受拒绝服务攻击等等。门罗币(Monero)在混币机制中采用了环签名加密技术,虽然有效避免了上述风险,但混币过程却变得更加冗长。

智能合约漏洞也会导致用户隐私泄露。如果用户的敏感信息被不当地存储在智能合约中,一旦合约被攻击或者泄露,这些信息可能会暴露用户的身份和其他隐私数据;智能合约中的交易逻辑可能涉及用户的身份信息或其他敏感数据,一旦有人分析了智能合约的交易逻辑,就有可能通过相关信息识别用户。

不当的方法会导致用户隐私泄露。如区块链上的数据共享特性可能导致用户的敏感数据被不当地分享给其他参与者,从而暴露用户的身份和隐私信息。如果用户在区块链上存储了未经加密的敏感信息,就容易被他人获取和解密,暴露用户的身份隐私。如果区块链平台缺乏明确的隐私保护协议,用户无法有效地保护自己的身份隐私。

为了解决上述隐私泄露问题,可采取以下措施:

(1)加密数据:在数据上链之前对敏感信息进行加密处理,确保只有授权方才能解密数据。

(2)匿名化处理:使用匿名地址进行交易,避免地址与用户身份关联。

(3)隐私保护协议:建立隐私保护协议,明确区块链上数据的使用和共享规则,保护用户隐私权益。

(4)技术改进:研发更安全的智能合约代码,及时修补漏洞,提高系统的安全性和隐私保护能力。

用户交易隐私

​ 在区块链数字货币起步较早的时候,数字货币仅仅是以数据链的方式从一个钱包直接转移到另一个钱包,其交易记录不做任何保护措施全部公开在区块链系统中。这样虽然有效防止了双重花费问题,但在隐私保护方面却有着极大的问题。然后又有人提出将交易数据的哈希值上链,数据本体仍然储存在链下的中心数据库。可这样一来区块链技术的防篡改、分布式特性就没有得到发挥,特别是线下数据库一旦发生存储丢失、数据损坏、单机故障等问题后还会导致系统的验证能力失效,从而引发一系列问题。

后来又有人提出将交易数据链下加密后再上链,也就是通过对称方式加密数据,非对称加密方式加密对称密钥的方式。可这样的加密方式仍然存在一定缺陷,首先是加密过后的数据无法通过合约来进行数据的操作以及共享。然后就是加密密钥传递需要中心化机构的参与,双方的私密数据不透明,也无法通过区块链的共识来进行验证。

​ 还有一种方案是将交易数据直接进行非对称加密上链,但这种方案在很多时候也是不可行的,因为非对称加密算法主要适用于数据量较小时短数据的加密,对于交易数据这种长数据只有对称加密的性能才可以达到。但对称密钥加密数据又会存在密钥的协商问题。基于以上的问题,有人又提出了基于双重加密的交易隐私保护方法,在保证隐私数据安全性的同时,优化了加密方案,使性能得到了很好的提升。

举例:

假设用户 Alice 需要向 Bob 转账 1 个 ZEC,基于零知识证明操作过程:

(1)用户 Alice 会先将自己的这 1 个 ZEC 拆分成若干份,具体份数可以根据设置来定。

(2)大零币的公有链同时也会将其他交易输出与 Alice 的若干份 ZEC 进行混合拆分,最后从中取出合计为 1 个 ZEC 的若干份发送给 Bob 的收款地址。经过这条公有链一系列的“混币”过程,就使得包括交易地址和具体金额在内的交易信息具有很强的隐匿性。另外,从上述过程来看要实现匿名性,其所花费的计算资源就非常多,带来了大量的资源浪费,也导致了其可扩展性面临巨大挑战。

除此之外还有同态加密、零知识证明、数据隔离、属性加密等解决方案。

网络隐私

​ 网络隐私主要分为节点隐私以及通信隐私。节点隐私主要内容有服务器地理位置、节点的物理信息、系统版本、节点 IP 等。在区块链上每一个节点的安全防护能力都是不同的,再加上区块链是一个对等网络,攻击者想要获取链上被保护的数据比起中心化数据库还可能更简单一些。对公有链来说,任意节点都可以接入,攻击者也可以通过监听、扫描技术等对整个网络进行探测攻击。甚至有人通过这些方式获取了大量的比特币节点信息,然后绘制出整个比特币系统的网络拓扑,再与溯源技术结合,用户的数据隐私将受到严重威胁。

通信隐私主要内容包括数据流量、节点间数据明文及密文等。虽然如今的加密货币很多都采用了ZK-SNARK 或者是环签名等先进密码学技术,但攻击者仍可以利用旁道攻击技术,破坏交易的不可连接性、机密性、不可追溯性、匿名性等。如今,对于这类隐私威胁,常采用的解决方案有可行第三方转发、混合网络、洋葱网络、大蒜路由、雷电网络、闪电网络等。

​ 洋葱网络:主要由洋葱路由组成,使攻击者获取全局信息的难度大大增加,极大地降低了通信隐私泄露威胁。特别是第二代洋葱路由的出现,进一步优化了洋葱网络,其实用性也变得更强。

​ 闪电网络:这是为达到链下通道隔离机制所使用的一种技术,主要目的是解决区块链上高频小额支付不便问题。其网络运行主体在区块链链下,实现了高频小额交易的同时,还提高了用户交易隐私安全性,对整个区块链技术来说,其拓展性有一步增强。

洋葱网络是一种在计算机网络上进行匿名通信的技术。通信数据先进行多层加密然后在由若干个被称为洋葱路由器组成的通信线路上被传送。每个洋葱路由器去掉一个加密层,以此得到下一条路由信息,然后将数据继续发往下一个洋葱路由器,不断重复,直到数据到达目的地。这就防止了那些知道数据发送端以及接收端的中间人窃得数据内容。

大蒜路由(Garlic routing)是洋葱路由的一个变体,它将传输的原始数据拆散为加密数据包通过多条隧道交叉疏散传递,令攻击者的流量分析难上加难。在洋葱路由中一条或多条数据流的上传与下载共用一条隧道,而这种路由方式的上传与下载隧道相互独立而且两个方向上的隧道数量都可能>1,所以被称为大蒜路由。令攻击者的流量分析难上加难。

闪电网络为解决比特币拥堵而生,当然也可以用于其他区块链项目,比如我们上篇说的OMG。不过,以太坊也有自己的“闪电网络”,它的名字叫雷电网络。甚至,以太坊除了雷电网络,还有其他类似的技术。我们可以把闪电网络、雷电网络及其他类似技术,统称为“状态通道技术”。

我们回顾下闪电网络的原理就知道,双方构建一条通道,然后双方的状态(在比特币里,仅为账户余额)在通道里刷新,通道关闭后,再将最终状态记录到区块链上。所以,状态通道这个名字还是挺贴切的。从这里可以看出,所有的状态通道技术,仅仅是把区块链当做最后的记录手段,而在平时尽量避免“上链”。

继闪电网络后,今天我们稍微来了解下以太坊的雷电网络。

在比特币那里,闪电网络只是一个单纯的技术,但以太坊的雷电网络是一个有自己代币(RDN)的ICO项目。从技术上来说,发不发代币并无区别,所以V神也曾质疑过RDN的必要性。不过从通证经济的角度来看,也许有妙用。不过,咱们这里仅了解其技术。

因为以太坊是一个图灵完备的智能合约平台,很多复杂的工作以太坊在底层就已完成了,所以雷电网络的实现其实比闪电网络更简单。雷电网络不像闪电网络,必须依赖多重签名地址予以实现,而是直接靠以太坊的智能合约来实现:

第一步:在以太坊上布署一个智能合约,理论上来说,既可以每建一个通道,就布署一个合约,也可以为一种代币布署一个合约。前者实现比较简单,但耗费gas太多,后者实现起来复杂一点,但便宜一些。

第二步:通道双方将一定量的代币发送到合约地址进行锁定,构建资金池,在闪电网络那,由多重签名地址代持代币,而在雷电网络,则由合约地址代持。同时,双方会向合约发送一条双方签名的报文,这条报文的作用是向全网公示,通道双方各自锁定了多少代币。到此时为止,通道便建立起来了。

第三步:通道建立后,双方所有的交易都可以在链下进行。举个例子:比如A和B建立了雷电通道,双方最初各自锁定了10个以太币,现在A要转1个以太币给B,那么双方一起签名一条新的信息:A减去1个以太币,B增加1个以太币(闪电通道的是记录余额,雷电通道的是记录净增减,比如A再发1个以太币给B,闪电通道会记录A还有8个,B有12个,但雷电通道会记录A减少2个,B增加2个)。这条信息不需要发到区块链上,只需A和B保留就行。

第四步:A和B之间在链下的每一次双方签名的转账信息,都有一个序列号,比如第一次是1,第二次是2,如果要结束通道(假如A发起 ),A可以将最新的,也就是序列号最大的那个信息发送到智能合约,同时提供一个锁定时间。如果在锁定时间到期前,B提供了一个更新的信息,那说明A作弊(比如,A在倒数第二条信息时收到了B的1个以太币,在最后一条信息发给B两个以太币,但A结束通道时,只提交倒数第二条信息),合约会将锁定的币全部给B,用以惩罚A,如果到期时对方没有异议,合约根据最后这条信息的净增减额计算双方的最终余额并发还给他们。

应用隐私

​ 应用隐私一般分为用户端隐私与服务端隐私,隐私主要内容有支付流敏感信息、浏览器 Cookie、密钥存放位置等。

​ 这一类隐私信息的泄露威胁其实并不来源于区块链技术本身,其主要问题还是在用户和服务商身上。用户的安全意识薄弱,在系统全线申请的时候往往会采用默认同意授权的方式。这样就给了第三方攻击者的操作空间,在对用户敏感信息进行收集之后,就可以通过一系列技术跟用户的身份产生映射关系,这样就能联系到用户的其他信息,造成严重的隐私泄露。而在攻击者收集信息之前,用户往往很难注意到自己暴露的哪些信息隐含着自己的敏感隐私,更不知道这些信息会被攻击者利用起来使自己的隐私信息全部暴露。

​ 服务商暴露隐私的源头主要来自操作不当或者服务漏洞。就比如服务商授予用户的权限不匹配、服务商公开信息中隐含了敏感信息、插件存在漏洞等。对于这类隐私威胁,常用的解决方案有发布官方插件、身份认证、增强用户安全意识等。

为了有效保护用户端隐私和服务端隐私,可以采取以下一些措施:

加密通信:确保用户端和服务端之间的通信是加密的,使用SSL/TLS等协议来保护数据传输的隐私。

隐私政策和协议:制定并明确公布隐私政策和服务协议,告知用户个人数据的收集、使用、存储、共享和保护方式,以及用户的权利和选择。

匿名化处理:尽可能对用户端数据进行匿名化处理,避免直接暴露用户的身份信息。

数据加密:对敏感数据进行加密存储,确保只有授权人员可以解密访问。

访问控制:限制对用户端和服务端数据的访问权限,只允许有必要的人员能够访问和处理相关数据。

安全审计:对系统和数据进行定期安全审计,及时发现潜在的风险和漏洞。

更新维护:定期更新系统和应用程序,修复已知漏洞,以确保系统的最新安全性。

数据备份与恢复:建立定期数据备份和灾难恢复机制,确保数据不会因故意破坏、意外删除或硬件故障而永久丢失。