ตรวจสอบกรณีกระเป๋าเงินถูกขโมย และหารือเกี่ยวกับวิธีการรักษาความปลอดภัยของทรัพย์สินใน Web
ที่มา: Alpha Rabbit Research Notes
ที่มา: Alpha Rabbit Research Notes
เหตุการณ์
เหตุการณ์
เช้าวันหนึ่งในช่วงวันหยุดปีใหม่ในปี 2022 Little C กำลังเตรียมเขียนโค้ดและทดสอบการทำธุรกรรมบนเครือข่ายของ Web3js ต่อไป จู่ๆ ก็พบว่าบัญชีทดสอบของฉัน (ห่วงโซ่ Bsc) ถูกรีเซ็ตเป็นศูนย์ใน MetaMask และยังมีเงิน 100 usd ในบัญชีเมื่อคืนก่อน และหลังจากตรวจสอบการโอนแล้ว ฉันพบว่า:
พื้นหลัง
พื้นหลัง
ชื่อเรื่องรอง
ความสูญเสียเกิดขึ้นได้อย่างไร?
ในวันสุดท้ายของปี 2021 Little C บังเอิญเห็นบัญชีที่น่าสนใจ (บัญชีนี้มีธุรกรรมที่ใช้งานอยู่จำนวนมาก) ติดตามธุรกรรมบนเครือข่ายบางส่วนของเขา และเห็นโครงการที่น่าสนใจมาก (โดยมีอัตราผลตอบแทนต่อปีสูง) จากนั้น เชื่อมต่อกับ MetaMask ของเขาเองโดยบังเอิญ แล้วอนุมัติโดยบังเอิญ เพราะโครงการ Web3 ทั่วไปคือกระบวนการนี้ อนุมัติแล้ว การถ่ายโอนสิ้นสุดลง
แต่ฉากที่น่าตกใจปรากฏขึ้น: หลังจากคลิก เว็บไซต์ทั้งหมดก็หยุดทันที (อันที่จริง ในช่วงที่หยุดทำงาน โจรได้โอนเงินออกไป) ไม่มีการตอบกลับ และ Xiao C ก็ไม่ได้นำมันกลับมาในตอนนั้น ฉัน ปิดเว็บแล้วไปทำอย่างอื่น
ชื่อระดับแรก
ชื่อเรื่องรอง
โจรโอนเงินทั้งหมดในบัญชีน้องซีได้อย่างไร?
ปรากฏการณ์: ตราบใดที่คุณอนุมัติ คุณสามารถโอนเงินที่เกี่ยวข้องทั้งหมดในทางทฤษฎีโดยไม่ต้องใช้คีย์ส่วนตัว
Little C ติดตามแหล่งที่มา อาจเป็นเพราะมีปัญหาในการอนุมัติเว็บไซต์ฟิชชิ่ง ดังนั้นเขาจึงติดตามบันทึกการโอน
ดังที่แสดงในภาพ จะเห็นได้ว่าก่อนอื่นสัญญาได้รับการอนุมัติ (อนุญาต) และสัญญาฟิชชิ่งได้รับอนุญาตให้ดำเนินการกับ BUSD ในบัญชี และไม่มีการจำกัดจำนวน
ทำไมถึงเป็น BUSD? Little C จำได้ว่าเมื่อเขาเข้าสู่ไซต์ฟิชชิ่งนี้ เขาเลือก BUSD เป็นค่าเริ่มต้น ประมาณว่า หลังจากเรียกดูกระเป๋าเงินของไซต์ลิงก์แล้ว ขโมยได้คัดกรองโทเค็นที่มีเงินมากที่สุดในบัญชีออกไปแล้ว
เมื่อ Little C คิดว่าเป็นสัญญา Swap ใหม่ที่ให้ผลตอบแทนต่อปีสูงและกำลังจะทดลองใช้ก่อน เขาก็ดำเนินการอนุมัติตามขั้นตอนเดิม หลังจากอนุมัติเสร็จ เว็บก็ค้างทันที
ต่อมา หลังจากการย้อนกลับประมาณสิบวินาทีหลังจากการอนุญาต สัญญาจะทริกเกอร์การดำเนินการโอนโดยตรง และโอนโทเค็น BUSD ออกไปโดยตรง
ต่อมาข้าพเจ้าได้ตรวจสอบข้อมูลการอนุญาต
โดยทั่วไป การอนุญาตเริ่มต้นของ MetaMask คือ:
แปลงเป็นตัวเลข ที่เรารู้คือ 1.157920892373162 คูณด้วย 10 ยกกำลัง 59 โดยพื้นฐานแล้ว สามารถเข้าใจได้ว่าเป็นการถ่ายโอนแบบไม่จำกัด กล่าวคือ การดำเนินการที่ได้รับอนุญาตนี้อนุญาตให้สัญญาจัดการโทเค็นของบัญชีของฉันอย่างไม่มีกำหนด เห็นแบบนี้แล้วรู้สึกหนาวๆ ปวดหลัง เพราะก่อนหน้านี้กดอนุมัติไปหลายทีแต่ก็ไม่ได้เข้าไปดู
จากนั้นแฮ็กเกอร์จะจัดการที่อยู่กระเป๋าเงินที่สามารถควบคุมวิธีการทำสัญญา เริ่มต้นวิธีการโอนสัญญา และโอนเงินออกไป พวกหลังจากนั้นโปรดใช้ความระมัดระวังเมื่อคุณคลิกการให้สิทธิ์ metamask。
ชื่อระดับแรก
ชื่อเรื่องรอง
ปัญหาอยู่ที่ไหน
เพราะฉันกำลังเรียนรู้ blockchain เมื่อเร็ว ๆ นี้ ลิตเติ้ลซีแยกแยะตรรกะของวิธีการตกปลานี้อย่างคร่าว ๆ ว่าต้องมีหัวใจของการทำร้ายผู้อื่นและหัวใจในการป้องกันไม่ให้ผู้อื่น หากคุณสนใจ คุณสามารถค้นหา:
โอนปกติ
กรณีที่ 1: การโอนโดยตรงระหว่างผู้ใช้ A ผู้ใช้โอน BUSD ไปยังผู้ใช้ B
โดยปกติสัญญาจะตรวจสอบตรรกะต่อไปนี้
1) พิจารณาว่ามีเงินเพียงพอในยอดคงเหลือในบัญชีของผู้ใช้ A หรือไม่ 2) ไม่ว่าจะเป็นการโอนที่เริ่มต้นโดยผู้ใช้ A
ขั้นตอนดังแสดงในรูปด้านล่าง
การแลกเปลี่ยนสัญญาปกติ
เป็นกระบวนการที่เรามักจะใช้การแลกเปลี่ยนแพนเค้ก, ยูนิสแวป ฯลฯ
กรณีที่ 2: การแลกเปลี่ยนโทเค็นผ่านการแลกเปลี่ยน ผู้ใช้ดำเนินการแลกเปลี่ยนโทเค็น (BUSD เป็น WBNB) ดำเนินการตามสัญญาเพื่อตัดสิน:
1) มี BUSD เพียงพอในยอดคงเหลือในบัญชีของผู้ใช้ A หรือไม่ (สมมติว่าสัญญาแลกเปลี่ยนได้รับอนุญาตให้ดำเนินการโทเค็น BUSD ของบัญชี A)
2) สัญญา swap รับเงิน 500BUSD จากบัญชี A และใส่ลงในกลุ่มสัญญา swap (สมมติว่าอัตราแลกเปลี่ยนคือ 1:500)
3) หลังจากสัญญาสำเร็จ ให้โอน 1BNB ไปที่บัญชี A
โปรดทราบว่าจุดที่ 2 และ 3 ดำเนินการโดยโทเค็นการควบคุมสัญญา กล่าวอีกนัยหนึ่ง สัญญาสามารถข้ามเราและเริ่มต้นการดำเนินการโดยตรงกับโทเค็นภายใต้บัญชีของเรา
สัญญาตกปลา
ดูแผนภาพการตรวจสอบย้อนกลับนี้ก่อน
สำหรับการโอนตามปกติ ฝ่ายโอนและฝ่ายดำเนินการตามสัญญาควรเป็นบุคคลเดียวกัน กล่าวคือ (1) และ (2) ในรูปด้านบนควรเริ่มต้นโดยบุคคลเดียวกัน สำหรับการทำธุรกรรมที่ฉันถูกโอนไปที่อยู่ทั้งสองนี้ไม่เหมือนกัน มีการคาดคะเนว่าที่อยู่กระเป๋าเงินที่สามารถดำเนินการตามสัญญาฟิชชิ่งได้ควรควบคุมการดำเนินการตามสัญญา จากนั้นโอน BUSD ที่ฉันอนุญาตไปยังสัญญาฟิชชิ่ง
ในการตรวจสอบสัญญาฟิชชิ่ง จึงไม่น่าแปลกใจที่สัญญาฟิชชิ่งจะเป็นสัญญาที่มีการเข้ารหัส แต่ลองคิดดูก็ไม่ใช่เรื่องยาก ใครศึกษา Solidity มาหน่อยจะรู้ว่าตอนกำหนดสัญญา ตั้ง Admins หรือ Owner เพิ่มอีก 2-3 ตัวก็เพียงพอแล้ว
คำแนะนำด้านความปลอดภัย
คำแนะนำด้านความปลอดภัย
จากเหตุการณ์นี้ เสี่ยวซีค้นหาคำแนะนำและวิธีการที่เป็นประโยชน์ และยังได้เห็นบทเรียนที่นองเลือดมากมาย
นี่คือวิธีการบางอย่างที่คุณสามารถเลือกได้ตามความต้องการของคุณ
1) อย่าใช้กุญแจร่วมกัน
ฉันเห็นโพสต์ก่อนที่จะบอกว่าวลีช่วยจำสร้างบัญชีหลาย ๆ บัญชี ฉันไม่แนะนำบัญชีประเภทนี้เพราะมีแนวโน้มที่จะใช้ในหม้อเดียว
2) รหัสจะถูกบันทึกแบบออฟไลน์
เนื่องจากมีวิธีการป้อนข้อมูลเครื่องมือคลิปบอร์ดมากมายที่จะอัปโหลดบันทึกคลิปบอร์ดของคุณไปยังคลาวด์ หากคุณคัดลอกโดยตรง หากคลาวด์รั่วไหล คีย์ของคุณจะหายไปโดยตรง
คำแนะนำของฉันคือคัดลอกไปยังสมุดบันทึกโดยเร็วที่สุดหลังจากสร้างขึ้น แน่นอน คุณสามารถคัดลอกไปยังสมุดบันทึกและคุณยังสามารถอ้างอิงถึงการเข้ารหัสคีย์ในพจนานุกรมของฉันได้อีกด้วย ตัวอย่างเช่น a จะถูกแทนที่ด้วย 1, b จะถูกแทนที่ด้วย 2 และ 1 จะถูกแทนที่ด้วย a สิ่งนี้ทำให้มั่นใจได้ว่า แม้ว่าจะมีคนเห็นรหัสกระดาษของคุณ แต่คุณก็ไม่สามารถย้ายสินทรัพย์ดิจิทัลของคุณได้
3) แยกการพัฒนาและการทดสอบ (การแยก airdrop และบัญชีหลัก)
ติดตั้งบราวเซอร์ 2 ตัว ตัวนึงเป็น chrome และอีกตัวเป็นตัวกล้า หนึ่งในการจัดการกระเป๋าสตางค์หลักของคุณ อีกอันสามารถมีส่วนร่วมในการรับ airdrops การดำเนินการบนเครือข่ายต่างๆ ฯลฯ
4) อย่าดาวน์โหลดซอฟต์แวร์จากแหล่งที่ไม่รู้จัก
อย่าใช้ baidu เพื่อดาวน์โหลดซอฟต์แวร์จากแหล่งที่ไม่รู้จัก ฉันเคยเห็นกรณีของการดาวน์โหลด metamask ที่ละเมิดลิขสิทธิ์ซึ่งทำให้ล้มละลายโดยตรง อย่าลืมไปที่ที่อยู่อย่างเป็นทางการเพื่อดาวน์โหลด และคุณสามารถอ้างถึง Google Play ได้หากคุณมีเงื่อนไข chrome เว็บสโตร์ ฯลฯ
5) ตรวจสอบการอนุญาตของคุณทันที
URL ที่ต้องตรวจสอบมีดังนี้ Debank ไม่ใช่ open source แต่การโต้ตอบ UI ดีกว่า อนาคตมี open source ให้เลือกเอง
https://debank.com/
https://approved.zone/
https://tac.dappstar.io/
https://ethallowance.com/
ดังที่แสดงในภาพ มันเป็นอนันต์โดยพื้นฐาน
ทุกครั้งที่คุณปลุก MetaMask คุณต้องดูการอนุญาตมากกว่านี้ อย่าไร้สมองเหมือนตอนนี้เพื่ออนุญาตขั้นตอนต่อไป
6) ก่อนการอนุญาต ให้ยืนยันความปลอดภัยของสัญญา
https://www.slowmist.com/service-smart-contract-security-audit.html
คุณสามารถใช้ฟังก์ชันการตรวจสอบสัญญาของ SlowMist
คุณยังสามารถตรวจสอบว่าสัญญานั้นเป็นโอเพ่นซอร์สหรือไม่ หากเป็นโอเพ่นซอร์ส คุณต้องยืนยันว่าสัญญานั้นเป็นสัญญาที่สามารถอัพเกรดได้ ฯลฯ
7) ใส่ใจกับความปลอดภัยเมื่อใช้ airdrops และผลประโยชน์
ใช้บัญชีเล็กเก็บ ไม่ใช้บัญชีใหญ่ กำหนดจำนวนเงินตอนอนุมัติได้! ! !
8) ระวังการบุกรุกของนักสังคมสงเคราะห์ และระวังคนแปลกหน้าที่แชทกับคุณเป็นการส่วนตัวใน Discord
ตัวอย่างเช่น Discord หรือ Telegram มีคนรู้จักคุณไม่กี่วันและบอกว่าเขาจะเอาเงินคุณไปซื้อ airdrops ให้คุณติดตั้งซอฟต์แวร์ที่เขาส่งให้คุณและเข้าสู่ระบบ 99.99% ของเงินประเภทนี้จะสูญเสียคุณ เงิน. บัญชีถูกขโมย
โดยเฉพาะอย่างยิ่งใน Discord ให้ป้อน Discord อย่างเป็นทางการของ NFT แล้วใครบางคนจะแชทกับคุณเป็นการส่วนตัวโดยบอกคุณว่าคุณได้รับรายการที่อนุญาตพิเศษพร้อมแนบลิงก์มิ้นต์ คนโกหกจะเปลี่ยนรูปโปรไฟล์และชื่อเป็นทางการ ซึ่งทำได้โดยการดึงเขาเข้ามาในกลุ่มกับคุณ
อันที่จริง ตราบใดที่คุณไม่โลภ การหลอกลวงประเภทนี้ค่อนข้างง่ายที่จะมองทะลุ โดยทั่วไป คุณจะได้รับแจ้งให้สร้างเหรียญภายในไม่กี่ชั่วโมง และตัวเลขคือ 1-10 โปรเจ็กต์ยอดนิยมหลายโปรเจ็กต์มีมินต์ที่อนุญาตพิเศษและหนึ่งหรือสองมิ้นต์ แต่โปรเจ็กต์นี้มีเวลาจำกัดที่ 10
นอกจากนี้ จะมีมิจฉาชีพเลียนแบบเว็บไซต์อย่างเป็นทางการของโครงการเพื่อสร้างเว็บไซต์ปลอม ข้อความส่วนตัวถึงผู้คนในเซิร์ฟเวอร์โครงการ และขอให้พวกเขามาสร้างเหรียญ
มีเพื่อนที่ซื้อ NFT ปลอมใน opensea แล้วพบว่าไม่เป็นทางการ หลังจากนั้น 2-3 วัน NFT ก็หายไปจากบัญชีแต่โดนหักไป... ความไม่ลงรอยกันอย่างเป็นทางการโพสต์ Opensea URL อย่างเป็นทางการ)
นอกจากนี้ยังมี collab.land ปลอมที่โกงรหัสผ่านกระเป๋าเงิน ส่ง airdrop ไปที่ big v แล้วอ้างว่า big v ซื้อโทเค็น NFT
ปีใหม่ที่จะถึงนี้ ใครๆ ก็ต้องใส่ใจเรื่องความปลอดภัย หวังว่าเพื่อนๆ ที่อ่านบทความนี้จะปลอดภัยหายห่วง!
บทความนี้ต้องขอบคุณผู้เขียนคริส


