คำเตือนความเสี่ยง: ระวังความเสี่ยงจากการระดมทุนที่ผิดกฎหมายในนาม 'สกุลเงินเสมือน' 'บล็อกเชน' — จากห้าหน่วยงานรวมถึงคณะกรรมการกำกับดูแลการธนาคารและการประกันภัย
ข่าวสาร
ค้นพบ
ค้นหา
เข้าสู่ระบบ
简中
繁中
English
日本語
한국어
ภาษาไทย
Tiếng Việt
BTC
ETH
HTX
SOL
BNB
ดูตลาด
"กลโกงระดับธนบัตร" ใน EOS: EOS ปลอมและการโจมตีแบบต่างๆ
成都链安
特邀专栏作者
2019-09-29 03:04
บทความนี้มีประมาณ 3322 คำ การอ่านทั้งหมดใช้เวลาประมาณ 5 นาที
สกุลเงินปลอมของ DApp นั้นทำให้เข้าใจผิด และการตรวจจับฟังก์ชั่นการโอนก็เลอะเทอะ

เพื่อตอบสนองต่อปัญหาด้านความปลอดภัยของบล็อกเชน ทีมงานของ Beosin (Chengdu Lianan) จะวิเคราะห์และจัดลำดับช่องโหว่ด้านความปลอดภัยของสัญญาอัจฉริยะทุกสัปดาห์ โดยหวังว่าจะช่วยโปรแกรมเมอร์เขียนสัญญาที่ปลอดภัยและมั่นคงยิ่งขึ้นเพื่อป้องกันปัญหาก่อนที่จะเกิดขึ้น

สรุป

สรุป

ในเล่มที่แล้ว เกม EOS ถูกโจมตีซ้ำแล้วซ้ำเล่า และช่องโหว่สุ่มตัวเลขถูกแบนซ้ำแล้วซ้ำเล่า

หัวข้อของปัญหานี้

หัวข้อของปัญหานี้

สกุลเงินปลอมของ DApp นั้นทำให้เข้าใจผิด การละเว้นการตรวจจับฟังก์ชั่นการถ่ายโอนนั้นเลอะเทอะ

พูดถึงภาพยนตร์ในประเทศที่ได้รับความนิยมมากขึ้นในปีนี้ "Wu Shuang" ของ Chow Yun-fat ต้องมีที่มา เทคโนโลยีการผลิตธนบัตรดอลลาร์สหรัฐปลอมในภาพยนตร์นั้นน่าทึ่งและยังอนุมานถึง "การหลอกลวงระดับธนบัตร" ที่โหดร้าย .

ชื่อเรื่องรอง

ปูทางไปสู่ความรู้พื้นฐาน

สถาปัตยกรรมของ EOS Smart Contract

EOS smart contract ประกอบด้วยชุดของการดำเนินการ แต่ละการกระทำแสดงถึงข้อสัญญาเพื่อดำเนินการตามกฎเฉพาะในข้อ การดำเนินการ EOS smart contract แบ่งออกเป็นสามส่วน: การสร้าง การปรับใช้ และการเรียกใช้

ในขั้นตอนของการปรับใช้สัญญาอัจฉริยะ EOS สัญญาอัจฉริยะแต่ละรายการจะต้องใช้ฟังก์ชัน apply() ซึ่งใช้เพื่อจับคู่คำขอดำเนินการกับฟังก์ชันการประมวลผลเฉพาะ รายละเอียดการใช้งานเฉพาะนั้นรวมอยู่ในมาโคร EOSIO_ABI การออกแบบนี้ช่วยให้นักพัฒนาสามารถมุ่งเน้นไปที่การพัฒนาตรรกะทางธุรกิจเท่านั้น โดยไม่ต้องสนใจเทคโนโลยีพื้นฐาน ซึ่งทำให้การพัฒนาง่ายขึ้น ตัวอย่างการใช้ฟังก์ชัน:

 การโจมตีการถ่ายโอน EOS ปลอม

เหตุการณ์ทางประวัติศาสตร์:

EOSBet ที่รู้จักกันดีเสียไปประมาณ 42,000 EOS เมื่อวันที่ 12 กันยายน ซึ่งเริ่มมีแฮ็กเกอร์จำนวนมากที่ใช้โทเค็น EOS ปลอมในการโจมตี ตามมาด้วย eoswindice และ newdex การแลกเปลี่ยนแบบกระจายอำนาจ ซึ่งทั้งหมดลดลงเป็นของแฮ็กเกอร์

การวิเคราะห์การโจมตี:

โทเค็นทั่วไปในห่วงโซ่ EOS คือโทเค็น EOS ซึ่งสร้างขึ้นโดยสัญญา eosio.token ที่ปรับใช้โดย EOSIO แต่โค้ด eosio.token เป็นโอเพ่นซอร์ส บัญชี eos ใด ๆ สามารถปรับใช้สัญญา eosio.token ได้ด้วยตัวเอง และออกโทเค็น ชื่อย่อเป็นโทเค็นของ EOS ดังที่แสดงในรูป เราสามารถเห็น EOS ปลอมไร้ค่าจำนวนมาก:

จะระบุของแท้ของ EOS ได้อย่างไร เครื่องตรวจเงิน? ไม่แน่นอน ชื่อเต็มของโทเค็นจะแสดงบนเบราว์เซอร์ eosflare มีความแตกต่างระหว่างชื่อเต็มของ EOS จริงกับ EOS ปลอม:

จะเห็นได้จากรูปภาพว่าอันหนึ่งคือ EOS และไม่มีคำอธิบายอื่นใดอยู่เบื้องหลัง และอีกอันคือ EOS ปลอม (refundwallet) ของ Refundwallet

ในเบราว์เซอร์ เราสามารถดูรายละเอียดธุรกรรมเพื่อตัดสินว่าโทเค็น EOS ที่ใช้สำหรับธุรกรรมนั้นจริงหรือเท็จ แล้วถ้าวางไว้ในสัญญาอัจฉริยะล่ะ

ตัวอย่างเช่น กรณีสัญญา:

void transfer(const account_name& from,

                            const account_name& to,

                            const asset& quantity,

                            const string& memo)`

นี่คือฟังก์ชันที่ใช้รับสายกลับ เมื่อส่ง EOS ปลอมไป ฟังก์ชันนี้ไม่มีทางแยกแยะของแท้ได้ หากตรวจไม่พบ EOS ล่วงหน้าในการสมัคร จะทำให้สัญญาได้รับ EOS ปลอมและดำเนินการตามตรรกะทางธุรกิจตามปกติ หากบัญชีที่เป็นอันตรายใช้สัญญาเพื่อออกโทเค็น EOS มันสามารถตรวจจับหมาป่าสีขาวมือเปล่าและแลกเปลี่ยนธนบัตรปลอมเป็นเงินจริงได้

แก้ไขข้อผิดพลาด:

ในการตรวจสอบว่าผู้ออก EOS คือ eosio จำเป็นต้องเพิ่มโค้ด == eosio.token ใน apply() เพื่อการตัดสิน

ชื่อเรื่องรอง

ตัวแปรที่ 1: โจมตีการโทรโดยตรงบนฟังก์ชั่นการถ่ายโอน

การวิเคราะห์ช่องโหว่:

หลังจากเพิ่มการตัดสินที่เกี่ยวข้องตามวิธีการซ่อมแซมช่องโหว่ที่กล่าวถึงข้างต้น ฝ่ายโครงการจำนวนมากถอนหายใจด้วยความโล่งอก แต่รหัสช่องโหว่ที่ทำให้เกิดเหตุการณ์ EOSBet นั้นไม่ได้รับการแก้ไขอย่างง่ายดาย เนื่องจาก เมื่อใช้ดังกล่าวข้างต้นนำไปใช้เพื่อตรวจจับการเรียกรหัส มีสถานการณ์บายพาสอื่น ถ้าเงื่อนไขการตรวจจับเป็นเพียง:

if( code == self || code==N(eosio.token) ||action == N(onerror))

จากนั้นเงื่อนไขการตรวจจับนี้จะจัดการการตรวจจับเพียงสองอย่างเท่านั้น: การเรียกใช้การดำเนินการของฟังก์ชันและการเรียกใช้การดำเนินการจาก eosio.token ผู้เรียกใช้การดำเนินการโอนโดยไม่มีการตรวจสอบจะต้องเป็น eosio.token หรือสัญญาของตนเอง

ซึ่งจะนำไปสู่การโอนเข้าบัญชีตามสัญญาที่สามารถเรียกได้โดยตรง

ตัวอย่างเช่น เดิมผู้ใช้ A เรียกว่า eosio.token เพื่อโอน 1 EOS ไปยังผู้ใช้ B จากนั้น eosio.token ส่งใบเสร็จรับเงินโอนเพื่อเรียกฟังก์ชันการโอนของสัญญา B เพื่อดำเนินการตามตรรกะทางธุรกิจ ตอนนี้ ฟังก์ชันการโอนของสัญญา B สามารถ ถูกเรียกโดยตรงและมีการระบุไว้ในนั้น พารามิเตอร์ที่ถูกต้อง เช่น ถึง มูลค่า ฯลฯ ดำเนินการตามตรรกะทางธุรกิจของสัญญา B โดยตรงโดยไม่ต้องโอนเงิน ดังนั้น ผู้โจมตีที่โจมตี EOSBet ได้ข้ามฟังก์ชัน eosio.token->transfer ซึ่งเรียกโดยตรงว่า eosbetdice11->transfer ด้วยพารามิเตอร์ที่ถูกต้อง และดำเนินการตามตรรกะทางธุรกิจของสัญญาโดยไม่โอน EOS ไปยังสัญญา

แก้ไขข้อผิดพลาด:

วิธีป้องกันสำหรับการโจมตีประเภทนี้คือการตรวจจับการกระทำและรหัสในเวลาเดียวกัน นั่นคือ เมื่อใด

ชื่อเรื่องรอง

if (code == N(eosio.token) && action == N(transfer))                     

        {                                                                                }  

การโจมตีใบเสร็จปลอม EOS รุ่น 2

เหตุการณ์ทางประวัติศาสตร์:

หลังจากเหตุการณ์เมื่อวันที่ 14 กันยายน EOSBet ยังได้ออกแถลงการณ์อย่างเป็นทางการโดยกล่าวถึงความสำคัญที่พวกเขาให้ความสำคัญต่อการรักษาความปลอดภัยของรหัส

แต่เพียงหนึ่งเดือนต่อมา ในวันที่ 15 ตุลาคม EOSBet ถูกแฮ็กอีกครั้ง ทำให้สูญเสีย EOS ไปเกือบ 140,000 EOS

การวิเคราะห์ช่องโหว่:

สาเหตุของช่องโหว่คือการขาดการตัดสินในฟังก์ชันการถ่ายโอนของตรรกะการประมวลผลสัญญาอัจฉริยะ: หากการตัดสินขาดหายไป สัญญาจะไม่สามารถตัดสินได้ว่าเป็นตัวเองที่ได้รับการถ่ายโอน และอาจดำเนินการต่อไป ลอจิกฟังก์ชันโดยไม่ได้รับการถ่ายโอน สมมติว่า ผู้โจมตีมีสองบัญชี AB, c เป็นบัญชีสัญญาเกม ผู้โจมตีสามารถเรียก eosio.token ผ่านบัญชี A เพื่อโอน EOS ไปยังบัญชี B จากนั้นปรับใช้สัญญาในบัญชี A หรือ B และเรียกrequire_recipient(N(XXXXXX)อีกครั้งในการโอนสายกลับ) ส่งการแจ้งเตือนการโอนไปยังบัญชีสัญญาเกม C เพื่อให้สามารถข้ามการยืนยัน code==N(eosio.token)&&action==โอนได้และสอดคล้องกัน ตรรกะทางธุรกิจสามารถดำเนินการได้

แก้ไขข้อผิดพลาด:

void transfer(const account_name& from,

                            const account_name& to,

                            const asset& quantity,

                            const string& memo) {

ชื่อเรื่องรอง

         return;

     }

การรักษาความปลอดภัยรหัสเป็นขาวดำ

หลังจากเหตุการณ์ด้านความปลอดภัยและการซ่อมแซมโค้ดหลายครั้ง ในที่สุดเจ้าหน้าที่เกมที่ถูกโจมตีก็แก้ไขช่องโหว่ที่ดูเหมือนไม่น่าเชื่อได้ในที่สุด จะเห็นได้ว่าความปลอดภัยของบล็อกเชนเป็นเทคโนโลยีที่เข้มงวดและคู่ควรอย่างยิ่ง และการกระแทกและกระแทกในช่วงสองปีที่ผ่านมาทำให้เป็นหัวข้อที่หนักมาก มีประโยคหนึ่งใน "Wu Shuang" ว่า "คนที่เห็นแต่ขาวดำจะเป็นผู้แพ้เสมอ" ประโยคนี้ใช้ไม่ได้ในแวดวงบล็อกเชน ไม่เชื่อดูตอนจบของตัวเอกของเรื่อง ภาพยนตร์.

อ้าง:

อ้าง:

[1]: อัปเกรดการโจมตี EOS ปลอมอีกครั้ง: EOSCast ถูกโจมตีโดยแฮ็กเกอร์ "รูปแบบการถ่ายโอน EOS ปลอม" และสูญเสียมากกว่า 60,000 EOS

[2]: เรื่องราวทั้งหมดของ BET ถูกโจมตีโดยแฮกเกอร์ ค้อนตัวจริงคืนที่เกิดเหตุและวิธีการโจมตี

[3]: ช็อก! EOSBet ถูกโจมตีอีกครั้ง ขาดทุนสูงถึง 5 ล้าน นี่เป็นวิธีโจมตีหรือไม่?

[4]: How EOSBET attacked by aabbccddeefg

[5]: EOSBet Transfer Hack Statement

智能合约
安全
ยินดีต้อนรับเข้าร่วมชุมชนทางการของ Odaily
กลุ่มสมาชิก
https://t.me/Odaily_News
กลุ่มสนทนา
https://t.me/Odaily_CryptoPunk
บัญชีทางการ
https://twitter.com/OdailyChina
กลุ่มสนทนา
https://t.me/Odaily_CryptoPunk
สรุปโดย AI
กลับไปด้านบน
สกุลเงินปลอมของ DApp นั้นทำให้เข้าใจผิด และการตรวจจับฟังก์ชั่นการโอนก็เลอะเทอะ
คลังบทความของผู้เขียน
成都链安
อันดับบทความร้อน
Daily
Weekly
ดาวน์โหลดแอพ Odaily พลาเน็ตเดลี่
ให้คนบางกลุ่มเข้าใจ Web3.0 ก่อน
IOS
Android