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


คำอธิบายประกอบ

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

การแนะนำ

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

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

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

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

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

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

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

กระบวนการวิเคราะห์

กระบวนการวิเคราะห์แบบคงที่ประกอบด้วยสองขั้นตอนหลัก: การสร้างแผนผังโค้ด (หรือที่เรียกว่า ) และการวิเคราะห์แผนผังนั้น

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

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

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

ลองพิจารณาอัลกอริทึมตัวอย่างเพื่อกำหนดประเภทของคำศัพท์

หากอักขระตัวแรกของโทเค็นเป็นตัวเลข โทเค็นจะถือเป็นตัวเลข หากอักขระนั้นเป็นเครื่องหมายลบ จะเป็นตัวเลขลบ หากโทเค็นเป็นตัวเลข อาจเป็นจำนวนเต็มหรือเศษส่วนก็ได้ หากตัวเลขมีตัวอักษร E ซึ่งกำหนดสัญลักษณ์เอ็กซ์โปเนนเชียลหรือจุดทศนิยม ตัวเลขนั้นจะถือเป็นเศษส่วน มิฉะนั้นจะถือว่าเป็นจำนวนเต็ม โปรดทราบว่าสิ่งนี้อาจทำให้เกิดข้อผิดพลาดด้านคำศัพท์ - หากซอร์สโค้ดที่กำลังแยกวิเคราะห์มีโทเค็น "4xyz" lexer จะพิจารณาว่าเป็นจำนวนเต็ม 4 ซึ่งจะสร้างข้อผิดพลาดทางไวยากรณ์ที่ parser จะสามารถตรวจพบได้ อย่างไรก็ตาม lexer ยังสามารถตรวจพบข้อผิดพลาดดังกล่าวได้

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

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

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

แม้ว่า lexer จะเข้าใจเพียงไวยากรณ์ของภาษาเท่านั้น parser ยังรับรู้บริบทอีกด้วย ตัวอย่างเช่น เรามาประกาศฟังก์ชันในภาษา C:

Int Func())(ส่งคืน 0;)

lexer จะประมวลผลสตริงนี้และแยกออกเป็นโทเค็นดังแสดงในตารางที่ 1:

ตารางที่ 1 - โทเค็นของสตริง "int Func())(return 0);"

สตริงจะได้รับการยอมรับว่าเป็นโทเค็นที่ถูกต้อง 8 รายการ และโทเค็นเหล่านี้จะถูกส่งต่อไปยังตัวแยกวิเคราะห์

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

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

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

รหัสต้นไม้

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

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

เมื่อออกแบบจุดยอดของต้นไม้ ขั้นตอนแรกคือการกำหนดระดับของโมดูลาร์ กล่าวอีกนัยหนึ่ง มีการกำหนดว่าโครงสร้างภาษาทั้งหมดจะแสดงด้วยจุดยอดประเภทเดียวกัน จำแนกตามความหมายหรือไม่ เป็นตัวอย่าง ให้พิจารณาการเป็นตัวแทนของการดำเนินการเลขคณิตไบนารี ทางเลือกหนึ่งคือใช้จุดยอดเดียวกันสำหรับการดำเนินการไบนารี่ทั้งหมด ซึ่งหนึ่งในคุณลักษณะดังกล่าวจะเป็นประเภทการดำเนินการ เช่น "+" อีกทางเลือกหนึ่งคือการใช้จุดยอดประเภทต่างๆ สำหรับการดำเนินการที่แตกต่างกัน ในภาษาเชิงวัตถุ คลาสเหล่านี้อาจเป็นคลาส เช่น AddBinary, SubstractBinary, MultipleBinary ฯลฯ ที่สืบทอดมาจากไบนารีคลาสฐานนามธรรม

เป็นตัวอย่าง ลองดูสองนิพจน์: 1 + 2 * 3 + 4 * 5 และ 1+ 2 * (3 + 4) * 5 (ดูรูปที่ 1)

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

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

วิธีการวิเคราะห์แบบคงที่

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

แม้ว่าวิธีการวิเคราะห์แบบคงที่ทั้งสามวิธีที่ระบุไว้ข้างต้นจะใช้แผนผังโค้ดที่สร้างโดย parser แต่วิธีการเหล่านี้แตกต่างกันในงานและอัลกอริธึม

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

การวิเคราะห์กระแสข้อมูลสามารถอธิบายได้ว่าเป็นกระบวนการรวบรวมข้อมูลเกี่ยวกับการใช้ คำจำกัดความ และการพึ่งพาของข้อมูลในโปรแกรมที่กำลังวิเคราะห์ การวิเคราะห์โฟลว์ข้อมูลใช้กราฟโฟลว์คำสั่งที่สร้างจากแผนผังโค้ด กราฟนี้แสดงถึงเส้นทางที่เป็นไปได้ทั้งหมดสำหรับการรันโปรแกรมที่กำหนด: จุดยอดแสดงถึงส่วนของโค้ด "เส้นตรง" โดยไม่มีการเปลี่ยนใดๆ และขอบแสดงถึงการถ่ายโอนการควบคุมที่เป็นไปได้ระหว่างส่วนต่างๆ เหล่านี้ เนื่องจากการวิเคราะห์จะดำเนินการโดยไม่ได้รันโปรแกรมที่กำลังทดสอบ จึงเป็นไปไม่ได้ที่จะระบุผลลัพธ์ของการดำเนินการได้อย่างแม่นยำ กล่าวอีกนัยหนึ่ง ไม่สามารถระบุได้อย่างแน่ชัดว่าการควบคุมเส้นทางใดจะถูกถ่ายโอน ดังนั้น อัลกอริธึมการวิเคราะห์กระแสข้อมูลจะประมาณพฤติกรรมที่เป็นไปได้ เช่น โดยการพิจารณาทั้งสองสาขาของคำสั่ง if-then-else หรือโดยการดำเนินการเนื้อความของ while loop ด้วยความแม่นยำที่แน่นอน มีข้อจำกัดด้านความแม่นยำอยู่เสมอ เนื่องจากสมการกระแสข้อมูลถูกเขียนสำหรับชุดตัวแปรบางชุด และจำนวนตัวแปรเหล่านี้ต้องถูกจำกัด เนื่องจากเรากำลังพิจารณาเฉพาะโปรแกรมที่มีชุดคำสั่งที่มีขอบเขตจำกัดเท่านั้น ดังนั้นจึงมีขีดจำกัดสูงสุดสำหรับจำนวนสิ่งที่ไม่ทราบเสมอ ซึ่งจะจำกัดความแม่นยำ จากมุมมองของกราฟโฟลว์คำสั่ง การวิเคราะห์แบบสแตติกจะพิจารณาว่าพาธการดำเนินการโปรแกรมที่เป็นไปได้ทั้งหมดนั้นถูกต้อง เนื่องจากสมมติฐานนี้ การวิเคราะห์กระแสข้อมูลจึงสามารถให้วิธีแก้ปัญหาโดยประมาณสำหรับชุดปัญหาที่จำกัดเท่านั้น

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

บทสรุป

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

บทความนี้ได้ให้คำอธิบายโดยย่อเกี่ยวกับกระบวนการวิเคราะห์แบบคงที่และวิธีการต่างๆ ในการดำเนินการวิเคราะห์ดังกล่าว

บรรณานุกรม

  • ปรัชญาของเดิร์ก กีเซนและการใช้เครื่องมือวิเคราะห์คงที่ในทางปฏิบัติ -ข้อมูลอิเล็กทรอนิกส์ -เดิร์ก กีเซน ตำรวจ 1998.
  • ข้อมูลพื้นฐานเกี่ยวกับคอมไพเลอร์ของ James Alan Farrell -ข้อมูลอิเล็กทรอนิกส์ -James Alan Farrell ตำรวจปี 1995 -โหมดการเข้าถึง: http://www.cs.man.ac.uk/~pjj/farrell/compmain.html
  • โจเอล โจนส์ สำนวนการนำแผนผังไวยากรณ์ไปใช้ - การประชุมวิชาการเรื่องภาษารูปแบบของโปรแกรม ครั้งที่ 10 พ.ศ. 2546 ตำรวจ พ.ศ. 2546
  • Ciera Nicole Christopher ประเมินกรอบการวิเคราะห์แบบคงที่ - Ciera Nicole ตำรวจ 2549.
  • Leon Moonen สถาปัตยกรรมทั่วไปสำหรับการวิเคราะห์กระแสข้อมูลเพื่อรองรับวิศวกรรมย้อนกลับ - การประชุมเชิงปฏิบัติการระดับนานาชาติเรื่องทฤษฎีและการปฏิบัติข้อกำหนดเกี่ยวกับพีชคณิต ครั้งที่ 2, cop. 1997.

คำอธิบายประกอบ

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

การแนะนำ

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

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

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

การจำแนกประเภทของช่องโหว่ด้านความปลอดภัย

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

การจำแนกประเภทของช่องโหว่ด้านความปลอดภัยขึ้นอยู่กับข้อผิดพลาดของซอฟต์แวร์:

  1. บัฟเฟอร์ล้น ช่องโหว่นี้เกิดขึ้นเนื่องจากขาดการควบคุมอาร์เรย์ที่อยู่นอกขอบเขตในหน่วยความจำระหว่างการทำงานของโปรแกรม เมื่อแพ็คเก็ตข้อมูลที่มีขนาดใหญ่เกินไปล้นบัฟเฟอร์ขนาดจำกัด เนื้อหาของตำแหน่งหน่วยความจำภายนอกจะถูกเขียนทับ ส่งผลให้โปรแกรมหยุดทำงานและออก ขึ้นอยู่กับตำแหน่งของบัฟเฟอร์ในหน่วยความจำกระบวนการ บัฟเฟอร์โอเวอร์โฟลว์จะแยกความแตกต่างบนสแต็ก (บัฟเฟอร์โอเวอร์โฟลว์สแต็ก), ฮีป (บัฟเฟอร์โอเวอร์โฟลว์ฮีป) และพื้นที่ข้อมูลคงที่ (บัฟเฟอร์โอเวอร์โฟลว์ bss)
  2. ช่องโหว่ (ช่องโหว่อินพุตเสีย) ช่องโหว่อาจเกิดขึ้นได้ในกรณีที่อินพุตของผู้ใช้ถูกส่งผ่านโดยไม่มีการควบคุมที่เพียงพอไปยังล่ามของภาษาภายนอกบางภาษา (โดยปกติจะเป็น Unix Shell หรือภาษา SQL) ในกรณีนี้ ผู้ใช้สามารถระบุข้อมูลอินพุตในลักษณะที่ล่ามที่เรียกใช้งานจะดำเนินการคำสั่งที่แตกต่างไปจากที่ผู้เขียนโปรแกรมที่มีช่องโหว่ตั้งใจไว้โดยสิ้นเชิง
  3. จัดรูปแบบช่องโหว่ของสตริง ช่องโหว่ด้านความปลอดภัยประเภทนี้เป็นคลาสย่อยของช่องโหว่ เกิดขึ้นเนื่องจากการควบคุมพารามิเตอร์ไม่เพียงพอเมื่อใช้ฟังก์ชัน I/O รูปแบบ printf, fprintf, scanf ฯลฯ ของไลบรารีมาตรฐาน C ฟังก์ชันเหล่านี้ใช้สตริงอักขระเป็นหนึ่งในพารามิเตอร์ที่ระบุรูปแบบอินพุตหรือเอาต์พุตของอาร์กิวเมนต์ของฟังก์ชันที่ตามมา หากผู้ใช้สามารถระบุประเภทของการจัดรูปแบบได้ ช่องโหว่นี้อาจเป็นผลมาจากการใช้ฟังก์ชันการจัดรูปแบบสตริงไม่สำเร็จ
  4. ช่องโหว่อันเป็นผลมาจากข้อผิดพลาดในการซิงโครไนซ์ (สภาพการแข่งขัน) ปัญหาที่เกี่ยวข้องกับการทำงานหลายอย่างพร้อมกันนำไปสู่สถานการณ์ที่เรียกว่า: โปรแกรมที่ไม่ได้ออกแบบมาให้ทำงานในสภาพแวดล้อมการทำงานหลายอย่างพร้อมกันอาจเชื่อว่า ตัวอย่างเช่น ไฟล์ที่ใช้ในงานไม่สามารถเปลี่ยนแปลงโดยโปรแกรมอื่นได้ เป็นผลให้ผู้โจมตีที่แทนที่เนื้อหาของไฟล์ทำงานเหล่านี้ทันเวลาสามารถบังคับให้โปรแกรมดำเนินการบางอย่างได้

แน่นอนว่า นอกเหนือจากที่ระบุไว้แล้ว ยังมีช่องโหว่ด้านความปลอดภัยประเภทอื่นๆ ด้วย

การตรวจสอบเครื่องวิเคราะห์ที่มีอยู่

เครื่องมือต่อไปนี้ใช้เพื่อตรวจจับช่องโหว่ด้านความปลอดภัยในโปรแกรม:

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

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

บทความนี้จะให้ภาพรวมของเครื่องวิเคราะห์แบบคงที่ที่มีอยู่หลายตัว เรามาดูแต่ละรายการกันดีกว่า

1.บุญ

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

2.ซีเควล

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

3. ไม้ถูพื้น

(MOdel ตรวจสอบโปรแกรมเพื่อความปลอดภัย) - เครื่องมือค้นหาช่องโหว่ด้านความปลอดภัยในโปรแกรม C วัตถุประสงค์: การปรับแบบไดนามิกเพื่อให้มั่นใจว่าโปรแกรม C สอดคล้องกับแบบจำลองคงที่ MOPS ใช้แบบจำลองการตรวจสอบซอฟต์แวร์ที่ออกแบบมาเพื่อช่วยพิจารณาว่าโปรแกรมสอดคล้องกับชุดกฎที่กำหนดไว้สำหรับการสร้างโปรแกรมที่ปลอดภัยหรือไม่

4. ITS4, RATS, PScan, Flawfinder

เครื่องวิเคราะห์แบบคงที่ต่อไปนี้ใช้เพื่อค้นหาข้อผิดพลาดบัฟเฟอร์ล้นและข้อผิดพลาดสตริงรูปแบบ:

  1. . เครื่องมือง่ายๆ ที่สแกนซอร์สโค้ด C/C++ แบบคงที่เพื่อตรวจจับช่องโหว่ด้านความปลอดภัยที่อาจเกิดขึ้น โดยจะตั้งค่าสถานะการเรียกไปยังฟังก์ชันที่อาจเป็นอันตราย เช่น strcpy/memcpy และทำการวิเคราะห์ความหมายแบบผิวเผิน โดยพยายามประเมินว่าโค้ดดังกล่าวมีอันตรายเพียงใด และยังให้คำแนะนำเกี่ยวกับวิธีการปรับปรุงอีกด้วย
  2. . ยูทิลิตี RATS (Rough Auditing Tool for Security) ประมวลผลโค้ดที่เขียนด้วยภาษา C/C++ และยังสามารถประมวลผลสคริปต์ในภาษา Perl, PHP และ Python ได้ด้วย RATS สแกนซอร์สโค้ด เพื่อค้นหาการเรียกใช้ฟังก์ชันที่อาจเป็นอันตราย วัตถุประสงค์ของเครื่องมือนี้ไม่ใช่เพื่อค้นหาข้อผิดพลาดในขั้นสุดท้าย แต่เพื่อให้ข้อสรุปที่สมเหตุสมผล ซึ่งผู้เชี่ยวชาญสามารถตรวจสอบโค้ดได้ด้วยตนเอง RATS ใช้การผสมผสานของการตรวจสอบความปลอดภัย ตั้งแต่การตรวจสอบความหมายใน ITS4 ไปจนถึงการวิเคราะห์ความหมายเชิงลึกเพื่อค้นหาข้อบกพร่องบัฟเฟอร์ล้นที่ได้รับจาก MOPS
  3. . สแกนซอร์สโค้ด C เพื่อใช้ฟังก์ชันคล้าย printf ที่อาจไม่ถูกต้อง และระบุช่องโหว่ในรูปแบบสตริง
  4. . เช่นเดียวกับ RATS มันเป็นเครื่องสแกนซอร์สโค้ดแบบคงที่สำหรับโปรแกรมที่เขียนด้วย C/C++ ค้นหาฟังก์ชันที่ใช้งานในทางที่ผิดบ่อยที่สุด กำหนดคะแนนความเสี่ยง (ตามข้อมูล เช่น พารามิเตอร์ที่ส่งผ่าน) และรวบรวมรายการช่องโหว่ที่อาจเกิดขึ้น จัดอันดับตามความเสี่ยง

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

5. พวง

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

6. อูโน่

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

7. FlexeLint (พีซี-ลินท์)

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

ในตอนท้ายของงานจะมีการออกข้อความประเภทหลักหลายประเภท:

  • ตัวชี้ว่างเป็นไปได้
  • ปัญหาเกี่ยวกับการจัดสรรหน่วยความจำ (เช่น ไม่มี free() หลัง malloc())
  • ขั้นตอนการควบคุมที่มีปัญหา (เช่น รหัสที่ไม่สามารถเข้าถึงได้)
  • บัฟเฟอร์ล้นที่เป็นไปได้, โอเวอร์โฟลว์ทางคณิตศาสตร์;
  • คำเตือนเกี่ยวกับรูปแบบโค้ดที่ไม่ดีและอาจเป็นอันตราย

8.วีว่า64

เครื่องมือที่ช่วยให้ผู้เชี่ยวชาญติดตามแฟรกเมนต์ที่อาจเป็นอันตรายในซอร์สโค้ดของโปรแกรม C/C++ ที่เกี่ยวข้องกับการเปลี่ยนจากระบบ 32 บิตเป็น 64 บิต Viva64 ถูกสร้างขึ้นในสภาพแวดล้อม Microsoft Visual Studio 2005/2008 ซึ่งอำนวยความสะดวกในการทำงานด้วยเครื่องมือนี้อย่างสะดวกสบาย เครื่องวิเคราะห์ช่วยให้คุณเขียนโค้ดที่ถูกต้องและปรับให้เหมาะสมสำหรับระบบ 64 บิต

9. การทดสอบ Parasoft C++

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

10.ความครอบคลุม

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

11. คล็อคเวิร์ค K7

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

12. เฟรม-ซี

ชุดเครื่องมือบูรณาการแบบเปิดสำหรับการวิเคราะห์ซอร์สโค้ดในภาษา C ชุดประกอบด้วย ACSL (ANSI/ISO C Specification Language) - ภาษาพิเศษที่ช่วยให้คุณสามารถอธิบายรายละเอียดข้อกำหนดของฟังก์ชัน C ได้ เช่น การระบุช่วงของค่าอินพุตที่ถูกต้องของฟังก์ชันและช่วงของเอาต์พุตปกติ ค่านิยม

ชุดเครื่องมือนี้ช่วยให้คุณทำสิ่งต่อไปนี้:

  • ดำเนินการตรวจสอบโค้ดอย่างเป็นทางการ
  • มองหาข้อผิดพลาดในการดำเนินการที่อาจเกิดขึ้น
  • ดำเนินการตรวจสอบหรือทบทวนโค้ด
  • ดำเนินการวิศวกรรมย้อนกลับของโค้ดเพื่อปรับปรุงความเข้าใจในโครงสร้าง
  • จัดทำเอกสารที่เป็นทางการ

13. โค้ดเซิร์ฟเฟอร์

เครื่องมือวิเคราะห์โปรแกรมที่ไม่ได้ออกแบบมาโดยเฉพาะเพื่อค้นหาช่องโหว่ด้านความปลอดภัย ข้อดีหลักคือ:

  • การวิเคราะห์พอยน์เตอร์
  • การวิเคราะห์กระแสข้อมูลต่างๆ (การใช้และคำจำกัดความของตัวแปร การพึ่งพาข้อมูล การสร้างกราฟการโทร)
  • ภาษาสคริปต์

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

14. เอฟเอ็กซ์คอป

ให้วิธีการตรวจสอบแอสเซมบลี .NET โดยอัตโนมัติเพื่อให้สอดคล้องกับแนวทางการออกแบบ Microsoft .NET Framework โค้ดที่คอมไพล์ได้รับการตรวจสอบโดยใช้กลไกการสะท้อน การแยกวิเคราะห์ MSIL และการวิเคราะห์กราฟการโทร เป็นผลให้ FxCop สามารถตรวจจับข้อบกพร่อง (หรือข้อผิดพลาด) มากกว่า 200 รายการในพื้นที่ต่อไปนี้:

  • สถาปัตยกรรมห้องสมุด
  • รองรับหลายภาษา;
  • กฎการตั้งชื่อ
  • ผลงาน;
  • ความปลอดภัย.

FxCop มอบความสามารถในการสร้างกฎของคุณเองโดยใช้ SDK พิเศษ FxCop สามารถรันได้ทั้งใน GUI หรือบนบรรทัดคำสั่ง

15. ชวาเช็คเกอร์

นี่คือตัววิเคราะห์โปรแกรม Java แบบคงที่ที่ใช้เทคโนโลยี TermWare

เครื่องมือนี้ช่วยให้คุณระบุข้อบกพร่องของโค้ดได้ เช่น:

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

ชุดการตรวจสอบสามารถควบคุมได้โดยใช้ความคิดเห็นควบคุม

JavaChecker สามารถเรียกได้จากสคริปต์ ANT

16.สิเมียน

เครื่องวิเคราะห์ความคล้ายคลึงที่ค้นหาไวยากรณ์ซ้ำในหลายไฟล์พร้อมกัน โปรแกรมเข้าใจไวยากรณ์ของภาษาการเขียนโปรแกรมต่างๆ รวมถึง C#, T-SQL, JavaScript และ Visual BasicR และยังสามารถค้นหาส่วนที่ซ้ำกันในไฟล์ข้อความ ตัวเลือกการปรับแต่งที่หลากหลายช่วยให้คุณปรับแต่งกฎการค้นหาโค้ดที่ซ้ำกันของคุณได้อย่างละเอียด ตัวอย่างเช่น พารามิเตอร์ขีดจำกัดจะกำหนดจำนวนบรรทัดของโค้ดที่ซ้ำกันซึ่งถือว่าซ้ำกัน

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

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

บทสรุป

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

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

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

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

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

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

ปัญหาที่แก้ไขได้ด้วยโปรแกรมวิเคราะห์โค้ดแบบสแตติกสามารถแบ่งออกได้เป็น 3 ประเภท คือ

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

ประโยชน์อื่นๆ ของการวิเคราะห์โค้ดแบบคงที่:

  1. การครอบคลุมโค้ดที่สมบูรณ์ เครื่องวิเคราะห์แบบคงที่จะตรวจสอบแม้แต่ส่วนของโค้ดที่ได้รับการควบคุมน้อยมาก ตามกฎแล้วส่วนของโค้ดดังกล่าวไม่สามารถทดสอบด้วยวิธีอื่นได้ ซึ่งช่วยให้คุณสามารถค้นหาข้อบกพร่องในตัวจัดการเหตุการณ์ที่เกิดขึ้นได้ยาก ตัวจัดการข้อผิดพลาด หรือระบบการบันทึก
  2. การวิเคราะห์แบบสแตติกไม่ขึ้นอยู่กับคอมไพเลอร์ที่ใช้และสภาพแวดล้อมที่โปรแกรมคอมไพล์จะถูกดำเนินการ วิธีนี้ช่วยให้คุณค้นหาข้อผิดพลาดที่ซ่อนอยู่ซึ่งอาจปรากฏขึ้นหลังจากผ่านไปไม่กี่ปีเท่านั้น ตัวอย่างเช่น นี่เป็นข้อผิดพลาดจากพฤติกรรมที่ไม่ได้กำหนดไว้ ข้อผิดพลาดดังกล่าวอาจปรากฏขึ้นเมื่อเปลี่ยนเวอร์ชันของคอมไพเลอร์หรือเมื่อใช้สวิตช์อื่นเพื่อปรับโค้ดให้เหมาะสม อีกตัวอย่างที่น่าสนใจของข้อผิดพลาดที่ซ่อนอยู่มีให้ในบทความ "เขียนทับหน่วยความจำ - เพราะเหตุใด"
  3. คุณสามารถมองเห็นการพิมพ์ผิดและผลที่ตามมาของการใช้ Copy-Paste ได้อย่างง่ายดายและรวดเร็ว ตามกฎแล้ว การค้นหาข้อผิดพลาดเหล่านี้ด้วยวิธีอื่นถือเป็นการเสียเวลาและความพยายามอย่างไม่มีประสิทธิภาพ เป็นเรื่องน่าเสียดายหลังจากแก้ไขจุดบกพร่องเป็นเวลาหนึ่งชั่วโมงเมื่อพบว่าข้อผิดพลาดอยู่ในนิพจน์เช่น "strcmp(A, A)" เมื่อพูดถึงข้อผิดพลาดทั่วไป มักจะไม่กล่าวถึงข้อผิดพลาดดังกล่าว แต่ในทางปฏิบัติ จะใช้เวลามากในการระบุตัวตนเหล่านี้

ข้อเสียของการวิเคราะห์โค้ดแบบคงที่

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

ข้อผิดพลาดที่เครื่องวิเคราะห์แบบคงที่ตรวจพบนั้นมีความหลากหลายมาก ตัวอย่างเช่น นี่คือรายการการวินิจฉัยที่ใช้ในเครื่องมือ PVS-Studio เครื่องวิเคราะห์บางตัวมีความเชี่ยวชาญเฉพาะด้านหรือประเภทของข้อบกพร่อง อื่นๆ รองรับมาตรฐานการเข้ารหัสบางอย่าง เช่น MISRA-C:1998, MISRA-C:2004, Sutter-Alexandrescu Rules, Meyers-Klaus Rules และอื่นๆ

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

การแนะนำ

ความสามารถมาตรฐานของผลิตภัณฑ์ซอฟต์แวร์และระบบควบคุมต่างๆ นั้นไม่เพียงพอสำหรับลูกค้าส่วนใหญ่ ระบบการจัดการเว็บไซต์ (เช่น WordPress, Joomla หรือ Bitrix), โปรแกรมการบัญชี, ระบบการจัดการลูกค้า (CRM), องค์กรและการผลิต (เช่น 1C และ SAP) มอบโอกาสมากมายในการขยายฟังก์ชันการทำงานและปรับให้เข้ากับความต้องการของลูกค้าเฉพาะราย ความสามารถดังกล่าวถูกนำไปใช้โดยใช้โมดูลของบุคคลที่สามแบบกำหนดเองหรือการปรับแต่งที่มีอยู่ โมดูลเหล่านี้เป็นโค้ดโปรแกรมที่เขียนด้วยภาษาการเขียนโปรแกรมในตัวภาษาใดภาษาหนึ่งซึ่งโต้ตอบกับระบบและใช้ฟังก์ชันการทำงานที่ลูกค้าต้องการ

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

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

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

เพื่อแก้ปัญหาการตรวจสอบซอร์สโค้ดและให้การป้องกันการหาประโยชน์จากช่องโหว่ในโค้ดที่ฝังตัวและเว็บแอปพลิเคชัน จึงมีการใช้ตัววิเคราะห์ซอร์สโค้ด

การจำแนกประเภทของตัววิเคราะห์ซอร์สโค้ด

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

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

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

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

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

หลักการทำงานของเครื่องวิเคราะห์ซอร์สโค้ด

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

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

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

รูปที่ 1. อัลกอริทึมของตัววิเคราะห์ซอร์สโค้ด

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

  • ฐานข้อมูลช่องโหว่และข้อผิดพลาดในการเขียนโปรแกรมของตัวเอง - ผู้พัฒนาเครื่องวิเคราะห์ซอร์สโค้ดแต่ละคนมีแผนกการวิเคราะห์และการวิจัยของตนเองที่เตรียมฐานข้อมูลเฉพาะสำหรับการวิเคราะห์ซอร์สโค้ดของโปรแกรม คุณภาพของฐานข้อมูลของคุณเองเป็นหนึ่งในเกณฑ์สำคัญที่ส่งผลต่อคุณภาพโดยรวมของผลิตภัณฑ์ นอกจากนี้ฐานข้อมูลของคุณจะต้องมีไดนามิกและอัปเดตอยู่ตลอดเวลา - เวกเตอร์ใหม่ของการโจมตีและการใช้ประโยชน์จากช่องโหว่ตลอดจนการเปลี่ยนแปลงภาษาการเขียนโปรแกรมและวิธีการพัฒนาทำให้นักพัฒนาเครื่องวิเคราะห์ต้องอัปเดตฐานข้อมูลอย่างต่อเนื่องเพื่อรักษาการสแกนคุณภาพสูง ผลิตภัณฑ์ที่มีฐานข้อมูลแบบคงที่และไม่อัปเดตมักจะแพ้ในการทดสอบเปรียบเทียบ
  • ฐานข้อมูลสถานะข้อผิดพลาดในการเขียนโปรแกรม - มีฐานข้อมูลสถานะช่องโหว่จำนวนหนึ่ง การรวบรวมและการสนับสนุนซึ่งดำเนินการโดยหน่วยงานกำกับดูแลในประเทศต่างๆ ตัวอย่างเช่น ในสหรัฐอเมริกา มีการใช้ฐานข้อมูล CWE - Common Weakness Enumeration ซึ่งดูแลโดยองค์กร MITER ซึ่งได้รับการสนับสนุนโดยกระทรวงกลาโหมสหรัฐฯ เหนือสิ่งอื่นใด รัสเซียยังไม่มีฐานข้อมูลที่คล้ายกัน แต่ในอนาคต FSTEC ของรัสเซียวางแผนที่จะเสริมฐานข้อมูลช่องโหว่และภัยคุกคามด้วยฐานข้อมูลเกี่ยวกับข้อผิดพลาดในการเขียนโปรแกรม เครื่องวิเคราะห์ช่องโหว่ใช้การสนับสนุนฐานข้อมูล CWE โดยการผสานรวมเข้ากับฐานข้อมูลช่องโหว่ของตนเองหรือใช้เป็นกลไกการตรวจสอบแยกต่างหาก
  • ข้อกำหนดมาตรฐานและคำแนะนำสำหรับการเขียนโปรแกรมที่ปลอดภัย - มีมาตรฐานของรัฐบาลและอุตสาหกรรมจำนวนหนึ่งที่อธิบายข้อกำหนดสำหรับการพัฒนาแอปพลิเคชันที่ปลอดภัย รวมถึงคำแนะนำจำนวนหนึ่งและ "แนวทางปฏิบัติที่ดีที่สุด" จากผู้เชี่ยวชาญระดับโลกในด้านการพัฒนาซอฟต์แวร์และความปลอดภัย เอกสารเหล่านี้ไม่ได้อธิบายข้อผิดพลาดในการเขียนโปรแกรมโดยตรง ซึ่งแตกต่างจาก CWE แต่มีรายการวิธีการที่สามารถแปลงเพื่อใช้ในตัววิเคราะห์ซอร์สโค้ดแบบคงที่

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

ตลาดโลก

มีเครื่องวิเคราะห์ที่แตกต่างกันมากมายในตลาดโลก - ทั้งจากผู้จำหน่ายระบบรักษาความปลอดภัยที่มีชื่อเสียงและผู้เล่นเฉพาะกลุ่มที่เกี่ยวข้องกับผลิตภัณฑ์ประเภทนี้เท่านั้น Gartner Analytical Center ได้จัดประเภทและประเมินตัววิเคราะห์ซอร์สโค้ดมานานกว่าห้าปี ในขณะที่จนถึงปี 2011 Gartner ได้ระบุตัววิเคราะห์แบบคงที่ที่กล่าวถึงในบทความนี้แยกกัน จากนั้นจึงรวมไว้ในระดับที่สูงกว่า - การทดสอบความปลอดภัยของแอปพลิเคชัน)

ใน Gartner Magic Quadrant ปี 2015 ผู้นำในตลาดการทดสอบความปลอดภัย ได้แก่ HP, Veracode และ IBM ในเวลาเดียวกัน Veracode เป็นบริษัทชั้นนำเพียงแห่งเดียวที่ไม่มีเครื่องวิเคราะห์เป็นผลิตภัณฑ์ซอฟต์แวร์ และฟังก์ชันการทำงานมีให้ในรูปแบบบริการในระบบคลาวด์ของ Veracode เท่านั้น บริษัทชั้นนำที่เหลือเสนอผลิตภัณฑ์เฉพาะที่ทำการตรวจสอบคอมพิวเตอร์ของผู้ใช้ หรือความสามารถในการเลือกระหว่างผลิตภัณฑ์และบริการคลาวด์ HP และ IBM ยังคงเป็นผู้นำตลาดโลกในช่วงห้าปีที่ผ่านมา ภาพรวมของผลิตภัณฑ์แสดงไว้ด้านล่าง ผลิตภัณฑ์ที่ใกล้เคียงตำแหน่งผู้นำมากที่สุดคือผลิตภัณฑ์ของ Checkmarx ซึ่งเชี่ยวชาญเฉพาะผลิตภัณฑ์ประเภทนี้เท่านั้น จึงรวมอยู่ในการรีวิวด้วย

รูปที่ 2 Magic Quadrant สำหรับนักวิเคราะห์Gartner เกี่ยวกับผู้เล่นในตลาดการวิเคราะห์ความปลอดภัยของแอปพลิเคชันในเดือนสิงหาคม 2558

ตามรายงานของนักวิเคราะห์ ReportsnReports ในสหรัฐอเมริกา ขนาดของตลาดเครื่องวิเคราะห์ซอร์สโค้ดในปี 2014 มีมูลค่า 2.5 พันล้านดอลลาร์ ภายในปี 2019 คาดว่าจะเพิ่มขึ้นสองเท่าเป็น 5 พันล้านดอลลาร์ โดยมีอัตราการเติบโต 14.9% ต่อปี องค์กรมากกว่า 50% ที่สำรวจแผนรายงานเพื่อจัดสรรและเพิ่มงบประมาณสำหรับการวิเคราะห์ซอร์สโค้ดสำหรับการพัฒนาแบบกำหนดเอง และมีเพียง 3% เท่านั้นที่พูดในแง่ลบเกี่ยวกับการใช้ผลิตภัณฑ์เหล่านี้

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

ตลาดรัสเซีย

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

ผู้เล่นที่โดดเด่นที่สุดในตลาดใหม่ ได้แก่ Positive Technologies, InfoWatch และ Solar Security Positive Technologies มีความเชี่ยวชาญมายาวนานในการค้นหาและวิเคราะห์ช่องโหว่ ผลงานของพวกเขารวมถึงผลิตภัณฑ์ MaxPatrol ซึ่งเป็นหนึ่งในผู้นำในตลาดในประเทศในด้านการตรวจสอบความปลอดภัยภายนอก ดังนั้นจึงไม่น่าแปลกใจที่บริษัทตัดสินใจมีส่วนร่วมในการวิเคราะห์ภายในและพัฒนาตัววิเคราะห์ซอร์สโค้ดของตัวเอง InfoWatch พัฒนาขึ้นในฐานะผู้พัฒนาระบบ DLP และในที่สุดก็กลายเป็นกลุ่มบริษัทที่ค้นหาช่องทางการตลาดใหม่ๆ ในปี 2012 Appercut ได้เป็นส่วนหนึ่งของ InfoWatch โดยเพิ่มเครื่องมือวิเคราะห์ซอร์สโค้ดให้กับพอร์ตโฟลิโอ InfoWatch การลงทุนและประสบการณ์ของ InfoWatch ช่วยให้เราสามารถพัฒนาผลิตภัณฑ์ให้อยู่ในระดับสูงได้อย่างรวดเร็ว Solar Security นำเสนอผลิตภัณฑ์ Solar inCode อย่างเป็นทางการเมื่อปลายเดือนตุลาคม 2558 เท่านั้น แต่ ณ เวลาที่เปิดตัว พวกเขามีการใช้งานอย่างเป็นทางการสี่ครั้งในรัสเซีย

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

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

ภาพรวมโดยย่อของเครื่องวิเคราะห์

เครื่องมือวิเคราะห์ซอร์สโค้ดแรกในการรีวิวของเราคือผลิตภัณฑ์จาก Fortify ซึ่ง Hewlett-Packard เป็นเจ้าของตั้งแต่ปี 2010 กลุ่มผลิตภัณฑ์ HP Fortify ประกอบด้วยผลิตภัณฑ์ต่างๆ สำหรับการวิเคราะห์โค้ดโปรแกรม: มีบริการ SaaS Fortify On-Demand ซึ่งเกี่ยวข้องกับการอัปโหลดซอร์สโค้ดไปยังคลาวด์ของ HP และแอปพลิเคชัน HP Fortify Static Code Analyzer เต็มรูปแบบที่ติดตั้งในโครงสร้างพื้นฐานของลูกค้า

HP Fortify Static Code Analyzer รองรับภาษาและแพลตฟอร์มการเขียนโปรแกรมที่หลากหลาย รวมถึงเว็บแอปพลิเคชันที่เขียนด้วย PHP, Python, Java/JSP, ASP.Net และ JavaScript และโค้ดแบบฝังใน ABAP (SAP), Action Script และ VBScript

รูปที่ 3 อินเทอร์เฟซ HP Fortify Static Code Analyzer

ในบรรดาคุณสมบัติของผลิตภัณฑ์ เป็นสิ่งที่ควรค่าแก่การเน้นย้ำถึงการมีอยู่ของ HP Fortify Static Code Analyzer ที่รองรับการทำงานร่วมกับระบบการจัดการการพัฒนาต่างๆ และการติดตามข้อผิดพลาด หากนักพัฒนาโค้ดให้ลูกค้าสามารถเข้าถึงการรายงานจุดบกพร่องโดยตรงไปยัง Bugzilla, HP Quality Center หรือ Microsoft TFS เครื่องวิเคราะห์จะสามารถสร้างรายงานจุดบกพร่องบนระบบเหล่านั้นได้โดยอัตโนมัติ โดยไม่จำเป็นต้องมีการแทรกแซงด้วยตนเอง

การดำเนินงานของผลิตภัณฑ์อิงตามฐานความรู้ของ HP Fortify ที่เกิดขึ้นจากการปรับฐานข้อมูล CWE ผลิตภัณฑ์ใช้การวิเคราะห์เพื่อให้ตรงตามข้อกำหนดของคำแนะนำ DISA STIG, FISMA, PCI DSS และ OWASP

ในบรรดาข้อเสียของ HP Fortify Static Code Analyzer ควรสังเกตว่าการขาดการแปลผลิตภัณฑ์สำหรับตลาดรัสเซีย - อินเทอร์เฟซและรายงานเป็นภาษาอังกฤษ, การขาดวัสดุและเอกสารประกอบสำหรับผลิตภัณฑ์ในภาษารัสเซีย, การวิเคราะห์การฝังตัว ไม่รองรับรหัสสำหรับ 1C และผลิตภัณฑ์ระดับองค์กรในประเทศอื่น ๆ

ประโยชน์ของเครื่องวิเคราะห์โค้ด HP Fortify Static:

  • แบรนด์ที่มีชื่อเสียง โซลูชั่นคุณภาพสูง
  • รายการภาษาโปรแกรมวิเคราะห์จำนวนมากและสภาพแวดล้อมการพัฒนาที่รองรับ
  • ความพร้อมใช้งานของการบูรณาการกับระบบการจัดการการพัฒนาและผลิตภัณฑ์ HP Fortify อื่น ๆ
  • สนับสนุนมาตรฐานสากล คำแนะนำ และ "แนวปฏิบัติที่ดีที่สุด"

Checkmarx CxSAST เป็นเครื่องมือของ Checkmarx บริษัทสัญชาติอเมริกัน-อิสราเอล ซึ่งเชี่ยวชาญด้านการพัฒนาเครื่องวิเคราะห์ซอร์สโค้ด ผลิตภัณฑ์นี้มีไว้สำหรับการวิเคราะห์ซอฟต์แวร์ทั่วไปเป็นหลัก แต่เนื่องจากการรองรับภาษาการเขียนโปรแกรม PHP, Python, JavaScript, Perl และ Ruby จึงเหมาะอย่างยิ่งสำหรับการวิเคราะห์เว็บแอปพลิเคชัน Checkmarx CxSAST เป็นเครื่องวิเคราะห์อเนกประสงค์ที่ไม่มีข้อมูลเฉพาะเจาะจง ดังนั้นจึงเหมาะสำหรับการใช้งานในทุกขั้นตอนของวงจรชีวิตผลิตภัณฑ์ซอฟต์แวร์ ตั้งแต่การพัฒนาไปจนถึงการใช้งาน

รูปที่ 4 อินเทอร์เฟซ Checkmarx CxSAST

Checkmarx CxSAST ดำเนินการรองรับฐานข้อมูลข้อผิดพลาดรหัส CWE รองรับการตรวจสอบการปฏิบัติตามคำแนะนำ OWASP และ SANS 25, มาตรฐาน PCI DSS, HIPAA, MISRA, FISMA และ BSIMM ปัญหาทั้งหมดที่ Checkmarx CxSAST ตรวจพบจะถูกแบ่งตามระดับความเสี่ยงตั้งแต่เล็กน้อยไปจนถึงวิกฤต คุณลักษณะของผลิตภัณฑ์คือการมีฟังก์ชันสำหรับการแสดงโค้ดด้วยการสร้างบล็อกไดอะแกรมของเส้นทางการดำเนินการและคำแนะนำสำหรับการแก้ไขปัญหาเกี่ยวกับการเชื่อมโยงกับไดอะแกรมกราฟิก

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

ประโยชน์ของเช็คมาร์กซ์ CxSAST:

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

ผลิตภัณฑ์อื่นจากผู้จำหน่ายที่มีชื่อเสียงคือตัววิเคราะห์ซอร์สโค้ด IBM Security AppScan กลุ่มผลิตภัณฑ์ AppScan มีผลิตภัณฑ์มากมายที่เกี่ยวข้องกับการพัฒนาซอฟต์แวร์ที่ปลอดภัย แต่ผลิตภัณฑ์ที่เหลือไม่เหมาะสำหรับการใช้โค้ดซอฟต์แวร์กับลูกค้า เนื่องจากมีฟังก์ชันการทำงานที่ไม่จำเป็นมากมาย IBM Security AppScan Source เช่น Checkmarx CxSAST มีไว้สำหรับองค์กรด้านการพัฒนาเป็นหลัก ในขณะที่รองรับภาษาการพัฒนาเว็บเพียงไม่กี่ภาษา - เฉพาะ PHP, Perl และ JavaScript ไม่รองรับภาษาการเขียนโปรแกรมสำหรับโค้ดที่ฝังอยู่ในแอปพลิเคชันทางธุรกิจ

รูปที่ 5. อินเตอร์เฟส IBM Security AppScan Source

IBM Security AppScan Source ผสานรวมกับแพลตฟอร์มการพัฒนา IBM Rational อย่างแน่นหนา ดังนั้นผลิตภัณฑ์จึงมักถูกใช้ในระหว่างขั้นตอนการพัฒนาและทดสอบผลิตภัณฑ์ซอฟต์แวร์ และไม่เหมาะอย่างยิ่งสำหรับการดำเนินการยอมรับหรือตรวจสอบแอปพลิเคชันที่กำหนดเอง

คุณสมบัติพิเศษของ IBM Security AppScan Source คือ รองรับการวิเคราะห์โปรแกรมสำหรับ IBM Worklight ซึ่งเป็นแพลตฟอร์มสำหรับแอปพลิเคชันธุรกิจมือถือ รายการมาตรฐานและข้อกำหนดที่รองรับยังไม่เพียงพอ - PCI DSS และคำแนะนำของ DISA และ OWASP ฐานข้อมูลช่องโหว่จะเปรียบเทียบปัญหาที่พบใน CWE

ไม่พบข้อดีเฉพาะของโซลูชันนี้สำหรับลูกค้าด้านการพัฒนา

AppChecker จาก บริษัท ในประเทศ NPO Eshelon CJSC เป็นโซลูชันที่ปรากฏในตลาดเมื่อไม่นานมานี้ ผลิตภัณฑ์เวอร์ชันแรกเปิดตัวเมื่อปีที่แล้ว แต่ควรคำนึงถึงประสบการณ์ของบริษัท Echelon ในการวิเคราะห์โค้ดโปรแกรมด้วย "NPO Eshelon" เป็นห้องปฏิบัติการทดสอบของ FSTEC, FSB และกระทรวงกลาโหมของสหพันธรัฐรัสเซีย และมีประสบการณ์กว้างขวางในด้านการวิเคราะห์ซอร์สโค้ดโปรแกรมแบบคงที่และไดนามิก

รูปที่ 6 อินเทอร์เฟซ “Echelon” ของ AppChecker

AppChecker ได้รับการออกแบบมาเพื่อวิเคราะห์ซอฟต์แวร์และเว็บแอปพลิเคชันต่างๆ ที่เขียนด้วย PHP, Java และ C/C++ รองรับการจำแนกประเภทช่องโหว่ CWE อย่างสมบูรณ์ และคำนึงถึงคำแนะนำของ OWASP, CERT และ NISP ผลิตภัณฑ์นี้สามารถใช้เพื่อดำเนินการตรวจสอบการปฏิบัติตามข้อกำหนด PCI DSS และมาตรฐาน Bank of Russia IBBS-2.6-2014

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

ข้อดี:

  • ความสามารถในการดำเนินการตรวจสอบตามข้อกำหนดภายในประเทศและ PCI DSS
  • โดยคำนึงถึงอิทธิพลของคุณสมบัติภาษาการเขียนโปรแกรมเนื่องจากการกำหนดค่าที่ยืดหยุ่นของโครงการที่วิเคราะห์
  • ราคาถูก.

PT Application Inspector เป็นผลิตภัณฑ์ของ Positive Technologies ผู้พัฒนาชาวรัสเซียซึ่งโดดเด่นด้วยแนวทางในการแก้ปัญหาการวิเคราะห์ซอร์สโค้ด PT Application Inspector มุ่งเป้าไปที่การค้นหาช่องโหว่ในโค้ดเป็นหลัก แทนที่จะระบุข้อผิดพลาดทั่วไปของซอฟต์แวร์

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

รูปที่ 7 อินเทอร์เฟซ PT Application Inspector

PT Application Inspector รองรับทั้งภาษาการพัฒนาเว็บแอปพลิเคชัน (PHP, JavaScript) และโค้ดแบบฝังสำหรับแอปพลิเคชันทางธุรกิจ - SAP ABAP, SAP Java, Oracle EBS Java, Oracle EBS PL/SQL PT Application Inspector ยังรองรับการแสดงภาพเส้นทางการทำงานของโปรแกรมอีกด้วย

PT Application Inspector เป็นโซลูชันแบบครบวงจรสำหรับทั้งนักพัฒนาและลูกค้าที่ใช้งานแอปพลิเคชันเว็บที่กำหนดเองและปลั๊กอินแอปพลิเคชันทางธุรกิจ ฐานข้อมูลช่องโหว่และข้อผิดพลาดในโค้ดโปรแกรมประกอบด้วยการพัฒนาของ Positive Technologies, ฐานข้อมูล CWE และ WASC (ฐานข้อมูลช่องโหว่ของ web consortium ซึ่งเป็นอะนาล็อกของ CWE สำหรับแอปพลิเคชันเว็บ)

การใช้ PT Application Inspector ช่วยให้คุณปฏิบัติตามข้อกำหนดของมาตรฐาน PCI DSS, STO BR IBBS รวมถึงคำสั่งซื้อ FSTEC ครั้งที่ 17 และข้อกำหนดสำหรับการไม่มีความสามารถที่ไม่ได้ประกาศ (เกี่ยวข้องกับการรับรองรหัส)

ข้อดี:

  • รองรับการวิเคราะห์เว็บแอพพลิเคชั่นและระบบการพัฒนาที่หลากหลายสำหรับแอพพลิเคชั่นทางธุรกิจ
  • ผลิตภัณฑ์ในประเทศที่แปลเป็นภาษาท้องถิ่น
  • มาตรฐานของรัฐที่ได้รับการสนับสนุนมากมาย
  • การใช้ฐานข้อมูลช่องโหว่แอปพลิเคชันเว็บ WASC และตัวแยกประเภท CWE
  • ความสามารถในการแสดงภาพโค้ดโปรแกรมและค้นหาบุ๊กมาร์กของโปรแกรม

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

InfoWatch Appercut รองรับภาษาการเขียนโปรแกรมเกือบทั้งหมดที่ใช้สร้างเว็บแอปพลิเคชัน (JavaScript, Python, PHP, Ruby) และโมดูลในตัวสำหรับข้อเสนอทางธุรกิจ - 1C, ABAP, X++ (ERP Microsoft Axapta), Java, Lotus Script InfoWatch Appercut มีความสามารถในการปรับให้เข้ากับลักษณะเฉพาะของแอปพลิเคชันเฉพาะและลักษณะเฉพาะของกระบวนการทางธุรกิจของแต่ละบริษัท

รูปที่ 8 อินเทอร์เฟซ InfoWatch Appercut

InfoWatch Appercut รองรับข้อกำหนดมากมายสำหรับการเขียนโปรแกรมที่มีประสิทธิภาพและปลอดภัย รวมถึงข้อกำหนดทั่วไปของ PCI DSS และ HIPPA คำแนะนำและ “แนวทางปฏิบัติที่ดีที่สุด” ของ CERT และ OWAST รวมถึงคำแนะนำจากผู้ผลิตแพลตฟอร์มกระบวนการทางธุรกิจ - 1C, SAP, Oracle, Microsoft

ข้อดี:

  • ผลิตภัณฑ์ในประเทศที่แปลเป็นภาษาท้องถิ่นรับรองโดย FSTEC ของรัสเซีย
  • ผลิตภัณฑ์เดียวที่รองรับแพลตฟอร์มธุรกิจยอดนิยมทั้งหมดในรัสเซีย รวมถึง 1C, SAP, Oracle EBS, IBM Collaboration Solutions (Lotus) และ Microsoft Axapta
  • เครื่องสแกนที่รวดเร็วซึ่งดำเนินการตรวจสอบภายในไม่กี่วินาทีและสามารถตรวจสอบได้เฉพาะโค้ดที่เปลี่ยนแปลงและส่วนของโค้ดเท่านั้น

Digital Security ERPScan เป็นผลิตภัณฑ์เฉพาะสำหรับการวิเคราะห์และตรวจสอบความปลอดภัยของระบบธุรกิจที่สร้างขึ้นบนผลิตภัณฑ์ SAP เวอร์ชันแรกเปิดตัวในปี 2010 นอกเหนือจากโมดูลสำหรับการวิเคราะห์การกำหนดค่า ช่องโหว่ และการควบคุมการเข้าถึง (SOD) แล้ว ERPScan ยังมีโมดูลสำหรับประเมินความปลอดภัยของซอร์สโค้ด ซึ่งใช้ฟังก์ชันการค้นหาบุ๊กมาร์ก การโทรที่สำคัญ ช่องโหว่ และข้อผิดพลาดในการเขียนโปรแกรมในโค้ดใน ABAP และภาษาโปรแกรมจาวา ในเวลาเดียวกัน ผลิตภัณฑ์คำนึงถึงลักษณะเฉพาะของแพลตฟอร์ม SAP เชื่อมโยงช่องโหว่ที่ตรวจพบในโค้ดกับการตั้งค่าการกำหนดค่าและสิทธิ์การเข้าถึง และทำการวิเคราะห์ได้ดีกว่าผลิตภัณฑ์ที่ไม่เฉพาะทางซึ่งทำงานกับภาษาการเขียนโปรแกรมเดียวกัน

รูปที่ 9 อินเทอร์เฟซ Digital Security ERPScan

คุณสมบัติเพิ่มเติมของ ERPScan ได้แก่ ความสามารถในการสร้างแพตช์สำหรับช่องโหว่ที่ตรวจพบโดยอัตโนมัติ รวมถึงสร้างลายเซ็นสำหรับการโจมตีที่เป็นไปได้ และอัปโหลดลายเซ็นเหล่านี้ไปยังระบบตรวจจับและป้องกันการบุกรุก (ในความร่วมมือกับ CISCO) นอกจากนี้ ระบบยังมีกลไกในการประเมินประสิทธิภาพของโค้ดที่ฝังไว้ ซึ่งเป็นสิ่งสำคัญสำหรับแอปพลิเคชันทางธุรกิจ เนื่องจากการทำงานที่ช้าของโมดูลเพิ่มเติมอาจส่งผลกระทบร้ายแรงต่อกระบวนการทางธุรกิจในองค์กร ระบบยังรองรับการวิเคราะห์ตามคำแนะนำเฉพาะสำหรับการวิเคราะห์โค้ดแอปพลิเคชันทางธุรกิจ เช่น EAS-SEC และ BIZEC รวมถึงคำแนะนำ PCI DSS และ OWASP ทั่วไป

ข้อดี:

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

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

Solar inCode ช่วยให้คุณสามารถวิเคราะห์ซอร์สโค้ดที่เขียนในภาษาการเขียนโปรแกรม Java, Scala, Java สำหรับ Android, PHP และ Objective C ซึ่งแตกต่างจากคู่แข่งส่วนใหญ่ รายการภาษาการเขียนโปรแกรมที่รองรับประกอบด้วยเครื่องมือการพัฒนาสำหรับแพลตฟอร์มมือถือ Android และ iOS .

รูปที่ 10 อินเทอร์เฟซ

ในกรณีที่ไม่มีซอร์สโค้ด Solar inCode อนุญาตให้วิเคราะห์แอปพลิเคชันสำเร็จรูป ฟังก์ชันนี้รองรับแอปพลิเคชันบนเว็บและแอปพลิเคชันมือถือ โดยเฉพาะสำหรับแอปพลิเคชันมือถือ คุณเพียงแค่ต้องคัดลอกลิงก์ไปยังแอปพลิเคชันจาก Google Play หรือ Apple Store ลงในสแกนเนอร์ แอปพลิเคชันจะถูกดาวน์โหลด ถอดรหัส และตรวจสอบโดยอัตโนมัติ

การใช้ Solar inCode ช่วยให้คุณปฏิบัติตามข้อกำหนดของมาตรฐาน PCI DSS, STO BR IBBS รวมถึงคำสั่งซื้อ FSTEC ครั้งที่ 17 และข้อกำหนดสำหรับการไม่มีความสามารถที่ไม่ได้ประกาศ (เกี่ยวข้องกับการรับรองรหัส)

ข้อดี:

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

ข้อสรุป

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

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

ในการทบทวนนี้ ผู้นำที่ชัดเจนในกลุ่มผลิตภัณฑ์ต่างประเทศในแง่ของการรองรับภาษาการเขียนโปรแกรมและคุณภาพการสแกนคือโซลูชัน HP Fortify Static Code Analyzer Checkmarx CxSAST ยังเป็นผลิตภัณฑ์ที่ดี แต่สามารถวิเคราะห์ได้เฉพาะแอปพลิเคชันและเว็บแอปพลิเคชันทั่วไปเท่านั้น ผลิตภัณฑ์ไม่รองรับปลั๊กอินสำหรับแอปพลิเคชันทางธุรกิจ โซลูชัน IBM Security AppScan Source ดูน่าเบื่อเมื่อเทียบกับคู่แข่ง และไม่มีความแตกต่างในด้านฟังก์ชันการทำงานหรือคุณภาพของการตรวจสอบ อย่างไรก็ตาม ผลิตภัณฑ์นี้ไม่ได้มีไว้สำหรับผู้ใช้ทางธุรกิจและมีวัตถุประสงค์เพื่อใช้ในบริษัทที่กำลังพัฒนาซึ่งอาจมีประสิทธิภาพมากกว่าคู่แข่ง

ในบรรดาผลิตภัณฑ์ของรัสเซีย เป็นการยากที่จะแยกแยะผู้นำที่ชัดเจน ตลาดมีผลิตภัณฑ์หลักสามรายการ ได้แก่ InfoWatch Appercut, PT Application Inspector และ Solar inCode ในขณะเดียวกัน ผลิตภัณฑ์เหล่านี้มีความแตกต่างทางเทคโนโลยีอย่างมากและมีไว้สำหรับกลุ่มเป้าหมายที่แตกต่างกัน โดยผลิตภัณฑ์แรกรองรับแพลตฟอร์มแอปพลิเคชันทางธุรกิจมากกว่าและเร็วกว่าเนื่องจากการค้นหาช่องโหว่โดยใช้วิธีการวิเคราะห์แบบคงที่โดยเฉพาะ ส่วนที่สองเป็นการรวมการวิเคราะห์แบบคงที่และไดนามิกเข้าด้วยกัน ซึ่งเมื่อรวมกับการปรับปรุงคุณภาพการสแกนแล้ว จะทำให้เวลาในการตรวจสอบซอร์สโค้ดเพิ่มขึ้น ประการที่สามมีวัตถุประสงค์เพื่อแก้ไขปัญหาของผู้ใช้ทางธุรกิจและผู้เชี่ยวชาญด้านความปลอดภัยของข้อมูลและยังช่วยให้คุณสามารถทดสอบแอปพลิเคชันโดยไม่ต้องเข้าถึงซอร์สโค้ด

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

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

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

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

คอมไพเลอร์สมัยใหม่

อาจดูตลกแต่มีประสิทธิภาพมากที่สุดอย่างหนึ่ง เครื่องวิเคราะห์
รหัส
เป็นผู้เรียบเรียงเอง แน่นอนว่ามีจุดประสงค์เพื่อเท่านั้น
อีกอย่างหนึ่ง แต่เป็นโบนัส แต่ละอันเสนอตัวตรวจสอบที่ดี
ซอร์สโค้ดที่สามารถตรวจจับข้อผิดพลาดจำนวนมากได้ ทำไมเขาไม่
ประหยัดไหม? ในตอนแรก การตั้งค่าสำหรับการตรวจสอบรหัสดังกล่าวได้รับการตั้งค่าไว้เพียงพอแล้ว
ภักดี: ด้วยเหตุนี้เพื่อไม่ให้โปรแกรมเมอร์สับสนคอมไพเลอร์จึงเริ่มทำงาน
สาบานเฉพาะในกรณีที่มีข้อผิดพลาดร้ายแรงที่สุดเท่านั้น แต่เปล่าประโยชน์ - ถ้าคุณใส่
ระดับการเตือนสูงขึ้นจึงค่อนข้างเป็นไปได้ที่จะขุดสถานที่ที่น่าสงสัยหลายแห่ง
ในรหัส มันมีลักษณะเช่นนี้ สมมติว่ามีโค้ดหายไป
ตรวจสอบความยาวของสตริงก่อนที่จะคัดลอกไปยังบัฟเฟอร์ เครื่องสแกนค้นหาฟังก์ชัน
คัดลอกสตริง (หรือบางส่วน) ไปยังบัฟเฟอร์ขนาดคงที่โดยไม่มี
ตรวจสอบความยาวเบื้องต้น เขาติดตามวิถีการส่งสัญญาณ
อาร์กิวเมนต์: จากข้อมูลที่ป้อนไปยังฟังก์ชันที่มีช่องโหว่และรูปลักษณ์: เป็นไปได้หรือไม่
เลือกความยาวสตริงที่จะทำให้เกิดการล้นในช่องโหว่
และจะไม่ถูกตัดออกโดยการตรวจสอบก่อนหน้านั้น ในกรณีดังกล่าว
ไม่มีการตรวจสอบ เราพบว่าบัฟเฟอร์ล้นเกือบ 100% ความยากหลักคือ
ใช้เพื่อทดสอบคอมไพเลอร์ - ทำให้เป็น "กลืน" รหัสของคนอื่น
หากคุณเคยพยายามรวบรวมแอปพลิเคชันจากแหล่งที่มาคุณก็รู้
มันยากแค่ไหนที่จะตอบสนองความต้องการทั้งหมด โดยเฉพาะในโครงการขนาดใหญ่ แต่
ผลลัพธ์ที่ได้ก็คุ้มค่า! ยิ่งไปกว่านั้น นอกจากคอมไพเลอร์แล้ว IDE อันทรงพลังยังมีในตัวอีกด้วย
วิธีอื่นสำหรับ การวิเคราะห์โค้ด. ยกตัวอย่างต่อไป
ส่วนของโค้ดใน Visual Studio จะออกคำเตือนเกี่ยวกับการใช้งานค่ะ
วนซ้ำของฟังก์ชัน _alloca ซึ่งสามารถล้นสแต็กได้อย่างรวดเร็ว:

ถ่าน *b;
ทำ (
ข = (ถ่าน*)_จัดสรร(9)
) ในขณะที่(1)

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

RATS - เครื่องมือตรวจสอบอย่างคร่าวๆ เพื่อความปลอดภัย

เว็บไซต์: www.securesoftware.com
ใบอนุญาต: GNU GPL
แพลตฟอร์ม: ยูนิกซ์, วินโดวส์
ภาษา: C++, PHP, Python, Ruby

ข้อผิดพลาดถึงข้อผิดพลาด - ไม่ลงรอยกัน ข้อผิดพลาดบางประการที่โปรแกรมเมอร์ทำคือ
ไม่สำคัญและคุกคามเฉพาะความไม่เสถียรของโปรแกรมเท่านั้น อื่น ๆ ในทางตรงกันข้าม
อนุญาตให้คุณฉีดเชลล์โค้ดและรันคำสั่งใดก็ได้จากระยะไกล
เซิร์ฟเวอร์ โค้ดที่มีความเสี่ยงเป็นพิเศษคือคำสั่งที่อนุญาตให้คุณเรียกใช้งานบัฟเฟอร์
ล้นและการโจมตีประเภทอื่นที่คล้ายคลึงกัน มีคำสั่งดังกล่าวมากมาย ในกรณีของ C/C++
เหล่านี้เป็นฟังก์ชันสำหรับการทำงานกับสตริง (xstrcpy(), strcat(), gets(), sprintf()
printf(), snprintf(), syslog()), คำสั่งระบบ (เข้าถึง(), chown(), chgrp()
chmod(), tmpfile(), tmpnam(), tempnam(), mktemp()) รวมถึงคำสั่งระบบ
โทร (exec(), ระบบ(), popen()) ตรวจสอบโค้ดทั้งหมดด้วยตนเอง (โดยเฉพาะ
ถ้าประกอบด้วยหลายพันบรรทัด) ค่อนข้างน่าเบื่อ ซึ่งหมายความว่าเป็นไปได้
เป็นเรื่องง่ายที่จะมองข้ามการส่งพารามิเตอร์ที่ไม่ได้ตรวจสอบไปยังบางฟังก์ชัน
เครื่องมือตรวจสอบพิเศษสามารถอำนวยความสะดวกในการทำงานได้อย่างมากรวมถึง
ยูทิลิตี้ที่มีชื่อเสียง หนู (เครื่องมือตรวจสอบอย่างคร่าวๆ เพื่อความปลอดภัย) จาก
บริษัทชื่อดังอย่าง Fortify เธอจะไม่เพียงแต่จะจัดการกับการประมวลผลโค้ดได้สำเร็จเท่านั้น
เขียนด้วยภาษา C/C++ แต่สามารถประมวลผลสคริปต์ในภาษา Perl, PHP และ Python ได้ด้วย
ฐานข้อมูลยูทิลิตี้มีตัวเลือกที่น่าประทับใจพร้อมคำอธิบายโดยละเอียดเกี่ยวกับปัญหา
สถานที่ในรหัส ด้วยความช่วยเหลือของเครื่องวิเคราะห์ เธอจะประมวลผลสีน้ำตาลที่ป้อนให้เธอและ
จะพยายามระบุข้อบกพร่อง หลังจากนั้นจะให้ข้อมูลเกี่ยวกับข้อบกพร่องที่พบ
หนู
ทำงานผ่านบรรทัดคำสั่งทั้งในระบบ Windows และ *nix

ยาสก้า

เว็บไซต์: www.yasca.org
ใบอนุญาต: โอเพ่นซอร์ส
แพลตฟอร์ม: ยูนิกซ์, วินโดวส์
ภาษา: C++, Java, .NET, ASP, Perl, PHP, Python และอื่นๆ

ยาสก้าเช่นเดียวกับที่ RATS ไม่จำเป็นต้องติดตั้งและไม่มี
มีเพียงอินเทอร์เฟซคอนโซล แต่ยังเป็น GUI แบบธรรมดาด้วย นักพัฒนาแนะนำ
เรียกใช้ยูทิลิตี้ผ่านคอนโซล - พวกเขาบอกว่าวิธีนี้มีความเป็นไปได้มากกว่า มันตลกอะไร
เอ็นจิ้น Yasca เขียนด้วย PHP 5.2.5 และล่าม (ในเวอร์ชันที่แยกส่วนมากที่สุด)
ตัวเลือก) อยู่ในหนึ่งในโฟลเดอร์ย่อยของไฟล์เก็บถาวรพร้อมกับโปรแกรม โปรแกรมทั้งหมดเป็นไปตามตรรกะ
ประกอบด้วยส่วนหน้า ชุดปลั๊กอินการสแกน ตัวสร้างรายงาน และ
ตัวเครื่องยนต์เองซึ่งทำให้เกียร์ทั้งหมดหมุนไปพร้อมๆ กัน ปลั๊กอิน
ทิ้งลงในไดเร็กทอรีปลั๊กอิน - จำเป็นต้องติดตั้งเพิ่มเติมที่นั่นด้วย
ส่วนเสริม จุดสำคัญ! มีปลั๊กอินมาตรฐานสามรายการรวมอยู่ด้วย
ยาสก้า
มีที่พึ่งอันไม่พึงประสงค์ JLint ซึ่งสแกน Java
ไฟล์ .class ต้องใช้ jlint.exe ในไดเร็กทอรีทรัพยากร/ยูทิลิตี้ ที่สอง
ปลั๊กอิน - antiC ที่ใช้ในการวิเคราะห์แหล่งที่มา Java และ C/C++ ต้องใช้ antic.exe
ในไดเรกทอรีเดียวกัน และสำหรับ PMD ซึ่งประมวลผลโค้ด Java คุณต้องมี
ติดตั้งบนระบบ Java JRE 1.4 หรือสูงกว่า ตรวจสอบการติดตั้งให้ถูกต้อง
คุณสามารถทำได้โดยพิมพ์คำสั่ง "yasca ./resources/test/" การสแกนมีลักษณะอย่างไร?
หลังจากแปรรูปพันธุ์ที่เลี้ยงตามโปรแกรมแล้ว ยาสก้าให้ผลลัพธ์เป็น
รายงานพิเศษ ตัวอย่างเช่น หนึ่งในปลั๊กอิน GREP มาตรฐานช่วยให้คุณทำได้
การใช้รูปแบบที่อธิบายไว้ในไฟล์ .grep ระบุโครงสร้างที่มีช่องโหว่และ
ระบุช่องโหว่ต่างๆ ได้อย่างง่ายดาย มีชุดรูปแบบดังกล่าวรวมอยู่ด้วยแล้ว
โปรแกรม: เพื่อค้นหาการเข้ารหัสที่อ่อนแอ การอนุญาตโดยใช้ "รหัสผ่านเท่ากับการเข้าสู่ระบบ"
การฉีด SQL ที่เป็นไปได้และอีกมากมาย คุณต้องการเห็นในรายงานเมื่อใด
หากต้องการข้อมูลโดยละเอียดเพิ่มเติม อย่าขี้เกียจที่จะติดตั้งปลั๊กอินเพิ่มเติม อะไร
สิ่งหนึ่งที่ควรกล่าวถึงก็คือด้วยความช่วยเหลือของพวกเขา คุณสามารถสแกนโค้ดเพิ่มเติมได้
.NET (VB.NET, C#, ASP.NET), PHP, ColdFusion, COBOL, HTML, JavaScript, CSS,
Visual Basic, ASP, ไพธอน, เพิร์ล

ซีพีพีเช็ค

เว็บไซต์:
ใบอนุญาต: โอเพ่นซอร์ส
แพลตฟอร์ม: ยูนิกซ์, วินโดวส์
ภาษา: C++

นักพัฒนา ซีพีพีเช็คตัดสินใจที่จะไม่เสียเวลากับเรื่องเล็ก ๆ น้อย ๆ ดังนั้น
โดยจะตรวจจับเฉพาะหมวดหมู่ของข้อบกพร่องที่กำหนดไว้อย่างเคร่งครัดและเฉพาะในโค้ด C++ เท่านั้น
อย่าคาดหวังว่าโปรแกรมจะทำซ้ำคำเตือนของคอมไพลเลอร์ - มันจะทำโดยไม่มีคำเตือน
ผู้แจ้ง ดังนั้นอย่าขี้เกียจที่จะตั้งค่าคอมไพเลอร์ให้อยู่ในระดับสูงสุด
คำเตือน และใช้ Cppcheck เพื่อตรวจสอบหน่วยความจำรั่วและการละเมิด
การดำเนินการจัดสรร-จัดสรรคืน, บัฟเฟอร์ล้นต่างๆ, การใช้งาน
คุณสมบัติที่ล้าสมัยและอีกมากมาย รายละเอียดสำคัญ: นักพัฒนา Cppcheck
เราพยายามลดจำนวนผลบวกลวงให้เหลือน้อยที่สุด ดังนั้นหาก
โปรแกรมบันทึกข้อผิดพลาด คุณสามารถพูดได้ว่า: "เธอจริงๆ
ใช่!" คุณสามารถเรียกใช้การวิเคราะห์จากคอนโซลหรือใช้ nice
อินเทอร์เฟซ GUI เขียนด้วย Qt และทำงานบนแพลตฟอร์มใดก็ได้

ไล่ระดับ

เว็บไซต์:
www.justanotherhacker.com/projects/graudit.html
ใบอนุญาต: โอเพ่นซอร์ส
แพลตฟอร์ม: ยูนิกซ์, วินโดวส์
ภาษา: C++, PHP, Python, Perl

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

ไล่ระดับ /path/to/scan

รางวัลสำหรับความพยายามของคุณจะเป็นรายงานที่มีสีสันเกี่ยวกับการถูกเอารัดเอาเปรียบ
สถานที่ในรหัส ต้องบอกว่านอกจากสคริปต์แล้ว (และนี่แค่ 100 บรรทัดเท่านั้น)
รหัสใน Bash) ค่าจะมาจากฐานข้อมูลลายเซ็นที่
regexps และชื่อของฟังก์ชันที่อาจมีความเสี่ยงในภาษาต่างๆ ค่าเริ่มต้น
รวมฐานสำหรับ Python, Perl, PHP, C++ ไว้ด้วย - คุณสามารถรับไฟล์จากโฟลเดอร์ลายเซ็นได้
และใช้มันในการพัฒนาของคุณเอง

หน่วยสวาท

เว็บไซต์: www.owasp.org
ใบอนุญาต: โอเพ่นซอร์ส
แพลตฟอร์ม: ยูนิกซ์, วินโดวส์
ภาษา: Java, JSP, ASP .Net, PHP

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

การจับคู่ vuln - นิพจน์ทั่วไปสำหรับการค้นหา
type - ระบุประเภทของช่องโหว่:
ความรุนแรง - ระบุระดับความเสี่ยง (สูง ปานกลาง หรือต่ำ)
alt - รหัสทางเลือกในการแก้ปัญหา

หน่วยสวาทอ่านฐานข้อมูลลายเซ็นและใช้เพื่อค้นหาฐานข้อมูลที่มีปัญหา
ส่วนโค้ดในซอร์สโค้ดใน Java, JSP, ASP .Net และ PHP ฐานมีอย่างต่อเนื่อง
กำลังเติบโตและนอกเหนือจากรายการฟังก์ชัน "อันตราย" แล้ว ยังรวมถึงข้อผิดพลาดทั่วไปด้วย
ใช้การจัดรูปแบบสตริงและการเขียนคำสั่ง SQL เป็นที่น่าสังเกตว่า
ว่าโปรแกรมเขียนด้วยภาษา C# แต่ทำงานได้ดีภายใต้ niks ขอบคุณ
สู่โครงการ Mono - การใช้งานแพลตฟอร์ม .Net แบบเปิด

เครื่องสแกนข้อผิดพลาด PHP

เว็บไซต์:
raz0r.name/releases/php-bug-scanner
ใบอนุญาต: ฟรีแวร์
แพลตฟอร์ม: วินโดวส์
ภาษา: PHP

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

  • การรันโค้ด
  • การดำเนินการตามคำสั่ง
  • การข้ามผ่านไดเรกทอรี
  • globals เขียนทับ;
  • รวม;
  • การฉีด SQL;
  • เบ็ดเตล็ด.

ตลกดีที่เขียนโปรแกรมไว้
PHP/WinBinder และเรียบเรียง
bamcompile ดังนั้นจึงดูเหมือนแอปพลิเคชัน Windows ทั่วไป ผ่าน
อินเทอร์เฟซที่สะดวก Pentester สามารถเปิดหรือปิดการวิเคราะห์โค้ดเมื่อมี
ช่องโหว่บางอย่าง

พิกซี่

เว็บไซต์:
pixybox.seclab.tuwien.ac.at
ใบอนุญาต: ฟรีแวร์
แพลตฟอร์ม: ยูนิกซ์, วินโดวส์
ภาษา: PHP

เครื่องมือนี้ใช้การสแกนซอร์สโค้ดและการสร้างกราฟ
กระแสข้อมูล กราฟนี้จะติดตามเส้นทางของข้อมูลที่มาถึง
จากภายนอกโปรแกรม - จากผู้ใช้ จากฐานข้อมูล จากภายนอกบางส่วน
ปลั๊กอิน ฯลฯ ด้วยวิธีนี้ รายการจุดอ่อน (หรือทางเข้า) ไปยัง
การใช้งาน Pixy ตรวจสอบช่องโหว่ดังกล่าวโดยใช้รูปแบบที่อธิบายช่องโหว่
คะแนนและช่วยให้คุณระบุช่องโหว่ XSS และ SQL อีกทั้งกราฟนั้นเองซึ่ง
สร้างขึ้นระหว่างการวิเคราะห์ สามารถดูได้ในโฟลเดอร์กราฟ (เช่น
xss_file.php_1_dep.dot) - สิ่งนี้มีประโยชน์มากในการทำความเข้าใจว่าทำไม
ส่วนของรหัสนี้หรือส่วนนั้นถือว่า Pixy มีช่องโหว่ โดยทั่วไปแล้วการพัฒนานั้นเอง
ให้ความรู้อย่างมากและสาธิตวิธีการทำงานของระบบสาธารณูปโภคขั้นสูง
การวิเคราะห์โค้ดแบบคงที่ บนหน้า

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

ออนซ์ 6

เว็บไซต์: www.ouncelabs.com/products
ใบอนุญาต: แชร์แวร์
แพลตฟอร์ม: วินโดวส์

อนิจจา โซลูชันฟรีที่มีอยู่ยังคงต่ำกว่าโซลูชันเชิงพาณิชย์
อะนาล็อก ก็เพียงพอที่จะศึกษาคุณภาพและรายละเอียดของรายงานซึ่งก็คือ
ออนซ์ 6
– และเข้าใจว่าทำไม โปรแกรมจะขึ้นอยู่กับพิเศษ
กลไกการวิเคราะห์ Ounce Core ซึ่งจะตรวจสอบโค้ดว่าสอดคล้องกับกฎหรือไม่
และนโยบายที่รวบรวมโดยทีมงานนักทดสอบมืออาชีพ
ซึ่งสั่งสมประสบการณ์จากบริษัทรักษาความปลอดภัยชื่อดัง ชุมชนแฮกเกอร์ มาโดยตลอด
มาตรฐานความปลอดภัย โปรแกรมตรวจพบช่องโหว่ต่างๆ ในโค้ด: จาก
บัฟเฟอร์ล้นก่อนที่จะฉีด SQL หากต้องการ Ounce สามารถรวมเข้าด้วยกันได้อย่างง่ายดาย
IDE ยอดนิยมเพื่อใช้การตรวจสอบโค้ดอัตโนมัติระหว่างการสร้าง
แต่ละแอปพลิเคชันใหม่ที่กำลังได้รับการพัฒนา อนึ่ง,
บริษัทพัฒนาอย่าง Ounce Labs ถูก IBM เข้าซื้อกิจการในช่วงซัมเมอร์นี้ ดังนั้น
ที่ผลิตภัณฑ์ส่วนใหญ่มีแนวโน้มที่จะพัฒนาต่อไปเป็นส่วนหนึ่งของหนึ่งในนั้น
แอพพลิเคชันเชิงพาณิชย์ของไอบีเอ็ม

Klocwork Insight

เว็บไซต์: www.klocwork.com
ใบอนุญาต: แชร์แวร์
แพลตฟอร์ม: วินโดวส์
ภาษา: C++, Java, C#

เป็นเวลานานแล้วที่ผลิตภัณฑ์เชิงพาณิชย์นี้มีการใช้งานแบบคงที่อีกครั้ง
การสแกนโค้ดสำหรับ C, C+ และ Java เท่านั้น แต่ทันทีที่ Visual Studio ออกมา
ในปี 2008 และ .NET Framework 3.5 นักพัฒนาได้ประกาศรองรับ C# ฉันขับรถออกไป
โปรแกรมในโครงการเสริมสองโครงการซึ่งเขาเขียนอย่างเร่งรีบ
บน Sharpe และโปรแกรมระบุช่องโหว่ร้ายแรง 7 รายการ เป็นเรื่องดีที่พวกเขา
เขียนขึ้นเพื่อใช้ภายในเท่านั้น :) Klocwork Insight
ในตอนแรกได้รับการกำหนดค่าให้ทำงานร่วมกับสภาพแวดล้อมแบบรวมเป็นหลัก
การพัฒนา. การบูรณาการกับ Visual Studio หรือ Eclipse เดียวกันนั้นดีมาก
ประสบความสำเร็จ - คุณเริ่มคิดอย่างจริงจังว่าควรมีฟังก์ชันดังกล่าวอยู่
ใช้งานโดยค่าเริ่มต้น :) ถ้าคุณไม่คำนึงถึงปัญหาทางตรรกะ
ประสิทธิภาพของแอพพลิเคชันและปัญหาด้านประสิทธิภาพแล้ว Klocwork Insight
ทำหน้าที่ได้อย่างยอดเยี่ยมในการค้นหาบัฟเฟอร์ล้นและการกรองที่ขาดหายไป
รหัสที่กำหนดเอง ความสามารถในการแทรก SQL/Path/Cross-site อ่อนแอ
การเข้ารหัส ฯลฯ อีกทางเลือกหนึ่งที่น่าสนใจคือการสร้างแผนผังการดำเนินการ
แอปพลิเคชันที่ช่วยให้คุณเข้าใจหลักการทั่วไปของแอปพลิเคชันได้อย่างรวดเร็วและ
แยกการตรวจสอบ เช่น การประมวลผลของผู้ใช้ใดๆ
ป้อนข้อมูล. และสำหรับการสร้างกฎสำหรับการตรวจสอบโค้ดอย่างรวดเร็วก็ยังเสนออีกด้วย
เครื่องมือพิเศษ - สตูดิโอตรวจสอบ Klocwork.

ความครอบคลุมป้องกันการวิเคราะห์แบบคงที่

เว็บไซต์: www.coverity.com/products
ใบอนุญาต: แชร์แวร์
แพลตฟอร์ม: วินโดวส์
ภาษา: C++, Java, C#

หนึ่งในเครื่องมือวิเคราะห์โค้ดแบบคงที่ที่มีชื่อเสียงที่สุดใน C/C++, Java และ C#
ตามที่ผู้สร้างระบุว่ามีผู้ใช้โซลูชันนี้มากกว่า 100,000 ราย
นักพัฒนาทั่วโลก กลไกที่คิดมาอย่างดีทำให้คุณสามารถทำงานอัตโนมัติได้
ค้นหาหน่วยความจำรั่ว ข้อยกเว้นที่ไม่ถูกตรวจจับ ปัญหาด้านประสิทธิภาพ และ
แน่นอนว่ามีช่องโหว่ด้านความปลอดภัย ผลิตภัณฑ์รองรับแพลตฟอร์มที่แตกต่างกัน
คอมไพเลอร์ (gcc, Microsoft Visual C++ และอื่นๆ อีกมากมาย) และยังรวมเข้ากับด้วย
สภาพแวดล้อมการพัฒนาที่หลากหลาย โดยเฉพาะ Eclipse และ Visual Studio ที่แกนกลาง
การข้ามผ่านโค้ดไม่ได้ใช้อัลกอริธึมการข้ามผ่านที่โง่เขลาตั้งแต่ต้นจนจบ แต่มีบางอย่าง
เหมือนดีบักเกอร์ที่วิเคราะห์ว่าโปรแกรมจะมีพฤติกรรมต่างกันอย่างไร
สถานการณ์หลังการประชุมสาขา ด้วยวิธีนี้ทำให้สามารถครอบคลุมโค้ดได้ 100%
เหนือสิ่งอื่นใด จำเป็นต้องใช้แนวทางที่ซับซ้อนดังกล่าวเพื่อวิเคราะห์อย่างเต็มที่
แอพพลิเคชั่นแบบมัลติเธรดที่ได้รับการปรับแต่งเป็นพิเศษเพื่อทำงานบนมัลติคอร์
โปรเซสเซอร์ ศูนย์ความซื่อสัตย์ Coverityช่วยให้คุณค้นหาข้อผิดพลาดดังกล่าวได้
ตามสภาพการแข่งขัน (ข้อผิดพลาดในการออกแบบในระบบมัลติทาสกิ้งซึ่ง
การทำงานของระบบขึ้นอยู่กับลำดับส่วนของโค้ดที่ถูกดำเนินการ) การหยุดชะงัก
และอีกมากมาย เหตุใดผู้กลับรายการจึงต้องการสิ่งนี้ ถามนักพัฒนา 0day เกี่ยวกับเรื่องนี้
หาประโยชน์สำหรับ Firefox และ IE :)

โปรแกรมรวบรวมข้อมูลโค้ด OWASP

เว็บไซต์: www.owasp.org
ใบอนุญาต: GNU GPL
แพลตฟอร์ม: วินโดวส์
ภาษา: Java, C#, VB

ผู้สร้างเครื่องมือนี้ Alessio Marziali เป็นผู้เขียนหนังสือสองเล่มบน ASP.NET
โปรแกรมสร้างโค้ดที่มีชื่อเสียงสำหรับแอปพลิเคชันที่มีภาระงานสูงสำหรับภาคการเงินเช่นกัน
เพนเทสเตอร์ ในปี 2550 เขาได้เผยแพร่ข้อมูลเกี่ยวกับช่องโหว่ที่สำคัญใน 27
เว็บไซต์ของรัฐบาลอิตาลี ผลิตผลของเขา - โปรแกรมรวบรวมข้อมูลโค้ด OWASP
ออกแบบมาเพื่อการวิเคราะห์แบบคงที่ของโค้ด .NET และ J2EE/JAVA ซึ่งเปิดให้ใช้งานได้อย่างเปิดเผย
บนอินเทอร์เน็ตและในช่วงปลายปีผู้เขียนสัญญาว่าจะออกโปรแกรมเวอร์ชันใหม่ด้วย
มีฟังก์ชั่นการใช้งานมากขึ้น แต่สิ่งที่สำคัญที่สุดได้ดำเนินการไปแล้ว -
การวิเคราะห์ซอร์สโค้ดใน C#, Visual Basic และ Java ไฟล์ที่จะสแกนถูกเลือก
ผ่านอินเทอร์เฟซ GUI และการสแกนจะเริ่มขึ้นโดยอัตโนมัติ แต่ละ
ส่วนปัญหาของโค้ด คำอธิบายช่องโหว่จะแสดงในส่วนภัยคุกคาม
คำอธิบาย. จริงอยู่สนาม แนวทาง OWASPคงจะชี้ทางแล้ว.
ขออภัย ยังไม่มีวิธีแก้ไขปัญหา แต่คุณสามารถใช้
คุณลักษณะทดลองของการสแกนโค้ดบนเครื่องระยะไกล สามารถเข้าถึงได้
ในแท็บการสแกนระยะไกล ผู้เขียนสัญญาว่าจะอัปเกรดฟีเจอร์นี้อย่างจริงจังและใน
รวมถึงการรวบรวมแหล่งแอปพลิเคชันเพื่อการวิเคราะห์โดยตรงจากระบบ
การควบคุมเวอร์ชัน

คำเตือน

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