Lỗ hổng bảo mật trong các chương trình diệt virus

10:16 | 07/01/2015

Từ lâu, các nhà nghiên cứu đã nhiều lần cảnh báo về lỗ hổng bảo mật trong các phần mềm diệt virus, nhưng dường như các cảnh báo đó chưa được nhiều người dùng quan tâm và các công ty phát triển phần mềm diệt virus vẫn bỏ qua vấn đề này. Tuy nhiên, tháng 4/2014 tại hội thảo SyScan 2014 Singapore, chuyên gia Joxean Koret từ công ty COSEINC đã chứng minh nguy cơ lớn từ lỗ hổng bảo mật của các phần mềm diệt virus.

Joxean Koret đã phát hiện lỗ hổng bảo mật trong 14 phần lõi (engine) của phần mềm diệt virus (trong tổng số 17 loại được kiểm tra). Phần lớn lỗ hổng được phát hiện trong vòng 2 tháng. Trong danh sách này có cả những phần mềm/engine khá nổi tiếng như: Avast, Avg, Avira, BitDefender, ClamAV, Comodo, DrWeb, ESET, F-Prot, F-Secure (trong Aqua engine), Panda, eScan.... Koret cũng liệt kê danh sách nghi ngờ các phần mềm như: Kapersky, Forticlient, BKAV... là những phần mềm không tự tìm cách bảo vệ chính mình.

Để hiểu rõ được mức độ nghiêm trọng của vấn đề này, tiến hành phân tích các quan điểm trong bài trình bày của Joxean Koret. Phần mềm diệt virus là phần mềm có khả năng phát hiện, loại bỏ các virus máy tính, khắc phục (một phần hoặc hoàn toàn) hậu quả của virus gây ra. Nhưng ở khía cạnh khác, việc cài đặt nó cũng khiến cho máy tính dễ bị tấn công hơn dù việc quét virus được thực hiện tại máy hoặc từ xa. Nếu phần mềm diệt virus được thực thi với quyền người dùng cao nhất (có thể thực hiện các tác vụ: cài các trình điều khiển vào nhân hệ điều hành, lọc gói tin, kiểm soát hoạt động của máy tính,…) thì khả năng tồn tại lỗ hổng càng lớn hơn.

Vì vậy, bản thân các phần mềm diệt virus chắc chắn phải áp dụng những biện pháp bảo mật hữu hiệu để tự bảo vệ mình. Nhưng thực tế, với kinh nghiệm của mình Koret nhận định rằng: “Tấn công các engine diệt virus không khác gì tấn công các phần mềm thông thường. Chúng không có hay không được cung cấp cơ chế tự bảo vệ đặc biệt nào. Các phần mềm virus chỉ dựa vào các tính năng của hệ điều hành (ASLR/DEP) và đôi khi chúng còn vô hiệu hóa những tính năng bảo vệ đó”.

Điểm yếu đầu tiên
Các engine diệt virus thường được viết bằng các ngôn ngữ không được kiểm soát như C hay C++ để đảm bảo hiệu năng. Điều đó cũng đồng nghĩa với việc nhiều nguy cơ bảo mật như tràn bộ đệm, tràn phạm vi số nguyên, lỗi định dạng chuỗi,... có thể xảy ra. Hệ điều hành cung cấp tính năng “Ngẫu nhiên hóa cách xếp chỗ vùng địa chỉ” (Address space layout randomization - ASLR) nhằm chống lại tấn công tràn bộ đệm. Dù hầu hết các engine diệt virus thường được biên dịch ở chế độ kích hoạt ASLR, nhưng các chức năng khác thì không sử dụng tính năng này. Một số phần mềm diệt virus thậm chí còn bỏ trống tính năng này.

Chẳng hạn như phần mềm diệt virus Panda: Không có thư viện nào của phần mềm Panda được dịch ở chế độ ASLR. Tệ hơn nữa, để thực thi chế độ Panda Global Protection, nhà cung cấp chèn 3 thư viện “phi ASLR” vào tất cả các tiến trình của hệ thống. Trong thông điệp của nhà sản xuất có khuyến cáo: “Tất cả mọi người dùng (user) đều có quyền ghi trên thư mục cài đặt Panda”. Tuy nhiên, để bảo vệ thư mục phần mềm này, nhà cung cấp đã sử dụng một cái “khiên” khá thông minh, sử dụng trình điều khiển bảo vệ các tiến trình của Panda và các tệp, bằng cách đọc giá trị trong registry để kiểm tra xem “khiên bảo vệ” có được kích hoạt hay không. Và sử dụng một giá trị trong registry để kiểm tra nó có bị ghi đè hay không.

Trong một ví dụ về phần mềm Kapersky, trước hội thảo SyScan 2014 Singapore, phát hiện thấy thư viện avzkrnl.dll và vlns.kdl (trình dò quét lỗ hổng bảo mật) không được dịch ở chế độ ASLR. Sau khi điều này được công bố tại hội thảo SyScan 2014 Singapore (và về mặt nguyên tắc, bất kỳ ai có thể tìm đọc miễn phí), Kapersky vẫn chưa khắc phục lỗ hổng.

Tiếp đến là phần mềm BKAV, họ được Gartner đánh giá là nhà cung cấp hấp dẫn trong các thị trường mới nổi “Cool vendor in Emerging Markets”. Tuy nhiên, họ cũng không biên dịch ứng dụng của mình ở chế độ ASLR.



Và cũng giống như phần mềm Panda, BKAV chèn một thư viện “phi ASLR”vào mức toàn hệ thống: engine Bkav “firewall”.



Trách nhiệm hỗ trợ các định dạng và “bom” giải nén
Các engine diệt virus buộc phải hỗ trợ rất nhiều định dạng tệp khác nhau: Rar, Zip, 7z, Xar, Tar, Cpio, Ole2, Pdf,... Và tất nhiên, khả năng xuất hiện lỗi trong đoạn mã phân tích/xử lý các định dạng tệp đó cũng tăng lên tương ứng. Không những thế, các engine diệt virus còn phải cung cấp khả năng hỗ trợ cho các định dạng tệp với thời gian nhanh nhất. Trong khi các phần mềm chuyên dụng không phải hỗ trợ những tệp sai khuôn dạng, chúng chỉ cần thông báo lỗi rồi thoát, thì các engine diệt virus vẫn phải xem xét, kiểm tra những “quả bom” tiềm tàng đó.

“Bom giải nén” được miêu tả và thảo luận trên diễn đàn Bugtraq từ năm 2001. Bằng cách nén nhiều vòng và sử dụng những dữ liệu đặc biệt, tin tặc có thể tạo ra những tệp nén tương đối nhỏ nhưng lại tạo ra những gói dữ liệu khổng lồ khi giải nén, làm ngưng hoạt động của các trình diệt virus. Sau hơn 10 năm, kiểu tấn công này vẫn còn phát huy tác dụng với các engine diệt virus khá nổi tiếng. Dưới đây là bảng thống kê kết quả thử nghiệm của Koret (chữ X thể hiện kết quả “dương tính” của phép thử).



Cập nhật phần mềm an toàn qua HTTP - điều khó tin nhưng có thật
Theo Koret, phần lớn các engine diệt virus thực hiện việc cập nhật qua giao thức HTTP. Điều này là cực kỳ nguy hiểm vì nếu có thể giả mạo máy chủ cập nhật, tin tặc sẽ dễ dàng cài đặt các tệp mới hay thay thế những tệp cũ. Như thế, chúng đã nắm toàn quyền kiểm soát máy tính người dùng (vì engine diệt virus thường không được ký số). Một trong số đó là phần mềm được sử dụng khá rộng rãi (ít nhất là ở Nga) - DrWeb, phần mềm này được sử dụng bởi những khách hàng khá tên tuổi như Sberbank (ngân hàng lớn nhất nước Nga), Yandex (máy tìm kiếm lớn nhất nước Nga, được coi là Google của Nga), Duma quốc gia (Quốc hội Nga). Joxean Koret đã chụp lại màn hình dưới đây từ website của DrWeb.



Sau khi lỗ hổng bảo mật đầu tiên của DrWeb được công bố tại hội thảo SyScan 2014, thì các chiến dịch quảng cáo cho sản phầm này bị ngưng lại. Tuy nhiên, các giấy chứng nhận như: giấy phép của Bộ quốc phòng Liên bang Nga, giấy phép của Cục tình báo Liên bang Nga,... thì vẫn còn giá trị. DrWeb thực hiện cập nhật qua giao thức HTTP, cách làm cụ thể như sau: Trước hết tải xuống một file danh mục (ví dụ trên Linux: http://<server>/unix/ 700/drweb32.lst.lzma). File danh mục có chứa danh sách các tệp được cập nhật và giá trị băm của chúng. Giá trị băm được tính theo CRC32 và không một tệp tin nào được ký số (kể cả thư viện DrWeb32.dll). Một người Nga thậm chí đã viết ra công cụ tự động lợi dụng điểm yếu đó cho Windows (http://habrahabr.ru/post/220113/).

Còn rất nhiều lỗ hổng bảo mật khác của các phần mềm diệt virus (và cả những phương pháp tấn công) trong bài trình bày của Joxean Koret tại hội thảo SyScan 2014 (đó không phải là tài liệu công khai duy nhất trên Internet về chủ đề này). Nhưng những kiến thức đó không được nhiều người biết đến, vì chúng đòi hỏi hiểu biết chuyên sâu về bảo mật. Vì vậy, người dùng cần nhận thức rằng: Những phần mềm diệt virus đem đến những nguy cơ lớn, đôi khi vượt quá lợi ích mà chúng đem lại; Để tự bảo vệ mình, cách tốt nhất là hãy luôn nghi ngờ, kiểm tra kỹ phần mềm diệt virus mà mình định mua hoặc đã mua.

 Engine diệt virus là phần lõi của một sản phẩm diệt virus. Một số engine được nhiều sản phẩm diệt virus khác nhau sử dụng. Chẳng hạn như engine của BitDefender được sử dụng rất rộng rãi, nó có mặt trong các sản phẩm như G-Data, eScan, FSecure, LavaSoft, Immunet,... Phần lớn các công ty cung cấp phần mềm diệt virus có engine riêng của họ (nhưng không phải tất cả). Một số công ty, ví dụ như F-Secure, lại tích hợp engine của hãng khác vào sản phẩm của mình mặc dù họ đã có sẵn. Những điều này có nghĩa là lỗ hổng trong một engine có thể ảnh hưởng đến nhiều phần mềm diệt virus khác nhau, khiến cho lượng người dùng chịu rủi ro tăng cao và engine của một công ty “tốt” không chắc đã đảm bảo phần mềm diệt virus của họ an toàn.