ดาวน์โหลดโปรแกรมฟรี
Facebook  Twitter  YouTube  News Letter  Rss Feed
ติดตามไทยแวร์ได้ที่นี่
  
ข่าวไอที
 
ส่งข่าวไอทีเข้าไทยแวร์ดอทคอม (Submit News to Thaiware.com)
 

Recommended for you

Memory unsafety ช่องโหว่อันตรายในภาษา C/C++ ที่ถูกเมิน

เมื่อ :
ผู้เข้าชม : 1,971
เขียนโดย :
Memory unsafety ช่องโหว่อันตรายในภาษา C/C++ ที่ถูกเมิน
0 Memory+unsafety+%E0%B8%8A%E0%B9%88%E0%B8%AD%E0%B8%87%E0%B9%82%E0%B8%AB%E0%B8%A7%E0%B9%88%E0%B8%AD%E0%B8%B1%E0%B8%99%E0%B8%95%E0%B8%A3%E0%B8%B2%E0%B8%A2%E0%B9%83%E0%B8%99%E0%B8%A0%E0%B8%B2%E0%B8%A9%E0%B8%B2+C%2FC%2B%2B+%E0%B8%97%E0%B8%B5%E0%B9%88%E0%B8%96%E0%B8%B9%E0%B8%81%E0%B9%80%E0%B8%A1%E0%B8%B4%E0%B8%99
A- A+

ในโลกของโปรแกรม ไม่ว่านักพัฒนาจะพยายามเขียนให้รอบคอบขนาดไหน แต่ก็ยากที่จะหลีกเลี่ยงสิ่งที่เรียกว่า "ช่องโหว่" ได้ มันมีช่องโหว่ตัวหนึ่งที่ส่งผลกระทบต่อ iPhone, Windows และเซิร์ฟเวอร์ที่ใช้ Linux ได้ หากมองเพียงผิวเผินเราอาจะรู้สึกว่าระบบปฏิบัติการทั้งสามชนิดนี้ไม่น่าจะเกี่ยวข้องกันได้ แต่ในความเป็นจริงแล้ว มันถูกเชื่อมโยงกันด้วยช่องโหว่ที่อยู่ในภาษาที่ใช้พัฒนาโปรแกรม โดยช่องโหว่นั้นมีชื่อเรียกว่า "Memory unsafety"

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

Memory unsafety ช่องโหว่อันตรายในภาษา C/C++ ที่ถูกเมิน    Memory unsafety ช่องโหว่อันตรายในภาษา C/C++ ที่ถูกเมิน

ลองจินตนาการว่าในโปรแกรมมีรายการอยู่ทั้งหมด 10 รายการ อะไรจะเกิดขึ้นหากเราถามโปรแกรมว่า "รายการที่ 11 คืออะไร?" คนส่วนใหญ่มักจะตอบว่า มันก็ต้องเกิดความผิดพลาด (Error) สิ ซึ่งหากเป็นโปรแกรมที่มีระบบ Memory safe อย่างเช่น Python หรือ Java มันก็คงจะเป็นอย่างที่เราคิด แต่ในโปรแกรมที่ไม่มี ระบบ Memory safe มันจะไม่เป็นเช่นนั้น มันจะตรวจสอบว่า มีอะไรอยู่ในรายการที่ 11 (หากว่ามันมีอยู่) และพยายามที่จะเข้าถึงข้อมูลนั้น บางครั้งมันก็ทำให้โปรแกรมปิดตัว แต่ในหลายๆ ครั้ง เราจะได้สิ่งที่อยู่ในหน่วยความจำมาแทน แม้ว่าข้อมูลในหน่วยความจำดังกล่าวจะไม่ได้มีความเกี่ยวข้องอะไรกับรายการที่มีอยู่เลยสักนิดเดียว เราเรียกเหตุการณ์ลักษณะนี้ว่า "Buffer-overflow"

Memory unsafety ช่องโหว่อันตรายในภาษา C/C++ ที่ถูกเมิน

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

ส่งผลให้ระบบล่ม หรือสร้าง "ทางเข้า" ให้แฮกเกอร์เข้ามาได้  ซึ่งภาษา C และ C++ เป็นภาษาที่ง่ายต่อการถูกโจมตีด้วยวิธีนี้

ช่องโหว่ชื่อดังอย่าง HeartBleed และ WannaCry ที่ระบาดไปทั่วโลก อย่าง HeartBleed ที่สร้างความเสียหายต่อระบบความปลอดภัยของเว็บเซิร์ฟเวอร์ในโลกอินเทอร์เน็ตไปกว่า 17% ก็อาศัยช่องโหว่ Buffer Overflow นี่แหละในการโจมตี

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

Alex Gaynor (ผู้เชี่ยวชาญด้านซอฟต์แวร์รักษาความปลอดภัยแห่งบริษัท Mozilla ที่ปัจจุบันทำหน้าที่ดูแลระบบ Sandbox และ Anti-exploitation ให้กับ Firefox โดยก่อนหน้านี้เขาเคยทำงานที่ United States Digital Service และเคยเป็นสมาชิกคณะกรรมการของมูลนิธิซอฟต์แวร์ทั้ง Python และ Django) ได้ศึกษาเรื่องระบบรักษาความปลอดภัยในซอฟต์แวร์ต่างๆ มานานกว่า 1 ปี โดยได้เผยแพร่ข้อมูลการพบช่องโหว่ผ่านทวิตเตอร์ Fish in a Barrel (@LazyFishBarrel) ได้เปิดเผยว่าในบรรดาช่องโหว่ทั้งหมดที่ค้นพบ มีจำนวนมากกว่าครึ่งที่เกิดจาก Memory unsafety และเรื่องที่ทำให้เกิดความกังวลมากที่สุด คือ ช่องโหว่ร้ายแรง (ช่องโหว่ที่แฮกเกอร์สามารถใช้ในการติดตั้งโค๊ดอันตรายลงในคอมพิวเตอร์ได้ผ่านอินเทอร์เน็ต) เกือบทั้งหมดเกิดจาก Memory unsafety โดยในปีที่ผ่านมาเขาได้ค้นพบช่องโหว่ประเภทนี้มากกว่า 400 รูรั่วเลยทีเดียว

อ้าว ในเมื่อรู้ว่าภาษา C และ C++ มีปัญหา Memory unsafety ทำไมมันยังนิยมใช้กันอยู่ล่ะ?

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

อย่างแรกเลย ในขณะที่ตอนนี้เรามีภาษาอื่นที่มีระบบป้องกัน Memory unsafety ให้เลือกใช้แล้วก็จริง แต่ภาษา C และ C++ นั้นมีรากฐานการใช้งานมานานหลายสิบปี และได้รับความนิยมเป็นอย่างมาก ในขณะที่ภาษาที่มีระบบ Memory-safe อย่างเช่นภาษา Rush และ Swift นั้นเพิ่งจะถูกใช้แค่ในการพัฒนาซอฟต์แวร์ระดับ Low-level อย่างพวกเว็บเบราว์เซอร์ หรือตัวระบบปฏิบัติการเท่านั้น กล่าวได้ว่ามันเป็นภาษาที่เพิ่งจะเริ่มได้รับความนิยมนั่นเอง

Memory unsafety ช่องโหว่อันตรายในภาษา C/C++ ที่ถูกเมิน

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

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

ข้อสุดท้าย ปัญหาที่หนักที่สุด คือ นักพัฒนาส่วนใหญ่ไม่เชื่อว่ามันจะมีปัญหาเกิดขึ้น นักพัฒนาจำนวนมากเชื่อว่า ปัญหาไม่ได้อยู่ที่การใช้ภาษา C/C++ แต่เกิดจากนักพัฒนาเขียนโค๊ดไม่ดีเองต่างหาก อ้างอิงจากหลักการนี้ กล่าวคือ ปัญหาไม่ได้อยู่ที่การเรียกข้อมูลที่ 11 ออกจากฐานข้อมูลที่มีอยู่ 10 รายการ แต่เกิดจากคุณเขียนโค๊ดให้เรียกข้อมูลลำดับที่ 11 ก่อนเป็นอันดับแรกต่างหาก พูดแบบหยาบๆ คือ พวกเขาเชื่อว่า ภาษาอ่ะไม่มีปัญหาหรอก แต่คุณน่ะกากเองต่างหาก ถึงทำให้เกิดปัญหา

Memory unsafety ช่องโหว่อันตรายในภาษา C/C++ ที่ถูกเมิน

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

อย่างไรก็ตาม ก็ยังมีข่าวดีอยู่บ้าง ไม่ใช่นักพัฒนาทุกคนที่ละเลยต่อปัญหาดังกล่าว Rust เป็นภาษาใหม่ที่ที่ถูกพัฒนาขึ้นมาให้ผู้ที่ใช้ภาษา C และ C++ สามารถเรียนรู้ได้อย่างรวดเร็ว แถมยังเป็นภาษาที่แก้ไขปัญหา Memory unsafety เป็นที่เรียบร้อยแล้ว ซึ่งตอนนี้บริษัทที่หันมาใช้ Rush ในการพัฒนาแล้วก็อย่างเช่น Mozilla, Google, Dropbox และ Facebook เป็นต้น หรือ ภาษา Swift ของ Apple ก็เป็นภาษาที่ได้รับการแก้ไขช่องโหว่นี้ด้วยแล้วเช่นกัน

Memory unsafety ช่องโหว่อันตรายในภาษา C/C++ ที่ถูกเมิน


ที่มา : motherboard.vice.com , en.wikipedia.org , en.wikipedia.org , ilabs.eccouncil.org , en.wikipedia.org , twitter.com


0 Memory+unsafety+%E0%B8%8A%E0%B9%88%E0%B8%AD%E0%B8%87%E0%B9%82%E0%B8%AB%E0%B8%A7%E0%B9%88%E0%B8%AD%E0%B8%B1%E0%B8%99%E0%B8%95%E0%B8%A3%E0%B8%B2%E0%B8%A2%E0%B9%83%E0%B8%99%E0%B8%A0%E0%B8%B2%E0%B8%A9%E0%B8%B2+C%2FC%2B%2B+%E0%B8%97%E0%B8%B5%E0%B9%88%E0%B8%96%E0%B8%B9%E0%B8%81%E0%B9%80%E0%B8%A1%E0%B8%B4%E0%B8%99
แบ่งปันหน้าเว็บนี้ผ่าน URL :
Keyword คำสำคัญ »
เขียนโดย
ระดับผู้ใช้ : Admin    Thaiware
แอดมินสายเปื่อย ชอบลองอะไรใหม่ไปเรื่อยๆ รักแมว และเสียงเพลงเป็นพิเศษ
 
 
 
 

ข่าวไอทีที่เกี่ยวข้อง



 

Recommended for you

 

แสดงความคิดเห็น

 

แผนผังเว็บไซต์ (XML Sitemap)
Thaiware Communication Co.,Ltd.

Thaiware Communication Co.,Ltd.

Copyright 1999-2019 Thaiware.com All rights reserved.
E-Commerce Registration Number : 0108414736771
เลขประจำตัวผู้เสียภาษี / Tax ID : 010-554-707-3996