Ứ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
Cấu trúc máy tính
Hợp ngữ
●
Điều khiển CPU qua mã máy 31 C0, 90
●
Các lệnh CPU hiểu được gọi là tập lệnh
●
Để dễ hiểu hơn người ta tạo ra hợp ngữ
●
Hợp ngữ là thế hệ thứ 2
●
31 C0 – XOR EAX, EAX; 90 – NOP
●
C, Pascal thế hệ thứ 3
Hợp ngữ
●
Cú pháp gồm 2 phần: mã lệnh, và đối số
●
Có thể có 0, 1, 2 hoặc 3 đối số
●
Chúng ta xem xét cú pháp kiểu Intel
●
Ví dụ:
●
●
●
●
ADD
DEC
RET
IMUL
EAX, 0x10
EBX
EAX, EBX, 9
Hợp ngữ
●
●
●
●
Các đối số (hay toán hạng) có thể là:
●
Thanh ghi
●
Bộ nhớ
●
Hằng số
Kiểu thanh ghi như EAX, BX, CL để sử dụng
giá trị của thanh ghi
Kiểu bộ nhớ [0x1234] để chỉ đến ô nhớ có địa
chỉ 0x1234, hay [EAX] ô nhớ có địa chỉ từ EAX
Kiểu hằng số như 0x1234
Hợp ngữ
●
Nhóm lệnh truyền dữ liệu
●
Nhóm lệnh luận lý
●
Nhóm lệnh số học
●
Nhóm lệnh so sánh
●
Nhóm lệnh nhảy
●
Nhóm lệnh ngăn xếp
●
Nhóm lệnh hàm
Hợp ngữ
●
MOV dst, src
●
Chép dữ liệu từ src vào dst
●
Ví dụ
–
–
–
●
MOV EAX, 1 ; (EAX = 1)
MOV EAX, EBX ; (EAX = EBX)
MOV [EAX], EBX ; (*EAX = EBX)
LEA dst, src
●
Tải địa chỉ src vào dst
●
Ví dụ
–
LEA EAX, [EBP - 0x08] ; (EAX = EBP - 0x08)
Hợp ngữ
●
XOR dst, src
●
AND dst, src
●
OR dst, src
●
NOT dst
●
NEG dst
●
Thực hiện toán tử luận lý tương ứng giữa dst
và src, và chứa kết quả trong dst.
Hợp ngữ
●
ADD dst, src
●
SUB dst, src
●
INC dst
●
DEC dst
●
Thực hiện các phép tính số học giữa dst và src,
và chứa kết quả trong dst.
●
INC cộng dst thêm 1
●
DEC giảm dst bớt 1
Hợp ngữ
●
CMP dst, src
●
●
TEST dst, src
●
●
●
Thực hiện phép toán trừ số học dst - src. Không
chứa kết quả
Thực hiện phép luận lý dst AND src. Không chứa
kết quả
Sau khi thực hiện lệnh, các cờ trong thanh ghi
EFLAGS có thể bị thay đổi.
Ví dụ:
●
TEST EAX, 1 ; (cờ Z sẽ bật nếu EAX AND 1 = 0)
Hợp ngữ
●
JMP dst
●
Gán giá trị dst vào EIP (chuyển con trỏ lệnh đến địa
chỉ dst)
●
JZ/JE dst
●
JNZ/JNE dst
●
JA/JNBE dst
●
JAE/JNB dst
●
JG/JGE/JL/JLE/JNG/JNGE/JNL/JNLE...
●
Gán giá trị EIP nếu cờ tương ứng được bật
Hợp ngữ
●
Ví dụ:
●
JNZ 0x1234
–
●
JZ 0x1234
–
●
Nhảy đến 0x1234 nếu cờ Z bật (cờ Z là 1)
CMP EAX, EBX
JE 0x5678
–
●
Nhảy đến 0x1234 nếu cờ Z không bật (cờ Z là 0)
Nhảy đến 0x5678 nếu cờ Z bật (EAX = EBX)
TEST EAX, 1
JNE 0x5678
–
Nhảy đến 0x5678 nếu cờ Z không bật (EAX and 1 = 1)
Hợp ngữ
●
LOOP dst
●
LOOPE dst
●
LOOPNE dst
●
●
Trừ ECX một đơn vị, nếu ECX khác không thì
nhảy đến địa chỉ dst nếu thỏa điều kiện
Ví dụ: (cộng (2 + 1) vào EAX)
●
MOV
123: ADD
LOOP
ECX, 2
EAX, ECX
123
Hợp ngữ
●
PUSH src
●
Đưa src vào đỉnh ngăn xếp
●
Hai tác vụ:
–
–
●
ESP = ESP – 4
MOV [ESP], src
POP dst
●
Lấy giá trị từ đỉnh ngăn xếp vào dst
●
Hai tác vụ:
–
–
MOV dst, [ESP]
ESP = ESP + 4
Hợp ngữ
●
CALL dst
●
Đưa giá trị EIP kế vào đỉnh ngăn xếp
●
Gán EIP giá trị dst
●
Hai tác vụ:
–
–
●
PUSH next_EIP
JMP dst
Ví dụ:
–
–
–
–
EIP đang có giá trị 0804844E
ESP đang chỉ đến ô nhớ chứa 80 85 04 08
Lệnh CALL dài 5 byte
CALL 0xB7EF22F0
Hợp ngữ
Hợp ngữ
●
RET
●
Lấy giá trị từ đỉnh ngăn xếp
●
Nhảy đến giá trị này
●
Hai tác vụ:
–
–
●
POP tmp
JMP tmp
Ví dụ:
–
–
–
EIP đang có giá trị B7EF2328
ESP đang chỉ đến ô nhớ chứa 53 84 04 08
RET
Hợp ngữ
- Xem thêm -