"นักล่า" ในป่ามืดของ Ethereum
หมายเหตุบรรณาธิการ: บทความนี้มาจากCrypto Valley สด (รหัส: cryptovalley)Crypto Valley สด (รหัส: cryptovalley)
สัตว์ประหลาดแห่งป่ามืดของ Ethereum ไม่ใช่เรื่องตลก บอทที่ทำงานล่วงหน้าเหล่านี้สามารถวิเคราะห์การเรียกใช้สัญญาอัจฉริยะและฟังก์ชันที่พวกเขาไม่เคยใช้ในสัญญาอัจฉริยะเพื่อผลกำไรที่อาจเกิดขึ้น
ผู้แต่ง: Alex MenUskin แปล: Sherrie พิมพ์ซ้ำโดยได้รับอนุญาตจาก Odaily
สัตว์ประหลาดแห่งป่ามืดของ Ethereum ไม่ใช่เรื่องตลก บอทที่ทำงานล่วงหน้าเหล่านี้สามารถวิเคราะห์การเรียกใช้สัญญาอัจฉริยะและฟังก์ชันที่พวกเขาไม่เคยใช้ในสัญญาอัจฉริยะเพื่อผลกำไรที่อาจเกิดขึ้น
เนื่องจากขาดความเข้าใจโดยทั่วไปเกี่ยวกับหุ่นยนต์เหล่านี้ เราจึงเริ่มดำเนินการในซาฟารีเพื่อเรียนรู้เพิ่มเติมเกี่ยวกับสถานการณ์และดูว่าพวกมันพบได้บ่อยเพียงใด เราสามารถ "จับภาพ" บอทส่วนหน้าทั่วไปบางตัวและวิเคราะห์พฤติกรรมของพวกมันได้ เราดูที่ประสิทธิภาพและความเป็นไปได้ที่การทำธุรกรรมจะถูก "ตามล่า" เรายังทดสอบวิธีต่างๆ ในการหลบพวกมันด้วย
ชื่อเรื่องรอง
Frontrunning คืออะไร?
ตัวอย่างง่ายๆ ของการนำหน้าคือการเสนอราคาแลกเปลี่ยน สมมติว่ามีคนตั้งใจที่จะซื้อ ETH จำนวนมากบน Uniswap ซึ่งเพียงพอที่จะทำให้ราคาของ ETH สูงขึ้น วิธีหนึ่งที่จะได้รับประโยชน์จากสถานการณ์นี้คือการซื้อขายก่อนที่จะซื้อ ETH จำนวนมากในขณะที่ราคายังคงต่ำอยู่ จากนั้นหลังจากที่ราคาพุ่งขึ้น ให้ขาย ETH เพื่อทำกำไร
นอกเหนือจากตัวอย่างการเก็งกำไรนี้ Frontrunning สำหรับธุรกรรมอื่นๆ จำนวนมากยังมีประโยชน์อีกด้วย รวมถึงการชำระบัญชี การซื้อ NFT ที่หายาก หรือข้อผิดพลาดทั่วไปของผู้ใช้ (ค่าที่สกัดจากธุรกรรมหรือลำดับของธุรกรรมเรียกว่า MEV)
บน Ethereum การดำเนินการในแนวหน้าทำได้โดยการเสนอราคาค่าธรรมเนียมการทำธุรกรรมที่สูงขึ้นเล็กน้อยในการทำธุรกรรม กระตุ้นให้นักขุดดำเนินการตามลำดับก่อนหน้านี้เมื่อสร้างบล็อค โดยมีการทำธุรกรรมที่จ่ายเงินสูงกว่าที่ดำเนินการก่อน ดังนั้น หากธุรกรรมสองรายการที่ทำกำไรจากการเรียกสัญญาเดียวกันอยู่ในบล็อกเดียวกัน เฉพาะธุรกรรมแรกเท่านั้นที่จะทำกำไรได้
ชื่อเรื่องรอง
พฤติกรรม
Dan Robinson และ Georgios Konstantopoulos อธิบายถึงการพยายามนำหน้าในบล็อกโพสต์เรื่อง "ETH is a Dark Forest" ซึ่งเงิน 12,000 ดอลลาร์ตกอยู่ในเงื้อมมือของ "ผู้ล่า" ที่ซับซ้อน Predator ล้ำหน้าจนสามารถติดตามธุรกรรมที่มีค่าใดๆ ในกลุ่มธุรกรรม Ethereum และรับรางวัลผ่าน Frontrunning
เรื่องราวของ "Dark Forest" นั้น "น่ากลัว" มากจนยากที่จะเชื่อในตอนแรก อันที่จริง เรามีเหตุผลที่จะสงสัยถึงการมีอยู่ของ "ผู้ล่า" ดังกล่าว จะถอนเงินจาก Uniswap ซึ่งเป็นแพลตฟอร์มการเก็งกำไรที่มีหุ่นยนต์จำนวนมากติดตามอย่างใกล้ชิดได้อย่างไร อาจเป็นอนุญาโตตุลาการ "ปกติ" ได้หรือไม่?
เมื่อต้นปีที่ผ่านมา การวิเคราะห์เชิงลึกของเราได้พิสูจน์ให้เห็นเป็นอย่างอื่น นี่ไม่ใช่หุ่นยนต์ธรรมดา มันเรียกฟังก์ชันสัญญาสำเร็จ ซึ่งตามความรู้ของเรา ไม่เคยถูกเรียกมาก่อน เงินถูกสูบไปแม้ว่าจะทำให้การทำธุรกรรมผ่าน proxy smart contracts สับสนก็ตาม
มันค่อนข้างน่ากังวลที่จะพูดน้อย ความสามารถในการตรวจสอบธุรกรรมใด ๆ ในกลุ่มธุรกรรมเป็นอาวุธที่ทรงพลังอย่างยิ่ง ที่น่าเป็นห่วงคือบริการบางอย่างเริ่มเสนอเลเยอร์การซื้อขายแบบ "dark pool" ต่อสาธารณะ
ชั้นการทำธุรกรรม "dark pool" ไม่ได้ใช้บริการเช่น Infura หรือแม้แต่โหนดส่วนตัว แต่จะส่งธุรกรรมโดยตรงไปยังนักขุดโดยสัญญาว่าจะไม่แพร่กระจายไปยังส่วนที่เหลือของเครือข่าย ทำให้พวกเขาปลอดภัยจากการสอดแนมของนักล่า
Samcsun และ co. ใช้วิธีการที่คล้ายกันเมื่อพยายามดึงเงิน 9.6 ล้านดอลลาร์จากสัญญาที่มีช่องโหว่ ไม่ใช่เรื่องยากที่จะจินตนาการว่านักขุดเริ่มใช้บอทของ Frontrunning เอง โดยมอบการเข้าถึงที่ปลอดภัยให้กับผู้ที่จ่ายเบี้ยประกันภัยเท่านั้น
ซึ่งแตกต่างจากองค์ประกอบอื่นๆ ของ ethereum เช่น สัญญาอัจฉริยะที่สามารถทดสอบได้ในสภาพแวดล้อมการพัฒนาหรือบนเครือข่ายทดสอบ บอทเหล่านี้มีอยู่ในเครือข่ายหลักของ ethereum เท่านั้น นอกเหนือจากการทดลองใช้งานครั้งแรก มันไม่สมเหตุสมผลทางการเงินสำหรับพวกเขาที่จะลองทำธุรกรรม testnet ในส่วนหน้า นอกจากนี้ พวกเขาไม่จำเป็นต้องเล่นตามกฎเดียวกันกับทุกคน เพราะตรรกะของพวกเขาถูกซ่อนไว้
เพื่อให้แน่ใจว่า Frontrunners ที่เราจับได้นั้นเป็น Frontrunners ทั่วไป "จริง" เราจำเป็นต้องมีกับดักที่ไม่เหมือนใคร กับดักคือสัญญาที่สร้างขึ้นใหม่ซึ่งเริ่มต้นโดยสตริงลับที่แฮช SHA256 โดยมีเงินทุนบางส่วนสำหรับซื้อกิจการ เงินที่ถูกล็อกจะสามารถถอนออกได้ก็ต่อเมื่อมีการเปิดเผยความลับนี้ และเงินจะถูกส่งโดยตรงไปยังผู้ส่งธุรกรรมการถอน
แนวคิดคือการส่งธุรกรรม "ล่อ" โดยให้ข้อมูลลับที่ถูกต้อง ดูว่ามีใครพยายามทำซ้ำหรือไม่ จากนั้นจึงระบุความลับด้วยตนเอง ซึ่งจะทำให้ได้เงินที่ใช้งานได้ หากมีคนได้รับเงินก่อนการทำธุรกรรมล่อ หมายความว่าใครบางคนสามารถวิเคราะห์ธุรกรรมในขณะที่ยังคงอยู่ในกลุ่มธุรกรรม l คัดลอกเนื้อหาที่เกี่ยวข้องและให้ข้อมูลลับ
ที่น่าสนใจคือพวกเขาจะเสนอความลับที่พวกเขาไม่เคยรู้มาก่อน สัญญาที่พวกเขาไม่เคยเห็นมาก่อน เพื่อรับเงิน
ชื่อเรื่องรอง
frontrunner เฉลี่ยทำงานอย่างไร?
ส่วนสำคัญของการทดลองนี้คือการทำความเข้าใจว่า Frontrunner ทำงานอย่างไร อย่างไรก็ตาม หากมีคนสร้างเครื่องจักรทำเงิน มันอาจจะไม่ถูกแชร์บน Github ดังนั้นเราจึงทำได้เพียงสังเกตและทำวิศวกรรมย้อนกลับพฤติกรรมของอาชญากร
โดยปกติจะมีสองส่วนในการสร้าง frontrunner สำหรับวัตถุประสงค์ทั่วไป องค์ประกอบแรกคือบัญชี Ethereum ที่สามารถส่งธุรกรรมที่แก้ไขได้โดยมีหรือไม่มีตัวแทนกระเป๋าเงินอัจฉริยะ ประการที่สองคือ "แบ็กเอนด์" ซึ่งเป็นสมองของการดำเนินการ ซึ่งส่วนใหญ่เกิดขึ้นนอกเครือข่าย ผู้ดำเนินการใช้เทคนิคบางอย่างเพื่อตรวจสอบธุรกรรมแต่ละรายการในกลุ่ม แยกวิเคราะห์ แทนที่พารามิเตอร์ (เช่น tx caller) และพิจารณาว่ามีกำไรหรือไม่
นอกจากนี้ เวลายังมีความสำคัญเนื่องจากจำเป็นต้องวิเคราะห์ธุรกรรมแต่ละรายการ (ซึ่งมีจำนวนมาก) ในกลุ่มธุรกรรม ใช้เวลาเฉลี่ย 12 วินาทีในการขุดบล็อก Ethereum หากค่าธรรมเนียมการทำธุรกรรมสำหรับธุรกรรมนี้สูงพอ จะต้องวิเคราะห์และเปลี่ยนอย่างรวดเร็วพอก่อนที่บล็อกถัดไปจะมาถึง
นี่เป็นกระบวนการที่น่าจะเป็นไปได้ และเป็นไปได้ที่จะขุดบล็อกทันทีที่มีการถ่ายทอดธุรกรรม ทำให้บอทไม่มีเวลาวิเคราะห์ได้สำเร็จและเผยแพร่ธุรกรรมที่กำลังดำเนินอยู่
ด้วยการพิจารณาเหล่านี้และความคิดบางอย่าง เราได้ทดสอบว่าหุ่นยนต์ใช้เวลานานเท่าใดในการคว้าเหยื่อ"ชื่อเรื่องรอง"สัญญาของเรา (ผู้ให้รางวัล) มียอดเงินเริ่มต้นที่ 0.035 ETH ซึ่งมีมูลค่าประมาณ $20 ในตอนนั้น เงินเหล่านี้มีไว้สำหรับใครก็ตามที่ให้ preimage ที่ถูกต้องกับแฮชที่จัดเก็บไว้ในสัญญา เพื่อที่จะได้รับเงินทุนและทำหน้าที่เป็นตัวกระตุ้นสำหรับผู้ล่า บัญชีแยกต่างหาก (ผู้ได้รับ) จะพยายามรับเงินโดยการจัดเตรียมสิ่งที่เหมาะสม
ภาพย้อนกลับ
ชอบถอนเงิน.
รอบแรก : ทำสัญญาโดยตรง
เพื่อให้แน่ใจว่ากับดักพื้นฐานของเราใช้งานได้ ก่อนอื่นเราจะใช้บัญชี getter เพื่อเรียกสัญญา ในการลองครั้งแรก ด้วยค่าธรรมเนียมการทำธุรกรรมที่ค่อนข้างสูง (กำหนดโดยกรอบ ETH) เราสามารถเรียกเงินคืนได้
อาจเป็นเพราะมาร์จิ้นต่ำเกินไปที่จะดึงดูดผู้ล่า หรือเพราะดีลถูกขุดเร็วเกินไปที่พวกมันจะตอบสนอง แน่นอนว่านี่ไม่ใช่สิ่งที่เราต้องการ เพราะเป้าหมายของเราคือการจับผู้ล่า
ชื่อเรื่องรอง
ในรอบนี้เราแก้ปัญหาที่เคยมีมา เราเพิ่มผลกำไรที่อาจเกิดขึ้นและลดค่าธรรมเนียมการทำธุรกรรมลง เพื่อไม่ให้ธุรกรรมถูกขุดเร็วเกินไป ทำให้บอทมีเวลาค้นพบมัน สัญญายังต่อท้าย 0.04 ETH (เพิ่มขึ้น 0.005 จากเมื่อก่อน)
ครั้งนี้เราทำสำเร็จ ธุรกรรมรอประมาณ 3 นาทีก่อนที่จะถูกขุด ไม่ได้รับมูลค่าจากสัญญา ตามธุรกรรมภายในของสัญญา เราพบว่าเงินไหลไปยังผู้อื่น
ธุรกรรมปัจจุบันใช้ 25.000001111 Gwei (.000001111 Gwei สูงกว่าที่เราใช้) และถูกขุดในบล็อกเดียวกับที่พยายาม "แยก"
ชื่อเรื่องรอง
ปลูกฝังผู้ติดตาม
ตอนนี้เราหาบอทได้แล้ว (โดยมีค่าใช้จ่ายบางส่วน) เราสามารถดึงข้อมูลเชิงลึกที่น่าสนใจได้ ประการแรก การทำธุรกรรมระบุว่าการเรียกทำสัญญาไม่ได้ดำเนินการโดยตรง แทนที่จะเพียงแค่คัดลอกธุรกรรมและส่งแบบสุ่มสี่สุ่มห้าจากบัญชีที่เป็นเจ้าของ บอทจะส่งมันผ่าน proxy smart contract ที่ทำหน้าที่เป็นกระเป๋าเงินอัจฉริยะเพื่อดำเนินการธุรกรรมเหล่านั้น
ตอนนี้เราสามารถติดตามที่อยู่การทำธุรกรรมก่อนหน้านี้และในอนาคตเพื่อดูว่าบอทประสบความสำเร็จเพียงใดและทำงานอย่างไร
สัญญาที่แยกส่วนมีหน้าที่หลักสองประการ:
ด้วยฟังก์ชันนี้ สัญญาพร็อกซีจะทำหน้าที่เป็นกระเป๋าเงินอัจฉริยะสำหรับผู้ดำเนินการ นอกจากความสามารถในการโทรไปยังฟังก์ชั่นภายนอกแล้ว ยังรับประกันว่ายอดคงเหลือที่จุดเริ่มต้นของธุรกรรมนั้นมีค่าอย่างน้อยเท่ากับยอดคงเหลือเมื่อสิ้นสุดธุรกรรม มิฉะนั้นจะสามารถกู้คืนได้ ดังนั้นจึงหลีกเลี่ยงการสูญเสียที่อาจเกิดขึ้นได้ เงินเมื่อเรียกสัญญาที่ไม่รู้จัก (ยกเว้นค่าธรรมเนียมการทำธุรกรรม)
การใช้ Dune Analytics เราสามารถเห็นได้ว่าบอทประสบความสำเร็จเพียงใดตั้งแต่เดือนพฤษภาคม 2018!
สมมติว่าบอตนี้ใช้พร็อกซีเดียวกันและที่อยู่สำหรับส่งเพื่อออกธุรกรรม เราสามารถประเมินรายได้รวมประมาณ 17 ETH (ประมาณ 10,000 ดอลลาร์ในขณะที่เขียน)
ชื่อเรื่องรอง
รอบที่สาม: พวกเขาฉลาดแค่ไหน?
ตอนนี้เรามั่นใจแล้วว่าบอทกำลังโจมตีเรา เราต้องการทดสอบว่าสามารถสกัดเหยื่อได้หรือไม่ (นอกจากนี้ยังมีฟังก์ชั่น "รับ" ในสัญญาซึ่งสามารถคืนเงินให้เราได้)
เราปรับใช้สัญญา ProxyTaker และเรียกฟังก์ชันที่เหมาะสมเพื่อพยายามถอนเงินของเรา เนื่องจากค่าใช้จ่ายในการรับเงินผ่านพร็อกซีสูงขึ้นเล็กน้อย สัญญาผู้ให้สิทธิ์จึงมีจำนวน ETH สูงขึ้นเล็กน้อยที่ 0.055 ETH ดูเถิด ดีลของเราถูกบ็อตตัวอื่นแย่งไปในทันที
ครั้งนี้ประทับใจยิ่งกว่า บอทไม่เพียงแค่ตรวจจับธุรกรรมการถอนเงินของเราเท่านั้นแต่ยังระบุได้จากการโทรภายในจากสัญญาที่แตกต่างไปจากเดิมอย่างสิ้นเชิง!ความสามารถนี้สำเร็จในเวลาบันทึก ธุรกรรมการถอนของเราถูกขุดภายในไม่กี่วินาที (เช่นเดียวกับบอท)
ด้วยรูปแบบพฤติกรรมเดียวกันของบอท (เรียกตัวแทนจากบัญชี A และโอนเงินไปยังบัญชี B) และความใกล้เคียงของเหตุการณ์ มีเหตุผลที่จะสันนิษฐานว่าบอทกำลังดำเนินการทั่วไปเพื่อต่อต้านแฮ็กเกอร์ผิวขาวในเรื่องนี้ เหตุการณ์.
หุ่นยนต์ตัวนี้ซับซ้อนกว่าตัวก่อนหน้ามาก ไม่เพียงแต่มุ่งเน้นไปที่ ETH เท่านั้น แต่ยังดำเนินธุรกรรมการเก็งกำไรต่างๆ
นอกจากนี้ยังประสบความสำเร็จในแง่ของยอดคงเหลือในบัญชีที่รวบรวมเงิน ขณะนี้ยอดคงเหลืออยู่ที่ประมาณ 300 ETH (ประมาณ 180,000 ดอลลาร์ในขณะที่เขียน) นอกจากนี้ เรายังสามารถลบการไหลเข้าและออกทั้งหมดออกจากที่อยู่ของสัญญาเพื่อประเมินผลตอบแทนรวมประมาณ 900 ETH นี่เป็นเพียงค่าประมาณคร่าวเท่านั้น เนื่องจากบัญชีอาจทำธุรกรรมที่ไม่เกี่ยวข้องกับกิจกรรมที่ดำเนินการล่วงหน้า (ด้านล่างคือรายการการซื้อขายของบอททั้งหมดที่มีค่าเป็นบวก)
ชื่อเรื่องรอง
รอบสุดท้าย: การสกัดสำเร็จ
เพื่อทำให้ความท้าทายนี้น่าสนใจขึ้นเล็กน้อย เราได้พยายามทำให้งงงวยอีกครั้ง ครั้งนี้ใช้สัญญาพร็อกซีที่มีแต่เราเท่านั้นที่ใช้ได้ นั่นคือ OwnerdTaker
การตั้งค่าคล้ายกับรอบที่สาม สัญญาการให้สิทธิ์ต่อท้าย 0.05 ETH เงินจะถูกโอนกลับมาให้เราในธุรกรรมเดียวกัน แทนที่จะเหลืออยู่ในสัญญา
ในความพยายามครั้งแรก การทำธุรกรรมกับสัญญา OwnerdTaker ใช้เวลาประมาณ 1 นาทีในการขุด และเราสามารถถอนเงินได้
การทดลองเกิดขึ้นซ้ำแล้วซ้ำอีก โดยครั้งนี้เป็นการเติมสัญญาของผู้ให้ด้วย 0.06 ETH ซึ่งเป็นการจ่ายเงินสูงสุดที่เราเคยใช้มา เพื่อให้แน่ใจว่าการจ่ายเงินที่ต่ำกว่านั้นไม่ใช่สาเหตุของการขาดความพยายามในการดำเนินการแนวหน้า
ข้อกำหนดที่อนุญาตเฉพาะเจ้าของสัญญาเท่านั้นที่จะดำเนินการโทรได้ หรือข้อเท็จจริงที่ว่าเงินถูกส่งไปยังปลายทางอื่นที่ไม่ใช่สัญญาการโทร จะช่วยหลีกเลี่ยงการพยายามดำเนินการล่วงหน้า
แล้วเราชนะไหม?
บอทมักจะนึกถึงการดูแลตนเองก่อน หลังจากนั้น พวกมันกำลังเรียกใช้สัญญาที่ไม่รู้จัก ซึ่งอาจใช้รหัสโดยอำเภอใจ มีเหตุผลว่าพวกเขาจะหลีกเลี่ยงความเสี่ยงที่ไม่จำเป็นหรือการสูญเสียค่าธรรมเนียมการทำธุรกรรมหากไม่รับประกันผลกำไร
ชื่อเรื่องรอง
ทำไมคราวที่แล้วเราถึงต้านได้ (Frontrunning)
สรุปแล้ว
ยากที่จะพูด. อาจเป็นไปได้ว่าบอทไม่เสี่ยงที่จะสื่อสารกับสัญญาที่รับรองความถูกต้อง หรือความจริงที่ว่าเงินถูกโอนไปยังที่อยู่อื่นโดยไม่ได้ตั้งใจ แน่นอนว่านั่นไม่ได้หมายความว่าจะเป็นการหลีกเลี่ยง Frontrunner ทั้งหมด เป็นไปได้มากว่า มีบอทที่ซับซ้อนกว่าแฝงตัวอยู่ในกลุ่มการซื้อขาย ซึ่งไม่เต็มใจที่จะเสี่ยงกับกำไรเล็กน้อยเช่นนี้
ชื่อเรื่องรอง
สรุปแล้ว
ในการทดลองสั้นๆ นี้ เราสามารถแสดงให้เห็นว่ามีบอทที่ทำงานด้านหน้าที่ใช้งานทั่วไปอยู่ และพวกมันมีความซับซ้อนสูง
แน่นอน เราทราบดีว่าการทดลองของเรายังห่างไกลจากความสมบูรณ์หรือขั้นสุดท้าย มีบอทอื่น ๆ อีกมากมายที่มีทริกเกอร์และโหมดการทำงานที่แตกต่างกันอย่างมาก ปัจจัยต่างๆ เช่น การกลับหัวกลับหางที่อาจเกิดขึ้น รูปแบบการสื่อสาร และความซับซ้อนขั้นต่ำ (เช่น ขีดจำกัดค่าธรรมเนียมการทำธุรกรรม) อาจส่งผลต่อวิธีการทำงาน
อย่างไรก็ตาม เราเชื่อว่าผลงานของเราเป็นเครื่องพิสูจน์แนวคิดและให้ความกระจ่างเพิ่มเติมเกี่ยวกับวิธีการทำงานของหุ่นยนต์ส่วนหน้าที่ใช้งานทั่วไปเหล่านี้
ดังนั้นจึงจำเป็นอย่างยิ่งที่จะต้องเข้าใจหุ่นยนต์เหล่านี้และวิธีการทำงานของหุ่นยนต์ เพื่อให้เราสามารถสร้างระบบที่ปลอดภัยยิ่งขึ้นทั้งในปัจจุบันและอนาคต โครงการเช่น Flashbots พยายามทำเช่นนี้โดยทำให้การขุด MEV เป็นประชาธิปไตยและทำให้เป็นทรัพยากรสาธารณะ เราหวังว่าการศึกษานี้จะช่วยให้บรรลุเป้าหมายนี้
หากคุณพบบอทเหล่านี้ หรือกำลังมองหาเทคนิคที่ซับซ้อนมากขึ้น โปรดติดต่อเรา ด้วยการแบ่งปันประสบการณ์ของคุณ เราจะเข้าใจบอทเหล่านี้ได้ดีขึ้นและสร้างชุมชน crypto ที่ปลอดภัยยิ่งขึ้นสำหรับพวกเราทุกคน
ขอบคุณ Tal Be'ery, Omer Shlomovitz, Oded Leiba, Dan Robinson และคนอื่นๆ สำหรับความช่วยเหลือในบทความนี้
ชื่อเรื่องรอง
ภาคผนวก


