Nghệ Thuật Tận Dụng Lỗi Phần Mềm
Tác giả | Nguyễn Thành Nam | |
Cấp phép | ngày 06 tháng 08 năm 2009 | |
Trình bày | Bìa mềm, 140 trang | |
ISBN / EAN-13 | 8935048992197 | |
Ngôn ngữ | Tiếng Việt | |
Biên tập | NXB Khoa học và Kỹ thuật | |
Xuất bản | NXB Khoa học và Kỹ thuật | |
Bản quyền | 2009 | |
Kích thước | rộng 16cm x cao 24cm x dày 1cm | |
Giá bìa | 25.000 đồng | |
Trích đoạn và bản thảo (xem bằng Adobe Reader) | ||
Tải ảnh dùng với VMWare. User: regular/root, password: training. |
Về quyển sách
"Quyển sách này sẽ là một quyển tham khảo kinh điển không thể thiếu được cho những ai đam mê về lĩnh vực an ninh phần mềm."
Phùng Hải, CISSP, Giám đốc Kinh doanh, Misoft
"Cách tiếp cận sáng sủa, trực tiếp, có thể được tiếp thu khá dễ dàng cho người ít kinh nghiệm."
Tiến sĩ Nguyễn Anh Quỳnh, Viện Khoa học và Kỹ thuật Công nghiệp cấp cao quốc gia, Nhật Bản
Nghệ Thuật Tận Dụng Lỗi Phần Mềm là một quyển sách hiếm hoi hiện nay đề cập đến một lĩnh vực được đánh giá là khó nhất trong ngành an toàn thông tin. Đó là hiểu được thấu đáo lỗ hổng phần mềm ở mức sâu nhất, mức độ mã máy, hợp ngữ, và kiến trúc máy tính cấp thấp.
Hiểu được cách thức hoạt động của những lỗ hổng này, và các chiêu thức hacker lợi dụng tấn công, sẽ giúp ích cho lập trình viên viết code an toàn hơn, giúp cho các chuyên gia an toàn thông tin xây dựng hệ thống phòng chống hiệu quả hơn.
Với bề dày kinh nghiệm về lĩnh vực dịch ngược code, tác giả sẽ dẫn dắt người đọc đi từ những kiến thức nền tảng cơ bản của kiến trúc máy tính, tiếp đến những chủ đề kinh điển về lỗ hổng phần mềm như lỗi tràn bộ đệm, lỗi chuỗi định dạng...
Và quan trọng nhất là giúp người đọc hiểu rõ cách thức lợi dụng lỗ hổng, những chiêu thức mà hacker thường dùng để viết mã tấn công.
Về tác giả
Nguyễn Thành Nam là chuyên gia trưởng của Công ty TNHH Tư vấn Trăng Xanh, một trong những công ty hàng đầu trong lĩnh vực an toàn thông tin tại Việt Nam. Trước khi đồng sáng lập Trăng Xanh, Nam đã trải qua nhiều năm phát triển và kiểm tra an ninh phần mềm cho các công ty khởi nghiệp cũng như cả những tổ chức lớn trong danh sách Fortune 100. Hiện tại, Nam đang giữ các chứng chỉ an toàn thông tin CISA, CISSP, CSSLP. Ngoài thời gian làm việc cho Trăng Xanh, Nam còn là giảng viên thỉnh giảng của một số trường đại học, trưởng nhóm OWASP VIệt Nam, thành viên nòng cốt của nhóm chuyên gia VNSecurity, và giáo viên đứng lớp tại các khóa học tận dụng lỗi phần mềm quốc tế.
Đính chính
Trang 2, câu thứ 2, đoạn tứ 3 từ dưới lên: điểu khiển giá trị biến nội bộ sửa thành điều khiển giá trị biến nội bộ. Xin cảm ơn độc giả Lê Ngọc Hiếu.
Trang 4, dòng 3 từ dưới lên: và xúc tích nhất sửa thành và súc tích nhất. Xin cảm ơn độc giả Lê Ngọc Hiếu.
Trang 8, câu thứ 1, đoạn thứ 1 từ trên xuống: tiếng Việt được giành riêng sửa thành tiếng Việt được dành riêng. Xin cảm ơn độc giả Lê Ngọc Hiếu.
Trang 18, câu thứ 3, đoạn thứ 2 từ dưới lên: chứa các biến nội bộ bộ sửa thành chứa các biến nội bộ. Xin cảm ơn độc giả Lê Ngọc Hiếu.
Trang 61, dòng 3 từ trên xuống: đưa một chuỗi vào cùng nhớ của chương trình sửa thành đưa một chuỗi vào vùng nhớ của chương trình. Xin cảm ơn độc giả Nguyễn Hồng Phúc.
Trang 80, câu thứ 2, đoạn thứ 4 từ trên xuống: trong câu lệnh tân dụng lỗi sửa thành trong câu lệnh tận dụng lỗi.
Trang 91, dòng thứ 1 từ trên xuống: lợi dụng trong lỗi tràn bộ đệm sửa thành lợi dụng trong lỗi chuỗi định dạng. Xin cảm ơn độc giả Hoàng Quốc Thịnh.
Trang 97, câu thứ 2, đoạn thứ 2 từ dưới lên: ngoài trừ 16 ký tự sửa thành ngoài trừ 10 ký tự.
Trang 99, hình 4.3, dòng Lần 4: ... | 78 | 56 | 34 | 12 | 00 sửa thành ... | 78 | 56 | 34 | 12 | 03. Xin cảm ơn độc giả Hoàng Quốc Thịnh.
Trang 119, nguồn 5.3 trong sách khác với nguồn
off_by_one.c
trong máy ảo. Xin dùng nguồn gốc trong máy ảo.Mục lục
1 | Giới thiệu | 1 |
1.1 | Cấu trúc tài liệu | 2 |
1.2 | Làm sao để sử dụng hiệu quả tài liệu này | 3 |
2 | Máy tính và biên dịch | 5 |
2.1 | Hệ cơ số | 5 |
2.1.1 | Chuyển đổi từ hệ cơ số bất kỳ sang hệ cơ số mười | 6 |
2.1.2 | Chuyển đổi qua lại giữa hệ nhị phân và hệ thập lục phân | 6 |
2.1.3 | Bảng mã ASCII | 8 |
2.2 | Kiến trúc máy tính | 9 |
2.2.1 | Bộ vi xử lý (Central Processing Unit, CPU) | 9 |
2.2.2 | Thanh ghi | 12 |
2.2.3 | Bộ nhớ và địa chỉ tuyến tính | 13 |
2.2.3.1 | Định địa chỉ ô nhớ | 13 |
2.2.3.2 | Truy xuất bộ nhớ và tính kết thúc nhỏ | 14 |
2.2.4 | Tập lệnh, mã máy, và hợp ngữ | 16 |
2.2.4.1 | Các nhóm lệnh | 17 |
2.2.4.2 | Cú pháp | 17 |
2.2.4.3 | Ngăn xếp | 18 |
2.2.4.4 | Các lệnh gọi hàm | 19 |
2.3 | Trình biên dịch và cấu trúc một hàm | 25 |
2.3.1 | Dẫn nhập | 25 |
2.3.2 | Thân hàm | 26 |
2.3.3 | Kết thúc | 27 |
2.3.4 | Gọi hàm | 29 |
2.3.5 | Con trỏ vùng nhớ | 29 |
2.4 | Tóm tắt và ghi nhớ | 31 |
3 | Tràn bộ đệm | 35 |
3.1 | Giới thiệu | 35 |
3.2 | Thay đổi giá trị biến nội bộ | 37 |
3.3 | Truyền dữ liệu vào chương trình | 41 |
3.4 | Thay đổi luồng thực thi | 46 |
3.4.1 | Kỹ thuật cũ | 46 |
3.4.2 | Luồng thực thi (control flow) | 48 |
3.4.3 | Tìm địa chỉ nhánh "bằng" | 52 |
3.4.3.1 | Với GDB | 52 |
3.4.3.2 | Với objdump | 53 |
3.4.4 | Quay về chính thân hàm | 55 |
3.5 | Quay về thư viện chuẩn | 57 |
3.5.1 | Chèn dữ liệu vào vùng nhớ của chương trình | 57 |
3.5.1.1 | Biến môi trường | 58 |
3.5.1.2 | Tên tập tin thực thi | 61 |
3.5.1.3 | Tham số dòng lệnh | 61 |
3.5.1.4 | Chính biến buf | 61 |
3.5.2 | Quay về lệnh gọi hàm printf | 62 |
3.5.3 | Lý do chuỗi không được in | 66 |
3.5.4 | Quay trở lại ví dụ | 68 |
3.5.5 | Gọi chương trình ngoài | 69 |
3.5.5.1 | Với trường hợp tên chương trình là a | 69 |
3.5.5.2 | Với trường hợp tên chương trình là abc | 74 |
3.6 | Quay về thư viện chuẩn nhiều lần | 79 |
3.7 | Tóm tắt và ghi nhớ | 81 |
4 | Chuỗi định dạng | 85 |
4.1 | Khái niệm | 85 |
4.2 | Quét ngăn xếp | 87 |
4.3 | Gặp lại dữ liệu nhập | 89 |
4.4 | Thay đổi biến cookie | 91 |
4.4.1 | Để cookie có giá trị 0x64 | 92 |
4.4.2 | Để cookie có giá trị 0x100 | 92 |
4.4.3 | Để cookie có giá trị 0x300 | 93 |
4.4.4 | Để cookie có giá trị 0x300, chỉ sử dụng một %x và một %n | 95 |
4.4.5 | Để cookie có giá trị 0x87654321 | 96 |
4.4.6 | Để cookie có giá trị 0x12345678 | 98 |
4.4.7 | Để cookie có giá trị 0x04030201 | 101 |
4.4.8 | Lập lại với chuỗi nhập bắt đầu bằng BLUE MOON | 103 |
4.4.9 | Để cookie có giá trị 0x69696969 | 104 |
4.5 | Phân đoạn .dtors | 104 |
4.6 | Bảng GOT | 108 |
4.7 | Tóm tắt và ghi nhớ | 110 |
5 | Một số loại lỗi khác | 113 |
5.1 | Điều kiện đua (race condition) | 113 |
5.2 | Dư một (off by one) | 118 |
5.3 | Tràn số nguyên (integer overflow) | 121 |
5.4 | Tóm tắt và ghi nhớ | 122 |
6 | Tóm tắt | 125 |