Lab1. Buffer Overflows | Tài liệu môn An toàn thông tin Trường đại học sư phạm kỹ thuật TP. Hồ Chí Minh

Step 0: Chuẩn bị. Lợi dụng việc giới hạn của buffer để chạy bad file; Mục tiêu: Chạy bin/sh để get permission # (root) từ user bình thường. B1: Xác định ebp (return address), distance từ buffer[0] -> previous frame + 4; B2: Tắt bảo vệ kernel_random; Step 1: Disable address randomization. Step 3: Một số chuẩn bị. Lưu ý: Tài liệu giúp bạn tham khảo, ôn tập và đạt kết quả cao. Mời bạn đọc đón xem!

Vũ Văn Phước
19133045
Lab1. Buffer Overflows
Note:
Step 0: Chuẩn bị
Lợi dụng việc giới hạn của buffer để chạy bad file
Mục tiêu: Chạy bin/sh để get permission # (root) từ user bình thường
B1: Xác định ebp (return address), distance từ buffer[0] -> previous frame + 4
B2: Tắt bảo vệ kernel_random
Step 1: Disable address randomization
Step 2: Finding the address of the inject code
Tạo badfile
Vũ Văn Phước
19133045
Chạy file bằng lệnh gdb
Gọi hàm bof trong file stack.c để truy xuất thanh ghi bộ nhớ
Vũ Văn Phước
19133045
Vũ Văn Phước
19133045
Gọi giá trị địa chỉ của ebp
Gọi giá trị địa chỉ của buffer
Vũ Văn Phước
19133045
Return address = ebp + 4 = 32 + 4 = 36
Step 3: Một số chuẩn bị
Lưu ý:
- Xác định một giá trị \alpha bất kỳ sao cho tổng B = ebp + \alpha != 0 trong
Đoạn chứa shellcode, từ cuối của buffer cho đến mã code cần thiết:
Memcpy(buffer + sizeof(buffer) – sizeof(shellcode), shellcode, sizeof(shellcode));
Step 4: Thực thi tấn công
Vũ Văn Phước
19133045
sudo ln -sf /bin/zsh /bin/sh
Ngăn chặn các shell được kích hoạt trong khi tấn công
gcc -o stack -z execstack -fno-stack-protector stack.c
Ngăn chặn các chế độ bảo vệ stack (execstack và stack-protector)
Biên dịch file stack thành file output
- Vì file stack chỉ đang ở mức quyền thấp
- Nên ta sẽ chuyển sang phân lớp cao hơn để tấn công
sudo chown root stack
sudo chmod 4755 stack
Biên dịch file exploit để tạo thành badfile
gcc -o exploit exploit.c
Vũ Văn Phước
19133045
./exploit // create the badfile
Thực thi file stack để bắt đầu các chương trình gây nguy hại
./stack // launch the attack by running the vulnerable program
Step 5: Defeating Address Randomization (ASLR)
sudo sysctl -w kernel.randomize_va_space=2
Vũ Văn Phước
19133045
Thực hiện tấn công như các bước trên:
Kết quả thu được
Tấn công thất bại
Giải thích lý do:
Vũ Văn Phước
19133045
Trong ASLR, khi sử dung phần randomize_va_space. Các giá trị sau được hỗ trợ:
0 - Không ngẫu nhiên. Mọi thứ đều tĩnh.
1 - Ngẫu nhiên bảo thủ. Thư viện được chia sẻ, stack, mmap (), VDSO và heap là
ngẫu nhiên.
2 - Hoàn toàn ngẫu nhiên. Ngoài các phần tử được liệt kê ở điểm trước, bộ nhớ
được quản lý thông qua brk () cũng được ngẫu nhiên hóa.
Vậy nên khi ta đặt giá trị = 2 thì điểm đến của các vị trí ô nhớ sẽ bị ngẫu nhiên
không thể đoán trước được nên việc đoán mù ra giá trị là hoàn toàn bất khả thi.
Step 6: Turn on the StackGuard Protection
Thực hiện các bước tấn công như trước, kết quả của ebp
Đặt lại giá trị trong file exploit.c
*((long *) (buffer + )) = + 0x80;40 0xbfffea18
Vũ Văn Phước
19133045
Nguyên nhân: Nếu biên dịch với -fstack-protectior, thì sẽ có nhiều không gian hơn
được phân bổ trên stack và chi phí nhiều hơn một chút khi nhập và trả về từ một
hàm trong khi code thiết lập kiểm tra và sau đó thực sự kiểm tra xem bạn đã ghi đè
hay chưa stack khi ở trong hàm.
Nó sẽ tạo ra sự khác biệt cho ứng dụng. Nếu được kích hoạt, nó sẽ nhanh chóng
loại bỏ các cuộc tấn công buffer overflow. Chỉ khi bạn không có lệnh gọi hàm nào
trong mã của mình thì nó mới khiến chương trình của bạn không bị ảnh hưởng (và
vì bạn thường viết hàm main () và đó là một hàm được gọi bằng mã khởi động, nó
sẽ có ảnh hưởng đến chương trình của bạn). Tuy nhiên, các cuộc tấn công buffer
overflow không phải là cách tấn công duy nhất có thể được sử dụng, vì vậy nó
không phải là thuốc chữa bách bệnh. Nhưng nó là sự bảo vệ hữu ích với một chi
phí hạn chế.
Step 7: Turn on the Non-executable Stack Protection
gcc -o stack -fno-stack-protector -z noexecstack stack.c
Vũ Văn Phước
19133045
Tấn công vẫn thất bại
Giải thích:
executestack là một chương trình đặt, xóa hoặc truy vấn cờ stack có thể thực thi
của các tệp nhị phân ELF và các thư viện được chia sẻ. Trước đây, Linux đã cho
phép thực thi các lệnh trên stack và có rất nhiều mã nhị phân và thư viện được chia
sẻ giả định hành vi này. Hơn nữa, mã nhúng GCC cho ví dụ: các hàm lồng nhau
yêu cầu stack thực thi trên nhiều kiến trúc. Để tránh phá vỡ các tệp nhị phân và các
thư viện được chia sẻ cần stack thực thi, các tệp nhị phân ELF và các thư viện
được chia sẻ hiện có thể được đánh dấu là yêu cầu stack thực thi hoặc không yêu
cầu stack.
Người dùng có thể ghi đè điều này tại code assembly (thông qua tùy chọn trình
hợp dịch --execstack hoặc --noexecstack), tại thời điểm liên kết (thông qua -z thực
thi hoặc -z tùy chọn trình liên kết noexecstack) và sử dụng công cụ thực thi cũng
trên thư viện đã chia sẻ hoặc nhị phân trình liên kết . Công cụ này đặc biệt hữu ích
cho các thư viện được chia sẻ của bên thứ ba, nơi được biết rằng chúng không cần
ngăn xếp thực thi hoặc thử nghiệm chứng minh điều đó.
Vũ Văn Phước
19133045
Lab 2. OS security
Detect OS, services, and vulnerabilities
I. Detect vulnerabilities on an OS
Mục tiêu:
Kali Window XP
1. Scan bằng nmap
a. Turn on the firewall on the target machine
Vũ Văn Phước
19133045
Do bên máy XP đang bật Firewall nên khi quét hầu như không thu được kết quả
Vũ Văn Phước
19133045
b. Turn off the firewall on the target machine
Vũ Văn Phước
19133045
Vũ Văn Phước
19133045
Vũ Văn Phước
19133045
Vũ Văn Phước
19133045
2. Using nmap with vul-scrip to detect vulnerabilities on an OS
Cài đặt vulsan lên máy kali để có công cụ và database quét
Di chuyển thư mục và chuẩn bị công cụ
Vũ Văn Phước
19133045
Step 2:
Run with the command:
$sudo nmap -sV --script=vulscan/vulscan.nse 192.168.12.254
Dưới đây là hình ảnh về một số điểm yếu mà có trong database vulscan lẫn quét được
trên máy. Vì lý do số lượng quá lớn nên chỉ có một vài hình minh họa
Vũ Văn Phước
19133045
| 1/63

Preview text:

Vũ Văn Phước 19133045 Lab1. Buffer Overflows Note: Step 0: Chuẩn bị
Lợi dụng việc giới hạn của buffer để chạy bad file
Mục tiêu: Chạy bin/sh để get permission # (root) từ user bình thường
B1: Xác định ebp (return address), distance từ buffer[0] -> previous frame + 4
B2: Tắt bảo vệ kernel_random
Step 1: Disable address randomization
Step 2: Finding the address of the inject code Tạo badfile Vũ Văn Phước 19133045 Chạy file bằng lệnh gdb
Gọi hàm bof trong file stack.c để truy xuất thanh ghi bộ nhớ Vũ Văn Phước 19133045 Vũ Văn Phước 19133045
Gọi giá trị địa chỉ của ebp
Gọi giá trị địa chỉ của buffer Vũ Văn Phước 19133045
Return address = ebp + 4 = 32 + 4 = 36
Step 3: Một số chuẩn bị Lưu ý:
- Xác định một giá trị \alpha bất kỳ sao cho tổng B = ebp + \alpha != 0 trong nó
 Đoạn chứa shellcode, từ cuối của buffer cho đến mã code cần thiết:
Memcpy(buffer + sizeof(buffer) – sizeof(shellcode), shellcode, sizeof(shellcode)); Step 4: Thực thi tấn công Vũ Văn Phước 19133045 sudo ln -sf /bin/zsh /bin/sh
 Ngăn chặn các shell được kích hoạt trong khi tấn công
gcc -o stack -z execstack -fno-stack-protector stack.c
 Ngăn chặn các chế độ bảo vệ stack (execstack và stack-protector)
 Biên dịch file stack thành file output
- Vì file stack chỉ đang ở mức quyền thấp
- Nên ta sẽ chuyển sang phân lớp cao hơn để tấn công sudo chown root stack sudo chmod 4755 stack
Biên dịch file exploit để tạo thành badfile gcc -o exploit exploit.c Vũ Văn Phước 19133045
./exploit // create the badfile
Thực thi file stack để bắt đầu các chương trình gây nguy hại
./stack // launch the attack by running the vulnerable program
Step 5: Defeating Address Randomization (ASLR)
sudo sysctl -w kernel.randomize_va_space=2 Vũ Văn Phước 19133045
Thực hiện tấn công như các bước trên: Kết quả thu được  Tấn công thất bại Giải thích lý do: Vũ Văn Phước 19133045
Trong ASLR, khi sử dung phần randomize_va_space. Các giá trị sau được hỗ trợ:
0 - Không ngẫu nhiên. Mọi thứ đều tĩnh.
1 - Ngẫu nhiên bảo thủ. Thư viện được chia sẻ, stack, mmap (), VDSO và heap là ngẫu nhiên.
2 - Hoàn toàn ngẫu nhiên. Ngoài các phần tử được liệt kê ở điểm trước, bộ nhớ
được quản lý thông qua brk () cũng được ngẫu nhiên hóa.
Vậy nên khi ta đặt giá trị = 2 thì điểm đến của các vị trí ô nhớ sẽ bị ngẫu nhiên 
không thể đoán trước được nên việc đoán mù ra giá trị là hoàn toàn bất khả thi.
Step 6: Turn on the StackGuard Protection
Thực hiện các bước tấn công như trước, kết quả của ebp
Đặt lại giá trị trong file exploit.c
*((long *) (buffer + 40)) = + 0x80; 0xbfffea18 Vũ Văn Phước 19133045
Nguyên nhân: Nếu biên dịch với -fstack-protectior, thì sẽ có nhiều không gian hơn
được phân bổ trên stack và chi phí nhiều hơn một chút khi nhập và trả về từ một
hàm trong khi code thiết lập kiểm tra và sau đó thực sự kiểm tra xem bạn đã ghi đè
hay chưa stack khi ở trong hàm.
Nó sẽ tạo ra sự khác biệt cho ứng dụng. Nếu được kích hoạt, nó sẽ nhanh chóng
loại bỏ các cuộc tấn công buffer overflow. Chỉ khi bạn không có lệnh gọi hàm nào
trong mã của mình thì nó mới khiến chương trình của bạn không bị ảnh hưởng (và
vì bạn thường viết hàm main () và đó là một hàm được gọi bằng mã khởi động, nó
sẽ có ảnh hưởng đến chương trình của bạn). Tuy nhiên, các cuộc tấn công buffer
overflow không phải là cách tấn công duy nhất có thể được sử dụng, vì vậy nó
không phải là thuốc chữa bách bệnh. Nhưng nó là sự bảo vệ hữu ích với một chi phí hạn chế.
Step 7: Turn on the Non-executable Stack Protection
gcc -o stack -fno-stack-protector -z noexecstack stack.c Vũ Văn Phước 19133045 Tấn công vẫn thất bại Giải thích:
executestack là một chương trình đặt, xóa hoặc truy vấn cờ stack có thể thực thi
của các tệp nhị phân ELF và các thư viện được chia sẻ. Trước đây, Linux đã cho
phép thực thi các lệnh trên stack và có rất nhiều mã nhị phân và thư viện được chia
sẻ giả định hành vi này. Hơn nữa, mã nhúng GCC cho ví dụ: các hàm lồng nhau
yêu cầu stack thực thi trên nhiều kiến trúc. Để tránh phá vỡ các tệp nhị phân và các
thư viện được chia sẻ cần stack thực thi, các tệp nhị phân ELF và các thư viện
được chia sẻ hiện có thể được đánh dấu là yêu cầu stack thực thi hoặc không yêu cầu stack.
Người dùng có thể ghi đè điều này tại code assembly (thông qua tùy chọn trình
hợp dịch --execstack hoặc --noexecstack), tại thời điểm liên kết (thông qua -z thực
thi hoặc -z tùy chọn trình liên kết noexecstack) và sử dụng công cụ thực thi cũng
trên thư viện đã chia sẻ hoặc nhị phân trình liên kết . Công cụ này đặc biệt hữu ích
cho các thư viện được chia sẻ của bên thứ ba, nơi được biết rằng chúng không cần
ngăn xếp thực thi hoặc thử nghiệm chứng minh điều đó. Vũ Văn Phước 19133045 Lab 2. OS security
Detect OS, services, and vulnerabilities I.
Detect vulnerabilities on an OS Mục tiêu: Kali Window XP 1. Scan bằng nmap
a. Turn on the firewall on the target machine Vũ Văn Phước 19133045
Do bên máy XP đang bật Firewall nên khi quét hầu như không thu được kết quả Vũ Văn Phước 19133045
b. Turn off the firewall on the target machine Vũ Văn Phước 19133045 Vũ Văn Phước 19133045 Vũ Văn Phước 19133045 Vũ Văn Phước 19133045
2. Using nmap with vul-scrip to detect vulnerabilities on an OS
Cài đặt vulsan lên máy kali để có công cụ và database quét
Di chuyển thư mục và chuẩn bị công cụ Vũ Văn Phước 19133045 Step 2: Run with the command:
$sudo nmap -sV --script=vulscan/vulscan.nse 192.168.12.254
Dưới đây là hình ảnh về một số điểm yếu mà có trong database vulscan lẫn quét được
trên máy. Vì lý do số lượng quá lớn nên chỉ có một vài hình minh họa
Vũ Văn Phước 19133045