Google驗(yàn)證器驗(yàn)證及安全防御研究
1.Google驗(yàn)證器簡(jiǎn)介
1.1 Google驗(yàn)證器使用場(chǎng)景
Google驗(yàn)證器(Google Authenticator)的應(yīng)用場(chǎng)景廣泛,主要用于提供額外的安全保護(hù),以防止各平臺(tái)賬戶遭到惡意攻擊。以下是Google驗(yàn)證器的一些主要應(yīng)用場(chǎng)景:
1.身份驗(yàn)證
Google驗(yàn)證器可用于用戶的身份驗(yàn)證過程。用戶安裝手機(jī)客戶端并生成臨時(shí)的身份驗(yàn)證碼,然后提交到服務(wù)器進(jìn)行驗(yàn)證。這樣,即使密碼被竊取,沒有動(dòng)態(tài)驗(yàn)證碼也無法登錄賬戶,增強(qiáng)了賬戶的安全性。
2.金融服務(wù)
在金融平臺(tái)、銀行、投資公司等場(chǎng)景中,Google驗(yàn)證器常被用于提供額外的安全層。用戶可以在登錄時(shí)輸入由Google驗(yàn)證器生成的動(dòng)態(tài)驗(yàn)證碼,以確認(rèn)身份并授權(quán)交易或操作。
3.在線服務(wù)
Google驗(yàn)證器可以與各種在線賬戶綁定,如電子郵件、社交媒體、云服務(wù)等。用戶可以通過輸入由Google驗(yàn)證器生成的動(dòng)態(tài)驗(yàn)證碼來登錄這些賬戶,提高賬戶的安全性。
4.遠(yuǎn)程訪問
對(duì)于需要遠(yuǎn)程訪問公司網(wǎng)絡(luò)或服務(wù)器的場(chǎng)景,Google驗(yàn)證器可以作為額外的安全層。員工在嘗試遠(yuǎn)程連接時(shí),除了輸入用戶名和密碼外,還需要提供由Google驗(yàn)證器生成的動(dòng)態(tài)驗(yàn)證碼,以確認(rèn)其身份并授權(quán)遠(yuǎn)程訪問。
5.API 調(diào)用
在進(jìn)行 API 調(diào)用時(shí),為了驗(yàn)證請(qǐng)求的合法性,Google驗(yàn)證器可以生成動(dòng)態(tài)驗(yàn)證碼,與 API 請(qǐng)求一起發(fā)送到服務(wù)器進(jìn)行驗(yàn)證。這樣可以防止未授權(quán)的 API 調(diào)用和潛在的安全風(fēng)險(xiǎn)。
總的來說,Google驗(yàn)證器廣泛應(yīng)用于各種場(chǎng)景,旨在提高賬戶和數(shù)據(jù)的安全性。無論是在金融服務(wù)、在線服務(wù)、遠(yuǎn)程訪問還是API調(diào)用等方面,Google驗(yàn)證器都能提供有效的安全保護(hù)。
1.2 使用Google驗(yàn)證器的優(yōu)勢(shì)
使用Google驗(yàn)證器有以下優(yōu)勢(shì):
1.提高安全性
Google驗(yàn)證器采用基于時(shí)間的一次性密碼(TOTP)算法,每次登錄都會(huì)生成一個(gè)新的動(dòng)態(tài)驗(yàn)證碼。這種方式可以大大提高賬戶的安全性,防止未經(jīng)授權(quán)的訪問。即使密碼被竊取,沒有動(dòng)態(tài)驗(yàn)證碼也無法登錄賬戶。
2.方便易用
Google驗(yàn)證器作為一款手機(jī)應(yīng)用程序,用戶可以方便地在手機(jī)上安裝和使用。只需將手機(jī)與需要保護(hù)的賬戶進(jìn)行綁定,即可使用動(dòng)態(tài)驗(yàn)證碼進(jìn)行身份驗(yàn)證。這對(duì)于需要在多個(gè)平臺(tái)進(jìn)行安全驗(yàn)證的用戶來說非常方便。
3.減少釣魚攻擊風(fēng)險(xiǎn)
傳統(tǒng)的用戶名和密碼身份驗(yàn)證方式容易受到釣魚攻擊的威脅。而Google驗(yàn)證器的動(dòng)態(tài)驗(yàn)證碼機(jī)制使得釣魚攻擊更加困難。由于驗(yàn)證碼是實(shí)時(shí)生成的,并且與用戶的手機(jī)設(shè)備綁定,攻擊者很難在偽造頁面上獲取有效的驗(yàn)證碼,從而有效降低了釣魚攻擊的風(fēng)險(xiǎn)。
4.支持多平臺(tái)使用
Google驗(yàn)證器可以與各種在線賬戶綁定,如電子郵件、社交媒體、云服務(wù)等。無論是金融平臺(tái)、在線服務(wù)還是遠(yuǎn)程訪問,都可以使用Google驗(yàn)證器提供額外的安全層。這為用戶提供了更廣泛的選擇,滿足了用戶在多個(gè)平臺(tái)上對(duì)安全性的需求。
5.時(shí)間同步問題減少
Google驗(yàn)證器使用基于時(shí)間的算法生成動(dòng)態(tài)驗(yàn)證碼,這使得時(shí)間同步問題對(duì)用戶來說更加簡(jiǎn)化。用戶不需要經(jīng)常校準(zhǔn)手機(jī)時(shí)間,也可以正常進(jìn)行身份驗(yàn)證。這減少了用戶在使用過程中的困擾,提高了便利性。
綜上所述,使用Google驗(yàn)證器可以顯著提高賬戶的安全性,降低安全風(fēng)險(xiǎn),提供方便易用的身份驗(yàn)證方式,減少時(shí)間同步問題等優(yōu)勢(shì)。這些優(yōu)勢(shì)使得Google驗(yàn)證器成為許多在線服務(wù)和應(yīng)用程序中廣泛采用的安全工具。
1.3 Google驗(yàn)證器遠(yuǎn)程訪問安全驗(yàn)證應(yīng)用
Google驗(yàn)證器可以用于遠(yuǎn)程訪問的安全驗(yàn)證,為遠(yuǎn)程連接提供額外的安全層。具體步驟如下:
1.安裝Google驗(yàn)證器應(yīng)用
用戶需要在自己的手機(jī)或平板電腦上安裝Google驗(yàn)證器應(yīng)用。可以在應(yīng)用商店中搜索并下載安裝。
2.生成密鑰對(duì)
在安裝Google驗(yàn)證器后,用戶需要生成一對(duì)密鑰,包括公鑰和私鑰。這些密鑰用于后續(xù)的身份驗(yàn)證過程。
3.配置遠(yuǎn)程訪問系統(tǒng)
用戶需要將生成的公鑰提供給遠(yuǎn)程訪問系統(tǒng)的管理員或提供商。管理員或提供商將在遠(yuǎn)程訪問服務(wù)器上配置相應(yīng)的公鑰,以與用戶的Google驗(yàn)證器進(jìn)行綁定。
4.登錄遠(yuǎn)程訪問
當(dāng)用戶嘗試遠(yuǎn)程訪問時(shí),系統(tǒng)會(huì)要求輸入用戶名和密碼進(jìn)行身份驗(yàn)證。在輸入密碼后,用戶還需要使用Google驗(yàn)證器生成動(dòng)態(tài)驗(yàn)證碼。
5.輸入動(dòng)態(tài)驗(yàn)證碼
用戶在Google驗(yàn)證器應(yīng)用中查看動(dòng)態(tài)驗(yàn)證碼,并將其輸入到遠(yuǎn)程訪問系統(tǒng)的登錄界面中。驗(yàn)證碼通常是六位數(shù)字或字母的組合。
6.確認(rèn)身份
當(dāng)用戶輸入正確的密碼和動(dòng)態(tài)驗(yàn)證碼后,遠(yuǎn)程訪問系統(tǒng)會(huì)驗(yàn)證用戶的身份并允許其登錄。只有通過驗(yàn)證的用戶才能成功連接到遠(yuǎn)程服務(wù)器。
通過使用Google驗(yàn)證器進(jìn)行遠(yuǎn)程訪問的安全驗(yàn)證,可以增加額外的安全層,防止未經(jīng)授權(quán)的訪問和潛在的安全風(fēng)險(xiǎn)。即使可能的入侵者竊取或猜出了用戶的密碼,也無法登錄到賬戶,因?yàn)楸仨毷褂糜脩舻氖謾C(jī)才能生成動(dòng)態(tài)驗(yàn)證碼。
2.Google驗(yàn)證器的實(shí)現(xiàn)
2.1 Google驗(yàn)證器的實(shí)現(xiàn)原理和步驟
1.生成密鑰對(duì)
在Google驗(yàn)證器中,用戶需要在手機(jī)客戶端安裝Google Authenticator應(yīng)用,并生成一對(duì)密鑰,包括公鑰和私鑰。
2.服務(wù)器端驗(yàn)證
當(dāng)用戶需要登錄時(shí),服務(wù)器端會(huì)驗(yàn)證用戶輸入的驗(yàn)證碼是否正確。服務(wù)器端會(huì)根據(jù)用戶提供的公鑰和當(dāng)前時(shí)間戳,通過TOTP算法計(jì)算出一次性密碼,并與用戶提交的密碼進(jìn)行比對(duì)。如果一致,則驗(yàn)證通過,允許用戶登錄。
3.客戶端生成密碼
客戶端(Google Authenticator應(yīng)用)會(huì)使用用戶保存的私鑰和當(dāng)前時(shí)間戳作為輸入,通過TOTP算法生成一次性密碼。這個(gè)密碼是動(dòng)態(tài)生成的,并且是基于當(dāng)前時(shí)間戳的。
4.時(shí)間同步問題
由于一次性密碼是基于當(dāng)前時(shí)間戳的,因此用戶手機(jī)上的時(shí)間和服務(wù)器上的時(shí)間必須保持同步。如果時(shí)間相差太大,會(huì)導(dǎo)致驗(yàn)證失敗。因此,建議用戶定期校準(zhǔn)手機(jī)時(shí)間,并開啟網(wǎng)絡(luò)自動(dòng)對(duì)時(shí)功能以確保時(shí)間準(zhǔn)確。
2.2 TOTP算法
TOTP算法,全稱為“Time-based One-time Password algorithm”,中文譯為基于時(shí)間的一次性密碼算法。它是一種從共享密鑰和當(dāng)前時(shí)間計(jì)算一次性密碼的算法,已被采納為Internet工程任務(wù)組標(biāo)準(zhǔn)RFC 6238。TOTP是開放身份驗(yàn)證計(jì)劃(OATH)的基石,并被用于許多雙因素身份驗(yàn)證系統(tǒng)。
TOTP算法的原理是基于散列的消息認(rèn)證碼(HMAC)的一個(gè)示例,它使用加密哈希函數(shù)將密鑰與當(dāng)前時(shí)間戳組合在一起以生成一次性密碼。由于網(wǎng)絡(luò)延遲和不同步時(shí)鐘可能導(dǎo)致密碼接收者必須嘗試一系列可能的時(shí)間來進(jìn)行身份驗(yàn)證,因此時(shí)間戳通常以30秒的間隔增加,從而減少了潛在的搜索空間。
TOTP的安全性較高,廣泛應(yīng)用于網(wǎng)絡(luò)認(rèn)證、移動(dòng)支付等領(lǐng)域。其核心在于客戶端和服務(wù)器端必須共享一個(gè)密鑰,且密鑰的生成必須足夠隨機(jī),密鑰必須儲(chǔ)存在防篡改的設(shè)備上,不能在不安全的情況下被訪問或使用。
2.3 其他多因素認(rèn)證
除了Google驗(yàn)證器之外,還有許多其他的多因素驗(yàn)證器可以應(yīng)用。以下是一些常見的多因素驗(yàn)證器:
1.Authy
Authy是一款跨平臺(tái)的身份驗(yàn)證器,支持多種平臺(tái)和應(yīng)用程序。它提供基于時(shí)間的一次性密碼(TOTP)和雙因素身份驗(yàn)證功能,可以與各種在線賬戶綁定,提高賬戶的安全性。
2.Microsoft Authenticator
Microsoft Authenticator是微軟官方推出的身份驗(yàn)證工具,支持Windows、iOS和Android平臺(tái)。它采用基于時(shí)間的一次性密碼(TOTP)算法,提供雙因素身份驗(yàn)證功能,確保賬戶的安全性。
3.Duo Mobile
Duo Mobile是一款安全認(rèn)證解決方案,適用于iOS和Android平臺(tái)。它提供基于時(shí)間的一次性密碼(TOTP)和動(dòng)態(tài)令牌等多種驗(yàn)證方式,確保用戶身份的安全性。
4.2FA Authenticator(2FAS)
2FA Authenticator是一款免費(fèi)開源的身份驗(yàn)證器,支持iOS和Android平臺(tái)。它采用基于時(shí)間的一次性密碼(TOTP)算法,提供雙因素身份驗(yàn)證功能,并且可以與超過500個(gè)網(wǎng)絡(luò)平臺(tái)綁定。
5.Authing
Authing是一款支持多平臺(tái)的身份驗(yàn)證工具,提供基于時(shí)間的一次性密碼(TOTP)、短信驗(yàn)證碼、指紋識(shí)別等多種驗(yàn)證方式,確保賬戶的安全性。 這些多因素驗(yàn)證器都具有各自的特點(diǎn)和優(yōu)勢(shì),用戶可以根據(jù)自己的需求選擇適合的身份驗(yàn)證工具,提高賬戶的安全性。
3.Google驗(yàn)證碼實(shí)現(xiàn)算法
3.1 算法實(shí)現(xiàn)流程
3.1.1解碼密鑰
將原始密鑰中的空格和小寫字母移除。
使用Base32解碼將密鑰轉(zhuǎn)換為二進(jìn)制格式。
3.1.2獲取輸入
獲取當(dāng)前時(shí)間的Unix時(shí)間戳。
將時(shí)間戳除以固定時(shí)間段(例如30秒),取整數(shù)部分作為輸入。
3.1.3簽名函數(shù)(HMAC-SHA1)
將密鑰和輸入進(jìn)行兩次SHA1哈希運(yùn)算。
將第一次哈希結(jié)果與輸入進(jìn)行拼接,并再次進(jìn)行SHA1哈希運(yùn)算。
生成的HMAC是一個(gè)標(biāo)準(zhǔn)長度的SHA1值,通常為20字節(jié)(40個(gè)十六進(jìn)制字符)。
3.1.4提取驗(yàn)證碼
從HMAC的末尾字節(jié)開始,取連續(xù)的4個(gè)字節(jié)。
將這4個(gè)字節(jié)轉(zhuǎn)換為一個(gè)大整數(shù)。
將大整數(shù)對(duì)1,000,000取模,得到一個(gè)6位數(shù)字的驗(yàn)證碼。
3.2 算法實(shí)現(xiàn)示例
3.2.1Python代碼示例
以下是一個(gè)簡(jiǎn)單的Python代碼示例,實(shí)現(xiàn)了Google驗(yàn)證器算法的完整過程:
import base64
import hashlib
import hmac
import struct
import time
def decode_secret(original_secret):
secret = original_secret.replace(' ', '').upper()
return base64.b32decode(secret)
def generate_otp(secret):
interval = int(time.time()) // 30
msg = struct.pack('>Q', interval) # 將輸入轉(zhuǎn)換為8字節(jié)的大端序列
key = secret
hmac_digest = hmac.new(key, msg, hashlib.sha1).digest()
offset = hmac_digest[19] & 0x0F
truncated_hash = hmac_digest[offset:offset+4]
otp = struct.unpack('>L', truncated_hash)[0] # 將截?cái)嗟墓V缔D(zhuǎn)換為32位無符號(hào)整數(shù)
otp &= 0x7FFFFFFF # 獲取低31位
otp %= 1000000 # 取模得到6位驗(yàn)證碼
return str(otp).zfill(6)
# 測(cè)試代碼
original_secret = "xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx"
secret = decode_secret(original_secret)
otp = generate_otp(secret)
print("驗(yàn)證碼:", otp)
注意:你需要將 original_secret 替換為你實(shí)際使用的密鑰值。此代碼示例使用了Python的標(biāo)準(zhǔn)庫中的 base64、hashlib 和 hmac,以及 struct 模塊用于處理二進(jìn)制數(shù)據(jù)。運(yùn)行代碼后,將輸出生成的6位數(shù)字驗(yàn)證碼。請(qǐng)確保在使用時(shí)適當(dāng)?shù)貙?dǎo)入所需的模塊。
3.2.2網(wǎng)站后臺(tái)使用Google驗(yàn)證
以下完整的php代碼示例,演示了如何在網(wǎng)站后臺(tái)使用 Google Authenticator 配合安卓手機(jī)上的驗(yàn)證器進(jìn)行驗(yàn)證:
equire_once 'vendor/autoload.php'; // 導(dǎo)入 Google Authenticator 庫
use OTPHP\TOTP;
use OTPHP\Factory;
// 生成密鑰
$secret = Factory::create()->setIssuer('YourWebsite')->setLabel('YourUsername')->createSecret();
// 獲取二維碼供用戶掃描
$qrCodeUri = Factory::create()->setIssuer('YourWebsite')->setLabel('YourUsername')->getQrCodeUri($secret);
// 輸出二維碼圖像
echo '';
// 用戶輸入的驗(yàn)證碼
$otp = $_POST['otp'];
// 驗(yàn)證驗(yàn)證碼是否正確
$totp = TOTP::create($secret);
$isVerified = $totp->verify($otp);
if ($isVerified) {
echo "驗(yàn)證成功";
} else {
echo "驗(yàn)證失敗";
}
請(qǐng)確保你已經(jīng)安裝了 Composer,并通過 Composer 安裝了 otphp/otphp 庫。
使用上述代碼,首先會(huì)生成一個(gè)密鑰,然后使用該密鑰生成一個(gè)二維碼供用戶掃描。用戶可以通過 Google Authenticator 應(yīng)用程序掃描該二維碼來添加驗(yàn)證器。
在用戶登錄或執(zhí)行敏感操作時(shí),用戶會(huì)被要求輸入 Google Authenticator 應(yīng)用程序中顯示的6位數(shù)字驗(yàn)證碼。你需要將該驗(yàn)證碼作為 POST 請(qǐng)求中的 otp 參數(shù)發(fā)送到服務(wù)器。
服務(wù)器將使用先前生成的密鑰驗(yàn)證用戶輸入的驗(yàn)證碼是否正確。如果驗(yàn)證成功,將輸出 "驗(yàn)證成功",否則輸出 "驗(yàn)證失敗"。
請(qǐng)根據(jù)你的實(shí)際需求修改代碼并進(jìn)行適當(dāng)?shù)呐渲茫员闩c你的網(wǎng)站后臺(tái)集成 Google Authenticator 驗(yàn)證。
4.Google驗(yàn)證器安全風(fēng)險(xiǎn)
雖然 Google Authenticator 是一個(gè)相對(duì)安全的身份驗(yàn)證應(yīng)用程序,但仍存在一些潛在的安全風(fēng)險(xiǎn)和問題。以下是一些可能存在的安全問題:
丟失設(shè)備:如果你的手機(jī)丟失或被盜,未經(jīng)保護(hù)的 Google Authenticator 應(yīng)用程序可能會(huì)暴露給他人,使他們能夠訪問你的賬戶。
密鑰備份:如果你沒有妥善備份生成的密鑰,而且手機(jī)丟失或損壞,你可能會(huì)永久丟失對(duì)賬戶的訪問權(quán)。
惡意軟件:如果你的手機(jī)被惡意軟件感染,攻擊者可能能夠獲取你的密鑰和生成的驗(yàn)證碼。
不安全的密碼重置選項(xiàng):在某些情況下,Google Authenticator 可能作為密碼重置的替代方法。如果攻擊者能夠訪問你的郵箱或其他重置選項(xiàng),他們可能能夠繞過 Google Authenticator 驗(yàn)證。
二維碼釣魚:惡意網(wǎng)站或應(yīng)用程序可以通過偽造二維碼來欺騙你,要求你提供生成的驗(yàn)證碼。這可能會(huì)導(dǎo)致你的賬戶被攻擊者接管。
不安全的操作系統(tǒng)或應(yīng)用程序:如果你的操作系統(tǒng)或應(yīng)用程序存在漏洞或安全問題,攻擊者可能能夠繞過 Google Authenticator 的保護(hù)。
4.1 Google驗(yàn)證碼暴力破解
1.選擇需要攔截的記錄
如圖1所示,在Burpsuite的HTTP history記錄中去找到包含Google驗(yàn)證碼的POST記錄。
圖1 選擇攔截發(fā)包記錄
2.設(shè)置變量
在Burpsuite中去掉其它無關(guān)的所有變量,僅僅增加Google驗(yàn)證碼字段為變量,如圖2所示,Google驗(yàn)證碼的變量為opt。
圖2 設(shè)置破解的變量
3.設(shè)置字典
如圖3所示,在Playload中選擇暴力破解(Brute forcer),在下方去掉26個(gè)字母,僅僅保留0123456789,接著設(shè)置最大和最小長度均為6。
圖3設(shè)置字典
4.執(zhí)行暴力破解
在Playload中單擊“Attack”,開始執(zhí)行暴力破解,如圖4所示,當(dāng)命中Google的驗(yàn)證碼后,其長度會(huì)遠(yuǎn)遠(yuǎn)大于其他包的長度。
圖4 暴力破解
5.登錄后臺(tái)
如圖5所示,對(duì)Length進(jìn)行排序,找到最大的那個(gè)值,然后在瀏覽器中更改Token、Session或者Cookie值,即可成功登錄后臺(tái)。另外也可以選中該成功的記錄,選擇在Chrome中進(jìn)行訪問。
圖5 查看token
總結(jié):Google驗(yàn)證碼暴力破解成功取決于6位數(shù)的動(dòng)態(tài)變換碰撞,因此成功有一定幾率。缺陷是時(shí)間非常長,不知道那一刻可以暴力破解成功。可以通過限制驗(yàn)證碼的訪問次數(shù)和IP等方式來加強(qiáng)安全防范。
5.Google驗(yàn)證器安全防御
Google Authenticator 是一個(gè)安全的身份驗(yàn)證應(yīng)用程序,但仍然可能存在潛在的安全威脅。以下是一些 Google Authenticator 的安全防御措施:
設(shè)置強(qiáng)密碼:為Google賬戶和Google Authenticator應(yīng)用設(shè)置不易猜測(cè)的強(qiáng)密碼,并定期更改密碼。
啟用雙因素認(rèn)證:將Google Authenticator與你的Google賬戶綁定,啟用雙因素認(rèn)證。這樣,在登錄時(shí)除了輸入密碼外,還需要提供Google Authenticator生成的驗(yàn)證碼。
使用備份碼:在設(shè)置Google Authenticator時(shí),通常會(huì)提供一組備份碼。請(qǐng)務(wù)必將這些備份碼妥善保存在安全的地方,以防手機(jī)丟失或無法使用時(shí)可以恢復(fù)訪問。
保護(hù)手機(jī)安全:確保你的手機(jī)設(shè)備本身是安全的,設(shè)置密碼鎖屏或開啟指紋識(shí)別等功能,以防止未經(jīng)授權(quán)的訪問。
謹(jǐn)慎使用云同步功能:Google Authenticator通常提供云同步功能,以便在更換手機(jī)時(shí)可以輕松遷移數(shù)據(jù)。但要注意,如果你選擇啟用云同步,請(qǐng)確保你的云存儲(chǔ)賬戶也是安全的,以免被攻擊者獲取。
小心釣魚網(wǎng)站:避免點(diǎn)擊或輸入Google Authenticator驗(yàn)證碼到來歷不明的網(wǎng)站或應(yīng)用程序,以防止被釣魚攻擊。
避免同時(shí)使用多個(gè)設(shè)備:為了避免數(shù)據(jù)同步或訪問權(quán)限方面的問題,最好只在一個(gè)手機(jī)設(shè)備上使用Google Authenticator應(yīng)用程序。
不要共享密鑰:不要將Google Authenticator應(yīng)用程序生成的密鑰與其他人分享,即使是你的家人或朋友,也應(yīng)該保持謹(jǐn)慎。
仔細(xì)檢查應(yīng)用程序權(quán)限:在安裝Google Authenticator應(yīng)用程序時(shí),應(yīng)該仔細(xì)檢查應(yīng)用程序所需的權(quán)限,并確保不授予不必要或可疑的權(quán)限。
使用其他雙因素認(rèn)證方式:除了Google Authenticator之外,還可以考慮使用其他雙因素認(rèn)證方式,如基于短信、電話或硬件密鑰的認(rèn)證方式。這樣可以增加多層次的安全保障。
參考資料:https://zhuanlan.zhihu.com/p/132478048