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.