กูเกิลรายงานถึงความเปลี่ยนแปลงภาพรวมของช่องโหว่ความปลอดภัยในแอนดรอยด์โดยเฉพาะช่องโหว่หน่วยความจำที่เป็นกลุ่มใหญ่ เดิมเคยมีรายงานช่องโหว่รวมถึง 75% ของช่องโหว่ทั้งหมด แต่นับจาก Android 11 เป็นต้นมาแอนดรอยด์ก็เริ่มมีโค้ดภาษา Rust เข้ามามากขึ้นเรื่อยๆ จนโค้ดในกลุ่มเนทีฟที่เป็นภาษา Rust ที่เพิ่งเพิ่มเข้ามาใน Android 13 นั้นสูงถึง 21% ใกล้เคียงกับภาษา C แล้ว รวมเฉพาะโครงการ AOSP มีโค้ด Rust ทั้งหมด 1.5 ล้านบรรทัด และจนตอนนี้ก็ยังไม่มีช่องโหว่หน่วยความจำในโค้ดภาษา Rust เลย
โค้ดภาษา Rust ในแอนดรอยด์มากขึ้นเรื่อยๆ พร้อมๆ กับช่องโหว่หน่วยความจำในแอนดรอยด์ก็ลดลงต่อเนื่องเช่นเดียวกัน ในปี 2022 นี้จะเป็นปีแรกที่ช่องโหว่หน่วยความจำของแอนดรอยด์ลดลงเหลือไม่ถึงครึ่งหนึ่งของช่องโหว่ทั้งหมด
กูเกิลคาดว่าเมื่อใช้งานไป สุดท้ายก็น่าจะพบช่องโหว่หน่วยความจำในโค้ดส่วนที่เขียนด้วย Rust ในที่สุด แต่กระนั้นภาษา Rust ก็แสดงให้เห็นว่ามันสามารถลดช่องโหว่ต่อบรรทัดของโค้ดได้อย่างมีประสิทธิภาพ แม้ว่า Rust จะรองรับการเขียนโปรแกรมแบบ unsafe ที่ไม่ป้องกันหน่วยความจำแต่ก็มีการใช้งานน้อย และยังไม่ได้สร้างช่องโหว่
นอกจากช่องโหว่หน่วยความจำแล้ว ความร้ายแรงของช่องโหว่แอนดรอยด์ก็ยังมีแนวโน้มลดลง ช่องโหว่ร้ายแรงระดับวิกฤติลดลงเหลือต่ำกว่า 20% ขณะที่ช่องโหว่ที่เปิดให้คนร้ายโจมตีจากระยะไกลก็เหลือต่ำกว่า 40%
ที่มา - Google Security Blog
Comments
ใครๆก็ชอบ Rust
ช่วงที่ผมเป็นนักเรียนที่ต้องเขียนภาษาไทยบ่อยๆ
เขียนไปสัก 1.5 ล้านบรรทัด ผมก็เขียนสวยขึ้น เขียนผิดน้อยลงเหมือนกัน
แบบนี้แสดงว่าภาษาไทยช่วยลดข้อผิดพลาดในการเขียนด้วยหรือไม่?
น่าจะผิดประเด็นนะครับ
Rust มันถูกออกแบบมาโดยเน้นเรื่อง momory safty อยู่แล้ว แต่พวกที่ไม่ชอบ rust จะบอกว่าเพราะยังไม่ได้ถูกใช้ในโปรเจคใหญ่มากๆ เลยไม่มีปัญหา
ในข่าวคือเขียนมาแล้ว 1.5 ล้านบรรทัดก็ยังไม่เจอปัญหา
ถ้าเยอะกว่านี้อาจจะเจอ
ไม่ใช่ว่าเขียนไปแล้ว 1.5 ล้านบรรทัดแล้วเก่งขึ้นจนไม่มีปัญหา..
ผมไม่ได้สนใจตรง ใครชอบไม่ชอบครับ และย่อหน้าที่ 3 เขาบอกใช้ Rust แล้วช่องโหว่ลดผมก็เชื่อ
แต่ผมคิดว่ามันมี factor อื่นๆ อีก
อย่างความรู้, ความเชี่ยวชาญของคนเขียนที่เกิดจากการฝึกฝนรวมอยู่ด้วย
ซึ่งอาจจะมีผลมากกว่าการใช้ Rust ครับ
ผมอาจประหลาดนึดนึงที่มองว่า Segmentation fault มันเป็น feature ของภาษา program
การที่ภาษา Segmentation fault ง่ายๆ หมายถึงเราจะเขียน program ยังไงก็ได้ ไม่ถูกจำกัดโดยภาษาน่ะครับ
คนที่เค้าสร้าง rust เค้าก็เชี่ยวชาญ c หรือ c++ นะ
ถ้าแค่เชี่ยวชาญอย่างเดียว โดยไม่มี feature ของภาษาเข้ามาช่วยแล้วมันป้องกันปัญหาได้ทั้งหมด
เค้าคงไม่น่าจะสร้าง rust ขึ้นมานะ...
เหมือนบอกว่าถ้า เขียน js เชี่ยวชาญ ts ก็ไม่สำคัญ ในการป้องกันปัญหาตอน runtime หลายๆเรื่อง
ถ้าคนเขียน ts แล้วบั๊ก type mismatch น้อยกว่า
ทาง js นี่เพราะคนชำนาญ ts หรือเพราะฟีเจอร์ของ ts ละครับ
สิ่งที่ผมคิดคือ คนที่ทำให้ program มี bug หรือช่องโหว่ก็คือคนเขียนครับ ไม่ใช่ภาษา
ทำให้ผมคิดว่าถ้าเรามีความรู้ ความเชี่ยวชาญ เรื่องที่มัน fundamental (heap/stack, I/O, data structure, thread, programming pattern, ...) แล้ว ไม่ว่าจะให้ใช้ภาษาอะไรมันเราก็จะสามารถเขียนได้ดีขึ้นน่ะครับ
และที่ผมอยากจะสื่อทีแรกเลยคือ statistic ในข่าวมัน misleading
ประมาณว่ามี Stat การที่ผมกินยากลดความอ้วนใน 3 เดือน แล้วสรุปกว่า ผมน้ำหนักลดเพราะยาลดความอ้วน
แต่มีความจริงที่ไม่อยู่ใน Stat อีกคือผมลดการกินอาหารด้วย
ความรู้ ความเชี่ยวชาญ ทำให้เขียนโปรแกรมได้ดีขึ้นก็จริงครับ แต่ผมไม่เชื่อว่ามนุษย์เราจะไม่ทำผิดพลาดเลย ไม่ว่าจะเก่งขนาดไหนก็ตาม
ซึ่ง Rust มาช่วยกันพวกความผิดพลาด มาคอนเตือนเรื่องพวกเหล่านั้นให้ครับ ผมว่ามันมีผลอยู่นะมันมาช่วยเพิ่มความมั่นใจในโค้ดเรา
ก็เหมือนกับ js และ ts แหละครับ ไม่จำเป็นต้องเขียน ts ก็ได้ มีความรู้และชำนาญใช้ js อย่างเดียวได้เลยสะดวกและอิสระกว่าด้วย แต่จะมั่นใจแค่ไหนว่าจะไม่ทำอะไรผิดพลาดเลย ซึ่ง ts ก็มาช่วยกันช่วยเตือนให้
บล็อก: nitpum.com
ถ้าเทียบการเขียนโปรแกรมบน C,C++
มันเหมือนเดินบนทางแคบๆบนยอดผา ถ้าก้าวพลาดคือหล่น
เดินเยอะๆ มันก็มีโอกาสหล่นน้อยลงจากความชำนาญ
แต่ชำนาญยังไงก็มีเผลอมีหลุดได้
แต่ใช้ Rust มันเหมือนมีราวจับ+กั้นให้ด้วย
มือใหม่ไม่ต้องใช้ความชำนาญมาก
มือเก่าที่ชำนาญก็จะไม่พลาดเพราะเผลอ
นี่คือผลของความแตกต่างของภาษาครับ
ผมว่าคุณจับประเด็นผิดนะ เค้าไม่ได้ว่าไม่มี bug เค้าอ้างว่าไม่มีช่องโหว่หน่วยความจำเลย
ซึ่งถ้าเขียนภาษา C ส่ง pointer พลาดทีก็เจอ Segmentation Fault Core Dumped กันละ แต่ถ้ามาเป็น Rust (ผมก็ไม่เคยแตะภาษานี้แหละครับ) ตอน compile ก็คงมีที้งช่วยเตือน หรือ error เลย ทำให้หาจุดที่น่าจะเป็นปัญหาได้ง่ายและไม่หลุด
ส่วนเรื่องเขียนมี bug (ที่ไม่เกี่ยวกับหน่วยความจำ) มีไหม ก็น่าจะมีได้ เค้าไม่ได้พูดถึง
ถ้าอยากจะเทียบ ผมก็หาเรื่องเปรียบเทียบได้ครับ ตอนผมเรียนขับรถด้วยเกียร์กระปุก รถดับประจำตอนเปลี่ยนเกียร์ 1 มา 2 พอผมมาขับเกียร์ auto ก็ไม่มีปัญหาเรื่องรถดับตอนเปลี่ยนเกียร์เลยครับ
สิ่งที่ผมจะสื่อมันไม่ใช่ประเด็นหลักในข่าวน่ะครับ
ลองอ่าน reply ของคุณ lew ดูดีๆ อันนี้เข้าใจถูก 105% (reply เหมือนรู้ว่าผม bias ไปนิดๆ)
ผมให้คะแนนเต็มวิชา Information and communication ไปเลย
แต่ภาษามันทำให้ความผิดพลาดน้อยลงได้ครับ
"Segmentation fault มันเป็น feature ของภาษา"
ชอบประเด็นนี้ มีโปรเจคเริ่มต้นใหม่ที่ผมเลือกภาษาเองได้ ลังเลอยู่ระหว่าง Rust กับ C++ ที่จริงก็อยากใช้ Rust มากกว่า เพราะมองเรื่อง memory safety เหมือนกัน แต่พอมาดูเนื้องานแล้วพบว่า manual memory management เป็น feature ที่ทำให้ optimize โปรแกรมได้ง่ายขึ้น ถามว่า Rust ทำได้ไหม ก็ได้แหละ แต่ชีวิตจะยากขึ้น และสุดท้าย memory safety ที่อยากได้ก็ไม่ได้
correlation != causation ถูกต้องครับ ตัวบทความต้นทางก็เขียนไว้ว่าต้องระวังเรื่องนี้ว่าอาจจะมีเหตุอื่นๆ แต่ระดับของความแตกต่างของปริมาณช่องโหว่ต่อบรรทัดมันก็สูงมาก
คนเขียนใน AOSP (และคนที่รีวิวโค้ด) โดยรวมประสบการณ์น่าจะไม่ต่างกันมากนัก เราอาจจะสงสัยได้อยู่ดีว่ามีเหตุอื่นๆ เช่น โปรแกรมเมอร์ที่มาเขียน Rust เป็นกลุ่มระวังต่อช่องโหว่หน่วยความจำอยู่ก่อนแล้ว (เลยเลือก Rust) พวกนี้ต้องการการศึกษาเพิ่มเติม
แต่พอมองเลขใหญ่แล้วมันไม่มีช่องโหว่หน่วยความจำในโค้ดขนาดใหญ่เลย เราน่าจะพออนุมานได้ว่ามีผลอย่างน้อยก็บางส่วน
lewcpe.com, @wasonliw