Tải bản đầy đủ (.docx) (29 trang)

Giải ngân hàng Kiểm thử xâm nhập mạng PTIT

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (489.59 KB, 29 trang )

1. Trình bày các giai đoạn tấn công phổ biến của hacker.
2. Kiểm thử xâm nhập là gì? Tại sao chúng ta cần kiểm thử xâm nhập?
3. Nêu một số mục tiêu cần kiểm thử cho một hoạt động kiểm thử xâm nhập. Cần chú ý
những gì khi lập kế hoạch kiểm thử xâm nhập?
4. Mô tả một số loại kiểm thử xâm nhập.
5. Mô tả các giai đoạn của một hoạt động kiểm thử xâm nhập.
6. Mô tả công cụ em biết có thể trợ giúp trong từng giai đoạn tương ứng của một hoạt
động kiểm thử xâm nhập.
7. Tấn công vào yếu tố con người (social engineering) là gì? Tại sao kỹ thuật này lại hiệu
quả trong thực tế?
8. Mô tả về các mục tiêu của một cuộc tấn công vào yếu tố con người. Mô tả các giai
đoạn của một cuộc tấn công dạng này.
9. Phân loại và mô tả một số loại tấn công vào yếu tố con người.
10. Trình bày phương pháp và công cụ đối phó với tấn công vào yếu tố con người.
11. Xâm nhập vật lý là gì? Trình bày về các giai đoạn của một cuộc tấn công vật lý.
12. Mô tả về một số kỹ thuật trong xâm nhập vật lý phổ biến mà em đã được học. Ví dụ
như thu thập thông tin, cách vượt qua các biện pháp kiểm soát truy cập, các biện pháp an
ninh,
13. Kỹ thuật Fuzzing là gì? Tại sao kỹ thuật này lại quan trọng? Có các kiểu fuzzing nào?
14. Dumb fuzzing là gì? Smart fuzzing là gì? Chúng được dùng trong trường hợp nào?
15. Mô tả cách thức đánh giá fuzzing dựa trên mức độ bao phủ mã lệnh (code coverage)
16. Mô tả các phân vùng bộ nhớ của một process, tác dụng của từng phân vùng
17. Stack frame là gì? Vẽ stack frame của hàm main (ví dụ stack1)


18. Con trỏ trở về (old eip) lưu trong stack là gì?
19. Mô tả tác dụng của thanh ghi: esp, ebp, eip.
20. Lỗi tràn bộ đệm là gì?
21.
a) Vẽ sơ đồ trạng thái của stack khi gọi hàm foo1(), vị trí của ebp, esp.
b) Khi hàm main() gọi foo1(), nó có thể truyền tham số cho hàm foo1() bằng cách nào.


c) Làm cách nào để báo cho foo1() biết vị trí lệnh cần quay lại để thực hiện tiếp trong
hàm main()?
d) Địa chỉ của biến cục bộ trong stack của hàm foo1() có thể tính ra bằng cách nào?

22. Nhập chuỗi đúng để in ra chuỗi "You win!" ra màn hình cho đoạn code dưới đây. Vẽ
trạng thái của ngăn xếp cần đạt được.


23. Các option của lệnh dịch có ý nghĩa gì
$ gcc -fno-stack-protector -ggdb . /stack.c -o stack
24. Quy ước kết thúc nhỏ (little endian) của bộ xử lý Intel X86 hiểu như thế nào?
25. Thư viện ltrace dùng để làm gì?
26. Hãy mô tả một số cơ chế bảo vệ bộ nhớ của hệ điều hành.
27. Làm cách nào để viết mã máy và chèn vào chương trình thực thi? Mã máy được chèn
vào nằm trong phân vùng bộ nhớ nào của chương trình?
28. Nêu một số vấn đề có thể gặp phải khi tạo và chèn bytecode vào chương trình thực thi
(vd như NULL byte, IDS, các cơ chế bảo vệ bộ nhớ, sinh bytecode cho các nền tảng khác
nhau )? Làm cách nào để xử lý nó?
29. NOP sled là gì? Tại sao cần dùng NOP sled?


Bài Làm
Câu 1. Trình bày các giai đoạn tấn công phổ biến của hacker.
-

-

-

-


-

Bước 1: Lựa chọn mục tiêu:
+ Động cơ có thể do hận thù hoặc vì vui thích hay lợi nhuận
+ Không có quy tắc cơ bản, không có chuyển giao, đội trắng sẽ không biết
trước về cuộc tấn công.
Bước 2: Hệ thống trung gian:
+ Tin tặc bắt đầu cuộc tấn công từ một hệ thống khác, do đó khó có thể bị
theo dõi
+ Có nhiều hệ thống trung gian giữa nạn nhân và tin tặc
+ Các hệ thống trung gian cũng thường là nạn nhân của tin tặc
Bước 3: Tin tặc sẽ tiến hành các bước như kiểm thử xâm nhập:
+ Quét thụ động
+ Quét chủ động
+ Liệt kê các khu vực tấn công
+ Lựa chọn hệ thống mục tiêu
+ Thăm dò
+ Khai thác lỗ hổng chưa được phát hiện
+ Nâng cao đặc quyền
Bước 4: Duy trì đăng nhập:
+ Bao gồm việc tải và cài đặt các ứng dụng như rootkit, backdoor, trojan,
để có thể lấy quyền truy cập nhanh chóng sau đó.
Bước 5: Xóa dấu vết
+ Xóa log sự kiện xảy ra
+ Ẩn các tệp tải lên
+ Ẩn các tiến trình hoạt động cho phép duy trì đăng nhập
+ Vô hiệu hóa bản tin gửi đến hệ thống bảo mật và log hệ thống để ẩn các
tiến trình nguy hiểm
Bước 6: Củng cố hệ thống:

+ Sau khi lấy được đặc quyền sở hữu một hệ thống, tin tặc có thể sửa các
lỗ bảo mật hệ thống để không kẻ tấn công nào khác sử dụng hệ thống
cho mục đích khác

2. Kiểm thử xâm nhập là gì? Tại sao chúng ta cần kiểm thử xâm nhập?
 Kiểm thử xâm nhập là quá trình xác định các lỗ hổng bảo mật trong hệ thống bằng
các đánh giá các mối nguy hại cho hệ thống thông qua việc sử dụng các kĩ thuật
tấn công và gây nguy hại cho hệ thống. Hiểu đơn giản, kiểm thử xâm nhập là tự














tấn công vào hệ thống để phát hiện ra các lỗ hổng hoặc dò tìm dầu vết khi hệ
thống bị xâm nhập.
Mục tiêu:
- Đột nhập vào hệ thống và nhảy từ hệ thống này sang hệ thống khác, đến khi
chiếm được quyền điều khiển
Kết quả:
- Chỉ ra cho người dùng những gì mà một kẻ tấn công có thể thực hiện được với
tình trạng bảo mật hiện tại

Nội dung chính:
- Đánh giá cơ sở hạ tầng: đánh giá cấu trúc mạng, cá biện pháp tuân thủ hiện tại,
khả năng thích ứng
- Đánh giá hệ thống máy chủ: Máy chủ Window/Linux theo phiên bản, cập nhật,
cấu hình vá lỗi
- Đánh gái các ứng dụng web:
+ Đánh giá dựa trên các công cụ chuyên dụng để tấn công thử nghiệm
+ Đánh giá từ bên trong bằng cách kiểm tra mã nguồn về các vấn đề xác
thực, cấp quyền.
Các loại kiểm thử:
- Kiểm thử hộp trắng
- Kiểm thử hộp đen
- Kiểm thử hộp xám
Các bước thực hiện:
- Tạo 2 – 3 nhóm
- Thiết lập các quy tắc cơ bản
- Quét thụ động
- Quét chủ động
- Liệt kê các khu vực tấn công
- Thăm do
- Lựa chọn mục tiêu
- Khai thác lỗ hổng chưa được phát hiện
- Nâng quyền
- Tài liệu và báo cáo
Tại sao cần kiểm thử xâm nhập
- Đảm bảo dữ liệu quan trọng không bị truy nhập trái phép bởi người dùng
không có quyền
-

Xác định mối đe dọa đối với một hệ thống của một tổ chức


-

Cung cấp một đánh giá kỹ lưỡng và toàn diện về an ninh bao gồm chính sách,
thủ tục, thiết kế và thực hiện


-

Cung cấp phương pháp toàn diện để có thể ngăn chặn các cuộc tấn công

-

Đem lại hiệu quả cao về mặt tài chính (chi tiêu cho kiểm thử xâm nhập có thể
thấp hơn rất nhiều so với rủi ro khi hệ thống bị tấn công)

Câu 3. Nêu một số mục tiêu cần kiểm thử cho một hoạt động kiểm thử xâm nhập. Cần
chú ý những gì khi lập kế hoạch kiểm thử xâm nhập?
 Mục tiêu cần kiểm thử cho hoạt động kiểm thử xâm nhập:
- Nhân viên trong công ty.
- Các thiết bị mạng.
- Phần mềm hệ điều hành.
- Các ứng dụng web.
 Chú ý:
- Phạm vi kiểm thử:
+ Kiểm thử toàn bộ hệ thống hay chỉ một phần hệ thống.
+ Thấy được các loại hệ thống trong phạm vi kiểm thử để đánh giá đúng
mức
- Xác định các địa điểm trong phạm vi kiểm thử:
+ Để tính toán được khoảng thời gian và mức độ cần thiết để thực hiện

kiểm thử an ninh vật lý
+ Một số trang web thì cần chú ý đến nơi đặt trung tâm dữ liệu và tập
trung vào người dùng
- Tổ chức một đội kiểm thử xâm nhập:
+ Không cố định nhưng thường gồm các thành phần sau:
 Trưởng nhóm
 Chuyên gia bảo mật vật lý
 Chuyên gia bảo mật tấn công yếu tố con người tấn công yếu tố
con người
 Chuyên gia bảo mật không dây
 Chuyên gia bảo mật mạng
 Chuyên gia hệ điều hành
- Việc phân chia ca kiểm thử:
+ Việc phân chia ca kiểm thử là rất cần thiết
+ Có thể chia thành các giai đoạn:
 Ngoại vi
 Nội bộ
 Đảm bảo chất lượng và báo cáo
+ Hoặc phân chia nhỏ hơn thành từng mục nhỏ hơn:
 Tìm kiếm thông tin
 Khai thác yếu tố con người


-

 Quét cổng
 ...
Thỏa thuận trước khi thực hiện kiểm thử:
+ Mô tả và thống nhất công việc tiến hành giữa hai bên một cách rõ ràng
+ Cần một bản xác nhận về các thành viên trong đội kiểm thử xâm nhập

trong trường hợp cần thiết

Câu 4. Mô tả một số loại kiểm thử xâm nhập.
-

-

-

Kiểm thử hộp trắng:
+ Nhóm kiểm thử đã biết về sơ đồ mạng, hồ sơ tài sản hoặc các thông tin
hữu ích khác.
+ Các doanh nghiệp biết mối đe dọa đến từ nhân viên, đối tác thì sử dụng
kiểm thử hộp trắng.
 Vì những người này có kiến thức về hệ thống mạng, các trang
web
 Họ có thể đăng nhập vào hệ thống
 Biết nhân viên làm việc trong tổ chức, cơ cấu quản lý, các ứng
dụng bên trong
 Các thông tin này đủ để khởi tạo một cuộc tấn công nhắm vào
nhiều mục tiêu
Kiểm thử hộp đen:
+ Nhóm kiểm thử hoàn toàn không biết thông tin gì hệ thống.
+ Chuyên gia đặt mình vào vai tin tặc và cố gắng tấn công hệ thống
+ Hoặc họ sẽ được cấp cho một dải IP để hạn chế tổn thất đối với các máy
bên trong mạng
+ Loại kiểm thử này là mô tả chính xác nhất nhưng gì mà tin tặc có thể
làm
Kiểm thử hộp xám:
+ Là loại kiểm thử nằm giữa kiểm thử hộp đen và kiểm thử hộp trắng.

+ Đây là dạng kiểm thử mà nhóm kiểm thử chỉ được cung cấp thông tin
hạn chế và chỉ khi thực sự cần thiết.
+ Vì vậy khi tiến hành công việc họ cần cung cấp nhiều thông tin truy cập
để đẩy nhanh quá trình
+ Phương thức này dùng để tối ưu hóa tính hiện thực mà vẫn đảm bảo
nguồn ngân sách hợp lý.


Câu 5. Mô tả các giai đoạn của một hoạt động kiểm thử xâm nhập.
 Giai đoạn trước tấn công
-

Đề cập đến chế độ của cuộc tấn công và mục tiêu cần đạt được

-

Xác định vị trí, thu thập và xác định thông tin về mục tiêu

-

Tìm kiếm càng nhiều thông tin của mục tiêu càng tốt
 việc thu thập nhiều thông tin theo nhiều cách khác nhau giúp xây dựng kế
hoạch tấn công

 Giai đoạn tấn công
-

Kiểm tra vùng ngoài: Kiểm tra an ninh vùng ngoài

-


Thu thập mục tiêu:
+ Thu thập một mục tiêu cần phải tập hợp các hoạt động được thực hiện
bởi các tester với các đối tượng máy tính bị nghi ngờ đến nhiều các thử
thách xâm nhập chẳng hạn như quét lỗ hổng và đánh giá an ninh

-

Leo thang đặc quyền
+ Một khi đã dành được mục tiêu, tester cố gắng khai thác hệ thống và
truy cập các nguồn tài nguyên được bảo vệ
 Tận dụng lợi thế của các chính sách bảo mật kém và tận dụng lợi
thế của email hoặc code web không an toàn để thu thập thông tin
dẫn tới sự leo thang đặc quyền
 Sử dụng các ký thuật như brute force để đạt được đặc quyền
(crack mật khẩu)
 Sử dụng các trojan và phân tích giao thức
 Sử dụng thông tin thu thập được thông qua các ký thuật như ký
thuật giao tiếp để truy cập trái phép vào các nguồn tài nguyên đặc
quyền

-

Thực thi, cấy ghép và xem lại
+ Thỏa hiệp hệ thống
 Có được sự thỏa hiệp của hệ thống bằng cách thực thi đoạn code
bất kỳ


+ Thâm nhập hệ thống

 Khám phá mức độ lỗi của an ninh
+ Thực hiện các khai thác
 Tận dụng các lỗ hổng được xác định trong hệ thống mục tiêu
 Giai đoạn sau tấn công
-

Đây là giai đoạn quan trọng, có trách nhiệm khôi phục lại các hệ thống trước
kia
+ Loại bỏ tất cả các tập tin đã tải lên hệ thống
+ Làm sạch tất cả các mục đăng ký và loại bỏ lỗ hổng
+ Loại bỏ tất cả các công cụ và khai thác từ các hệ thống thử nghiệm
+ Khôi phục lại mạng lưới thử nghiệm bằng cách loại bỏ chia sẻ và kết
nối
+ Phân tích các kết quả và trình bày với tổ chức

Câu 6. Mô tả công cụ em biết có thể trợ giúp trong từng giai đoạn tương ứng của một
hoạt động kiểm thử xâm nhập.
 Giai đoạn trước tấn công: công cụ Acunetix
-

Acunetix là phần mềm quét lỗ hổng website hiệu quả nhất hiện nay gồm SQL
Injection, Cross Site Scripting và nhiều lỗ hổng khác. Trong đó, SQL Injection
là kỹ thuật tấn công sửa đổi toàn bộ các truy vấn SQL để có thể truy cập dữ
liệu của hệ thống CSDL của website. Còn Cross-site scripting hay XSS là kỹ
thuật tấn công cho phép một hacker có thể thực hiện một kịch bản độc hại ở
trên trình duyệt mà người dùng truy cập.

-

Acunetix WVS có thể ra quét các lỗ hổng này trên website và phục vụ tốt cho

việc thu thập thông tin từ mục tiêu

 Giai đoạn tấn công: Sử dụng công cụ metasploit
-

Metasploit là một framework cung cấp môi trường để pentest các hệ thống
phần mềm, mạng. Metasploit = Meta + Exploit, ở đó meta thể hiện sự trừu
tượng hóa => một framework thiết kế cho các thao tác với exploit. Metasploit
lưu trữ một database cho các exploit public hiện có, và cung cấp sẵn các công


cụ để triển khai các exploit đó. Nhờ đó bạn có thể sử dụng metasploit để tạo ra
các payload đi pentest các hệ thống.
Câu 7. Tấn công vào yếu tố con người (social engineering) là gì? Tại sao kỹ thuật này lại
hiệu quả trong thực tế?
 Khái niệm:
-

Là phương pháp khiến ai đó thực hiện một việc mà thông thường họ sẽ không
làm bằng cách tạo ra mối quan hệ tin cậy với họ, chẳng hạn như cho số điện
thoại cá nhân hay thông tin bí mật nào đó.

-

Đây là một trong những tấn công mạnh mẽ nhất của tội phạm mạng nhằm truy
nhập tài sản thông tin của người dùng

 Cách thức: Khai thác vào tâm lý con người. SEA khiến cho người dùng nhận thức
sai lầm để chấp nhận làm một việc ngoại lệ, với một lý do là chính đáng, từ đó phá
vỡ chính sách an toàn. Một số khía cạnh tâm lý thường được kẻ tấn công sử dụng

dể khai thác là:
-

Tham lam: người dùng nhận được mộ lời hứa là sẽ nhận được một thứ rất giá
trị nếu làm theo một điều gì đó

-

Đồng cảm: người dùng nhận được lời kêu gọi giúp đỡ từ kẻ mạo danh người
quen

-

Tò mò: Người dùng nhận được thông báo về một cái gì đó muốn biết, đọc hoặc
xem

-

Mong muốn: Hầu hết mọi người được dạy về sự thân thiện và lòng tốt bụng từ
khi còn nhỏ và đem thái độ này đến nơi làm việc

-

Ủy quyền, tranh xung đột: Nếu kẻ tấn công mạo danh một người có thẩm
quyền và có vẻ không thể đụng chạm tới, nạn nhân thường dễ dàng làm theo
yêu cầu để tránh xung đột

 Kỹ thuật tấn công này có hiệu quả trong thực tế vì:
-


Không có một phần mêm hay phần cứng nào có thể chống lại một cuộc tấn
công Social Engineering
Chính sách bảo mật mạnh cũng sẽ là liên kết yếu nhất và con người là yếu tố
nhạy cảm nhất
Rất khó để phát hiện ra Social Engineering
Không có một phương pháp chắc chắn nào để đảm bảo an ninh một cách đầy
đủ từ các cuộc tấn công Social Engineering


Câu 8. Mô tả về các mục tiêu của một cuộc tấn công vào yếu tố con người. Mô tả các giai
đoạn của một cuộc tấn công dạng này.
 Các mục tiêu của một cuộc tấn công vào yếu tố con người là:
-

Nhân viên tiếp tân và nhân viên hỗ trợ

-

Người dùng và khách hàng

-

Người bán hàng của tổ chức mục tiêu

-

Giám đốc hỗ trợ kỹ thuật

-


Người quản trị hệ thống

 Các gian đoạn của một cuộc tấn công SEA
-

Nghiên cứu công ty mục tiêu: Trang web, nhân sự, lịch trình

-

Lựa chọn nạn nhân: Xác định những nhân viên không hài lòng về chính sách
trong công ty mục tiêu

-

Phát triển mối quan hệ: Phát triển mối quan hệ với những nhân viên đã được
chọn

-

Khai thác mối quan hệ: Tập hợp thông tin tài khoản nhạy cảm, thông tin tài
chính và công nghệ hiện tại

Câu 9. Phân loại và mô tả một số loại tấn công vào yếu tố con người.
 Human-based:
- Tập hợp những thông tin nhạy cảm bằng cách khai thác sự tin tưởng, sự sợ hãi,
sự giúp đỡ
+ Giả làm người dùng đầu cuối hợp pháp
+ Giả làm User quan trọng
+ Giả làm nhân viên hỗ trợ kĩ thuật
- Eavesdropping:

+ Nghe lén hoặc nghe trái phép các cuộc hội thoại
+ Chặn bắt âm thanh, video, văn bản
- Shoulder Surfing
+ Quá trình để tìm ra mật khẩu, số cmnd…
+ Nhìn qua vai, quan sát từ xa, sử dụng ống nhòm để tìm được thông tin
- Dumpster diving
+ Tìm kiếm thông tin trong thùng rác
 Computer-based:
- Popup:


+ Các cửa sổ lừa đảo hiện lên, click vào chúng sẽ chuyển hướng đến trang
web độc hại, trojan, virus
- Phishing:
+ Một email chứa trang web giả mạo gửi đến người dùng, yêu cầu thông
tin từ người dùng
- SMS:
+ Gửi sms giả mạo ngân hàng, ghi có trường hợp khẩn cấp. Nạn nhân gọi
lại và cung cấp thông tin bí mật
 Tấn công Insider:
- Spying:
+ Công ty đối thủ cài giám điệp vào bằng cách vượt qua các bài test tuyển
dụng
- Revenge:
+ Những người trong công ty tuy nhiên bất mãn với điều khoản của công
ty
Câu 10. Trình bày phương pháp và công cụ đối phó với tấn công vào yếu tố con người.
 Chính sách:
-


Các chính sách về mật khẩu:
+ Thay đổi mật khẩu định kỳ
+ Tránh mật khẩu dễ đoán
+ Tải khoản cần được chặn sau 1 số lần cố gắng đăng nhập thất bại
+ Giữ bí mật mật khẩu

-

Các chính sách an ninh vật lý:
+ Nhận diện nhân viên bằng cách phát thẻ id, đồng phục
+ Hộ tống những khách mời
+ Hạn chế các khu vực truy nhập
+ Băm nhỏ những tài liệu vô dụng
+ Tuyển dụng nhân viên an ninh

 Đào tạo: một chương trình đào tạo hiệu qủa nên bao gồm tất cả những chính sách
bảo mật và phương pháp để nâng cao nhận thức về SEA


 Phân loại thông tin: Phân loại các thông tin tối mật, độc quyền, sử dụng nội bộ, sử
dụng công cộng
 Đặc quyền truy nhập: Cần phải có quản trị viên, người sử dụng các tài khoản phải
được ủy quyền thích hợp
 Kiểm tra nhân viên và sử lý đình chỉ đúng đắn: Các nhân viên bị thôi việc và bất
mãn rất dễ bị mua chuộc và cung cấp thông tin
 Tần xuất phản hồi thích hợp: Cần có những phản ứng thích hợp cho những trường
hợp cố gắng sử dụng SEA
 Xác thực hai thành phần: Thay vì mật khẩu cố định, sử dụng xác thực hai thành
phần cho những dịch vụ mạng có nguy cơ cao như VPN
 Phòng thủ Anti-virus/Anti-phishing: Sử dụng nhiều lớp để phòng thủ virus như

người dùng đầu cuối và mail gateway để giảm thiểu các cuộc tấn công SEA
 Thay đổi công tác quản lý: Việc thay đổi quy trnhf quản lý tài liệu sẽ bảo mật hơn
trong quá trình ad-hoc
 Công cụ:
-

Netcraft:
+ Tự động block hết tất cả các trang web phishing đã được báo cáo (77
triệu trang web)
+ Chặn các cuộc tấn công độc hại và lừa đảo khi duyệt web

-

PhishTank
+ Kiểm tra tất cả các URL mà người dùng truy cập để phát hiện dấu hiệu
độc hại hay lừa đảo

Câu 11. Xâm nhập vật lý là gì? Trình bày về các giai đoạn của một cuộc tấn công vật lý.
 Khái niệm: Xâm nhập vật lý là một phương pháp của tội phạm mạng nhằm truy
nhập vào cơ sở hạ tầng mạng duex liệu từ phía trong của công ty, từ đó có thể dễ
dàng xâm nhập đến mục tiêu. Một khi kẻ tấn công có thể đi vào bên trong tổ chức
mục tiêu, cơ hội tấn công là rất nhiều
 Giai đoạn một cuộc tấn công vật lý:
-

Trinh sát:
+ Nghiên cứu mục tiêu cần tấn công:


+ Sử dụng công cụ như Google Map xem hình ảnh chụp qua vệ tinh

+ Khảo sát địa điểm tòa nhà: Cửa ra vào, cửa hàng hóa, các khu vực
hút thuốc, bãi đỗ xe
+ Khảo sát đồng phục nhân viên, huy hiệu bảo mật...
+ Thu thập thông tin mục tiêu trên mạng
-

Vượt qua cửa bảo mật:
+ Sử dụng các thông tin đã thu thập được vượt qua các hệ thống báo
mật
+ Sử dụng các kĩ thuật để vượt qua xác thực để vào bên trong hệ thống

-

Truy cập vào hệ thống:
+ Sau khi lọt được vào khu vực bên trong, tìm nơi có thể kết nối như
văn phòng, phòng họp có cổng kết nối mạng nội bộ.
+ Khai thác các lỗ hổng. Tiến hành đánh cắp thông tin dữ liệu. Nâng
cấp quyền điều khiển hệ thống

-

Duy trì kết nối:
+ Tạo ra các backdoor hoặc kết nối mở để có thể truy cập từ xa.
+ Tạo các tài khoản đặc quyền cao

-

Xóa dấu vết:
+ Sau khi tạo được backdoor. Kẻ tấn công cố gắng xóa dấu vết. Như
lịch sử máy tính

+ Đoạn video từ camera

Câu 12. Mô tả về một số kỹ thuật trong xâm nhập vật lý phổ biến mà em đã được học. Ví
dụ như thu thập thông tin, cách vượt qua các biện pháp kiểm soát truy cập, các biện pháp
an ninh.
-

-

Trinh sát:
+ Nghiên cứu về khu vực thông qua các công cụ như Google Maps.
+ Các lối ra vào tiềm năng, lối vào chính nhiều bảo vệ, lỗi vào phụ như
cửa dẫn ra khu vực hút thuốc thường bảo vệ ít hơn
+ Quan sát cửa ra vào sử dùng gì, quét thẻ, mật khẩu hay không
+ Khu vực ra vào có camera không, có bảo vệ không
Khu vực người hút thuốc:


-

-

-

+ Là khu vực ngoài có ít hệ thống an ninh, một số cửa có thể không có
khóa
+ Khu vực này ít bị người để ý
+ Sử dụng lối vào này làm bàn đạp, chỉ cần ít đồ dùng như, bao thuốc bật
lửa, một thẻ tên giả.
+ Nếu cửa không có khóa, giả vờ hút thuốc bên ngoài rồi đi vào cửa với

thuốc lá bên trong vì bên trong có thể có camera ghi lại
Điểm kiểm thử có người giám sát:
+ Ở một số khu vực có thể có lễ tân hoặc bảo vệ.
+ Đôi khi khách hàng cần trình bày cmnd ở bàn tiếp tân, giải thích đến
làm gì gặp ai. Sau đó được nhận được thẻ ra vào. Có thể nói chuyện với
bộ phận nhân sự để sắp xếp cuộc hẹn và làm giả thẻ ra vào.
+ Thời gian xâm nhập tốt nhất là lúc ăn trưa, vì khi đó nhiều người qua lại
và dễ dàng qua mặt được nhân viên bảo vệ
Vượt qua cửa bị khóa:
+ Có thể giả vở đang nói chuyện điện thoại để đánh lạc hướng camera
trong lúc chờ đợi người trong phòng khóa đi ra. Khi có người đi ra thì
nhẹ nhàng giữu cửa lại và đi qua
+ Một cách khác là cửa không đóng mở liên tục và người bình thường thì
không từ chối một người vật nặng cồng kềnh được. Khi đó người đi
trước có thể giữ cửa cho người kiểm thử
Người kiểm thử ở bên trong
+ Người kiểm thử cần tìm đường đến nơi mình cần mà không để bị phát
hiện
+ Một phòng hội nghị là rất tốt vì thường có những cổng kết nối mạng.
Ngoài ra có thể sử dụng kĩ thuật USB Trojan để tạo kết nối truy cập từ
xa.
+ Một trong cách là khác là tận dụng giờ ăn trưa có nhiều phòng trống. Từ
đó truy cập vào mạng nội bộ

Câu 13. Kỹ thuật Fuzzing là gì? Tại sao kỹ thuật này lại quan trọng? Có các kiểu fuzzing
nào?
-

-


Fuzzing là kĩ thuật phát hiện lỗi phần mềm bằng phương pháp tự động hoặc
bán tự động sử dụng phương pháp lặp lại thao tác sinh dữ liệu sau đó chuyển
cho hệ thống xử lý
Cung cấp dữ liệu đầu vào cho các chương trình sau đó theo dõi và ghi lại các
lỗi, các kết quả trả về của ứng dụng trong quá trình xử lý chương trình


-

-

-

Là một dạng kiểm thử hộp đen, không yêu cầu truy cập mã nguồn
Ưu điểm:
+ Giúp tìm lỗi nghiêm trọng nhất về các vấn đề bảo mật hoặc khiếm
khuyết của chương trình
+ Hiệu quả cao hơn so với các phương pháp kiểm thử khác
+ Cải thiện vấn đề về an ninh khi kiểm tra phần mềm
+ Lỗi tìm được thường là lỗi quan trọng và hay được tin tặc khai thác
+ Tìm được lỗi không tìm thấy được khi kiểm thử bị hạn chế thời gian và
nguồn lực
Nhược điểm:
+ Không thể xử lý được hết các mối đe dọa an ninh tổng thể
+ Không hiệu quả với các lỗi gây treo chương trình, chỉ hiệu quả một số
tình huống cụ thể
+ Fuzzing không cung cấp nhiều về kiến thức hoạt động nội bộ
+ Với chương trình lớn có đầu vào phức tạp cần thời gian tạo Fuzzing đủ
thông minh
Kĩ thuật này quan trọng vì:

+ Chúng ta không thể kiểm tra được hết tất cả trường hợp bằng tay
+ Thời gian kiểm thử sẽ rất lớn nếu làm thủ công
Các loại fuzzing gồm có 2 loại:
+ Fuzzing khi biết giao thức (Smart fuzzing) : Biết được các thức làm việc
của một chương trình.
+ Fuzzing khi chưa biết giao thức (Dumb fuzzing): Chưa biết các thức
làm việc của chương trình.

Câu 14. Dumb fuzzing là gì? Smart fuzzing là gì? Chúng được dùng trong trường hợp
nào?
-

Smart fuzzing
+ Đã biết kiến trúc của hệ thống, cách thức làm việc của chương trình
+ Các bước thực hiện
 Xác định mục tiêu: Các mục tiêu có nguy cơ cao, các ứng dụng
chạy ở mức cao, các ứng dụng xử lý thông tin có giá trị, thông tin
cá nhân
 Xác định đầu vào: Có nhiều hình thức phổ biến như: biến môi
trường, định dạng file, giao thức mạng, ứng dụng web
 Tạo dữ liệu:
o Tạo dữ liệu đầu vào thỏa mãn điều kiện đầu vào
o Dữ liệu có thể ở nhiều dạng file văn bản, nhị phân...
o Hiệu quả phụ thuộc vào: Độ bao phủ đầu vào và chất
lượng dữ liệu kiểm thử


-

 Thực hiện test sử dụng fuzz:

o Đối tượng tiếp cận Fuzzing gồm: Các kiểu số, kí tự, siêu
dữ liệu, các chuỗi nhị phân, giao thức mạng.
o Cách tiếp cận:
 Sinh dữ liệu đầu vào nguy hiểm ứng với từng loại
đầu vào
 Chèn thêm mã thực thi vào mã chương trình
 Phân tích hoạt động chương trình trong lúc thực thi
 Giám sát fuzz:
o Fuzzer cần xác định được định nghĩa các lỗi được phát
hiện.
o Có ý nghĩa quan trọng trong việc phân tích và báo cáo lỗi
o Để báo cáo lỗi cần hiểu rõ quy trình hoạt động xử lý và có
thể tích hợp vào sự kiện phân loại lỗi tự động
 Xác định khả năng khai thác:
o Từ đây có được danh sách lỗi gửi lại cho người phát triển,
để họ sửa chữa.
o Cần một cuộc kiểm tra cho dù lỗi có thể có khả năng khai
thác nhằm tìm hiểu tác động đến người dùng
+ Sử dụng trong trường hợp:
 Đã biết về hệ thống
 Có ít nguồn lực và thời gian, cần kiểm thử nhanh
Dump fuzzing
+ Xây dựng fuzzer cho các giao thức mở là một vấn đề lớn.
+ Cần đối phó với các tình huống mà trong đó ứng dụng sử dụng một giao
thức mà chúng ta không có quyền truy cập
+ Cần dịch ngược hoặc theo dỗi thông tin ra vào, các công cụ mạng rất
hữu ích
+ Quá trình có thể là tái tạo một trao đổi hợp lệ đã quan sát được
+ Sau đó fuzzer đã sửa đổi các trường đã biết và rất có thể server sẽ trả về
một yêu cầu không hợp lệ, do một số trường như chiều dài nhúng

+ Fuzzer cần cập nhập lại các giá trị trường liên quan, điều này làm fuzzer
phức tạp hơn tuy nhiên sẽ không bị từ chối bới máy chủ vì vi phạm giao
thức

Câu 15. Mô tả cách thức đánh giá fuzzing dựa trên mức độ bao phủ mã lệnh (code
coverage)
 Một lỗi có thể xảy ra nếu thực hiện thay đổi 1 byte đầu vào của 1 file 248.000
byte. Khả năng tìm thấy lỗi là rất nhỏ nếu test fuzzing theo các thông thường,


Thay đổi từng byte ngẫu nhiên sẽ tốn rất nhiều thời gian để tìm ra lỗi. Code
coverage là cách tối ưu hơn để tìm ra lỗi
- Code coverage: là số liệu dùng để đánh giá bao nhiêu code đã được thực thi.
- Số liệu có thể thu được bằng nhiều cách
- Một số dạng coverage:
+ Dòng: Đánh giá đã có bao nhiêu dòng code được thực thi
+ Nhánh: Đã có bao nhiêu nhánh trong mã được đánh giá (nhảy có điều
kiện)
+ Đường: Đã có bao nhiêu đường được thực hiện
 Ví dụ
If(a>2) a =2;
If(b>2) b =2;
Dòng: if(a>2) a =2;
2 Nhánh (a>2, b> 2), (a<2, b<2)
4 phần (a, b) = (0,0), (3,0), (0,3), (3,3)
 Một số vấn đề với code coverage:
- Code có thể được bao phủ nhưng không phát hiện ra lỗi
- Một số lỗi có thể bị bỏ qua
- Chỉ có thể tấn công bề mặt
Câu 16. Mô tả các phân vùng bộ nhớ của một process, tác dụng của từng phân vùng

 Thông thường gồm 6 phần chính:
- .text:
+ Tương ứng với phần văn bản .text của tập tin thực thi nhị phân.
+ Chứa các lệnh để thực thi công việc
+ Phần này đánh dấu là chỉ đọc
+ Gây ra lỗi khi dữ liệu khác vào.
+ Được cố định khi tiến trình được nạp lần đầu.
- .data:
+ Lưu trữ biến khởi tạo toàn cục như: int a. Kích thước cố định khi đang
chạy
- .bss:
+ Cũng để lưu trữ biến toàn cục nhưng chưa được khởi tạo giá trị cụ thể
- Heap:
+ Lưu các biến phân bố tự động, mở rộng từ bộ nhớ địa chỉ thấp đến địa
chỉ bộ nhớ cao hơn
- Stack:


-

-

+ Ngăn xếp sử dụng để theo dõi lời gọi hàm (đệ quy) và mở rộng từ bộ
nhớ cao đến bộ nhờ thấp. Cách này tạo ra lỗ hổng tràn bộ đệm.
+ Các biến cục bộ được chưa trong thành phần ngăn xếp
Environment/Argument:
+ Phần môi trường/ đối số lưu trữ bản sao các biến hệ thống.
+ Có thể truy cập trong suốt thời gian chạy
+ Ví dụ tên thư mục, tên máy chủ
+ Phần này có thể ghi được, cho phép pháp sinh lỗi tràn bộ đệm

Sơ đồ:

Câu 17. Stack frame là gì? Vẽ stack frame của hàm main (ví dụ stack1)

 Khái niệm: Stackframe là vùng nhớ ngăn xếp. Vùng nhớ ngăn xếp của một hàm
bắt đầu với d số, địa chỉ trả về, giá trị EBP cũ, và các biến nội bộ. Mô hình này
không thay đổi nên khi xác định được vai trò của một ô ngăn xếp thì vai trò của
các ô ngăn xếp khác cũng được xác định.


 Stack Frame của Stack1.c

/* Lý thuyết: thứ tự push vào stack: các tham số -> địa chỉ trở về (saved EIP) -> EBP cũ
(old EBP) -> các biến cục bộ. */

Trong stack1.c, do không có tham số nên không phải push tham số vào stack.
*/
Câu 18. Con trỏ trở về (old eip) lưu trong stack là gì?
 Con trỏ lưu lại vị trí lệnh cũ hàm trước khi thực hiện lời gọi hàm


 Tác dụng: Để thực hiện trở về hàm cha sau khi thực hiện xong hàm con
Câu 19. Mô tả tác dụng của thanh ghi: esp, ebp, eip.
 Thanh ghi ebp (extended base poiter) là thanh ghi cơ bản của khung ngăn xếp hiện
tại của tiến trình (địa chỉ cao hơn). Dùng để theo dõi các biến cục bộ và tham số.
 Thanh ghi esp (extended stack pointer) luôn trỏ đến đỉnh ngăn xếp (địa chỉ thấp
hơn). Giá trị thanh ghi thay đổi mỗi khi có một đối tượng được push hoặc pop từ
stack.
 Thanh ghi eip (extended instruction pointer) là một thanh ghi quan trọng. Chỉ tới
vùng nhớ lệnh tiếp theo CPU. Eip sẽ tự động tăng sau mỗi chu kỳ lệnh.


Câu 20. Lỗi tràn bộ đệm là gì?
 Bộ đệm được sử dụng để lưu trữ dữ liệu.
 Chúng ta quan tâm tới các bộ đệm dùng để lưu trữ chuỗi dữ liệu. Bộ đệm không có
cơ chế ngăn chặn lưu trữ thông tin quá nhiều trên không gian lưu trữ
 Tràn bộ đệm là lỗi xảy ra khi dữ liệu xử lý có kích cỡ vượt quá giới hạn của vùng
nhớ chứa nó
 Nếu phía sau vùng chứa này lưu trữ dữ liệu quan trọng tới quá trình thực thi
chương trình thì sẽ gây ra hư hỏng dữ liệu.
 Tùy thuộc vào cách xử lý chương trình mà có thể tận dụng lỗi phần mềm này để
điều khiển chương trình theo mong muốn.
 Điểm quan trọng trong tận dụng lỗi tràn bộ đệm:
- Dữ liệu quan trọng phải nằm sau dữ liệu bị tràn
- Phần dữ liệu tràn ra phải tràn tới dữ liệu quan trọng
- Sau khi thay đổi dữ liệu thì vẫn phải có ý nghĩa đối với chương trình
 Ví dụ: char str1[10];
-

nhưng lại chạy lệnh:


-

strcpy(str1,
“AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA”)  không
đủ không gian lưu trữ biến str và gây ra tràn dữ liệu.

Câu 21.
a) Vẽ sơ đồ trạng thái của stack khi gọi hàm foo1(), vị trí của ebp, esp.
 Giả sử hàm foo1 có 3 biến cục bộ (x1, x2 và x3 kiểu số nguyên) ta có:


b) Khi hàm main () gọi foo1(), nó có thể truyền tham số cho hàm foo1() bằng cách nào.
 Nó push tham số b vào trong stack trước khi gọi hàm foo1().
c) Làm cách nào để báo cho foo1() biết vị trí lệnh cần quay lại để thực hiện tiếp trong
hàm main ()?
 Giá trị của Địa chỉ trở về main (EIP cũ - địa chỉ ngay sau lệnh gọi hàm foo1() ) đã
được lưu vào trong stack, khi hàm foo1() chạy xong sẽ đẩy giá trị EIP cũ đó vào
trong EIP, từ đó chương trình có thể quay lại.

d) Địa chỉ của biến cục bộ trong stack của hàm foo1() có thể tính ra bằng cách nào?


 Dùng EBP để tính (truy xuất qua độ dời so với EBP).
 Vd địa chỉ x1 = EBP – 4, địa chỉ x2 = EBP – 8, địa chỉ x3 = EBP – 12
Câu 22. Nhập chuỗi đúng để in ra chuỗi "You win!" ra màn hình cho đoạn code dưới đây.
Vẽ trạng thái của ngăn xếp cần đạt được.

 Tận dụng lỗi tràn bộ đệm:
- Cần phải làm tràn buf để nó tràn dữ liệu sang cookie
- Cookie cần có giá trị là 0x41424344 để có thể in ra màn hình chữ You win. Đổi
ra dạng text tương ứng với chữ DCBD (do quy ước litter_endian nên cần viết
ngược lại)
- Buf chứa 16 kí tự tương đương 16 ô nhớ. Cookie là int tương tự có 4 ô nhớ
 Cần phải truyền đầu vào 20 kí tự để có thể làm tràn dữ liệu sang cookie: a * 16
+ DCBA
 Trạng thái ngăn xếp sau cần thu được là


Câu 23. Các option của lệnh dịch có ý nghĩa gì
$ gcc -fno-stack-protector -ggdb . /stack.c -o stack

 -fno-stack-protector: Vô hiệu hóa chức năng bảo vệ stack protector của hệ điều
hành linux
 ggdb: Tạo ra các thông tin gỡ lỗi sử dụng gdb. Cho phép sử dụng định dạng tiêu
chuẩn, hỗ trợ các tiện ích mở rộng gdb nếu có
 ./stack.c: Là tên file đầu vào
 -o stack: Là tên tệp đầu ra
Câu 24. Quy ước kết thúc nhỏ (little endian) của bộ xử lý Intel X86 hiểu như thế nào?
 Quy ước
-

Máy tính sẽ lưu trữ dữ liệu dưới dạng các byte.
Nếu dữ liệu vừa đủ 1 byte thì sẽ không có gì ảnh hưởng
Tuy nhiên để lưu trữ các số lớn thì cần nhiều hơn 1 byte.
Quy ước kết thúc nhỏ little endian là quy ước về việc sắp xếp trật tự các byte
trong một mô hình dữ liệu.
- Quy ước này mô tả các byte có trọng số lớn sẽ được ghi trước và sau đó là các
byte có trọng số thấp hơn.
 Ví dụ:
Số sau khi đổi ra dạng hex là: 07 5d 15 6c
Sau khi sử dụng quy ước littel endian thì máy tính sẽ được ghi ngược lại là 6c 15
5d 07.
Câu 25. Thư viện ltrace dùng để làm gì?
-

Là một tiện ích gỡ lỗi của Linux

-

Hiển thị lời gọi hệ thống hoặc các thư viện được chia sẻ


-

Có lợi ích lớn trong việc gỡ lỗi trong một chương trình khi phân tích một vấn
đề nào đó.

-

Nó thực hiện điều này bằng cách nối vào hệ thống tải động, giúp nó hiển thị
các tham số mà ứng dụng sử dụng khi thực hiện lời gọi và giá trị trả về

-

ltrace cũng có thể theo dõi các cuộc gọi hệ thống Linux.


-

Ex: Để kiểm tra xem hàm printf có được gọi với tham số chính xác hay
không, chúng ta có thể dùng công cụ ltrace. ltrace./filerun

Câu 26. Hãy mô tả một số cơ chế bảo vệ bộ nhớ của hệ điều hành.
 Cải tiến bộ biên dịch:
-

Sử dụng libsafe với các hàm an toàn hơn, ít khai thác các lỗi: strcpy,
strcat...

-

Sử dụng StackShield... phát hiện vấn đề không an toàn khi biên dịch


-

StackGuard, đặt một canaries ở giữa ngăn xếp và trạng thái khung. Nếu tràn
bộ đệm canary sẽ bị hỏng và việc vi phạm được phát hiện

-

Stack Smashing Protection: Dựa trên Stack Guard tuy nhiên cải biến stack
khiến chúng khó bị khai thác hơn. Bên cạnh đó thêm một prolog, epilog.

-

Ngoài ra còn một số cách khác như ngăn xếp không thực thi

 Các bản vá và nhân script:
-

Các trang bộ nhớ không thực thi:
+ Các bản vá lỗi Page-eXec (PaX, ExeccShield): thay đổi cách phân trang
bộ nhớ thực hiện

-

Ngẫu nhiên hóa địa không gian địa chỉ(ASLR):
+ Ngẫu nhiên hóa các đối tượng như mã thực thi, quản lý heap, ngăn xếp
người dùng, ngăn xếp không gian nhân

 Kết hợp:



×