สิ่งที่ต้องรู้: |
– การสร้างเมล็ดพันธุ์ของ Trust Wallet มีข้อบกพร่อง เอนโทรปีทั้งหมดมีเพียง 32 บิตเท่านั้น เราได้สร้างไฟล์ที่มีเมล็ดพันธุ์ที่เป็นไปได้ทั้งหมด
– โชคดีที่ Ledger Donjon ค้นพบช่องโหว่อย่างรวดเร็วและน่าจะหลีกเลี่ยงหนึ่งในแฮ็กที่ใหญ่ที่สุดในระบบนิเวศของ crypto |
เมื่อวันที่ 14 พฤศจิกายน 2022 Trust Wallet ซึ่งเป็นกระเป๋าเงินซอฟต์แวร์ที่ใช้กันอย่างแพร่หลายได้ประกาศเปิดตัวส่วนขยายเบราว์เซอร์ ช่วยให้เข้าถึงสินทรัพย์ดิจิทัลบนบล็อกเชนหลายตัวได้โดยตรงจากเบราว์เซอร์ และเป็นส่วนเสริมที่รอคอยมานานในแอป iOS และ Android ที่มีอยู่
เมื่อเร็วๆ นี้ Ledger Donjon ได้ค้นพบช่องโหว่ที่สำคัญในส่วนขยายเบราว์เซอร์นี้ ทำให้ผู้โจมตีสามารถขโมยทรัพย์สินทั้งหมดของกระเป๋าเงินใด ๆ ที่สร้างด้วยส่วนขยายนี้โดยที่ผู้ใช้ไม่ต้องดำเนินการใด ๆ เมื่อทราบที่อยู่ของบัญชี จะสามารถคำนวณคีย์ส่วนตัวได้ทันที จากนั้นจึงเข้าถึงเงินทั้งหมดได้ ด้านล่างนี้คือรายละเอียดของช่องโหว่ วิธีการที่ Ledger Donjon ค้นพบ ผลกระทบเมื่อเวลาผ่านไป การประมาณสินทรัพย์ที่มีช่องโหว่ และวิธีที่ Trust Wallet ตอบสนองเพื่อแก้ไข แต่ขอเริ่มต้นด้วยการระลึกถึงพื้นฐาน
วิธีสร้างกระเป๋าเงิน
การสร้างเอนโทรปีเป็นเรื่องยุ่งยาก ในฐานะนักวิทยาศาสตร์ เราชอบความสามารถในการทำซ้ำและสามารถอธิบายปรากฏการณ์ด้วยหลักเหตุและผล โดยทั่วไปแล้ว มันยากที่จะสร้างแบบสุ่ม ยิ่งกว่านั้น เป็นการยากที่จะแสดงให้เห็นว่าตัวเลขสุ่มนั้นถูกต้อง และตัวสร้างตัวเลขสุ่มที่แย่แต่ไม่มีข้อบกพร่องในท้ายที่สุดสามารถหลอกผู้สังเกตได้อย่างง่ายดาย เพื่อการสุ่มที่ดี เราต้องการการกระจายบิตและไบต์ที่สม่ำเสมอ (และแม้แต่ขนาดก้อนทั้งหมด) และความไม่แน่นอน สำหรับผู้สังเกตการณ์ของลำดับ จะต้องไม่มีข้อมูลใด ๆ ในส่วนถัดไปของลำดับที่จะถูกสร้างขึ้น
เนื่องจากคุณสมบัติเหล่านี้ยากอย่างเหลือเชื่อที่จะบรรลุ พื้นที่ของสกุลเงินดิจิทัลจึงพยายามหลีกเลี่ยงการพึ่งพาการสุ่มให้ได้มากที่สุด แต่เรายังคงต้องการมันในขั้นตอนเดียว: เมื่อเราสร้างกระเป๋าเงินใหม่
คุณอาจคุ้นเคยกับการช่วยจำของคุณอยู่แล้ว ซึ่งเป็นคำศัพท์ภาษาอังกฤษ 12 ถึง 24 คำที่ช่วยให้คุณสำรองข้อมูลกระเป๋าสตางค์ของคุณ (หากไม่ คุณสามารถตรวจสอบ สถาบันบัญชีแยกประเภท บทความในหัวข้อนี้)
ตัวช่วยจำนี้เข้ารหัสเอนโทรปี 16 ถึง 32 ไบต์ตามข้อมูล มาตรฐาน BIP 39 – คุณภาพของเอนโทรปีนี้มีความสำคัญ เนื่องจากมันจะเป็นเมล็ดพันธุ์ของคีย์ทั้งหมดที่ใช้โดยกระเป๋าเงินของคุณบนเครือข่ายทั้งหมด ตามกระบวนการระบุแหล่งที่มาที่กำหนดโดย BIP32 และ BIP44 มาตรฐาน
รูปแบบการกำหนดลำดับชั้นนี้ค่อนข้างแพร่หลายในปัจจุบัน โดยพิจารณาว่าผู้ใช้สร้างการสำรองข้อมูลของคีย์จำนวนมากและพกพาได้ง่ายเพียงใด (แม้ว่า BIP 39 จะถูก "ไม่สนับสนุนอย่างเป็นเอกฉันท์ในการนำไปใช้งาน") Signer roaming เป็นคุณสมบัติที่ทรงพลัง – เมื่อกระเป๋าเงินใบโปรดของคุณล้มเหลวหรือผิดหวัง คุณเพียงแค่นำเครื่องช่วยจำติดตัวไปด้วย (หรือดีกว่านั้นคืออุปกรณ์บัญชีแยกประเภทของคุณ) เปลี่ยนไปใช้เครื่องอื่น รักษาอิสรภาพทางการเงินของคุณ และจำกัดผลกระทบใด ๆ ของการหยุดทำงาน
แต่อีกครั้ง มันต้องการแหล่งเอนโทรปีที่ไร้ที่ติ
ภาพรวมของช่องโหว่
Trust Wallet ขึ้นอยู่กับ เชื่อถือ Wallet Coreไลบรารีข้ามแพลตฟอร์มที่ใช้ฟังก์ชันกระเป๋าเงินเข้ารหัสลับระดับต่ำสำหรับบล็อกเชนจำนวนมาก มุ่งเน้นที่อุปกรณ์เคลื่อนที่ แต่ยังกำหนดเป้าหมายไปที่ Wasm ตั้งแต่เดือนเมษายน 2022 (ดู #2132).
ในขณะที่ Trust Wallet Core ส่วนใหญ่จะพกพาได้ แต่มีโมดูลและฟังก์ชันบางอย่างที่เฉพาะเจาะจงมากสำหรับเป้าหมาย นี่เป็นกรณีที่โดดเด่นสำหรับส่วนการสร้างแบบสุ่มที่ปลอดภัยซึ่งใช้เพื่อสร้างเนื้อหาการเข้ารหัสเช่นคีย์ส่วนตัวและช่วยจำสำหรับกระเป๋าเงิน HD การใช้งานแต่ละครั้งจะใช้ประโยชน์จากเครื่องกำเนิดตัวเลขเทียม (PRNG) ที่นำเสนอโดยระบบปฏิบัติการ:
- สำหรับ iOS
SecRandomCopyBytes
ถูกนำมาใช้. - สำหรับ Android เอนโทรปีมีให้โดยอินสแตนซ์ของ
java.security.SecureRandom
.
นี่เป็นวิธีปฏิบัติที่ดีเนื่องจากสิ่งดั้งเดิมนั้นควรจะปลอดภัย
แบ็กเอนด์ Wasm
มีความแตกต่างกับเป้าหมาย Wasm โมดูลนี้สามารถทำงานบนหลายสภาพแวดล้อม เช่น เบราว์เซอร์ที่รองรับ Wasm หรือ Node.js แพลตฟอร์มเหล่านี้ไม่มี PRNG ที่แข็งแกร่งทั่วไป และไม่สามารถเข้าถึงอินเทอร์เฟซระบบ "คลาสสิก" จากสภาพแวดล้อมเหล่านี้ได้ ตัวอย่างเช่น โมดูล Wasm ที่ทำงานอยู่ใน Chrome สำหรับ Linux ไม่สามารถอ่านได้โดยตรง /dev/urandom
.
เพื่อจัดการกับปัญหานี้ จึงมีการใช้งานสิ่งที่เรียกว่า “ตัวสร้างสุ่มที่ปลอดภัย” โดยเฉพาะ #2240. มันขึ้นอยู่กับ PR ที่ทำใน emscripten (ดู PR #12240 ใน emscripten) เขียนเพื่อหลีกเลี่ยงการอ่าน /dev/urandom
.
ตามที่ผู้เขียน:
สิ่งที่เราทำที่นี่เรียบง่าย เราห่อ std::random_device
กับ std::mt19937
และส่งคืนค่า uint32 แบบสุ่มซึ่งได้รับแรงบันดาลใจจาก emscripten-core/emscripten#12240.
มีปัญหาสำคัญที่นี่ ซึ่งนำไปสู่ช่องโหว่ที่สำคัญสำหรับ wallet-core สำหรับ Wasm และสำหรับผลิตภัณฑ์ใดๆ ที่ต้องใช้ช่องโหว่นี้: PRNG ที่ใช้คือ Mersenne Twister และไม่ควรใช้เพื่อวัตถุประสงค์ในการเข้ารหัส ยิ่งไปกว่านั้น รุ่นพิเศษ mt19937 ใช้ค่า 32 บิตค่าเดียวเป็นค่าอินพุต
ผลที่ตามมาคืออะไร? โมดูลสุ่มแบบกำหนดเองสำหรับ Wasm ใช้สองฟังก์ชัน: random32
ซึ่งส่งออกค่าสุ่ม 32 บิต และ random_buffer
ซึ่งเติมบัฟเฟอร์ที่มีขนาดตามอำเภอใจด้วยข้อมูลแบบสุ่ม ในโครงการ Wallet Core ฟังก์ชันเหล่านี้ใช้เฉพาะโดย trezor-crypto ซึ่งเป็นไลบรารีการเข้ารหัสที่พัฒนาโดย Trezor เพื่อให้มั่นใจถึงการเข้ารหัสที่ปลอดภัยบนฮาร์ดแวร์วอลเล็ต
ทีนี้มาดูกันว่า HD wallets ถูกสร้างขึ้นมาอย่างไร:
- จุดเริ่มต้นคือ HDWallet ต้องใช้ความแข็งแกร่งและวลีรหัสผ่านเพื่อป้องกันในภายหลัง:
https://github.com/trustwallet/wallet-core/blob/3.1.0/src/HDWallet.cpp#L45
ฟังก์ชั่นนี้จึงเรียก mnemonic_generate
เพื่อสร้างความจำ BIP-39:
https://github.com/trustwallet/wallet-core/blob/3.1.0/trezor-crypto/crypto/bip39.c#L55
mnemonic_generate
โทร random_buffer
ซึ่งส่งออกบัฟเฟอร์แบบสุ่มที่เติมโดยใช้ Mersenne Twister PRNG ซึ่งอินสแตนซ์เพิ่งถูกเพาะ:
https://github.com/trustwallet/wallet-core/blob/3.1.0/wasm/src/Random.cpp#L19
เนื่องจาก Seed มีขนาดเพียง 32 บิต Wallet-Core เวอร์ชัน Wasm จึงสร้างการช่วยจำที่เป็นไปได้เพียง 2^32 (~4 พันล้าน) เท่านั้น ระบบช่วยจำเหล่านี้สามารถสร้างขึ้นได้ภายในเวลาไม่กี่ชั่วโมงในคอมพิวเตอร์เครื่องเดียว
จากนั้นผู้โจมตีสามารถ:
- คำนวณเมล็ดพันธุ์ คีย์ส่วนตัว จากนั้นที่อยู่ของสกุลเงินดิจิตอลทุกสกุลที่จัดการโดย Trust Wallet
- สแกนบล็อกเชนที่เกี่ยวข้องเพื่อแยกที่อยู่ที่ใช้ทั้งหมด
- คำนวณทางแยกเพื่อรับที่อยู่ทั้งหมดของกระเป๋าเงินที่สร้างโดย Trust Wallet สำหรับ Wasm และขโมยเงินของพวกเขา
การเรียกใช้การโจมตีดังกล่าวใช้เวลามากกว่าสองสามชั่วโมง แต่สามารถทำได้ด้วย GPU สองสามตัวในเวลาน้อยกว่าหนึ่งวัน (ดู medium.com/@johncantrell97/how-i-checked-over-1-trillion-mnemonics-in-30-hours-to-win-a-bitcoin เพื่อประเมินค่าใช้จ่าย การโจมตีง่ายกว่า 256 เท่าที่นี่)
แอปพลิเคชันสำหรับส่วนขยายเบราว์เซอร์ Trust Wallet
พื้นที่ ส่วนขยายเบราว์เซอร์ Trust Wallet เป็นส่วนเสริมสำหรับเบราว์เซอร์ที่ใช้โครเมียม เห็นได้ชัดว่าเป็นคู่แข่งของ MetaMask และได้รับตราสินค้าว่าเป็น “กระเป๋าเงินคริปโตหลายสายที่ปลอดภัยและเกตเวย์ไปยังแอปพลิเคชั่นกระจายอำนาจ Web3 (dApps) หลายพันรายการ”
ส่วนขยายเป็นแบบโอเพนซอร์ซ แต่สามารถวิเคราะห์โค้ดได้อย่างง่ายดาย ขึ้นอยู่กับการใช้งาน Wasm ที่มีช่องโหว่ของ Trust Wallet Core
เมื่อกระเป๋าเงินถูกสร้างขึ้น ส่วนขยายจะสร้างตัวช่วยจำ 12 คำจากเมล็ด 128 บิตแบบสุ่ม ช่วยในการจำถูกสร้างขึ้นด้วยวิธีนี้:
HDWallet.create
เป็นตัวห่อหุ้ม Wasm ที่สร้างขึ้นโดยอัตโนมัติสำหรับตัวสร้าง HDWallet ที่อธิบายไว้ข้างต้น นั่นหมายถึงผู้อ่อนแอ random_buffer
มีการใช้ฟังก์ชัน เพื่อให้สามารถดึงข้อมูลช่วยจำจากที่อยู่ของผู้ใช้ด้วยการโจมตีด้วยกำลังดุร้าย
ส่วนขยายนี้จัดการสินทรัพย์ต่อไปนี้: AVAX, BNB, ETH, MATIC, SOL และ TWT
- ที่อยู่เหมือนกันสำหรับ ETH, BNB, MATIC, AVAX และ TWT เหล่านี้เป็นที่อยู่ Ethereum มาตรฐาน ใช้เส้นทางการมาเดียวกัน (m/44'/60'/0'/0/0)
- Solana ใช้เส้นทางที่มาที่แตกต่างกัน: m/44'/501'/0'/0'
ในการระบายเงินทุนของผู้ใช้ส่วนขยาย Trust Wallet ทั้งหมด ผู้โจมตีสามารถ:
- คำนวณและจัดเก็บข้อมูลช่วยจำทั้งหมดที่เป็นไปได้ ตามด้วยรหัสส่วนตัวของ Ethereum และที่อยู่ Ethereum ที่สามารถสร้างขึ้นโดยส่วนขยายนี้
- รวบรวมที่อยู่ Ethereum ที่ใช้ทั้งหมดที่สร้างขึ้นตั้งแต่การเปิดตัวครั้งแรกของส่วนขยายเบราว์เซอร์ Trust Wallet และจัดเก็บไว้ในเครื่อง
- ทำการค้นหาในฐานข้อมูลที่อยู่
- ล้างกระเป๋าเงินด้วยรหัสส่วนตัว หากมีการใช้ที่อยู่
ขั้นตอนเหล่านี้สามารถทำซ้ำได้สำหรับทุกห่วงโซ่ ตอนนี้เราได้ให้รายละเอียดว่า Ledger Donjon ใช้การโจมตีนี้กับ Ethereum และ Binance Smart Chain ได้อย่างไร โดยไม่ต้องทำให้กระเป๋าเงินหมด
โจมตี Trust Wallet
ช่องโหว่นี้ทำให้ผู้โจมตีสามารถคำนวณการจำจากที่อยู่ใด ๆ ของกระเป๋าเงินที่สร้างโดยส่วนขยายของเบราว์เซอร์ เพื่อสิ่งนั้น เราต้องคำนวณการแมประหว่างตัวช่วยจำที่เป็นไปได้และที่อยู่ที่เป็นผลลัพธ์
สร้างที่อยู่ทั้งหมดที่ส่วนขยาย Trust Wallet สามารถสร้างได้
จากช่องโหว่ใน PRNG ที่อธิบายไว้ก่อนหน้านี้ เป็นไปได้ที่จะระบุที่อยู่ทั้งหมด (และคีย์ส่วนตัวที่เกี่ยวข้อง) ที่ส่วนขยาย Trust Wallet สามารถสร้างได้ ความคิดของฉันคือการจัดเก็บทุกที่อยู่ที่เป็นไปได้ในตารางขนาดใหญ่ จากนั้น จากรายการที่อยู่ที่ดึงมาจาก Ethereum blockchain เราสามารถตรวจสอบได้ว่ามีบางที่อยู่ในตารางนี้หรือไม่ ถ้าเป็นเช่นนั้น สามารถคำนวณคีย์ส่วนตัวได้
รากศัพท์จากเอนโทรปีเป็นตัวช่วยจำจากนั้นไปยังที่อยู่ Ethereum ใช้กลไกการได้มามาตรฐาน บีไอพี-32, บีไอพี-39และ บีไอพี-44 ลำดับชั้นของบัญชี
ความยากลำบากประการแรกคือการระบุที่อยู่เหล่านี้ทั้งหมด การแปลงจาก PRNG seed เป็น address ต้องทำตามขั้นตอนต่อไปนี้:
- การสร้างเอนโทรปี: เริ่มต้น Mersenne Twister ด้วยเมล็ดพันธุ์ และเรียกมัน 16 ครั้งเพื่อรวบรวมเอนโทรปีเริ่มต้น
- เอนโทรปีเพื่อช่วยในการจำ: หนึ่ง SHA-256 เพื่อคำนวณผลรวมตรวจสอบสุดท้ายที่ฝังอยู่ในคำสุดท้าย
- ช่วยในการจำเมล็ด: ตัวช่วยจำจะถูกแปลงเป็นเมล็ด 512 บิตโดยใช้ PKBDF2-HMAC-SHA512 พร้อมการวนซ้ำ 2048 ครั้ง มีการคำนวณ SHA-2 512 ครั้งต่อการวนซ้ำ ดังนั้นค่าใช้จ่ายทั้งหมดคือ 4096 การคำนวณ SHA-512
- เมล็ดไปยังคีย์หลัก BIP-32: 1 HMAC SHA-512 คิดต้นทุน 2 การคำนวณ SHA-512
- มาสเตอร์คีย์ไปยังคีย์ส่วนตัวของ Ethereum: มาสเตอร์คีย์มาจาก m/44'/60'/0'/0/0 สิ่งนี้ต้องการการสืบทอดคีย์ส่วนตัวลูกที่เข้มงวด 3 รายการและการสืบทอดคีย์ลูกปกติ 2 รายการ
- การรับคีย์ส่วนตัวย่อยแบบแข็งแต่ละรายการต้องการการคำนวณ HMAC SHA-512 (2 SHA-512) หนึ่งรายการและการเพิ่มอีกหนึ่งรายการใน secp256k1
- การได้มาของไพรเวทคีย์ลูกปกติแต่ละครั้งต้องใช้การได้มาของไพรเวทคีย์ลูก และการคูณสเกลาร์บน secp256k1 เพื่อแปลงไพรเวตคีย์ที่ให้ไว้ในอินพุตให้เป็นคีย์สาธารณะ
- รหัสส่วนตัวของ Ethereum ไปยังที่อยู่: ขั้นตอนสุดท้ายนี้ต้องการการแปลงคีย์ส่วนตัวเป็นคีย์สาธารณะ ดังนั้นการคูณสเกลาร์อีกครั้ง และแฮช Keccak-256 หนึ่งรายการ
ค่าใช้จ่ายทั้งหมดสำหรับขั้นตอนเหล่านี้คือ:
- การเริ่มต้นและการเรียก 16 ครั้งไปยัง Mersenne Twister
- 1 SHA-256
- 4108 SHA-512
- เพิ่ม 5 จุด
- การคูณสเกลาร์ 2 ตัวบน secp256k1
ขั้นตอนที่แพงที่สุดคือการคำนวณ SHA-512 และการคูณแบบสเกลาร์ เพื่อให้สั้นลง กระบวนการโดยรวมในการแปลงเมล็ดพันธุ์ PRNG เป็นที่อยู่ Ethereum นั้นช้า การเรียกใช้การคำนวณดังกล่าวบน CPU ตัวเดียวอาจใช้เวลาหลายเดือน และอาจใช้เวลาหลายสัปดาห์กับ CPU ที่มีอยู่ใน Donjon ดังนั้นเราจึงใช้งานโดยใช้ OpenCL (อ้างอิงจาก BIP39 ตัวแก้ GPU) และรันบน GPU NVIDIA GeForce GTX 2 Ti 1080 ตัว
ผลลัพธ์ของเครื่องมือนี้เป็นไฟล์ขนาดใหญ่ที่มีที่อยู่ Ethereum ทั้งหมดที่ส่วนขยายสามารถสร้างได้ เนื่องจากมีเมล็ดที่เป็นไปได้ 2^32 และแต่ละแอดเดรสยาว 20 ไบต์ ตารางนี้จึงใช้ 80 Gb
จากจุดนั้น การค้นหาตารางจะทำงานได้ช้า: เพื่อจับคู่ที่อยู่ จำเป็นต้องมีการวนซ้ำผ่านตารางขนาดใหญ่ทั้งหมดนี้
เพื่อเพิ่มความเร็วในการค้นหา เราแบ่งตารางออกเป็น 256 ตารางเล็กๆ ตามไบต์แรกของที่อยู่ Ethereum แต่ละตารางมีคู่ของเมล็ด PRNG และที่อยู่ Ethereum ที่เป็นผลลัพธ์
สุดท้าย เพื่อให้สามารถค้นหาได้อย่างรวดเร็วในแต่ละตาราง เราได้จัดเรียงตามที่อยู่ Ethereum ขณะนี้สามารถค้นหาแบบไบนารีในตารางเหล่านี้ได้แล้ว การค้นหาในตารางที่เรียงลำดับเหล่านี้มีราคาถูกมาก
เพื่อประหยัดเนื้อที่ดิสก์ เราเก็บเมล็ด PRNG และเฉพาะ 8 ไบต์แรกของที่อยู่ Ethereum แต่ละอัน ไม่จำเป็นต้องใช้ 12 ไบต์สุดท้ายเนื่องจากการชนกันนั้นเล็กน้อยในกรณีการใช้งานของฉัน แต่ละรายการใช้เวลา 12 ไบต์ ทั้งโต๊ะใช้ 48 Gb.
นี่คือกำหนดเวลาสำหรับแต่ละขั้นตอน:
เมื่อใช้ตารางเหล่านี้ จะสามารถเรียกข้อมูลช่วยจำที่ใช้สร้างที่อยู่ได้ทันที เพื่อประเมินผลกระทบของช่องโหว่ Binance ขอให้ฉันช่วยจำที่อยู่ทดสอบ 3 แห่งที่พวกเขาให้มา นี่คือผลลัพธ์:
การเรียกข้อมูลช่วยจำ 3 รายการและคีย์ส่วนตัวใช้เวลาไม่กี่ร้อยมิลลิวินาที จากการทดสอบของเราพบว่า กระบวนการนี้เร็วพอที่จะประมวลผลธุรกรรมทั้งหมดบน Ethereum blockchain ตามเวลาจริงและทำลายที่อยู่ที่มีช่องโหว่ทั้งหมดทันทีที่มีการใช้งาน. โดยการแคชที่อยู่ที่ทดสอบแล้ว จะนำไปใช้กับบล็อกเชนอื่นๆ เช่น BSC ในสถานการณ์การโจมตีนี้ เราสามารถตรวจสอบธุรกรรมเมื่อไปถึง mempool และคำนวณคีย์ส่วนตัวของผู้ส่งหรือผู้รับแบบเรียลไทม์
แสดงรายการที่อยู่ Ethereum ที่ใช้ทั้งหมด
สิ่งที่เราต้องการคือการประมาณจำนวนที่แท้จริงของกระเป๋าเงินที่มีช่องโหว่และยอดคงเหลือ ฟังดูง่าย เนื่องจากการทำธุรกรรมทั้งหมดเป็นแบบสาธารณะ ดังนั้นที่อยู่ทั้งหมดจึงมีอยู่บนบล็อกเชน อย่างไรก็ตาม ไม่มีวิธีเรียกรายการที่อยู่ที่ใช้โดยตรง
เราใช้วิธีการที่วนซ้ำผ่านทุกบล็อกของ Ethereum blockchain เราแยกที่อยู่ผู้ส่งและผู้รับของธุรกรรมทั้งหมด และพารามิเตอร์ที่อยู่ของการโทรทุกครั้งไปยังสัญญา ERC-20
โปรดทราบว่าด้วยวิธีนี้ จะสามารถตรวจจับได้เฉพาะกระเป๋าเงินที่ใช้แล้ว: กระเป๋าเงินที่มีช่องโหว่บางส่วนที่ไม่ได้รับสินทรัพย์ไม่เคยโต้ตอบกับบล็อกเชน
เราสแกน Ethereum blockchain ระหว่างบล็อก 14820000 และ 16096000 บล็อก 14820000 ถูกสร้างขึ้นเมื่อวันที่ 21 พฤษภาคม 2022 ดังนั้นก่อนคำขอดึงที่เพิ่มรหัสที่มีช่องโหว่ใน Trust Wallet Core 16096000 เป็นบล็อกล่าสุดเมื่อฉันเขียนโพสต์นี้
โหนดสาธารณะดูเหมือนจะมีการจำกัดอัตรา ดังนั้นฉันจึงสอบถามโหนดสาธารณะหลายโหนดพร้อมกันเพื่อรวบรวมที่อยู่ทั้งหมด 147,910,120 ที่อยู่ในช่วงเวลาหลายสิบชั่วโมง หลังจากลบรายการที่ซ้ำกันออก เราได้รับรายการที่อยู่ที่ไม่ซ้ำกัน 32,613,317 รายการ
มีการใช้วิธีเดียวกันนี้กับ Binance Smart Chain โหนด BSC สาธารณะได้รับการสแกนแล้ว
การประมาณจำนวนบัญชีที่มีช่องโหว่
สุดท้าย มีเครื่องมือสำหรับทดสอบว่าที่อยู่ถูกสร้างขึ้นโดยส่วนขยาย Trust Wallet หรือไม่ มันทำการค้นหาในตารางที่สร้างขึ้น รับเมล็ด PRNG และจากที่นั่น คำนวณการช่วยจำ รหัสส่วนตัวของ Ethereum และที่อยู่ที่เกี่ยวข้อง
การคำนวณเป็นไปอย่างรวดเร็ว ที่อยู่ผู้สมัครถูกจัดเรียงไว้ล่วงหน้าเพื่อลด I/O และเพื่อทำการค้นหาไบนารีที่ซ้อนกัน การค้นหาที่อยู่ 32 ล้านรายการใช้เวลาไม่กี่นาทีโดยใช้สคริปต์ Python อย่างง่าย
นี่คือตัวอย่างพร้อมที่อยู่ที่นำมาจาก ทวีตสาธารณะ ตอบกลับการประกาศส่วนขยาย Trust Wallet ฉันเอาอันนี้เป็นตัวอย่างตามที่อยู่นี้ ไม่เคยใช้ดังนั้นเงินของผู้ใช้จึงไม่มีความเสี่ยง
เครื่องมือทำงานบนชุดข้อมูล 1,873,720 รายละเอียดข้างต้น การทดสอบที่อยู่ทั้งหมดและการประมวลผลคีย์ส่วนตัวของบัญชีที่มีช่องโหว่ใช้เวลา 4 นาที 22 วินาที ดังนั้นจึงมีราคาถูกมาก
ด้วยรายการคีย์ส่วนตัวที่มีช่องโหว่นี้ เป็นไปได้ที่จะแสดงรายการที่อยู่ที่เกี่ยวข้องทั้งหมด ยอดคงเหลือ และเห็นได้ชัดว่าต้องระบายออก... ในระหว่างการตรวจสอบของเรา ในบางจุดเงินประมาณ 30 ล้านดอลลาร์มีความเสี่ยง แต่เราไม่ได้ตรวจสอบการทำงานล่วงเวลาของเชนและโทเค็นทั้งหมด .
ฟื้นฟู
2022 วันที่ 17 พฤศจิกายน
มีการรายงานช่องโหว่ไปยัง Binance โดยใช้ช่องโหว่ โปรแกรมรางวัลบั๊ก ในปี 2022 วันที่ 17 พฤศจิกายน
เพื่อยืนยันช่องโหว่ Binance ได้ส่งที่อยู่ 3 แห่งมาให้เราและขอให้ช่วยจำ:
คุณช่วยลองเรียกใช้เครื่องมือของคุณและช่วยจำสำหรับที่อยู่ 3 แห่งนี้ได้ไหม
Wallet 1 – 0xdf6D9547e163D5E7eafBe2FeB24Bfa12A4C913C0
Wallet 2 – 0xE1E0580cb5eA0c0FD034FF2cdfc872ce4493676C
Wallet 3 – 0x02b2Ae981b138F066344774A2AD75225A046c377
ขอบคุณ!
ขอแสดงความนับถือ
เมื่อแอดเดรสที่เป็นไปได้ทั้งหมดได้รับการคำนวณล่วงหน้าแล้ว การดึงข้อมูลช่วยจำจากแอดเดรสจะทำได้ง่ายเพียงแค่ค้นหาในตาราง 4 พันล้านรายการ ตัวช่วยจำสามอย่างถูกเรียกคืนใน 0.2 วินาที:
2022 วันที่ 21 พฤศจิกายน
ไม่กี่วันต่อมา ในวันที่ 21 พฤศจิกายน ทีม Trustwallet มุ่งมั่นต่อสาธารณะ บน Github การแก้ไขเพื่อหลีกเลี่ยงการสร้างเมล็ดที่มีข้อบกพร่องใหม่ เราค่อนข้างกังวลว่าจะมีใครบางคนสังเกตเห็นและใช้ประโยชน์จากช่องโหว่นี้
2022 พฤศจิกายน
ทีม Trustwallet อัปเดตแอปเพื่อเตือนผู้ใช้ ป้องกันไม่ให้สร้างเมล็ดที่มีข้อบกพร่องใหม่ และลบโฟลว์ที่ได้รับ
จากนั้นเราติดตามสถานการณ์และกองทุนที่มีความเสี่ยง เพียงไม่กี่วันหลังจากการเปิดตัวกระเป๋าเงินที่มีช่องโหว่นี้ มูลค่าประมาณ 30 ล้านดอลลาร์ก็ตกอยู่ในความเสี่ยง
2023 มีนาคม
ทีม Trustwallet มอบเงินรางวัลสูงสุดที่เราเสนอให้: $100k
2023 วันที่ 22 เมษายน
หลังจากรอหลายเดือนเพื่อให้ผู้ใช้ย้ายเงิน ทีม Trustwallet ได้เปิดเผยช่องโหว่ดังกล่าวและเขียนว่า การชันสูตรศพ. ณ ตอนนี้ ยังมีกระเป๋าเงินเหลืออยู่ที่สามารถขโมยได้ (ประมาณ $100) Trust Wallet สัญญาว่าจะคืนเงินที่ถูกขโมยไป
สรุป
ช่องโหว่นี้แสดงให้เห็นถึงสถานการณ์กรณีที่เลวร้ายที่สุดของข้อบกพร่องของการเข้ารหัสลับ – บัญชีที่ถูกบุกรุกตลอดไป
การสร้างการสุ่มที่ดีเป็นงานที่น่ากังวล – อุปกรณ์บัญชีแยกประเภทอาศัยตรรกะซิลิกอนเฉพาะในชิปสมาร์ทการ์ดที่ผ่านการรับรองของเราซึ่งเป็นมาตรฐานทองคำของอุตสาหกรรมที่ปลอดภัยตลอด 40 ปีที่ผ่านมาเพื่อรับประกันการสุ่มคุณภาพสูงและความต้านทานการงัดแงะ
ด้วยความซับซ้อนในการติดต่อเจ้าของบัญชีเหล่านั้นและความเป็นไปได้ที่จะใช้บัญชีที่ถูกบุกรุกเหล่านั้นกับซอฟต์แวร์และฮาร์ดแวร์กระเป๋าเงินต่างๆ ทุกประเภท TrustWallet จึงสามารถลดความเสี่ยงให้กับผู้ใช้ได้ค่อนข้างดี
ในอนาคต (มาก) (ใกล้) มีแนวโน้มว่าบอทจะต่อสู้เพื่อเป็นคนแรกที่ขโมยเงินที่ฝากไปยังที่อยู่เหล่านั้น คล้ายกับ เกิดอะไรขึ้นกับกระเป๋าสมองในอดีต.
ขอขอบคุณเป็นพิเศษสำหรับ Jean-Baptiste Bédrune ที่ช่วยโลก เพียงไม่กี่วันหลังจากการเปิดตัวส่วนขยาย Trust Wallet เงินเกือบ 30 ล้านดอลลาร์ก็ตกอยู่ในความเสี่ยง สถานการณ์ฝันร้ายอาจเกิดขึ้นได้หากผู้โจมตีพบช่องโหว่หลังจากผ่านไปสองสามเดือน
ในระหว่างการตรวจสอบของเรา เรายังสังเกตเห็นว่าที่อยู่บางรายการมีช่องโหว่ในขณะที่พวกเขาถูกสร้างขึ้นมาเป็นเวลานานก่อนที่จะมีการเปิดตัว Trust Wallet นั่นอาจหมายความว่าช่องโหว่นี้มีอยู่ในการใช้งานกระเป๋าเงินอื่น ๆ ซึ่งเกี่ยวข้องกับ...
- เนื้อหาที่ขับเคลื่อนด้วย SEO และการเผยแพร่ประชาสัมพันธ์ รับการขยายวันนี้
- เพลโตไอสตรีม. ข้อมูลอัจฉริยะ Web3 ขยายความรู้ เข้าถึงได้ที่นี่.
- การสร้างอนาคตโดย Adryenn Ashley เข้าถึงได้ที่นี่.
- ซื้อและขายหุ้นในบริษัท PRE-IPO ด้วย PREIPO® เข้าถึงได้ที่นี่.
- ที่มา: https://www.ledger.com/blog/funds-of-every-wallet-created-with-the-trust-wallet-browser-extension-could-have-been-stolen
- :มี
- :เป็น
- :ไม่
- $ ขึ้น
- 1
- 12
- 13
- 14
- 15%
- 2022
- 23
- 24
- 30
- 39
- 40
- 49
- 8
- a
- สามารถ
- ข้างบน
- เข้า
- ตาม
- ลงชื่อเข้าใช้
- บัญชี
- บรรลุ
- จริง
- ที่เพิ่ม
- นอกจากนี้
- ที่อยู่
- ที่อยู่
- หลังจาก
- อีกครั้ง
- ทั้งหมด
- อนุญาต
- การอนุญาต
- ช่วยให้
- แล้ว
- ด้วย
- an
- และ
- หุ่นยนต์
- ประกาศ
- การประกาศ
- อื่น
- ใด
- app
- การใช้งาน
- แอปพลิเคชัน (DApps)
- ปพลิเคชัน
- เมษายน
- เป็น
- รอบ
- บทความ
- AS
- สินทรัพย์
- ที่เกี่ยวข้อง
- At
- โจมตี
- ผู้เขียน
- ใช้ได้
- AVAX
- หลีกเลี่ยง
- หลีกเลี่ยง
- หลีกเลี่ยง
- สำรอง
- ไม่ดี
- ยอดคงเหลือ
- ยอดคงเหลือ
- ตาม
- ข้อมูลพื้นฐานเกี่ยวกับ
- BE
- รับ
- ก่อน
- กำลัง
- ด้านล่าง
- ดีกว่า
- ระหว่าง
- ใหญ่
- ที่ใหญ่ที่สุด
- พันล้าน
- binance
- Binance SmartChain
- Bip
- ปิดกั้น
- blockchain
- blockchains
- Blocks
- BNB
- บอท
- ความกรุณา
- ของเล่นเพิ่มพัฒนาสมอง
- ตรา
- ทำลาย
- เบราว์เซอร์
- เบราว์เซอร์
- กำลังดุร้าย
- บีเอสซี
- กันชน
- Bug
- แต่
- by
- โทรศัพท์
- โทร
- CAN
- ผู้สมัคร
- ไม่ได้
- กรณี
- มีมาตรฐาน
- โซ่
- ห่วงโซ่
- ถูก
- ตรวจสอบ
- เด็ก
- ชิป
- Chrome
- อย่างเห็นได้ชัด
- รหัส
- ร่วมกัน
- คู่แข่ง
- ความซับซ้อน
- ที่ถูกบุกรุก
- การคำนวณ
- การคำนวณ
- คำนวณ
- คอมพิวเตอร์
- การคำนวณ
- ยืนยัน
- ผลที่ตามมา
- พิจารณา
- มี
- สัญญา
- การแปลง
- แปลง
- แปลง
- แกน
- แก้ไข
- ตรงกัน
- ราคา
- ได้
- คู่
- คอร์ส
- สร้าง
- ที่สร้างขึ้น
- สร้าง
- วิกฤติ
- การเข้ารหัสลับ
- ระบบนิเวศของ Crypto
- กระเป๋าเงิน Crypto
- cryptocurrency
- การเข้ารหัสลับ
- การอ่านรหัส
- ประเพณี
- DApps
- ข้อมูล
- ฐานข้อมูล
- วัน
- วัน
- ซึ่งกระจายอำนาจ
- แอปพลิเคชันที่กระจายอำนาจ
- ทุ่มเท
- กำหนด
- สาธิต
- ฝาก
- ที่ได้มา
- อธิบาย
- แม้จะมี
- รายละเอียด
- รายละเอียด
- รายละเอียด
- ตรวจพบ
- พัฒนา
- เครื่อง
- อุปกรณ์
- DID
- ความแตกต่าง
- ต่าง
- ยาก
- ความยาก
- ดิจิตอล
- สินทรัพย์ดิจิทัล
- โดยตรง
- หมดกำลังใจ
- ค้นพบ
- การกระจาย
- do
- หยุดทำงาน
- โหล
- ท่อระบายน้ำ
- ที่ซ้ำกัน
- ในระหว่าง
- แต่ละ
- ง่ายดาย
- อย่างง่ายดาย
- ง่าย
- ระบบนิเวศ
- ที่ฝัง
- ภาษาอังกฤษ
- พอ
- ทำให้มั่นใจ
- การเข้า
- สภาพแวดล้อม
- ERC-20
- ประมาณการ
- ETH
- ethereum
- ที่อยู่ ethereum
- บล็อกเชน Ethereum
- แม้
- ทุกๆ
- ตัวอย่าง
- โดยเฉพาะ
- ที่มีอยู่
- ที่มีอยู่
- แพง
- อธิบาย
- อธิบาย
- เอาเปรียบ
- นามสกุล
- สารสกัด
- ล้มเหลว
- คุ้นเคย
- FAST
- ที่ชื่นชอบ
- ลักษณะ
- สองสาม
- สู้
- เนื้อไม่มีมัน
- ที่เต็มไป
- สุดท้าย
- ทางการเงิน
- อิสระทางการเงิน
- ปลาย
- ชื่อจริง
- แก้ไขปัญหา
- ข้อบกพร่อง
- กระแส
- ดังต่อไปนี้
- สำหรับ
- บังคับ
- ตลอดไป
- โชคดี
- พบ
- เสรีภาพ
- ราคาเริ่มต้นที่
- ฟังก์ชัน
- ฟังก์ชั่น
- ฟังก์ชั่น
- เงิน
- อนาคต
- เกตเวย์
- รวบรวม
- โดยทั่วไป
- สร้าง
- สร้าง
- การสร้าง
- รุ่น
- เครื่องกำเนิดไฟฟ้า
- ได้รับ
- GitHub
- ทองคำ
- มาตรฐานทองคำ
- ดี
- GPUs
- รับ
- รับประกัน
- สับ
- มี
- จัดการ
- ที่เกิดขึ้น
- ยาก
- ฮาร์ดแวร์
- ฮาร์ดแวร์กระเป๋าสตางค์
- กัญชา
- มี
- ด้วยเหตุนี้
- โปรดคลิกที่นี่เพื่ออ่านรายละเอียดเพิ่มเติม
- ลำดับชั้น
- จุดสูง
- ที่สูงที่สุด
- ชั่วโมง
- สรุป ความน่าเชื่อถือของ Olymp Trade?
- อย่างไรก็ตาม
- HTTPS
- ร้อย
- i
- ความคิด
- identiques
- if
- แสดงให้เห็นถึง
- ทันที
- ส่งผลกระทบ
- การดำเนินงาน
- การดำเนินการ
- การดำเนินการ
- สำคัญ
- เป็นไปไม่ได้
- in
- เหลือเชื่อ
- อุตสาหกรรม
- ความไม่มีที่สิ้นสุด
- ข้อมูล
- แรกเริ่ม
- อินพุต
- แรงบันดาลใจ
- ตัวอย่าง
- ปฏิสัมพันธ์
- อินเตอร์เฟซ
- การตัด
- เข้าไป
- การสืบสวน
- iOS
- IT
- การย้ำ
- ซ้ำ
- ITS
- การสัมภาษณ์
- เพียงแค่
- เก็บ
- คีย์
- กุญแจ
- ทราบ
- รู้ดี
- ชื่อสกุล
- ต่อมา
- ล่าสุด
- นำไปสู่
- บัญชีแยกประเภท
- ซ้าย
- น้อยลง
- ยกระดับ
- ห้องสมุด
- กดไลก์
- น่าจะ
- LIMIT
- ลินุกซ์
- รายการ
- ในท้องถิ่น
- ตรรกะ
- นาน
- เวลานาน
- รอคอยมานาน
- ค้นหา
- ทำ
- ทำ
- ทำให้
- หลาย
- การทำแผนที่
- เจ้านาย
- การจับคู่
- วัสดุ
- Matic
- ความกว้างสูงสุด
- อาจ..
- วิธี
- เมมพูล
- MetaMask
- วิธี
- อพยพ
- ล้าน
- ล้าน
- นาที
- นาที
- วิชาว่าด้วยความจำ
- โมดูล
- โมดูล
- การตรวจสอบ
- การตรวจสอบ
- เดือน
- ข้อมูลเพิ่มเติม
- ยิ่งไปกว่านั้น
- มากที่สุด
- มาก
- หลายสาย
- ต้อง
- my
- ใกล้
- จำเป็น
- จำเป็นต้อง
- ความต้องการ
- ไม่เคย
- ใหม่
- ถัดไป
- ไม่
- ปม
- Node.js
- โหนด
- ปกติ
- ยวด
- สังเกต..
- พฤศจิกายน
- ตอนนี้
- จำนวน
- ตัวเลข
- Nvidia
- ได้รับ
- ที่เกิดขึ้น
- of
- เสนอ
- เสนอ
- on
- ONE
- เพียง
- การดำเนินงาน
- ระบบปฏิบัติการ
- or
- อื่นๆ
- ของเรา
- เอาท์พุต
- เกิน
- ทั้งหมด
- เจ้าของ
- คู่
- Parallel
- พารามิเตอร์
- ส่วนหนึ่ง
- อดีต
- เส้นทาง
- ดำเนินการ
- แพลตฟอร์ม
- เพลโต
- เพลโตดาต้าอินเทลลิเจนซ์
- เพลโตดาต้า
- กรุณา
- จุด
- ความเป็นไปได้
- เป็นไปได้
- โพสต์
- ที่มีประสิทธิภาพ
- pr
- การปฏิบัติ
- อย่างแม่นยำ
- นำเสนอ
- สวย
- ป้องกัน
- ก่อนหน้านี้
- หลักการ
- ส่วนตัว
- คีย์ส่วนตัว
- คีย์ส่วนตัว
- อาจ
- ปัญหา
- กระบวนการ
- ผลิตภัณฑ์
- โครงการ
- สัญญา
- คุณสมบัติ
- ป้องกัน
- ให้
- ให้
- สาธารณะ
- คีย์สาธารณะ
- วัตถุประสงค์
- หลาม
- คุณภาพ
- อย่างรวดเร็ว
- สุ่ม
- สุ่ม
- คะแนน
- มาถึง
- จริง
- เรียลไทม์
- รับ
- การได้รับ
- เมื่อเร็ว ๆ นี้
- ลด
- ความนับถือ
- ที่เกี่ยวข้อง
- ปล่อย
- วางใจ
- ที่เหลืออยู่
- ลบออก
- รายงาน
- ขอ
- ต้องการ
- ต้อง
- ความต้านทาน
- ผล
- ส่งผลให้
- กลับ
- ความเสี่ยง
- วิ่ง
- วิ่ง
- ปลอดภัย
- เดียวกัน
- ลด
- ประหยัด
- สถานการณ์
- โครงการ
- นักวิทยาศาสตร์
- ค้นหา
- ปลอดภัย
- ความปลอดภัย
- เห็น
- เมล็ดพันธุ์
- เมล็ด
- ดูเหมือน
- ผู้ส่ง
- ส่ง
- ลำดับ
- หลาย
- ใช้งานร่วมกัน
- สั้น
- น่า
- ซิลิคอน
- คล้ายคลึงกัน
- ง่าย
- ตั้งแต่
- เดียว
- สถานการณ์
- ขนาด
- ช้า
- มีขนาดเล็กกว่า
- สมาร์ท
- สมาร์ทเชน
- So
- ซอฟต์แวร์
- SOL
- บาง
- บางคน
- แหล่ง
- ช่องว่าง
- การพูด
- เฉพาะ
- โดยเฉพาะ
- ความเร็ว
- แยก
- ระยะ
- มาตรฐาน
- มาตรฐาน
- เริ่มต้น
- ขั้นตอน
- ขั้นตอน
- ยังคง
- ที่ถูกขโมย
- เงินที่ถูกขโมย
- จัดเก็บ
- เก็บไว้
- ความแข็งแรง
- แข็งแรง
- อย่างเช่น
- ที่สนับสนุน
- ควร
- สวิตซ์
- ระบบ
- ตาราง
- ต่อสู้
- เอา
- ใช้เวลา
- เป้า
- เป้าหมาย
- งาน
- ทีม
- ทดสอบ
- การทดสอบ
- การทดสอบ
- กว่า
- ขอบคุณ
- ที่
- พื้นที่
- ข้อมูลพื้นฐานเกี่ยวกับ
- โลก
- ของพวกเขา
- พวกเขา
- แล้วก็
- ที่นั่น
- ล้อยางขัดเหล่านี้ติดตั้งบนแกน XNUMX (มม.) ผลิตภัณฑ์นี้ถูกผลิตในหลายรูปทรง และหลากหลายเบอร์ความแน่นหนาของปริมาณอนุภาคขัดของมัน จะทำให้ท่านได้รับประสิทธิภาพสูงในการขัดและการใช้งานที่ยาวนาน
- พวกเขา
- นี้
- เหล่านั้น
- พัน
- สาม
- ตลอด
- เวลา
- ครั้ง
- ไปยัง
- ในวันนี้
- ราชสกุล
- เอา
- เครื่องมือ
- หัวข้อ
- รวม
- การทำธุรกรรม
- แปลง
- การแปลง
- นิรภัย
- วางใจ
- Trust Wallet
- ลอง
- สอง
- ทีดับบลิว.ที
- แพร่หลาย
- เป็นเอกลักษณ์
- ที่อยู่ที่ไม่ซ้ำกัน
- ให้กับคุณ
- us
- ใช้
- มือสอง
- ผู้ใช้งาน
- เงินผู้ใช้
- ผู้ใช้
- การใช้
- มักจะ
- ความคุ้มค่า
- รุ่น
- มาก
- ความอ่อนแอ
- อ่อนแอ
- ที่รอ
- กระเป๋าสตางค์
- กระเป๋าสตางค์
- คือ
- ทาง..
- we
- Web3
- สัปดาห์ที่ผ่านมา
- คือ
- เมื่อ
- ที่
- ในขณะที่
- ทั้งหมด
- ใคร
- อย่างกว้างขวาง
- จะ
- กับ
- ไม่มี
- คำ
- คำ
- โลก
- กังวล
- แย่ที่สุด
- จะ
- เขียน
- ปี
- คุณ
- ของคุณ
- ลมทะเล