SlideShare ist ein Scribd-Unternehmen logo
1 von 18
Downloaden Sie, um offline zu lesen
What now?
Buffer
Overflow
dongianchithethoi@gmail.com – Ta Quy_13T1_DUT
Buffer overflow
Lỗi tràn bộ nhớ đệm là một điều kiện bất thường
khi một tiến trình lưu trữ dữ liệu vượt ra ngoài
của bộ nhớ đệm có chiều dài cố định. Kết quả là
dữ liệu có thể đè lên bộ nhớ liền kề.
Dữ liệu ghi đè bao gồm các bộ nhớ đệm khác,
các biến và dữ liệu điều khiển.
Thông thường có hai cách để khai thác lỗi buffer
overflow mà attacker thường dùng:
 Khai thác dựa vào lỗ hổng phần mềm thông qua
ngôn ngữ lập trình (phần mềm viết bằng ngôn ngữ C).
 Khai thác các trang web có tương tác người dùng
nhưng không ràng buộc dự liệu nhập như các trường
username, password….
Buffer overflow
Mỗi lỗi buffer overflow xuất hiện khi buffer cố gắng cấp phát 1
không gian lưu trữ lớn hơn khả năng lưu trữ của nó.
Example:
#include <stdio.h>
int main(){
char target[5]=“TTTT”;
char attacker[11]=“AAAAAAAAAAAA”;
strcpy(attacker,”DDDDDDDDDDDDDDDDDDDDD”);
printf(“%s ”,target);
return 0;
}
Buffer overflow
Kết quả của chương
trình ???
Nguyên nhân gây ra lỗi buffer overflow:
 Phương thức kiểm tra biên không được thực hiện đầy đủ hoặc
bỏ qua.
 Các ngôn ngữ lập trình bản thân nó đã có tiềm ẩn, như ngôn
ngữ C
 Các phương thức strcat(), strcpy(), sprint(), bcopy(), gets() và
canf() trong ngôn ngữ C bị khai thác vì các hàm này không
kiểm tra kích thước bộ nhớ đệm.
Buffer overflow
Có hai kiểu buffer overflow chính:
 Stack overflow
 Heap overflow
Buffer overflow
Tổ chức bộ nhơ:́
Buffer overflow
Environment
Arguments
Variables
Stack
Heap
BSS
Data
Code
High address
Low address
Stack là vùng nhớ dùng để
lưu các tham số và các biến
cục bộ của hàm.
Heap là vùng nhớ dùng để
cấp phát động, các vùng nhớ
được cấp phát bằng malloc.
Stack Overflow
Chức năng
gọi các đối số
Địa chỉ trả về
Bộ đệm 1
( biến cục bộ 1)
Bộ đệm 2
( biến cục bộ 2)
High address
BP tại
các nơi
bên
trong
khung
stack
Low address Các điểm SP
ở đây
Hướng tăng
của stack
Hướng đi
vào
• Stack sử dụng cơ chế Last
In First Out.
• Nó hoạt động như một bộ
đệm, giữ tất cả thông tin
mà hàm cần.
• Được tạo ra vào thời điểm
bắt đầu hàm và giải phóng
lúc kết thúc.
Example: int bof(){
char buffer[2];
strcpy(buffer,"AAAAAAAAAAAAAAAAAAAAAAAAAAA");
return 1;
}
int main(int argc, char **argv){
bof();
printf("Let's go :v n");
return 1;
}
Stack Overflow
Kết quả sẽ
như thế nào
nhỉ?
Phần dưới của
Stack
Dữ liệu trên đoạn
Stack
Phần cuối của Stack
Phần dưới của
Stack
Dữ liệu trên đoạn
Stack
Điạ chỉ trả về
Các dữ liệu khác
trên đoạn Stack
Phần dưới của
Stack
Dữ liệu trên đoạn
Stack
Địa chỉ trả về mới
Dữ liệu bị ghi đè
trên đoạn Stack
SP
SP SP
n Bytes
4 Bytes 4 Bytes
n Bytes +
dữ liệu mới
Một số dữ liệu
có thể bị ghi đè
Machine code
Ex.
Stack bình thường Stack khi bị kẻ tấn công
gọi một chức năng
Stack sau khi bị
một chức năng phá hoại
Stack Overflow
Heap overflow
Các biến được cấp phát tự động trong hàm, như là malloc()
được tạo ra trong heap.
Các attacker làm tràn bộ nhớ sẽ có thể overwrite các dynamic
variables.
Việc này có thể giúp các attacker điều khiển các thực thi của
chương trình.
AAAAAAAAAA BBBBBBBB CCCC
Trường điều
khiển
Dung lượng
bộ nhớ
Dung lượng
bộ nhớ
Dung lượng
bộ nhớTrường điều
khiển
Trường điều
khiển
A= malloc(10) C= malloc(4)Dung lượng Heap đơn giản
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
int main(int argc, char **argv[]){
char *input = (char *) malloc(15);
char *output =(char *) malloc(15);
strcpy(output,"normal output");
strcpy(input,"BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB");
printf("input at %p: %sn", input, input);
printf("output at %p: %sn", output, output);
return 1;
}
Heap overflow
Example:
Result of
program?
XXXXXXXXXXXXXXX “normal output”
input= malloc(15) output= malloc(15)
Heap: before overflow
BBBBBBBBBBBBBBBB BBBBBBBBBBBBBBBBB BBBBBB
input= malloc(15) output= malloc(15)
Heap: after overflow
Heap overflow
“/root/.rhosts”
“tmpflic.tmp”
Overwriting pointers (viết lại con trỏ): attacker có thể
sử dụng phương pháp này để viết lại filename,
password, uid…
Pointer
Buffer
Pointer
Buffer
Buffer Buffer
Before overflow
Before overflow
After overflow
After overflow
Overwriting a pointer in the heap
int badFunc(void)
int goodFunc(void)
Overwriting pointers (viết lại con trỏ): attacker có thể
sử dụng phương pháp này để viết lại filename,
password, uid…
int (*func)(void)
Buffer
int (*func) (void)
Buffer
Before overflow
After overflow
Overwriting a pointer in the heap
Shellcode
Shellcode là một mã nhỏ được sử dụng trong việc khai thác lỗ
hổng của một phần mềm.
Bộ đệm là mục tiêu ưa thích của attacker, vì chúng rất dễ tràn
nếu xảy ra điều kiện phù hợp.
Shellcode gây tràn bộ đệm, viết bằng hợp ngữ, khai thác lỗ
hổng trong stack và bộ nhớ quản lí heap.
 Example:
“x2dx07xd3xb4xc1x9bxd3xc4xe6x4axb7xc9x2a”
“x5dx3bx5axc7x3bxa5xd8x67xa3x49x8cx1bx3b”
“xc4xe6x4axb7xc9x2axc7x3bxa5xd8x67xd3xb4”
…………………………………………………………………………………………
Các bước tấn công tràn bộ nhớ:
1
2
3
4
Bước 1
Tìm sự hiện diện và lỗ
hổng của lỗi tràn bộ nhớ
Bước 2
Ghi nhiều dữ liệu vào bộ
đệm hoặc hơn mức mà
nó xử lý
Bước 4
Thay đổi luồng thực
hiện hàm bằng các
mã hacker.
Bước 3
Ghi đè lên địa chỉ
quay về của hàm.
Thank you
for your attention

Weitere ähnliche Inhalte

Was ist angesagt?

Bài tập mẫu C và C++ có giải
Bài tập mẫu C và C++ có giảiBài tập mẫu C và C++ có giải
Bài tập mẫu C và C++ có giảiTrung Thanh Nguyen
 
Chương 1, tư tưởng hchinh
Chương 1, tư tưởng hchinhChương 1, tư tưởng hchinh
Chương 1, tư tưởng hchinhmai_mai_yb
 
Các cấu trúc lệnh trong C
Các cấu trúc lệnh trong CCác cấu trúc lệnh trong C
Các cấu trúc lệnh trong Cpnanhvn
 
Hệ điều hành (chương 5)
Hệ điều hành (chương 5)Hệ điều hành (chương 5)
Hệ điều hành (chương 5)realpotter
 
Những nguyên tắc cơ bản xây dựng hệ thống an toàn thông tin trong doanh nghiệp
Những nguyên tắc cơ bản xây dựng hệ thống an toàn thông tin trong doanh nghiệpNhững nguyên tắc cơ bản xây dựng hệ thống an toàn thông tin trong doanh nghiệp
Những nguyên tắc cơ bản xây dựng hệ thống an toàn thông tin trong doanh nghiệpCIO Vietnam
 
Thiết kế csdl quản lý nhân sự
Thiết kế csdl quản lý nhân sựThiết kế csdl quản lý nhân sự
Thiết kế csdl quản lý nhân sựleemindinh
 
Cơ sở an toàn thông tin chương 2
Cơ sở an toàn thông tin chương 2Cơ sở an toàn thông tin chương 2
Cơ sở an toàn thông tin chương 2NguynMinh294
 
Cơ sở dữ liệu
Cơ sở dữ liệuCơ sở dữ liệu
Cơ sở dữ liệuThành Luân
 
Bài giảng ngôn ngữ lập trình C cơ bản trường đại học công nghiệp thực phẩm TP...
Bài giảng ngôn ngữ lập trình C cơ bản trường đại học công nghiệp thực phẩm TP...Bài giảng ngôn ngữ lập trình C cơ bản trường đại học công nghiệp thực phẩm TP...
Bài giảng ngôn ngữ lập trình C cơ bản trường đại học công nghiệp thực phẩm TP...Thanh Giảng Lê
 
Bài 2: Hệ điều hành và các ứng dụng mã nguồn mở
Bài 2: Hệ điều hành và các ứng dụng mã nguồn mởBài 2: Hệ điều hành và các ứng dụng mã nguồn mở
Bài 2: Hệ điều hành và các ứng dụng mã nguồn mởMasterCode.vn
 
Câu hỏi trắc nghiệm PHP
Câu hỏi trắc nghiệm PHPCâu hỏi trắc nghiệm PHP
Câu hỏi trắc nghiệm PHPZendVN
 
Phân tích lý thuyết của A. Lewis
Phân tích lý thuyết của A. LewisPhân tích lý thuyết của A. Lewis
Phân tích lý thuyết của A. LewisDigiword Ha Noi
 
Báo cáo bài tập lớn môn Cơ sở dữ liệu - Học viện công nghệ bưu chính viễn thông
Báo cáo bài tập lớn môn Cơ sở dữ liệu - Học viện công nghệ bưu chính viễn thôngBáo cáo bài tập lớn môn Cơ sở dữ liệu - Học viện công nghệ bưu chính viễn thông
Báo cáo bài tập lớn môn Cơ sở dữ liệu - Học viện công nghệ bưu chính viễn thôngHuyen Pham
 
Hệ điều hành (chương 4)
Hệ điều hành (chương 4)Hệ điều hành (chương 4)
Hệ điều hành (chương 4)realpotter
 
Bài 1: Làm quen với ASP.NET - Giáo trình FPT - Có ví dụ kèm theo
Bài 1: Làm quen với ASP.NET - Giáo trình FPT - Có ví dụ kèm theoBài 1: Làm quen với ASP.NET - Giáo trình FPT - Có ví dụ kèm theo
Bài 1: Làm quen với ASP.NET - Giáo trình FPT - Có ví dụ kèm theoMasterCode.vn
 
Effective Java - Always override toString() method
Effective Java - Always override toString() methodEffective Java - Always override toString() method
Effective Java - Always override toString() methodFerdous Mahmud Shaon
 

Was ist angesagt? (20)

Bài tập mẫu C và C++ có giải
Bài tập mẫu C và C++ có giảiBài tập mẫu C và C++ có giải
Bài tập mẫu C và C++ có giải
 
Chương 1, tư tưởng hchinh
Chương 1, tư tưởng hchinhChương 1, tư tưởng hchinh
Chương 1, tư tưởng hchinh
 
Các cấu trúc lệnh trong C
Các cấu trúc lệnh trong CCác cấu trúc lệnh trong C
Các cấu trúc lệnh trong C
 
Quản lý nhân sự-lương trên hệ quản trị cơ sở dữ liệu MICROSOFT ACCESS
Quản lý nhân sự-lương trên hệ quản trị cơ sở dữ liệu MICROSOFT ACCESSQuản lý nhân sự-lương trên hệ quản trị cơ sở dữ liệu MICROSOFT ACCESS
Quản lý nhân sự-lương trên hệ quản trị cơ sở dữ liệu MICROSOFT ACCESS
 
Hệ điều hành (chương 5)
Hệ điều hành (chương 5)Hệ điều hành (chương 5)
Hệ điều hành (chương 5)
 
Những nguyên tắc cơ bản xây dựng hệ thống an toàn thông tin trong doanh nghiệp
Những nguyên tắc cơ bản xây dựng hệ thống an toàn thông tin trong doanh nghiệpNhững nguyên tắc cơ bản xây dựng hệ thống an toàn thông tin trong doanh nghiệp
Những nguyên tắc cơ bản xây dựng hệ thống an toàn thông tin trong doanh nghiệp
 
Thiết kế csdl quản lý nhân sự
Thiết kế csdl quản lý nhân sựThiết kế csdl quản lý nhân sự
Thiết kế csdl quản lý nhân sự
 
Cơ sở an toàn thông tin chương 2
Cơ sở an toàn thông tin chương 2Cơ sở an toàn thông tin chương 2
Cơ sở an toàn thông tin chương 2
 
Introduction to Binary Exploitation
Introduction to Binary Exploitation	Introduction to Binary Exploitation
Introduction to Binary Exploitation
 
Cơ sở dữ liệu
Cơ sở dữ liệuCơ sở dữ liệu
Cơ sở dữ liệu
 
Heap Base Exploitation
Heap Base ExploitationHeap Base Exploitation
Heap Base Exploitation
 
Bài giảng ngôn ngữ lập trình C cơ bản trường đại học công nghiệp thực phẩm TP...
Bài giảng ngôn ngữ lập trình C cơ bản trường đại học công nghiệp thực phẩm TP...Bài giảng ngôn ngữ lập trình C cơ bản trường đại học công nghiệp thực phẩm TP...
Bài giảng ngôn ngữ lập trình C cơ bản trường đại học công nghiệp thực phẩm TP...
 
Bài 2: Hệ điều hành và các ứng dụng mã nguồn mở
Bài 2: Hệ điều hành và các ứng dụng mã nguồn mởBài 2: Hệ điều hành và các ứng dụng mã nguồn mở
Bài 2: Hệ điều hành và các ứng dụng mã nguồn mở
 
Câu hỏi trắc nghiệm PHP
Câu hỏi trắc nghiệm PHPCâu hỏi trắc nghiệm PHP
Câu hỏi trắc nghiệm PHP
 
Phân tích lý thuyết của A. Lewis
Phân tích lý thuyết của A. LewisPhân tích lý thuyết của A. Lewis
Phân tích lý thuyết của A. Lewis
 
Báo cáo bài tập lớn môn Cơ sở dữ liệu - Học viện công nghệ bưu chính viễn thông
Báo cáo bài tập lớn môn Cơ sở dữ liệu - Học viện công nghệ bưu chính viễn thôngBáo cáo bài tập lớn môn Cơ sở dữ liệu - Học viện công nghệ bưu chính viễn thông
Báo cáo bài tập lớn môn Cơ sở dữ liệu - Học viện công nghệ bưu chính viễn thông
 
Giáo trình quản lý dự án
Giáo trình quản lý dự ánGiáo trình quản lý dự án
Giáo trình quản lý dự án
 
Hệ điều hành (chương 4)
Hệ điều hành (chương 4)Hệ điều hành (chương 4)
Hệ điều hành (chương 4)
 
Bài 1: Làm quen với ASP.NET - Giáo trình FPT - Có ví dụ kèm theo
Bài 1: Làm quen với ASP.NET - Giáo trình FPT - Có ví dụ kèm theoBài 1: Làm quen với ASP.NET - Giáo trình FPT - Có ví dụ kèm theo
Bài 1: Làm quen với ASP.NET - Giáo trình FPT - Có ví dụ kèm theo
 
Effective Java - Always override toString() method
Effective Java - Always override toString() methodEffective Java - Always override toString() method
Effective Java - Always override toString() method
 

Andere mochten auch

Buffer overflow attacks
Buffer overflow attacksBuffer overflow attacks
Buffer overflow attacksJoe McCarthy
 
kiến trúc máy tính và hợp ngữ Bài 00
kiến trúc máy tính và hợp ngữ Bài 00kiến trúc máy tính và hợp ngữ Bài 00
kiến trúc máy tính và hợp ngữ Bài 00Nhóc Nhóc
 
Buffer overflow attacks
Buffer overflow attacksBuffer overflow attacks
Buffer overflow attacksKapil Nagrale
 
CNIT 127 Ch 4: Introduction to format string bugs
CNIT 127 Ch 4: Introduction to format string bugsCNIT 127 Ch 4: Introduction to format string bugs
CNIT 127 Ch 4: Introduction to format string bugsSam Bowne
 
System Hacking Tutorial #1 - Introduction to Vulnerability and Type of Vulner...
System Hacking Tutorial #1 - Introduction to Vulnerability and Type of Vulner...System Hacking Tutorial #1 - Introduction to Vulnerability and Type of Vulner...
System Hacking Tutorial #1 - Introduction to Vulnerability and Type of Vulner...sanghwan ahn
 
Tổng quan về DoS - DDoS - DRDoS
Tổng quan về DoS - DDoS - DRDoSTổng quan về DoS - DDoS - DRDoS
Tổng quan về DoS - DDoS - DRDoSThieu Mao
 

Andere mochten auch (9)

Buffer overflow attacks
Buffer overflow attacksBuffer overflow attacks
Buffer overflow attacks
 
kiến trúc máy tính và hợp ngữ Bài 00
kiến trúc máy tính và hợp ngữ Bài 00kiến trúc máy tính và hợp ngữ Bài 00
kiến trúc máy tính và hợp ngữ Bài 00
 
How2heap
How2heap How2heap
How2heap
 
Buffer overflow attacks
Buffer overflow attacksBuffer overflow attacks
Buffer overflow attacks
 
CNIT 127 Ch 4: Introduction to format string bugs
CNIT 127 Ch 4: Introduction to format string bugsCNIT 127 Ch 4: Introduction to format string bugs
CNIT 127 Ch 4: Introduction to format string bugs
 
Software Exploits
Software ExploitsSoftware Exploits
Software Exploits
 
System Hacking Tutorial #1 - Introduction to Vulnerability and Type of Vulner...
System Hacking Tutorial #1 - Introduction to Vulnerability and Type of Vulner...System Hacking Tutorial #1 - Introduction to Vulnerability and Type of Vulner...
System Hacking Tutorial #1 - Introduction to Vulnerability and Type of Vulner...
 
Buffer overflow
Buffer overflowBuffer overflow
Buffer overflow
 
Tổng quan về DoS - DDoS - DRDoS
Tổng quan về DoS - DDoS - DRDoSTổng quan về DoS - DDoS - DRDoS
Tổng quan về DoS - DDoS - DRDoS
 

Ähnlich wie Buffer overflow

Lập Trình an toàn - Secure programming
Lập Trình an toàn - Secure programmingLập Trình an toàn - Secure programming
Lập Trình an toàn - Secure programmingbeatmaking
 
7 can ban assembly
7 can ban assembly7 can ban assembly
7 can ban assemblyLy hai
 
Chuong 4. lap trinh hop ngu
Chuong 4. lap trinh hop nguChuong 4. lap trinh hop ngu
Chuong 4. lap trinh hop ngumituan
 
Chuong06
Chuong06Chuong06
Chuong06na
 
LP_TRINH_HP_NG_MIPS_Mc_dich.pdf
LP_TRINH_HP_NG_MIPS_Mc_dich.pdfLP_TRINH_HP_NG_MIPS_Mc_dich.pdf
LP_TRINH_HP_NG_MIPS_Mc_dich.pdfChuong
 
Hàm và Chuỗi
Hàm và ChuỗiHàm và Chuỗi
Hàm và Chuỗipnanhvn
 
Chuong10
Chuong10Chuong10
Chuong10na
 
Chuanmanguon 151124092923-lva1-app6892
Chuanmanguon 151124092923-lva1-app6892Chuanmanguon 151124092923-lva1-app6892
Chuanmanguon 151124092923-lva1-app6892HaiNguyen870
 
Coding Standard (Chuẩn Mã Nguồn)
Coding Standard (Chuẩn Mã Nguồn)Coding Standard (Chuẩn Mã Nguồn)
Coding Standard (Chuẩn Mã Nguồn)Hong Le Van
 
Đề tài giáo trình: Lập trình hệ thống và điều khiển thiết bị từ xa
Đề tài giáo trình: Lập trình hệ thống và điều khiển thiết bị từ xaĐề tài giáo trình: Lập trình hệ thống và điều khiển thiết bị từ xa
Đề tài giáo trình: Lập trình hệ thống và điều khiển thiết bị từ xaViết thuê trọn gói ZALO 0934573149
 
Chuong04
Chuong04Chuong04
Chuong04na
 
Bài Giảng Vi Xử Lý ICTU
Bài Giảng Vi Xử Lý ICTUBài Giảng Vi Xử Lý ICTU
Bài Giảng Vi Xử Lý ICTUNgô Doãn Tình
 
Lap trinh assembler
Lap trinh assemblerLap trinh assembler
Lap trinh assemblerleduanmtt
 
Chương 3. Dịch ngược mã độc.pdf
Chương 3.  Dịch ngược mã độc.pdfChương 3.  Dịch ngược mã độc.pdf
Chương 3. Dịch ngược mã độc.pdfdong55
 

Ähnlich wie Buffer overflow (20)

Lập Trình an toàn - Secure programming
Lập Trình an toàn - Secure programmingLập Trình an toàn - Secure programming
Lập Trình an toàn - Secure programming
 
Basic C programming
Basic C programmingBasic C programming
Basic C programming
 
7 can ban assembly
7 can ban assembly7 can ban assembly
7 can ban assembly
 
Chuong 4. lap trinh hop ngu
Chuong 4. lap trinh hop nguChuong 4. lap trinh hop ngu
Chuong 4. lap trinh hop ngu
 
Ngon ngu c
Ngon ngu cNgon ngu c
Ngon ngu c
 
Chuong 3
Chuong 3Chuong 3
Chuong 3
 
T4
T4T4
T4
 
Chuong06
Chuong06Chuong06
Chuong06
 
LP_TRINH_HP_NG_MIPS_Mc_dich.pdf
LP_TRINH_HP_NG_MIPS_Mc_dich.pdfLP_TRINH_HP_NG_MIPS_Mc_dich.pdf
LP_TRINH_HP_NG_MIPS_Mc_dich.pdf
 
Hop ngu mips
Hop ngu mipsHop ngu mips
Hop ngu mips
 
Hàm và Chuỗi
Hàm và ChuỗiHàm và Chuỗi
Hàm và Chuỗi
 
Chuong10
Chuong10Chuong10
Chuong10
 
Chuanmanguon 151124092923-lva1-app6892
Chuanmanguon 151124092923-lva1-app6892Chuanmanguon 151124092923-lva1-app6892
Chuanmanguon 151124092923-lva1-app6892
 
Coding Standard (Chuẩn Mã Nguồn)
Coding Standard (Chuẩn Mã Nguồn)Coding Standard (Chuẩn Mã Nguồn)
Coding Standard (Chuẩn Mã Nguồn)
 
Đề tài giáo trình: Lập trình hệ thống và điều khiển thiết bị từ xa
Đề tài giáo trình: Lập trình hệ thống và điều khiển thiết bị từ xaĐề tài giáo trình: Lập trình hệ thống và điều khiển thiết bị từ xa
Đề tài giáo trình: Lập trình hệ thống và điều khiển thiết bị từ xa
 
1 -nhapmon
1  -nhapmon1  -nhapmon
1 -nhapmon
 
Chuong04
Chuong04Chuong04
Chuong04
 
Bài Giảng Vi Xử Lý ICTU
Bài Giảng Vi Xử Lý ICTUBài Giảng Vi Xử Lý ICTU
Bài Giảng Vi Xử Lý ICTU
 
Lap trinh assembler
Lap trinh assemblerLap trinh assembler
Lap trinh assembler
 
Chương 3. Dịch ngược mã độc.pdf
Chương 3.  Dịch ngược mã độc.pdfChương 3.  Dịch ngược mã độc.pdf
Chương 3. Dịch ngược mã độc.pdf
 

Buffer overflow

  • 2. Buffer overflow Lỗi tràn bộ nhớ đệm là một điều kiện bất thường khi một tiến trình lưu trữ dữ liệu vượt ra ngoài của bộ nhớ đệm có chiều dài cố định. Kết quả là dữ liệu có thể đè lên bộ nhớ liền kề. Dữ liệu ghi đè bao gồm các bộ nhớ đệm khác, các biến và dữ liệu điều khiển.
  • 3. Thông thường có hai cách để khai thác lỗi buffer overflow mà attacker thường dùng:  Khai thác dựa vào lỗ hổng phần mềm thông qua ngôn ngữ lập trình (phần mềm viết bằng ngôn ngữ C).  Khai thác các trang web có tương tác người dùng nhưng không ràng buộc dự liệu nhập như các trường username, password…. Buffer overflow
  • 4. Mỗi lỗi buffer overflow xuất hiện khi buffer cố gắng cấp phát 1 không gian lưu trữ lớn hơn khả năng lưu trữ của nó. Example: #include <stdio.h> int main(){ char target[5]=“TTTT”; char attacker[11]=“AAAAAAAAAAAA”; strcpy(attacker,”DDDDDDDDDDDDDDDDDDDDD”); printf(“%s ”,target); return 0; } Buffer overflow Kết quả của chương trình ???
  • 5. Nguyên nhân gây ra lỗi buffer overflow:  Phương thức kiểm tra biên không được thực hiện đầy đủ hoặc bỏ qua.  Các ngôn ngữ lập trình bản thân nó đã có tiềm ẩn, như ngôn ngữ C  Các phương thức strcat(), strcpy(), sprint(), bcopy(), gets() và canf() trong ngôn ngữ C bị khai thác vì các hàm này không kiểm tra kích thước bộ nhớ đệm. Buffer overflow
  • 6. Có hai kiểu buffer overflow chính:  Stack overflow  Heap overflow Buffer overflow
  • 7. Tổ chức bộ nhơ:́ Buffer overflow Environment Arguments Variables Stack Heap BSS Data Code High address Low address Stack là vùng nhớ dùng để lưu các tham số và các biến cục bộ của hàm. Heap là vùng nhớ dùng để cấp phát động, các vùng nhớ được cấp phát bằng malloc.
  • 8. Stack Overflow Chức năng gọi các đối số Địa chỉ trả về Bộ đệm 1 ( biến cục bộ 1) Bộ đệm 2 ( biến cục bộ 2) High address BP tại các nơi bên trong khung stack Low address Các điểm SP ở đây Hướng tăng của stack Hướng đi vào • Stack sử dụng cơ chế Last In First Out. • Nó hoạt động như một bộ đệm, giữ tất cả thông tin mà hàm cần. • Được tạo ra vào thời điểm bắt đầu hàm và giải phóng lúc kết thúc.
  • 9. Example: int bof(){ char buffer[2]; strcpy(buffer,"AAAAAAAAAAAAAAAAAAAAAAAAAAA"); return 1; } int main(int argc, char **argv){ bof(); printf("Let's go :v n"); return 1; } Stack Overflow Kết quả sẽ như thế nào nhỉ?
  • 10. Phần dưới của Stack Dữ liệu trên đoạn Stack Phần cuối của Stack Phần dưới của Stack Dữ liệu trên đoạn Stack Điạ chỉ trả về Các dữ liệu khác trên đoạn Stack Phần dưới của Stack Dữ liệu trên đoạn Stack Địa chỉ trả về mới Dữ liệu bị ghi đè trên đoạn Stack SP SP SP n Bytes 4 Bytes 4 Bytes n Bytes + dữ liệu mới Một số dữ liệu có thể bị ghi đè Machine code Ex. Stack bình thường Stack khi bị kẻ tấn công gọi một chức năng Stack sau khi bị một chức năng phá hoại Stack Overflow
  • 11. Heap overflow Các biến được cấp phát tự động trong hàm, như là malloc() được tạo ra trong heap. Các attacker làm tràn bộ nhớ sẽ có thể overwrite các dynamic variables. Việc này có thể giúp các attacker điều khiển các thực thi của chương trình. AAAAAAAAAA BBBBBBBB CCCC Trường điều khiển Dung lượng bộ nhớ Dung lượng bộ nhớ Dung lượng bộ nhớTrường điều khiển Trường điều khiển A= malloc(10) C= malloc(4)Dung lượng Heap đơn giản
  • 12. #include <stdlib.h> #include <string.h> #include <stdio.h> int main(int argc, char **argv[]){ char *input = (char *) malloc(15); char *output =(char *) malloc(15); strcpy(output,"normal output"); strcpy(input,"BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB"); printf("input at %p: %sn", input, input); printf("output at %p: %sn", output, output); return 1; } Heap overflow Example: Result of program?
  • 13. XXXXXXXXXXXXXXX “normal output” input= malloc(15) output= malloc(15) Heap: before overflow BBBBBBBBBBBBBBBB BBBBBBBBBBBBBBBBB BBBBBB input= malloc(15) output= malloc(15) Heap: after overflow Heap overflow
  • 14. “/root/.rhosts” “tmpflic.tmp” Overwriting pointers (viết lại con trỏ): attacker có thể sử dụng phương pháp này để viết lại filename, password, uid… Pointer Buffer Pointer Buffer Buffer Buffer Before overflow Before overflow After overflow After overflow Overwriting a pointer in the heap
  • 15. int badFunc(void) int goodFunc(void) Overwriting pointers (viết lại con trỏ): attacker có thể sử dụng phương pháp này để viết lại filename, password, uid… int (*func)(void) Buffer int (*func) (void) Buffer Before overflow After overflow Overwriting a pointer in the heap
  • 16. Shellcode Shellcode là một mã nhỏ được sử dụng trong việc khai thác lỗ hổng của một phần mềm. Bộ đệm là mục tiêu ưa thích của attacker, vì chúng rất dễ tràn nếu xảy ra điều kiện phù hợp. Shellcode gây tràn bộ đệm, viết bằng hợp ngữ, khai thác lỗ hổng trong stack và bộ nhớ quản lí heap.  Example: “x2dx07xd3xb4xc1x9bxd3xc4xe6x4axb7xc9x2a” “x5dx3bx5axc7x3bxa5xd8x67xa3x49x8cx1bx3b” “xc4xe6x4axb7xc9x2axc7x3bxa5xd8x67xd3xb4” …………………………………………………………………………………………
  • 17. Các bước tấn công tràn bộ nhớ: 1 2 3 4 Bước 1 Tìm sự hiện diện và lỗ hổng của lỗi tràn bộ nhớ Bước 2 Ghi nhiều dữ liệu vào bộ đệm hoặc hơn mức mà nó xử lý Bước 4 Thay đổi luồng thực hiện hàm bằng các mã hacker. Bước 3 Ghi đè lên địa chỉ quay về của hàm.
  • 18. Thank you for your attention