Skip to content

Làm thế nào để tạo ra phần mềm Antivirus?

Có bao giờ bạn nghĩ đến việc tạo ra 1 phần mềm Antivrus chưa 😃Mình thì đã nghĩ đến điều này khi mới vào năm nhất đại học. Lúc đó mình cứ thắc mắc là sao mà các phần mềm Antivirus nó có thể phát hiện ra virus, có thể chặn mình mở file hoặc không thể kill process Antivirus đó được,…

Khi search trên Google mình thấy đa số các hướng dẫn đều xây dựng những ứng dụng rất đơn giản như dùng cả CMD để phát hiện virus 😂, các project mẫu trên Github thì đa số là các project như code trong vài giờ đồng hồ trên trường đại học…

Và đến tận đến khi mình gần ra trường thì mình mới có thể tương đối xây dựng được 1 phần mềm Antivirus cơ bản 😁 Do đó trong bài viết hôm nay, mình sẽ chia sẽ vài điều về việc xây dựng phần mềm Antivirus mà mình rút kết được từ mấy tháng nay.

LMT Anti Logger

Driver

Các phần mềm Antivirus đều phải có ít nhất 1 driver để có thể thực thi code ở kernel cũng như có thể truy cập được các API kernel của Windows.

Việc xây dựng driver là khó, cần phải có nhiều thời gian và công sức, nếu muốn tìm hiểu về việc xậy dụng driver cho Windows, bạn có thể tìm hiểu ở đây: http://www.codeproject.com/Articles/9504/Driver-Development-Part-1-Introduction-to-Drivers

Hiện tại phần mềm LMT Anti Logger của mình sử dụng 2 driver để có thể can thiệp vào quá trình I/O cũng như quá trình hoạt động của các process.

Process

Một trong những thứ quan trọng mà Antivirus cần thực hiện có thể bảo vệ người dùng khỏi việc thực thi các mã độc. Để thực hiện đều này, các phần mềm Antivirus sẽ đăng ký 1 callback tên là PsSetCreateProcessNotifyRoutineEx. Nhờ đó, mỗi khi có process khởi chạy, trước khi thread main thực thi, Antivirus sẽ nhận được các thông tin về process sẽ chạy đó.

Sau khi nhận được các thông tin về process, Antivirus sẽ có thể tiến hành phân tích về process đó, nếu phát hiện là nguy hiểm thì trả về ERROR_ACCESS_DENIED để ngăn phần mềm thực thi.

Ở LMT Anti Logger, mình sử dụng Driver để ngăn chặn các mã độc fileless thực thi các tiến trình, về mã độc fileless mình sẽ viết 1 bài sao 😉

Fileless Malware Protection

Threads

Cũng tương tự như process, thread có thể dùng để thực hiện những mục đích nguy hiểm. Có thể dùng nó để inject vào các process khác, từ đó thực hiện các mục đích xấu.

Chúng ta có thể sử dụng callback PsSetCreateThreadNotifyRoutine để nhận thông tin khi có 1 thread mới được khởi tạo, từ đó có thể phân tích và quyết định xem có chặn thread đó thực thi không.

File system

Phần mềm Antivirus cần phải có thể quét file khi người dùng mở thư mục, mở file hoặc khi file đó được tạo ra. Ngoài ra còn cần phải can thiệp vào quá trình đọc/ghi file để có thể bảo vệ các dữ liệu cũng như các file của Antivirus.

Nhờ vào driver, LMT Anti Logger có thể quét được các file trước khi chúng được thực thi và có thể chặn chúng thực thi nếu đó là virus.

Anti Executable

Cũng như dùng trong tính năng Folder Guard bảo vệ dữ liệu khỏi Ransomware.

Folder Guard

Registry

Registry cũng là 1 trong những thành phần quan trọng cần phải bảo vệ. Có rất nhiều cách để malware có thể dùng registry để thực hiện các mục đích xấu. Có thể thực hiện bằng cách sử dụng CmRegisterCallbackEx để nhận dữ liệu.

Hoặc cũng có thể sử dụng KernelTraceEventParser để bảo vệ registry, tuy nhiên nếu dùng KernelTraceEventParser thì sẽ không thể chặn can thiệp vào registry được, chỉ có thể dùng để phát hiện các tiến trình can thiệp vào registry.

Network 

Các phần mềm Antivirus cũng cần phải có khả năng phát hiện khi có 1 tiến trình kết nối internet và có thể quét các website khi truy cập. Tuy nhiên việc sử dụng driver để can thiệp và quét các kết nối internet có thể làm ảnh hưởng đến việc sử dụng của người dùng.

Bạn có thể dùng KernelTraceEventParser hoặc 1 driver miễn phí như WinDivert

Có thể tham khảo thêm vào cách xây dựng NDIS Filter Drivers tại đây: https://docs.microsoft.com/en-ca/windows-hardware/drivers/network/roadmap-for-developing-ndis-filter-drivers?redirectedfrom=MSDN

Basic Firewall in LMT Anti Logger

Analysis Engine

Tất nhiên đây là 1 trong những thành phần quan trọng nhất của 1 Antivirus, cần phải có thể quét các thông tin như file được trả về từ driver và phải có thể quét được nhiều loại file (.exe, file nén,…).

Thường thì các Antivirus sẽ có các module như Unpacker, Database, Yara rule, Heuristic và cả Sandbox (có thể không cần thiết).

Database thì bạn có thể tự xây dụng hoặc mua license của các phần mềm antivirus khác. Ngoài ra bạn cũng có thể sử dụng Database từ ClamAV, nó hoàn toàn miễn phí. Mình sẽ có 1 bài viết hướng dẫn sử dụng Database từ ClamAV.

Trong LMT Anti Logger, database được sử dụng chính là Virustotal (sử dụng premium API) để phân tích file cũng như sử dụng Heuristic và Yara rule.

Ngoài ra thì ta có thể sử dụng thêm AI-Machine Learning để tăng khả năng nhận diện malware. LMT Anti Logger trang bị module AI sử dụng model được train trên 199970 file exe, overall accuracy đạt 97,89%.

LMT Artificial Intelligence

Other features

Bên cạnh những tính năng trên, chúng ta có thể bổ sung thêm nhiều tính năng khác giúp tăng khả năng bảo mật. Chẳng hạn LMT Anti Logger bổ sung các tính năng chống keylogger, screenlogger, clipboard logger, khóa webcam, quản lý mật khẩu, bảo vệ DNS, bảo vệ Microphone.

Chẳng hạn đây là video demo khả năng bảo vệ khỏi các keylogger của LMT Anti Logger:

Self-protection

Đây là 1 phần quan trọng trong Antivirus, ta cần phải đảm bảo phần mềm của mình không bị các malware kill hoặc xóa đi các file của phần mềm.

Kết luận

Việc xây dựng 1 phần mềm Antivirus là khó, rất khó. Bạn cần phải có rất nhiều kiến thức về lập trình, về Windows API và kernel. Ngoài ra còn cần thêm rất nhiều nhân lực để có thể xậy dựng và phát triển ứng dụng.

Hy vọng với bài viết này, có thể giúp bạn biết thêm về quá trình để có thể làm ra 1 phần mềm antivirus 😊

Bài viết có thể sẽ có nhiều sai sót, mong nhận được các góp ý từ các bạn 😊

Published inblog

Be First to Comment

Leave a Reply

Your email address will not be published. Required fields are marked *