Việc phân tích các mô hình trên cho thấy, nếu giữa các lớp không có sự
tách biệt rõ ràng thì khi một lớp bị tin tặc tấn công và chiếm quyền kiểm soát
có thể dẫn đến các lớp khác cũng bị ảnh hưởng theo. Ví dụ trường hợp tất cả ứng
dụng web, cơ sở dữ liệu đều được đặt trên máy chủ phục vụ web thì khi tin tặc
tấn công vào máy chủ phục vụ web có thể dẫn đến mã nguồn và cơ sở dữ liệu của
ứng dụng đó bị xâm phạm. Do vậy, khi triển khai thực tiễn nên thiết kế tách
biệt độc lập theo mô hình 3 lớp để tránh tình trạng một lớp bị tấn công và
chiếm quyền kiểm soát dẫn đến các lớp khác bị ảnh hưởng. Việc phân loại độc lập
3 lớp như trên sẽ tạo điều kiện thuận lợi cho việc vận hành, bảo trì hệ thống
cũng như dễ dàng áp dụng các biện pháp bảo vệ đối với mỗi lớp riêng biệt.
Trong trường hợp có khó khăn, hạn chế về nguồn lực xây dựng cổng/trang
-TTĐT thì vẫn nên áp dụng tối thiểu mô hình hai lớp với lớp cơ sở dữ liệu được
tách biệt độc lập.
3.2. Triển khai hệ thống phòng thủ
3.2.1. Tổ chức mô hình mạng hợp lý
Việc tổ chức mô hình mạng hợp lý có ảnh hưởng lớn đến sự an toàn cho
các cổng/trang TTĐT. Đây là cơ sở đầu tiên cho việc xây dựng các hệ thống phòng
thủ và bảo vệ. Ngoài ra, việc tổ chức mô hình mạng hợp lý có thể hạn chế được
các tấn công từ bên trong và bên ngoài một cách hiệu quả.
Hình 3. Mô hình mạng tổng quan
Trong một mô hình mạng hợp lý cần phải phân biệt rõ ràng giữa các vùng
mạng theo chức năng và thiết lập các chính sách an toàn thông tin riêng cho
từng vùng mạng theo yêu cầu thực tế:
- Vùng mạng Internet (hay Untrusted Network): còn gọi là mạng ngoài.
- Vùng mạng DMZ Network: Đặt các máy chủ cung cấp dịch vụ trực tiếp ra
mạng Internet như web server, mail server, FTP Server, v.v...
- Vùng mạng Server Network (hay Server Farm): Đặt các máy chủ không
trực tiếp cung cấp dịch vụ cho mạng Internet.
- Vùng mạng Private Network: Đặt các thiết bị mạng, máy trạm và máy chủ
thuộc mạng nội bộ của đơn vị.
Một số khuyến cáo khi tổ chức mô hình mạng:
- Nên đặt các máy chủ web, máy chủ thư điện tử (mail server), v.v...
cung cấp dịch vụ ra mạng Internet trong vùng mạng DMZ, nhằm tránh các tấn công
mạng nội bộ hoặc gây ảnh hưởng tới an toàn mạng nội bộ nếu các máy chủ này bị
cướp quyền điều khiển. Chú ý không đặt máy chủ web, mail server hoặc các máy
chủ chỉ cung cấp dịch vụ cho nội bộ cơ quan trong vùng mạng này.
- Các máy chủ không trực tiếp cung cấp dịch vụ ra mạng ngoài như máy
chủ ứng dụng, máy chủ cơ sở dữ liệu, máy chủ xác thực v.v... nên đặt trong vùng
mạng server network để tránh các tấn công trực diện từ Internet và từ mạng nội
bộ. Đối với các hệ thống thông tin yêu cầu có mức bảo mật cao, hoặc có nhiều
cụm máy chủ khác nhau có thể chia vùng server network thành các vùng nhỏ hơn
độc lập để nâng cao tính bảo mật.
- Nên thiết lập các hệ thống phòng thủ như tường lửa (firewall) và
thiết bị phát hiện/phòng chống xâm nhập (IDS/IPS) để bảo vệ hệ thống, chống tấn
công và xâm nhập trái phép. Khuyến cáo đặt firewall và IDS/IPS ở các vị trí như
sau: đặt firewall giữa đường nối mạng Internet với các vùng mạng khác nhằm hạn
chế các tấn công từ mạng từ bên ngoài vào; đặt firewall giữa các vùng mạng nội
bộ và mạng DMZ nhằm hạn chế các tấn công giữa các vùng đó; đặt IDS/IPS tại vùng
cần theo dõi và bảo vệ.
- Nên đặt một Router ngoài cùng (Router biên) trước khi kết nối đến nhà
cung cấp dịch vụ internet (ISP) để lọc một số lưu lượng không mong muốn và chặn
những gói tin đến từ những địa chỉ IP không hợp lệ.
3.2.2. Tổ chức các hệ thống phòng thủ
3.2.2.1. Firewall (Tường lửa)
Firewall là một thiết bị phần cứng hoặc một phần mềm hoạt động trong
một môi trường máy tính nối mạng nhằm ngăn chặn những lưu lượng bị cấm bởi chính
sách an ninh của một cá nhân hay một tổ chức. Mục đích của việc sử dụng
Firewall là:
- Bảo vệ hệ thống khi bị tấn công.
- Lọc các kết nối dựa trên chính sách truy cập nội dung.
- Áp đặt các chính sách truy cập đối với người dùng hoặc nhóm người
dùng.
- Ghi lại nhật ký để hỗ trợ phát hiện xâm nhập và điều tra sự cố.
Cần thiết lập luật cho Firewall từ chối tất cả các kết nối từ bên trong
Web Server ra ngoài Internet ngoại trừ các kết nối đã được thiết lập - tức là
chỉ từ chối tất cả các gói tin TCP khi xuất hiện cờ SYN. Điều này sẽ ngăn chặn
việc nếu như tin tặc có khả năng chạy các kịch bản mã độc trên Web Server thì
cũng không thể cho các mã độc nối ngược từ Web Server trở về máy tính của tin
tặc.
Tuy nhiên, hạn chế của Firewall là có thể làm chậm quá trình kết nối và
trong một số trường hợp đối với một số người có hiểu biết thì có thể vượt qua được
Firewall. Vì thế cần chú trọng đến việc bảo vệ hệ thống theo chiều sâu.
3.2.2.2. IDS/IPS (Thiết bị phát hiện/phòng, chống xâm
nhập)
Các thiết bị IDS có tính năng phát hiện dấu hiệu các xâm nhập trái
phép, còn các thiết bị IPS có tính năng phát hiện và ngăn chặn việc xâm nhập
trái phép của tin tặc vào hệ thống. Như các thiết bị mạng, IDS/IPS cũng có thể
bị tấn công và chiếm quyền kiểm soát và do đó bị vô hiệu hóa bởi tin tặc. Vì vậy
cần thiết đảm bảo thực hiện một số tiêu chí khi triển khai và vận hành, gồm:
- Xác định công nghệ IDS/IPS đã, đang hoặc dự định triển khai.
- Xác định các thành phần của IDS/IPS.
- Thiết đặt và cấu hình an toàn cho IDS/IPS.
- Xác định vị trí hợp lý để đặt IDS/IPS.
- Có cơ chế xây dựng, tổ chức, quản lý hệ thống luật (rule).
- Hạn chế thấp nhất các tình huống cảnh báo nhầm (false positive) hoặc không
cảnh báo khi có xâm nhập (false negative).
3.2.2.3. WAF (Tường lửa ứng dụng web)
Một WAF thường là một phần mềm, hay một thành phần nhúng được cài ngay
trên máy chủ phục vụ web. Đôi khi WAF cũng được cung cấp như một thiết bị phần
cứng có cài đặt sẵn phần mềm bên trong. WAF hoạt động bằng cách sử dụng một bộ
lọc với các “luật” được định nghĩa trước hoặc do người dùng thêm vào để giám
sát các dữ liệu trao đổi với ứng dụng web thông qua giao thức HTTP. Những quy
tắc này có thể giúp phát hiện và chặn các truy vấn nhằm tấn công vào các lỗi
phổ biến như Cross-site Scripting (XSS), SQL Injection, OS command Injection,
Path Travesal,... cũng như một số lỗi khác được nêu trong danh mục “OWASP Top
10” (http://en.wikipedia.org/wiki/Application_firewall)
Các dữ liệu đi vào hoặc đi ra khỏi ứng dụng web sẽ được WAF kiểm tra so
sánh với các dấu hiệu được định nghĩa sẵn và quyết định cho phép dữ liệu đi qua
hay chặn các dữ liệu đó lại. Đây là một quá trình lọc mà các thiết bị tường lửa
lớp dưới không thực hiện được. Việc triển khai WAF sẽ phần nào hạn chế được các
sai sót của người lập trình ứng dụng web. Các WAF nên được cài đặt giữa mỗi lớp
trong kiến trúc web.
Xem thông tin tham khảo về các WAF tại Phụ lục II.
3.3. Thiết đặt và cấu hình hệ thống máy chủ
an toàn
Để vận hành một máy chủ an toàn, việc cần lưu ý đầu tiên là luôn cập
nhật phiên bản và bản vá mới nhất cho hệ thống. Ngoài ra, với mỗi loại máy chủ
khác nhau sẽ có những biện pháp thiết đặt và cấu hình cụ thể để đảm bảo vận
hành an toàn.
3.3.1. Hệ thống máy chủ Linux
- Đối với hệ thống cài đặt mới thì phải đảm bảo một số yêu cầu sau:
+ Khả năng hỗ trợ từ các bản phân phối (thông tin vá lỗi, thời gian cập
nhật, nâng cấp, kênh thông tin hỗ trợ kỹ thuật).
+ Khả năng tương thích với các sản phẩm của bên thứ 3 (tương thích giữa
nhân hệ điều hành với các ứng dụng, cho phép mở rộng module).
+ Khả năng vận hành và sử dụng hệ thống của người quản trị (thói quen,
kỹ năng sử dụng, tính tiện dụng).
- Tối ưu hóa hệ điều hành về các mặt sau:
+ Chính sách mật khẩu: sử dụng cơ chế mật khẩu phức tạp (trên 7 ký tự
và bao gồm: ký tự hoa, ký tự thường, ký tự đặc biệt và chữ số) nhằm chống lại
các kiểu tấn công brute force.
+ Tinh chỉnh các thông số mạng: tối ưu hóa một số thông tin trong tập
tin /etc/sysctl.conf.
+ Cho phép hoặc không cho phép các dịch vụ truy cập đến hệ thống thông
qua hai tập tin /etc/hosts.allow và /etc/host.deny.
+ Gỡ bỏ các dịch vụ không cần thiết: việc gỡ bỏ các gói, dịch vụ không
cần thiết sẽ hạn chế khả năng tiếp cận của kẻ tấn công và cải thiện hiệu năng
của hệ thống.
+ Điều khiển truy cập: chỉ định các truy cập được phép đến hệ thống
thông qua tập tin /etc/security/access.conf, /etc/security/time.conf, /etc/security/limits.conf,
giới hạn tài khoản được phép sử dụng quyền sudo thông qua tập tin
/etc/pam.d/su.
+ Sử dụng kết nối SSH thay cho các kênh kết nối không an toàn như Telnet,
FTP, v.v...
+ Quản lý hệ thống ghi nhật ký (log) một cách tập trung và nhất quán
nhằm phục vụ cho mục đích điều tra khi có sự cố xảy ra.
3.3.2. Hệ thống máy chủ Windows
Máy chủ Windows được sử dụng khá phổ biến, việc bảo vệ cho máy chủ Windows
là thực sự cần thiết. Để đảm bảo cho hệ thống cần thực hiện một số biện pháp
sau:
- Đối với các dịch vụ và cổng:
+ Các dịch vụ đang chạy thiết lập với tài khoản có quyền tối thiểu.
+ Vô hiệu hóa các dịch vụ DHCP, DNS, FTP, WINS, SMTP, NNTP, Telnet và
các dịch vụ không cần thiết khác nếu không có nhu cầu sử dụng.
+ Nếu là ứng dụng web thì chỉ mở cổng 80 (và cổng 443 nếu có SSL).
- Đối với các giao thức:
+ Vô hiệu hóa WebDAV nếu không sử dụng bởi ứng dụng nào hoặc nếu nó
được yêu cầu thì nó phải được bảo mật.
+ Vô hiệu hóa NetBIOS và SMB (đóng các cổng 137, 138, 139 và 445).
- Tài khoản và nhóm người dùng:
+ Gỡ bỏ các tài khoản chưa sử dụng khỏi máy chủ.
+ Vô hiệu hóa tài khoản Windows Guest.
+ Đổi tên tài khoản Administrator và thiết lập một mật khẩu mạnh.
+ Vô hiệu hóa tài khoản IUSR_MACHINE nếu nó không được sử dụng bởi ứng
dụng khác.
+ Nếu một ứng dụng khác yêu cầu truy cập anonymous, thì thiết lập tài khoản
anonymous có quyền tối thiểu.
+ Chính sách về tài khoản và mật khẩu phải đảm bảo an toàn, sử dụng cơ
chế mật khẩu phức tạp (trên 7 ký tự và bao gồm: ký tự hoa, ký tự thường, ký tự
đặc biệt và chữ số).
+ Phải giới hạn Remote logons. (Chức năng này phải được gỡ bỏ khỏi nhóm
Everyone).
+ Tắt chức năng Null sessions (anonymous logons).
- Tập tin và thư mục:
+ Tập tin và thư mục phải nằm trên phân vùng định dạng NTFS.
+ Tập tin nhật ký (log) không nằm trên phân vùng NTFS hệ thống.
+ Các nhóm Everyone bị giới hạn (không có quyền truy cập vào
\Windows\system32).
+ Mọi tài khoản anonymous bị cấm quyền ghi (write) vào thư mục gốc.
- Tài nguyên chia sẻ:
+ Gỡ bỏ tất cả các chia sẻ không sử dụng (bao gồm cả chia sẻ mặc định).
+ Các chia sẻ khác (nếu có) cần được giới hạn (nhóm Everyone không được
phép truy cập).
- Các phiên bản vá lỗi:
+ Cập nhật các phiên bản mới nhất.
+ Theo dõi thông tin cập nhật từ nhiều nguồn khác nhau.
+ Nên triển khai cập nhật trên hệ thống thử nghiệm trước khi cập nhật
vào hệ thống thật.
3.3.3. Máy chủ web
3.3.3.1. Máy chủ IIS:
Máy chủ IIS được sử dụng khá phổ biến hiện nay trên các máy chủ Windows.
Để bảo vệ cho máy chủ IIS cần thực hiện một số biện pháp sau:
- Nên sử dụng các giao thức mã hóa như SSL hoặc TLS nhằm mã hóa các kết
nối an toàn.
- Cần thiết lập các thuộc tính trong Audit Policy trên máy chủ IIS
trong môi trường làm việc đảm bảo toàn bộ thông tin của người dùng khi đăng
nhập vào hệ thống sẽ đều được ghi lại. Tất cả những dữ liệu khi truy cập đều
được ghi lại nhật ký.
- Cần thiết lập “Deny access to this Computer from the network”,
với thiết lập này sẽ quyết định những tài khoản nào bị cấm truy cập tới máy chủ
IIS từ mạng và các tài khoản người dùng sẽ bị hạn chế và đảm bảo tính bảo mật
cao hơn. Sau đây là những tài khoản người dùng cần phải thiết lập chế độ cấm
nêu trên: ANONYMOUS LOGON, Built-in Administrator và Guest.
- Nên tắt tất cả chi tiết thông báo lỗi mà có khả năng đưa ra quá nhiều
thông tin. Việc đưa ra quá chi tiết các thông báo lỗi sẽ dẫn đến việc các tin
tặc có thể lợi dụng để tìm hiểu thông tin về hệ thống.
- Nên cài đặt thư mục gốc của ứng dụng web trên phân vùng đĩa có định
dạng NTFS, bởi vì khả năng kiểm soát quyền truy cập trên hệ thống tập tin với
phân vùng định dạng NTFS mạnh hơn so với các định dạng FAT, FAT32. Khi đã cài
đặt thư mục gốc trên phân vùng NTFS thì cũng phải thiết lập quyền truy cập thấp
nhất cho thư mục gốc này, tránh trường hợp thư mục gốc của ứng dụng web được
mặc định là Everyone: Full Control.
- Trong IIS có rất nhiều thành phần (module) bổ trợ. Nên gỡ bỏ những
thành phần không cần thiết ra khỏi IIS được cài đặt, vì những thành phần này
khi bị lỗi có khả năng dẫn đến IIS bị tấn công và chiếm quyền kiểm soát một
cách gián tiếp.
- Nên cài đặt URLScan để bổ sung thêm nhiều tính năng bảo mật cho IIS.
3.3.3.2. Apache HTTP:
Một số biện pháp cần thực hiện nhằm bảo vệ máy chủ Apache HTTP một cách
an toàn:
- Tối ưu hóa việc sử dụng các thành phần (module) bằng việc gỡ bỏ những
thành phần không cần thiết. Một số thành phần khuyến cáo nên gỡ bỏ ra khỏi
Apache là: mod_userid, mod_info, mod_status, mod_include.
- Giới hạn các quyền truy cập: Tạo các tài khoản, nhóm người dùng riêng
(khác root) để thực thi apache. Không cho phép sử dụng các tài khoản này để đăng
nhập bằng cách chỉnh sửa nội dung trong tập tin passwd.
- Điều khiển truy cập: Sử dụng các chỉ mục (Directory) để điều khiển
quá trình truy cập đến các thư mục hệ thống cần hạn chế quyền thâm nhập (ví dụ
như các thư mục: root, admin, administrator). Không cho phép duyệt qua thư mục
gốc (root). Cấu hình được thiết lập trong tập tin cấu hình httpd.conf:
- Hạn chế tối đa việc sử dụng các lựa chọn (option) sau: MultiViews,
ExecCGI, FollowSymLinks, SymLinksIfOwnerMatch. Gỡ bỏ tất cả các trang html mặc
định, hướng dẫn sử dụng, thông tin liên quan về web server, điều khiển Server
Status, Server Information. Tắt chức năng HTTP TRACE. Bảo vệ các tập tin cấu
hình .htaccess.
- Tổ chức quá trình ghi nhật ký: Cấu hình Error Log, cấu hình Access
Log theo một số gợi ý sau:
- Đối với một số trang thông tin cần mã hóa truy cập có thể sử dụng qua
SSL/TLS nhờ module mod_ssl.
- Hạn chế các thông tin về Web Server:
- Điều chỉnh các thông số tối ưu: một số thiết lập tham khảo:
+ Thông số timeout:
+ Thông số KeepAlive:
+ Thông số MaxKeepAIiveRequests:
+ Thông số KeepAliveTimeout:
+ Thêm các thông số sau:
3.3.3.3. Apache Tomcat:
Một số biện pháp cần thực hiện nhằm bảo vệ máy chủ Apache Tomcat một
cách an toàn:
- Gỡ bỏ các tài nguyên không liên quan: Trong quá trình cài đặt có thể
xuất hiện các ứng dụng mẫu, tài liệu hướng dẫn và một số các thư mục không cần
thiết khác. Vì vậy cần gỡ bỏ các tập tin, thư mục này nhằm hạn chế thấp nhất
nguy cơ bị khai thác thông tin liên quan đến ứng dụng đang sử dụng:
- Giới hạn các thông tin về hệ thống:
+ Thay đổi thông tin server.info.
+ Tiến hành đóng gói lại tập tin CATALINA_HOME/server/lib/cataIina.jar
sau khi đã sửa đổi nội dung file ServerInfo.properties. Ví dụ:
+ Trong tập tin Serverlnfo.properties thay đổi giá trị server.info
thành giá trị server.info=Apache Tomcat, sau đó đóng gói lại catalina.jar:
+ Thay đổi thông tin trong server.number. Thuộc tính thay đổi cũng tương
tự như thông số server.info. Ví dụ:
+ Trong tập tin ServerInfo.properties thêm thuộc tính server.number=<Version>,
sau đó đóng gói lại catalina.jar:
+ Thay đổi thông tin trong server.built. Thuộc tính này cung cấp thông tin
về thời gian mà Tomcat được biên dịch và đóng gói. Ví dụ:
+ Trong tập tin Serverlnfo.properties thêm thuộc tính server.built=<
BuildDate>, sau đó đóng gói lại catalina.jar:
- Bảo vệ cổng shutdown:
+ Apache Tomcat sử dụng cổng 8005 để tiếp nhận các yêu cầu shutdown.
Cập nhật thuộc tính shutdown trong tập tin server.xml ở $CATALINA_HOME/conf/server.xml:
+ Hoặc bỏ chức năng shutdown trên cổng này:
- Bảo vệ cấu hình Apache Tomcat:
+ Giới hạn truy cập đến $CATALINA_HOME: Gán quyền sở hữu cho tài khoản tomcat_admin:tomcat;
gỡ bỏ các quyền đọc, ghi, thực thi; gỡ bỏ quyền ghi đối với nhóm:
+ Giới hạn truy cập đến $CATALINA_BASE: Gán quyền sở hữu cho tài khoản
tomcat_admin:tomcat; gỡ bỏ các quyền đọc, ghi, thực thi; gỡ bỏ quyền ghi đối
với nhóm:
+ Giới hạn truy cập đến thư mục cấu hình Tomcat: Gán quyền sở hữu cho
tài khoản tomcat_admin.tomcat; gỡ bỏ các quyền đọc, ghi, thực thi; gỡ bỏ quyền
ghi đối với nhóm:
+ Giới, hạn truy cập đến thư mục chứa các tập tin nhật ký (log): Gán
quyền sở hữu cho tài khoản tomcat_admin:tomcat; gỡ bỏ các quyền đọc, ghi, thực
thi:
+ Giới hạn truy cập đến thư mục chứa các tập tin thực thi: Gán quyền sở
hữu cho tài khoản tomcat_admin:tomcat; gỡ bỏ các quyền đọc, ghi, thực thi:
+ Giới hạn truy cập đến thư mục chứa ứng dụng web: Gán quyền sở hữu: cho
tài khoản tomcat_admin:tomcat; gỡ bỏ các quyền đọc, ghi, thực thi:
+ Giới hạn truy cập đến tập tin context.xml: Gán quyền sở hữu cho tài khoản
tomcat_admin:tomcat; gỡ bỏ các quyền đọc, ghi, thực thi; gỡ bỏ quyền ghi đối
với nhóm:
+ Giới hạn truy cập đến tập tin logging.properties: Gán quyền sở hữu
cho tài khoản tomcat_admin:tomcat; gỡ bỏ các quyền đọc, ghi, thực thi; gỡ bỏ
quyền ghi đối với nhóm:
+ Giới hạn truy cập đến tập tin server.xml: Gán quyền sở hữu cho tài khoản
tomcat_admin:tomcat; gỡ bỏ các quyền đọc, ghi, thực thi; gỡ bỏ quyền ghi đối
với nhóm:
+ Giới hạn truy cập đến tập tin tomcat-users.xml: Gán quyền sở hữu cho
tài khoản tomcat_admin:tomcat; gỡ bỏ các quyền đọc, ghi, thực thi; gỡ bỏ quyền
ghi đối với nhóm:
+ Giới hạn truy cập đến tập tin web.xml: Gán quyền sở hữu cho tài khoản
tomcat_admin:tomcat; gỡ bỏ các quyền đọc, ghi, thực thi; gỡ bỏ quyền ghi đối
với nhóm:
3.4. Vận hành ứng dụng web an toàn
3.4.1. Kiểm tra hoạt động web an toàn
Để đảm bảo cho ứng dụng web vận hành an toàn, tránh được các nguy cơ
tấn công từ bên ngoài hệ thống có thể tiến hành các bước cơ bản sau:
- Kiểm tra việc lộ thông tin nhạy cảm qua các công cụ tìm kiếm, bước
này nhằm đảm bảo ứng dụng web sẽ không hiển thị các thông tin riêng như phiên bản,
cấu trúc thư mục, v.v... lên kết quả của các công cụ tìm kiếm.
- Kiểm tra chức năng đăng xuất, đăng nhập có hoàn thành đúng nhiệm vụ
hay không.
- Thiết đặt các quyền truy cập thích hợp vào các tập tin và thư mục
nhạy cảm. Xóa các tập tin sao lưu dự phòng ra khỏi hệ thống.
- Sử dụng CAPTCHA và chế độ mật khẩu mạnh nhằm tránh trường hợp vượt
qua CAPTCHA hay đoán được mật khẩu ngắn (không cho phép người dùng đặt mật khẩu
yếu).
- Kiểm tra quá trình quản lý tài khoản và phiên của ứng dụng, việc
truyền gửi những thông tin quan trọng như tên đăng nhập và mật khẩu cần được mã
hóa nhằm tránh tình trạng nghe lén dữ liệu trên đường truyền. Bên cạnh đó việc
cấp phát và mã hóa phiên đăng nhập cho người dùng cũng cần đảm bảo an toàn nhằm
tránh tình trạng tin tặc đoán hay giả mạo phiên.
- Xác định loại mã nguồn hỗ trợ web (JSP, ASP, PHP,...) và kiểu
framework phát triển web (mã nguồn mở, tự phát triển,...) để có biện pháp bảo
vệ hợp lý cũng như cập nhật khắc phục các lỗ hổng được phát hiện.
- Xây dựng hoặc triển khai một hệ thống máy chủ Proxy dùng để chắc rằng
các kết nối từ bên ngoài vào và từ bên trong ra sẽ được giám sát để tránh các
mối đe dọa cũng như điều tra nguyên nhân khi hệ thống bị tấn công.
- Nếu có nhiều website được đặt chung trên máy chủ web, cần có biện
pháp cách ly các website này ra, nhằm đảm bảo nếu có một website bị tấn công và
chiếm quyền kiểm soát thì các website còn lại sẽ ít bị ảnh hưởng.
- Thiết kế trang báo lỗi chung để trả về cho tất cả các lỗi mà hệ thống
có thể gặp phải. Biện pháp này nhằm giảm nguy cơ bị tấn công dựa theo thông báo
lỗi của ứng dụng.
3.4.2. Khắc phục các lỗi phổ biến trên web
Trong trang web thường có các điểm cho người dùng nhập dữ liệu vào như mục
“đăng nhập”, mục “tìm kiếm”, mục ID bài viết trên URL, V.V... Ngoài việc giúp
cho người dùng dễ dàng tương tác với ứng dụng web, các mục này nêu không được
quản lý chặt chẽ sẽ trở thành một nguy cơ lớn để thực hiện các cuộc tấn công
vào ứng dụng web. Các dữ liệu bất hợp pháp nên được lọc trước để bỏ qua không
đưa vào truy vấn trong cơ sở dữ liệu như các siêu ký tự, các biểu thức chính
quy, các ký tự được mã hóa,... nhằm tránh cho ứng dụng trước những nguy cơ tấn
công.
Có thể sử dụng biểu thức chính quy (áp dụng cho tất cả các ngôn ngữ lập
trình) để thực hiện các công việc này. Ví dụ, sử dụng biểu thức chính quy để
lọc các siêu ký tự:
Hoặc để quy định giá trị mật khẩu nhập vào, ví dụ: cho phép mật khẩu từ
4 đến 8 ký tự gồm chữ thường và chữ hoa:
Cũng có thể sử dụng biểu thức chính quy để lọc tấn công Path Traversal:
Hoặc lọc tấn công chia nhỏ hồi đáp HTTP (HTTP Response Splitting):
Trong số mười lỗi ATTT phổ biến trên cổng/trang TTĐT, mỗi lỗi sẽ có
những biện pháp riêng để khắc phục như sau:
- Tấn công Injection (bao gồm các kiểu tấn công như
SQL Injection, OS Injection, LDAP Injection):
+ Giới hạn quyền truy cập CSDL và phân quyền giữa các tài khoản người
dùng, điều này giúp giảm khả năng khai thác CSDL của tin tặc ngay cả khi đã
thực hiện thành công lệnh Injection.
+ Sử dụng thủ tục lưu trữ để đảm bảo các câu lệnh SQL từ ứng dụng được
lưu trữ và triển khai ở máy chủ CSDL, điều này giúp cho dữ liệu do người dùng
nhập vào không thể được tùy chỉnh dưới dạng một câu lệnh SQL. Để làm được điều
này, ứng dụng phải được định dạng để sử dụng những thủ tục lưu trữ với giao
diện an toàn như câu lệnh Callable của JDBC hay lệnh Object của ADO.
+ Sử dụng biểu thức chính quy để phát hiện tấn công SQL Injection:
Đối với các siêu ký tự:
Với tấn công sử dụng từ khóa UNION:
Với tấn công vào máy chủ MS SQL:
+ Sử dụng biểu thức chính quy để lọc tấn công LDAP Injection:
- Cross Site Scripting (XSS):
+ Lọc tất cả các dữ liệu chưa tin tưởng một cách phù hợp dựa trên nội
dung HTML.
+ Tạo một “danh sách trắng” để kiểm tra dữ liệu đầu vào một cách phù
hợp.
+ Sử dụng biểu thức chính quy trong việc kiểm tra dữ liệu đầu vào để
phát hiện tấn công XSS:
- Insecure Direct Object References (Tham chiếu trực tiếp đối tượng
không an toàn): Kiểm tra quá trình tham chiếu trực tiếp đến các tài nguyên
hạn chế trên hệ thống để đảm bảo rằng người dùng bình thường không thể truy cập
được các nguồn tài nguyên mà họ không có quyền truy cập. Nên sử dụng một cơ chế
truy cập gián tiếp thay vì trực tiếp.
- Cross Site Request Forgery (CSRF): Việc ngăn chặn CSRF yêu cầu
phải gộp những token không có khả năng đoán trước trong mỗi phiên giao dịch.
Những token không những là duy nhất cho mỗi phiên người sử dụng mà còn duy nhất
cho mỗi yêu cầu gửi đến ứng dụng.
- Failure to Restrict URL Access (Thất bại trong việc
hạn chế truy cập các URL quản trị): Việc truy cập vào các URL có chức năng quản trị cần
phải được kiểm tra thông qua quá trình xác thực và kiểm tra quyền của người
dùng trước khi cho phép họ truy cập.
- Bẻ gãy sự chứng thực và quản lý phiên: Thiết đặt một phương
pháp chứng thực và điều khiển phiên người sử dụng đủ mạnh để tránh khỏi bị
những lỗi XSS mà có thể bị đánh cắp phiên sử dụng hoặc có thể giải mã phiên một
cách dễ dàng.
- Cấu hình bảo mật không an toàn: Bảo mật một hệ thống nói chung
phụ thuộc vào việc cấu hình bảo mật cho các thành phần riêng lẻ trong hệ thống
như ứng dụng web, máy chủ web, hệ điều hành máy chủ, các thiết bị vật lý,...
Tất cả các thiết đặt bảo mật này cần được xác định, thực hiện, bảo trì và tuyệt
đối không nên sử dụng các cấu hình bảo mật mặc định có sẵn.
- Chuyển hướng và chuyển tiếp không được kiểm tra: Hạn chế sử
dụng chuyển tiếp và chuyển hướng, nếu sử dụng thì phải có cơ chế chứng thực.
- Lưu trữ mã hóa không an toàn: Nhận biết nguy cơ và lên phương
án bảo về đối với dữ liệu từ những tấn công bên trong hay bên ngoài, dữ liệu
nhạy cảm phải luôn luôn mã hóa.
- Thiếu sự bảo vệ lớp vận chuyển: Cung cấp một cơ chế bảo vệ cho lớp vận
chuyển bằng việc cấu hình SSL/TLS phù hợp.
3.5. Thiết đặt và cấu hình cơ sở dữ liệu an
toàn
Việc thiết đặt và cấu hình cơ sở dữ liệu an toàn là một quá trình phức
tạp, đòi hỏi người quản trị phải hiểu rõ về cơ sở dữ liệu đang sử dụng. Để bảo
vệ cho cơ sở dữ liệu an toàn cần thực hiện một số biện pháp sau:
- Luôn cập nhật phiên bản vá lỗi cho cơ sở dữ liệu mới nhất nhằm tránh
các lỗi đã được công bố và khai thác.
- Gỡ bỏ các cơ sở dữ liệu không sử dụng.
- Gỡ bỏ hoặc vô hiệu hóa các thủ tục lưu trữ hoặc những hàm nhạy cảm có
tương tác với hệ thống nhằm tránh việc tương tác đến hệ thống từ cơ sở dữ liệu.
- Tách biệt các cơ sở dữ liệu sử dụng cho mục các đích khác nhau.
- Khóa tất cả các kết nối từ hệ thống hoặc từ ứng dụng khác ngoài ứng
dụng web và máy chủ web, không cho phép bất kỳ kết nối trực tiếp nào từ
Internet đến database.
- Cấu hình ghi nhật ký và theo dõi nhật ký làm việc của cơ sở dữ liệu
một cách hợp lý.
- Giới hạn truy cập đối với các tài khoản sử dụng (không có quyền xóa hoặc
thay đổi cấu trúc cơ sở, dữ liệu).
- Phân quyền cho các tài khoản và các tập tin hệ thống.
- Gỡ bỏ hoặc thay đổi các tài khoản mặc định và thiết lập mật khẩu mạnh
cho các tài khoản đang sử dụng.
- Có cơ chế sao lưu dữ liệu và mã hóa các dữ liệu sao lưu.
- Sử dụng các công cụ để tìm kiếm lỗ hổng trên máy chủ SQL như MBSA (MS
SQL).
3.6. Cài đặt các ứng dụng bảo vệ
3.6.1. Chống virus (Anti-Virus) và bảo vệ an toàn máy
tính cá nhân
Việc cài đặt các ứng dụng bảo vệ như Anti-Virus có tác dụng rất lớn
trong việc bảo vệ hệ thống. Chúng có thể hạn chế được việc bị cài thêm mã độc
trong trường hợp kẻ tấn công đã xâm nhập được vào hệ thống, hoặc hạn chế việc upload
các mã độc khi ứng dụng web bị lỗi. Các chương trình Anti-Virus phải thỏa mãn
yêu cầu sau:
- Luôn ở trạng thái đang hoạt động nhằm đảm bảo hệ thống luôn được bảo vệ.
- Đảm bảo tính toàn vẹn của tập tin và tài nguyên.
- Quét các mã độc đính kèm trong e-maii.
- Cập nhật dấu hiện nhận diện virus mới nhất.
Đối với máy tính cá nhân có thể xem xét cài đặt phần mềm bảo vệ an toàn
máy tính tích hợp thường bao gồm cả chức năng chống virus, lọc tường lửa cá
nhân. Xem Phụ lục 3 thông tin tham khảo về các phần mềm chống virus và bảo vệ
an toàn máy tính cá nhân.
3.6.2. Hệ thống phát hiện xâm nhập máy tính (Host
Based IDS)
Host Based IDS là hệ thống phát hiện xâm nhập máy tính (thường hay áp
dụng đối với các máy chủ), đồng thời đưa ra cảnh báo về các hành động bất
thường đối với tài nguyên trên hệ thống. Sử dụng Host Based IDS nhằm:
- Cảnh báo khi có sự thay đổi đối với mã nguồn ứng dụng.
- Cảnh báo khi có sự thay đổi đối với các tập tin hệ thống.
- Cảnh báo khi có sự thay đổi đối với các tập tin hệ thống.
3.7. Thiết lập cơ chế sao lưu và phục hồi
3.7.1. Cơ chế sao lưu
Sao lưu dữ liệu là điều kiện không thể thiếu khi triển khai các giải
pháp kỹ thuật nhằm đảm bảo tính sẵn sàng của dữ liệu. Vì vậy khi thực hiện sao
lưu cần xác định một số yêu cầu sau:
- Phạm vi sao lưu:
+ Sao lưu toàn bộ dữ liệu của hệ thống. Cơ chế này đảm bảo được tính
toàn vẹn của dữ liệu và có thể phục hồi toàn bộ dữ liệu một cách nhanh chóng
khi hệ thống bị sự cố. Tuy nhiên, đòi hỏi phải xây dựng một hệ thống sao lưu
quy mô lớn.
+ Sao lưu từng phần riêng trong hệ thống. Cơ chế này nhằm phục hồi
những phần gặp sự cố và không cần một hệ thống sao lưu quy mô lớn.
- Thời gian sao lưu:
Cần thiết lập một cơ chế sao lưu theo định kỳ (ngày, tuần, tháng,...)
một cách tự động, nhằm đảm bảo việc sao lưu đầy đủ các dữ liệu theo yêu cầu.
- Nội dung sao lưu:
+ Sao lưu hệ điều hành máy chủ.
+ Sao lưu máy chủ web, Cơ sở dữ liệu, v.v…
+ Sao lưu thư mục và tập tin.
3.7.2. Cơ chế phục hồi
Tùy thuộc vào tình trạng hiện tại của hệ thống và cơ chế sao lưu đã
được thiết lập mà lựa chọn cơ chế phục hồi dữ liệu cho hệ thống một cách thích
hợp:
- Khôi phục nguyên trạng hệ thống.
- Khôi phục từng phần riêng biệt (hệ điều hành, cơ sở dữ liệu, các ứng
dụng khác).
- Thường xuyên kiểm tra bản sao lưu để đảm bảo khả năng phục hồi thành
công khi cần thiết.
4. ĐỐI PHÓ VỚI TẤN CÔNG TỪ CHỐI DỊCH VỤ
4.1. Tấn công từ chối dịch vụ:
- Tấn công từ chối dịch vụ (DoS) là kiểu tấn công vào hệ thống mạng
bằng cách làm tăng đột biến lưu lượng băng thông, số lượng yêu cầu kết nối sử
dụng dịch vụ vượt quá khả năng mà hệ thống có thể đáp ứng xử lý, dẫn đến dịch
vụ của hệ thống hoạt động bị chậm, mất khả năng đáp ứng hoặc mất kiểm soát.
- Tấn công từ chối dịch vụ phân tán (DDoS) là dạng tấn công DoS nguy
hiểm nhất khi nguồn tấn công nhiều và phân bố trên diện rộng trên mạng Internet
toàn cầu, rất khó ngăn chặn triệt để. Thông thường các cuộc tấn công DDoS được
gây ra bởi một số lượng khá lớn các máy tính trên mạng Internet bị điều khiển
bởi tin tặc do nhiễm mã độc thường gọi là mạng botnet.
- Nguyên tắc chống tấn công DoS là cần phải lọc và gạt bỏ được các luồng
tin tấn công, và tốt hơn nữa là ngặn chặn được các nguồn tấn công. Để chống
DDoS phải vô hiệu hóa được hoạt động của các mạng botnet. Để làm được điều này
một cách hiệu quả thường đòi hỏi các biện pháp điều phối ứng cứu sự cố ở quy mô
quốc gia hay thậm chí phối hợp nhiều nước. Do đó khi phát hiện có các cuộc tấn
công DoS hay DDoS, các đơn vị quản lý cổng/trang TTĐT cần báo cho Trung tâm Ứng
cứu khẩn cấp máy tính Việt Nam (VNCERT) càng sớm càng tốt. Mặt khác, việc áp
dụng các biện pháp và công cụ kỹ thuật tại chỗ để nâng cao năng lực bảo vệ các
cổng/trang TTĐT cũng có hiệu quả rõ rệt.
4.2. Một số biện pháp kỹ thuật phòng chống
tấn công từ chối dịch vụ:
- Tăng cường khả năng xử lý của hệ thống:
+ Tối ưu hóa các thuật toán xử lý, mã nguồn của máy chủ web,
+ Nâng cấp hệ thống máy chủ,
+ Nâng cấp đường truyền và các thiết bị liên quan,
+ Cài đặt đầy đủ các bản vá cho hệ điều hành và các phần mềm khác để
phòng ngừa khả năng bị lỗi tràn bộ đệm, cướp quyền điều khiển, v.v...
- Hạn chế số lượng kết nối tại thiết bị tường lửa tới mức an toàn hệ
thống cho phép.
- Sử dụng các tường lửa cho phép lọc nội dung thông tin (tầng ứng dụng)
để ngăn chặn các kết nối nhằm tấn công hệ thống.
- Phân tích luồng tin (traffic) để phát hiện các dấu hiệu tấn công và
cài đặt các tường lửa cho phép lọc nội dung thông tin (tầng ứng dụng) ngăn chặn
theo các dấu hiệu đã phát hiện.
4.3. Một số công cụ kỹ thuật phòng chống
tấn công từ chối dịch vụ:
Tùy khả năng đầu tư, các cổng/trang TTĐT có thể trang bị giải pháp hoặc
sử dụng dịch vụ chống DoS/DDoS với các công cụ kỹ thuật sau:
- Sử dụng hệ thống thiết bị, phần mềm hoặc dịch vụ giám sát an toàn
mạng (đặc biệt về lưu lượng) để phát hiện sớm các tấn công từ chối dịch vụ.
- Sử dụng thiết bị bảo vệ mạng có dịch vụ chống tấn công DDoS chuyên
nghiệp kèm theo, ví dụ như: Arbor, Checkpoint, Imperva, Perimeter,...
PHỤ LỤC 1
MƯỜI LỖI
ATTT PHỔ BIẾN TRÊN CỔNG/TRANG TTĐT
1. Tấn công Injection: bao gồm các lỗi cho phép thực hiện
thành công các kiểu tấn công như SQL Injection, OS Injection, LDAP Injection.
Kiểu tấn công này xảy ra khi người dùng gửi các dữ liệu không tin cậy đến ứng
dụng web, những dữ liệu này có tác dụng như các câu lệnh với hệ điều hành hoặc
các câu truy vấn với cơ sở dữ liệu nhằm phục vụ cho mục đích xấu.
2. Cross Site Scripting (XSS): Lỗi XSS xảy ra khi ứng dụng
web nhận các dữ liệu độc hại và chuyển nó đến trình duyệt cho người dùng mà
không xác nhận lại dữ liệu đó có hợp lệ hay không. Kiểu tấn công này cho phép
kẻ tấn công thực thi các đoạn mã độc trong trình duyệt của nạn nhân và có thể
cướp phiên người dùng hoặc chuyển hướng người dùng đến các trang độc hại khác.
3. Insecure Direct Object References (Tham chiếu trực tiếp đối
tượng không an toàn): Việc tham chiếu xảy ra khi nhà phát triển ứng
dụng web đưa ra tham chiếu đến một đối tượng bên trong ứng dụng như là một tập
tin, một thư mục hay một khóa cơ sở dữ liệu. Nếu việc kiểm tra quá trình tham
chiếu này không an toàn, kẻ tấn công có thể dựa theo để tham chiếu đến các dữ
liệu mà họ không có quyền truy cập.
4. Cross Site Request Forgery (CSRF): là kiểu tấn công mà
người dùng bị lợi dụng để thực thi những hành động không mong muốn ngay trên
phiên đăng nhập của họ. Thông qua việc gửi người dùng một liên kết qua email
hay chat, tin tặc có thể hướng người dùng thực thi một số hành động ngay trên
trình duyệt của người dùng (như gửi bài viết, xóa bài viết, v.v..
5. Failure to Restrict URL Access (Thất bại trong việc hạn chế
truy cập các URL quản trị): Thông thường để vào được các đường dẫn quản
trị thì ứng dụng phải kiểm tra người dùng có đủ quyền để truy cập vào đó hay
không rồi mới hiển thị URL và các giao diện quản trị tương ứng khác. Để tránh
tình trạng người dùng bình thường cũng truy cập vào các URL quản trị, mỗi lần
truy cập vào các URL này cần được kiểm tra quyền kỹ càng, nếu không tin tặc có
thể truy cập vào các URL này nhằm thực hiện các hành vi độc hại.
6. Bẻ gãy sự chứng thực và quản lý phiên: Những chức năng
của ứng dụng liên quan đến sự chứng thực và sự quản lý phiên làm việc thường
không khởi tạo đúng, cho phép tin tặc tấn công mật khẩu, khóa và token của
phiên làm việc hoặc khai thác lỗ hổng từ những sự khởi tạo này để gán định danh
một người sử dụng khác.
7. Cấu hình bảo mật không an toàn: là lỗi liên quan đến
việc đặt cấu hình cho ứng dụng, framework, máy chủ web, ứng dụng máy chủ và
platform sử dụng những giá trị thiết đặt mặc định hoặc khởi tạo và duy trì
những giá trị không an toàn.
8. Chuyển hướng và chuyển tiếp không được kiểm tra: Nhiều
ứng dụng thường xuyên chuyển tiếp hoặc chuyển hướng người sử dụng đến những
trang hoặc những website và sử dụng những dữ liệu chưa tin tưởng để xác định
những trang đích. Không có sự kiểm tra phù hợp, tin tặc có thể chuyển hướng nạn
nhân đến các trang giả mạo hoặc các trang có chứa mã độc, hoặc chuyển tiếp đến
các trang web đòi làm thủ tục xác thực nhằm đánh cắp thông tin cá nhân.
9. Lưu trữ mã hóa không an toàn: Ứng dụng web không có cơ
chế bảo vệ hoặc tuy có cơ chế mã hóa và hashing (băm) dữ liệu để lưu trữ nhưng
sử dụng không đúng cách đối với những dữ liệu quan trọng, như là thông tin thẻ tín
dụng, thông tin cá nhân và những thông tin chứng thực. Do đó tin tặc có thể lợi
dụng những kẽ hở này để đánh cắp những dữ liệu cần được bảo vệ.
10. Thiếu sự bảo vệ lớp vận chuyển: Các ứng dụng không mã
hóa dữ liệu khi truyền những thông tin quan trọng, hoặc nếu có mã hóa thì lại
chỉ có thể sử dụng các chứng thực hết hạn hoặc không hợp lệ.
PHỤ LỤC 2
THÔNG TIN
THAM KHẢO VỀ CÁC TƯỜNG LỬA
1. Firewall cứng
+ Checkpoint (http://www.checkpoint.com)
+ Juniper (http://www.juniper.net)
+ Cisco (http://www.cisco.com)
+ Endian (http://www.endian.com)
+ Astaro (http://www.astaro.com)
2. Firewall mềm
- Bản thương mại:
+ Microsoft Internet Security and Acceleration (ISA) Server (http://www.microsoft.com)
- Bản miễn phí (mã nguồn mở):
+ netfilter/iptables (http://www.netfilter.org)
+ pfSense (http://www.pfsense.org)
+ IPCop (http://www.ipcop.ors)
+ ShorewalI (http://shorewall.net)
+ SmoothWall (http://www.smoothwall.org)
+ Vyatta (http://www.vyatta.org)
3. Web Application Firewall (WAF)
- Các phiên bản mã nguồn mở WAF phổ biến:
+ WebKnight (http://www:aqtronix.com/?PageID=99)
+ ModSecurity (http://www.modsecurity.org)
+ URLScan (http://www.iis.net/download/urlscan)
Ngoài ra còn các bản WAF thương mại nổi tiếng sau:
+ Hyperguard (http://www.artofdefence.com/en/products/hyperguard.html)
+ WebDefend (http://www.breach.com/products/webdefend.html)
+ DotDefender (http://www.applicure.com/)
+ NetScaler application fìrewalls (http://www.citrix.com)
+ Eeye’s SecurelIS (http://www.eeye.com/Products/SecurelIS-Web-Server-Security.aspx)
+ Appwall (http://www.radware.com)
ModSecurity: là phần mềm nguồn mở có thể hoạt động như một module
trong máy chủ Apache hoặc là một thành phần độc lập. ModSecurity sử dụng biểu
thức chính quy trong việc bảo vệ máy chủ web từ các cuộc tấn công được xác định
trước dựa theo các dấu hiệu hoặc các cuộc tấn công bất thường khác. Bên cạnh
đó, ModSecurity cũng có khả năng lọc các siêu ký tự do người dùng chèn vào ứng
dụng web. Toàn bộ quá trình cài đặt và cấu hình có thể tham khảo thêm tại: http://www.modsecurity.org/documentation
URLScan: là một sản phẩm của Microsoft dành riêng cho các máy
chủ web IIS. URL scan không chỉ bảo vệ máy chủ IIS 6 khỏi các điểm yếu từ các
phiên bản cũ hơn mà còn cung cấp thêm các biện pháp bảo vệ khác như lọc dữ liệu
mã hóa trên URL hoặc lọc các siêu ký tự do người dùng chèn vào để chống lại các
loại tấn công như XSS, SQL Injection, v.v... Tham khảo cách cài đặt và sử dụng
URLScan tại: http://www.iis.net/download/urlscan
PHỤ LỤC 3
THÔNG TIN
THAM KHẢO VỀ CÁC PHẦN MỀM CHỐNG VIRUS VÀ BẢO VỆ AN TOÀN MÁY TÍNH CÁ NHÂN
1. Bản sản xuất trong nước:
+ BKAV (http://www.bkav.com.vn)
+ CMC AntiVirus (http://www3.cmcinfosec.com)
2. Bản thương mại nước ngoài:
+ AirScanner (www.airscanner.com)
+ BitDefender (www.bitdefender.com)
+ Computer Associates (www.ca.com)
+ F-Secure (www.f-secure.com)
+ Kaspersky (www.kaspersky.com)
+ McAfee (www.mcafee.com)
+ Symantec (www.symantec.com)
+ Trend Micro (trendmicro.com)
+ Avast (www.avast.com)
+ Avira (www.avira.com)
3. Bản miễn phí:
+ Avast Free AntiVirus (http://www.avast.com)
+ Avira AntiVir Personal Free (http://www.avira.com)
+ Microsoft Security Essentials (http://www.microsoft.com)
+ Panda Cloud AntiVirus (http://www.pandasecurity.com)
+ Comodo Internet Security (http://comodo.com)
+ AVG AntiVirus (http://www.free.avg.com)