Nghệ Thuật Tận Dụng Lỗi Phần Mềm

Bìa trước Tác giảNguyễn Thành Nam
Cấp phépngày 06 tháng 08 năm 2009
Trình bàyBìa mềm, 140 trang
ISBN / EAN-138935048992197
Ngôn ngữTiếng Việt
Biên tậpNXB Khoa học và Kỹ thuật
Xuất bảnNXB Khoa học và Kỹ thuật
Bản quyền2009
Kích thướcrộng 16cm x cao 24cm x dày 1cm
Giá bìa25.000 đồng
Trích đoạn 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: điu khiển giá trị biến nội bộ sửa thành điu 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: xúc tích nhất sửa thành 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 tn 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

1Giới thiệu1
1.1Cấu trúc tài liệu2
1.2Làm sao để sử dụng hiệu quả tài liệu này3
2Máy tính và biên dịch5
2.1Hệ cơ số5
2.1.1Chuyển đổi từ hệ cơ số bất kỳ sang hệ cơ số mười6
2.1.2Chuyển đổi qua lại giữa hệ nhị phân và hệ thập lục phân6
2.1.3Bảng mã ASCII8
2.2Kiến trúc máy tính9
2.2.1Bộ vi xử lý (Central Processing Unit, CPU)9
2.2.2Thanh ghi12
2.2.3Bộ nhớ và địa chỉ tuyến tính13
2.2.3.1Định địa chỉ ô nhớ13
2.2.3.2Truy xuất bộ nhớ và tính kết thúc nhỏ14
2.2.4Tập lệnh, mã máy, và hợp ngữ16
2.2.4.1Các nhóm lệnh17
2.2.4.2Cú pháp17
2.2.4.3Ngăn xếp18
2.2.4.4Các lệnh gọi hàm19
2.3Trình biên dịch và cấu trúc một hàm25
2.3.1Dẫn nhập25
2.3.2Thân hàm26
2.3.3Kết thúc27
2.3.4Gọi hàm29
2.3.5Con trỏ vùng nhớ29
2.4Tóm tắt và ghi nhớ31
3Tràn bộ đệm35
3.1Giới thiệu35
3.2Thay đổi giá trị biến nội bộ37
3.3Truyền dữ liệu vào chương trình41
3.4Thay đổi luồng thực thi46
3.4.1Kỹ thuật cũ46
3.4.2Luồng thực thi (control flow)48
3.4.3Tìm địa chỉ nhánh "bằng"52
3.4.3.1Với GDB52
3.4.3.2Với objdump53
3.4.4Quay về chính thân hàm55
3.5Quay về thư viện chuẩn57
3.5.1Chèn dữ liệu vào vùng nhớ của chương trình57
3.5.1.1Biến môi trường58
3.5.1.2Tên tập tin thực thi61
3.5.1.3Tham số dòng lệnh61
3.5.1.4Chính biến buf61
3.5.2Quay về lệnh gọi hàm printf62
3.5.3Lý do chuỗi không được in66
3.5.4Quay trở lại ví dụ68
3.5.5Gọi chương trình ngoài69
3.5.5.1Với trường hợp tên chương trình là a69
3.5.5.2Với trường hợp tên chương trình là abc74
3.6Quay về thư viện chuẩn nhiều lần79
3.7Tóm tắt và ghi nhớ81
4Chuỗi định dạng85
4.1Khái niệm85
4.2Quét ngăn xếp87
4.3Gặp lại dữ liệu nhập89
4.4Thay đổi biến cookie91
4.4.1Để cookie có giá trị 0x6492
4.4.2Để cookie có giá trị 0x10092
4.4.3Để cookie có giá trị 0x30093
4.4.4Để cookie có giá trị 0x300, chỉ sử dụng một %x và một %n95
4.4.5Để cookie có giá trị 0x8765432196
4.4.6Để cookie có giá trị 0x1234567898
4.4.7Để cookie có giá trị 0x04030201101
4.4.8Lập lại với chuỗi nhập bắt đầu bằng BLUE MOON103
4.4.9Để cookie có giá trị 0x69696969104
4.5Phân đoạn .dtors104
4.6Bảng GOT108
4.7Tóm tắt và ghi nhớ110
5Một số loại lỗi khác113
5.1Điều kiện đua (race condition)113
5.2Dư một (off by one)118
5.3Tràn số nguyên (integer overflow)121
5.4Tóm tắt và ghi nhớ122
6Tóm tắt125