Bài học này được chia làm 2 phần chính, với mục đích là giới thiệu cho các bạn hiểu một số cách thức mà hacker sử dụng để thâm nhập vào hệ thống và một số phương pháp có thể áp dụng để tự bảo vệ bạn. Bài học này cũng ko có ý định hướng bạn đến một cái nhìn xấu về hành vi của hacker mà mục đích là giúp bạn hiểu rõ hơn về vấn đề an toàn bảo mật.
Cụ thể như sau:
1- Các hacker đã làm như thế nào, động cơ thúc đẩy họ và các phương pháp thông dụng
2- Một số biện pháp tự bảo vệ, bắt đầu từ việc thiết kế, xây dựng ngôi nhà của bạn đến việc đánh giá, tìm hiểu rõ hơn về các quá trình nhận dạng xâm nhập, tự bảo vệ...
Chúng ta sẽ đi từng bước một. Ở đây tôi sẽ cố gắng tóm lược mà ko đi quá sâu vào chi tiết nhằm tạo bài học sáng sủa dễ hiểu.
I. PHÍA HACKERS
1- Mục đích và động cơ của hackers:
- Đạt mục đích gì đó liên quan đến tiền bạc, như thay đổi thông tin về tài khoản trong ngân hàng, chuyển tiền, trộm credit card...
- Giải trí khi rảnh rỗi, thử tay nghề, chứng tỏ khả năng , kiểm tra mức độ bảo mật...
- Làm yếu đi hoặc giảm khả năng chống cự của các hệ thống trên mạng, giúp dễ dàng cho việc xâm nhập khai thác theo mục đích nào khác...
- Tận dụng các tài nguyên trên mạng như đĩa cứng, tốc độ CPU, dung lượng đường truyền mạng...Hacker có thể lợi dụng sơ hở của 1 server để chiếm một vùng ko gian đĩa free trên nó để chứa dữ liệu của mình, hoặc lợi dụng tốc độ CPU và bandwidth của các server (thường rất nhanh) để làm vào việc khác như tính toán..., thậm chí dùng để DoS các server khác...
- ...
Từ những mục đích trên, bạn cần hiểu rõ bản thân hệ thống bạn đang kiểm soát. Có những vấn đề đặt ra như sau:
- Bạn đang nắm giữ và bảo vệ cái gì, mức độ quan trọng của chúng?
- Cách thức nào người ta có thể tìm cách tấn công, trộm thông tin hay thậm chí phá hủy thông tin của bạn?
- Mức độ khó mà hacker sẽ gặp phải, họ thành công đến mức độ nào?
- Mức độ ảnh hưởng nghiêm trọng thế nào nếu hacker thành công?
Việc hiểu rõ và đánh giá đúng chính mình cũng như khả năng của đối phương có thể giúp bạn hạn chế tối đa khả năng bị tấn công. Có một điều bạn phải hiểu nó như một yếu tố khách quan, tất yếu là "Mọi hệ thống phức tạp sớm muộn cũng sẽ gặp rắc rối", vì đơn giản là các hệ thống đó cho bàn tay và trí tuệ con người tạo ra, mà con người thì ko ai hoàn hảo cả. Nếu bạn chú ý sẽ biết trong thời gian vừa qua, các hệ thống được xem vào hàng đại gia trên net đều đã từng được viếng thăm, như Microsoft, Oracle, eBay, NASA, CIA, các cơ quan liên bang USA, các hệ thống ngân hàng lớn trên thế giới...Security liên tục được cải thiện, và bên cạnh đó thì lỗi, lổ hổng cũng ko ngừng đựơc phát hiện.
2- Một số cách thức hacker dùng để xâm nhập
Về cơ bản, để có thể tiến hành thâm nhập vào hệ thống, các hacker thường phải qua những bước sau. Lưu ý các bước tôi trình bày ở đây không bắt buộc phải được thực hiện tuần tự mà tùy vào điều kiện và ngữ cảnh để áp dụng cho thích hợp. Các công cụ trình bày ở đây các bạn cần tìm hiểu cách sử dụng, tôi sẽ không trình bày chi tiết.
a. Xác định mục tiêu - Footprinting
Bước này tương đối đơn giản. Tuy nhiên đối với hacker thật sự muốn tìm cách thâm nhập vào 1 hệ thống thì bước này rất cần thiết. Càng thu thập được nhiều thông tin liên quan đến mục tiêu càng tốt. Ví dụ như muốn thâm nhập trang web của 1 công ty nào đó, điều đầu tiên các hacker thường dùng là xác định host, domain (nếu là website); dùng các công cụ như WhoIS, Ping, ICMP (nMap, Fping)..để tìm hiểu các thông tin liên quan đến host/domain như vị trí, các Domain Name Records..Ví dụ từ domain name, ta có thể ping để biết được nó host ở đâu với IP cụ thể là gì...; hoặc tìm hiểu cấu trúc mạng của đối phương sử dụng các phương pháp routing (traceroute) và SNMP data.
Kế đến là dạo quanh web site, tìm hiểu cấu trúc website, tìm cách download source code (bằng các trình như Teleport Pro, Intellitamper....download tại đây), vì từ đó có thể biết được các thông tin mà người chủ cố tình hoặc vô tình để hở như tên liên lạc, emails, số điện thoại, các thông tin liên quan đến bảo mật (như cơ chế an toàn, ngôn ngữ lập trình..); các liên kết liên quan đến website...
Việc dạo và xem cấu trúc website đôi khi sẽ cho ta cái nhìn tổng quan về bảo mật của site đó, nếu may mắn ta có thể tìm được lỗi (thường là lỗi lập trình, lỗi thiết lập access right/chmod chưa đúng..) trên các webpage, liên kết.
Các search engine như Google, AltaVista...cũng có thể trở thành công cụ rất hữu ích trong quá trình này. Ví dụ search trên Google để tìm các trang dùng asp, có trang quản lý của admin và giới hạn ở các site ViệtNam, ta có thể search theo từ khóa: "/admin/ asp site:.com.vn" hoặc "admin.asp login.asp site:.com.vn" ..Ví dụ search trên AltaVista để tìm các link liên quan đến site
www.hcm.fpt.vn, ta có thể dùng từ khóa "link:
www.hcm.fpt.vn AND anydata"
Đây là một ví dụ điển hình về kết quả đạt đựơc khi tìm hiểu về website: <http://www.yes.com.vn>
Lần dạo đầu tiên qua site này điều đầu tiên nhận thấy là họ dùng ASP để thiết kế. Tuy nhiên tôi chưa vội quan tâm đến việc tìm lỗi liên quan đến nó mà chú ý đến mục Hội viên và Đăng nhập hội viên, đây là vùng riêng của các member tham gia webiste. Cụ thể là tại <http://203.162.1.201/hoivien/index.asp?Lang=4> , điều tôi hay làm là thử download cấu trúc website dùng Intellitamper. Kết quả sau khi download của IT là rất nhiều file asp, ở đây tôi quan tâm đến thư mục /hoivien/ vì trang đăng nhập nằm ở thư mục này. Trong thư mục này kết quả cho thấy có 6 file asp, trong đó có file hvshow.asp làm tôi quan tâm. Tôi chạy thử nó trên browser <http://203.162.1.201/hoivien/hvshow.asp> , kết quả cho thấy bên cạnh thông báo đăng kí là thông tin của hội viên thứ 1 với login name là yesco, tên là DuongMinh và 1 số thông tin khác. Nghĩ đến việc đoán password, tôi quay trở lại trang login lúc nãy và thử đăng nhập vào với login name là yesco, pass là duongminh. Không thành công! pass là duong cũng fail! pass là minh! Thành công! Bạn là Hội viên Vàng...Sau đó tôi xem qua 1 chút và cẩn thận logout. Ví dụ này tôi đưa ra với mục đích giúp các bạn hiểu 1 trong các bước cơ bản đầu tiên trong quá trình hacking. Hy vọng các bạn khi thử thành công không nên làm ảnh hưởng đến dữ liệu của người khác.
Xem thêm tại đây
b. Thu thập thông tin về mục tiêu - Scanning, Enumeration
Bước này thật ra tương tự bước đầu tiên (Footprinting) nhưng ở mức độ chi tiết và nâng cao hơn.
- Tìm hiểu các dịch vụ (services) được dùng trên hệ thống đối phương, dò/quét các cổng (port) để tìm kiếm cổng hở, xác định dịch vụ dùng cho cổng này.
Một số công cụ thừơng được dùng như:
Nmap (
www.insecure.org/nmap) Netcat (download tại đây)
Strobe (packetstorm.security.com)
ISS (
www.iss.net) Các trình duyệt cổng hở và các tài nguyên chia xẻ (share) khác dùng cho Windows như Superscan(download tại đây), Sechole, Redbutton, Net Essential...
Quá trình duyệt cổng có thể cho ta biết được các dịch vụ web nào được sử dụng ở mục tiêu. Ví dụ như các cổng TCP: 139, 135 (NETBIOS), 110 (pop3), 80 (HTTP), 79 (Finger), 53 (domain), 25 (smtp), 21 (ftp)...Thậm chí cả hệ điều hành và webserver đựơc sử dụng ở mục tiêu.
Ví dụ với netcat, ta dùng lệnh sau: nc -v -z 203.162.1.1 1-255
Với nmap, ta dùng: nmap -sS 203.162.1.1/255 hay nmap -p80 -O 203.162.1.10
Các bạn tự tìm hiểu cách sử dụng các tool khác. Lưu ý các câu lệnh ví dụ ở đây chỉ mang tính chất tham khảo.
- Tìm hiểu các lỗi/lổ hổng bảo mật mà mục tiêu có thể mắc phải. Ta có thể tìm thông tin từ các website sau:
www.securityfocus.com www.l0pht.com www.microsoft.com/security packetstorm.security.com
...
Hoặc có thể đăng kí ở các mailing list để có thể nhận được các thông tin về security cập nhập nhất:
Buqtraq (
www.securityfocus.com) NTBugTraq (
www.ntbugtraq.com) Pen-Test (
www.securityfocus.com) ...
c. Tiến hành tấn công
- Khai thác điểm yếu của hệ thống, hệ điều hành
. Thử tìm cách truy xuất đến các dịch vụ của hệ thống dựa trên hoặc có liên quan đến các lỗi bảo mật
. Tìm hiểu các thông tin về lỗi bảo mật từ các nhà sản xuất hệ thống, tìm hiểu các thông tin patch/update tương ứng với version bạn đang nghiên cứu
- Khai thác điểm yếu của các ứng dụng dùng trên máy chủ - server
. Một số ứng dụng server có thể có lỗi như Microsoft IIS, Netscape Enterprise Server, Oracle, Apache...
- Khai thác điểm yếu của các ứng dụng client
. Tìm hiểu các lỗi về /cgi-bin, các lỗi về tràn bộ đệm
. Tìm hiểu các lỗi về javascript
. Tìm hiểu các lỗi về cookies
. Tìm hiểu các thiết lập mặc định của các ứng dụng web, vd như mật khẩu admin ngầm định của một số forum...
- Leo thang đặc quyền (Escalate Privileges), tôi chỉ mô tả một số cách có thể đạt được mục đích
. Theo dõi trên mạng (sniff) để tìm cách lấy các thông tin bảo mật của người dùng, vd như dùng các công cụ bắt gói tin (packet sniffer) để bắt các thông tin liên quan đến mật khẩu di chuyển trên mạng...
. Tìm cách lấy các SUID từ các chương trình quản lý nhưng khả năng kiểm tra các giá trị nhập vào hoặc các giá trị biên kém.
. Tìm hiểu các user (user ID) ko có mật khẩu, mật khẩu rỗng, hoặc các mật khẩu ngầm định
. Tìm kiếm các thông tin về mật khẩu trong các file trên hệ thống, dùng các công cụ crack pass nếu các file password đựơc mã hoá
. Tìm hiểu kĩ mối quan hệ giữa các máy trong hệ thống muốn thâm nhập, dò các sơ hở và tìm cách khai thác lan rộng ra khắp hệ thống.
Như vậy, leo thang đặc quyền là tìm cách nâng cao quyền hạn của mình trong hệ thống. Vi dụ từ user Guest hay Normal user trong hệ thống, hacker có thể tìm hiểu các sơ hở để từ đó bổ sung thêm quyền hạn cho mình, thậm chí đoạt quyền admin. Một ví dụ điển hình của leo thang đặc quyền trong quá trình khai thác lỗi của Hosting Controller, khi upload 1 exploit script lên 1 normal host, nếu sau đó ta tìm cách chuyển script đó vào thư mục admin của HC thì khi run nó sẽ có quyền admin.
- Mở rộng khai thác ra các hệ thống lân cận; xác định các mục tiêu kế tiếp bắt nguồn hoặc có liên quan đến mục tiêu ban đầu
. Dùng netstat -na để tìm hiểu các connection đến các máy khác
. Thử khả năng từ một máy trong mạng, kết nối đến máy khác có trust-relationship, nếu may mắn thì có thể thâm nhập được mà ko phải qua các quá trình kiểm tra gắt gao
. Tìm hiểu các file có trên hệ thống, chẳng hạn như các file trong *nix /etc/hosts, ssh/identity.pub ...
- Các bước khác tùy khả năng của bạn.
d. Xóa dấu vết (xóa log files..), tệ hơn có thể là phá hủy thông tin của hệ thống
3- Các mục tiêu và phương pháp hay dùng hiện nay
a. Các mục tiêu thuờng bị tấn công
- Unix và các biến thể từ nó: Linux, FreeBSD, Solaris, SCO..
- Các hệ thống Windows NT, 2k, XP, 9x...
- Các dịch vụ và máy chủ WWW
- Các ứng dụng web, forum...
- Trộm mật khẩu của các dịch vụ web như các web e-mail, instant messenger...
b. Các kiểu tấn công thông dụng
- Tấn công làm ngập đường truyền mạng (flood), tấn công từ chối dịch vụ (Distributed Denial of Service)
- Tấn công dạng local - cục bộ
- Tấn công remote - từ xa
- Tấn công dạng điều khiển dữ liệu - data driven
Bây giờ tôi sẽ phân tích chi tiết hơn về các kiểu tấn công ở trên.
b.1 Tấn công từ chối dịch vụ (DoS)
- Feature driven
SYN flooding
- Inappropriate configurations
SMURF
- Programming flaws
Teardrop
- Distributed DoS: DoS tập thể 1 mục tiêu từ nhiều hướng, nhiều máy
....(Sẽ biên soạn và bổ sung sau)
Xem thêm tại đây.
b.2 Tấn công dạng local - host based
- Khai thác các lỗi tràn bộ đệm
Cách hạn chế: Quản lý tốt bộ nhớ, stack; cập nhật các bản sửa lỗi; lập trình kĩ càng và tốt hơn.
- Khai thác các điểm yếu trong việc kiểm tra điều kiện thực thi của các ứng dụng
Cách hạn chế: Lập trình kĩ và tốt hơn
- Dùng trojan, backdoor, virus...
Cách hạn chế: Kiểm tra kĩ càng các chương trình lạ trứơc khi thực hiện, sử dụng các trình diệt virus thông dụng và thường xuyên cập nhật
- Crack password
Cách hạn chế: Dùng các kĩ thuật mã hóa cao hơn, hạn chế số lần thử mật khẩu ở các login form
- Đăng nhập vào hệ thống kiểu vật lý bằng cách khởi động từ đĩa mềm hoặc một hệ điều hành song song khác
Cách hạn chế: Tăng cường các biện pháp bảo vệ các thiết bị
Xem thêm tại đây
b.3 Tấn công dạng remote - network based
- Khai thác các lỗi tràn bộ đệm
Cách hạn chế: Tương tự như ở local
- Tấn công nhiễm độc tên miền (DNS Cache poisoning)
Cách hạn chế: Dùng cache timeout, DNSSEC, Non-Caching Servers
- Tấn công vào lỗi/lổ hổng của website.
Cách hạn chế: Cập nhật các bản sửa lỗi mới nhất, thiết lập cấu hình chính xác, điều chỉnh các quyền hạn, thiết kế và viết mã website tốt.
- Khai thác các tên đăng nhập, mật khẩu yếu; tức là các mật khẩu ngầm định, quá ngắn, dễ đoán; hoặc các dạng đăng nhập có cơ chế kiểm tra sơ hở, ko kiểm tra số lần thử password...làm dễ crack bằng dictionary, bruteforce...
Cách hạn chế: Tăng cường kiểm tra số lần thử password (vd sẽ ko cho tiếp tục đăng nhập nếu số lần nhập sai password quá 5 lần..), giới hạn chiều dài password tối thiểu, tăng cường mã hóa bằng các giải thuật tốt...
- Khai thác từ các thông tin chia sẻ (sharing) như SMB/NetBIOS, NFS
Cách hạn chế: giới giạn quyền hoặc tắt share, nâng cấp hệ thống file có khả năng bảo mật cao hơn như NTFS, HPFS...
b.4 Tấn công dạng điều khiển dữ liệu - data driven
- Khai thác sơ hở của các đối tượng dữ liệu dùng phía server, các mã Java, Javascript, VBScript, Perl, PHP..., các ActiveX control.
- Dùng cửa sau (backdoor), trojan, virus
Vài thông tin về các backdoor:
Unix:
sshd
Windows: BackOffice 2k, DeepThroat (cổng UDP 2140, 3150), NetSphere (TCP 30100, 30102), GateCrasher (TCP 6969), GirlFriend (TCP 21554), Hack'a'Tack (TCP 31785; UDP 31789, 31791), EvilFTP (TCP 23456), SubSeven (TCP 1234)
- Khai thác sơ hở từ các cổng dịch vụ, các giao thức cấu hình sai hoặc có cơ chế bảo mật yếu.
Cách hạn chế chung dạng này: Cập nhật các bản sửa lỗi, fix lỗi; thiết lập cấu hình chính xác; dùng tường lửa (firewall, proxy), các trình antivirus.
II. PHÍA NHỮNG NHÀ QUẢN TRỊ HỆ THỐNG
Chúng ta sẽ đề cập đến một số phương pháp có thể giúp ích cho những nhà quản trị trong việc hạn chế và ngăn chặn sự tấn công của hacker
1- Thiết kế tốt hệ thống - Design
Một trong những nguyên nhân chủ yếu giúp hacker thành công trong việc hack vào các hệ thống là do bản thân sự yếu kém trong việc thiết kế hệ thống của những nhà quản trị. Một hệ thống được gọi là tốt phải là một sự phối hợp đồng nhất và hiệu quả của các thiết bị phần cứng (đường truyền mạng, router, server...) và phần mềm (OS, software...). Phần cứng phải được lựa chọn phù hợp; bố trí, cài đặt hợp lý và được bảo vệ cẩn thận. Phần mềm cài đặt và thiết cấu hình chính xác, cập nhật thường xuyên các bản sửa lỗi. Một điều quan trọng là chúng phải đựơc quản lý bởi người có kiến thức và kinh nghiệm.
Một số vấn đề ta cần quan tâm ở đây:
- Tường lửa
- Phân chia, bố trị mạng
- Kiểm tra thường xuyên các nỗ lực thâm nhập
...
2- Kiểm tra kĩ lưỡng hệ thống - Quality Assurance
...
3- Theo dõi các hành vi tấn công - Intrusion Detection
...
4- Các chính sách bảo mật và kết luận chung - Security Policies
...
III. NHỮNG CÔNG CỤ HỮU ÍCH
...