แพ็คเกจโอเพนซอร์ส

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

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

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

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

ความเข้าใจผิดทั่วไป

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

ความเข้าใจผิด #1: SCA เครื่องมือต่างๆ รายงานส่วนประกอบที่เป็นอันตรายอยู่แล้ว

แน่นอน! แต่หลังจากนั้น…เมื่ออาจจะสายเกินไปแล้วหากมีการใช้ส่วนประกอบนั้นในการสร้างซอฟต์แวร์ และผู้ไม่ประสงค์ดีได้แทรกซึมเข้าไปในกลุ่มนักพัฒนาแล้ว CI/CD ข้อมูลลับอาจถูกขโมยออกไป มีการดาวน์โหลดและติดตั้งมัลแวร์เพิ่มเติม และอาจเป็นไปได้ว่าผู้โจมตีได้เคลื่อนย้ายไปยังที่อื่นและเข้าถึงระบบได้แล้ว 

การวิเคราะห์องค์ประกอบซอฟต์แวร์ (SCAเครื่องมือเหล่านี้ถูกออกแบบมาเพื่อระบุช่องโหว่ที่รู้จักอยู่แล้ว เครื่องมือสมัยใหม่ทำงานได้ดีเยี่ยมโดยการเพิ่มอัตราส่วนสัญญาณต่อสัญญาณรบกวน เพื่อตรวจสอบว่าช่องโหว่นั้นสามารถเข้าถึงหรือใช้ประโยชน์ได้จริงหรือไม่ แต่เครื่องมือเหล่านี้ไร้ประโยชน์กับมัลแวร์ตัวใหม่ๆ ลองนึกถึงส่วนประกอบที่เป็นอันตรายว่าเป็นช่องโหว่แบบ Zero-day: เฉพาะเมื่อตรวจพบพฤติกรรมที่เป็นอันตรายเท่านั้น ส่วนประกอบนั้นจึงจะถูกรายงานไปยังรีจิสทรี ซึ่งหลังจากที่ทีมรักษาความปลอดภัยตรวจสอบแล้ว จะได้รับการยืนยันว่าเป็นส่วนประกอบที่เป็นอันตรายและถูกลบออกจากรีจิสทรี [1]

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

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

ความเข้าใจผิดข้อที่ 2: การควบคุมสคริปต์การติดตั้งในระหว่างการสร้างโปรแกรมจะช่วยป้องกันพฤติกรรมที่เป็นอันตรายจากส่วนประกอบโอเพนซอร์ส

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

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

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

ความเข้าใจผิดข้อที่ 3: การกำหนดเวอร์ชันที่แน่นอนจะช่วยป้องกันการติดตั้งส่วนประกอบที่เป็นอันตราย

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

ความเข้าใจผิดข้อที่ 4: การใช้ส่วนประกอบที่เชื่อถือได้นั้นปลอดภัย ส่วนประกอบที่เป็นอันตรายใดๆ จะถูกตรวจพบ เปิดเผย และลบออกอย่างรวดเร็ว

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

ลองนึกภาพตัวเองพูดว่า “อ๋อ เราใช้ Spring Boot / Angular / React / PyTorch / อิมเมจ Docker พื้นฐานอย่างเป็นทางการ ดังนั้นความเสี่ยงที่คุณพูดถึงจึงค่อนข้างต่ำ” บางทีอาจเป็นความจริง เราผู้จำหน่ายผลิตภัณฑ์รักษาความปลอดภัยมักสร้างความหวาดกลัวอยู่ตลอดเวลา และการเข้าไปแทรกแซงทีมพัฒนาเพื่อลดความเสี่ยงที่ยังถกเถียงกันอยู่นั้นเป็นเรื่องไร้สาระ คุณอาจอยากข้ามไปที่ย่อหน้าเกี่ยวกับการยอมรับความเสี่ยง (ในส่วนถัดไป) แล้วทุกอย่างก็จะจบลง แต่โชคร้ายที่ส่วนประกอบที่ได้รับความนิยมมากที่สุดมักเป็นเป้าหมายของผู้ไม่หวังดี และตัวอย่างเช่น ส่วนประกอบที่ได้รับความนิยม ไลบรารี PyTorch ถูกโจมตี ในอดีต

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

สิ่งที่ไม่ได้ผลในการต่อต้านส่วนประกอบที่เป็นอันตราย

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

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

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

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

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

อย่างไรก็ตาม มีมาตรการควบคุมที่สามารถจัดการกับภัยคุกคามดังกล่าวได้ และควรพิจารณาใช้หากคุณไม่พอใจกับระดับความเสี่ยงที่ยอมรับได้ โปรดอ่านต่อ

อะไรบ้างที่ได้ผลในการป้องกันการโจมตีโดยใช้ส่วนประกอบที่เป็นอันตราย

การจัดการเวอร์ชันโซลิด

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

เตือนภัยล่วงหน้า

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

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

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

การทำงานแบบอัตโนมัติเต็มรูปแบบนั้นเป็นไปไม่ได้ และจำเป็นต้องมีการตรวจสอบด้านความปลอดภัยเพื่อหาองค์ประกอบที่อาจเป็นอันตราย ระวังพวกที่อ้างว่าเทคโนโลยีดิจิทัลเป็นยาวิเศษครอบคลุมทุกโรคปัญญาประดิษฐ์ (AI) และการเรียนรู้ของเครื่อง (Machine Learning) ยังไม่พัฒนามากพอที่จะยืนยันได้ว่าส่วนประกอบที่ต้องสงสัยนั้นมีมัลแวร์หรือไม่ แน่นอนว่าการเรียนรู้ของเครื่องมีบทบาทสำคัญในกลไกการตรวจจับในการจำแนกส่วนประกอบที่ป้อนเข้ามาจากหลักฐานดิบที่เก็บรวบรวมได้ แต่เมื่อส่วนประกอบนั้นถูก "กักกัน" แล้ว การตัดสินใจขั้นสุดท้ายจะขึ้นอยู่กับการตรวจสอบด้วยตนเองโดยทีมรักษาความปลอดภัยที่มีประสบการณ์ด้านส่วนประกอบที่เป็นอันตราย ซึ่งจะยืนยันว่ามีมัลแวร์หรือไม่ หรือจัดประเภทใหม่ว่าเป็นปลอดภัย และระยะเวลาในการตรวจสอบนั้นอยู่ในระดับชั่วโมง 

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

เป็นไปได้หรือไม่ที่จะทราบว่าเวอร์ชันของส่วนประกอบนั้นเป็นอันตราย?

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

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

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

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

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

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

ไฟร์วอลล์การพึ่งพา

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

โปรดทราบว่า การแจ้งเตือนล่วงหน้า (การตรวจจับอย่างรวดเร็วที่สุดเท่าที่จะเป็นไปได้หลังจากการเผยแพร่เวอร์ชันใหม่) จำเป็นต้องควบคู่ไปกับวิธีการนำข้อมูลดังกล่าวไปใช้ในเชิงรุกเพื่อบล็อกส่วนประกอบที่ส่งผลกระทบต่อการสร้างโปรแกรม pipelineหรือเครื่องของนักพัฒนา [4]เราเรียกสิ่งนี้ว่า “ไฟร์วอลล์การพึ่งพา“กลไกการกักกันเพื่อปกป้องการสร้างอัตโนมัติจากแพ็กเกจที่เป็นอันตราย แพ็กเกจภายในและรีจิสทรีรูปภาพนั้นดีสำหรับการปกป้ององค์กรจากภัยคุกคามภายนอก แต่จำเป็นต้องมีหลักฐานที่แข็งแกร่งเพียงพอเพื่อให้การกักกันมีประสิทธิภาพ” 

การจำกัดการเข้าถึงขณะรันไทม์

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

การกำหนดกลยุทธ์ที่ครอบคลุม

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

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

กระบวนการอัปเดตการพึ่งพาเหล่านี้จะต้องดำเนินการดังนี้ การบังคับใช้ และ การตรวจสอบแล้ว ในทุกสถานที่ กระบวนการต้องได้รับการบันทึก และทุกฝ่ายที่เกี่ยวข้องควรได้รับการฝึกอบรม เนื่องจากบ่อยครั้งที่การพัฒนาและการสร้าง/ติดตั้งซอฟต์แวร์นั้นถูกว่าจ้างจากภายนอก CI/CD pipelineควรแก้ไขค่า s ให้เหมาะสม เพื่อป้องกันไม่ให้ระบบอัตโนมัติปล่อยการพึ่งพาทางอ้อมที่เป็นอันตรายแทรกซึมเข้าไปในกระบวนการสร้าง: guardrails การบล็อกการสร้างหากมีหลักฐานเพียงพอว่าอาจมีมัลแวร์อยู่ในส่วนประกอบที่ใช้ในการสร้างนั้น เป็นวิธีที่แนะนำ 

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

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

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

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

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

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

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

  • [1] อย่างไรก็ตาม ผู้ใช้ส่วนประกอบนี้จำเป็นต้องตรวจสอบว่าไฟล์บีบอัดของส่วนประกอบนั้นถูกแคชหรือลงทะเบียนไว้ที่ใดที่หนึ่งหรือไม่ เช่น ในรีจิสทรีภายใน เพื่อกำจัดปัญหาดังกล่าว
  • [2] ส่วนประกอบที่บรรจุอยู่ในแพ็กเกจนั้นจะมีไฟล์ Manifest ที่ระบุเนื้อหาและข้อมูลเมตา โค้ดต้นฉบับหรือโค้ดที่คอมไพล์แล้ว สคริปต์การติดตั้ง และรายการเพิ่มเติม เช่น ชุดทดสอบ ตามรูปแบบการบรรจุ และโดยทั่วไปจะอยู่ในรูปแบบบีบอัด ซึ่งเรียกว่า “ไฟล์ Tarball ของส่วนประกอบ”
  • [3] แม้ว่าผู้ไม่ประสงค์ดีจะสามารถแก้ไขส่วนประกอบที่เผยแพร่แล้วได้เนื่องจากการละเมิดในรีจิสทรี แต่การเข้ารหัสแบบธรรมดาก็สามารถตรวจจับการเปลี่ยนแปลงใดๆ ในไฟล์บีบอัดได้หลังจากการวิเคราะห์เสร็จสิ้นแล้ว
  • [4] โปรดจำไว้ว่าส่วนประกอบที่เป็นอันตรายบางอย่างทำงานในระหว่างการติดตั้ง ดังนั้นจึงอาจส่งผลกระทบต่อโหนดนักพัฒนาที่เรียกใช้คำสั่ง “npm install X” โดยไม่รู้ตัว ซึ่ง X เป็นส่วนประกอบที่เป็นอันตราย  

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

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

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

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

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