Tiêm lệnh hệ điều hành là gì?
Các cuộc tấn công tiêm chích là một trong những cách phổ biến nhất mà tin tặc tấn công hệ thống vì nó cho phép chúng dễ dàng chạy nhiều lệnh và mã. Tiêm lệnh hệ điều hành là một trong những cuộc tấn công tiêm như vậy mà bạn cần phải biết. Điều này khai thác một lỗ hổng bảo mật mà các quản trị viên hệ thống, cơ sở dữ liệu và ứng dụng web nên rất coi trọng.
Vì vậy, một cuộc tấn công tiêm lệnh hệ điều hành là gì?
Mục Lục
Định nghĩa về tiêm lệnh hệ điều hành
Chèn lệnh hệ điều hành cho phép kẻ tấn công độc hại chạy bất kỳ lệnh nào chúng muốn bằng cách khai thác hệ điều hành, chương trình, ứng dụng, cơ sở dữ liệu hoặc trình cắm có lỗ hổng. Nó xảy ra khi các ứng dụng không xác thực đúng cách và làm sạch các tham số mà chúng sử dụng khi gọi các hàm trình bao, chẳng hạn như hệ thống() hoặc là giám đốc điều hành () để thực hiện các lệnh hệ thống.
Để hiểu rõ hơn về việc phát hiện và khai thác lệnh tiêm hệ điều hành, sẽ rất hữu ích khi kiểm tra vấn đề này theo ba loại chính.
1. Tiêm lệnh trực tiếp
Hãy xem xét điều này từ quan điểm của kẻ tấn công. Kẻ tấn công mạng phát hiện ra rằng một ứng dụng đang chạy một lệnh hệ thống cụ thể; họ nhập lệnh độc hại như một phần của các đối số dự kiến. Sau đó, ứng dụng sẽ thực thi lệnh ban đầu, theo sau là lệnh độc hại.
Kẻ tấn công sử dụng nhiều cách tiếp cận khác nhau để tìm ra một lỗ hổng như vậy. Phương pháp đơn giản nhất để chống lại điều này là luôn cập nhật hệ điều hành; bạn có thể làm điều này với sự cộng tác của một nhóm CNTT có năng lực. Bạn nên tránh tất cả các ứng dụng và chương trình có thể gây ra lỗ hổng hệ thống vì kẻ tấn công có thể trực tiếp chèn mã và thiệt hại là không thể đoán trước.
2. Chèn lệnh gián tiếp
Trong trường hợp tiêm lệnh gián tiếp, kẻ tấn công không trực tiếp nhập mã hoặc lệnh vào hệ thống. Đối với điều này, họ sử dụng một ứng dụng hoặc chương trình dễ bị tấn công trong hệ thống. Lỗ hổng tạo cầu nối giữa kẻ tấn công và hệ điều hành. Lợi dụng giao tiếp này, kẻ tấn công nhằm mục đích chạy các mã và lệnh độc hại trên mục tiêu.
Kẻ tấn công thực hiện một loạt kiểm tra để xác định lỗ hổng này và phát hiện ra rằng phần mềm sử dụng dữ liệu từ nguồn bên ngoài, chẳng hạn như tệp hoặc biến môi trường, để gọi lệnh hệ thống. Sau đó, kẻ tấn công sẽ sửa đổi nội dung của nguồn bên ngoài, do đó giờ đây nó chứa một lệnh độc hại. Điều này sau đó được thực hiện cùng với các hướng dẫn của ứng dụng gốc.
Sự khác biệt chính giữa tiêm lệnh trực tiếp và gián tiếp là kẻ tấn công sử dụng một ứng dụng để giao tiếp với hệ điều hành. Nhưng không có sự khác biệt thực sự giữa thiệt hại mà hai hình thức tiêm có thể gây ra, vì vậy cả hai đều cần được giải quyết. Đó là lý do tại sao bạn nên đảm bảo rằng các chương trình trong mạng của mình đáng tin cậy và cần thiết. Không giữ các ứng dụng mà bạn không tin tưởng trên thiết bị của mình.
3. Tiêm lệnh mù
Một loại tiêm lệnh hệ điều hành khác là tiêm lệnh mù. Điều này có nghĩa là ứng dụng không trả về bất kỳ đầu ra nào từ lệnh trong phản hồi HTTP. Kẻ tấn công sử dụng các kỹ thuật khác nhau như thời gian trễ và định tuyến đầu ra để khai thác lỗ hổng này.
Hãy tưởng tượng rằng bạn đang tìm kiếm một trang web và giá trị “/?search=id” trong URL thay đổi với mỗi lần tìm kiếm. Giá trị id ở đây có thể là trang người dùng, địa chỉ của ảnh sản phẩm hoặc bất kỳ trang nào trên trang web. Kẻ tấn công có thể nhận được các kết quả khác nhau bằng cách thay đổi giá trị id. Thật khó để thực hiện thủ công, nhưng có những công cụ như Burp Suite cho việc này. Sau đó, kẻ tấn công phát hiện ra một điều kỳ lạ trên một trang: một giá trị id có thể được trả về, mặc dù nó không hiển thị bất kỳ kết quả nào, nhưng phản hồi của trang web là 200, điều này cho thấy rằng mọi thứ đều ổn. Trong trường hợp như vậy, kẻ tấn công có thể sử dụng lệnh tiêm mù.
Một kỹ thuật như thời gian trễ đặc biệt hữu ích. Vì trang mở ra sẽ trống nên bạn sẽ không nhận được bất kỳ phản hồi nào, nhưng bạn vẫn có thể thu thập thông tin về những gì được lưu trữ trong cơ sở dữ liệu dựa trên độ trễ thời gian chỉ tải trang nếu có một ký tự nhất định. Điều này quá tốn thời gian để trở thành một quy trình thủ công, nhưng có rất nhiều công cụ có thể tự động hóa cuộc tấn công.
Một kịch bản tấn công ví dụ
Hãy xem xét tất cả những điều trên thông qua một ví dụ. Hãy tưởng tượng bạn có một ứng dụng mua sắm cho phép người dùng xem sản phẩm còn hàng hay không. Hãy sử dụng một URL như bên dưới để truy cập tất cả thông tin này:
example_unsafe_store.com/stockStatus?productID=245&storeID=
Hãy tưởng tượng chuyển ID sản phẩm và ID cửa hàng làm đối số cho lệnh trình bao, chẳng hạn như “stockstat.pl 245 38”, vì ứng dụng sẽ phải truy vấn các bản ghi cũ. Nếu nhà phát triển không có hành động nào chống lại lệnh tiêm, kẻ tấn công có thể gửi đầu vào để thực thi lệnh mong muốn:
& echo this_a_harmful_command &
Nếu mục nhập này nằm trong tham số productID, lệnh được thực thi bởi ứng dụng sẽ là:
stockstat.pl & echo this_a_harmful_command & 38
Lệnh echo là một phương pháp hữu ích để phát hiện việc chèn lệnh cũng như đảm bảo rằng chuỗi đã cho xuất hiện trong đầu ra. Ký tự “&” là một dấu phân cách lệnh shell, vì vậy những gì được thực thi là ba lệnh riêng biệt, cái này nối tiếp cái kia. Kết quả là đầu ra trả về cho người dùng sẽ là:
Error -productID not found
this_a_harmful_command
38: command not found
Tại đây, tệp “stockstat.pl” đã thực thi lệnh mà không có các đối số mà nó mong đợi và do đó đã trả về một thông báo lỗi. Sau đó, lệnh echo do kẻ tấn công đưa vào chạy và kẻ tấn công nhìn thấy biểu thức mà anh ta nhập trên màn hình. Đối số ban đầu, “38”, chạy dưới dạng lệnh gây lỗi.
Cách bảo vệ chống lại việc tiêm lệnh hệ điều hành
Mặc dù command injection là một vectơ tấn công mạnh mẽ và có hại, nhưng có một số thủ thuật để tránh nó. Cơ sở lý luận đằng sau các cuộc tấn công chèn lệnh hệ điều hành là thực thi các lệnh hệ điều hành nhất định bằng ứng dụng. Bạn cần phải ngăn chặn điều này xảy ra. Có một số vấn đề cần xem xét:
- Bạn phải ngăn không cho bất kỳ ai có quyền truy cập vào ứng dụng chạy mã.
- Bạn nên ngăn bất kỳ ai có quyền truy cập vào ứng dụng đưa ra yêu cầu đến máy chủ bằng các biểu thức cú pháp.
- Bạn phải mã hóa các cụm từ mà bất kỳ ai có quyền truy cập đưa ra yêu cầu.
Chúng ta hãy đi qua từng mục một. Một giải pháp tốt cho vấn đề đầu tiên là sử dụng phương pháp danh sách trắng để ngăn bất kỳ ai tiếp cận lớp ứng dụng chạy một số mã hoặc yêu cầu nhất định. Bất kỳ ai mà bạn không xác định sẽ không thể chạy mã.
Giải pháp thứ hai là không chấp nhận một số biểu thức văn bản được sử dụng trong các lệnh. Người dùng chỉ có thể nhập các giá trị số. Áp dụng điều này cùng với phương pháp danh sách trắng và bạn sẽ có một hệ thống an toàn hơn nhiều.
Mục thứ ba là về mã hóa các tham số cú pháp như ký tự đã nhập và khoảng trắng. Do đó, phương pháp lập danh sách trắng, kiểm tra cú pháp đầu vào và mã hóa đầu vào sẽ bảo vệ bạn khỏi việc tiêm lệnh của hệ điều hành.
Tiêm tấn công phát triển hàng ngày
Có nhiều phương pháp tiêm với các kỹ thuật tấn công khác nhau, chẳng hạn như lệnh OS, SQL, SSI và XPath. Không dễ để cố gắng ngăn chặn từng người trong số họ. Hãy nhớ rằng tất cả các cuộc tấn công này phát triển hàng ngày và tận dụng các lỗ hổng nhỏ mà các nhà phát triển đã bỏ qua. Đó là lý do tại sao điều quan trọng là bạn phải luôn cập nhật và theo sát những diễn biến hiện tại trong thế giới an ninh mạng.