网络安全日报 2022年03月14日
免责声明:以下内容原文来自互联网的公共方式,仅用于有限分享,译文内容不代表蚁景网安实验室观点,因此第三方对以下内容进行分享、传播等行为,以及所带来的一切后果与译者和蚁景网安实验室无关。以下内容亦不得用于任何商业目的,若产生法律责任,译者与蚁景网安实验室一律不予承担。 1、LockBit 勒索软件声称已经入侵了普利司通美洲公司 https://securityaffairs.co/wordpress/128957/cyber-crime/bridgestone-americas-lockbit-ransomware.html 2、攻击者使用网站联系表格传播 BazarLoader 恶意软件 https://securityaffairs.co/wordpress/128942/cyber-crime/phishing-bazarloader-campaign.html 3、俄互联网监管机构 Roskomnadzor 将禁止 Instagram https://securityaffairs.co/wordpress/128935/cyber-warfare-2/russian-roskomnadzor-bans-instagram.html 4、Lapsus$ 团伙声称入侵了游戏巨头育碧公司 https://securityaffairs.co/wordpress/128929/hacking/ubisoft-cyber-security-incident.html 5、东映动画遭受网络攻击延迟发布新的海贼王动漫剧集 https://www.bleepingcomputer.com/news/security/new-one-piece-anime-episodes-delayed-after-toei-cyberattack/ 6、欧姆龙修补修补了 PLC 编程软件中的高危漏洞 https://www.securityweek.com/high-severity-vulnerabilities-patched-omron-plc-programming-software 7、研究人员推测新的Nokoyawa勒索软件与Hive有关 https://www.trendmicro.com/en_us/research/22/c/nokoyawa-ransomware-possibly-related-to-hive-.html 8、约70%的ServiceNow实例配置错误暴露敏感数据 https://threatpost.com/most-servicenow-instances-misconfigured-exposed/178827/ 9、流行的软件包管理器中发现多个安全漏洞 https://thehackernews.com/2022/03/multiple-security-flaws-discovered-in.html 10、为对抗制裁,俄罗斯决定自建TLS根证书 https://www.freebuf.com/news/324501.html
密码学的安全性浅析2
分组密码   分组密码是一种对称密钥算法。它将明文分成多个等长的模块,使用确定的算法和对称密钥对每组分别加密解密。分组加密是极其重要的加密协议组成,其中典型的如AES和3DES作为美国政府核定的标准加密算法,应用领域从电子邮件加密到银行交易转帐,非常广泛。基本流程细节这里不展开,可以参考密码学相关教材,本文专注于分析其中与安全性有关的部分。    分组大小   分组密码有两个重要的特征:分组大小和密钥大小,其安全性也取决于这两个值,大多数分组密码的分组大小为64比特或128比特,比如DES的分组为64比特,AES的分组为128比特,这些都是2的n次幂,因为这可以让数据的存储、寻址、处理等操作更加方便。   但是各位有没有想过为什么是64、128,而不是256或者更小的32呢?   首先分组不能太大,我们应该让密文的长度和内存占用尽可能小。比如我们使用AES加密16比特信息时,需要将信息转换为128比特,然后对其处理得到128比特密文,很明显,分组越大,开销也越大。64比特、128比特对于大多数CPU的寄存器都可以方便操作。   同时分组不能太小,分组太小的话容易受到代码本攻击Codebook attack。代码本攻击是用16比特分组进行的:   1.首先得到对应于每个16比特明文分组的2^16个密文   2.然后建立代码本,即查找表,将每个密文分组映射到相应的明文分组   3.对未知的密文分组进行解密,查找表中对应的明文分组   如果使用的是16比特分组长度的密码,则攻击者建立的查找表只需要16x2^16=   2^20比特内存,即128kb;而如果使用的是分组长度为32比特,则内存需要16gb,这对于攻击者而言都是可行的;而如果要攻击64比特分组的密码,攻击者必须要有1ZB的内存,这是不可行的。   分组构造   我们知道,分组密码实际上是一个循环多轮的运算,轮本身是很弱的一系列运算,但是数量很多。而循环的构造主要有两种技术:代换-置换网络(Substitution-Permutation Network,SP-network或SPN))(AES采用)和Feistel方案(DES采用)   在分组密码中,我们会明确规定轮与轮之间是不相同的,这是为什么呢?因为如果相同的话,容易受到滑动攻击Slide attack。   滑动攻击中的攻击者找到两个明文-密文对(P1,C1)(P2,C2),设R是分组密码的轮函数,有P2=R(P1)。当轮函数相同时,两个明文之间的关系蕴含着对应的各自密文之间的关系即C2=R(C1),下图是轮数为3时的示意图     攻击者一旦知道一轮的输入和输出就有助于恢复出密钥。   我们一般可以通过使用不同的子密钥作为参数确保每轮的运算是不同的,从而防止滑动攻击。   AES   AES的全称是Advanced Encryption Standard,意思是高级加密标准。它的出现主要是为了取代DES加密算法的,因为我们都知道DES算法的密钥长度是56Bit,因此算法的理论安全强度是2的56次方。但二十世纪中后期正是计算机飞速发展的阶段,元器件制造工艺的进步使得计算机的处理能力越来越强,虽然出现了3DES的加密方法,但由于它的加密时间是DES算法的3倍多,64Bit的分组大小相对较小,所以还是不能满足人们对安全性的要求。于是1997年1月2号,美国国家标准技术研究所宣布希望征集高级加密标准,用以取代DES。AES也得到了全世界很多密码工作者的响应,先后有很多人提交了自   AES组成   AES每轮的四个步骤如下示意    图中所示的运算都是必要的,如果缺乏任一,AES都是不安全的,具体分析如下:   如果没有KeyExpansion,所有轮都会使用相同的密钥K,则容易受到滑动攻击;   如果没有AddRoundKey,加密将不依赖于密钥;这意味着,攻击者可以在没有密钥的情况下解密密文;   SubBytes引入了非线性操作,增加了密码强度,如果没有SubBytes,AES只是由线性函数构成的大系统,使用基础的高等代数知识就可以破解它。   如果没有ShiftRows,给定列中的更改就不会影响其他列,那么攻击者就可以为每列构造4个2^32个元素的查找表来攻破AES   如果没有MixColumns,字节的变化不会影响该状态的其他任何字节。那么对于选择明文攻击而言,只需存储16个查找表(每个表256字节)后就可以解密任何密文,因为这些表中保存着每个字节可能的加密值。   AES实现   虽然在上一节中我们看到有SubBytes(),ShiftRows(),MixColumns()等操作,但是实际中的AES实现代码并不会用这些函数,因为效率太低,AES通过会基于表实现。   AES基于表的实现实际上是利用查询硬编码在程序中并在执行时加载到内存中的表以及XOR运算替换SubBytes(),ShiftRows(),MixColumns()等操作,比如在openssl中其对应的C语言实现如下    但是基于查找表的实现容易受到基于时间的缓存攻击cache-timing attack,当程序读取或者写入缓存中的元素时存在时间变化上的差异,因为访问cache中的元素的相对位置不同则时间也不同,通过这种差异攻击者就可以知道程序访问了哪个元素,进而推测秘密。   操作模式   分组密码加密模式中最简单的就是ECB,ECB模式下的分组密码是不安全的,一个直观的示意如下所示    左侧为原始图像,右侧为使用AES以ECB模式加密后的结果,可以看到在加密后的图像上还是很容易看出企鹅,这本质上是因为原始图像中灰度阴影的所有分组都被加密到新图像中相同的新灰度阴影中。   而在CBC模式中也存在一定问题,CBC通常与固定IV一起使用,而不是使用随机IV,这会导致什么问题呢?设两个明文分组P1||P2在CBC模式下加密得到密文C1||C2;另外有明文分组P1||P2'使用相同的IV加密得到C1||C2'。其中P2与P2’是不同的分组,在得到的密文中,虽然C2和C2‘不同,但是C1是相同的,即危害在于,即使攻击者只拿到密文,但是攻击者仍然可以推测出两个明文的第一个分组是相同的。   中间相遇攻击   在分组密码领域,有两种必须知道的攻击方案,一种是已经介绍过的padding oracle attack,另一种是中间相遇攻击。 提到中间相遇攻击,不知道大家有没有想过一个问题,为什么DES进一步派生出3DES,而不是2DES呢?   因为通过中间相遇攻击,2DES的安全性依然相当于DES,分析如下   设有一个2DES算法C=E(K2,E(K1,P)),其中P为明文,K1,K2均为56比特的密钥。攻击示意如图    流程如下   1.首先构建有2^56项的E(K1,P)的密钥值表   2.对于K2的所有2^56个值,计算D(K2,C)并检查结果值是否出现在表的索引中   3.如果出现,则从表中取出对应的K1,并使用相应的P,C验证找到的K1,K2是否正确,再用它们加密P看是否能得到C,如果可以则说明攻击成功   可以看到,这种攻击方式只需要2x2^56次操作即可,远小于   2^112   而如果我们将这种攻击方式应用于3DES,可以推算出来,第三阶段需要计算K2,K3的所有2^112个值,这意味说3DES实际上只有112比特的安全性,尽管其密钥长度为168比特。   序列密码   序列密码也称为流密码(Stream Cipher),它是对称密码算法的一种。序列密码具有实现简单、便于硬件实施、加解密处理速度快、没有或只有有限的错误传播等特点,因此在实际应用中,特别是专用或机密机构中保持着优势,典型的应用领域包括无线通信、外交通信。    基于硬件   基于硬件的序列密码基本都离不开反馈移位寄存器FSR。    上图所示是一个n级反馈移位寄存器。   其中,a0,a1,…,an−1为初态。F 为反馈函数或者反馈逻辑。如果 F 为线性函数,那么我们称其为线性反馈移位寄存器LFSR,否则我们称其为非线性反馈移位寄存器NFSR。ai+n=F(ai,ai+1,...,ai+n−1)   FSR被无数序列密码使用,因为它非常简单而且容易理解,从上图可见,其包含由一些比特组成的数组以及一个更新的反馈函数F,FSR的状态存储在数组或寄存器中,每次更新就是使用F改变状态并产生一个输出比特。在使用FSR时,需要尽量避免使用短周期的,因为这样会使输出序列更容易预测。   LFSR中文为线性反馈移位寄存器,是具有线性反馈函数的FSR。在密码学中,线性性质意味着可预测性,也暗示着存在简单并容易理解的数学结构。在序列密码中使用LFSR并不安全,假设一个LFSR的长度为n,攻击者仅需要n比特输出就可以还原该寄存器的初始状态,由此可以反推之前的状态信息并得到之后的输出序列,这种攻击基于Berlekamp-Massey(BM)算法,其依赖于LFSR的数学结构去建立方程,求解方程即可。实际上攻击者即使不知道n,也可以通过穷举所有可能的长度进行攻击。   为了掩盖LFSR的线性性质,可以对LFSR的输出序列进行非线性过滤以得到非线性程度更高的密钥序列,称其为过滤生成器,如下所示    图中的g为非线性函数,如异或、逻辑与、逻辑或等。   不过这还是会受到其他复杂的攻击:   代数攻击Algebraic attack:当未知变量是LFSR的内部状态比特时,代数攻击可以求解以内部状态为未知变量的非线性方程   立方攻击Cube attacks:通过计算非线性方程的微商,使其方程的代数次数降到1次,进而得到线性方程组从而求解   快速相关攻击Fast correlation attacks:挖掘非线性过滤函数和线性函数的相似度来实施攻击   为了彻底解决这个问题可以使用NFSR,即非线性反馈移位寄存器,它使用了非线性函数,它的输出比特和状态比特之间的代数关系的复杂性更高,随着运行次数的增加,复杂性呈指数规模增长。   A5/1   基于硬件的序列密码中的一个代表算法就是A5/1,其被用于2G移动通信中,用于对语音通信加密.示意图如下    A5/1流密码使用三个LFSR。虽然我们前面说LFSR不安全,但是A5/1使用小技巧是它变得较为安全,它使用的3个LFSR并非每一时刻都输出,而是通过下面的钟控规则决定每个寄存器的停走:如果某个寄存器的钟控位(橙色)和另一个寄存器的钟控位相同或著三个寄存器的钟控位都相同,则对该寄存器作移位操作。   特别地,在2G通信中使用的A5/1算法有64比特密钥和22比特nonce,其中加密每一帧所用的nonce不同,针对A5/1的攻击旨在恢复算法的64比特的初始状态(即三个寄存器的长度之和19+22+23),然后通过算法的初始化原理恢复nonce和密钥。这种攻击属于已知明文攻击,因为攻击者需要知道部分明文以及对应的密文,这样通过异或运算可以得到部分密钥序列比特。针对A5/1的攻击主要有两类,分别是细致攻击subtle attack以及暴力攻击brutal attack.   subtle attack是挖掘算法内部的线性性质并利用它相对简单的钟控系统,攻击者需要猜测一些内部状态比特以确定其他状态比特,本质上就是遍历第一个和第二个寄存器的所有可能取值以及前11个时钟周期里第三个寄存器的钟控比特的所有可能取值,由此建立方程得到第三个寄存器的内部状态。伪码如下    brutal attack将算法看做是一个64比特输入(内部状态)到64比特(前64比特密钥序列)输出的黑盒,本质是通过消耗内存降低暴力攻击的成本:预算计算一个有2^64个元素的表,表中的元素是每个可能的密钥和其对应的输出。在攻击时,根据输出,通过查表就可以得到对应的密钥。   基于软件   RC4    在密码学中,RC4(来自Rivest Cipher 4的缩写)是一种流加密算法,密钥长度可变。它加解密使用相同的密钥,因此也属于对称加密算法.RC4应用非常广泛,在WEP中,RC4用于加密802.11帧的有效负载,这些数据通过数据包的形式进行传输。在同一会话中交付的所有有效负载都使用相同的40比特或104比特的密钥,且在帧头有一个唯一的3字节的nonce编码。   这里的关键在于RC4不支持nonce,而在WEP中使用nonce会造成风险,其原因在于:   nonce的比特数太少,只有24比特,这意味着对于攻击者而言,即使每条消息都随机选择一个nonce,只需等到2^12包,就能找到两个用相同的nonce加密的包,他们有相同的密钥序列,攻击者可以用其去解密数据包;此外还有更严重的问题--nonce和密钥的结合方式有助于恢复密钥。WEP中的nonce是公开的,它的三个字节使攻击者能够在密钥编排方案的三次迭代后确定S的值,基于此密钥分析人员发现密码序列的第一个字节和密钥的第一个字节有很强的相关性,其导致的偏差可以被用于恢复密钥。   在实际场景中,这就会造成选择明文攻击。   在TLS中也使用过RC4,这时存在风险的原因是在于,RC4存在统计数据偏差:RC4生成的密钥序列的第二个字节是0的概率是1/128,而理想情况下应该是1/256;不仅如此,实际上,前256个字节都有偏差,之前就有研究人员发现,其中某字节为0的概率为1/256+c/256^2,c取值介于0.24到1.34.   通过这种缺陷去攻击TLS的过程也非常直观,只需要收集密文并寻找明文,攻击者需要收集很多密文,并且这些密文是同不同的密钥对相同的明文加密得到的。设攻击者拿到了同一明文P1加密得到的多组密文,现在要解密明文P1.前4个密文字节是这样的:    由于前面提到RC4存在统计偏差,密钥序列字节SK1i取值为0的可能性更大,所以对应的C1i等于P1的可能性更大。在给定C1i后,为了确定P1,只需计算每个字节值出现次数并返回出现次数最多的那个值,它就是P1.   哈希函数   散列函数(Hash function)又称散列算法、哈希函数,是一种从任何一种数据中创建小的数字“指纹”的方法。散列函数把消息或数据压缩成摘要,使得数据量变小,将数据的格式固定下来。该函数将数据打乱混合,重新创建一个叫做哈希值或散列值(hash values,hash codes,hash sums,或hashes)的指纹。其运行的示意图如下    生日攻击   我们知道哈希函数存在原像攻击和碰撞攻击。   给定任意哈希值H,原像是指满足Hash(M)=H的消息M,原像攻击指给定随机哈希值,攻击者可以找到原始消息,这一般也被称作第一原像攻击。   除此之外,还存在第二原像攻击,即给定消息M1时,攻击者能够找到另一条消息M2,其哈希值与M1的哈希值相同。   而碰撞攻击则是指攻击者可以找到具有相同哈希值的两条不同的消息。   碰撞攻击的本质是鸽巢原理:有n只鸽子和m个鸽洞,所有鸽子都住在鸽巢里,如果n>m,那么至少有二只鸽子必须住在同一鸽巢里。   可以说这是不可避免的,但是对于哈希函数而言,碰撞应该像原始消息一样难于找到。   通过上面的表述,我们可以看到第二原像攻击与碰撞攻击存在一定联系:   第二原像攻击定义为:   给定固定消息m1,找到另一个消息m2,使hash(m2)= hash(m1)。   碰撞攻击定义为:   找到两个任意不同的消息m1和m2,使hash(m1)= hash(m2)。   区别在于第二原像攻击是给定了m1的,而碰撞攻击没有。就攻击难度而言,前者更难。同时,我们也可以看出,任何具有抗碰撞性的哈希函数,也能够抵御第二原像攻击。   找到碰撞与找到原像要快,需要2^(n/2)次   而不是2^n次,这背后的原理我们称之为生日攻击。   生日攻击是一种密码学攻击手段,所利用的是概率论中生日问题的数学原理。这种攻击手段可用于滥用两个或多个集团之间的通信。此攻击依赖于在随机攻击中的高碰撞概率和固定置换次数(鸽巢原理)。   举个例子   设一位老师问一个有30名学生的班级(n = 30)每个人的生日在哪一天以确定是否有两个学生同一天生日(对应碰撞 )。从直觉角度考虑,机率看起来很小。若老师选择特定日期(例如9月16日),则至少有一名学生在那天出生的几率是1-(364/365)^30,约为7.9%。但是,与我们的直觉相反的是,至少一名学生和另外任意一名学生有着相同生日的几率大约为70.63%(n = 30时),即   1-365!(365-n)!x365^n   更简洁的结论就是,如果班级有23人,则其中有两个学生出生日期相同的概率为1/2。   知道生日攻击的原理后,我们看看对应的攻击方案:   朴素的生日攻击方案如下:   1.计算任意选择的2^(n/2)个消息的哈希,并将所有的消息-哈希对存下来   2.重排哈希值列表   3.搜索排序后的列表以查找具有相同哈希值的两个连续条目   可以看到,这种方法需要大量的内存,同时对大量元素进行排序会减慢搜索的速度。   研究人员在此基础上提出了低内存的攻击方案:Rho攻击(来自Pollard Rho算法),流程如下   1.给定具有n比特哈希值的哈希函数,选择一些随机哈希值H1,设H1'=H1   2.计算H2=Hash(H1),H2'=Hash(Hash(H1'))   3.迭代该过程并计算Hi+1=Hash(Hi),Hi+1'=Hash(Hash(Hi')),直到有一个i可以满足Hi+1=Hi+1'   对应的示意图如下    可以看到这个序列最终会形成一个循环,循环从H5开始,找到的碰撞是Hash(H4)=Hash(H10)=H5,只要我们能够找到循环,就能够找到碰撞。对于攻击者而言,首先找到循环点,然后发现碰撞,不需要在内存中存储大量的值,也不需要排序。   循环以及尾部各自有大约2^(n/2)个值,所以大约需要   2^(n/2)x2次哈希运算就能找到碰撞   这里再多说一句,密码学中一般使用Pollard Rho算法分解大整数,其基于大整数n=pq中p和q之间有一个因子很小,在此情况下,可以利用该算法完成对n的分解,它是基于寻找指定哈希函数的碰撞的思想才设计出来的,也就是我们上文提到的过程。假设找到了碰撞,即找到不相等的x,x'并且有   x mod p = x' mod p   那实际上我们就知道x,x'相差p的整数倍,由此可以知道gcd(x-x',n),如果不是1也不是n,那么就分解成功。   长度扩展攻击   对消息进行哈希处理的最简单方法就是将其分成多个分组,并使用类似的算法连续处理每个分组。这种方法被称为迭代哈希,其主要有两种形式:   1.使用压缩函数迭代哈希,将输入转换为较小的输出,如下所示    这种结构也被称为Merkel-Damgard结构   2.使用将输入转换为相同大小的输出的函数进行迭代哈希,是的任意两个不同的输入给出两个不同的输出,如下所示    这种函数被称为海绵函数   基于M-D结构的有MD4,MD5,SHA-1,SHA-2系列,基于后者的最著名的海绵函数是Keccak,也被称为SHA-3。   对于M-D而言,其主要威胁就是长度扩展攻击。长度扩展攻击是指一种针对特定加密散列函数的攻击手段,攻击者可以利用H(消息1)和消息1的长度,不知道消息1内容的情形下,将攻击者控制的消息2计算出H(消息1 ‖ 消息2)。我们来看下面的例子    设存在未知消息M的Hash(M),M由M1,M2组成,那么攻击者对于任意消息M3都可以确定Hash(M1||M2||M3)。这种攻击可行的原因在于M1||M2的哈希是跟在M2之后的链值,所以可以将另一个分组M3添加到哈希中。   SHA-2就存在这个问题,解决方案也很简单,如BLAKE2中让最后一个压缩函数与其他函数都不同即可。   绕过存储证明协议   存储证明协议在云计算中应用广泛,其使用哈希函数,使得服务器能够向用户证明服务器确实存储了应该存储的用户文件。Kotla等人就提出一种存储证明协议(详情见SafeStore: A Durable and Practical Storage System ),设要存的文件为M,过程如下:   1.客户端选择一个随机值C并发送给服务器   2.服务器计算Hash(M||C)并返回给客户端   3.客户端计算Hash(M||C)并比服务器返回的值作比较,如果吻合则说明服务器确实存储着M   这个协议可行的前提是如果服务器不知道M,那么就不能正确计算出H(M||C)   但是这里的缺陷在于,Hash是一个迭代的哈希,其会逐分组处理输入信息,计算每个分组之间的中间链值。服务器利用这一点完成可以实现欺骗,怎么做呢?   当服务器接收到M时,计算H1=Compress(H0,M1),H0是哈希函数的初始值,然后记录H1并删除M,此时服务器已经没有存储着M了。当客户端发送C时,服务器可以计算出Compress(H1,C)并将其作为Hash(M||C)的结果返回。此时客户端会验证成功,由此就欺骗了该协议。   对于SHA-1,SHA-2,SHA-3以及BLAKE2都存在这个问题。其实对应的解决方案很简单,要求服务器计算Hash(C||M)而不是Hash(M||C)即可。   参考   1.https://www.iacr.org/archive/eurocrypt2000/1807/18070595-new.pdf    2.https://en.wikipedia.org/wiki/Slide_attackhttps://crypto.stackexchange.com/questions/17869/lfsr-output-sampling-for-berlekamp-massey   3.https://ieeexplore.ieee.org/document/6378229   4.https://eprint.iacr.org/2018/522.pdf   5.https://en.wikipedia.org/wiki/Cube_attack   6.http://www.dcs.fmph.uniba.sk/diplomovky/obhajene/getfile.php/master-mv.pdf?id=132&fid=219&type=application%2Fpdf&&   7.SafeStore: A Durable and Practical Storage System
网络安全日报 2022年03月11日
免责声明:以下内容原文来自互联网的公共方式,仅用于有限分享,译文内容不代表蚁景网安实验室观点,因此第三方对以下内容进行分享、传播等行为,以及所带来的一切后果与译者和蚁景网安实验室无关。以下内容亦不得用于任何商业目的,若产生法律责任,译者与蚁景网安实验室一律不予承担。 1、意大利对美国面部识别公司Clearview AI 处以 2000 万欧元罚款 https://www.securityweek.com/italy-fines-us-facial-recognition-firm 2、CISA 将 98 个域添加到与 Conti 勒索软件相关的联合警报中 https://securityaffairs.co/wordpress/128885/malware/cisa-alert-conti-ransomware.html 3、新Emotet 僵尸网络正在迅速发展,179 个国家/地区超 13 万主机被感染 https://securityaffairs.co/wordpress/128879/breaking-news/emotet-botnet-rapidly-growing.html 4、攻击Nvidia和三星的Lapsus$入侵了沃达丰并窃取了200GB的源代码 https://www.securityweek.com/vodafone-investigating-source-code-theft-claims 5、研究人员发现RURansom恶意软件针对俄罗斯 https://www.trendmicro.com/en_us/research/22/c/new-ruransom-wiper-targets-russia.html 6、CISA 敦促在 3 月 21 日之前修复被积极利用的 Firefox 零日漏洞 https://securityaffairs.co/wordpress/128803/security/cisa-firefox-zerodays-known-exploited-vulnerabilities-catalog.html 7、谷歌以 54 亿美元收购网络安全公司Mandiant https://www.leiphone.com/category/industrynews/UmpSJjGqdNYB30zn.html 8、近 30% 的关键 WordPress 插件漏洞没有更新补丁 https://www.bleepingcomputer.com/news/security/nearly-30-percent-of-critical-wordpress-plugin-bugs-dont-get-a-patch 9、1Password 将漏洞赏金最高奖励增加到 100 万美元 https://www.securityweek.com/1password-increases-top-bug-bounty-reward-1-million 10、Adobe 修补了 Illustrator、After Effects 中的严重漏洞 https://www.securityweek.com/adobe-patches-critical-security-flaws-illustrator-after-effects
CVE-2022-0847漏洞复现及修复建议
声明:本文仅限于技术讨论与分享,严禁用于非法途径。若读者因此作出任何危害网络安全行为后果自负,与本号及原作者无关。   漏洞描述   CVE-2022-0847是Linux内核的本地提权漏洞。原理类似于Dirty Cow linux提权。目前该漏洞的EXP已经公开,且处于在野利用。   影响版本   Linux kernel>=5.8   漏洞复现   这里利用的linux内核版本为5.9,因为之前ubuntu的内核版本为4.5.0   所以需要对linux的内升级   wget -c https://kernel.ubuntu.com/~kernel-ppa/mainline/v5.9/amd64/linux-headers-5.9.0-050900_5.9.0-050900.202010112230_all.deb    wget -c https://kernel.ubuntu.com/~kernel-ppa/mainline/v5.9/amd64/linux-headers-5.9.0-050900-generic_5.9.0-050900.202010112230_amd64.deb    wget -c https://kernel.ubuntu.com/~kernel-ppa/mainline/v5.9/amd64/linux-image-unsigned-5.9.0-050900-generic_5.9.0-050900.202010112230_amd64.deb    wget -c https://kernel.ubuntu.com/~kernel-ppa/mainline/v5.9/amd64/linux-modules-5.9.0-050900-generic_5.9.0-050900.202010112230_amd64.deb     下载完毕后安装   sudo dpkg -i *.deb   之后重启虚拟机即可,如果中间报错的话,需要重新下载依赖进行安装,这里升级依赖可参考 https://blog.csdn.net/qq_50598558/article/details/119063124  重启之后内核版本成功升级为5.9.0    利用exp进行提权,编译提权脚本   gcc -o exploit exploit.c    ./exploit    临时目录/tmp下生成了一个passwd的备份文件    这个时候需要利用低权限用户将原来的passewd文件进行覆盖   mv /tmp/passwd.bak /etc/passwd    这个时候已成功提权,利用密码为aaron对root用户进行登录    修复建议  • 建议将linux内核升级为安全版本,目前在 Linux 5.10.102、5.15.25 和 5.16.11版本已修复。  • 存在问题终端或者服务器不要映射在公网上。
网络安全日报 2022年03月10日
免责声明:以下内容原文来自互联网的公共方式,仅用于有限分享,译文内容不代表蚁景网安实验室观点,因此第三方对以下内容进行分享、传播等行为,以及所带来的一切后果与译者和蚁景网安实验室无关。以下内容亦不得用于任何商业目的,若产生法律责任,译者与蚁景网安实验室一律不予承担。 1、西门子解决了 90 多个因第三方组件引入的漏洞 https://www.securityweek.com/siemens-addresses-over-90-vulnerabilities-affecting-third-party-components 2、Mitel 设备被滥用于 DDoS攻击,放大率达到创纪录的4,294,967,296:1 https://www.securityweek.com/mitel-devices-abused-ddos-vector-record-breaking-amplification-ratio 3、APC Smart-UPS 设备中的严重漏洞可导致被远程入侵 https://thehackernews.com/2022/03/critical-bugs-could-let-attackers.html 4、研究人员披露了影响 Pascom 云电话系统 ( CPS ) 的三个严重漏洞 https://thehackernews.com/2022/03/critical-rce-bugs-found-in-pascom-cloud.html 5、Android 2022 年 3 月安全更新补丁修复了39个漏洞 https://www.securityweek.com/androids-march-2022-security-updates-patch-39-vulnerabilities 6、电子商务技术巨头 Mercado Libre 确认源代码数据泄露 https://www.bleepingcomputer.com/news/security/e-commerce-giant-mercado-libre-confirms-source-code-data-breach/ 7、在线学习平台Moodle中存在SQL注入漏洞 https://portswigger.net/daily-swig/sql-injection-vulnerability-in-e-learning-platform-moodle-could-enable-database-takeover 8、英伟达泄露数据正被用来制作伪装成驱动的病毒 http://www.cnbeta.com/articles/tech/1244419.htm 9、MITRE Engage 发布了 V1 版本 https://www.anquanke.com/post/id/269504 10、新的攻击绕过了针对 Intel 和 ARM CPU 中 Spectre 漏洞的硬件防御 https://www.csoonline.com/article/3652525/new-attack-bypasses-hardware-defenses-for-spectre-flaw-in-intel-and-arm-cpus.html
记一次COOKIE的伪造登录
一次未授权访问和COOKIE的伪造登录   0x01:发现它的网址如此   通过信息收集—发现它的密码规则如下(因重点是COOKIE的伪造登录,故密码规则就不放图了,你懂的…)   账户:  xxxx   密码:   Aa1xxxx   0x02:爆破一个弱口令的账户进去,发现是低权限,java写的网址…(java写的一般涉及的都是越权,未授权之类的额….)   0x03:仔细捣鼓了许久,发现毛线都没有一个….   get请求,无明显的越权操作….   0x04:正当毫无思绪的时候,换了个思路去想,如果能拿到高权限的账户,就可以发现进一步有哪些操作…如果去发下拿下账户是高权限….此时,看到这我陷入了沉思,一般这种情况都会暴露用户名,再结合密码规则..,去看看,看能不能摸到管理员…   0x05:通过发现的用户名,打算进行弱口令尝试   但是突然发现它的url有点怪…   http://xxxxx.xxxxx.edu.cn/xxxxxx/frame.htm?title=&url=http://xxxxx.xxxxx.edu.cn/xxxxxx& /common/user_xxxxxx/&plug_in_js=&system_owner_app=/xxxxxx&_system_todo=newReceiver(true)   就直接马上想到未授权这一块….   直接掏出其他浏览器,不进行登录,进行进行访问..   好家伙,直接未授权..   既然未授权存在,那么这个系统在web端多半就千疮百孔….   ………   现在的目标就是拿到高权限的用户,然后找到它的有价值的url直接未授权即可,然后再测试cookie的伪造……   只撞到一个管理员权限..   0x06:现在高权限用户拿到了,刚刚已经说了,存在未授权的漏洞,现在马上试试,看能不能在账户管理这个地方是否有未授权..(发现不存在未授权,但存在COOKIE伪造)   注意,我在burosuit中通过查看匹配,来判断是否能够访问成功。   当有cookie的时候   0x07:按道理来说,不应该如此,应该存在其他漏洞,于是我我就慢慢去删除COOKIE找到最后端验证的COOKIE,也就是COOkie的伪造是存在。     后面的过程就是不停的伪造,管他什么未授权漏洞,还是COOKIE伪造,一锅烩了,全部COOKIE伪造就好…….   到此为止,这个简单的系统就摸进去了…   总结思路:    1.先是通过弱口令规则,发现存在未授权。    2.再通过弱口令规则,找到管理员,进行继续找危害大的未授权url。    3.再寻找过程中,发现账户账户管理处存在不存在未授权,而是存在COOKIE的伪造….    4.点到为止…   换个网址…好家伙,还通杀….   总结:   1.Java类型的网站,感觉挖的更多是越权,未授权的这一块。   2.在测试过程中,每个点都不能放过…   3.挖洞更多的是细心。   实验推荐   实验:Cookie注入(蚁景网安实验室) https://www.yijinglab.com/expc.do?ec=ECID172.19.104.182014081415213800001>>
网络安全日报 2022年03月09日
免责声明:以下内容原文来自互联网的公共方式,仅用于有限分享,译文内容不代表蚁景网安实验室观点,因此第三方对以下内容进行分享、传播等行为,以及所带来的一切后果与译者和蚁景网安实验室无关。以下内容亦不得用于任何商业目的,若产生法律责任,译者与蚁景网安实验室一律不予承担。 1、SAP 修补监控解决方案中的关键安全漏洞 https://www.securityweek.com/sap-patches-critical-security-flaws-monitoring-solutions 2、周二补丁日:微软修复74个漏洞含多个代码执行漏洞 https://www.securityweek.com/patch-tuesday-microsoft-fixes-multiple-code-execution-flaws 3、 Axeda 平台中七个严重漏洞影响100多家制造商的150多种设备型号 https://securityaffairs.co/wordpress/128810/hacking/access7-flaws.html 4、Ragnar Locker 勒索软件团伙入侵了美国52个关键基础设施网络 https://www.freebuf.com/news/324094.html 5、工信部发布《车联网网络安全和数据安全标准体系建设指南》 https://www.freebuf.com/news/324069.html 6、研究人员披露了惠普UEFI固件16个高危漏洞,影响数百万台惠普设备 https://thehackernews.com/2022/03/new-16-high-severity-uefi-firmware.html 7、PROPHET SPIDER 利用 Citrix ShareFile 漏洞攻击IIS Web服务器 https://www.crowdstrike.com/blog/prophet-spider-exploits-citrix-sharefile 8、Rompetrol加油站网络遭到Hive勒索软件攻击 https://www.bleepingcomputer.com/news/security/rompetrol-gas-station-network-hit-by-hive-ransomware/ 9、PressReader平台遭到网络攻击导致系统中断 https://www.zdnet.com/article/pressreader-service-partially-returns-after-cyberattack-causes-outage/ 10、微软Azure漏洞可能允许攻击者访问客户账户 https://thehackernews.com/2022/03/microsoft-azure-autowarp-bug-could-have.html
网络安全日报 2022年03月08日
免责声明:以下内容原文来自互联网的公共方式,仅用于有限分享,译文内容不代表蚁景网安实验室观点,因此第三方对以下内容进行分享、传播等行为,以及所带来的一切后果与译者和蚁景网安实验室无关。以下内容亦不得用于任何商业目的,若产生法律责任,译者与蚁景网安实验室一律不予承担。 1、Firefox 紧急更新修补了两个被积极利用的零日漏洞 https://www.securityweek.com/emergency-firefox-update-patches-two-actively-exploited-zero-day-vulnerabilities 2、SharkBot 银行木马伪装成反病毒软件通过Google Play传播 https://securityaffairs.co/wordpress/128765/malware/sharkbot-trojan-google-play.html 3、Coinbase 阻止访问 25,000 个与俄罗斯个人和实体相关的加密货币地址 https://securityaffairs.co/wordpress/128775/digital-id/coinbase-blocked-25000-russian-addresses.html 4、铁威马存储 (TNAS) 设备中的高危漏洞可导致被远程攻击 https://thehackernews.com/2022/03/critical-bugs-in-terramaster-tos-could.html 5、钓鱼邮件针对石油和天然气公司分发恶意软件 https://blog.malwarebytes.com/threat-intelligence/2022/03/beware-of-malware-offering-warm-greetings-from-saudi-aramco/ 6、Adafruit公司遭到数据泄露暴露用户的信息 https://www.bleepingcomputer.com/news/security/adafruit-discloses-data-leak-from-ex-employees-github-repo/ 7、美国医疗保健提供商DRH Health数据泄露 https://www.duncanbanner.com/community/affected-patients-to-receive-information-about-drh-data-security-incident/article_4e5b6b88-9c19-11ec-b6af-8353d6989d4c.html 8、俄乌战争双方大量使用 Telegram进行虚假信息和黑客活动 https://thehackernews.com/2022/03/both-sides-in-russia-ukraine-war.html 9、FBI 获得了 Sci-Hub 创始人 Google 账号数据 https://torrentfreak.com/fbi-gains-access-to-sci-hub-founders-google-account-data-220303/ 10、因申请系统漏洞,日本6万人份外籍入境者信息遭泄露 http://d.youth.cn/shrgch/202203/t20220304_13497978.htm
密码学的安全性浅析-1
前言 我们一直都在说,密码学是网络空间安全领域的唯一理论支撑,大家都认为密码学是安全的压舱石。 密码学对安全的关键意义毋庸讳言,安全领域非密码学的师傅们而言,对于密码学的认识可能限于打CTF时接触的基础的凯撒密码、栅栏密码到涉及分析的padding oracle attack等,再到要读最新的论文手动编程才能求解的一些问题。 大家对密码学的安全性问题了解并不足够,本系列文章核心来自我们在学习相关文献时的学习记录,整理成文希望能够提升大家对”压舱石“安全性的认识。 具体而言,在本篇文章中,我们会介绍密码学的安全性的定义、如何保证安全性;之后会介绍古典密码及其本质的缺陷,然后引出一次一密;接着会定义攻击模型及安全目标,并通过分析引出随机性的重要性,为了便于理解,在文中会时刻举例说明,同时给出实际中由于对密码学安全性理解不足而发生过的安全事故。 安全性 密码学中的安全性与计算机中的安全性是存在区别的。 计算机安全,我们以软件安全为例,其目标是防止攻击者利用程序代码触发漏洞,而密码学安全的目标是使定义明确的问题无法求解。对于软件安全而言,一个软件要么是安全的,要么是不安全的,但是对于密码领域的程序而言,安全与否并不是绝对的,我们可以计算出破解加密算法所需的工作量,即量化其安全性,但是却不能绝对称其为安全。 密码学中的安全性可以分为两种:理论安全性与计算安全性。当攻击者拥有无限时间和资源还是不能破译密码时,称其为理论安全,也叫做无条件安全,下文会介绍的一次一密便是典型;而如果一个密码算法在给定时间和资源内无法被攻破,则称其为计算安全的,这与攻击者的能力、目标等条件密切相关,在下文我们会根据不同的条件建立不同的攻击模型与安全目标等。 举个例子,设一个密码算法E的密钥K是128比特,加密过程为C=E(K,P),已知一个明文-密文对(P,C),但是不知道K。 求K,这个问题不是理论安全的,因为我们可以穷举2^128种可能;但是这个问题是计算安全的,因为即使一秒钟可以穷举1000亿个K,要穷举 2^128个K要花费超过100 000 000 000 000 000 年的时间,在实践中是安全的。 形式化及度量 我们这里可以给出形式化的定义,设对于一个密码方案,攻击者最多能执行t个操作,攻击成功概率不高于ε,则该方案是(t,ε)-安全的,此时给出的是破解密码算法的难度的下限。注意,这意味着,没有攻击者能够在执行小于t次操作得情况下,获得概率为ε的成功率,但是这并不是说明攻击者执行t次就恰好可以成功,也不会说明需要具体多少次才能成功,所以t实际上是攻击算法所需的操作量的下界。 还是以攻击128比特密钥的对称密码算法为例,理想情况下,此密码对于1到2^128之间的任何t值都是 (t,2/2^12)-安全的,最好的攻击就是暴力破解。我们可以计算以下三种可能的攻击的成功概率: 1.t=1,说明攻击者尝试了一个密钥,并以ε=1/2^128的概率成功 2.t=2^128,说明攻击者尝试了所有密钥,其中一定有一个是成功的,所以成功概率ε=1 3.t=2^64,此时的成功概率ε= 2^-64,也就是说,攻击者尝试所有密钥的一小部分时,成功概率与尝试的密钥数量成正比。 从这个例子我们可以看出,对于1到2^n比特之间的任意t,一个n比特密钥的密码至多是 (t,t/2^n)-安全的,因为无论密码多强大,暴力破解总是可以成功的,实际中的关键就是在于能够抵抗暴力攻击多久。 我们可以对(t,ε)-安全进一步简化。我们说当攻击成功至少需要t次操作时,称其为t-安全,这里我们实际上假设ε是接近1的概率,通过比特表示安全性,”n比特安全“说明攻破它需要2^n次操作。 而直到操作次数后,我们就可以通过取其对数确定其安全强度。假设需要1000000次操作,则其安全强度为log2 1000000=20比特。 其他因素 虽然比特安全性在比较不同密码的安全强度时很有用,但是其没有提供足够的关于攻击成本的信息,仅仅通过比特安全性并不能说明什么,比如两个密码都有128比特密钥和128比特安全性,但是第一个密码比第二个快100倍。那么实际上对第二个密码进行暴力破解2^128次时,可以对第一个密码做 100x2^128次操作了,如果我们以第一个快密码为标准,那么破解慢密码需要 2^134.64次操作。 那么,这能够说明第二个密码比第一个密码安全吗?当然不行,所以我们还需要考虑其他因素。 并行性 设有两个攻击,每个攻击都需要2^56次操作,第一种攻击只能串行,第二种攻击可以并行。假设我们有 2^16=65536个处理器,那么可以将并行工作的负载分成65536个独立任务,每个任务只需要执行 2^40次操作即可。 也就是说,即使并行攻击和顺序攻击执行相同数量的操作,但是并行攻击比顺序攻击快65536倍。 内存 这实际上和攻击所用的空间成本有关,即攻击需要多次内存查找、内存访问速度、访问数据大小等,这些对时间的影响非常关键。例如在当前的CPU上,从寄存器读数据需要1个周期,从CPU缓存读数据需要20个周期,从DRAM读数据需要100个周期。 预计算 这一般被称作攻击的离线阶段,这些操作只需要执行一次,在后面的攻击中就可以重复使用。比如彩虹表破解hash就是这一类,虽然在计算彩虹表进行预计算时会花费大量时间,但是在实际攻击过程中很快就可以实施。 目标数量 攻击目标数量越多,攻击面就越大,攻击者就可以拿到更多关于密钥的信息。举个例子,设目标为n比特的密钥,需要2^n次尝试才能找到正确的密钥,但如果攻击目标为多个n比特密钥,即对于单个明文P,攻击者有M个不同的密文,其分别用M个n比特密钥加密得到。如果攻击者要破解的是M个密钥中的每一个,那么还是需要 2^n次操作,但是如果只需要破解M个中的一个,那么只需要 2^n/M次操作。 也就是说,攻击成本随着目标数量增加而降低。 安全性证明 要评估某密码算法的安全性,我们一般会通过数学证明得到。 在密码学中其被称为可证明安全性,它可以证明某个密码方案至少和解决另一个已知的困难问题是同等困难的,只要困难问题仍然存在,那么方案就是安全的,这种证明方式被称为规约,其来自复杂性理论。 安全性证明根据其所使用的困难问题的类型,可以分为两种:与数学问题相关、与密码问题相关。 与数学问题相关 破解这类方案至少与解决一些数学难题一样困难。 密码学中一个著名的数学难题就是大数分解,RSA正是依赖于它。RSA通过计算C=p^e mond n来加密明文p,其中,e和大数n=pq是公钥。 通过P=c^d mond n解密,其中d是和e、n有关的私钥。 如果我们可以分解n,那么就可以从公钥中恢复私钥来破解RSA;如果有私钥,就可以分解n。 换句话说,恢复RSA私钥和分解大数n是等价的困难问题,这就是我们所说的归约。 与密码问题相关 这类方案是与另一个密码方案比较,并证明只有破解第一个密码方案时,才能破解第二个密码方案。对称密码的安全性证明常用这种方式。 不过可证明安全性并不适用于所有类型的算法,有一些密码算法并没有被证明是安全的,如AES,AES不能规约到一些众所周知的难题,既不与数学问题相关,也不与密码问题相关,而我们之所以还用AES,是因为许多专家尝试破解它但是失败了。此时的安全性证明,我们成为启发式的:密码分析人员分析多轮后,密码算法的安全冗余还是很高,我们就相信它是安全的。 错误的安全性证明 我们已经说了安全性证明非常重要,但是密码学大佬们在进行安全性证明时仍然有可能犯错,对于OAEP的证明就是一个典型例子。OAEP是一种使用RSA实现安全加密的方法,在许多应用程序中使用,OAEP给出的安全性证明中声称其抵抗选择密文攻击的有效期为7年,但是后来大家研究发现证明是错误的,给出的结论也是错误的。之后给出了新的证明,结论是OAEP对选择密文攻击是安全的。 古典密码 古典密码是计算机发明之前的密码,算法作用在字母上而不是比特位上。古典密码中最经典的就是凯撒密码和维吉尼亚密码,二者的基础知识背景这里不再介绍。 凯撒密码   凯撒密码容易被破解,只需要把密文往前移动3位即可得到响应的明文。这种方式安全程度非常低,在古罗马时期经常被使用,不过实际上,前些年意大利警方还通过破译一种凯撒密码的变种抓到了黑手党头目。要增强凯撒密码的安全性,可以改变移位的位数,不过即使这么做了,攻击者最多尝试25次也就可以解密了。 维吉尼亚密码   维吉尼亚密码虽然比凯撒密码安全了很多,但还是容易被攻破。 举个例子,明文“THEY DRINK THE TEA"通过密钥”DUH“加密后的密文为”WBLBXYLHRWBLWYH“ 第一步找出密钥的长度。我们注意到密文中WBL出现了2次,间隔9个字母,这意味着相同的3个字母被用同样的移位模式加密,所以密钥长度要么是9,要么能够整除9.而在英语中,THE是最常出现的3个字母的组合,所以我们可以认为这个重复的3个字母为THE,那么可能的密钥就是DUH. 第二步使用频率分析法找出字母分布的不均匀性。在英语中E是最常见的字母,所以如果密文中X出现次数最多,那么X对应的明文很可能就是E 工作原理 通过上面对两种古典密码的简单分析,我们已经知道密码的工作原理主要就是置换和模式。 置换是指能够变换一个对象的函数,且对每个对象都有唯一的逆(如凯撒密码中的3字母移位),而模式则是通过置换处理任意长度的消息的算法(如凯撒密码中的模式就是对每个字母施加相同的置换,而维吉尼亚密码中则是对不同位置的字幕施加不同的置换) 置换 并不是任意置换都是安全的,为了保证安全,置换需要满足:密钥确定置换,只要密钥保密,则置换保密。不同的密钥确定不同的置换。置换应当看起来随机,经过置换的密文应该没有显著的特征或者可识别的模式。 如果满足以上条件,则称这种置换为安全置换,但是这仅是建立安全密码的必要不充分条件,因为其还和模式相关。 操作模式 在说明操作模式为什么也是建立安全密码的必要条件之前,我们举个例子。 假设我们现在已经有一种安全的置换:A->X,B->M,N->L 那么对于香蕉的英文BANANA则有密文:MXLXLX 我们注意到,仅仅对明文中的所有字母施加相同的置换,在密文中会表现出一种重复的模式,攻击者分析这种模式,即使不能获得完整的信息,但是也能获得一部分信息,比如在这个例子的密文中我们看到在字母的第2,4,6位出现相同的字母,在3,5位出现了相同的字母,如果攻击者知道密文对应的是一种水果,那么攻击者很容易推测出这是BANANA,而不是ORANGE等其他水果。 从这个例子可以看出模式的重要性,模式通过对相同的字母施加不同的置换从而降低了明文中重复字母在密文中表现出的特征的风险。以维吉尼亚密码为例,如果密钥长度为N,那么就有N种不同的置换被施加在连续长度为N的字母串上,不过如果N并非足够长,我们就可以通过频率分析对其进行攻击。所以,如果维吉尼亚密码并应用于加密与密钥长度相同的明文,则频率分析就失效了。 一次一密 我们回过头来在看古典密码,它注定是不安全的,以我们现在的计算能力分分钟就能攻破它。我们知道,为了确定安全,置换应该看起来是随机的,最好的方法就是从所有置换的集合中随机选择每个置换。实际上可以选择的置换有很多,对于字母表,有26!,约等于2^88种置换,但是古典密码却只能使用其中的一小部分。 此外,置换不仅仅可以通过字母移位进行,还可以使用其他操作如乘法、加法等,这便是现代密码了,比如给定128比特密钥,然后进行一定比特位的操作来加密单个字母。 古典密码是绝对不安全的,那么有没有绝对安全的密码呢? 有的,那便是我们这里有介绍的一次一密。 一次一密有绝对的保密性,即使攻击者有无限的计算能力,也无法了解除明文长度以外的任何信息。 设明文为P,密钥为K,其长度与P相等,密文为C,则一次一密的加密过程为:   这个符号是异或运算符 解密则是   一次一密的关键在于密钥K只能使用一次。如果使用两次,设分别将明文P1,P2加密为C1,C2,则攻击者通过如下运算   可以得到P1,P2的异或结果,从而导致信息泄露(当攻击者这知道一条明文时,就可以通过上式结果推出另一条明文) 一次一密的不便之处在于密钥长度需要和明文一样,除了这个缺点外,是非常完美的。香农在上世纪40年代的时候就已经证明了其安全性。 香农指出,要实现完美的保密,一次一密的密钥必须至少与明文一样长,这样攻击者就无法在给定密文的情况下排除任何可能的明文。 这是非常直观的,如果K是随机的,那么C也是随机的,因为随机字符串与任何固定字符串异或得到的结果也是随机的。随机比特串第一位为0的概率为1/2,一个随机比特与另一比特异或的结果为0的概率为1/2,在任意长度的比特串上这一点都成立。换句话说,对于不知道K的攻击者而言,即使其拥有的时间和算力是无限的,但是对他而言C依然是随机的。 假设C长度为128比特,那么有2^128种可能的密文,对于攻击者而言, 就有2^128种可能的明文。如果密钥长度小于128,即可能的密钥少于 2^128种,那么攻击者可以排除某些明文。比如密钥为64比特,那么攻击者可以确定 2^64种可能的明文,这就排除了大多数的128位比特串。 此时攻击者可能不知道明文是什么,但是其知道明文不是什么,从而破坏了完美保密性。 现在我们已经知道,古典密码不安全,一次一密不实用,那么怎么设计安全和实用兼顾的密码呢? 攻击模型与安全性 如果一个密码体制是安全的,必须要定义好对应的攻击模型和安全性目标。攻击模型是关于攻击者可能与密码算法如何交互以及攻击者能力的一系列假设。在进一步分析之前,我们要先了解Kerckhoff原则,其指出,密码的安全性应仅取决于密钥的保密性,而不应取决于密码算法的保密性。 黑盒模型 如果攻击者只能看到密码模型的输入和输出,则称其为黑盒模型。黑盒模型中依据从最弱到最强的顺序列举如下: 唯密文攻击(ciphertext-only attackers,COA):仅知道密文,但不知道相关的明文,也不知道有哪些可以选择的明文。此时攻击者是完全被动的,无法执行加密或解密操作 已经明文攻击(known-plaintext attackes,KPA):知道密文以及其对应的明文。此时攻击者也是被动的,不过它可以获得一系列明文-密文对,其中明文是随机选择的。 选择明文攻击(chosen-plaintext attacks,CPA):可以对选定的明文进行加密并得到对应的密文。此时的攻击者是主动的 选择密文攻击(chosen-ciphertext attackers,CCA):可以进行加密和解密。注意,这个模型只是表示攻击者可以介入加密和查看明文的情况,其解密的内容并不一定足以攻破系统。 灰盒模型 灰盒模型中,攻击者可以访问密码的实现,比如对于智能卡、嵌入式系统等,攻击者对其拥有物理访问权限,从而可以篡改算法的内部结构。这类模型中最典型的一类就是侧信道攻击。 侧信道攻击依赖于密码实现的信息源,攻击者观察密码实施时的模型特征,比如对于软件而言,可以观察其执行时间、错误消息、返回值、分支等,对于硬件而言,可以观察其功耗、电磁辐射等。 侵入式攻击也属于灰盒模型,其可以通过激光故障注入等方法改变芯片的行为。 安全目标 我们之前一直都没有明确定义密码的安全目标,只是笼统地说,能让攻击者对密码一无所示的就是好方法,实际上这是远远不够的。实际上,已经有两个常用的安全目标了。 1.不可区分性(indistinguishability,IND):密文应与随机字符串没有区别。关于这一点,可以通过一个game说明。 设攻击者选定两个明文,收到两者的密文之一,攻击者无法分辨出这是哪个明文对应的密文 2.不可展性(non-malleability,NM):给定密文C1,应该不可能创建另一个密文C2,使其对应的明文P2以有意义的方式与P1相关 IND-CPA 上述的安全目标仅在于具体的攻击模型结合时才有用,一般我们会写作GOAL-MODEL,如IND-CPA,表示的是针对选择明文攻击者的不可区分性。 以IND-CPA为例,这是最重要的安全概念之一,这也称为语义安全,只要密钥保密,密文就不会泄露任何有关明文的信息,当对同一明文加密两次时,加密系统会返回不同的密文。 IND-CPA的关键是随机化,我们还是以IND game为例。设攻击者选择两个明文P1,P2并接受两个明文之一对应的密文但是不知道它对应的是哪一个明文。在CPA模型中,攻击者可以执行加密以获得大C1=E(K,P1),C2=E(K,P2),如果加密不是随机的,那么攻击者查询Ci是否等于C1或C2就可以确定对哪个明文加密,从而赢得game。 实现IND-CPA最简单的方式就是使用确定性随机比特发生器(deterministic random generator,DRBG),它可以返回给定的某些秘密值的随机比特: E(K,R,P)=(DBRG(K||R)异或P,R) 上式中的R是每次加密随机选择的字符串,并与密钥K一起提供给DRBG,如果其生成的是真随机比特串,那么该密码的就是IND-CPA安全的。 这里我们只是简单分析了IND-CPA,这种GOAL-MODEL组合还有很多,比如NM-CPA,NM-CCA,IND-CPA,IND-CCA等,他们之间的一些关系是很明显的:IND-CCA蕴含着IND-CPA,NM-CCA蕴含着NM-CPA,因为CPA攻击者可以做的事情CCA攻击者也可以做。 以上我们都还是考虑了对称密码,对于非对称密码而言,由于任何攻击者都可以使用公钥加密,所以模型默认都是CPA的 弱密码算法 尽管我们已经介绍了相关的密码学概念,但是在实际中如果没有选择适当的密码算法、模型等,还是会造成严重的危害。 在GSM时代,手机通信的加密使用了A5/1的算法,通过建立查找表便可以对其进行攻击。在参考连接6中,可以看到详细的情况。 错误模型 即使密码使用者学习过安全模型,但还是有可能使用错误模型。很多通信协议确实使用了在CPA或CCA中安全的算法,但是实际中有些攻击是不需要涉及CPA中的加密查询或CCA中的解密查询的,比如对于Padding oracle attack而言,只需要进行有效性查询即可,在这种攻击方案下,只有密文对应的明文有适当的填充时,密文才有效,如果填充不正确,解密就会失败,攻击者可以通过观察解密是否失败进行攻击。 这种攻击方案,打CTF的师傅们应该很熟悉了,这里也不再进一步说明,有兴趣的话也可以参考《白帽子讲web安全》中的相关章节。 随机性 我们已经知道,在密码系统中,需要随机性来保证安全。可以说,其中的关键就在于随机比特的生成,其依赖于熵源以及从熵源产生随机比特的算法。 熵源由随机数发生器(RNG)提供,算法由伪随机数发生器(PRNG)提供。 RNG的作用是利用模拟世界中的熵在数字系统中生成不可预测的比特,比如从温度、噪声、静电测量中采样出比特信息,也可以从传感器,IO,系统日志等提取正在运行的OS中的熵。而PRNG的作用则是从一些真正随机的比特生成许多人为的随机比特。 总结来说,RNG以非确定的方式从模拟源生成真随机比特,不保证高熵,而PRNG以确定的方式从数字源生成看起来随机的比特,并具有最大熵。 在随机性方面可能出现哪些问题呢? 熵源不理想 一开始的Netscape浏览器的SSL代码是根据如下所示的伪码计算出128比特的PRNG种子的   这里的问题在于,PID和microseconds是可以被猜测的,如果可以猜到seconds,那么microseconds就只有10^6个可能的值 这是Log(10^6)的熵,大约20比特 另外,PID和PPID各15比特,所以本应有15+15=30比特的熵,但是在标注的1中,可看到,PPID和PID有3比特的重叠,所以只能产生15+12=27比特的熵 所以一共的熵为20+27=47比特,但是128比特的种子应该128比特的熵才对。这是熵源不理想的典型例子。 启动时熵不足 前些年有研究人员扫描整个互联网并从TLS证书和SSL主机中提取公钥,发现一些系统具有相同的公钥,私钥也非常相似。这是非常不合常理的,因为一般情况下,对于两个不同的大数n=pq,n'=p'q',p与p'不相等,q与q'不相等,但是研究人员发现经常会有n与n'不相等的情况下,p=p' 后面发现这其中的原因是,尽管使用了不错的PRNG,但由于在初次启动时会尽早生成公钥,所以在收集到足够的熵之前,如果基础熵源选取相同,那么不同系统中的PRNG会产生相同的随机比特。 会生成相同的密钥,是由于以下伪码中的密钥生成方案造成的   如果两个系统的种子相同,运行上述代码后会生成相同的p,q,也就会生成相同的n。而只有研究人员发现的,在不同密钥中存在共享素数,则是因为在密钥生成过程中注入了额外的熵,如下所示   如果两个系统使用相同的种子运行上述代码,会生成相同的p,但是由于prng.add_entropy()注入了熵,会得到不同的q 对于n=pq,n'=pq'的情况,会有什么为题呢? 这里的关键在于,通过计算n和n‘的最大公约数就可以恢复出p。 非加密PRNG PRNG很常见,在不涉及密码学的场合中也有其身影,我们可以分为加密PRNG和非加密PRNG。非加密PRNG的作用一般是用于生成良好均匀的分布,常用于科学模型、视频游戏中,它只关心比特之间的概率分布的质量,但是不关心它的可预测性,所以在密码程序中不应使用非加密PRNG. 但是实际上,很多编程语言中都用的是非加密PRNG,比如libc中的rand,drand48,PHP中的rand,mt_rand,Python中的random模运算,Ruby中的Random类等。最常见的非加密PRNG就是Mersenne Twister(MT)算法了,它可以产生没好友统计偏差的符合一致分布的随机比特,但是这些比特是可预测的,给定一些MT产生的一些比特,可以预测接下来会出现哪些比特。 MT算法比加密PRNG简单多了,其内部状态是一个由624个32比特字组成的数组S,其初始值为S1,S2,...S624,运行一次后变为S2,...S625...其中的Sk+624可以通过如下计算:   初始状态的比特可以表示为输出比特之间的异或,反之亦然。 如果将其应用于密码系统则会造成危害。 MediaWiki使用随机性生成诸如安全令牌、临时密码等信息,按理来说,此处的随机性应是不可预测的,但是旧版本的MediaWiki使用了非加密PRNG来生成这些令牌和密码,其源码部分如下   从代码中可以看到mt_rand() 这就是我们一直在说的Mersenne Twister,利用它攻击者就可以预测未来的令牌和临时密码。 参考 1.Shoup V. OAEP reconsidered[C]//Annual International Cryptology Conference. Springer, Berlin, Heidelberg, 2001: 239-259. 2.https://www.semanticscholar.org/paper/Understanding-brute-force-Bernstein/3bf374700ec98ea5d1b7658ec85c472f2fe4d952 3.https://link.springer.com/article/10.1007/s00145-003-0213-5 4.https://dl.acm.org/doi/10.1145/800070.802212 5.https://www.schneier.com/academic/archives/1998/01/cryptanalytic_attack.html 6.https://zh.wikipedia.org/wiki/A5/1 7.https://guidanceshare.com/wiki/Non-cryptographic_PRNG 8.https://www.mediawiki.org/wiki/Manual:Config_script/it 9.https://blog.cryptographyengineering.com/2012/03/09/surviving-bad-rng/ 10.https://www.cs.umd.edu/class/fall2018/cmsc818O/papers/ps-and-qs.pdf
CVE-2021-42013 Apache HTTP Server 路径穿越漏洞
前言 CVE-2021-42013为目录穿越文件读取漏洞,影响 httpd 2.4.49,CVE编号为CVE-2021-41773, https 2.4.50不完全修复可绕过,如果开启 mod_cgi 则可RCE。 分析 CVE-2021-41773复现分析如下: 利用网上师傅的docker镜像 docker run -p 8080:80 -d --privileged turkeys/httpd:cve-2021-41773 环境中有安装好的 pwndbg 插件,直接按步调试即可,这里参考Betta师傅的文章 正文 CVE-2021-41773不完全的修复导致了 CVE-2021-42013 可用的 payload 有 /%2%65.//%2%65%2e//.%2%65//%2e%2%65/  /%2%65%2%65//%%32e%%32e//%25%32%65%25%32%65/ # 无法生效 ap_normalize_path 不能将 %25 进行url解码处理后为 %  我们注意到 https 2.4.50 中添加了补丁 添加的补丁是对 .%2e 和 %2e%2e 进行了校验,但是我们在 request.c 中注意到还会调用 ap_unescape_url 来对 url 进行又一次的编码,所以通过两次编码就可以绕过 request.c::ap_process_request_internal util.c:ap_normalize_path 返回结果为一次编码后的结果 util.c:ap_unescape_url util.c:ap_unescape_url 我们看到此时保存值的指针地址 0x7fa06c00a1f0 ◂— '/cgi-bin/%2e./%2e./%2e./%2e./%2e./etc/passwd' 函数执行结束后 打印出 0x7fa06c00a1f0  对应的值 发现已经对 url 进行了再一次的解码 命令执行 在 /etc/httpd/httpd.conf 配置文件中去掉 mod_cgid.so 的注释 结语 至此,CVE-2021-42013的漏洞分析到此结束,如有不当感谢师傅指出!!! 参考链接 https://mp.weixin.qq.com/s/IYbaDLrMJBT0yb4xT3UYWg
第2页 第3页 第4页 第5页 第6页 第7页 第8页 第9页 第10页 第11页 第12页 第13页 第14页 第15页 第16页 第17页 第18页 第19页 第20页 第21页 第22页 第23页 第24页 第25页 第26页 第27页 第28页 第29页 第30页 第31页 第32页 第33页 第34页 第35页 第36页 第37页 第38页 第39页 第40页 第41页 第42页 第43页 第44页 第45页 第46页 第47页 第48页 第49页 第50页 第51页 第52页 第53页 第54页 第55页 第56页 第57页 第58页 第59页 第60页 第61页 第62页 第63页 第64页 第65页 第66页 第67页 第68页 第69页 第70页 第71页 第72页 第73页 第74页 第75页 第76页 第77页 第78页 第79页 第80页 第81页 第82页 第83页 第84页 第85页 第86页 第87页 第88页 第89页 第90页 第91页 第92页 第93页 第94页 第95页 第96页 第97页 第98页 第99页 第100页 第101页 第102页 第103页 第104页 第105页 第106页 第107页 第108页 第109页 第110页 第111页 第112页 第113页 第114页 第115页 第116页 第117页 第118页 第119页 第120页 第121页 第122页 第123页 第124页 第125页 第126页 第127页 第128页 第129页 第130页 第131页 第132页 第133页 第134页 第135页 第136页 第137页 第138页 第139页 第140页 第141页 第142页 第143页 第144页 第145页 第146页 第147页 第148页 第149页 第150页 第151页 第152页 第153页 第154页 第155页 第156页 第157页 第158页 第159页 第160页 第161页 第162页 第163页 第164页 第165页 第166页 第167页 第168页 第169页 第170页 第171页 第172页 第173页 第174页 第175页 第176页 第177页 第178页 第179页 第180页 第181页 第182页 第183页 第184页 第185页 第186页 第187页 第188页 第189页 第190页 第191页 第192页 第193页 第194页 第195页 第196页 第197页 第198页 第199页 第200页 第201页 第202页 第203页 第204页 第205页 第206页 第207页 第208页 第209页 第210页 第211页 第212页 第213页 第214页 第215页 第216页 第217页 第218页