• Thứ Tư, 09/07/2014 11:43 (GMT+7)

    5 lý do tại sao lỗi phần mềm vẫn đe doạ chúng ta

    Bùi Lê Duy
    Nhà phát triển phần mềm lúc nào cũng phải dành nhiều thời gian, công sức và tiền bạc để ngồi lại dò lỗi mã nguồn. Hầu hết chương trình phổ biến đều có khả năng chống lỗi tốt nhưng tin tặc vẫn luôn có cách của riêng chúng.

    Thêm 1 tháng nữa, lại có thêm vài chục bản vá cần cài đặt. Thật phiền phức!

    Các công cụ phát triển mã nguồn phần mềm được cho là có sẵn các tính năng bảo mật tích hợp mặc định. Chúng ta có những ngôn ngữ lập trình “an toàn”. Chúng ta có những nhà phát triển sử dụng các công cụ phát triển bảo mật như SDL (security development lifecycle) và kỹ thuật bảo mật. Chúng ta có các hệ điều hành có sẵn các mức thiết lập bảo mật và những nhà cung ứng sản phẩm luôn thử tìm cách tấn công chính sản phẩm của mình để dò lỗi và lổ hổng. Chúng ta còn có những công ty bảo mật trị giá hàng tỉ đô la với nhiệm vụ chuyên loại bỏ mã độc phần mềm.

    Nhưng như vậy vẫn khiến chúng ta phải cứ liên tục cập nhật bản vá tháng này qua tháng khác. Các nhà phát triển phần mềm và bảo mật thực sự làm được gì?

    Dưới đây là 5 lý do tại sao phần mềm vẫn đầy lỗ hổng bảo mật, mặc dù toàn thế giới đang cố gắng bịt hết chúng.

    1. Bản chất con người

    Không phải tất cả, nhưng phần lớn lỗ hổng trong mã nguồn đều xuất phát từ lỗi con người, vài lỗi có thể thuộc về công cụ mã nguồn phần mềm hoặc trình biên dịch. Nhưng kết quả phần lớn là từ sai lầm của con người, của người lập trình.

    Cho dù quá trình đào tạo SDL hay các công cụ bảo mật có tốt đến đâu chăng nữa thì chúng ta vẫn là con người, con người luôn phạm sai lầm. Nếu bạn muốn biết tại sao chúng ta vẫn luôn đối diện với những lỗ hổng bảo mật thì bởi vì con người luôn tạo ra lỗ hổng.

    Và cho rằng chúng ta không làm đủ để giảm sai lầm của chính chúng ta. Nhiều nhà lập trình đơn giản là không có đủ kiến thức SDL cần thiết, hoặc họ làm ngơ với vấn đề bảo mật khi lập trình. Thậm chí, nhiều nhà lập trình viết phần mềm bảo mật để kiếm sống, nhưng họ không hiểu được cách lập trình an toàn. Bạn có chắc là mức độ an toàn của phần mềm ngân hàng có cao hơn phần mềm bảo vệ cho chính phần mềm ngân hàng đó?

    Nhưng thậm chí ngay cả nhà lập trình trình độ cao, cố gắng để lấp hết lỗ hổng cũng vậy. Ví dụ, cách đây khá lâu, một tay ác ý đã tạo một lỗi tràn bộ đệm trong một trình duyệt, sử dụng trường tag HTML để xác định mã màu. Thay vì gõ vào FFFFFh hoặc mã màu tương tự vậy, thì tay tin tặc này có thể ngõ vào một mã thực thi trong trường mã màu, khiến trình duyệt tiếp nhận mã ấy và trình duyệt vấp ngay lỗi tràn bộ đệm. Và lỗ hổng ấy bị lộ ra.

    2. Tăng tính phức tạp cho phần mềm

    Theo lẽ thường, phần mềm càng ngày càng phức tạp hơn, nghĩa là ngày càng có nhiều dòng mã. Với lập trình, bất kể bạn làm tốt đến đâu thì cũng có vài lỗi hoặc lỗ hổng trên mỗi dòng mã (dù không phải lúc nào cũng được phát hiện). Người ta thường đếm những lỗi này và quy chung chung rằng nếu có một lỗi trên 50 dòng mã thì bạn thuộc hạng nhà lập trình giỏi. Hãy xét đến kernel Linux, có đến hơn 15 triệu dòng mã… Hãy thử tính xem nào!

    Thậm chí nếu không có lỗi lập trình thì nhà lập trình cũng không thể xử lý hết được những tình huống tương tác xảy ra khi ứng dụng đó được đẩy lên Internet. Hầu hết chương trình đều phải tương tác với API, lưu và trích xuất file, làm việc với nhiều thiết bị khác nhau. Những biến đa nguồn như vậy càng tăng thêm khả năng lộ diện lỗ hổng.

    Giới lập trình luôn thuộc thế yếu, thế bất lợi. Mã nguồn để bảo vệ lúc nào cũng nhiều hơn mã nguồn của kẻ xấu muốn tấn công. Bạn có thể viết một chương trình mã độc tấn công máy tính với 30 chỉ lệnh. Nhưng để chống lại 30 dòng lệnh đó, nhà lập trình cần phải viết tương đương 50.000 chỉ lệnh.

    3. Gác cổng là con người

    Hiện nay, những chương trình chuyên dò lỗi bảo mật phần mềm (còn gọi là fuzzer) cũng chính do con người viết ra. Fuzzer không tìm được lỗi tràn bộ đệm trong trường mã màu bởi vì chúng được viết ra không để dò tìm cái trường đó. Sau khi tin tặc tấn công vào cái lỗ hổng mã màu ấy, người ta cập nhật fuzzer và bây giờ chúng tìm hết các trường nếu xảy ra tình trạng tràn bộ đệm tương tự như vậy. Đơn giản là fuzzer chỉ làm những gì chúng ta bảo chúng phải làm.

    4. Nhà sản xuất thiếu trách nhiệm

    Nhiều chuyên gia bảo mật than phiền rằng chúng ta sẽ không bao giờ an toàn hơn được khi mà chúng ta không thể tố gíac những công ty làm phần mềm về lỗ hổng của họ. Nếu công ty phát triển sản phẩm chịu trách nhiệm hoặc có ý thức hơn về tính an toàn cho người sử dụng thì có lẽ rủi ro bảo mật sẽ giảm đi nhiều. Bạn cầm trên tay chiếc điện thoại rất đẹp, nhưng chắc sẽ không có sẵn chương trình nghe nhạc, trình xem phim qua Internet… nếu công ty sản xuất điện thoại đó lưu tâm hơn đến vấn đề bảo mật.

    Nhưng thành công nằm ở tính năng, tốc độ xử lý… của sản phẩm, chứ không ở tính bảo mật. Cuộc sống này đánh đổi tính an toàn và bảo mật để lấy những gì mới mẻ, hấp dẫn hơn. Đó không hẳn là điều xấu, vì chúng ta đang tiến rất nhanh lên phía trước. Nhưng đó là cuộc đánh đổi, nên muốn tiến lên, chúng ta cần chấp nhận rủi ro để có được những sản phẩm và công nghệ mới mẻ.

    5. Tin tặc là ngọn nguồn

    Thực tế là chẳng mục nào bên trên sẽ sớm được giải quyết. Nhưng chính lỗ hổng phần mềm cũng không thực sự là vấn đề. Chúng chỉ bị khai phá do những ý định xấu xa của kẻ xấu. Nếu chúng ta cứ vẽ đường cho tin tặc lao tới thì phần mềm ác ý vẫn cứ tiếp tục xâm lấn.

    Chúng ta vẫn tiếp tục hy vọng một ngày nào đó Internet sẽ an toàn hơn, nhận diện cá nhân sẽ đóng vai trò chủ chốt để xác định ai làm, ai chịu trách nhiệm cho việc làm như trong đời thực. Còn bây giờ, bạn hãy chịu khó cài đặt bản vá bất kỳ khi nào có thể, trên bất kỳ thiết bị nào có thể.
     

    Nguồn: Theo Infoworld