Home Binary Exploitation
Post
Cancel

Binary Exploitation

Tổng quan

Binary Exploitation (hay còn gọi là pwn) liên quan đến việc tìm ra lỗ hổng trong chương trình và khai thác nó để giành quyền kiểm soát hoặc sửa đổi các chức năng của chương trình. Công việc này nghiên cứu về các lỗ hổng mà phổ biến có thể kể đến như:

  • Buffer Overflow (tràn bộ đệm): Tràn bộ đệm là lỗi thông thường, dễ phòng chống, nhưng lại rất phổ biến và có hậu quả nguy hiểm nhất. Nó được xếp vào hàng danh sách các lỗi đe dọa nghiêm trọng đến sự an toàn của chương trình và hệ thống. Năm 2009, viện SANS (Escal Institute of Advanced Technologies) đã đưa ra báo cáo 25 lỗi lập trình nguy hiểm nhất trong đó có lỗi tràn bộ đệm.

  • Integer Overflow (tràn số nguyên): Tràn số nguyên xảy ra khi một phép toán số học có kết quả nằm ngoài phạm vi có thể được biểu diễn bằng một số có số chữ số nhất định (có thể là cao hơn giá trị lớn nhất hoặc thấp hơn giá trị nhỏ nhất có thể biểu diễn của kiểu dữ liệu).

  • Return Oriented Programming (ROP): Đây là một kỹ thuật khai thác bảo mật được các hacker khai thác để thực thi các đoạn mã (thường là nhằm mục đích xấu) trên hệ thống của nạn nhân.

  • Format String Vulnerable (lỗ hổng định dạng chuỗi): Xảy ra khi dữ liệu được đưa vào bị chương trình xem như một lệnh để thực thi. Bằng cách này, hacker có thể thực thi các đoạn mã, đọc ngăn xếp hoặc gây ra lỗi phân đoạn trong chương trình đang chạy, gây ra các hành vi có thể ảnh hưởng đến bảo mật hoặc sự ổn định của hệ thống.

  • Heap Exploitation là một lỗ hổng mà xảy ra khi có nhiều dữ liệu hơn số lượng có thể chứa trong bộ đệm đã được cấp phát. Nó có thể dẫn đến hỏng siêu dữ liệu heap hoặc hỏng các đối tượng heap khác, từ đó cung cấp bề mặt tấn công mới.

Ví dụ

Ở đây, mình lấy ví dụ về lỗi tràn bộ đệm, còn các lỗ hổng khác các bạn có thể tìm hiểu trên mạng để được các chuyên gia mô tả cho dễ hình dung. Quay lại buffer overflow thì như đề cập ở trên thì đây là một lỗi rất dễ phòng tránh tuy nhiên nó vẫn có thể xảy ra và dẫn đến các hậu quả hết sức nguy hiểm. Nguy hiểm thế nào thì ta sẽ bắt đầu đi vào ví dụ sau: Trường Đại học U đang triển khai đăng ký thông tin nhập học cho tân sinh viên. Sau khi nhập các thông tin cần thiết vào chương trình trên, sinh viên A nhận được một giao diện có thiết kế như sau:

Họ và tênSố điện thoạiĐiểm xét tuyển
Nguyễn Văn A09082222277.3

Trong đó, mục [Họ và tên] và [Điểm xét tuyển] là Chỉ-có-thể-đọc (được bôi đậm) , còn ở [số điện thoại], sinh viên được phép sửa đổi. Yêu cầu của số điện thoại là tối đa 10 chữ số. Nhận thấy số điện thoại của mình bị sai, A thực hiện thao tác sửa đổi và cập nhật mới. Trong quá trình sửa đổi, A vô tình bấm “nhầm” thêm một số dẫn đến đầu vào là một dãy 11 chữ số như sau 09082222229. Sau khi ấn submit, kết quả mà A nhận được là

Họ và tênSố điện thoạiĐiểm xét tuyển
Nguyễn Văn A09082222229.7

Đến đây thì mình tin chắc các bạn cũng đã hiểu ra vấn đề. Ở đây chữ số 9 ở số điện thoại đã bị thay thế vào vị trí của số 7 trong mục [Điểm xét tuyển] hay nói các khác là chữ số thừa này của [Số điện thoại] đã bị tràn sang bộ nhớ bên cạnh nó. Với số điểm xét tuyển gần như tuyệt đối này thì không có cớ gì A sẽ được trao học bổng trong 4 năm học ngay và luôn. Tuy nhiên, do A là một học sinh trung thực, 12 năm liền học sinh Giỏi và là cháu ngoan Bác Hồ nên A đã chủ động liên hệ với nhà trường để báo cáo lỗi. Nhờ việc xử lý và giải quyết một cách nhanh nhẹn, A đã được nhà trường tuyên dương cũng như trao thưởng. Phần thưởng tuy nhỏ nhưng A được cả trường biết đến và được nhận nhiều lời tán dương. A rất tự hào và tự hứa sẽ học tập thêm kỹ năng ATTT để tiếp tục phát hiện và báo cáo nhiều lỗi như thế nữa. Chính vì vậy, A đã đăng ký tham gia vào CLB FPTU - Ethical Hacker Club, một câu lạc bộ về ATTT mà đúng với tiêu chí của A là BDSM (Bay bổng - Đảm đang - Sáng tạo - Muôn màu) Tuy nhiên đây chỉ là một câu chuyện hoang tưởng để lấy ví dụ về Binary Exploitation, các bạn không nên làm tại nhà vì rất dễ được “học bổng” của nhà nước (được ở nhà của nhà nước, được ăn cơm nhà nước, mặc quần áo nhà nước). Trên thực tế thì buffer overflow cũng tương tự như vậy. Các lỗ hổng liên quan đến việc tràn bộ đệm thường xảy ra do lập trình viên bỏ qua các chú ý đến nguy cơ bị ghi đè dữ liệu lên các vùng nhớ kế cận. Ở phần kết luận, mình sẽ đưa ra giải pháp cho các lập trình viên newbie cách phòng tránh vấn đề này.

Kết luận

Về tác hại: các lỗi liên quan đến Binary Exploitation làm cho chương trình dừng hoạt động, gây mất dữ liệu hoặc khiến cho kẻ xấu lợi dụng để tấn công, kiểm soát hệ thống nhằm mục đích trục lợi. Để phòng tránh lỗi tràn bộ đệm ở các chương trình C, các lập trình viên nên đọc kỹ về hàm gets, nó thường được cảnh báo nguy hiểm trong khi biên dịch chương trình. Giả sử có biến var, kết quả của printf (var) sẽ là bao nhiêu nếu var là %p. Hãy thử viết một chương trình C như vậy và tự xem kết quả. Bật mí thì đây là ví dụ của lỗi định dạng chuỗi. Có một số trang để rèn luyện kỹ năng về Binary Exploitation có thể kể đến như pwnable.tw, đây là trang web hoàn toàn miễn phí. Các thử thách trên đây luôn được cập nhật để bổ sung kỹ năng cho bạn. Ngoài ra có một số trang khác như HackTheBox cũng là một nơi để các bạn bắt đầu nghiên cứu về mảng bảo mật này.

This post is licensed under CC BY 4.0 by the author.