Cơ quan an ninh mạng Mỹ muốn các dev dừng lập trình bằng C và C++ vì lo ngại bảo mật

P.W
11/11/2024 10:7Phản hồi: 53
Cơ quan an ninh mạng Mỹ muốn các dev dừng lập trình bằng C và C++ vì lo ngại bảo mật
Thực tế thì CISA, Cục an ninh mạng và an ninh cơ sở hạ tầng thuộc chính phủ Mỹ, cùng Cục điều tra liên bang Mỹ FBI đã khuyến cáo mọi nhà phát triển ứng dụng và các lập trình viên từ bỏ những ngôn ngữ lập trình “không an toàn đối với bộ nhớ hệ thống điện toán” như C hay C++ từ lâu rồi.

Gần đây nhất, cả CISA lẫn FBI đều khuyến cáo các nhà phát triển phần mềm dừng việc “phát triển những sản phẩm mới để ứng dụng trong những cơ sở hạ tầng quan trọng hoặc những ngành nghề quan trọng đối với an ninh quốc gia, sử dụng những ngôn ngữ lập trình có lỗ hổng bộ nhớ như C hay C++, khi đã có những lựa chọn ngôn ngữ lập trình khác với khả năng truy xuất bộ nhớ an toàn hơn.” Theo hai cơ quan thuộc chính phủ Mỹ này, hiện giờ vẫn còn phát triển phần mềm bằng C và C++ sẽ làm tăng nguy cơ ảnh hưởng tới an ninh quốc gia, an ninh kinh tế và an toàn của người dân.

Hồi đầu năm nay, CISA cùng vài đối tác thuộc chính phủ các quốc gia đồng minh của Mỹ, bao gồm FBI, Trung tâm an ninh mạng thuộc chính phủ Úc, và trung tâm an ninh mạng thuộc chính phủ Canada đã công bố một bản báo cáo nghiên cứu có tên “Nghiên cứu an toàn bộ nhớ trong những dự án mã nguồn mở quan trọng.” Nghiên cứu này xem xét 172 dự án phần mềm mã nguồn mở đang được ứng dụng trong những ngành và cơ sở hạ tầng quan trọng của các quốc gia.

Kết quả nghiên cứu kể trên cho thấy, hơn một nửa số dự án phần mềm kể trên được viết bằng những ngôn ngữ lập trình có lỗ hổng trong việc truy xuất và ứng dụng bộ nhớ hệ thống. Trong tổng số những dòng code của 172 dự án ấy, 55% trong đó chứa lỗ hổng bảo mật.

Nói một cách cụ thể hơn thì, với những ngôn ngữ lập trình có lỗ hổng bộ nhớ, “chúng sẽ yêu cầu các lập trình viên phải quản lý bộ nhớ và vận hành chúng một cách hợp lý. Những vấn đề và lỗi chắc chắn sẽ xảy ra, tạo ra những lỗ hổng bảo mật bộ nhớ hệ thống, ví dụ như làm quá tải bộ nhớ đệm chẳng hạn. Lợi dụng thành công những lỗ hổng bảo mật như thế này có thể cho phép đối phương kiểm soát phần mềm, hệ thống và cả dữ liệu.”


CISA ước tính, trong số những lỗ hổng bảo mật hệ thống máy tính hay máy chủ, 70% trong số đó là những lỗ hổng bảo mật liên quan tới bộ nhớ hệ thống. Để giải quyết tình trạng này, cục an ninh mạng thuộc chính phủ Mỹ khuyến cáo các lập trình viên chuyển sang sử dụng những ngôn ngữ an toàn hơn với bộ nhớ như Rust, Java, C#, Go, Python và Swift. Những ngôn ngữ lập trình này đều tích hợp những công cụ bảo vệ chống lại những lỗi liên quan bộ nhớ phổ biến.

Vấn đề lại nằm ở chỗ, những phần mềm viết bằng C hay C++ không phải muốn là có thể búng tay biến chúng thành code Rust hay C# được. Lấy ví dụ Rust trên nền Linux. Ngay cả khi được Linus Torvalds hỗ trợ, tốc độ chuyển giao code lập trình trên nền Linux từ C++ sang Rust cũng đang vô cùng chậm chạp.

Nguyên nhân của tình trạng này đã được chính cha đẻ kernel HĐH Linux chia sẻ tại hội thảo Open Source Summit Europe 2024. Những lập trình viên còn ở lại với C và C++ có những quan điểm bảo vệ lựa chọn của họ cực đoan tới mức khiến chính những người muốn cải thiện độ phủ của code viết bằng Rust cũng phải từ bỏ những nỗ lực của họ.

Đồng ý một chuyện, vẫn có thể viết code C bảo mật bộ nhớ tốt. Nhưng không phải ai cũng có kinh nghiệm để làm việc đó. Và vấn đề thứ hai là chuyển đổi code từ C sang Rust hoàn toàn không phải chuyện nhỏ, kể cả về thời gian, tài nguyên và kinh phí. Những ngôn ngữ lập trình lâu đời, bị coi là khó sử dụng vẫn cứ được tin tưởng vì nhờ chúng, các lập trình viên có thể viết ra được những ứng dụng và phần mềm tối ưu tốt cho phần cứng hệ thống máy tính.

Và nếu phải lựa chọn giữa bảo mật và hiệu năng, hầu hết thời gian, các doanh nghiệp và lập trình viên sẽ chọn hiệu năng của phần mềm. Bên cạnh chi phí chuyển đổi ngôn ngữ lập trình, các đơn vị phát triển ứng dụng và phần mềm cũng phải đối mặt với những chi phí khác như thay đổi công cụ phát triển, công cụ sửa lỗi, và framework chạy thử phần mềm để hỗ trợ những ngôn ngữ lập trình mới. Rồi lại đến công đoạn ghép những ứng dụng được viết bằng ngôn ngữ lập trình mới với code và thư viện cũ.

Tuy nhiên, CISA vẫn mong muốn điều đó diễn ra, và cơ quan chính phủ Mỹ này đã đặt ra mục tiêu trước ngày 1/1/2026, tất cả các doanh nghiệp phần mềm đang làm việc để phục vụ các hệ thống quan trọng đối với an ninh hay cơ sở hạ tầng quan trọng của Mỹ phải có kế hoạch chuyển đổi ngôn ngữ lập trình phần mềm của họ. Theo CISA, lợi ích về lâu dài của quá trình chuyển đổi là đủ lớn để khỏa lấp những vấn đề liên quan tới chi phí và công sức.

Theo The Register
53 bình luận
Chia sẻ

Xu hướng

má nó nằm deep trong từng cái core của ngân hàng doanh nghiệp chứ éo phải 3 cái app mobile ti tí đâu mà đòi chuyển là chuyển =))))))

đm riêng cái ActiveX với IE6 tụi doanh nghiệp mất cả 8 kiếp mới thay đổi được

trong kinh doanh time là tiền, đm mỗi lần downtime là tiền bay khỏi cửa sổ đó. chưa kể thay đổi xong còn test debug chết cđm mới ra vấn đề. mỗi lần bug ai đền tiền cho doanh nghiệp ? FBI hả ? helpdesk cong đít lên mà chạy chết cđm cũng chưa chắc mò ra bug nằm ở khúc éo nào ...

đòi đổi ngôn ngữ lập trình cũng khác đéo kêu gọi từ bỏ xài Windows với MS Office

éo phải tự dưng trong doanh nghiệp chúng nó bảo 'cái gì đang chạy tốt đừng có đụng vào'
2024 rồi mà còn lo C hay C++ rò rỉ bộ nhớ (leak mem).
@vung__ mình đánh giá concept hay module, ko nhất thiết phải có, cơ bản bác thể xài chuẩn cũ vẫn ok, còn những thứ khác đáng để thêm nhưng vẫn ko thêm như liên quan đến OS API như networking 😆))

bọn WG21 muốn đấm bọn nó vài phát vì cái cần thì ko có, cái ko cần thì có =)))

còn bọn WG14 làm C nó chủ trương là đơn giản hóa syntax nên ko có nhiều thứ mới, mỗi năm check với bọn WG21 để share feature nào cần thôi bác
@magez thì tui nói cơ bản ông phải check cho kỹ vào, chứ cái quan trọng check qua loa thì bọn hacker nó đấm ko trượt phát nào đâu

managed code như java, c# thì toàn phải dựa vào thg GC, nó thông minh thì sướng, bị "ngoo" thì khổ

bữa cty mới ép làm cái quality code checking đây :| phải ngồi check mấy round, unit test các kiểu

còn cty tui lớn có 1 đội check lib trước khi xài, với lại review code mấy lần, nên thành ra cũng ko lo lắm
@GLES Túm lại tui thấy một khi còn cào phím kiếm cơm thì phải lưu ý về Memory Management. C/Java/Go hay gì cũng vậy memory allocation là chuyện của OS, programing language ko có khả năng đó. Nó có thể abstract (Malloc -> *_ptr -> GC) nhưng bottom line thì vẫn là sbrk() system call. Để hạn chế system call thì phải cache hoặc pool... Mà cache/pool thì phải sanitizing, profiling, consistency guaranty... thì cũng phải quay lại việc ý thức rõ mình đang làm gì. Những tình huống Resouce Constraint nói thiệt memory leak 1 phần nhỏ thôi, memory alignment / fragmentation...tùm lum thứ khác VD như mình từng làm game mobile spawn 10k physic object làm sao maintain dc 60fps thì phải pooling ntn cho khéo chứ ko qtam leak. Còn đối với mấy thánh làm Mysql/Postgres thì nó phải chọn cái Malloc nào mà hạn chế nhất cái fragmentation hơn nữa không bị deadlock khi mấy cái multithred/concurrency nó tham gia vào. Quay lại với chủ đề bài viết thì: "chúng tui biết, nhưng cty bắt chạy nhanh hơn thằng kia mà resource ít hơn nó nên chúng tui ko còn lựa chọn" =]]
@vung__ vụ game physics thì phải đánh đổi thôi bác:

hoặc collision gần đúng nhưng có sai bù lại chạy nhanh (trường hợp của mấy cái physics engine game như bullet)

hoặc collision đúng nhưng tính rất chậm (mấy cái physics engine trong khoa học)
@Tú Bán Sách thấy nói bạn cậu cũng là IT cốt đơ, @lehuuthe1202 có code C hay C++ gì không bạn?
Thời đại AI rồi mà còn lo lập trình C hay C++ bị rò rỉ bộ nhớ. Có thể dùng AI để quản lý tối ưu code để tránh bị rò rỉ bộ nhớ.

"Chuyển đổi code từ C sang Rust hoàn toàn không phải chuyện nhỏ, kể cả về thời gian, tài nguyên và kinh phí" thì dùng AI convert từ C sang Rust sang cho nhanh cho tiện, kiểu gì chả có cách làm.
@centernc6 Đời mà đẹp như mơ thế còn éo gì để nói nữa.
Đám AI nó hay bị cái gọi là "ảo giác", tức là nó chế cháo ra những thứ nó ko biết, bị hoài.
Code convert nhìn rất ok cho tới khi chạy là lỗi tè le.
@magez Con người convert cũng bị lỗi tè lè thôi, bạn có thể nhờ AI nó fix lại cái lỗi tè le đấy.

AI nó có thể làm việc 24/24 liên tục 7 ngày trong tuần, tốc độ nhanh hơn con người rất rất nhiều lần.

AI có thể lái xe ô tô, có thể lái máy bay đc thì mấy cái code convert từ C++ sang Rust nó rất dễ thôi.
@centernc6 Thật chứ app tinhte bị xóa là do dàn mod tin dùng Apple Intelligence chứ nếu dùng AI real để fix bug thì đã khắc phục hết lỗi, không phải xóa bỏ rồi
@magez nhưng nó giúp tui nhiều lắm, ngồi đọc log compile mà nhiều ngu người ra đó, nó đọc log nhanh mình fix cũng nhanh hơn
@centernc6 lão Linus cũng port linux 1 phần sang rust nhưng ko nhanh đến mức đó, nói chung port rồi phải test lại nhiều lắm chứ nó có vấn đề thì xong =))
Chuyển sang cũng phải mất mấy chục năm có khi.
Vẫn là ngôn ngữ lập trình phổ biến
@hongphuc1992 App Zalo vẫn là C++ ở core.
khi nào hết job thì ngừng, lúc ngừng thì éo có game AAA cho ông chơi đâu 😆

vì game AAA toàn code bằng c++ ko thôi 😃)
Khó đấy, xử lý data muốn performance cao thì phải dùng pointer thôi, cấp phát và hủy manually là tốt nhất.
Còn các tác vụ thông thường thì python chạy ngon rồi, python cũng hỗ trợ gọi sang module C. Nên kết hợp cả 2, vừa nhanh, vừa an toàn.
@vanthoan managed code (java hoặc c#) hay script code (python hay JS) thì safety mem nhưng thứ đánh đổi với tốc độ thôi bác, cái gì cũng muốn thì làm gì có 😆)
Không phải tự nhiên người ta vẫn dùng C++ trong khi ngôn ngữ khác support tận răng 😃
Vote chuyển qua JS
> '10' - 3
7
> '10' + 3
'103'
> '1' / '1'
1
> '1' * '1'
1
> '1' + '1'
'11'
Java còn có memory leak nữa là C/C++. Mà không có lỗi này thì có lỗi khác. Giờ cái gì có vấn đề là bỏ thì có mà bỏ hết.
Muốn performance cao thì vẫn phải dùng unmanaged code thôi. Mà cái này thì c/c++ là phổ biến nhất rồi. Chuyển sang managed code mà vẫn đòi hiệu năng như cũ thì... hên xui :v.
Linus Tovald có dùng c++ méo đâu, dù cho người ta bảo smart ptr an toàn hơn rất nhiều. Haha
@noname9x2007 lão có thù với cái template và class 😆))

trước có người hỏi lão rồi, lão nói méo =)))

lão chỉ thích raw pointer và struct
@GLES Công nhận lão đó giỏi thiệt. Cái Linux kernel viết bằng C mà rất ổn định. Bần nông tôi có mấy con máy chạy 24/7 bao nhiêu năm mà không crash phát nào.
Không biết mai mốt nếu lão quit thì Linux nó sẽ như thế nào...
@vanthoan ngày ngày lão vẫn vào review PR của linux thôi chứ gì nữa =)))
Hên, mình là C#,
Các trình biên dịch, thông dịch các ngôn ngữ cấp cao đều viết bằng C, C++. Và giờ yêu cầu dùng các ngôn ngữ cấp cao kia dể bảo mật hơn. Best lý do. Chắc chính phủ mẽo muốn dễ dàng hack hơn khi mọi người viết bằng ngôn ngữ cấp cao và lập trình viên từ bỏ ngôn ngữ nền tảng C,C++ để mẽo có thể chi phối thì đúng hơn.
Xưa toàn dùng C để viết Trojant, Cheat và hack dump bộ nhớ mấy games 😃

C và C++ đối với mình là lợi hại thứ 1.5

Cái ghê hồn nhất là Assembly 😃
version quan trọng lắm. haha. muốn upgrade đâu có dễ
Mấy ông này lo xa thế. Đâu phải mỗi mem leak là nguy hiểm đâu. Đa số bug bảo mật đều do tầng application và security không áp dụng các biện pháp an toàn thông tin, lộ api key, sql injection, xss,...

Ngôn ngữ nào cũng có vai trò của nó. Xài ngôn ngữ low level thì trách nhiệm càng cao. C, C++, Rust, Go đều như nhau code ngu để bug thì chửi dev
@bango123 riêng khoản application gần native thì mem leak là nguy hiểm nhé bác =)))

Xu hướng

Bài mới








  • Chịu trách nhiệm nội dung: Trần Mạnh Hiệp
  • © 2025 Công ty Cổ phần MXH Tinh Tế
  • Địa chỉ: Số 70 Bà Huyện Thanh Quan, P. Võ Thị Sáu, Quận 3, TPHCM
  • Số điện thoại: 02822460095
  • MST: 0313255119
  • Giấy phép thiết lập MXH số 11/GP-BTTTT, Ký ngày: 08/01/2019