NỘI DUNG

Hosting tốc độ cao Vietnix - tốc độ tải trang trung bình dưới 1 giây
VPS siêu tốc Vietnix - trải nghiệm mượt mà, ổn định
28/06/2021
Lượt xem

Command Injection là gì? Những cách để ngăn chặn Command Injection

28/06/2021
7 phút đọc
Lượt xem

Đánh giá

5/5 - (50 bình chọn)

Command injection là lỗ hổng cho phép các hacker thực thi các lệnh bất kỳ của hệ điều hành trên server. Bài viết này sẽ hướng dẫn rõ hơn command injection là gì và cách để ngăn chặn nó.

Command Injection là gì?

Command injection là một cyber attack liên quan đến việc thực hiện các lệnh tùy ý trên hệ điều hành của host (OS). Thông thường, hacker sẽ command injection bằng cách khai thác lỗ hổng ứng dụng. Chẳng hạn như xác thực input của người dùng không chặt chẽ.

Ví dụ: hacker có thể lợi dụng việc kiểm tra input của dùng người dùng không an toàn, chẳng hạn như cookie và form để đưa lệnh vào system shell trên web server. Sau đó, hacker có thể tận dụng các đặc quyền của ứng dụng dễ bị tấn công để khai thác server.

Command Injection là gì?
Command Injection là gì?

Command injection có nhiều dạng khác nhau. Bao gồm thực hiện trực tiếp lệnh shell, đưa các file độc hại vào môi trường runtime của server và khai thác lỗ hổng trong các file config. Chẳng hạn như XXE (XML external entites).

So sánh Code Injection vs. Command Injection

Code injection là một thuật ngữ chung cho bất kỳ loại tấn công nào liên quan đến việc chèn code đã được giải mã/thực thi bởi một app. Loại tấn công này lợi dụng việc xử lý sai các dữ liệu input không đáng tin cậy. Nó có thể xảy ra do thiếu xác thực input/output thích hợp.

code injection

Hạn chế chính của các cuộc tấn công code injection là chúng bị giới hạn trong app hoặc hệ thống mà chúng nhắm vào. Nếu hacker có thể đưa PHP code vào một app và thực thi nó, thì code độc này sẽ bị giới hạn bởi chức năng PHP và các quyền được cấp cho PHP trên server.

Command injection liên quan đến việc thực thi các lệnh trong system shell hoặc các thành phần khác. Hacker mở rộng chức năng mặc định của một ứng dụng dễ bị tấn công. Khiến nó chuyển các lệnh đến system shell mà không cần đưa code độc vào. Trong trường hợp nhiều lệnh, command injection cho phép hacker kiểm soát tốt hơn hệ thống của mục tiêu.

Ví dụ về lỗ hổng Command Injection

Dưới đây là ba ví dụ về cách một lỗ hổng app có thể dẫn đến các cuộc tấn công command injection. Những ví dụ này dựa trên code do OWASP cung cấp

Ví dụ 1: File name dưới dạng Command Argument

Đây là một ví dụ về chương trình cho phép người dùng từ xa xem nội dung của một file mà không thể sửa đổi hoặc xóa nó. Chương trình này chạy với quyền root:

int main(char* argc, char** argv) {
  char cmd[CMD_MAX] = "/usr/bin/cat ";
  strcat(cmd, argv[1]);
  system(cmd);
}

Mặc dù chương trình có vẻ vô hại khi chỉ cho phép truy cập file ở chế độ read-only, nhưng nó lại hoàn toàn có thể dẫn đến tấn công command injection. Hacker có thể truyền đến một xâu như sau:

“abc.txt ;rm -rf /”

Call đến system() sẽ được thực hiện và sau đó hệ điều hành sẽ thực hiện xóa đệ quy của phân vùng root disk.

Ví dụ 2: Thao tác với biến của môi trường APPHOME

Đoạn code sau xác định thư mục cài đặt của một app nhất định bằng cách sử dụng biến của môi trường $APPHOME và chạy một lệnh trong thư mục đó.

...
char* home=getenv("APPHOME");
char* cmd=(char*)malloc(strlen(home)+strlen(INITCMD));
if (cmd) {
  strcpy(cmd,home);
  strcat(cmd,INITCMD);
  execl(cmd, NULL);
}
...

Vấn đề là code không xác thực nội dung của script đã được khởi tạo. Nếu hacker quản lý để sửa đổi biến $APPHOME thành một path khác. Với phiên bản độc hại của script, thì code này sẽ chạy một script độc hại. Điều này tạo thành một cuộc tấn công command injection.

Ví dụ 3: Thao tác với biến $PATH

Code sau có thể được sử dụng trong chương trình để thay đổi password trên server và chạy với quyền root:

system("cd /var/yp && make &> /dev/null");

Phần có vấn đề của code này là việc sử dụng make. Mặc dù hacker không thể tự thay đổi code, vì nó không chấp nhận input của người dùng, chúng có thể sửa đổi biến $PATH. Điều này có thể khiến lệnh được thực thi theo một path khác do hacker kiểm soát. Trong path folder đó, hacker có thể tạo một phiên bản độc hại của make binary.

Bởi vì chương trình gốc có quyền root, phiên bản độc hại của make bây giờ sẽ được chạy với đặc quyền root.

Điểm mấu chốt của cả ba ví dụ này là bất kỳ lệnh nào invoke hàm ở các cấp độ như system() và execute() đều cung cấp quyền root cho các chương trình khác, hoặc những lệnh chạy bên trong nó.

Những phương pháp Command Injection

những phương pháp command injection

Dưới đây là một số lỗ hổng thường dẫn đến cuộc tấn công command injection

Arbitrary command injection

Một số app có thể cho phép người dùng chạy các lệnh tùy ý và chạy các lệnh này như là một host.

Arbitrary file uploads

Nếu một app cho phép người dùng tải lên các file có phần file extension, các file này có thể bao gồm các lệnh độc hại. Trên hầu hết các web server, việc đặt các file như vậy vào webroot sẽ dẫn đến command injection.

Insecure serialization

Server-side code thường được sử dụng để giải mã dữ liệu input của người dùng. Nếu quá trình giải mã hóa được thực hiện mà không có xác minh thích hợp những dữ liệu input, nó có thể dẫn đến command injection.

Server-side template injection (SSTI)

Nhiều web app sử dụng server side template để tạo ra các phản hồi HTML. Điều này làm cho hacker có thể chèn các server-side template độc hại. SSTI xảy ra khi input của người dùng được nhúng vào mẫu theo cách không an toàn và code được thực thi từ xa trên server.

XML external entity injection (XXE)

XXE xảy ra trong các app sử dụng trình phân tích cú pháp XML được cấu hình kém. Lỗ hổng này có thể gây ra lộ dữ liệu nhạy cảm, server-side request (SSRF) hay còn gọi là giả mạo yêu cầu từ phía server hoặc các cuộc tấn công DDoS – tấn công từ chối dịch vụ.

Ngăn chặn Command Injection

Dưới đây là một số phương pháp bạn có thể thực hiện để ngăn chặn command injection:

  • Tránh call system và user input – Để ngăn các hacker chèn các ký từ vào OS command.
  • Thiết lập xác thực cho input – Điều này để ngăn chặn các cuộc tấn công như XSS và SQL Injection.
  • Tạo white list các input có thể có – Để đảm bảo hệ thống chỉ chấp nhận các input đã được phê duyệt từ trước.
  • Chỉ sử dụng bảo mật API – Khi thực thi các lệnh trên hệ thống như executeFile().
  • Sử dụng executeFile() một cách an toàn – Ngăn người dùng giành quyền kiểm soát tên của chương trình.

Kết luận

Tới đây thì bạn đã biết command injection là gì và những cách ngăn chặn command injection khỏi hệ thống. Chúc bạn thành công!!!

THEO DÕI VÀ CẬP NHẬT CHỦ ĐỀ BẠN QUAN TÂM

Đăng ký ngay để nhận những thông tin mới nhất từ blog của chúng tôi. Đừng bỏ lỡ cơ hội truy cập kiến thức và tin tức hàng ngày

Chọn chủ đề :

Hưng Nguyễn

Co-Founder
tại

Kết nối với mình qua

Kết nối với mình qua

Theo dõi
Thông báo của
guest
0 Comments
Phản hồi nội tuyến
Xem tất cả bình luận

Tăng tốc độ website - Nâng tầm giá trị thương hiệu

Tăng tốc tải trang

95 điểm

Nâng cao trải nghiệm người dùng

Tăng 8% tỷ lệ chuyển đổi

Thúc đẩy SEO, Google Ads hiệu quả

Tăng tốc ngay

SẢN PHẨM NỔI BẬT

7 NGÀY DÙNG THỬ HOSTING

NẮM BẮT CƠ HỘI, THÀNH CÔNG DẪN LỐI

Cùng trải nghiệm dịch vụ hosting tốc độ cao được hơn 100,000 khách hàng sử dụng

ĐĂNG KÝ NHẬN TÀI LIỆU THÀNH CÔNG
Cảm ơn bạn đã đăng ký nhận tài liệu mới nhất từ Vietnix!
ĐÓNG

ĐĂNG KÝ DÙNG THỬ HOSTING

7 NGÀY MIỄN PHÍ

ĐĂNG KÝ DÙNG THỬ HOSTING

7 NGÀY MIỄN PHÍ

XÁC NHẬN ĐĂNG KÝ DÙNG THỬ THÀNH CÔNG
Cảm ơn bạn đã đăng ký thông tin thành công. Đội ngũ CSKH sẽ liên hệ trực tiếp để kích hoạt dịch vụ cho bạn nhanh nhất!
ĐÓNG