วิธีอุดช่องโหว่ทั่วไปของซัพพลายเชน

Nov 29 2022
จากมุมมองของวงจรชีวิตการพัฒนาซอฟต์แวร์ (SDLC) การรักษาความปลอดภัยเป็นสิ่งสำคัญที่สุดของธุรกิจ เนื่องจากช่องโหว่ด้านความปลอดภัยก่อให้เกิดความเสี่ยงสำหรับองค์กรขนาดใหญ่และองค์กรที่ต้องพบปะกับผู้ใช้ ด้วยเหตุนี้ องค์กรต่างๆ จึงลงทุนอย่างมากในการให้ความสำคัญกับความปลอดภัยของซอฟต์แวร์
ภาพถ่ายโดย Akinori UEMURA บน Unsplash

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

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

SDLC มีจุดตรวจสำหรับการรักษาความปลอดภัยเพื่อป้องกันความลับ ความพร้อมใช้งาน และความสมบูรณ์ของระบบโดยรวมและข้อมูลภายใน SDLC ที่ผสานเข้ากับ OWASP software maturity model (OWASP SAMM) สามารถช่วยกำหนดและปรับใช้แผนงานเชิงกลยุทธ์ทั่วทั้งองค์กรสำหรับการรักษาความปลอดภัยแอปพลิเคชัน

ซอฟต์แวร์ซัพพลายเชนคืออะไร?

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

ในช่วงเวลาที่ผ่านมา บริการและประสบการณ์ดิจิทัลที่เป็นนวัตกรรมและก่อกวนส่วนใหญ่พัฒนาโดยใช้ซอฟต์แวร์โอเพ่นซอร์สโดยทีมงานระยะไกล

ไลบรารี่โอเพ่นซอร์สดึงดูดนักพัฒนาด้วยฟีเจอร์ที่โดดเด่น ซึ่งช่วยให้วิศวกรเร่งการพัฒนาโดยลดเวลาออกสู่ตลาดและลดผลกระทบด้านต้นทุน

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

รหัสที่พัฒนาไม่เพียงพอพร้อมรหัสลับแบบฮาร์ดโค้ดและโครงสร้างพื้นฐานที่มีการออกแบบอย่างหลวมๆ มีแนวโน้มที่จะถูกโจมตีบ่อยครั้ง

ช่องโหว่ยอดนิยม

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

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

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

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

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

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

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

Copay กระเป๋าเงิน Bitcoin ประสบกับการโจมตีของห่วงโซ่อุปทานเมื่อแอปพลิเคชันมือถือที่โฮสต์กระเป๋าเงิน Bitcoin มีข้อบกพร่อง จุดบกพร่องในสถาปัตยกรรมเกิดขึ้นจากช่องโหว่ของแพ็คเกจของตัวจัดการแพคเกจโหนดเครื่องมือ Javascript (NPM) แบบโอเพ่นซอร์ส เวอร์ชันที่บั๊กนี้เผยแพร่สู่สาธารณะและอนุญาตให้แฮ็กเกอร์แก้ไขแอปเพื่อโหลดโค้ดที่ปรับโครงสร้างใหม่และเข้าถึงไลบรารี JS

สามารถตรวจพบข้อบกพร่องและแก้ไขได้ด้วยเครื่องมือสแกนช่องโหว่ในการควบคุมเวอร์ชันและไปป์ไลน์การปรับใช้

การย้ายชิ้นส่วนสำหรับการจัดการซอฟต์แวร์ซัพพลายเชน

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

ภาพโดยผู้เขียน

ขั้นตอนที่ 1: ความรู้การเข้ารหัสที่ปลอดภัย

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

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

ขั้นตอนที่ 2: การสร้างแบบจำลองภัยคุกคาม

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

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

<?xml version="1.0" encoding="utf-8"?>
<KnowledgeBase xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
 <Manifest name="Basic threat modelling design" id="5d3b996b-bac2-8cf6-3b39-617bb67bf042" version="4.1.0.11" author="TwC MSEC" />
 <ThreatMetaData>
   <IsPriorityUsed>true</IsPriorityUsed>
   <IsStatusUsed>false</IsStatusUsed>
   <PropertiesMetaData>
     <ThreatMetaDatum>
       <Name>Title</Name>
       <Label>Title</Label>
       <HideFromUI>false</HideFromUI>
       <Values>
         <Value />
       </Values>
       <Id>5d3b996b-bac2-8cf6-3b39-617bb67bf042</Id>
       <AttributeType>0</AttributeType>
     </ThreatMetaDatum>
     <ThreatMetaDatum>
       <Name>UserThreatShortDescription</Name>
       <Label>Short Description</Label>
       <HideFromUI>true</HideFromUI>
       <Values>
         <Value>Threat modeling is critical and mandate phase in secure software development</Value>
       </Values>
       <Id>ac0f9ea8-aed5-4d95-4ce9-6787124d7b48</Id>
       <AttributeType>1</AttributeType>
     </ThreatMetaDatum>
     <ThreatMetaDatum>
       <Name>UserThreatDescription</Name>
       <Label>Description</Label>
       <HideFromUI>false</HideFromUI>
       <Values>
         <Value />
       </Values>
       <Id>5d3b996b-bac2-8cf6-3b39-617bb67bf042</Id>
       <AttributeType>0</AttributeType>
     </ThreatMetaDatum>
     <ThreatMetaDatum>
       <Name>Priority</Name>
       <Label>Priority</Label>
       <HideFromUI>true</HideFromUI>
       <Values>
         <Value>High</Value>
         <Value>Medium</Value>
         <Value>Low</Value>
       </Values>
       <Description>Priority</Description>
       <Id>ac0f9ea8-aed5-4d95-4ce9-617bb67bf042</Id>
       <AttributeType>1</AttributeType>
     </ThreatMetaDatum>
   </PropertiesMetaData>
 </ThreatMetaData>
 <GenericElements>
   <ElementType>
     <Name>Threat modeling Process</Name>
     <ID>GE.P</ID>
     <Description>General approach to define a threat model</Description>
     <ParentElement>ROOT</ParentElement>
     <Image>Image_ref</Image>
     <Hidden>false</Hidden>
     <Representation>Ellipse</Representation>
     <StrokeThickness>0</StrokeThickness>
     <ImageLocation>Centered</ImageLocation>
     <Attributes>
       <Attribute>
         <Id>002864b3-9a4e-4d21-8a4d-8aea1d2e3056</Id>
         <IsInherited>false</IsInherited>
         <IsOverrided>false</IsOverrided>
         <Name>codeType</Name>
         <DisplayName>Code Type</DisplayName>
         <Mode>Dynamic</Mode>
         <Type>List</Type>
         <Inheritance>Virtual</Inheritance>
         <AttributeValues>
           <Value>Not Selected</Value>
           <Value>Managed</Value>
           <Value>Unmanaged</Value>
         </AttributeValues>
       </Attribute>
     </Attributes>
   </ElementType>
 </StandardElements>
 </KnowledgeBase>

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

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

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

ขั้นตอนที่ 4: การสแกนผ่านเครื่องมืออัตโนมัติ

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

WhiteSource สำหรับนักพัฒนา Codacy และ Codecov เป็นเครื่องมือตรวจสอบแบบอัตโนมัติที่พร้อมใช้งานผ่านตลาด GitHub เพื่อรวมเข้ากับโค้ดเบสของคุณอย่างรวดเร็วและบรรลุข้อกำหนดของกองเทคโนโลยี เครื่องมือเหล่านี้ใช้วิธี shift-left สำหรับการสแกนโอเพ่นซอร์สและการจัดทำดัชนีของ GitHub Repos ที่มีอยู่ทั้งหมด

ขั้นตอนที่ 5: การสแกนโค้ดแบบคงที่และการทดสอบความปลอดภัย

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

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

ตัวอย่างโค้ด:

trigger:
 branches:
   include:
   - feature
   - main
 paths:
   include:
   - src/*
   - tests/*

pool:
 Image: 'centos/latest'

jobs:
- job: codereview
 displayName: review and report

 steps:

 - checkout: self
   lfs: true

 - task: UsePythonVersion@0
   displayName: 'Set Python version to 3.9'
   inputs:
     versionSpec: '3.9'

 - script: pip3 install --user -r requirements.txt
   displayName: 'Installing required dependencies'

 - script: |
     python -m behave --junitxml=./validation_test-checks.xml
   displayName: 'Running behave tests'

 - task: PublishBehaveResults@1
   displayName: 'bumping out behave test results'
   condition: passOrFail()
   inputs:
     testResultsFiles: '**/validation_test-*.xml'
     testRunTitle: 'Publish behave test results for Python $(python.version)'

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

ขั้นตอนการพัฒนาโดยรวมต้องทำตามขั้นตอนที่ไฮไลต์ไว้ข้างต้น โดยเริ่มตั้งแต่ความรู้ด้านความปลอดภัย การสร้างแบบจำลองภัยคุกคาม การตรวจสอบโค้ดเพียร์ การตรวจสอบโค้ดอัตโนมัติ และการสแกนโค้ดแบบคงที่และการทดสอบความปลอดภัย

จาก Infosec Writeups: มีเรื่องราวมากมายเกิดขึ้นใน Infosec ทุกวันซึ่งเป็นเรื่องยากที่จะตามให้ทัน เข้าร่วมจดหมายข่าวรายสัปดาห์ของเราเพื่อรับเทรนด์ล่าสุดของ Infosec ในรูปแบบบทความ 5 หัวข้อ 4 หัวข้อ วิดีโอ 3 รายการ Repos และเครื่องมือ GitHub 2 รายการ และการแจ้งเตือนงาน 1 รายการฟรี!