Contents

ทำเนียบขาวต้องการโปรแกรมที่ปลอดภัยสำหรับหน่วยความจำ แต่นั่นคืออะไร?

ลิงค์ด่วน

⭐ ทำเนียบขาวกำลังพูดอะไร?

⭐เหตุใดจึงสำคัญ?

⭐ ภาษาที่ไม่ปลอดภัยมีลักษณะอย่างไร

⭐ รหัส Memory-Safe มีลักษณะอย่างไร

⭐ ฉันควรเปลี่ยนภาษาหรือไม่

ประเด็นที่สำคัญ

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

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

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

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

ทำเนียบขาวพูดอะไร?

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

ONCD กล่าว:

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

ทำไมมันถึงสำคัญ?

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

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

อย่างไรก็ตาม มีแนวโน้มเพิ่มขึ้นในการใช้ภาษาการเขียนโปรแกรมที่ปลอดภัยต่อหน่วยความจำ เช่น Rust, Python และ JavaScript มีความเป็นไปได้สูงที่คณะกรรมการกำหนดมาตรฐานออบเจ็กต์ คลาส และข้อมูล (ONCD) ได้ประกาศเรื่องนี้ เนื่องจากมีภาษาที่ไม่ปลอดภัยอย่างแพร่หลาย เช่น ภาษา C ซึ่งฝังรากลึกอยู่ในโครงสร้างพื้นฐานทางเทคโนโลยีของเรา และมักใช้ในการใช้งานในชีวิตประจำวันจำนวนมาก

ภาษาที่ไม่ปลอดภัยมีลักษณะอย่างไร?

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

#include <stdio.h>

int main (void) {
    int arr[3] = { 0, 0, 0 };
    printf("%d\n", arr[3]);
    return 0;
}

สิ่งนี้แสดงให้เห็นถึงตัวอย่างที่เป็นตัวอย่างของข้อบกพร่องที่อาจส่งผลให้เกิด

/th/images/memory-safety-c-overflow.png

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

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

รหัส Memory-Safe มีลักษณะอย่างไร?

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

fn main() {
    let arr: [u32; 5] = [0;3];
    println!("{}", arr[3]);
} 

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

/th/images/memory-safety-rust-compile-error.png

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

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

ฉันควรเปลี่ยนภาษาหรือไม่

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

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