AWS แก้ไขช่องโหว่การเรียกเก็บเงินสำคัญใน S3 ที่ทำให้ใครก็ตามสามารถเพิ่มค่าใช้จ่าย Cloud ของคุณได้

ทีมชุมชน BigGo
AWS แก้ไขช่องโหว่การเรียกเก็บเงินสำคัญใน S3 ที่ทำให้ใครก็ตามสามารถเพิ่มค่าใช้จ่าย Cloud ของคุณได้

ช่องโหว่การเรียกเก็บเงินที่สำคัญในบริการจัดเก็บข้อมูล S3 ของ Amazon Web Services ( AWS ) ได้รับการแก้ไขแล้ว หลังจากที่ช่องโหว่นี้ทำให้ผู้ประสงค์ร้ายหรือระบบที่ตั้งค่าผิดสามารถเพิ่มค่าใช้จ่าย cloud อย่างมหาศาลให้กับเจ้าของ bucket ที่ไม่รู้เรื่อง ปัญหานี้ซึ่งส่งผลกระทบต่อผู้ใช้ตลอดปี 2024 ได้จุดประกายการอภิปรายที่สำคัญเกี่ยวกับแนวทางการเรียกเก็บเงินและความปลอดภัยของ cloud

ลำดับเหตุการณ์:

  • เมษายน 2024: มีการรายงานช่องโหว่ต่อสาธารณะ
  • พฤษภาคม 2024: AWS ประกาศเปลี่ยนแปลงนโยบายเพื่อหยุดการเรียกเก็บเงินสำหรับคำขอที่ไม่ได้รับอนุญาต
  • สิงหาคม 2024: นโยบายการเรียกเก็บเงินใหม่ถูกนำมาใช้อย่างเต็มรูปแบบ

การค้นพบที่มีราคาแพง

ช่องโหว่นี้ถูกเปิดเผยเมื่อนักพัฒนาที่ทำงานในระบบจัดทำดัชนีเอกสารค้นพบว่าค่าใช้จ่าย AWS ของตนพุ่งสูงขึ้นเป็นกว่า 1,300 ดอลลาร์สหรัฐ ภายในเพียงสองวันหลังจากสร้าง S3 bucket ส่วนตัวที่ควรจะเป็นเพียงแค่ bucket ธรรมดา ค่าใช้จ่ายที่น่าตกใจนี้เผยให้เห็นคำขอ S3 PUT เกือบ 100 ล้านครั้งที่ถูกดำเนินการในวันเดียว ซึ่งทั้งหมดมาจากแหล่งภายนอกที่พยายามเข้าถึง bucket โดยไม่ได้รับอนุญาต

สาเหตุหลักสืบย้อนไปถึงเครื่องมือ open-source ยอดนิยมที่ใช้ชื่อ bucket เดียวกันเป็นตัวอย่างเริ่มต้นในการตั้งค่า การติดตั้งเครื่องมือนี้ทุกครั้งที่ใช้การตั้งค่าเริ่มต้นจะพยายามจัดเก็บข้อมูลสำรองใน bucket ส่วนตัวของนักพัฒนา ทำให้เกิดปริมาณคำขอจำนวนมหาศาลและค่าใช้จ่ายที่สอดคล้องกัน

ตัวอย่างผลกระทบต่อค่าใช้จ่าย:

  • บิลเดิม: มากกว่า $1,300 USD ใน 2 วัน
  • ปริมาณคำขอ: เกือบ 100 ล้าน S3 PUT requests ใน 24 ชั่วโมง
  • อัตราการเก็บข้อมูล: เก็บข้อมูลได้ 10GB ในเวลาไม่ถึง 30 วินาทีเมื่อเปิด bucket สำหรับการทดสอบ

นโยบายการเรียกเก็บเงินที่ถกเถียงของ AWS

สิ่งที่ทำให้สถานการณ์นี้เป็นปัญหาเป็นพิเศษคือนโยบายของ AWS ที่เรียกเก็บเงินจากเจ้าของ bucket สำหรับคำขอขาเข้าทั้งหมด รวมถึงคำขอที่ไม่ได้รับอนุญาตซึ่งส่งผลให้เกิดข้อผิดพลาดการปฏิเสธการเข้าถึง นี่หมายความว่าใครก็ตามที่รู้ชื่อ bucket สามารถเพิ่มค่าใช้จ่ายของผู้ใช้รายอื่นได้โดยตั้งใจหรือโดยบังเอิญ โดยไม่จำเป็นต้องมีบัญชี AWS เลย

นโยบายนี้ขยายไปเกินกว่าค่าใช้จ่ายคำขอธรรมดา เมื่อคำขอ S3 ไม่ระบุภูมิภาค คำขอเหล่านั้นจะเป็นค่าเริ่มต้นไปยังภูมิภาค ap-east-1 และถูกเปลี่ยนเส้นทางตามความจำเป็น โดยเจ้าของ bucket ต้องจ่ายค่าธรรมเนียมเพิ่มเติมสำหรับคำขอที่ถูกเปลี่ยนเส้นทางเหล่านี้

ผลกระทบด้านความปลอดภัยเกินกว่าการเรียกเก็บเงิน

ช่องโหว่นี้เผยให้เห็นมากกว่าแค่ความกังวลเรื่องการเรียกเก็บเงิน เมื่อนักพัฒนาที่ได้รับผลกระทบเปิด bucket ของตนสำหรับการเขียนสาธารณะชั่วคราวเพื่อตรวจสอบปัญหา พวกเขาได้รวบรวมข้อมูลที่ละเอียดอ่อนกว่า 10 กิกะไบต์ภายใน 30 วินาทีจากระบบต่างๆ ที่ตั้งค่าผิดซึ่งพยายามจัดเก็บข้อมูลสำรอง สิ่งนี้เน้นย้ำว่าการมองข้ามการตั้งค่าสามารถนำไปสู่การรั่วไหลของข้อมูลที่ร้ายแรง โดยบริษัทต่างๆ ส่งข้อมูลลับไปยัง S3 bucket สุ่มโดยไม่รู้ตัว

มาตรการป้องกันที่แนะนำโดยชุมชน:

  • ใช้สตริงแบบสุ่มสำหรับชื่อ bucket
  • เพิ่มส่วนต่อท้ายแบบสุ่มให้กับชื่อ bucket ที่มนุษย์อ่านได้
  • เปิดใช้งาน AWS CloudTrail หรือ S3 Server Access Logging สำหรับการติดตาม
  • พิจารณาทางเลือกการเรียกเก็บเงินตามการใช้งานเพื่อความคาดเดาได้ของต้นทุน

การตอบสนองของ AWS และการเปลี่ยนแปลงนโยบาย

หลังจากแรงกดดันจากชุมชนและรายงานการละเมิดการเรียกเก็บเงินนี้ AWS ประกาศในเดือนพฤษภาคม 2024 ว่าจะหยุดเรียกเก็บเงินจากเจ้าของบัญชีสำหรับคำขอที่ไม่ถูกต้องหรือไม่ได้รับอนุญาตไปยัง S3 bucket การเปลี่ยนแปลงนโยบายนี้ซึ่งดำเนินการในเดือนสิงหาคม 2024 แก้ไขช่องโหว่หลักที่ทำให้บุคคลภายนอกสามารถจัดการการเรียกเก็บเงินผ่านคำขอที่ไม่ต้องการได้

ชุมชนเทคโนโลยีตอบสนองด้วยปฏิกิริยาที่หลากหลาย แม้ว่าหลายคนจะชื่นชมการแก้ไข แต่นักพัฒนาบางคนตอนนี้สนับสนุนการใช้สตริงสุ่มในชื่อ bucket หรือเพิ่มส่วนต่อท้ายแบบสุ่มเพื่อป้องกันปัญหาที่คล้ายกัน คนอื่นๆ ใช้เหตุการณ์นี้เป็นข้อโต้แย้งในการหันไปใช้โมเดลการเรียกเก็บเงิน cloud ที่ไม่ใช่แบบใช้จ่ายตามการใช้งานทั้งหมด โดยแนะนำว่าการจัดการเซิร์ฟเวอร์แบบดั้งเดิมหรือบริการ colocation ให้ต้นทุนที่คาดเดาได้มากกว่า

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

อ้างอิง: How an empty S3 bucket can make your AWS bill explode