Shellcode là gì? – An Ninh Mạng

Chúng tôi rất vui mừng chia sẻ kiến thức về từ khóa Shellcode la gi để tối ưu hóa nội dung trang web và tiếp thị trực tuyến. Bài viết cung cấp phương pháp tìm kiếm, phân tích từ khóa và chiến lược hiệu quả. Cảm ơn sự quan tâm và hãy tiếp tục theo dõi để cập nhật kiến thức mới.

Shellcode là gì?Khái niệm về shellcode (có rất nhiều khái niệm)

Bạn Đang Xem: Shellcode là gì? – An Ninh Mạng

  • Shellcode, là đoạn lớp học giúp cho bạn đã đoạt…một chiếc shell. Thế shell là cái gì? Theo Wikipedia, shell là một phần mềm cung cấp một giao diện dòng lệnh (command line interface) giúp chúng ta có thể tương tác với hệ điều hành. Shell sẽ nhận lệnh của bạn, gửi xuống phần lõi (kernel) của hệ điều hành để thực thi, rồi nhận kết quả trả về và gửi lại cho bạn. Có thể hiểu nôm na rằng, có shell trên một máy tính nào đó có tức là bạn có quyền thực thi lệnh trên máy tính đó.
  • Shellcode là payload của tương đối nhiều đoạn mã khai thác lỗ hổng bảo mật thông tin (exploit). Khi viết exploit, bạn phải giải quyết và xử lý hai vấn đề chính: a) injection vector: xác định cách chèn shellcode vào trong khối hệ thống muốn tiến công; b) payload: xác định shellcode mà bạn muốn chạy trên khối hệ thống đó. Shellcode có thể làm được mọi thứ, từ việc kiểm soát và điều chỉnh giở khối hệ thống hay tải về và thực thi một file từ Internet cho tới gửi một email ra ngoài. Mục tiêu chính của tương đối nhiều exploit là làm thế nào có thể chạy được shellcode nằm trong phần payload của nó.
  • Shellcode còn được gọi là bytecode, tạm dịch là mã máy. Tất cả chúng ta đều biết mã máy là thứ tiếng nói duy nhất mà bộ vi xử lí có thể hiểu được. Tất cả những lớp học viết bằng bất kì tiếng nói nào đều phải được biên dịch sang mã máy trước lúc máy tính có thể chạy được lớp học đó. Khác với những lớp học này, shellcode được thể hiện như một nhóm các mã máy, do đó máy tính có thể hiểu và thực thi trực tiếp shellcode mà không cần thiết phải trải qua bất kì quy trình biên dịch nào cả.

Như vậy muốn viết được shellcode, tôi phải học cách viết mã máy? Câu vấn đáp là không. Không có ai trực tiếp viết ra mã máy khi muốn tạo shellcode. Thay vào đó, chúng ta có thể: a) sử dụng các shellcode có sẵn trên Internet; b) viết bằng C, dịch sang Assembly rồi tiếp tục dịch sang mã máy; c) viết bằng Assembly rồi dịch luôn ra mã máy.So với cách a), tin vui là có rất nhiều thư viện shellcode trên Internet, thậm chí còn có một số lớp học được cho phép bạn tạo shellcode và viết exploit bằng một tiếng nói hạng sang như Python hay Ruby. Tin buồn là nếu như khách hàng nhào vào sử dụng liền các shellcode có sẵn mà không tìm hiểu chúng, chúng ta có thể bị gài bom. Nên nhớ rằng, shellcode có thể làm được tất cả mọi chuyện, hành động lấy shellcode từ Internet rồi chạy mà không thật sự hiểu shellcode đó làm gì giống như việc chạy các file .exe nhận được từ một người lạ mặt! Đến một lúc nào đó, các bạn sẽ sử dụng các lớp học tạo shellcode tự động hóa kể trên để đơn giản hóa việc viết exploit nhưng trước mắt, bạn cần phải phải tự viết được shellcode đã. Trong tài liệu này tất cả chúng ta sẽ sử dụng luân phiên hai cách b) và c) để viết shellcode. Bạn nên sử dụng cách b) khi mới khai mạc hoặc khi cần phải triển khai một loại shellcode phức tạp. Nhìn vào hai cách này, chúng ta có thể thấy rằng viết shellcode yên cầu phải có sự thông hiểu về tiếng nói Assembly của kiến trúc máy tính mà bạn dự kiến sẽ chạy shellcode trên đó. Đây là điều hiểu nhiên bởi lẽ các loại máy khác nhau (x86, x86-64, sparc, ppc, amd hay mips…) chỉ hiểu được một nhóm mã máy khác nhau. Ngoài ra, bạn còn phải thông hiểu cách giao tiếp với hệ điều hành (linux, windows, solaris hay freebsd…) để sở hữu thể thực thi được lệnh trong shellcode. Thông thường, bạn cần phải phải có một phiên bản shellcode khác nhau cho từng loại hệ điều hành chạy trên mỗi loại kiến trúc phần cứng khác nhau. Nói cách khác, shellcode phụ thuộc vào hệ điều hành và kiến trúc phần cứng.

Xem Thêm : BJ Là Gì ❤️ Cách Thực Hiện Khiến Bạn Tình Say Đắm Không Rời

Bạn vẫn còn đang đọc bài này đó chứ :p? Nếu có bất kì nơi đâu còn mù mờ, bạn nên đọc lại từ trên đầu và đừng ngại hỏi nếu như khách hàng muốn. Những gì tôi trình bày về shellcode từ trên đầu đến giờ là những ý quan trọng nhất về shellcode, nếu như khách hàng chỉ muốn biết shellcode để nói chuyện cho vui thì chúng ta có thể tạm dừng ở đây. Còn nếu như khách hàng muốn tự viết cho mình những đoạn shellcode tối ưu thì hãy đi tiếp cùng tôi nhé.

Trong bài tiếp theo, tôi sẽ trình bày những tri thức cơ bản về Assembly đủ để chúng ta có thể hiểu và viết được shellcode trước tiên của mình. Sau đó tôi sẽ đề cập đến hai trở ngại quan trọng nhất mà bạn cần phải phải vượt qua khi viết shellcode: vấn đề địa chỉ ô nhớ (addressing problem) và vấn đề của tương đối nhiều byte có mức giá trị null (null byte problem). Tất cả chúng ta cũng sẽ thảo luận sơ lược một số ví dụ về shellcode trên kiến trúc máy Intel 32-bit (còn gọi là x86).

Cần chuẩn bị sẵn sàng những gì để học viết shellcode?

Xem Thêm : Tình cảm cha con là gì? Nghị luận xã hội về tình phụ tử hay?

Như đã nói từ trên đầu, nội dung bài viết này sẽ không yêu cầu bạn phải có tri thức trước về Assembly hay C. Yêu cầu duy nhất là bạn phải có sự khát khao học hỏi cái mới. Ngoài ra, tôi sử dụng Ubuntu Linux trên máy x86 để viết các shellcode mẫu trong bài này, do đó bạn cũng cần phải phải chuẩn bị sẵn sàng một máy tính có cấu hình tương tự (Linux-x86) như tôi. Bạn chọn distro nào thì cũng được, nhưng tốt nhất là nên chọn Ubuntu như tôi luôn. Các phần mềm khác mà bạn cần phải phải chuẩn bị sẵn sàng:

  • nasm là bộ phần mềm gồm có một assembler tên nasm và một disassembler mang tên ndisasm. nasm dùng làm biên dịch các mã lệnh Assembly sang mã máy, còn ndisasm làm thuê việc trái lại.
  • gdb là phần mềm giúp cho bạn debug (bắt lỗi) hoặc disassemble các lớp học viết bằng C. gdb thường có sẵn trong distro của bạn.
  • objdump là dụng cụ giúp cho bạn xem những thông tin quan trọng trong các file object hay file executable. Tương tự như gdb, objdump thường có sẵn trong distro của bạn.
  • strace là dụng cụ xem những syscall (tôi sẽ giảng giải khái niệm này sau) mà một lớp học gọi khi nó được thực thi

(vnhacker)

Lượt xem (2594)

You May Also Like

About the Author: v1000