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

Kiểm thử xâm nhập mạng

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 (213.89 KB, 20 trang )

Mục lụ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 ( Penetration Testing ) là một mô phỏng các phương pháp mà những
kẻ xâm nhập sử dụng để truy cập trái phép vào hệ thống mạng của một tổ chức và sau đó
thỏa hiệp với chúng .
 Kiểm thử xâm nhập:
- Đánh giá các mô hình bảo mật của tổ chức một cách tổng thể
- Cho thấy hậu quả tiềm tàng của một kẻ tấn công thực sự vi phạm vào mạng

1


Một kiểm thử xâm nhập được phân biệt là một người tấn công có mục đích chính
đáng và không ác ý
- Kiểm thử xâm nhập nếu không được hoàn thành 1 cách chuyên nghiệp có thể dẫn
đến sự mất mát của các dịch vụ và sự gián đoạn sự ổn định kinh doanh.
 Tại sao cần kiểm thử xâm nhập
- Xác định các mối đe dọa đối với tài sản thông tin của 1 tổ chức
• Giảm chi phí bảo mật của một tổ chức và đầu tư công nghệ bảo mật 1 cách tốt
hơn bằng cách xác định và giải quyết các lỗ hổng và điểm yếu.
• Cung cấp 1 tổ chức với sự đảm bảo – 1 đánh giá kỹ lưỡng và toàn diện của 1 tổ
chức an ninh bao gồm chính sách, thủ tục, thiết kế và thực hiện.
• Đạt được duy trì và chứng nhận quy định ngành (BS7799, HIPAA, …)
• Thông qua thực hiện tốt bằng cách xác nhận quy định của pháp luật và ngành
- Đối với thử nghiệm và xác nhận hiệu quả của việc bảo vệ an ninh và kiểm soát
• Nó tập trung vào các lỗ hổng có mức độ cao và nhấn mạnh các vấn đề bảo mật
cấp độ ứng dụng cho các nhóm phát triển và quản lý
• Cung cấp phương pháp tiếp cận toàn diện của các bước chuẩn bị có thể được
thực hiện để ngăn chặn khai thác trái phép sắp tới


• Đánh giá hiệu quả của các thiết bị an ninh mạng như firewalls, routers, web
servers
• Để thay đỏi, nâng cấp cơ sở hạ tầng hiện có của phần mềm, phần cứng, hoặc
thiết kế hệ thống mạng
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?
 1 số mục tiêu cần kiểm thử:
- Truyền tải thất bại, thất bại trong các giao dịch trên mạng, và mất thông tin bí mật
- Hệ thống phải đối mặt với cộng đồng, các trang web, cổng email, và các nền tảng
truy cập từ xa
- Mail, DNS, firewalls, passwords, FTP, IIS, web servers
 Chú ý khi lập kế hoạch kiểm thử:
- Kiểm tra phải được thực hiện trên tất cả các thành phần phần cứng và phần mềm
của một hệ thống an ninh mạng.
- Thiết lập các tham số cho các penetration test như mục tiêu, hạn chế, và sự đúng
đắn của quy trình
- Thuê chuyên gia lành nghề và giàu kinh nghiệm để thực hiện các kiểm tra
- Chọn một bộ các phần kiểm tra phù hợp để cân bằng chi phí và lợi ích
- Một phương pháp luận luôn đi với lập kế hoạch và tài liệu
- Ghi chép kết quả một cách cẩn thận và làm cho nó dễ hiểu cho khách hàng
- Nêu rõ rủi ro tiềm ẩn và việc tìm kiếm một cách rõ ràng trong báo cáo cuối cùng
-

4. Mô tả một số loại kiểm thử xâm nhập
 External Testing: kiểm tra bên ngoài bao gồm phân tích các thông tin công khai sẵn
có, một giai đoạn liệt kê mạng lưới và hoạt động của các thiết bị phân tích an ninh
(VD: Web servers, Mail servers, Firewalls, Routers)
2



-

Là phương pháp truyền thống để kiểm thử xâm nhập
Tập trung vào cơ sở hạ tầng máy chủ và phần mềm cơ bản gồm các mục tiêu
Có thể được thực hiện mà không cần biết thông tin trước đó của trang web (hộp đen)
Công bố cấu trúc liên kết và môi trường (hộp trắng)
 Internal Testing - kiểm tra nội bộ
Việc kiểm tra sẽ được thực hiện từ 1 số điểm truy cập mạng, đại diện cho mỗi phân đoạn
logic và vật lý.
VD: điều này có thể bao gồm lớp và DMZs trong môi trường mạng nội bộ công ty hoặc
kết nối các công ty đối tác
Đánh giá an ninh nội bộ theo 1 phương pháp tương tự để kiểm tra bên ngoài, nhưng cung
cấp 1 cái nhìn đầy đủ hơn về an ninh của trang web.

5. Mô tả các giai đoạn của một hoạt động kiểm thử xâm nhập.
 Pre-Attack Phase: giai đoạn trước khi tấn công
- Đề cập đến chế độ của cuộc tấn công và mục tiêu cần phải đạt được
- Do thám được coi là giai đoạn trong giai đoạn trước khi tấn công để xác định vị trí,
thu thập, xác định và ghi thông tin về mục tiêu
- Hacker tìm kiếm để tìm hiểu càng nhiều thông tin của nạn nhân càng tốt
- Hacker thu thập thông tin theo nhiều cách khác nhau cho phép chúng xây dựng kế
hoạch tấn công
- Có 2 loại: trinh sát thụ động và trinh sát chủ động
- Thông tin lấy trong giai đoạn này: thông tin cạnh tranh, thông tin đăng ký trên mạng,
thông tin DNS và mail server, thông tin hoạt động hệ thống, thông tin của người dùng,
thông tin Chứng nhận xác thực, kết nối tương tự, thông tin liên lạc, thông tin website,
địa chỉ vật lý và logic của tổ chức, phạm vi sản phẩm và dịch vụ được cung cấp bởi
công ty mục tiêu có trên mạng, bất kỳ thông tin nào khác có giá trị đều có thể khai
thác.
 Attack Phase: giai đoạn tấn công

- Xâm nhập vùng ngoài
• Đánh giá báo cáo lỗi và quản lý lỗi với thăm dò ICMP
• Kiểm tra danh sách kiểm soát truy cập bằng cách giả mạo các câu trả lời với
các gói dữ liệu thủ công
• Xác định ngưỡng từ chối dịch vụ bằng cách cố gắng kết nối liên tục đến TCP,
đánh giá các kết nối chuyển tiếp TCP và cố gắng kết nối đến dòng UDP
• Đánh giá các quy tắc lọc giao thức bằng cách cố gắng kết nối sử dụng các giao
thức khác nhau như SSH, FTP, Telnet9…
• Đánh giá khả năng của IDS bằng cách gửi mã độc hại (chẳng hạn như URL bị
thay đổi) và quét các mục tiêu khác nhau để đáp ứng lưu lượng truy cập bất
thường
• Kiểm tra phản ứng của hệ thống an ninh vòng ngoài của web servers bằng cách
sử dụng nhiều phương pháp như POST, DELETE và COPY
- Thu thập mục tiêu
3


Thu thập 1 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 bị nghi ngờ nhiều đến các thử thách xâm nhập,
chẳng hạn như quét lỗ hổng và đánh giá an ninh
• Phương pháp thử nghiệm đạt được mục tiêu bao gồm những phần không hạn
chế như:
 Hoạt động của các cuộc tấn công thăm dò: sử dụng kết quả của việc quét
mạng để thu thập thêm thông tin có thể dẫn đến 1 sự thỏa hiệp
 Quá trình chạy quét lỗ hổng: quá trình quét lỗ hổng được hoàn thành trong
giai đoạn này
 Hệ thống đáng tin cậy và quá trình đánh giá độ tin cậy: cố gắng truy cập tài
nguyên của máy bằng cách sử dụng thông tin hợp pháp thu được thông qua
kỹ thuật giao tiếp hoặc các kỹ thuật khác
- Đặc quyền được nâng lên (kỹ thuật 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ệ. Các hoạt động bao gồm (nhưng không giới hạn):
• Các tester có thể 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 có thể dẫn đến sự
leo thang các đặc quyền
• Sử dụng các kỹ thuật như Brute Force để đạt được đặc quyền.
• Sử dụng các Trojans 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, implant reteract (Thực thi, cấy ghép và xem lại)
• Thỏa hiệp hệ thống: trong giai đoạn này, tester có được sự thỏa hiệp của hệ thống
bằng cách thực hiện đoạn code bất kỳ
• Thâm nhập vào hệ thống: mục tiêu của quá trình thâm nhập hệ thống là để khám
phá mức độ lỗi của an ninh
• Thực hiện các khai thác: thực hiện các khai thác đã có sẵn hoặc bằng tay để tận
dụng lợi thế của các lỗ hổng được xác định trong hệ thống của mục tiêu
 Post Attack Phase: giai đoạn sau tấn công và hoạt động
Giai đoạn này quan trọng đối với bất kỳ kiểm thử xâm nhập nào vì nó có trách
nhiệm để khôi phục lại các hệ thống trước kia. Bao gồm các hoạt động sau:
- Loại bỏ tất cả các tập tin đã tải lên trê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 tất cả các kết quả và trình bày cùng với các tổ chức.


4


6. Mô tả công cụ mà 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
 Pre-Attack Phase: giai đoạn trước khi tấn công: Acunetix, Nessus, Wireshark, Nmap,
tcpdump, netstat, snort, Wapiti
 Attack Phase: giai đoạn tấn công: Metasploit, Ettercap, SQLmap, Reaver
 Post Attack Phase: giai đoạn sau tấn công và hoạt động
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ả thực tế?
-

Social Engineering là một nghệ thuật thuyết phục mọi người tiết lộ thông tin bí
mật

5


Social Engineering phụ thuộc vào những thứ mà mọi người không biết những
thông tin về chúng và bất cẩn trong việc bảo vệ nó

-

Tại sao hiệu quả :


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

8. Mô tả về các mục tiêu của môt tấn 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 này
- Các mục tiêu:
+ User và Client
+ Nhân viên tiếp tân và nhân viên hỗ trợ
+ Giám đốc hỗ trợ kỹ thuật
+ Người quản trị hệ thống
+ Người bán hàng của tổ chức mục tiêu
+ Nhân viên văng phòng
-

Các giai đoạn:
+

Nghiên cứu công ty mục tiêu : Durmpster diving, 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 các nhân viên đã lựa 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

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
1. 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ợ hãi, và sự giúp đỡ

6


-

-

Eavesdropping
+

Nghe lén hoặc nghe trái phép các cuộc hội thoại hoặc đọc tin nhắn

+

Chặn lại bất kì các hình thức như âm thanh, video hoặc văn bản.


+

Eavesdropping cũng sử dụng với những kênh truyền thông khác như đường
dây điện thoại, email, tin nhắn tức thời, vv...

Shoulder Surfing
+

Shoulder Surfing là tên cho quy trình mà kẻ trộm sử dụng để tìm ra mật khẩu,
số chứng minh nhân dân, số tài khoản, vv .....

+

Kẻ trộm nhìn qua vai của bạn hoặc thậm chí quan sát từ một khoảng cách xa
bằng cách sử dụng ống nhòm, để có được một chút thông tin.

2. Computer-based: Social Engineering được thực hiện bởi sự giúp đỡ của máy tính



một cửa sổ windows tự động bật lên khi lướt web và yêu cầu thông tn của người dùng để đăng nhập hoặc đăng ký
pop-up windows

người sử dụng



những lá thư Hoax là những email cảnh báo các vấn đề cho người dùng về virus, troijan, sâu có thể làm tổn hại đến hệ thống máy tnh


Hoax leters

số người khác
là những lá thư cung cấp quà tặng miễn phí như tền hay phần mềm kèm theo điều kiện là người dùng phải chuyển tếp thư này đến một



thu thập thông tn cá nhân bằng cách nói chuyện với người dùng trực tuyến đã được lựa chọn để lấy thông tn



email không mong muốn và không được yêu cầu này dùng để thu thập thông tn tài chính, các thông tn mạng



chain leters
messenger
Instant chat

spam email



-

pop-ups:Cửa sổ pop-ups lừa đảo bật liên khi click chuột vào một liên kết sẽ
chuyển hướng chúng đến các trang web giả mạo yêu cầu thông tin cá nhân hoặc tải
trương trình độc hại như Keyloggers, Troijan, hoặc phần mềm gián điệp

phishing:

7




Một email giả bất hợp pháp tự nhận là đến từ một web hợp pháp và cố gắng để có
được thông tin cá nhân hoặc tài khoản người dùng



Các email Phishing hoặc các Pop-Up chuyển hướng người dùng tới những trang
web giả mạo bắt trước trang web đáng tin cậy và yêu cầu họ gửi thông tin các
nhân của họ

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.
1. Chính sách : Những chính sách tốt và thủ tục sẽ không hiệu quả nếu như họ không

được giảng dạy và tăng cường cho các nhân viên. Sauk hi được đào tạo, nhân viên sẽ
phải ký một tuyên bố thừa nhận rằng họ hiểu các 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, mật
khẩu phải có độ dài và tính phức tạp, giữ bí mật mật khẩu

-

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


2. Đào tạo: Một chương tình đào tạo hiệu quả nên bao gồm tấtcả những chính sách bảo

mật và phương pháp để nâng cao nhận thức về Social Engineering
3. Nguyên tắc hoạt động : Đảm bảo an ninh thông tin nhạy cảm và ủy quyền sử dụng tài

nguyên
4. 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
5. Đặc quyền truy cậ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
6. tần suấ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 Social Engineering
7. Kiểm tra nhân viên và xử lý đình chỉ đúng đắn: Trong nội bộ các tiềm tàng về hình

sự và nhân viên bị thôi việc rất dễ dàng cho việc mua thông tin
8


8. Xác thực 2 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 và Modem Pool
9. Phòng thủ Anti-Virus/Anti-Phishing : sử dụng nhiều lớp để phòng chống virus như

người dùng đầu cuối và mail gateway để giảm thiểu các cuộc tấn công Social
Engineering
10. Thay Đổi Công tác quản lí : việc thay đổi quy trình quản lí tài liệu sẽ bảo mật hơn


quá trình ad-hoc
Các công cụ đối phó : Netcraft, PhishTank
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ý.
- Xâm nhập vât lý là một thuật ngữ trong bảo mật máy tính đề cập đến khả năng của con
người để có thể truy cập vào một hệ thống máy tính . Việc cho phép truy cập vật lý vào
văn phòng , kẻ tấn công có hiểu biết sẽ nhanh chóng tìm được thông tin cần thiết để truy
cập vào hệ thống và mạng máy tính của tổ chức .
- Các giai đoạn của 1 cuộc tấn công vật lý.
• Giai đoạn 1: Trinh sát
 Là giai đoạn chuẩn bị, kẻ tấn công tìm kiếm, thu thập các thông tin về mục tiêu
sắp tấn công.
 Nhiều thông tin của mục tiêu được tìm hiểu, nhằm mục đích để cho cuộc tấn
công diễn ra 1 cách thuận lợi
 Trinh sát bao gồm các hoạt động tìm hiểu về khách hàng, nhân viên, mạng, hệ
thống…của mục tiêu
• Giai đoạn 2: Quét
 Trước khi tấn công: trên cơ sở thông tin thu thập được trong quá trình trinh sát,
kẻ tấn công quét mạng lưới thông tin cụ thể.
 Quét cổng: quét có thể bao gồm việc sử dụng các trình quay số, máy quét cổng,
lập bản đề mạng, quét bao quát, quét lỗ hổng…
 Khai thác thông tin: kẻ tấn công khai thác thông tin như tên máy tính, địa chỉ
IP, và tài khoản người dùng để bắt đầu tấn công.
• Giai đoạn 3: Truy cập
 Kẻ tấn công truy cập vào hệ thống điều hành hoặc các ứng dụng mạng qua lỗ
hổng
 Kẻ tấn công tiến hành nâng cấp quyền để có thể điều khiển toàn bộ hệ thống.
Kẻ tấn công sẽ tiến hành đánh cắp dữ liệu sau khi nâng cấp quyền thành công
Ví dụ: bẻ mật khẩu, tràn bộ đêm, từ chối dịch vụ…
• Giai đoạn 4: Duy trì truy cập
 Là gia đoạn mà kẻ tấn công cố gắng giữ lại quyền sở hữu hệ thống.

 Kẻ tấn công sử dụng các hệ thống đã chiếm được để bắt đầu các cuộc tấn công
tiếp theo
9


 Kẻ tấn công có thể tải lên, tải về, hoặc thao tác với dữ liệu, ứng dụng và cấu

hình trên hệ thống đang sở hữu
• Giai đoạn 5: Xóa dấu vết
 Là giai đoạn mà kẻ tấn công thực hiện các hoạt động nhằm che dấu hành vi tấn
công của mình
 Kẻ tấn công thực hiện việc xóa dấu vết nhằm mục đích là: xóa bằng chứng liên
quan đến bản thân, để không bị phát hiện hay chú ý và sau đó có thể tiếp tục
truy cập vào hệ thống nạn nhân
 Kẻ tấn công có thể xóa bản ghi trên máy chú, hệ thống và các ứng dụng để
tránh bị nghi ngờ.
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?
 Fuzzing là một kỹ thuật được sử dụng để phát hiện ra lỗ hổng trong các đoạn code trước
khi phát hành. Đó là một cách thử nghiệm lỗi hệ thống. Trong kiểm thử này, thay vì gửi
các dữ liệu hợp lý (được xử lý trong mã nguồn), hệ thống kiểm thử sẽ nhận được các đầu
vào hoặc chuỗi đầu vào không hợp lệ hoặc bán hợp lệ thông qua giao diện tương tác.
Chương trình hoặc framework tạo ra các kiểm thử fuzz (fuzz test) hoặc thực thi các kiểm
thử gọi là fuzzer.
Quá trình fuzzing không chỉ là việc gửi và nhận các thông điệp. Việc giám sát mục tiêu
cần được thực hiện liên tục, tất cả các thất bại đều được ghi lại để đánh giá trong các lần

sau. Một phần quan trọng của quá trình fuzzing là giám sát mã lệnh, khi nó xử lý một đầu
vào không hợp lệ.
 Tại sao kỹ thuật này lại quan trọng :
- Có hiệu quả trong việc tìm kiếm lỗi
- Tiết kiệm thời gian và là lựa chọn thay thế rẻ để kiếm tra an ninh thủ công
- Giúp ngăn ngừa việc những người bên ngoài tìm thấy lỗi trong phần mềm của bạn .

Phân loại fuzzing
Mục tiêu fuzzing đối với một ứng dụng, bao gồm các file được định dạng, giao thức
mạng, tham số dòng lệnh, biến môi trường, ứng dụng Web và nhiều thứ khác. File định

10


dạng và các giao thứcmạng là mục tiêu phổ biến nhất của fuzzing, nhưng bất kỳ loại
chương trình đầu vào có thể được mờ hóa (fuzzed).
Việc phân loại fuzzing có thể tùy thuộc vào attack vectors, mục tiêu fuzzing, phương
pháp fuzzing, v v… Tuy nhiên, có hai phương pháp phân loại phổ biến ở đây:
- Kiểm thử mờ dựa trên đột biến(Mutation Based Fuzzing)
- Kiểm thử mờ dựa trên thế hệ (Generation Based Fuzzing)
14. Dumb fuzzing là gì? Smart fuzzing là gì? Chúng được dùng trong trường hợp
nào?
• Kiểm thử mờ dựa trên đột biến(Mutation Based Fuzzing): Hay còn gọi là kiểm thử
mờ câm (Dumb Fuzzing), đó là phương pháp biến đổi mẫu dữ liệu hiện có để tạo dữ
liệu kiểm thử.
Đối với cách tiếp cận này thì :
+ Người thực hiện ít hoặc không có kiến thức về cấu trúc của các yếu tố đầu vào được
giả định.
+Tính dị thường được thêm vào đầu vào hợp lệ hiện có có thể hoàn toàn ngẫu nhiên
hoặc theo một số chẩn đoán về mặt kinh nghiệm.

+ Phụ thuộc vào các yếu tố đầu vào được sửa đổi.
+Yêu cầu ít hoặc việc thiết lập thời gian đơn giản hoặc không cần thiết v.v…
• Kiểm thử mờ dựa trên thế hệ (Generation Based Fuzzing) hay còn gọi là kiểm thử mờ
thông minh (Smart Fuzzing): Xác định dữ liệu kiểm thử mới dựa trên mô hình đầu
vào.
Đối với cách tiếp cận này thì :
+ Trường hợp thử nghiệm được tạo ra từ một số mô tả về các định dạng: RFC, các
định dạng tài liệu v.v…
+ Tính dị thường được thêm vào mỗi điểm có thể có trong các đầu vào.
+ Hỗ trợ kiến thức về giao thức nên cho kết quả tốt hơn so với fuzzing ngẫu nhiên.
+ Có thể mất thời gian đáng kể để thiết lập.
15. Mô tả cách thức đánh giá fuzzing dựa trên mức độ bao phủ mã lệnh (code
coverage)
- Mức độ bao phủ mã lệnh là số liệu có thể được sử dụng để xác định số lượng mã
đã được thực thi.
- Dữ liệu có thể thu được bằng cách sử dụng nhiều công cụ định hình. Ví dụ: Gcov
- Có 3 mức độ bao phủ mã lệnh:
o Độ bao phủ dòng (Line coverage): Đo số lượng dòng source code đã được
thực thi
o Độ bao phủ điều kiện (Branch coverage): Đo số lệnh rẽ nhánh đã được lấy
(lệnh jmps có điều kiện)
o Độ bao phủ đường đi (Path coverage): Đo số lượng đường đi (paths) đã
được lấy
Yêu cầu:
o

1 test case cho line coverage
11



2 test cases cho branch coverage
4 test cases cho path coverage:
 VD: (a, b) = {(0,0), (3,0), (0,3), (3,3)}
Vấn đề của Code Coverage:
o Mã có thể được bao phủ mà không tìm thấy lỗi
o Hầu như thiếu kiểm tra lỗi code (và chúng ta không đặc biệt quan tâm đến
nó)
o Chỉ có thể truy cập vào "bề mặt tấn công"
 VD: Mã xử lý người dùng kiểm soát dữ liệu
 Không có cách nào dễ dàng để đo bề mặt tấn công
Code coverage có thể đánh giá được:
o File khởi tạo này có tốt hay không
o Cho biết bạn có đang bị kẹt ở đâu không
o So sánh fuzzer X với fuzzer Y
o Cho biết bạn có lợi ích gì khi chạy một fuzzer khác hay không
o
o

-

-

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?
Mỗi tiến trình thực thi đều được hệ điều hành cấp cho một không gian bộ nhớ ảo (logic)
giống nhau. Không gian nhớ này gồm các vùng :
Vùng text là vùng cố định, chứa các mã lệnh thực thi (instruction) và dữ liệu chỉ đọc
(read-only). Vùng này được chia sẻ giữa các tiến trình thực thi cùng một file chương trình
và tương ứng với phân đoạn text của file thực thi. Dữ liệu ở vùng này là chỉ đọc, mọi thao
tác nhằm ghi lên vùng nhớ này đều gây lỗi segmentation violation.
Vùng data chứa các dữ liệu đã được khởi tạo hoặc chưa khởi tạo giá trị. Các biến toàn

cục và biến tĩnh được chứa trong vùng này. Vùng data tương ứng với phân đoạn databss của file thực thi.
Vùng nhớ Heap được sử dụng để cấp phát bộ nhớ thông qua kỹ thuật cấp phát động. Sử
dụng từ khóa new để cấp phát động. Toán tử new sau khi thực thi thành công sẽ trả về địa
chỉ của vùng nhớ được cấp phát trên heap, chúng ta có thể sử dụng con trỏ có kiểu dữ liệu
phù hợp để lưu trữ địa chỉ trả về này, và con trỏ cũng là công cụ duy nhất giúp chúng ta
có thể xác định được vị trí vùng nhớ được cấp phát là ở đâu, và cũng thông qua con trỏ để
chúng ta có thể giải phóng vùng nhớ đã được cấp phát.
Vùng stack là vùng nhớ được dành riêng khi thực thi chương trình dùng để chứa giá trị
các biến cục bộ của hàm, tham số gọi hàm cũng như giá trị trả về. Thao tác trên bộ nhớ
stack được thao tác theo cơ chế "vào sau ra trước" - LIFO (Last In, First Out) với hai
lệnh quan trọng nhất là PUSH và POP. Trong phạm vi bài viết này, chúng ta chỉ tập trung
tìm hiểu về vùng stack.
12


17. Stack frame là gì? Vẽ stack frame của hàm main (ví dụ stack1)
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 đối 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.

ví dụ stack1
Stackframe cho ví dụ 1.

18. Con trỏ trở về (old eip) lưu trong stack là gì?
Con trỏ trả về là thanh ghi eip cũ, lưu địa chỉ lệnh được thực hiện tiếp theo của chương
trình cha sau khi kết thúc chương trình con.
19. Mô tả tác dụng của các thanh ghi: ESP, EIP, EBP
EIP
Được cập nhật mỗi khi có một lệnh được thực hiện để luôn trỏ đến lệnh tiếp theo. Khác

với các thanh ghi khác EIP không thể bị tác động trực tiếp bởi các lệnh
ESP
Thanh ghi này luôn trỏ tới đỉnh hiện thời của ngăn xếp
EBP
Được sử dụng để truy nhập dữ liệu trong ngăn xếp. Thanh ghi EBP thường được kết hợp
với ESP khi chúng ta bắt gặp một lời gọi hàm, thì trước khi hàm này được thực hiện địa
13


chỉ trở về của chương trình (tức là địa chỉ của câu lệnh tiếp theo dưới lời gọi hàm) sẽ
được cất vào ngăn xếp.
20. Lỗi tràn bộ đệm là gì
Lỗi tràn bộ đệm (Buffer Overflow) là một điều kiện bất thường khi tiến trình lưu trữ dữ
liệu vượt ra ngoài biên của bộ nhớ đệm có chiều dài cố định. Kết quả là dữ liệu có thể đè
lên các bộ nhớ liền kề. Dữ liệu bị ghi đè có thể bao gồm các bộ nhớ đệm khác, các biến
và dữ liệu điều khiển luồng chảy của cả chương trình (program flow control).

21. Vẽ sơ đồ trạng thái của stack
a) Vẽ sơ đồ trạng thái của stack khi gọi hàm foo1(), vị trí của ebp, esp.

Biến cục bộ
EBP cũ
Eip (địa chỉ trả về)
B(int)
Stack frame của main

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 EIP cũ (địa chỉ ngay sau lệnh call 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.

14


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.

Biên dịch chương trình: $ gcc -fno-stack-protector -ggdb –mpreferred-stack-boundary=2
./stack1.c -o stack1
Cách 1: Sử dụng python để nhập chuỗi: python –c ‘print”a”*16 + “DCBA” ‘ | ./stack1
Cách 2: Chạy chương trình và Nhập chuỗi: “1234567890123456DCBA”

23. Các option của lệnh dịch có ý nghĩa gì $ gcc -fno-stack-protector -ggdb . /stack.c
-o stack
ý nghĩa :
- Gcc: Biên dịch từ file stack.c sang file thực thi stack

15


-fno-stack-protector : Tắt tính năng kiểm tra việc bảo vệ stack (Disable Stack Protector
Check)
-ggdb: Tạo ra thông tin gỡ lỗi để phục vụ cho trình gỡ lỗi gdb sử dụng

-o: đưa output của lệnh vào <file>
24. Quy ước kết thúc nhỏ (little endian) của bộ xử lý Intel X86 hiểu như thế nào?
Endian là cách tổ chức dữ liệu trên một nền tảng máy tính. Bộ nhớ máy tính có thể được
xem như một mảng có kích thước lớn, chia làm nhiều ô, mỗi ô có kích thước 1 byte. Nếu
dữ liệu của bạn có thể được gói gọn trong 1 byte, nghĩa là mỗi lần bạn chỉ xử lý 1 byte thì
không có gì khác biệt.
Vấn đề xảy ra khi dữ liệu của bạn vượt quá 1 byte, ví dụ như bạn cần lưu trữ một số
nguyên. Khi đó 4 byte của biến số nguyên đó sẽ được lưu vào bộ nhớ máy tính theo thứ
tự nào?
Ở các nền tảng sử dụng little endian, Least Significant bit (LSB – bit ở bên phải nhất)
luôn được lưu ở ô nhớ có địa chỉ nhỏ nhất còn Most Significant Bit (MSB-bit ở bên trái
nhất) được lưu ở ô nhớ có địa chỉ lớn nhất trong vùng lưu trữ của biến.
Xét lại ví dụ trên, việc lưu trữ số nguyên 7411 vào bộ nhớ máy tính được minh họa như
sau:

25. Thư viện ltrace dùng để làm gì?
Ltrace có thể được sử dụng để theo dõi các lời gọi hệ thống, hay được sử dụng để theo
dõi các cuộc gọi thư viện chia sẻ. Điều này có thể rất hữu ích để nhìn sâu vào dòng
chương trình của các ứng dụng trong khi phân tích một vấn đề.
- ltrace là một tiện ích gỡ lỗi trong Linux, được sử dụng để hiển thị các lời gọi một ứng
dụng vùng người dùng có các thư viện chia sẻ. Nó làm điều này bằng cách gắn vào hệ
thống nạp động, để hiển thị các thông số mà các ứng dụng sử dụng khi thực hiện lời gọi.
Một nhược điểm với ltrace là nó chỉ truy vết các cuộc gọi từ các thực thi để các thư viện
thực thi được liên kết - nó không theo dõi các cuộc gọi giữa các thư viện! Do đó, các
cuộc gọi đến hàm printf () (mà bản thân nó nằm trong thư viện chia sẻ libc) không được
hiển thị trong kết quả. Ngoài ra, không có tùy chọn để bao gồm tên thư viện trong đầu ra
cho mỗi chức năng được gọi.
26. Hãy mô tả một số cơ chế bảo vệ bộ nhớ của hệ điều hành.
- Cơ chế phân bố không gian địa chỉ ngẫu nhiên(nhân)-(ASLR) là một kỹ thuật bảo mật
máy tính liên quan đến việc ngăn ngừa các lỗ hổng trong bộ nhớ. Để ngăn chặn một kẻ

16


tấn công nhảy đáng tin cậy, ví dụ như một chức năng bị khai thác đặc biệt trong bộ nhớ,
ASLR sắp xếp ngẫu nhiên các vị trí không gian địa chỉ của các vùng dữ liệu chính của
một quá trình, bao gồm cơ sở thực thi và các vị trí của stack, heap và thư viện.
- Cơ chế bảo vệ ngăn xếp thực thi:
+ Trong bảo mật máy tính, khả năng thực hiện bảo vệ không gian đánh dấu khu vực bộ
nhớ là không thực thi được, như vậy mà một nỗ lực để thực hiện mã máy ở những khu
vực này sẽ gây ra một ngoại lệ. Nó sử dụng các tính năng phần cứng như bit NX (không
thực hiện bit), hoặc trong một số trường hợp mô phỏng phần mềm của các tính năng đó.
Tuy nhiên, các công nghệ mà bằng cách nào đó mô phỏng hoặc cung cấp một bit NX
thường sẽ áp đặt một chi phí đo được; Trong khi sử dụng một bit NX cung cấp phần cứng
không đòi hỏi chi phí vượt trội.
+ Nếu một hệ điều hành có thể đánh dấu một số hoặc tất cả các vùng ghi được của bộ nhớ
như là không thực thi được, nó có thể ngăn không cho ngăn xếp và vùng bộ nhớ heap
khỏi thực thi. Điều này giúp ngăn chặn một số lỗ hổng tràn bộ đệm nhất định từ thành
công, đặc biệt là các cú tấn công và thực thi mã như sâu Sasser và Blaster. Các cuộc tấn
công này dựa vào một phần bộ nhớ, thường là ngăn xếp, có thể ghi và chạy được; Nếu
không, cuộc tấn công sẽ thất bại.
- Cơ chế Stack Smashing Protector(SSP):
Tính năng biên dịch giúp phát hiện stack buffer overrun bằng cách hủy bỏ nếu một giá trị
bí mật trên ngăn xếp được thay đổi. Điều này phục vụ mục đích kép để làm cho sự xuất
hiện của các lỗi như vậy có thể nhìn thấy và như là khai thác giảm nhẹ đối với chương
trình định hướng trả về. SSP chỉ đơn thuần phát hiện stack buffer overruns, họ không phải
là ngăn cản. Việc phát hiện có thể bị đánh bại bằng cách chuẩn bị đầu vào sao cho ngăn
xếp Canary được ghi đè bằng đúng giá trị và do đó không cung cấp sự bảo vệ hoàn hảo.
Các canary stack có kích thước từ gốc và nếu được chọn một cách ngẫu nhiên, kẻ tấn
công sẽ phải đoán đúng giá trị giữa 2 ^ 32 hoặc 2 ^ 64 kết hợp (và tiết lộ lỗi nếu đoán là
sai) hoặc dùng các phương tiện thông minh để xác định nó.

- Cơ chế Executable Stack Protection:
+ Trong bảo mật máy tính, khả năng thực hiện bảo vệ không gian đánh dấu khu vực bộ
nhớ là không thực thi được, như vậy mà một nỗ lực để thực hiện mã máy ở những khu
vực này sẽ gây ra một ngoại lệ. Nó sử dụng các tính năng phần cứng như bit NX (không
thực hiện bit), hoặc trong một số trường hợp mô phỏng phần mềm của các tính năng đó.
Tuy nhiên, các công nghệ mà bằng cách nào đó mô phỏng hoặc cung cấp một bit NX
thường sẽ áp đặt một chi phí đo được; Trong khi sử dụng một bit NX cung cấp phần cứng
không đòi hỏi chi phí vượt trội.
+ Nếu một hệ điều hành có thể đánh dấu một số hoặc tất cả các vùng ghi được của bộ nhớ
như là không thực thi được, nó có thể ngăn không cho ngăn xếp và vùng bộ nhớ heap
khỏi thực thi. Điều này giúp ngăn chặn một số lỗ hổng tràn bộ đệm nhất định từ thành
công, đặc biệt là các cú tấn công và thực thi mã như sâu Sasser và Blaster. Các cuộc tấn

17


công này dựa vào một phần bộ nhớ, thường là ngăn xếp, có thể ghi và chạy được; Nếu
không, cuộc tấn công sẽ thất bại.
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?
• Cách để viết mã máy:
- Cách dài dòng: viết một đoạn C, dùng gdb dịch ra assembly xem thế nào, sau đó viết
assembly và dịch ra mã máy.
- Cách ngắn: viết thẳng bằng assembly luôn rồi dịch ra mã máy.
- Cách đơn giản: chép bytecode của người khác viết sẵn - cách này nguy hiểm vì có thể
nhiễm mã độc.
- Cách chuyên nghiệp: xây dựng một thư viện bytecode cho riêng mình.
• 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?
- Mã máy được chèn vào chính trên buffer đang bị tràn, và buffer nằm trên stack nên
hacker sẽ thực hiện:

 Làm tràn bộ đệm (đến return addr) bằng địa chỉ của buffer.
 Đặt shellcode vào buffer.
- Như vậy địa chỉ trả về sẽ trỏ đến shellcode, shellcode sẽ đổ một root shell. Tuy nhiên,
thật khó để làm có ret addr trỏ đến đúng shellcode. Có một cách khác, chúng ta sẽ đặt vào
đầu của buffer một dãy lệnh NOP (không xử lí), tiếp theo chúng ta đẩy shellcode vào sau
NOPs. Như vậy khi thay đổi ret addr trỏ đến một nơi nào đó ở đầu buffer, các lệnh NOP
sẽ được thi hành, chúng không làm gì cả. Đến khi gặp các lệnh shellcode, shellcode sẽ
làm nhiệm vụ đổ roor shell.
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ó?
a. Vấn đề NULL byte:
Vunlnerable code đọc dữ liệu vào buffer của nó mà không kiểm tra kích thước, vì thế bị
tràn bộ đệm. Ví dụ:
#include <stdio.h>
int main(int argc, char **argv) {
char buffer[500];
if (argv[1] != NULL) {
strcpy(buffer, argv[1]);
}
return 0;
}
Hàm strcpy sẽ copy cho đến khi nó thấy NULL byte, đánh dấu hết chuỗi nhập thì nó
dừng. Nhưng khi shellcode có NULL byte ở trong, shellcode bị ngắt giữa chừng.
- cách xử lý :

18


Sau khi kiểm tra mã máy, dễ thấy rằng NULL byte là do lệnh mov eax, 0 (4 byte bằng 0)

và mov eax, 11 ( 3 byte đầu của 11 bằng 0). Dễ dùng asembly để giải quyết vấn đề này.
b. Tránh phát hiện chữ ký của shellcode khi các hệ thống IDS dò tìm: - Khi viết
shellcode hiện thực một tác vụ phổ biến, chữ ký của shellcode sẽ dễ dàng bị phát hiện bởi
hệ thống IDS.
=> cách xử lý:
 Sinh mã máy tự động với tool :
- Một số tool tự động như : online x86/x64 Assembler and Disassembler
- Sử dụng Keystone và Capstone (có hỗ trợ nhiều kiến trúc và nền tảng )
 Hoặc sử dụng các đoạn mã có sẵn và tin dùng đặc biệt trên mạng .
c. Cơ chế bảo vệ stack không cho thực thi (non- executable stack): Như cơ chế "Data
Execution Prevention" (DEP) của Windows OS và chống thực thi stack của Linux.
Không thể đặt shellcode vào buffer bị tràn.
=> xử lý một số cơ chế bảo vệ của Linux
d. Chỗ đặt shellcode
- Chỗ để shellcode(buffer) quá nhỏ trong khi size của shellcode quá lớn.
=> cách xử lý : Truyền shellcode qua biến môi trường
29. NOP sled là gì? Tại sao cần dùng NOP sled?
* NOP sled là gì?
- NOP (No Operation) là lệnh mà khi gặp một lệnh NOP, CPU sẽ không làm gì cả ngoài
việc tăng con trỏ lệnh đến lệnh kế tiếp.
- NOP sled là bộ đệm NOP sử dụng trong khai thác, được đặt trước bộ đệm khai thác, nếu
eip được trỏ đến 1 NOP sled, bộ vi xử lý sẽ nhảy đến thực hiện mã khác thác.
- Nó giải quyết vấn đề của việc tìm kiếm địa chỉ chính xác của bộ đệm bằng cách có hiệu
quả tăng kích thước của khu vực mục tiêu.
- Khi không biết địa chỉ chính xác của shellcode, hãy thêm lệnh nop vào để điền đầy buffr
cho dễ thực hiện
* Tại sao cần dùng NOP sled?
Dùng NOP sled để đoán gần đúng địa chỉ của buffer của chương trình bị lỗi: Thông
thường, ta không thể biết một cách chính xác địa chỉ của bộ đệm trong chương trình bị lỗi
(phụ thuộc vào biến môi trường, tham số khi thực thi), do đó ta sẽ xác định một cách gần

đúng. Điều này có nghĩa chúng ta phải tổ chức bộ đệm chứa shellcode sao cho khi bắt
đầu ở một địa chỉ có thể lệch so với địa chỉ chính xác mà shellcode vẫn thực thi không hề
bị ảnh hưởng. NOP sled giúp ta đạt được điều này bằng cách:

19


+ Lấy stack pointer hiện hành của một chương trình làm mốc xê dịch nó xuống địa chỉ
thấp từng chút một cho đến khi đụng chuỗi NOP sled.
+ Vì stack pointer ta sẽ thấy có rất nhiều khả năng là nằm cao hơn stack pointer của
chương trình bị khai thác, do chương trình bị khai thác phải làm nhiều việc, stack của nó
sẽ ‘dài’ hơn.
Như vậy, chúng ta sẽ lấp đầy phần đầu của bộ đệm bằng các lệnh NOP, kế đó là
shellcode. Hơn nữa, để không phải tính toán chính xác vị trí lưu con trỏ lệnh bảo lưu trên
stack, chúng ta sẽ chỉ đặt shellcode ở khoảng giữa của bộ đệm, phần còn lại sẽ chứa toàn
các giá trị địa chỉ bắt đầu của shellcode.

20



×