Các ứng dụng AJAX có để lại lỗ hổng cho hacker tấn công?

Bài này sẽ giới thiệu tổng quan về các công nghệ AJAX, lấy ví dụ cụ thể với JavaScript và dẫn chứng một số lớp lỗ hổng chủ yếu đang ngày càng thu hút mối quan tâm của các nhà phát triển, chủ sở hữu Website, cũng như các vị khách ghé thăm. Giải pháp được đưa ra là kiểm tra ứng dụng nền tảng AJAX và JavaScript với chương trình rà soát lỗ hổng không chỉ phân tích mã nguồn HTML để xác định JavaScript nhúng vào mà còn có thể thực thi tất cả các đoạn mã nguồn. Tự động hoá quá trình phân tích cũng là yếu tố then chốt nằm trong quá trình phân tích và xem xét, vì tính tổng hợp cho các ứng dụng Web ngày càng tăng.

1. AJAX và JavaScript

1.1. Giới thiệu về công nghệ

Công nghệ Web 2.0 và AJAX (Asynchronous JavaScript Technology and XML) ngày càng thu hút được sự quan tâm của giới doanh nghiệp trên khắp thế giới.

Một trong những lý do chính khiến sự phổ biến của AJAX ngày càng tăng là ngôn ngữ kích bản dùng trong JavaScript của nó. Ngôn ngữ này cho phép tạo các form động cho hoạt động kiểm tra lỗi tích hợp sẵn, tạo các vùng tính toán trên trang Web, tương tác với người dùng thông qua cảnh báo và kiểm chứng thông tin, có thể thay đổi thường xuyên chương trình nền và màu sắc văn bản hay “các nút”, đọc URL history và đưa ra hành động dựa trên danh sách đó, mở và điều khiển các cửa sổ, cung cấp văn bản hoặc các phần trong văn bản khác nhau theo yêu cầu người dùng.

AJAX không phải là một công nghệ. Nói chính xác hơn, nó là một tập hợp các công nghệ, trong đó mỗi công nghệ cung cấp một hệ thống cơ sở nền tảng cho thiết kế và phát triển ứng dụng Web:

<!--[if !supportLists]--><!--[endif]-->XHTML hay HTML và Cascading Style Sheets (CSS) cung cấp các tiêu chuẩn thể hiện nội dung trang Web với người dùng.

<!--[if !supportLists]--><!--[endif]-->Document Object Model (DOM) cung cấp cấu trúc cho phép hiển thị động nội dung và các tương tác liên quan. DOM mở ra nhiều cách thức mạnh cho người dùng khi muốn truy cập và thao tác với đối tượng nằm trong một văn bản bất kỳ.

<!--[if !supportLists]--><!--[endif]-->XML và XSLT cung cấp kiểu định dạng cho dữ liệu, để dữ liệu có thể được thao tác, truyền tải hoặc trao đổi giữa máy chủ (server) và máy khách (client).

<!--[if !supportLists]--><!--[endif]-->XML HTTP Request: Điểm bất cập lớn nhất trong xây dựng ứng dụng Web là mỗi lần một webpage được tải về trình duyệt của người dùng, kết nối server liên quan sẽ bị cắt. Hơn nữa, đường dẫn bên trong trang còn đòi hỏi phải thiết lập một kết nối khác với server và tải về toàn bộ trang cho dù người dùng chỉ muốn mở rộng một đường link đơn giản. XML HTTP Request cho phép truy vấn dữ liệu không đồng bộ và đảm bảo các trang web không bị load trở lại khi thay đổi trong yêu cầu người dùng ở mức nhỏ nhất.

<!--[if !supportLists]--><!--[endif]-->JavaScript (JS): là ngôn ngữ kịch bản hợp nhất các đối tượng để hoạt động với nhau một cách hiệu quả, do đó giữ vai trò đáng kể trong ứng dụng web.

Chính bởi các thành phần này mà khi nói đến AJAX người ta thường nghĩ đến khả năng tương tác cao, tốc độ nhanh và dễ dùng. Công nghệ trong AJAX phong phú hơn nhiều và rất thân thiện cho người dùng, vì các ứng dụng Web được thiết kế tương tự ứng dụng để bàn “truyền thống” như Google Docs and Spreadsheets, Google Maps hay Yahoo! Mail.

Khởi đầu một phiên hoạt động, thay vì tải về trang Web yêu cầu, cơ chế AJAX viết trong JS sẽ được load. Hoạt động giống như “người trung gian”, cơ chế này nằm giữa người dùng và Web Server. Nó cũng đóng vai trò như một giao diện gợi nhớ và như một phương tiện truyền thông cho trình duyệt trên máy khách và máy chủ.

Điểm khác nhau chính là tính năng mang lại nổi bật rất dễ nhận thấy. Khi gửi một yêu cầu (request) tới Web Server, một thông báo các thành phần riêng của trang đang được update độc lập (không đồng bộ) và cần phải chờ đến khi toàn bộ trang hoạt động, yêu cầu mới được đáp ứng (đồng bộ).

Trước đây, nếu muốn đọc e-mail bạn phải trải qua một loạt cú kích chuột và gửi, truy vấn một loạt các khung tạo nên giao diện hiển thị nhiều e-mail người dùng khác nhau. Điều này thực sự làm giảm đáng kể tốc độ truy cập và sử dụng ứng dụng Web. Với truyền tải không đồng bộ, ứng dụng AJAX hoàn toàn loại bỏ được thao tác “chạy-dừng-dừng-chạy” rất khó chịu vốn tồn tại tự nhiên trong tương tác trên Web. Yêu cầu gửi tới server bây giờ hoàn toàn rõ ràng và dễ hiểu với người dùng.

Một điểm đáng chú ý khác là tốc độ tải các thành phần khác nhau của website theo yêu cầu tương đối nhanh hơn. Việc này giúp giảm bớt một lượng đáng kể băng thông cần thiết cho từng yêu cầu vì trang web không còn cần tải lại toàn bộ nội dung.

Ngoài ra bạn còn có thể thêm hoặc xoá bản ghi, xem xét web form, tìm nạp truy vấn tìm kiếm và chỉnh sửa cây thư mục. Tất cả sẽ giúp ứng dụng Web hoạt động hiệu quả hơn, không đòi hởi phải có toàn bộ mã nguồn HTML của trang Web.

1.2. Các loại lỗ hổng

1.2.1. Lớp lỗ hổng AJAX

Mặc dù AJAX được đánh giá là bộ tập hợp công nghệ mạnh nhất, nhưng cũng không thể tránh khỏi các lỗ hổng bảo mật và nguy cơ ảnh hưởng xấu cho các ứng dụng AJAX.

Theo Pete Lindstrom, giám đốc chiến lược bảo mật của Hurwitz Group nói, ngày nay ứng dụng web là yếu tố để lại nhiều lỗ hổng nhất trong hạ tầng cơ sở công nghệ thông tin. Con số các tổ chức (cả lợi nhuận và phi lợi nhuận) lệ thuộc vào ứng dụng nền tảng Internet ngày càng tăng chứng tỏ sức mạnh và ảnh hưởng của AJAX ngày càng lớn. Nhóm các công nghệ này trở nên tổng hợp hơn, cho phép thực hiện theo chiều sâu với nhiều tính năng tiện dụng. Nhưng nếu các tổ chức không có biện pháp bảo vệ ứng dụng web của mình, nguy cơ bảo mật luôn rình rập và khả năng nguy hiểm chỉ có tăng mà không có giảm là điều không tránh khỏi.

Tương tác trong ứng dụng web ngày càng tăng, tức là ngôn ngữ XML, văn bản, lưu lượng mạng HTML chung cũng ngày càng phong phú. Điều này thường dẫn đến sơ hở trở thành lỗ hổng vốn không có trước đó. Hoặc nếu không có đủ chương trình bảo vệ mặt server, bạn sẽ tạo kẽ hở, cho phép người dùng chưa qua thẩm định khả năng thao tác với cấu hình đặc quyền của họ.

Có một quan niệm sai lầm phổ biến cho rằng ứng dụng AJAX an toàn hơn vì mặc dù người dùng không thể truy cập vào kịch bản (script) lớp server khi không có giao diện người dùng được hoàn trả lại. Thực tế, các ứng dụng web dựa trên nền tảng XML HTTP Request làm mờ đi script lớp server, khiến những người phát triển và sở hữu website có cảm nhận sai lầm về bảo mật: tưởng an toàn mà không an toàn. Do yêu cầu XML HTTP thực hiện chức năng thông qua cùng kiểu giao thức như tất cả mọi thành phần còn lại trên web (HTTP), chức năng phát biểu kỹ thuật nên các ứng dụng Web nền tảng AJAX có cùng kiểu lỗ hổng và cùng có thể bị phá theo phương thức như các ứng dụng “bình thường” khác.

Hậu quả là lỗ hổng trong quản lý phiên ngày càng tăng cùng với mức nguy hiểm lớn hơn khiến hacker thâu tóm được quyền truy cập của nhiều đường dẫn URL ẩn cần thiết cho các yêu cầu AJAX được thực hiện.

Một điểm yếu khác ở AJAX là chương trình công thức hoá yêu cầu server. Cơ chế hoạt động của AJAX là sử dụng JavaScript (JS) để đóng gói lệnh người dùng và chuyển chúng thành lời gọi hàm. Các lời gọi hàm này được gửi tới server dưới dạng văn bản thuần tuý và có thể dễ dàng để lộ ra các trường bảng cơ sở dữ liệu như tên sản phẩm, mã số ID người dùng hay thậm chí cả tên biến quan trọng, kiểu dữ liệu hợp lệ hay giới hạn phạm vi kiểu dữ liệu hay bất kỳ tham số nào khác có thể bị hacker lợi dụng và thao tác.

Với thông tin này, hacker có thể dễ dàng sử dụng các hàm AJAX mà không cần đến giao diện, bằng cách mô tả thủ công yêu cầu HTTP trực tiếp tới server. Trong trường hợp hacker sử dụng cross-site scripting, các kịch bản độc hại có thể khiến AJAX cung cấp thêm nhiều tính năng hoạt động với vai trò như một người dùng thực thụ, do đó lừa đảo người dùng với mục đích cuối cùng là định hướng lại đường dẫn phiên hoạt động (như trong phishing) hoặc giám sát lưu lượng mạng.

1.2.2. Lớp lỗ hổng JavaScript

Mặc dù nhiều website phân phối thành phần tương tác qua JavaScript, nhưng việc sử dụng rộng rãi công nghệ này cũng đem lại nhiều mối lo bảo mật nguy hiểm cần cảnh giác.

Trước đây, hầu hết mọi vấn đề bảo mật đều xuất phát từ các sâu (worm) và đích nhắm đến các hệ thống thư điện tử hoặc khai thác điểm yếu thông qua Cross Site Scripting (XSS). Các sâu tự sinh sản này đưa mã nguồn độc hại vào website với mục đích dụ dỗ cho trình duyệt Web hoặc khách hàng đọc e-mail rồi phân tích hoặc thực thi chúng để lây lan vào hệ thống và thao tác, thậm chí đơn giản hơn chỉ là truy vấn dữ liệu người dùng.

Khi trình duyệt Web và các tính năng kỹ thuật của chúng tiếp tục được phát triển, mã độc hại cũng được cải tiến không ngừng. Các hình thức cũ được gia công, sửa chữa tăng cường trong khi nhiều mối bận tâm bảo mật mới liên quan đến JavaScript và AJAX liên tục xuất hiện. Kỹ thuật nâng cao này xuất hiện vào cùng thời điểm diễn ra bước chuyển đáng kể trong mục đích lâu dài của hacker: từ phá hoại để khoe danh (như deface website) sang mục tiêu kinh tế (trộm dữ liệu doanh nghiệp, mã số thẻ tính dụng, …) với siêu lợi nhuận thu được từ thị trường đen.

Các sâu XSS ngày càng thông minh với khả năng phá hoại ngày càng cao như thực hiện các cuộc tấn công từ chối dịch vụ (DoS) trên mạng diện rộng, phát tán thư rác mà tấn công e-mail, khai thác dữ dội lỗ hổng trình duyệt. Gần đây người ta phát hiện ra rằng, loại sâu này còn có thể sử dụng JavaScript để ánh xạ mạng gia đình hay mạng doanh nghiệp và ngay lập tức khiến thiết bị trên mạng (máy in, router, thiết bị lưu trữ) lộ ra lỗ hổng để tấn công.

Kết quả sau các cuộc tấn công tinh vi này thường là hacker định vị được vị trí tài nguyên quý giá trên mạng để nhúng mã độc hại JavaScript vào bên trong trang Web nội bộ hoặc một ứng dụng AJAX bất kỳ được dùng công cộng để thu dữ liệu.

Vấn đề là cho đến giờ, hầu hết các công cụ chuyên dụng để quét ứng dụng Web đều gặp phải vấn đề nghiêm trọng trong kiểm tra các trang nhúng JavaScript. Ví dụ, JS lớp client đòi hỏi phải có can thiệp thủ công lớn (chứ không được cấu hình tự động) mới hoạt động ổn định.

2. Cơ chế JavaScript của Acunetix WNS

Acunetix WVS v4.0 được trang bị thêm thành phần Acunetix Client Script Analyzer (bộ phân tích kịch bản client Acunetix) với cơ chế phân tích cú pháp mã nguồn JavaScript hoàn toàn tự động, đáp ứng được yêu cầu thông thường khi “luồn” và theo các liên kết JS một cách thủ công.

Để thực thi rà soát lỗ hổng, Acunetix WVS sẽ tái tạo hoạt động can thiệp thủ công của chương trình kiểm tra xâm nhập (theo nguyên tắc hacking). Trước tiên là “luồn” qua website và các ứng dụng Web để xác định cấu trúc thư mục của nó.

Bất kỳ trình duyệt Web tiêu chuẩn nào cũng có cơ chế JavaScript thông dịch và thực thi các đoạn JS nhúng trong trang HTML. Acunetix WVS cũng hoạt động theo phương thức tương tự, như một cơ chế JS.

Khi một văn bản tải về trình duyệt Web, các thẻ HTML được phân tích cú pháp để hoàn lại khả năng trực quan cho các đối tượng khác nhau của trang người dùng yêu cầu. Cùng thời gian đó, bất kỳ JavaScript nào đang được thực thi cũng cho phép kích hoạt sự kiện và hoạt động bên trong trang hiển thị cho người dùng. Một số sự kiện và hoạt động đòi hỏi sự can thiệp của người dùng, nhưng nhiều sự kiện khác thì không (ví dụ: ẩn script, hoặc thực thi script mà không có sự can thiệp của người dùng).

Tương tự, Acunetix WVS cũng sẽ tải trang phân tích cú pháp mã nguồn HTML nằm bên trong và thực thi tất cả sự kiện, hoạt động tìm thấy trên trang bị xâm nhập. Acunetix WVS sẽ tái tạo lại hầu hết tất cả giao diện Internet Explorer của Microsoft sử dụng cơ chế JavaScript và cũng cung cấp hầu hết chức năng tự động tương tự có trong trình duyệt Web.

Nâng cao chính ở Acunetix WVS là thực thi thật sự các script khi hầu hết chương trình quét ứng dụng Web ngừng phân tích cú pháp JS trên trang Web. Thực thi này trở nên rất quan trọng do nó cho phép kiểm tra chuyên sâu hơn các ứng dụng Web AJAX và JavaScript. Acunetix WVS có thể còn nhiều khiếm khuyến khác nằm sâu bên trong lõi của trang Web.

CSA sẽ xác định vị trí chính xác của tất cả các script khác nhau chứa nội dung bên trong và các tham chiếu thích hợp tới đối tượng, sự kiện hay hoạt động. CSA cũng thực thi tất cả script tìm thấy trên các trang, từ những trang được kích hoạt qua can thiệp của người dùng (như OnClick, OnChange) hay kích hoạt từ hệ thống (như OnLoad, OnUnload). Acunetix CSA cũng sẽ thực thi các script ẩn trong quá trình phân tích HTMLdo chúng có tác động lên chính quá trình phân tích. (Các script này thực sự xác định cấu trúc của trang).

HTML
|
+- HEAD
|
+- BODY
|
+- P
|
+- A
|
+- IMG

Sau khi phân tích trang, CSA sẽ kích hoạt tất cả các sự kiện còn lại được ghi nhận trong quá trình thực thi kịch bản. Quá trình kích hoạt diễn ra theo thứ tự đường dẫn Web logic. Ví dụ, một người dùng không thể ấn nút gì cho đến khi trang được tải về xong. Do đó, ‘OnClick’ sẽ luôn theo sau ‘OnLoad’.

Để xác định chính xác ứng dụng Web AJAX nào chứa lỗ hổng, Acunetix WVS sẽ khởi chạy chương trình tấn công thông qua phân tích mã nguồn (như đã giải thích ở trên), thực tế giống như một hacker. Hacker thực thụ tất nhiên sẽ không dừng lại ở mức đơn giản chỉ là quan sát mã nguồn. Họ sẽ thực thi thực sự mã độc hại, thâm chí thực hiện các chính sửa đổi ‘cần thiết’ để gây nên tình huống thuận lợi cho họ. Hiệu quả của chương trình rà soát Acunetix dựa trên kỹ thuật giống hacker dùng để thao tác cấu trúc AJAX nhằm thực hiện các kiểu Cross-site Scripting (XSS), hay SQL injection, giám sát lưu lượng, chặn phiên...

Các ứng dụng Web nền tảng AJAX sẽ được trả lại vào một trình duyệt Web theo kiểu modul. Phần tử đơn và sự kiện trên web page có thể được tải về và làm mới một cách riêng rẽ. Do đó, các ứng dụng này có thể chèn thêm và thao tác với dữ liệu nhiều hơn. Một chương trình kiểm tra xuyên suốt với Acunetix WVS giúp giảm đáng kể nhiều nguy hiểm tổng hợp, vì CSA sẽ phân tích và thực thi tất cả script. Các nhà phát triển được cung cấp thông tin chính xác hơn về lỗ hổng và có thể tiến đến cần thực hiện thay đổi và sửa chữa cần thiết.

Nếu không có quá trình thông dịch và thực thi chính xác JavaScript trong ứng dụng AJAX, chương trình rà soát lỗ hổng chỉ có thể kiểm tra giới hạn ứng dụng Web theo cách thức mở rộng chứ không thực hiện được trên từng thành phần riêng biệt.

3. Tóm tắt và kết luận

Quá trình phát triển nhanh chóng của công nghệ Web đang có xu hướng tăng cường tính hiệu quả, nhanh mà thuận tiện và tăng cường cả tính tương tác. Tuy nhiên, chính quá trình này cũng làm tăng nguy cơ bảo mật cho doanh nghiệp và các nhà phát triển Web phải đối mặt với nó hằng ngày.

Với các cổng công cộng 80 (HTTP) và 443 (HTTPS) luôn mở để cho phép nội dung động phân phối và trao đổi, website luôn ở trong tình trạng có thể mất dữ liệu và bị deface (làm biến dạng nội dung trang Web) bất cứ lúc nào. Nhưng nếu kiểm tra thường xuyên, đều đặn thông qua chương trình quét ứng dụng Web đáng tin cậy, nguy cơ này giảm đi đáng kể. Khi tính tổng hợp của công nghệ tăng lên, kèm theo đó các khuyếm khuyến trên website cũng trở nên nghiêm trọng hơn và lỗ hổng thì nhiều hơn.

Những cải tiến của các ứng dụng AJAX khiến nhiều vấn đề bảo mật quan trọng đáng xem xét cũng tăng. lên theo với nguy cơ ngày càng lớn. Quá trình thực thi script và thông tin trao đổi trên yêu cầu server/client tăng đem lại cơ hội lớn hơn cho hacker để ăn trộm dữ liệu. Hoạt động của chúng khiến nhiều tổ chức mất hàng nghìn đô la thu nhập, giảm sút niềm tin của khách hàng, đe doạ lớn đến danh tiếng và tín nhiệm của tổ chức.

Giải pháp tốt nhất nhằm đem lại hiệu quả cao trong công tác bảo mật ở đây là sử dụng chương trình quét rà soát lỗ hổng, tự động “chui qua” website để xác định khiếm khuyết. Tuy nhiên, nếu không có cơ chế phân tích cú pháp và thực thi JavaScript, hoạt động của chương trình quét sẽ thiếu chính xác và mạng lại cảm nhận sai về an toàn bảo mật cho chủ sở hữu website.

Acunetix Client Script Analyzer với thành phần chính là Acunetix WVS, có thể xác định được kiểu đối tượng văn bản, sự kiện và hoạt động của website và thực thi tất cả kịch bản nhúng trên website đó. Đây là phương thức rà soát web duy nhất nâng cao đáng kể chất lượng quét lỗ hổng ở các chương trình scanner.

Thứ Tư, 28/03/2007 10:07
31 👨 749
0 Bình luận
Sắp xếp theo