5. Một số lỗ hổng bảo mật Web Application
5.3 Lỗi Cross-site Request Forgery (CSRF)
5.3.1 Khái niệm
CSRF là kĩ thuật tấn công bằng phương pháp sử dụng quyền chứng thực của người dùng đối với một website, hacker có thể lợi dụng nó để thực thi những request với quyền chứng thực của người dùng.
CSRF được thực hiện thành công khi nạn nhân đã thực hiện xác thực với một Lợi dụng sự không chú ý của người dùng, hacker có thể gửi những đường link mà trong đó chứa mã độc thông qua email, đính kèm trên trang web…Khi nạn nhận click vào đường link hay mở email,.. thì những mã độc sẽ được thực thi quyền xác thực của nạn nhận, gây hậu quả cho nạn nhân mà họ không thể biết lúc click. Loại tấn công sử dụng kỹ thuật này thường dành cho người am hiểu về hệ thống, có thể là người từng phát triển ứng dụng đó, hoặc một mã nguồn mở, hoặc một mã nguồn nào đó đã được công khai code.
Hình 23. Quy trình tấn công CSRF
5.3.2 Các dạng tấn công
Tấn công qua phương thức GET và POST
5.3.3 Cách thức và phương pháp tấn công
a. Ngữ cảnh tấn công
- Cross-site request forgery (CSRF) đánh lừa nạn nhân load một page mà nó có chứa những request độc hại. Sự Request độc hại này có ý nghĩa là những request được thừa kế định danh và quyền hạn của nạn nhân nhằm mục đích thực thi một số chức năng(function). Những chức năng(function) này được nhân danh nạn nhân
- Ở một số Site, browsers có những request liên kết trực tiếp với site, như là user’s session cookie, basic authen credentials, IP address, Windows domain credentials, etc. Vì thế, nếu người dùng đã được xác thực ở tại một thời điểm nhất định thì site sẽ không xác định hay phân biệt được đâu là request của người dùng hợp lệ
- Ở một số trường hợp, CSRF có thể được lưu trữ (tồn tại) sẵn trong một số trang website bị lỗi. Những lỗi đó được gọi là stored CSRF flaws. Nó có thể tồn tại trong những thẻ <IMG> hay <IFRAME> trong một trang HTML hay
là một số kiểu tấn công cross-site scripting attack. Nếu tấn công CSRF là có sẵn trong site thì tính nghiêm trọng được tăng them gấp nhiều lần
Hình 24. Cách thức tấn công chung của tấn công CSRF
b. Ví dụ tấn công theo phương thức GET.
Trong CSRF, hacker sẽ đợi người dùng kết nối và thực hiện xác thực với một trang web mà họ tin tưởng (trusted server), và lừa người dùng click vào những đường link độc hại có đính kém những mã độc vào. Khi người dùng click vào những đường link độc thì những mã độc sẽ được thực thi trên trusted server. Ở đây cách này nói lên hacker đã sử dụng email mà trong đó đính kèm những đoạn script động hại đến nạn nhân, Khi nạn nhận đã xác thực với một trang web và mở mail lên thì những đoạn script được đính kèm trong đó sẽ thực thi trên máy nạn nhân.
Bước 1: Attcker sẽ gửi đường link có chữa mã độc tới cho User. Đoạn mã độc để thực hiện một hành vi xấu của Attacker, nó được chứa trong một file HTML, và User sẽ không biết được có mã độc hay không trong file. Mã độc thường là một đường link được giấu trong thẻ img, với thuộc tính width và height của thẻ img đều là 0.
Bước 2: Sau khi Attacker gửi và “dụ” được User click vào được link, thì trên máy của User sẽ thực hiện request theo yêu cầu trong đường link có mã độc mà User không hề hay biết.
Bước 3: Khi User “bị gửi” yêu cầu trong link có mã độc đến Server thì Server vẫn đáp ứng bình thường, vì User đã được Server cấp cho session để thực hiện request. Và request chứa mã độc được thực hiện một cách hợp lệ mà User không hề hay biết.
Tạo link thực thi hành động
Gửi mail đến người dùng với Link đính kèm
Người dùng click vào link
c. Ví dụ tấn công theo phương thức POST
Hình 26. Mô hình tấn công CSRF theo phương thức POST
Bước 2: Hacker dụ dỗ, dùng mọi biện khác nhau để đánh lừa nạn nhân khởi tạo một request. Request này có chứa session id của nạn nhân (do đã được xác thực), Hacker sửa đổi Request này theo mục đích của mình và chuyển đến cho vunerability web application
Bước 3: vunerability web application thấy request này có session id hợp lệ nên sẽ thực thi hành động được ghi trong request
Như vậy Hacker đã có thứ hắn muốn đó chính là hành động được ghi trong request được thực hiện bởi vunerability web application nhân danh nạn nhân
Đối với người sử dụng internet
Nên thoát khỏi các website quan trọng: Tài khoản ngân hàng, thanh toán trực tuyến, các mạng xã hội, gmail, yahoo… khi đã thực hiện xong giao dịch hay các công việc cần làm. (Check email, checking…).
Không nên click vào các đường dẫn mà bạn nhận được qua email, qua facebook … Khi bạn đưa chuột qua 1 đường dẫn, phía dưới bên trái của trình duyệt thường có địa chỉ website đích, bạn nên lưu ý để đến đúng trang mình muốn.
Không lưu các thông tin về mật khẩu tại trình duyệt của mình (không nên chọn các phương thức “đăng nhập lần sau”, “lưu mật khẩu”.
Trong quá trình thực hiện giao dịch hay vào các website quan trọng không nên vào các website khác, có thể chứa các mã khai thác của kẻ tấn công.
Đối với web server
- Hạn chế thời gian hiệu lực của SESSION - Lựa chọn việc sử dụng GET VÀ POST
- Chèn thêm bước xác nhận trung gian trước khi thực hiện các thao tác nhạy cảm: có thể là yêu cầu user nhập lại password để xác nhận thao tác của mình trước khi thực hiện hoặc sử dụng captcha để xác nhận, hay có thông báo xác nhận
- Phương pháp đơn giản là chèn thêm token vào đường link thực hiện thao tác. Giá trị token này phải mạnh, khó đoán, thường là hash của session ID của user kết hợp với password, IP của user, thời điểm đăng nhập,…Mục đích của token là làm cho hacker không thể xác định được chính xác đường link thực hiện thao tác
- Sử dụng cookie riêng biệt cho trang quản trị - Kiểm tra REFERRER
- Kiểm tra IP
5.4 Một số lỗ hổng khác nổi bật hiện nay 5.4.1 Lỗi Heartbleed
Heartbleed là một lỗ hỏng nguy hiểm của OpenSSL mới được công bố cho phép hacker có thể từ xa đọc được dữ liệu trên máy chủ có cài đặt OpenSSL phiên bản 1.0.1 đến 1.0.1.f OpenSSL là một thư viện mã hóa, được sử dụng cho mã hóa dữ liệu trao đổi giữa máy chủ và client. Các máy chủ sử dụng OpenSSL như các máy chủ web chạy apache hoặc ngix, các máy chủ email, VPN, Instant Message,...
Khi khai thác được lỗ hổng Heartbleed, hacker có thể lấy được private key của server, sử dụng để mã hóa các dữ liệu trao đổi giữa server và client. Từ đó hacker có thể đọc được toàn bộ thông tin được trao đổi giữa client và server như chưa hề được mã hóa (plain text). Có thể nói như hacker có thể đọc được username, password,.. ở dạng plain text. Như vậy, mục tiêu của hacker là các site thanh toán trực tuyến như: ngân hàng điện tử, chứng khoán điện tử, thương mai điện tử,.. Ngoài ra, các mail server và một số dịch vụ sử dụng Open SSL cũng có thể là mục tiêu mà hacker khai thác.
Cách phòng chống lỗi Heartbleed là kiểm tra phiên bản OpenSSL hiện tại và cập nhật phiên bản OpenSSL. Với các giao dịch điện tử, tốt nhất là nên sử dụng one-time password có giới hạn thời gian sử dụng ngắn.
5.4.2 Khai thác qua Phishing
Phishing là một hình thức gian lận để có những thông tin nhạy cảm như username, password, credit card … bằng cách giả mạo như là một thực thể đáng tin cậy trong các giao tiếp trên mạng. Quá trình giao tiếp thường diễn ra tại các trang mạng xã hội nổi tiếng, các trang web đấu giá, mua bán hàng online…mà đa số người dùng đều không cảnh giác với nó. Phishing sử dụng email hoặc tin nhắn tức thời, gửi đến người dùng, yêu cầu họ cung cấp thông tin cần thiết. Người dùng vì sự chủ quan của mình đã cung cấp thông tin cho một trang web, trông thì có vẽ hợp pháp, nhưng lại là trang web giả mạo do các hacker lập nên.
Phishing là một ví dụ của Social Engineering được sử dụng để lừa đảo người dùng và khai thác lổ hổng trong việc sử dụng công nghệ kém an ninh của các website hiện hành. Những nỗ lực mạnh mẽ trong thời gian qua để chống lại Phising bao gồm việc ứng dụng các công nghệ an ninh mới đến việc đào tạo cho nhân viên, và nâng cao ý thức cộng đồng
Những yếu tố tuy đơn giản nhưng đã góp phần để một cuộc tấn công Phishing thành công như: Sự thiếu hiểu biết, nghệ thuật đánh lừa ảo giác, không chú ý đến những chỉ tiêu an toàn. Do cách tấn công đơn giản nhưng lại hiệu quả cao nên phishing nhanh chóng trở thành một trong những kiểu lừa dảo phổ biến nhất trên mạng – có đến gần 70% các vụ tấn công trên mạng năm 2003 có liên quan đến phishing
Cách phòng chống tấn công Phishing hiện nay là sử dụng một số tool như: PhishTank SiteChecker, SpoofGuard, Netcraft Tool
6. Một số Tool Khai thác lỗ hổng bảo mật Web Application6.1 Havij 6.1 Havij
6.1.1 Giới thiệu
Havij là một công cụ SQL Injection tự động giúp kiểm tra thâm nhập để tìm và khai thác lỗ hổng SQL Injection trên một trang web. Nó có thể tận dụng lợi thế của một ứng dụng web dễ bị tổn thương. Bằng cách sử dụng phần mềm này, người dùng có thể thực hiện back-end cơ sở dữ liệu, lấy tên đăng nhập Database Manager Systems và hash mật khẩu, bảng và cột, lấy dữ liệu từ cơ sở dữ liệu, thực hiện các câu lệnh SQL đối với máy chủ, và thậm chí truy cập hệ thống tập tin cơ bản và thực hiện lệnh shell trên hệ điều hành. Sức mạnh đặc biệt của Havij để phân biệt nó với các công cụ tương tự nằm trong phương pháp độc đáo là các phương pháp tiêm kích mới
6.1.2 Đặc điểm
- Loại bỏ tất cả CSDL mà nó phát hiện
- Các phương pháp bypass SQL mới và hiệu quả
- Tính năng ghi lại đặc điểm tập tin MSSQL và MySQL - Load mã HTML vào form Input
- Lưu dữ liệu tìm được ở dạng CVS - Đa dạng các phương thức Injection
6.1.3 Cách sử dụng
Bước 1: Đầu tiên tải về Havij SQL Injection và cài đặt
Bước 2: Chạy phần mềm Havij SQL Injection và sao chép và dán liên kết trang web muốn tấn công vào mục Target
Bước 4: Sau đó, nó cho thấy một số thông điệp tìm được. Là cảnh báo về nó và phải hiển thị kiên nhẫn cho đôi khi tìm thấy nó vulernable và loại tiêm và nếu máy chủ db mysql và nó sẽ tìm thấy cơ sở dữ liệu tên.Sau đó sau khi nhận được cơ sở dữ liệu của nó là tên là …
Bước 5: Sau đó di chuyển đến tab Table để tìm bảng bằng. Bây giờ bấm "Nhận được bảng" sau đó chờ đợi một thời gian nếu cần thiết
Bước 6: Sau khi nhận được các bảng, tìm đến tên các bảng muốn khai thác thông tin và đánh dấu vào đó, sau đó chuyển sang Tab Get Column để lấy danh sách các cột trong bảng
Bước 7: Tiếp theo chuyển sang Tab Get Data để lấy CSDL trong các cột của bảng
Bước 8: Cuối cùng, bạn đã có thông tin của admin hay user, bây giờ tìm trang đăng nhập của admin hay cùa cơ sở dữ liệu và tiến hành đăng nhập.
Hình 27. Giao diện làm việc của Havij
6.2 Sqlmap
Sqlmap là một công cụ kiểm tra xâm nhập bằng mã nguồn mở, nó tự động quá trình phát hiện và khai thác lỗ hổng SQL Injection và vượt qua sự kiểm tra của các máy chủ cơ sở dữ liệu. Nó đi kèm với một bộ máy phát hiện mạnh mẽ, nhiều tính năng thích hợp cho các thử nghiệm xâm nhậpcuối cùng và một loạt các thiết bị chuyển mạch kéo dài đến cơ sở dữ liệu. Để truy cập vào hệ thống tập tin cơ bản và thực hiện lệnh trên hệ điều hành thông qua các kết nói ra ngoài.
6.2.2 Đặc điểm
- Hỗ trợ đầy đủ các cơ sở dữ liệu như ỗ trợ đầy đủ cho MySQL , Oracle, PostgreSQL, Microsoft SQL Server, Microsoft Access, IBM DB2, SQLite, Firebird , Sybase và hệ thống quản lý cơ sở dữ liệu SAP MaxDB .
- Hỗ trợ đầy đủ cho sáu kỹ thuật khai thác lỗi SQL injection như : boolean- based blind, timebased blind, error-based, UNION query, stacked queries and out-of-band.
- Hỗ trợ kết nối trực tiếp đến cơ sở dữ liệu mà không cần đi qua một SQL injection , bằng cách cung cấp thông tin Database Management Systems, địa chỉ IP, cổng và tên cơ sở dữ liệu
- Hỗ trợ để liệt kê người dùng, các hash mật khẩu , đặc quyền , vai trò, cơ sở dữ liệu , bảng và cột.
- Tự động nhận dạng các định dạng băm mật khẩu và hỗ trợ cho việc bẻ khóa chúng bằng một cuộc tấn công dựa trên từ điển
- Hỗ trợ để loại bỏ bảng cơ sở dữ liệu hoàn toàn , một loạt các mục hoặc cột cụ thể theo sự lựa chọn của người dùng. Người sử dụng cũng có thể chọn để lọai bỏ chỉ là một loạt các đối tượng nhập ở mỗi cột.
- Hỗ trợ để tìm kiếm tên cơ sở dữ liệu cụ thể, bảng cụ thể trên tất cả các cơ sở dữ liệu hoặc cột cụ thể trên tất cả các bảng cơ sở dữ liệu .
- Hỗ trợ để tải về và tải lên bất kỳ tập tin từ hệ thống tập tin máy chủ cơ sở dữ liệu cơ bản khi các phần mềm cơ sở dữ liệu là MySQL, PostgreSQL hoặc Microsoft SQL Server .
- Hỗ trợ để thực hiện các lệnh tùy ý và lấy đầu ra tiêu chuẩn của họ trên hệ điều hành máy chủ cơ sở dữ liệu cơ bản khi các phần mềm cơ sở dữ liệu là MySQL, PostgreSQL hoặc Microsoft SQL Server
- Hỗ trợ để thiết lập một kết nối TCP trạng thái out-of -band giữa các máy tính tấn công và máy chủ cơ sở dữ liệu chạy dưới hệ điều hành cơ bản . Kênh này có thể là một dấu nhắc lệnh tương tác , một phiên Meterpreter hoặc một giao diện người dùng đồ họa (VNC ) phiên theo sự lựa chọn của người dùng.
- Hỗ trợ cho quá trình người sử dụng leo thang đặc quyền về cơ sở dữ liệu thông qua lệnh getsystem Meterpreter Metasploit
6.2.3 Cách sử dụng
Bạn download Sqlmap tại http://sqlmap.org/ Sqlmap được viết bằng ngôn ngữ Python, vì vậy để sử dụng tool này bạn cần cài đặt Python.
Bạn có thể download python tại http://www.python.org/downloads/ Để thực hiện tấn công bạn làm như sau
Bước 1: Mở cmd và gõ lệnh dưới đây để sqlmap sẽ phát hiện lỗ hổng của mục tiêu vào đưa ra thông tin về lỗ hổng.
python sqlmap.py –u “http://tenwebsite.../....php?id=1”
Bước 2: Khi đã xác định được là website mục tiêu tồn tại lỗ hổng SQL injection, ta tiến hành tìm tên cơ sở dữ liệu.
python sqlmap.py –u “http://tenwebsite.../....php?id=1” --dbs
Bước 3: Sau khi xác định được tên cơ sở dữ liệu, ta sẽ tìm tiếp tên các bảng có trong cơ sở dữ liệu.
python sqlmap.py –u “http://tenwebsite.../....php?id=1” --tables –D tenCSDLvuatimduoc
Bước 4: Xác định tên các cột trong bảng
python sqlmap.py –u “http://tenwebsite.../....php?id=1” --columns –D tenCSDLvuatimduoc –T tenbangvuatimduoc
Bước 5: Lấy thông tin dữ liệu từ bảng và cột
python sqlmap.py –u “http://tenwebsite.../....php?id=1” --dump –D tenCSDLvuatimduoc –T tenbangvuatimduoc
Bước 6: Tìm trang đăng nhập của admin hay trang quan lý CSDL và tiến hành đăng nhập.
Hình 28: Giao diện làm việc của Sqlmap
7. Nguy hiểm và mối đe dọa từ các lỗ hổng bảo mật Web Application7.1 Từ lỗi SQL Injection 7.1 Từ lỗi SQL Injection