成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

聊一聊隨機(jī)數(shù)安全那些事兒

安全 數(shù)據(jù)安全
本文主要聊一下隨機(jī)數(shù),隨機(jī)數(shù)其實(shí)是非常廣泛的,可以說也是密碼技術(shù)的基礎(chǔ)。

0x00 簡介

和朋友聊到一個(gè)比較有意思的現(xiàn)象,在最近兩年的校招面試中,大部分同學(xué)連一點(diǎn)基礎(chǔ)的密碼學(xué)知識都沒有, 即便是有一些滲透功底的同學(xué)。

所以這里想和大家聊一些簡單的密碼學(xué)基礎(chǔ)知識,不涉及算法實(shí)現(xiàn),更多的是和常見的漏洞場景聯(lián)系起來,讓問題更容易理解,有點(diǎn)拋磚引玉的意思。

本文主要聊一下隨機(jī)數(shù),隨機(jī)數(shù)其實(shí)是非常廣泛的,可以說也是密碼技術(shù)的基礎(chǔ)。

對隨機(jī)數(shù)的使用不當(dāng)很可能會導(dǎo)致一些比較嚴(yán)重的安全問題, 并且這些安全問題通常會比較隱蔽。

0x01 隨機(jī)數(shù)

概述

隨機(jī)數(shù)在計(jì)算機(jī)應(yīng)用中使用的比較廣泛,最為熟知的便是在密碼學(xué)中的應(yīng)用。本文主要是講解隨機(jī)數(shù)使用導(dǎo)致的一些Web安全風(fēng)。

我們先簡單了解一下隨機(jī)數(shù)

 

[[166980]]

 

 

p3

 

分類

隨機(jī)數(shù)分為真隨機(jī)數(shù)和偽隨機(jī)數(shù),我們程序使用的基本都是偽隨機(jī)數(shù),其中偽隨機(jī)又分為強(qiáng)偽隨機(jī)數(shù)和弱偽隨機(jī)數(shù)。

真隨機(jī)數(shù),通過物理實(shí)驗(yàn)得出,比如擲錢幣、骰子、轉(zhuǎn)輪、使用電子元件的噪音、核裂變等

偽隨機(jī)數(shù),通過一定算法和種子得出。軟件實(shí)現(xiàn)的是偽隨機(jī)數(shù)

強(qiáng)偽隨機(jī)數(shù),難以預(yù)測的隨機(jī)數(shù)

弱偽隨機(jī)數(shù),易于預(yù)測的隨機(jī)數(shù)

特性

隨機(jī)數(shù)有3個(gè)特性,具體如下:

隨機(jī)性:不存在統(tǒng)計(jì)學(xué)偏差,是完全雜亂的數(shù)列

不可預(yù)測性:不能從過去的數(shù)列推測出下一個(gè)出現(xiàn)的數(shù)

不可重現(xiàn)性:除非將數(shù)列本身保存下來,否則不能重現(xiàn)相同的數(shù)列

隨機(jī)數(shù)的特性和隨機(jī)數(shù)的分類有一定的關(guān)系,比如,弱偽隨機(jī)數(shù)只需要滿足隨機(jī)性即可,而強(qiáng)位隨機(jī)數(shù)需要滿足隨機(jī)性和不可預(yù)測性,真隨機(jī)數(shù)則需要同時(shí)滿足3個(gè)特性。

引發(fā)安全問題的關(guān)鍵點(diǎn)在于不可預(yù)測性。

偽隨機(jī)數(shù)的生成

我們平常軟件和應(yīng)用實(shí)現(xiàn)的都是偽隨機(jī)數(shù),所以本文的重點(diǎn)也就是偽隨機(jī)數(shù)。

偽隨機(jī)數(shù)的生成實(shí)現(xiàn)一般是算法+種子。

具體的偽隨機(jī)數(shù)生成器PRNG一般有:

線性同余法

單向散列函數(shù)法

密碼法

ANSI X9.17

比較常用的一般是線性同余法,比如我們熟知的C語言的rand庫和Java的java.util.Random類,都采用了線性同余法生成隨機(jī)數(shù)。

應(yīng)用場景

隨機(jī)數(shù)的應(yīng)用場景比較廣泛,以下是隨機(jī)數(shù)常見的應(yīng)用場景:

驗(yàn)證碼生成

抽獎(jiǎng)活動

UUID生成

SessionID生成

Token生成

CSRF Token

找回密碼Token

游戲(隨機(jī)元素的生成)

洗牌

俄羅斯方塊出現(xiàn)特定形狀的序列

游戲爆裝備

密碼應(yīng)用場景

生成密鑰:對稱密碼,消息認(rèn)證

生成密鑰對:公鑰密碼,數(shù)字簽名

生成IV: 用于分組密碼的CBC,CFB和OFB模式

生成nonce: 用于防御重放攻擊; 分組密碼的CTR模式

生成鹽:用于基于口令的密碼PBE等

0x02 隨機(jī)數(shù)的安全性

相比其他密碼技術(shù),隨機(jī)數(shù)很少受到關(guān)注,但隨機(jī)數(shù)在密碼技術(shù)和計(jì)算機(jī)應(yīng)用中是非常重要的,不正確的使用隨機(jī)數(shù)會導(dǎo)致一系列的安全問題。

隨機(jī)數(shù)的安全風(fēng)險(xiǎn)

隨機(jī)數(shù)導(dǎo)致的安全問題一般有兩種

應(yīng)該使用隨機(jī)數(shù),開發(fā)者并沒有使用隨機(jī)數(shù);

應(yīng)該使用強(qiáng)偽隨機(jī)數(shù),開發(fā)者使用了弱偽隨機(jī)數(shù)。

第一種情況,簡單來講,就是我們需要一個(gè)隨機(jī)數(shù),但是開發(fā)者沒有使用隨機(jī)數(shù),而是指定了一個(gè)常量。當(dāng)然,很多人會義憤填膺的說,sb才會不用隨機(jī)數(shù)。但是,請不要忽略我朝還是有很多的。主要有兩個(gè)場景:

開發(fā)者缺乏基礎(chǔ)常識不知道要用隨機(jī)數(shù);

一些應(yīng)用場景和框架,接口文檔不完善或者開發(fā)者沒有仔細(xì)閱讀等原因。

比如找回密碼的token,需要一個(gè)偽隨機(jī)數(shù),很多業(yè)務(wù)直接根據(jù)用戶名生成token;

比如OAuth2.0中需要第三方傳遞一個(gè)state參數(shù)作為CSRF Token防止CSRF攻擊,很多開發(fā)者根本不使用這個(gè)參數(shù),或者是傳入一個(gè)固定的值。由于認(rèn)證方無法對這個(gè)值進(jìn)行業(yè)務(wù)層面有效性的校驗(yàn),導(dǎo)致了OAuth的CSRF攻擊。

第二種情況,主要區(qū)別就在于偽隨機(jī)數(shù)的強(qiáng)弱了,大部分(所有?)語言的API文檔中的基礎(chǔ)庫(常用庫)中的random庫都是弱偽隨機(jī),很多開發(fā)自然就直接使用。但是,最重要也最致命的是,弱偽隨機(jī)數(shù)是不能用于密碼技術(shù)的。

還是第一種情況中的找回密碼場景,關(guān)于token的生成, 很多開發(fā)使用了時(shí)間戳作為隨機(jī)數(shù)(md5(時(shí)間戳),md5(時(shí)間戳+用戶名)),但是由于時(shí)間戳是可以預(yù)測的,很容易就被猜解。不可預(yù)測性是區(qū)分弱偽隨機(jī)數(shù)和強(qiáng)偽隨機(jī)數(shù)的關(guān)鍵指標(biāo)。

當(dāng)然,除了以上兩種情況,還有一些比較特別的情況,通常情況下比較少見,但是也不排除:

種子的泄露,算法很多時(shí)候是公開的,如果種子泄露了,相當(dāng)于隨機(jī)數(shù)已經(jīng)泄露了;

隨機(jī)數(shù)池不足。這個(gè)嚴(yán)格來說也屬于弱偽隨機(jī)數(shù),因?yàn)殡S機(jī)數(shù)池不足其實(shí)也導(dǎo)致了隨機(jī)數(shù)是可預(yù)測的,攻擊者可以直接暴力破解。

漏洞實(shí)例

wooyun上有很多漏洞,還蠻有意思的,都是和隨機(jī)數(shù)有關(guān)的。

PS:個(gè)人實(shí)力有限,以下實(shí)例基本都來自wooyun漏洞實(shí)例,在這里謝謝各位大牛,如有侵權(quán),請聯(lián)系刪除。

1.應(yīng)該使用隨機(jī)數(shù)而未使用隨機(jī)數(shù)

Oauth2.0的這個(gè)問題特別經(jīng)典,除了wooyun實(shí)例列出來的,其實(shí)很多廠商都有這個(gè)問題。

Oauth2.0中state參數(shù)要求第三方應(yīng)用的開發(fā)者傳入一個(gè)CSRF Token(隨機(jī)數(shù)),如果沒有傳入或者傳入的不是隨機(jī)數(shù),會導(dǎo)致CSRF登陸任意帳號:

唯品會賬號相關(guān)漏洞可通過csrf登錄任意賬號

人人網(wǎng)-百度OAuth 2.0 redirect_uir CSRF 漏洞

2.使用弱偽隨機(jī)數(shù)

1) 密碼取回

很多密碼找回的場景,會發(fā)送給用戶郵件一個(gè)url,中間包含一個(gè)token,這個(gè)token如果猜測,那么就可以找回其他用戶的密碼。

1.Shopex 4.8.5密碼取回處新生成密碼可預(yù)測漏洞

直接使用了時(shí)間函數(shù)microtime()作為隨機(jī)數(shù),然后獲取MD5的前6位。

  1. substr(md5(print_r(microtime(),true)),0,6); 

PHP 中microtime()的值除了當(dāng)前服務(wù)器的秒數(shù)外,還有微秒數(shù),微妙數(shù)的變化范圍在0.000000 -- 0.999999 之間,一般來說,服務(wù)器的時(shí)間可以通過HTTP返回頭的DATE字段來獲取,因此我們只需要遍歷這1000000可能值即可。但我們要使用暴力破解的方式發(fā)起1000000次網(wǎng)絡(luò)請求的話,網(wǎng)絡(luò)請求數(shù)也會非常之大。可是shopex非常貼心的在生成密碼前再次將microtime() 輸出了一次:

  1. $messenger = &$this->system->loadModel('system/messenger');echo microtime()."<br/>"; 

2.奇虎360任意用戶密碼修改

直接是MD5(unix時(shí)間戳)

3.涂鴉王國弱隨機(jī)數(shù)導(dǎo)致任意用戶劫持漏洞,附測試POC

關(guān)于找回密碼隨機(jī)數(shù)的問題強(qiáng)烈建議大家參考拓哥的11年的文章《利用系統(tǒng)時(shí)間可預(yù)測破解java隨機(jī)數(shù)| 空虛浪子心的靈魂》

2) 其他隨機(jī)數(shù)驗(yàn)證場景

CmsEasy最新版暴力注入(加解密缺陷/繞過防注入)

弱偽隨機(jī)數(shù)被繞過

Espcms v5.6 暴力注入

Espcms中一處SQL注入漏洞的利用,利用時(shí)發(fā)現(xiàn)espcms對傳值有加密并且隨機(jī)key,但是這是一個(gè)隨機(jī)數(shù)池固定的弱偽隨機(jī)數(shù),可以被攻擊者遍歷繞過

Destoon B2B 2014-05-21最新版繞過全局防御暴力注入(官方Demo可重現(xiàn))

使用了microtime()作為隨機(jī)數(shù),可以被預(yù)測暴力破解

Android 4.4之前版本的Java加密架構(gòu)(JCA)中使用的Apache Harmony 6.0M3及其之前版本的SecureRandom實(shí)現(xiàn)存在安全漏洞,具體位于classlib/modules/security/src/main/java/common/org/apache/harmony/security/provider/crypto/SHA1PRNG_SecureRandomImpl.java

類的engineNextBytes函數(shù)里,當(dāng)用戶沒有提供用于產(chǎn)生隨機(jī)數(shù)的種子時(shí),程序不能正確調(diào)整偏移量,導(dǎo)致PRNG生成隨機(jī)序列的過程可被預(yù)測。

Android SecureRandom漏洞詳解

安全建議

上面講的隨機(jī)數(shù)基礎(chǔ)和漏洞實(shí)例更偏重是給攻擊者一些思路,這里更多的是一些防御和預(yù)防的建議。

業(yè)務(wù)場景需要使用隨機(jī)數(shù),一定要使用隨機(jī)數(shù),比如Token的生成;

隨機(jī)數(shù)要足夠長,避免暴力破解;

保證不同用處的隨機(jī)數(shù)使用不同的種子

對安全性要求高的隨機(jī)數(shù)(如密碼技術(shù)相關(guān))禁止使用的弱偽隨機(jī)數(shù):

不要使用時(shí)間函數(shù)作為隨機(jī)數(shù)(很多程序員喜歡用時(shí)間戳) Java:system.currenttimemillis() php:microtime()

不要使用弱偽隨機(jī)數(shù)生成器 Java: java.util.Random PHP: rand() 范圍很小,32767 PHP: mt_rand() 存在缺陷

強(qiáng)偽隨機(jī)數(shù)CSPRNG(安全可靠的偽隨機(jī)數(shù)生成器(Cryptographically Secure Pseudo-Random Number Generator)的各種參考

 

聊一聊隨機(jī)數(shù)安全那些事兒

 

6.強(qiáng)偽隨機(jī)數(shù)生成(不建議開發(fā)自己實(shí)現(xiàn))

產(chǎn)生高強(qiáng)度的隨機(jī)數(shù),有兩個(gè)重要的因素:種子和算法。算法是可以有很多的,通常如何選擇種子是非常關(guān)鍵的因素。 如Random,它的種子是System.currentTimeMillis(),所以它的隨機(jī)數(shù)都是可預(yù)測的, 是弱偽隨機(jī)數(shù)。

強(qiáng)偽隨機(jī)數(shù)的生成思路:收集計(jì)算機(jī)的各種信息,鍵盤輸入時(shí)間,內(nèi)存使用狀態(tài),硬盤空閑空間,IO延時(shí),進(jìn)程數(shù)量,線程數(shù)量等信息,CPU時(shí)鐘,來得到一個(gè)近似隨機(jī)的種子,主要是達(dá)到不可預(yù)測性。

0x03 附

參考資料:

http://www.inbreak.net/archives/349

http://drops.wooyun.org/papers/1066

《白帽子講Web安全》

《圖解密碼技術(shù)》

責(zé)任編輯:藍(lán)雨淚 來源: 烏云知識庫
相關(guān)推薦

2015-06-08 15:55:03

公有云IaaS

2020-08-12 08:34:16

開發(fā)安全We

2019-03-21 11:04:22

安全標(biāo)準(zhǔn)信息

2019-07-01 14:55:44

應(yīng)用安全web安全滲透測試

2020-01-03 11:04:54

安全測試滲透

2022-07-19 08:01:08

Azure云環(huán)境安全

2016-01-15 09:51:27

AngularJS實(shí)際應(yīng)用

2020-02-02 13:59:59

MySQL數(shù)據(jù)庫線程

2024-10-12 14:40:03

多協(xié)議數(shù)采盒工業(yè)物聯(lián)網(wǎng)

2023-09-22 17:36:37

2021-01-28 22:31:33

分組密碼算法

2020-05-22 08:16:07

PONGPONXG-PON

2020-03-31 10:08:15

零信任安全軟件

2018-06-07 13:17:12

契約測試單元測試API測試

2022-02-09 16:23:07

網(wǎng)絡(luò)安全零信任技術(shù)

2022-06-17 11:03:11

5G安全隱私

2019-02-13 14:15:59

Linux版本Fedora

2021-08-04 09:32:05

Typescript 技巧Partial

2021-01-29 08:32:21

數(shù)據(jù)結(jié)構(gòu)數(shù)組
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 欧美精品一级 | 久久久一二三区 | 日韩www | 在线亚洲一区二区 | 一级片在线视频 | 国内精品一区二区三区 | 狠狠操电影 | 免费毛片网站在线观看 | 久久精品国产清自在天天线 | 成人精品鲁一区一区二区 | 日批免费在线观看 | 久久www免费人成看片高清 | 久久久影院 | 亚洲人成在线观看 | 国产精品欧美一区二区三区 | 有码一区 | av免费成人| 免费亚洲网站 | 久久久久无码国产精品一区 | 国产永久免费 | 日韩精品视频在线观看一区二区三区 | 国产成人免费视频网站高清观看视频 | 欧美日韩亚洲一区二区 | 99久久99久久精品国产片果冰 | 国产91网站在线观看 | 中文字幕91av | 日韩精品区 | 国产黄色大片在线观看 | 亚洲高清三级 | 久久久久一区二区三区 | 综合一区 | 国产一区二区三区 | 91九色在线观看 | 色综合久久天天综合网 | 亚洲免费网站 | 亚洲色欲色欲www | 精品一区在线免费观看 | 欧美精品首页 | 中日字幕大片在线播放 | 国产一区久久 | 伊人网国产 |