มัลแวร์โอเพนซอร์ส: ปัญหา

มัลแวร์โอเพนซอร์ส: ปัญหา

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

เพื่อความกระชับในการอธิบาย เราจะพูดถึงเรื่องต่อไปนี้ แพคเกจซอฟต์แวร์ส่วนประกอบต่างๆ ในรูปแบบบรรจุภัณฑ์ที่จัดทำโดยบุคคลที่สาม ซึ่งรวมถึงส่วนประกอบที่ใช้โดยตัวจัดการแพ็กเกจ เช่น NPM หรือ Poetry รวมถึงส่วนประกอบอื่นๆ ด้วย ส่วนประกอบของระบบปฏิบัติการ รวมถึงไลบรารีและไฟล์ไบนารีที่สามารถเรียกใช้งานได้ รูปภาพคอนเทนเนอร์ และเครื่องเสมือน หรือ ส่วนขยายเครื่องมือ สำหรับเครื่องมือในการพัฒนา สร้าง และปรับใช้ เราพบเห็นแพ็กเกจที่เป็นอันตรายอยู่ทุกหนทุกแห่ง อาชญากรไซเบอร์ไม่สนใจ พวกเขายินดีกับทางเลือกต่างๆ ที่โครงสร้างพื้นฐานซอฟต์แวร์สมัยใหม่จัดหาให้ และใช้รีจิสทรีและเครื่องมือที่เหมาะสมกับเจตนารมณ์ของพวกเขามากที่สุด ดังนั้นโปรดจำไว้ว่าแพ็กเกจซอฟต์แวร์เป็นคำย่อสำหรับอิมเมจคอนเทนเนอร์ แพ็กเกจไบนารี ที่เก็บโอเพนซอร์ส และส่วนขยายหรือปลั๊กอินทุกประเภท (IDE, CI/CD ระบบต่างๆ (รวมถึงเครื่องมือสร้างโปรแกรม) ล้วนตกอยู่ภายใต้การโจมตีอยู่เป็นประจำ

ซีรีส์เรื่องนี้จะมีทั้งหมด 5 ตอน:

  • ปัญหาของแพ็กเกจโอเพนซอร์สคืออะไร? นี่คือหัวข้อหลักของบทความนี้ ทำไมอาชญากรทุกประเภทจึงเผยแพร่โปรแกรมที่เป็นอันตราย? ทำไมฉันจึงควรกังวล?
  • กายวิภาคของมัลแวร์: แนวโน้มเป็นอย่างไร? ในตอนนี้ เราจะมุ่งเน้นไปที่ภัยคุกคามที่เรากำลังเฝ้าระวังด้วยระบบ MEW ของเราอยู่ทุกวัน ท่ามกลางสัญญาณรบกวนจำนวนมากจากแพ็กเก็ตที่เป็นอันตรายซึ่งใช้กลโกง typosquatting หรือการสร้างความสับสนในการจัดลำดับการพึ่งพา (dependency confusion) ทำให้การโจมตีเพียงส่วนน้อยนั้นร้ายกาจและก่อให้เกิดความเสี่ยงสูงกว่ามาก พฤติกรรมของผู้ไม่ประสงค์ดีเกี่ยวกับระบบปฏิบัติการเปลี่ยนแปลงไปอย่างไรบ้างในช่วงที่ผ่านมา? ตัวเลขเป็นอย่างไร? กลยุทธ์ เทคนิค และขั้นตอนที่ใช้คืออะไร และมีการกระทำที่เป็นอันตรายอะไรบ้างที่พบเห็น?
  • การป้องกันมัลแวร์โอเพนซอร์ส: อะไรได้ผล (และอะไรไม่ได้ผล)ผู้เชี่ยวชาญด้านความปลอดภัยส่วนใหญ่มีแนวคิดเกี่ยวกับวิธีการรับมือกับภัยคุกคามนี้ เราได้ยินผู้จัดการด้านความปลอดภัยกล่าวโดยไม่ลังเลเลยว่า SCA เครื่องมือต่างๆ บอกคุณอยู่แล้วว่าเวอร์ชันของแพ็กเกจนั้นเป็นมัลแวร์ หรือว่าแพ็กเกจเหล่านั้นพึ่งพาซอฟต์แวร์ส่วนประกอบที่เป็นที่รู้จักและได้รับการตรวจสอบอย่างดี ซึ่งมัลแวร์ใดๆ ก็ตามจะถูกตรวจจับและกำจัดออกไปอย่างรวดเร็ว นอกจากนี้ พวกเขายังใช้เวอร์ชันย่อย/แพตช์แบบเปิดเพื่อแก้ไขช่องโหว่โดยอัตโนมัติ ซึ่งเป็นวิธีที่ถูกต้องและแนะนำในการลดความเสี่ยงจากการพึ่งพาซอฟต์แวร์โอเพนซอร์ส โดยยึดหลักการ “แพตช์เร็ว แพตช์บ่อย” ในตอนนี้ เราจะมาทบทวนว่าทำไมแนวคิดเหล่านี้ถึงผิด และความเข้าใจผิดเหล่านี้มีส่วนทำให้กลไกการโจมตีนี้ได้รับความนิยม และทำให้องค์กรต่างๆ เผชิญกับความเสี่ยงอย่างมหาศาลได้อย่างไร เราจะปิดท้ายด้วยสิ่งที่ได้ผล และความพยายามและทรัพยากรที่เกี่ยวข้อง
  • มัลแวร์โอเพนซอร์ส: แนวทางของ Xygeniในเอพิโซดนี้ เราจะนำเสนอถึงกลยุทธ์ที่เราใช้ที่ Xygeni สำหรับระบบเตือนภัยมัลแวร์ล่วงหน้า (MEW) ของเรา ระบบหลายขั้นตอนทำงานอย่างไรในแบบเรียลไทม์เมื่อมีการเผยแพร่แพ็กเกจเวอร์ชันใหม่ วิธีการรวบรวมหลักฐานจากแหล่งต่างๆ วิธีการคัดกรอง เกณฑ์การจำแนกประเภทที่เราใช้ และเหตุใดจึงยังจำเป็นต้องมีการวิเคราะห์ด้วยตนเองเพื่อยืนยันลักษณะของแพ็กเกจที่เป็นอันตราย ข้อเสนอแนะจากทีมภายในและทีมรีจิสทรีช่วยให้ระบบเรียนรู้จากหลักฐานที่รวบรวมไว้ในอดีตเพื่อลดการแจ้งเตือนผิดพลาดให้น้อยที่สุดได้อย่างไร และเราจะอธิบายว่าเรากำลังช่วยเหลือ NPM, GitHub, PyPI และโครงสร้างพื้นฐานที่สำคัญอื่นๆ ในระบบนิเวศโอเพนซอร์สอย่างไร เพื่อลดระยะเวลาการคงอยู่ของมัลแวร์. 
  • การแสวงหาประโยชน์จากซอฟต์แวร์โอเพนซอร์ส: สิ่งที่ควรคาดหวังจากเหล่าผู้ไม่หวังดีซีรีส์นี้จะจบลงด้วยการเน้นไปที่การกระทำใหม่ล่าสุดที่ฝ่ายตรงข้ามกำลังนำมาใช้เพื่อทำให้การโจมตีแนบเนียนยิ่งขึ้น ตรวจจับได้ยากขึ้น กำหนดเป้าหมายไปยังอุตสาหกรรมเฉพาะเจาะจงมากขึ้น และดึงผลประโยชน์จากการโจมตีประเภทนี้ได้มากขึ้น การโจมตีด้วยแรนซัมแวร์จะยังคงใช้ช่องทางนี้ต่อไปหรือไม่? ผู้ร้ายใช้เครื่องมือ AI ในการส่งแพ็กเกจมัลแวร์ที่ซับซ้อนยิ่งขึ้นได้อย่างไร? โครงการยอดนิยมกำลังตกอยู่ในอันตรายหรือไม่? นี่เป็นการให้ผู้อ่านได้สัมผัสถึงการแข่งขันด้านอาวุธนี้ และสิ่งที่คาดหวังได้ในระยะสั้น (ครึ่งหลังของปี 2024) และระยะกลาง (2025) เราจะได้เรียนรู้ว่าการโจมตีเช่นที่เกิดขึ้นเมื่อเร็วๆ นี้ เกิดขึ้นได้อย่างไร XZ-Utils Backdoorหรือการโจมตีการดำรงชีวิตด้วยทรัพยากรธรรมชาติ ตัวสร้างอิเล็กตรอน ข้อมูลในเดือนมีนาคม ปี 2024 แสดงให้เห็นว่าเราควรเฝ้าระวังการเปลี่ยนแปลงของฝ่ายตรงข้ามอย่างต่อเนื่อง 

มาเริ่มกันที่ตอนแรกกันเลย: เกิดอะไรขึ้นกับแพ็กเกจโอเพนซอร์สที่เป็นอันตราย?

ปัญหาของแพ็กเกจโอเพนซอร์สคืออะไร?

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

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

แพ็กเกจที่เป็นอันตราย เพิ่มขึ้นถึง 6 เท่าในปี 2022และยังคงเติบโตอย่างต่อเนื่องด้วยปัจจัย 2.5 เท่าในปี 2023 ปีที่แล้วพบแพ็กเกจที่เป็นอันตรายมากถึง 245,000 รายการ ซึ่งเป็นตัวเลขที่มากกว่าสองเท่าของจำนวนรวมจากปีก่อนๆ รวมกัน นี่คือการเติบโตแบบทวีคูณ! จากการลบแพ็กเกจที่ได้รับการยืนยันว่าเป็นมัลแวร์จำนวนหลายร้อยรายการในปี 2021 และจำนวนหลายพันรายการในปี 2022 เราพบ "สัญญาณรบกวน" มากขึ้นในปี 2023 ด้วยอัตราที่ใกล้เคียงกับปีนี้ และซ่อนอยู่ในสัญญาณรบกวนนั้นซึ่งเกิดจากอาชญากรไซเบอร์ที่ไม่ซับซ้อนซึ่งเลือก "เส้นทางที่ง่ายที่สุด" การโจมตีที่มีชื่อเสียงส่วนน้อยกลับเป็นข่าวพาดหัวในสื่อทั่วไป

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

เหตุใดโครงสร้างพื้นฐานจึงเอื้อต่อการโจมตีได้ง่ายเช่นนี้?

ทะเบียนแพ็กเกจ โดยทั่วไปแล้ว GitHub เปิดกว้างและมักต้องการการตรวจสอบตัวตนของผู้เผยแพร่เพียงเล็กน้อย “ใครก็ได้สามารถเผยแพร่ซอฟต์แวร์ของตนที่นี่ได้!” อุปสรรคสำหรับผู้โจมตีนั้นต่ำมาก พวกเขาใช้ที่อยู่อีเมลแบบใช้แล้วทิ้งและบัญชี GitHub แบบใช้แล้วทิ้งเพื่อสร้างแพ็กเกจที่เป็นอันตรายหลายร้อยรายการในแคมเปญสั้นๆ คล้ายกับการหลอกลวงทางอีเมล เฉพาะในกรณีที่เป็นเป้าหมายเฉพาะเท่านั้นที่จำเป็นต้องใช้ความซับซ้อนมากขึ้น: เราพบเห็นแม้กระทั่งการสร้างที่เก็บซอร์สโค้ด GitHub ที่น่าเชื่อถือพร้อมดาวจำนวนมากและ... commitคะแนนจากผู้ร่วมให้ข้อมูลปลอมหลายรายและตัวชี้วัดความนิยมและการบำรุงรักษาอื่นๆ การได้รับ นักดูดาวและชื่อเสียงที่ได้มาจากการบริจาคปลอม การทำให้เป็นระบบอัตโนมัติไม่ใช่เรื่องยาก เราพบเห็นการละเมิดโครงสร้างพื้นฐานซอฟต์แวร์แบบเปิดทุกประเภท ไม่ใช่แค่เพียงมัลแวร์เท่านั้น เช่น เหตุการณ์พิธีชงชา.

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

ความสัมพันธ์ระหว่างส่วนประกอบต่างๆ นั้นซ้อนกันและก่อตัวเป็นกราฟ ในระบบนิเวศบางอย่าง เช่น Node (JavaScript) ความสัมพันธ์เล็กๆ น้อยๆ อาจสะสมกันเป็นร้อยหรือพันๆ รายการ การควบคุมความสัมพันธ์โดยตรงที่ประกาศโดยโครงการซอฟต์แวร์ของฉันอย่างเข้มงวดเป็นเรื่องหนึ่ง แต่... การพึ่งพาแบบส่งต่อ ควบคุมได้ยากกว่า ซอฟต์แวร์โอเพนซอร์สยึดหลัก “เพื่อนของเพื่อนก็คือเพื่อน” ความเป็นพี่น้องเป็นเรื่องปกติในดินแดนตะวันออกไกลที่ป่าเถื่อน! ผู้ก่อภัยคุกคามรู้เรื่องนี้และซ่อนพฤติกรรมที่เป็นอันตรายไว้ในส่วนประกอบที่ซับซ้อนซึ่งมักไม่เป็นที่รู้จัก นี่คือกรณีของ... สตรีมเหตุการณ์ เหตุการณ์ที่มุ่งเป้าไปที่ กระเป๋าเงิน Copay. 

นี่คือวิธีการทำงานของซอฟต์แวร์โอเพนซอร์สมาตั้งแต่เริ่มต้น และมันจะไม่เปลี่ยนแปลงมากนัก บางแหล่งจัดเก็บแพ็กเกจอาจต้องการการยืนยันตัวตนแบบสองขั้นตอนเป็นอย่างดีที่สุด และมักจะใช้เฉพาะกับแพ็กเกจยอดนิยมเท่านั้น บางแหล่งจัดเก็บแพ็กเกจให้สิทธิ์การเข้าถึงแบบขอบเขต (scopes) ซึ่งเป็นเนมสเปซที่องค์กรที่ได้รับการตรวจสอบแล้วเป็นเจ้าของ แต่... อนาถ ส่วนแพลตฟอร์มอื่นๆ ไม่รองรับ (PyPI) หรือกำหนดให้เป็นตัวเลือกเสริม (NPM)  เป็นเรื่องน่าสนใจที่จะสังเกตว่าแม้แต่... แผนการคัดกรองแบบง่าย (โดยอิงจากการควบคุม DNS หรือที่เก็บ/องค์กร GitHub ที่ตรงกับรหัสกลุ่ม) และทำให้ ลายเซ็น PGP เป็นสิ่งที่จำเป็น สำหรับอาร์ติแฟกต์ทั้งหมด ยกเว้นเช็คซัม จะช่วยกำจัด "สิ่งรบกวน" ส่วนใหญ่ เช่น แพ็กเกจที่เป็นอันตรายที่คล้ายกับการปลอมแปลงชื่อโดเมน และจำกัดสิ่งต่างๆ มากมาย ความสับสนในการพึ่งพาการโจมตีที่ซับซ้อนนั้นเป็นไปได้ แต่ยากกว่ามาก โดยมีเพียงไม่กี่กรณีเท่านั้น เช่น... com.github.codingandcoding:maven-compiler-plugin เป็นที่รู้จักกันดีในชื่อ Maven Central และไม่ใช่ว่าทุก Maven registry จะปฏิบัติตามแนวทางเดียวกันทั้งหมด!

การควบคุมความปลอดภัยบนตัวจัดการแพ็กเกจอาจสร้างภาระ แต่ไม่ได้ขัดขวางการโจมตีที่เกี่ยวข้องกับการพึ่งพา (dependency attacks) ปัญหาของการตรวจสอบสิทธิ์แบบหลายปัจจัย (MFA) คือ สำหรับการทำงานอัตโนมัติ ข้อมูลประจำตัวที่ได้มา เช่น โทเค็นการเข้าถึงหรือคีย์ API จะถูกสร้างขึ้นสำหรับบัญชีที่จะใช้ในการเรียก API ที่สร้างจากสคริปต์อัตโนมัติ โดยไม่มีผู้ใช้โต้ตอบที่ให้ปัจจัยที่สอง การตรวจสอบสิทธิ์แบบหลายปัจจัย (MFA) นั้นดีสำหรับการปกป้องบัญชีผู้ใช้จากการรั่วไหลของรหัสผ่าน แต่โทเค็นการเข้าถึงหรือคีย์ API ที่สร้างขึ้นจำเป็นต้องได้รับการปกป้องในขณะที่ใช้งานอยู่ มิฉะนั้นเจ้าของจะถูกผู้โจมตีแอบอ้าง ส่วนใหญ่ของแคมเปญห่วงโซ่อุปทานที่ใช้แพ็กเกจเริ่มต้นด้วยคีย์/โทเค็นที่รั่วไหล โปรดจำเหตุการณ์ต่างๆ เช่น บัญชีแยกประเภท, 3CXและอีกหลายกรณี ที่ข้อมูลประจำตัวที่ไม่สามารถโต้ตอบได้ถูกขโมยไปก่อนในขั้นตอนการบุกรุกเบื้องต้นเพื่อเริ่มต้นการโจมตีห่วงโซ่อุปทาน

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

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

“เราให้ความสำคัญกับความปลอดภัยเป็นอย่างยิ่ง”

แพ็กเกจมัลแวร์โอเพนซอร์ส: ปัญหาที่ 2

ลองนึกภาพตามธรรมเนียมปฏิบัติ บริษัท แอคมี คอร์ปอเรชั่นAcme ผู้ให้บริการรายใหญ่ของ WileCoyote.com มีซอฟต์แวร์ส่วนใหญ่มาจากบุคคลที่สาม โดยกว่า 80% มาจากโครงการโอเพนซอร์ส พวกเขาผลิตซอฟต์แวร์เพื่อใช้งานภายในองค์กร แต่ก็ยังให้บริการซอฟต์แวร์แก่พันธมิตร ผู้ให้บริการ และลูกค้า/ผู้ใช้ปลายทางด้วย Acme มีซอฟต์แวร์ที่เขียนด้วยภาษา Go, JavaScript, Java, C# และ Python และใช้งานซอฟต์แวร์ส่วนใหญ่บนคลาวด์ ภายใต้คลัสเตอร์ Kubernetes Acme สร้างอิมเมจแบบกำหนดเองจากอิมเมจพื้นฐานที่นำมาจาก Docker Hub และรีจิสทรีอื่นๆ และพวกเขายังแชร์ไลบรารี แพ็กเกจ และอิมเมจคอนเทนเนอร์บางส่วนในรีจิสทรีสาธารณะด้วย

Acme ให้ความสำคัญกับความปลอดภัยเป็นอย่างมาก พวกเขารู้ดีถึงปัญหาเรื่องนี้ open source securityและความเสี่ยงที่มาพร้อมกับมัน นักพัฒนา ผู้จัดการระบบ และวิศวกร DevOps ทุกคนใช้คีย์เข้ารหัสลับขนาดเล็กน่ารักเหล่านั้นเป็นวิธีการตรวจสอบสิทธิ์แบบสองขั้นตอน commitโค้ดใน repository จะต้องได้รับการลงนาม และมีการเปิดใช้งานการป้องกัน branch พร้อมกับการตรวจสอบโค้ดภาคบังคับ CI/CD มีการล็อกอย่างแน่นหนา เก็บความลับไว้ในห้องนิรภัยลับ และมีรีจิสทรีภายในที่จำลองรีจิสทรีภายนอกบางส่วน โดยจะจัดเก็บเฉพาะส่วนประกอบที่ได้รับอนุญาตและอยู่ในรายการที่อนุญาตเท่านั้น ซอฟต์แวร์ที่สร้างโดย Acme จะต้องดึงส่วนประกอบจากภายนอกมาจากรีจิสทรีนี้ 

องค์กรส่วนใหญ่คงมีลักษณะเช่นนี้ และถ้าคุณยังอ่านมาถึงตรงนี้ องค์กรของคุณก็เข้าข่ายอย่างแน่นอนใช่ไหมครับ?

แล้ววันหนึ่งที่โชคร้าย นักพัฒนา frontend คนสำคัญคนหนึ่งก็... ที่ Acme ดำเนินการ npm install acme-cute-libโดยลืมไปว่า @acme/cute-lib เป็น dependency ที่ถูกต้องตามขอบเขตที่กำหนดไว้ ความผิดพลาดที่แท้จริงนั้นไม่สำคัญ เพราะหลายสิ่งหลายอย่างอาจผิดพลาดได้ แม้ว่าจะควบคุมวงจรชีวิตของซอฟต์แวร์ได้อย่างสมบูรณ์แบบก็ตาม นักพัฒนาของเราไม่รู้ว่ากลุ่ม APT กำลังโจมตี Acme และเผยแพร่ส่วนประกอบที่เป็นอันตรายภายใต้ชื่อนั้นอย่างแยบยล เพื่อให้พฤติกรรมที่เป็นอันตรายทำงานก็ต่อเมื่อติดตั้งซอฟต์แวร์บนคอมพิวเตอร์ของ Acme เท่านั้น แพ็กเกจดังกล่าวไม่ถูกตรวจพบเป็นเวลาหลายสัปดาห์หลังจากการเผยแพร่ 

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

หลายสัปดาห์ต่อมา องค์กรอื่นๆ ที่ใช้เครื่องมือที่ Acme เผยแพร่ เริ่มพบเห็นการรับส่งข้อมูลที่ผิดปกติบนเครือข่ายของตน โดยเป็นการรับส่งข้อมูลที่ใช้โปรโตคอลของ Acme แต่ส่งไปยังโฮสต์ที่มีลักษณะคล้ายโดเมนของ Acme การรับส่งข้อมูลนั้นถูกเข้ารหัส แต่เครื่องมือตรวจสอบระบบพบว่ามีการเข้าถึงไฟล์ที่ไม่คาดคิด และการเรียกใช้กระบวนการที่ดูเหมือนคำสั่งระบบ แต่สุดท้ายแล้วกลับเรียกใช้ไฟล์ปฏิบัติการที่ดาวน์โหลดมา 

ที่เหลือก็เป็นประวัติศาสตร์: ในตอนแรก Acme ปฏิเสธว่าพฤติกรรมดังกล่าวไม่ได้เกิดจากพวกเขา และยืนยันว่าได้ใช้มาตรการรักษาความปลอดภัยทั้งหมดแล้ว จนกระทั่งสื่อด้านความปลอดภัยทางไซเบอร์เริ่มตั้งคำถามว่าทำไมแหล่งที่มาของพฤติกรรมที่ตรวจพบจึงมาจากส่วนประกอบของ Acme และการวิเคราะห์ด้านความปลอดภัยได้เปิดเผยว่าส่วนประกอบเหล่านั้นเต็มไปด้วยมัลแวร์ที่ซ่อนตัวอยู่ Acme จึงต้องยอมรับเหตุการณ์และเรียกบริษัทรับมือเหตุการณ์เข้ามาจัดการ แคมเปญการตลาดเชิงลบที่ทำลายความเชื่อมั่นที่สร้างมาอย่างยากลำบากในพริบตาAcme เหลืออีกแค่ขั้นตอนการติดตั้ง npm ครั้งเดียวก็จะเสร็จสมบูรณ์แล้วsaster“เป็นพาดหัวข่าวที่พบเห็นได้ทั่วไป จากนั้นก็มีการฟ้องร้องและยกเลิกสัญญาตามมา”

คุณเห็นความคล้ายคลึงกับเหตุการณ์ในอดีตที่เคยเกิดขึ้นหรือไม่? บริษัท Acme ประสบปัญหาจากเหตุการณ์ด้านห่วงโซ่อุปทานในสองช่วง โดยใช้กลยุทธ์ที่หลากหลาย ความสับสนในการพึ่งพา/การสะกดผิด การโจมตีที่ใช้เวิร์กสเตชันของนักพัฒนาเป็นฐานในการแพร่เชื้อไปยังส่วนประกอบต่างๆ ที่ท้ายที่สุดแล้วไปปรากฏในซอฟต์แวร์ที่บุคคลที่สามใช้งาน เราจะป้องกันหรือบรรเทาผลกระทบจากเรื่องนี้ได้อย่างไร? 

เหตุใดพัสดุบรรจุยาพิษจึงได้รับความนิยมมาก

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

  • สร้างแพ็กเกจใหม่ (โดยใช้กลโกงอย่างการปลอมแปลงชื่อไฟล์หรือการสร้างความสับสนในความสัมพันธ์ของแพ็กเกจ ซึ่งเป็นเส้นทางที่ผู้ไม่หวังดีใช้มากที่สุด)
  • พยายามแพร่เชื้อไปยังระบบที่มีอยู่แล้ว โดยอาจใช้วิธีแทรกเข้าไปในซอร์สโค้ด หรือพยายามปลอมตัวเป็นผู้ร่วมพัฒนาผ่านวิธีการอื่น pull requestหรือใช้กลวิธีทางสังคมเพื่อก้าวขึ้นมาเป็นผู้ดูแลระบบ (ดังเช่นที่ “เจา ตัน” ทำในช่องโหว่ XZ หรือ) ขวา 9 ctrl ผู้ใช้ GitHub ทำใน สตรีมเหตุการณ์ เหตุการณ์ที่เกิดขึ้นในฤดูใบไม้ร่วงปี 2018) หรือโดยการได้รับข้อมูลประจำตัวของคลังเก็บซอฟต์แวร์โอเพนซอร์สและแอบอ้างเป็นผู้ดูแลระบบ
  • แทรกมัลแวร์ระหว่างการสร้างแพ็กเกจ โดยการเรียกใช้สคริปต์การสร้างที่เป็นอันตรายหรือการแทรกแซงการดาวน์โหลดแพ็กเกจด้วยการดักฟังแบบคนกลาง (โชคดีที่ปัจจุบัน TLS เป็นสิ่งที่จำเป็นในระบบจัดเก็บข้อมูลส่วนใหญ่แล้ว)
  • แทรกส่วนประกอบที่บรรจุไว้โดยตรงเข้าไปในรีจิสทรี โดยทั่วไปทำได้โดยการดักจับข้อมูลประจำตัวของรีจิสทรี (ซึ่งเป็นทางเลือกที่นิยมใช้สำหรับการโจมตีที่ซับซ้อนหลายกรณี เช่น กรณีของ Acme ที่เวิร์กสเตชันที่ถูกบุกรุกในขั้นตอนแรกมีโทเค็นการเข้าถึงรีจิสทรีภายใน เช่น ในกรณีทั่วไป) .env or ~/.m2/settings.xml(ผู้ไม่ประสงค์ดีรู้ว่าจะค้นหาความลับได้จากที่ไหน) ช่องโหว่ในระบบลงทะเบียนก็ถูกใช้ประโยชน์เช่นกัน 

การแทรกมัลแวร์เข้าไปในรีจิสทรีเป็นพื้นฐานของการโจมตีแบบพึ่งพา (dependency attacks) ซึ่งไม่ใช่เรื่องใหม่แต่อย่างใด เพียงแต่แพร่หลายมากขึ้น แต่เทคนิคเหล่านี้ยังคงใช้ได้ผลเช่นเดียวกับเมื่อห้าปีก่อน  

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

อ่านเพิ่มเติม

ตอนต่อไป กายวิภาคของมัลแวร์: แนวโน้มเป็นอย่างไร? เราจะมุ่งเน้นไปที่กรณีจริงที่เรากำลังตรวจสอบด้วยระบบเตือนภัยมัลแวร์ล่วงหน้าของเราทุกวัน เราจะตรวจสอบว่าพบมัลแวร์ประเภทใด และกลยุทธ์ เทคนิค และขั้นตอนใดที่ได้รับความนิยม เราจะตรวจสอบการปกปิดข้อมูลและวิธีที่พวกมันพยายามซ่อนตัวจากผู้ตรวจสอบ เทคนิคการหลบเลี่ยงการตรวจจับ และวิวัฒนาการของพวกมันด้วยข้อมูลทางเทคนิคและการแพร่กระจายในเครือข่าย โปรดติดตามชม! 

อ้างอิง

กายวิภาคของมัลแวร์: แนวโน้มเป็นอย่างไร?

การป้องกันมัลแวร์ประเภทโอเพนซอร์ส: อะไรได้ผล (และอะไรไม่ได้ผล)

sca-tools-software-composition-analysis-tools
จัดลำดับความสำคัญ แก้ไข และรักษาความปลอดภัยความเสี่ยงด้านซอฟต์แวร์ของคุณ
สมัครบัญชีฟรีได้เลย
ไม่ต้องใช้บัตรเครดิต

รักษาความปลอดภัยในการพัฒนาและส่งมอบซอฟต์แวร์ของคุณ

ด้วยชุดผลิตภัณฑ์ Xygeni