วิธีอุดช่องโหว่ทั่วไปของซัพพลายเชน
จากมุมมองของวงจรชีวิตการพัฒนาซอฟต์แวร์ (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 ครอบคลุมเทคนิคและชุดเครื่องมือมากมายสำหรับการทำให้การรักษาความปลอดภัยเป็นก้าวสำคัญของการเดินทางของซอฟต์แวร์
ขั้นตอนการพัฒนาโดยรวมต้องทำตามขั้นตอนที่ไฮไลต์ไว้ข้างต้น โดยเริ่มตั้งแต่ความรู้ด้านความปลอดภัย การสร้างแบบจำลองภัยคุกคาม การตรวจสอบโค้ดเพียร์ การตรวจสอบโค้ดอัตโนมัติ และการสแกนโค้ดแบบคงที่และการทดสอบความปลอดภัย