Ứng dụng Truyền thông & An toàn Thông tin Nội dung ● Giới thiệu ● Cấu trúc máy tính ● Hợp ngữ ● Tràn bộ đệm ● Chuỗi định dạng ● Dư một ● Điều kiện đua ● Tràn số nguyên Nội dung ● Ứng dụng web và các công nghệ an ninh web ● Chèn SQL ● Kịch bản chéo trang ● Giả yêu cầu chéo trang ● An toàn thông tin ● Các thuật toán mật mã ● Áp dụng hệ thống mật mã Giới thiệu ● Giảng viên: Nguyễn Thành Nam (namnt@), trợ giảng: Nguyễn Duy (duyn@) ● Thang điểm (trên 100): ● 30 điểm bài tập ● 30 điểm kiểm tra giữa kỳ ● 40 điểm kiểm tra cuối kỳ ● 10 điểm cộng (tổng không quá 100) ● Miễn thi với sinh viên xuất sắc ● Tài liệu: Nghệ Thuật Tận Dụng Lỗi Phần Mềm, và The Web Application Hacker's Handbook Giới thiệu ● 3 bài tập về nhà ● Bài tập sẽ được chấm lại khi sinh viên yêu cầu ● Nộp trễ sẽ không có điểm ● Gian lận sẽ không có điểm, không nhắc nhở ● Kiểm tra giữa kỳ sẽ kiểm tra những gì đã học cho đến thời điểm đó ● Kiểm tra cuối kỳ sẽ kiểm tra toàn bộ kiến thức của môn học ● Kiểm tra trắc nghiệm và trả lời ngắn Cấu trúc máy tính ● Bộ nhập chuẩn (stdin, bàn phím) ● Bộ xuất chuẩn (stdout, màn hình) ● Bộ xử lý ● Chương trình chứa các lệnh được bộ xử lý thực thi, dữ liệu được truyền qua bộ nhập, và hiển thị ở bộ xuất ● Để tận dụng lỗi ta cần phải biết cách hoạt động của bộ xử lý ● Chúng ta chỉ xét cấu trúc Intel x86 Cấu trúc máy tính ● CPU đọc lệnh từ bộ nhớ ● Con trỏ lệnh (Instruction Pointer) trỏ đến địa chỉ của lệnh sẽ được thực hiện kế tiếp ● Trong quá trình thực hiện lệnh hiện tại, con trỏ lệnh sẽ được cập nhật với giá trị của địa chỉ lệnh kế tiếp ● Mỗi lệnh có độ dài khác nhau (tối đa 15 byte), ví dụ: XOR EAX, EAX dài 2 byte (31 C0), NOP dài 1 byte (90) Cấu trúc máy tính Cấu trúc máy tính Cấu trúc máy tính Cấu trúc máy tính ● Ví dụ tại ô nhớ có địa chỉ 12345678 là các byte 31 C0 90 90, và EIP đang có giá trị 12345678 ● Lệnh sẽ được thực hiện kế tiếp là XOR EAX, EAX ● Trong khi thực hiện lệnh này, EIP sẽ có giá trị 1234567A ● Thực hiện xong lệnh thì EIP vẫn giữ giá trị này ● Lệnh thứ hai được thực hiện là NOP ● Trong khi thực hiện lệnh NOP, EIP sẽ có giá trị 1234567B ● Thực hiện xong lệnh thì EIP vẫn giữ giá trị này Cấu trúc máy tính ● Thanh ghi là một dạng bộ nhớ rất nhanh ● Được làm ngay bên trong bộ xử lý, hoạt động với cùng xung bộ nhớ ● Có ít thanh ghi, chia làm các nhóm ● Thanh ghi chung (EAX, EBX, ECX, EDX) ● Thanh ghi xử lý chuỗi (ESI, EDI) ● Thanh ghi ngăn xếp (ESP, EBP) ● Thanh ghi đặc biệt (EIP, EFLAGS) ● Thanh ghi phân vùng (SS, DS, CS, ...) Cấu trúc máy tính ● Thanh ghi chung được xử dụng như bộ nhớ siêu tốc dùng trong tính toán, biến tạm ● Thanh ghi xử lý chuỗi chuyên dùng trong các tác vụ liên quan chuỗi ● Thanh ghi ngăn xếp được sử dụng trong quản lý cấu trúc ngăn xếp ● Thanh ghi EIP là con trỏ lệnh, EFLAGS chứa cờ, hiệu ứng phụ của các lệnh ● Thanh ghi phân vùng dùng để định địa chỉ Cấu trúc máy tính ● Để truy xuất bộ nhớ, hệ điều hành dùng địa chỉ tuyến tính (linear address) ● Ô nhớ đầu tiên có địa chỉ 0, ô nhớ kế có địa chỉ 1, … Mỗi ô nhớ chứa 1 byte ● Kiến trúc 32 bit có thể định địa chỉ cho 4GB ● Địa chỉ có thể được chứa gọn trong 1 thanh ghi ● Địa chỉ tuyến tính được ánh xạ vào địa chỉ vật lý thông qua bộ quản lý bộ nhớ ảo Cấu trúc máy tính ● Đường truyền dữ liệu rộng 32 bit ● Mỗi lần truy xuất sử dụng cả 32 bit ● Làm sao để truy xuất 1 byte? ● Đọc cả 32 bit ● Chỉ xử lý 1 byte ● Lấy 8 bit nào trong 32 bit? ● Tính kết thúc nhỏ (little endian) ● Lấy 8 bit ở địa chỉ thấp hơn Cấu trúc máy tính Cấu trúc máy tính Cấu trúc máy tính ● Ngăn xếp là cấu trúc vùng nhớ đặc biệt, dạng Vào Sau Ra Trước (LIFO) ● Chứa biến cục bộ, và quá trình gọi hàm, thực thi của chương trình ● Hai thanh ghi ESP và EBP chủ yếu dùng để quản lý ngăn xếp ● ESP chỉ đến đỉnh ngăn xếp nên gọi là con trỏ ngăn xếp (stack pointer) Cấu trúc máy tính ● Ngăn xếp có hai thao tác chính ● PUSH (đưa) vào ngăn xếp ● ESP giảm 4 ● 4 byte được đưa vào địa chỉ do ESP chỉ đến ● POP (lấy) từ ngăn xếp ● 4 byte từ địa chỉ do ESP chỉ đến được chép ra ● ESP tăng 4 ● Đỉnh ngăn xếp có địa chỉ thấp nhất ● Ngăn xếp phát triển về bên dưới (grow down) Cấu trúc máy tính