Những đặc tính nổi bật theo công bố của trang chủ công cụ: Công cụ có một số đặc tính nổi bật với người sử dụng như sau: ● Dễ sử dụng: Tự động hóa việc phát hiện và khai thác các lỗ hổng
Trang 1HỌC VIỆN CÔNG NGHỆ BƯU CHÍNH VIỄN THÔNG
KHOA CÔNG NGHỆ THÔNG TIN
Trang 2Môi trường mạng, vốn từ đầu đã là một thành phần nhạy cảm của công nghệthông tin bởi tính quan trọng cũng như tính dễ lợi dụng của nó Một chiếc máy tínhkhông kết nối mạng chưa chắc đã hoàn toàn an toàn, nhưng một chiếc máy tínhđang kết nối mạng thì chắc chắn có nguy cơ bị tấn công, dù bằng cách này haycách khác, bởi bất cứ nguồn dữ liệu mạng nào cũng có thể trở thành một phần tửtấn công vào máy người dùng nếu chúng không được sử dụng và kiểm soát đúngcách.
Trang 3Vấn đề an toàn thông tin với người dùng đã quan trọng, nhưng vấn đề antoàn thông tin của các nhà cung cấp dịch vụ web và những người phát triển, kiểmthử web còn quan trọng hơn nhiều, vì những trang web là đầu mối của rất nhiềuluồng thông tin đến và đi Trong số những nguy cơ họ phải đối mặt thì nguy cơ vàhậu quả của các cuộc tấn công chèn lệnh (Injection Attack) được coi là cao nhất,nguy hiểm nhất, đến mức mà năm 2017, Dự án Bảo mật Ứng dụng Web MởOWASP đã liệt dạng tấn công này vào loại tấn công nguy hiểm nhất thời diểm đó.
Nằm trong danh sách các dạng tấn công chèn mã, OS Command Injection(Tấn công chèn lệnh hệ điều hành) cũng mang những đặc tính nguy hiểm và nhữnghậu quả tiềm ẩn như vậy Loại tấn công này một khi có thể sử dụng để khai thácmột trang web thì sẽ mang lại rất nhiều thông tin thuận lợi cho kẻ tấn công, đi kèm
là khả năng khai thác sâu hơn với các kỹ thuật tinh vi hơn Một trong những công
cụ có thể hỗ trợ quá trình đó là Commix Commix sẽ được giới thiệu chi tiết hơntrong bài báo cáo này, vì nó là một công cụ thuận tiện cho cả những người kiểmthử và những kẻ tấn công Để phát triển toàn bộ các tiền đề trên thành một bài báocáo hoàn thiện, sau đây chúng ta sẽ đi qua những tài liệu về OS CommandInjection, Commix và các kết luận sau khi thực hiện báo cáo
DANH MỤC CÁC TỪ VIẾT TẮT
Từ viết tắt Từ đầy đủ Giải nghĩa
bWAPP Extremely Buggy Web
Application Ứng dụng web chứa lỗ hổng
DVWA Damn Vulnerable Web
Application Ứng dụng web chứa lỗ hổngHTTP Hypertext Transfer Protocol Giao thức Truyền tải Siêu Văn Bản
ICMP Internet Control Message
Protocol
Giao thức Điều khiển Truyền Tín
trên Mạng
OS Operating System Hệ điều hành
OWASP Open Web Application Dự án Bảo mật Ứng dụng Web Mở
Trang 4Security Project®
PHP Hypertext Preprocessor Một loại ngôn ngữ kịch bản
Trang 5DANH MỤC BẢNG BIỂU
Trang 6DANH MỤC HÌNH VẼ
Trang 7CHƯƠNG 1 GIỚI THIỆU VỀ CÔNG CỤ COMMIX
1.1 Khái quát về công cụ
Commix (là từ viết tắt của [Comm]and [i]njection e[x]ploiter - trình khai thácchèn lệnh) Đây là là một công cụ kiểm tra thâm nhập mã nguồn mở (open soursepen-test tool), được viết bởi Anastasios Stasinopoulos, hỗ trợ việc tự động hóa việcphát hiện và khai thác các lỗ hổng chèn lệnh
Bản quyền công cụ từ năm 2014 đến thời điểm hiện tại thuộc về tác giảAnastasios Stasinopoulos Chương trình này là phần mềm miễn phí: người dùng cóthể phân phối lại và / hoặc sửa đổi nó theo các điều khoản của Giấy phép Côngcộng GNU do Tổ chức Phần mềm Tự do (Free Software Foundation) xuất bản,phiên bản 3 của Giấy phép hoặc bất kỳ phiên bản nào mới hơn
Những đặc tính nổi bật (theo công bố của trang chủ công cụ): Công cụ có một
số đặc tính nổi bật với người sử dụng như sau:
● Dễ sử dụng: Tự động hóa việc phát hiện và khai thác các lỗ hổng chèn lệnhtrong (các) tham số dễ bị tấn công và / hoặc các HTTP header
● Tính cơ động cao: Toàn bộ những thành phần cần thiết để thực hiện nhữngcuộc tấn công chèn lệnh chống lại nhiều loại hệ điều hành và ứng dụng đềuđược tích hợp trong công cụ
● Tính mô-đun hóa: Người dùng có thể phát triển và dễ dàng nhập các mô-đuncủa riêng mình để tăng khả năng tấn công của commix và / hoặc điều chỉnh
nó theo nhu cầu của họ
● Tính tương thích chéo: Commix tương thích với nhiều công cụ kiểm trathâm nhập khác như: Metasploit Framework, Burp-suite, SQLMap, v.v., do
đó tỷ lệ phát hiện và khai thác thành công được tăng cao
● Tính đa nền tảng: Commix được viết bằng Python, do đó nó chỉ yêu cầuPython để có thể chạy trên tất cả các nền tảng
● Miễn phí và mã nguồn mở
Trang chủ công cụ: https://commixproject.com/
Trang github của công cụ: https://github.com/commixproject/commix
Trang 8Hình 1 1 Công cụ Commix
1.2 Các kỹ thuật tấn công được hỗ trợ
Commix hỗ trợ phát hiện và khai thác dạng tấn công chèn lệnh sau:
● Tấn công chèn lệnh dựa trên kết quả (Results-based): Trong các cuộc tấncông chèn lệnh dựa trên kết quả, kẻ tấn công có thể trực tiếp suy ra kết quảcủa lệnh được đưa vào thông qua phản hồi của ứng dụng web Các cuộc tấncông chèn lệnh dựa trên kết quả được chia thành hai kỹ thuật:
o Tấn công chèn lệnh dựa trên kết quả (cổ điển): Kỹ thuật cổ điển làkiểu tấn công đơn giản và phổ biến nhất Cụ thể hơn, kẻ tấn công sửdụng một số toán tử phổ biến, có thể ghép các lệnh gốc ban đầu vớicác lệnh được đưa vào hoặc loại trừ các lệnh gốc ban đầu chỉ thựchiện các lệnh được đưa vào
▪ Shellshock: Lỗi Shellshock được phát hiện trong Bash, mộtcông cụ được sử dụng rộng rãi bởi hệ điều hành Unix và nhiềubiến thể của nó, bao gồm phần mềm nguồn mở Linux và OSXcủa Apple
▪ Lọc ICMP (ICMP exfiltration)
● Tấn công chèn lệnh mù (Blind): Sự khác biệt chính giữa các cuộc tấn côngchèn lệnh dựa trên kết quả và các cuộc tấn công chèn lệnh mù nằm ở cách
dữ liệu được truy xuất sau khi thực hiện lệnh shell được đưa vào Cụ thểhơn, có những trường hợp một ứng dụng sau khi thực hiện lệnh được đưavào không trả lại bất kỳ kết quả nào cho kẻ tấn công Trong những trường
Trang 9hợp này, kẻ tấn công có thể gián tiếp suy ra kết quả của lệnh được đưa vàobằng cách sử dụng hai kỹ thuật sau:
o Time-based (Blind): Dựa trên thời gian (Mù): Thông qua kỹ thuật này,
kẻ tấn công chèn và thực hiện các lệnh để hiển thị độ trễ thời gian Bằng cách đo thời gian ứng dụng phản hồi, kẻ tấn công có thể xác định xem lệnh được thực thi thành công hay thất bại Chức năng trongBash shell có thể giới thiệu độ trễ thời gian là chế độ ngủ, do đó, bằngcách quan sát độ trễ thời gian, kẻ tấn công có thể suy ra kết quả của lệnh được đưa vào
o File-based (SemiBlind): Dựa trên tập tin (Bán mù): Kỹ thuật này dựa trên một logic rất đơn giản: khi kẻ tấn công không thể quan sát kết quảthực hiện một lệnh được đưa vào, thì kẻ tấn công có thể ghi chúng vàomột tệp mà hắn có thể truy cập được
2.3 Lịch sử phát hành công cụ
Từ khi phát hành (tháng 12 năm 2015) cho đến thời điểm hiện tại (tháng 6 năm2021), công cụ đã được cập nhật qua 33 bản cập nhật và công bố Bản mới nhất ởthời điểm hiện tại là v3.2-stable Danh sách các bản công bố và thời gian phát hành
có thể được theo dõi qua bảng sau:
Bảng 1 1 Danh sách các bản phát hành của công cụ Commix
STT Bản công bố Thời điểm phát hành
Trang 102.4 Phương pháp cài đặt công cụ
● Môi trường cài đặt: Kali Linux 2021.1
● Các yêu cầu trước khi cài đặt: máy đã cài Python 2.6, 2.7 hoặc 3.x
● Tiến hành cài đặt:
o Tải Commix về máy từ trang github
Trang 11Hình 1 2 Clone Commix về máy từ github
o Xem hướng dẫn sử dụng của công cụ bằng lệnh python commix.py -htrong folder commix
Hình 1 3 Chạy lệnh help trên công cụ commix
o Ở phền help, commix chia hướng dẫn thành các phần như sau:
▪ General: những tùy chọn liên quan đến thao tác chung của công
cụ như: kiểm tra phiên bản, kiểm tra cập nhật, load session file,kiểm tra kết nối mạng trước khi tấn công
Trang 12Hình 1 4 Phần General - Commix help
▪ Target: những tùy chọn bắt buộc phải cung cấp trước khi tấncông Các thông tin này sẽ được sử dụng để định dạng mục tiêutấn công (URL)
Hình 1 5 Phần Target - Commix help
▪ Request: những tùy chọn có thể được sử dụng để cấu hình cách
để kết nối đến URL mục tiêu
Trang 13Hình 1 6 Phần Request - Commix help
▪ Enumeration: tùy chọn trích xuất thông tin từ máy chủ mục tiêu
Hình 1 7 Phần Enumeration - Commix help
Trang 14▪ File access: tùy chọn truy cập files trên máy chủ mục tiêu
Hình 1 8 Phần File access - Commix help
▪ Modules: tùy chọn được sử dụng để tăng khả năng phát hiện vàtấn công chèn lệnh
Hình 1 9 Phần Modules - Commix help
▪ Injection: tùy chọn dùng để cấu hình cụ thể những parameters
để chèn lệnh và sử dụng những injection payloads của ngườidùng
Trang 15Hình 1 10 Phần Injection - Commix help
▪ Detection: tùy chọn để tùy chỉnh trong giai đoạn phát hiện
Hình 1 11 Phần Detection - Commix help
▪ Miscellaneous: những tùy chọn khác:
Trang 16Hình 1 12 Phần Miscellaneous - Commix help
CHƯƠNG 3 KIỂM THỬ VÀ KHAI THÁC THỰC TẾ
3.1 Môi trường thử nghiệm
Có rất nhiều môi trường thử nghiệm hỗ trợ thử với các lỗ hổng OSCommand Injection như:
● DVWA (Damn Vulnerable Web Application)
● bWAPP (Extremely Buggy Web Application)
Commix Testbed có thể được cài đặt bằng cách clone từ github theo đườngdẫn: https://github.com/commixproject/commix-testbed hoặc sử dụng docker theohướng dẫn trong trang: https://hub.docker.com/r/commixproject/commix-testbed
tùy theo ý người sử dụng
Trang 17Hình 2 1 Trang github của Commix Testbed
Hình 2 2 Hướng dẫn cài đặt Commix Testbed trên trang github
Trang 18Hình 2 3 Trang docker của Commix Testbed
Hình 2 4 Hướng dẫn cài đặt Commix Testbed trên trang docker
Sau khi cài đặt và khởi chạy, Commix Testbed sẽ có dạng 1 trang web chínhchứa nhiều trang con với mỗi trang là một loại lỗ hổng OS Command Injectionkhác nhau, được sắp xếp theo nguyên tắc nhất định:
Hình 2 5 Khởi chạy Commix Testbed trên Kali Linux
Trang 19Hình 2 6 môi trường Commix Testbed
Các kịch bản kiểm thử của Commix Testbed được sắp xếp làm 5 loại khácnhau, bao gồm:
● Regular (GET / POST)
Các toán tử được đề cập phía trên bao gồm:
● Các toán tử chuyển hướng “<”, “>”, “>>” cho phép kẻ tấn công chuyểnhướng đầu vào hoặc đầu ra của lệnh
Trang 20● Toán tử pipe “|” cho phép kẻ tấn công xâu chuỗi nhiều lệnh, để chuyểnhướng đầu ra của một lệnh thành lệnh tiếp theo.
● Toán tử chấm phẩy “;” cho phép kẻ tấn công xâu chuỗi trong một dòng mãmột chuỗi nhiều lệnh OS tùy ý được phân tách bằng dấu chấm phẩy
● Các toán tử logic “||”, “&&” thực hiện một số phép toán logic đối với dữ liệutrước và sau khi thực thi chúng trên dòng lệnh
● Các toán tử thay thế “`”, “$ ()” có thể được sử dụng để đánh giá và thực hiệnmột lệnh cũng như cung cấp kết quả của nó làm đối số cho một lệnh khác
● Ký hiệu dòng mới “\n”, “%0a” phân tách từng lệnh và cho phép kẻ tấn côngxâu chuỗi nhiều lệnh
Để thực hiện thử nghiệm kiểu tấn công này trong môi trường CommixTestbed, ta click vào nút GET trong ô Classic regular example của phần Regular(GET / POST):
Hình 2 7 Giao diện trang Classic regular example GET
Trang này hoạt động theo cơ chế: người dùng nhập địa chỉ muốn ping vàothành địa chỉ và click Submit!, trang web sẽ thực thi lệnh ping và hiển thị kết quả
ra màn hình Đoạn code thực thi được viết như sau:
Trang 21Hình 2 8 Đoạn code thực thi lệnh ping trong trang Classic regular example GET
Vậy cơ chế cụ thể ở đây là sử dụng method GET, lấy địa chỉ được truyềnvào addr, kiểm tra hệ điều hành sử dụng và thực thi lệnh ping 4 lần với lệnh pingứng với hệ điều hành đó đến địa chỉ đã được gán vào $addr Lệnh echo ở đây sẽgiúp in kết quả thực thi lệnh exec ra màn hình Có thể thấy trong đoạn code trên,biến addr hoàn toàn bị thao túng bởi người dùng mà không có một cơ chế xử lýnào từ phía trang web (GET trực tiếp addr để gán cho $addr), do đó kẻ tấn cônghoàn toàn có thể tấn công chèn lệnh khi lợi dụng điều này, ví dụ chèn lệnh phía saudấu “;” sau địa chỉ IP được nhập vào ô địa chỉ để ping
Sau khi phát hiện có lỗ hổng, ta thực hiện tấn công khai thác với công cụCommix bằng lệnh:
python commix.py url="http://localhost:3000/scenarios/regular/GET/classic.php?addr=INJECT"
Hình 2 9 Sử dụng Commix để tấn công khai thác trang Classic regular example GET
Công cụ Commix phân giải tên miền (ở đây là localhost), kiểm tra kết nốiđến URL, thực hiện kiểm tra nhận dạng đối với URL mục tiêu, kiểm thử tham số
Trang 22addr của GET, thử bằng kỹ thuật chèn lệnh dựa trên kết quả kiểu cổ điển và phântích chính xác lỗi của trang web, đi kèm với payload đã được inject thành công:
Hình 2 10 Các bước thực hiện của công cụ Commix với trang Classic regular example GET
Tiếp theo, Commix hỏi người dùng lựa chọn sử dụng Pseudo-Terminal shellhoặc không, nếu chọn Y (yes) thì người dùng sẽ được chuyển sang chế độ chènlệnh, lúc này có thể thực hiện chèn các mã vào để thu thập thông tin, khai thác tàinguyên từ nạn nhân
Hình 2 11 Tùy chọn sử dụng Pseudo-Terminal shell để thực hiện chèn lệnh đến nạn nhân
Sau khi vào được chế độ này, có thể gõ “?” để xem các tùy chọn của chế độ:
Hình 2 12 Các tùy chọn có sẵn khi sử dụng Pseudo-Terminal shell
Các tùy chọn bao gồm:
● Gõ ‘?’ để xem toàn bộ tùy chọn
● Gõ ‘back’ để thoát Pseudo-Terminal shell
● Gõ ‘exit’ để thoát commix
● Gõ ‘reverse_tcp’ để nhận 1 kết nối reverse TCP từ phía nạn nhân
● Gõ ‘bind’ TCP để tạo 1 kết nối TCP đến nạn nhân
Sau khi xem các tùy chọn thì kẻ tấn công có thể thực hiện chèn các lệnh của
hệ điều hành lên máy nạn nhân để máy đó thực hiện:
● Chạy lệnh whoami để xem tên của người dùng trên máy nạn nhân:
Trang 23Hình 2 13 Tên của người dùng trên máy nạn nhân 1
● Chạy lệnh uname -a để xem thông số hệ điều hành nạn nhân:
Hình 2 14 Thông số hệ điều hành máy nạn nhân 1
● Chạy lệnh ifconfig để hiển thị cấu hình mạng của máy nạn nhân:
Hình 2 15 Cấu hình mạng của máy nạn nhân 1
● Chạy lệnh netstat -an để hiển thị thông tin kết nối mạng của máy nạn nhân:
Hình 2 16 Thông tin kết nối mạng của máy nạn nhân 1
● Chạy lệnh ps -ef để hiển thị những tiến trình đang chạy trên máy nạn nhân:
Hình 2 17 Những tiến trình đang chạy trên máy nạn nhân 1
● Chạy lệnh ls để hiển thị toàn bộ file trong thư mục hiện tại của nạn nhân:
Trang 24Hình 2 18 Toàn bộ file trong thư mục hiện tại của nạn nhân 1
● Chạy lệnh pwd để hiển thị vị trí của thư mục hiện tại tính từ thư mục gốc:
Hình 2 19 Vị trí của thư mục hiện tại tính từ thư mục gốc của nạn nhân 1
● Chạy lệnh df để hiển thị báo cáo sử dụng dung lượng ổ cứng của nạn nhân:
Hình 2 20 Báo cáo sử dụng dung lượng ổ cứng của nạn nhân 1
● Sau khi chạy lệnh quit để thoát Commix thì toàn bộ phiên làm việc sẽ đượcghi vào một file log để đọc lại sau đó:
Hình 2 21 Thông báo thoát và ghi file log của Commix
Ngoài việc chạy lệnh với duy nhất tham số đầu vào là url, người dùng có thểthực hiện chạy với các tham số khác như lệnh:
python2 commix.py
url="http://localhost:3000/scenarios/regular/GET/classic.php?addr=INJECT" current-user hostname is-root sys-info
Với tham số current-user để hiển thị người dùng hiện tại trên máy nạnnhân, tham số hostname để hiển thị tên máy chủ nạn nhân, tham số is-root đểhiển thị cấp quyền trong hệ thống của nạn nhân, tham số sys-info để hiển thịthông tin hệ thống nạn nhân:
Trang 25Hình 2 22 Sử dụng Commix kết hợp tham số để tăng thông tin thu thập được từ nạn nhân 1
Kết luận: Sau khi sử dụng công cụ Commix tấn công khai thác trang web chứa lỗhổng OS Command Injection bằng kỹ thuật Classic results-based injection, kẻ tấncông có thể thu được những thông tin như sau:
● Hostname của nạn nhân: 8463b00b5dcd
● Người dùng hiện tại: www-data và không có quyền admin trong hệ thống
● Hệ điều hành mục tiêu: Linux với nhân là Ubuntu 14.04
● Nền tảng phần cứng: x86_64
● Những thông số khác của hệ điều hành
● Cấu hình mạng
● Thông tin về kết nối mạng
● Toàn bộ tiến trình đang chạy trên máy nạn nhân
● Nội dung của thư mục hiện tại
● Vị trí của thư mục hiện tại trong hệ thống
● Báo cáo sử dụng dung lượng ổ cứng
Với rất nhiều thông tin chi tiết như vậy, kẻ tấn công hoàn toàn có thể sửdụng nó nhằm phục vụ cho các cuộc tấn công tiếp theo, hoặc ăn cắp thông tin này
từ máy nạn nhân cho các hành vi phi pháp khác Qua đó có thể đưa ra kết luận rằng