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

Kiểm thử trên python pentest with python

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 (2.04 MB, 46 trang )

BỘ GIÁO DỤC VÀ ĐÀO TẠO
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ TP. HCM

ĐỒ ÁN CƠ SỞ

KIỂM THỬ TRÊN PYTHON

Ngành:

Công nghệ thông tin

Chun ngành: An tồn thơng tin

Giảng viên hướng dẫn : x
Sinh viên thực hiện
MSSV: x

:y
Lớp: x


TP. Hồ Chí Minh, 2022


LỜI CẢM ƠN
Em xin bày tỏ lịng kính trọng và biết ơn đến thầy y đã tận tình giúp đỡ và hướng
dẫn em hoàn thành bài báo cáo này. Nhờ sự giúp đỡ nhiệt lòng của thầy mà báo cáo đã
hồn thành đúng tiến độ đề ra.
Với hiểu biết tìm tòi của bản thân và sự chỉ bảo hướng dẫn tận tình của giảng viên
em đã cố gắng hồn thành đồ án một cách tốt nhất có thể nhưng cũng khơng thể tránh
được thiếu sót. Kính mong nhận được sự đóng góp ý kiến từ thầy cơ để em có thể nâng


cao cũng như bổ sung thêm kiến thức cho bản thân, hoàn thiện đồ án với một kết quả tốt
và hoản chỉnh hơn. Em xin chân thành cám


MỤC LỤC
Chương 1. TỔNG QUAN................................................................................................3
1.1 Giới thiệu..................................................................................................................3
1.2 Nhiệm vụ đồ án.........................................................................................................3
1.3 Cấu trúc đồ án...........................................................................................................3
Chương 2. CƠ SỞ LÝ THUYẾT....................................................................................5
2.1 Kiểm thử................................................................................................................... 5
2.1.1 Tổng quan...........................................................................................................5
2.1.2 Kiểm thử là gì?...................................................................................................6
2.1.3 Hiểu rõ về Kiểm thử...........................................................................................7
2.1.4 Các hình thức Kiểm thử......................................................................................8
2.1.5 Tại sao cần Kiểm thử?......................................................................................10
2.1.6 Điểm yếu của Kiểm thử....................................................................................12
2.1.7 Quy trình Kiểm thử...........................................................................................13
2.1.8 Các cơng cụ kiểm thử phổ biến.........................................................................14
2.2 Ngơn ngữ lập trình Python......................................................................................19
2.2.1 Lịch sử hình thành............................................................................................19
2.2.2 Các khái niệm cơ bản.......................................................................................20
2.2.3 Các thư viện cơ bản..........................................................................................23
2.2.4 Sử dụng hàm trong Python...............................................................................24
2.3 Python trong kiểm thử............................................................................................25
2.3.1 Công cụ Nmap..................................................................................................25
2.3.2 Công cụ Scapy..................................................................................................29

1



Chương 3. KẾT QUẢ THỰC NGHIỆM......................................................................32
3.1 Chuẩn bị.................................................................................................................. 32
3.2 Nội dung.................................................................................................................32
Chương 4. KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN..................................................42
4.1 Kết luận................................................................................................................... 42
4.1.1 Ưu điểm............................................................................................................42
4.1.2 Nhược điểm......................................................................................................43
Tài liệu tham khảo.........................................................................................................44

2


Chương 1. TỔNG QUAN
1.1 Giới thiệu
Kiểm thử là một cuộc kiểm tra được tiến hành để cung cấp cho các bên liên quan
thông tin về chất lượng của sản phẩm hoặc dịch vụ được kiểm thử. Kiểm thử có thể cung
cấp cho doanh nghiệp một quan điểm, một cách nhìn độc lập về phần mềm để từ đó cho
phép đánh giá và thấu hiểu được những rủi ro trong quá trình triển khai phần mềm. Đồ án
sẽ giới thiệu cho chúng ta biết về kiểm thử và python trong kiểm thử.

1.2 Nhiệm vụ đồ án
Tìm hiểu về kiểm thử, các lý thuyết cơ bản, các khái niệm liên quan.
Tìm hiểu cách sử dụng các công cụ cơ bản dùng để kiểm thử
Mục đích của kiểm thử
Python trong kiểm thử

1.3 Cấu trúc đồ án
Đồ án gồm có 4 chương:
- Chương 1: Tổng quan

Phần này giới thiệu tổng quan, nhiệm vụ của đồ án, giúp chúng ta hiểu nội dung
căn bản của đồ án
- Chương 2: Cơ sở lý thuyết
Phần này sẽ giới thiệu cụ thể về kiểm thử, ngôn ngữ lập trình python, kiểm thử
trên python và các khái niệm có liên quan. Tìm hiểu các cơng cụ cơ bản có thể sử dụng
cho mục đích kiểm thử trên python.
- Chương 3: Kết quả thực nghiệm
Phần này sẽ cho chúng ta thấy mơ hình mục tiêu úng dụng, giới thiệu cơng cụ để
thực hiện và đưa ra cách phòng chống/ngăn chặn.
3


- Chương 4: Kết luận và hướng phát triển của đồ án
Phần này sẽ rút ra những lưu ý và lời khuyên khi sử dụng kiểm thử trên python và
đưa ra hướng phát triển để giao thức hoàn thiện hơn.

4


Chương 2. CƠ SỞ LÝ THUYẾT
2.1 Kiểm thử
2.1.1 Tổng quan
Có một quan niệm sai lầm rất lớn về kiểm thử là gì. Điều này phổ biến ngay cả đối
với các chuyên gia mới tham gia vào lĩnh vực này. Những người kiểm tra thâm nhập mới
hoặc các chuyên gia yêu cầu kiểm tra thâm nhập thường nói rằng việc kiểm tra này chứng
minh khả năng khai thác của các lỗ hổng, dễ bị khai thác của môi trường hoặc chỉ sự hiện
diện của các lỗ hổng. Sự hiểu lầm này thể hiện thành các tác động thực sự đối với các
cam kết khi chúng được xác định phạm vi, nguồn gốc và tiến hành. Hơn nữa, nhận thức
sai lầm này bao gồm suy nghĩ rằng một bài kiểm tra thâm nhập sẽ tìm thấy tất cả các lỗ
hổng, và tất cả các mục tiêu sẽ luôn được đáp ứng bất kể các biện pháp kiểm soát được

đưa ra.
Định nghĩa đầu tiên chỉ tập trung vào các lỗ hổng, điều này có nghĩa là mọi người
mong đợi hoạt động mà người đánh giá sẽ thực hiện có liên quan đến việc khai thác hoặc
tìm ra các lỗ hổng hoặc các cấu hình sai đơn giản. Nó khơng tính đến các hành động sai
liên quan đến các chính sách, quy trình hoặc các mối quan hệ khơng an tồn mà tổ chức
có thể có. Những định kiến này thường có những tác động đáng kể sau đây đối với cả tổ
chức và những người đánh giá mới.
Lãnh đạo tổ chức sẽ không tạo ra các mục tiêu liên quan đến việc vi phạm các
kiểm soát truy cập liên quan đến kho dữ liệu quan trọng hoặc xác định các vị trí dữ liệu
quan trọng. Cũng sẽ có niềm tin ban đầu rằng Intrusion Protection Systems (IPS) và
Intrusion Detection Systems (IDS) là cơ sở cốt lõi để ngăn chặn một mối nguy hại, tất
cả những người đánh giá có kinh nghiệm đều biết rằng điều này khơng đúng. Ngồi ra,
các đánh giá có thể không được xác định phạm vi theo cách mang lại kết quả thực tế. Kết
quả tai hại nhất của sự nhầm lẫn này là tổ chức có thể khơng xác định được khi nào người
đánh giá thiếu các kỹ năng cần thiết để thực hiện cam kết bắt buộc.
5


2.1.2 Kiểm thử là gì?
Pentest, viết tắt của penetration testing (kiểm tra xâm nhập), là hình thức đánh
giá mức độ an toàn của một hệ thống IT bằng các cuộc tấn công mô phỏng thực tế. Hiểu
đơn giản, pentest cố gắng xâm nhập vào hệ thống để phát hiện ra những điểm yếu tiềm
tàng của hệ thống mà tin tặc có thể khai thác và gây thiệt hại.
Mục tiêu của pentest là giúp tổ chức phát hiện càng nhiều lỗ hổng càng tốt, từ đó
khắc phục chúng để loại trừ khả năng bị tấn công trong tương lai. Người làm cơng việc
kiểm tra xâm nhập được gọi là pentester.
Pentest có thể được thực hiện trên hệ thống máy tính, web app, mobile app, hạ
tầng mạng, IoT, ứng dụng và hạ tầng cloud, phần mềm dịch vụ SaaS, API, source code,
hoặc một đối tượng IT có kết nối với internet và có khả năng bị tấn cơng… nhưng phổ
biến nhất là pentest web app và mobile app. Những thành phần trên được gọi là đối tượng

kiểm thử (pentest target).
Khi thực hiện xâm nhập, pentester cần có được sự cho phép của chủ hệ thống hoặc
phần mềm đó. Nếu khơng, hành động xâm nhập sẽ được coi là hack trái phép. Thực tế,
ranh giới giữa pentest và hack chỉ là sự cho phép của chủ đối tượng. Vì thế, khái niệm
pentest có ý nghĩa tương tự như ethical hacking (hack có đạo đức), pentester còn được
gọi là hacker mũ trắng (white hat hacker).
Để hiểu rõ hơn về Pentest, ta cần hiểu rõ ba khái niệm cơ bản trong bảo mật là
“vulnerabilities”, “exploits”, và “payloads”
 Lỗ hổng (vulnerabilities) là những điểm yếu bảo mật của một phần mềm,
phần cứng, hệ điều hành, hay ứng dụng web cho phép kẻ tấn công một cơ
sở để tấn cơng hệ thống. Lỗ hổng có thể đơn giản như mật khẩu yếu, hay
phức tạp như lỗ hổng SQL hoặc tràn bộ nhớ đệm.
 Khai thác (exploits) là hành động lợi dụng một lỗ hổng, sự cố hay lỗi của
phần mềm, đoạn dữ liệu hay một chuỗi các lệnh nhằm gây ra hành vi bất
thường không mong muốn xảy ra trên một hệ thống máy tính. Những hành
6


vi đó bao gồm leo thang đặc quyền, đánh cắp thông tin nhạy cảm, tấn công
từ chối dịch vụ, v.v.
 Trọng tải (payloads) là một phần của hệ thống đang tồn tại lỗ hổng và là
mục tiêu để khai thác.
2.1.3 Hiểu rõ về Kiểm thử
Đánh giá lỗ hổng bảo mật Vulnerability Assessments (VA) sử dụng VMS để quét
các lỗ hổng. Các VA tốt sau đó sử dụng một chuyên gia đánh giá để loại bỏ các kết quả
dương tính giả, sau đó xếp hạng rủi ro thực tế của các phát hiện có thể được điều chỉnh
trên cơ sở tác động kinh doanh và khả năng bị khai thác. Thông thường các nhà tư vấn
bảo mật hoặc người kiểm tra thâm nhập thực hiện các đánh giá này, có thể yêu cầu khai
thác thực tế các lỗ hổng này để có bằng chứng về khái niệm. Loại đánh giá này rất tốt để
cho thấy một tổ chức thực hiện tốt việc vá lỗi và triển khai nội dung trong một cấu hình

an tồn như thế nào. Mấu chốt ở đây là những kiểu đánh giá này không tập trung vào việc
đạt được quyền truy cập vào dữ liệu quan trọng từ quan điểm của một tác nhân độc hại,
mà thay vào đó liên quan đến việc tìm kiếm các lỗ hổng.
Reverse có thể là một phần của thử nghiệm thâm nhập, nhưng ngày nay nó hiếm
hơn nhiều so với trước đây. Các thử nghiệm thâm nhập hiện tại có thể bao gồm phát triển
khai thác, nhưng nó được thực hiện để tạo ra một bằng chứng về khái niệm liên quan đến
mã cây nhà lá vườn và giành quyền truy cập vào một hệ thống quan trọng nơi dữ liệu có
thể cư trú. Ngược lại, trong các cam kết đảo ngược quy mô lớn, người đánh giá cố gắng
chứng minh tính dễ bị đảo ngược tổng thể của ứng dụng và các điểm yếu liên quan đến
mã nguồn, biên dịch và các thư viện liên quan. Những loại tương tác này phù hợp hơn
với một kỹ sư đảo ngược, người dành thời gian xác định các chuỗi và phương pháp tấn
cơng phổ biến để xâm phạm ứng dụng, thay vì giành quyền truy cập vào dữ liệu quan
trọng. Mức độ kinh nghiệm trong lĩnh vực cụ thể này là rộng rãi. Thông thường, nhiều
người đánh giá chuyển từ thử nghiệm thâm nhập sang bộ kỹ năng cụ thể này, nơi họ thực
hiện đảo ngược toàn thời gian.

7


Hacking không phải là một cuộc đánh giá, mà đề cập trực tiếp đến việc tận dụng
các lỗ hổng có thể khai thác được; nó có thể liên quan đến hoạt động độc hại hoặc nó có
thể được thực hiện để nghiên cứu. Mục đích của việc hack khơng phải là để có được
quyền truy cập vào dữ liệu quan trọng mà chỉ để bẻ khóa các lỗ hổng. Có nhiều định
nghĩa về hack, và nó thường là thử nghiệm thâm nhập liên quan trực tiếp, nhưng khơng
có mục tiêu cụ thể hoặc rõ ràng nào liên quan đến hack. Giờ đây, một số khác biệt lớn
giữa kiểm tra thâm nhập và các hoạt động khác đã được xác định, phương pháp luận liên
quan đến việc đạt được mục tiêu có thể được làm nổi bật.
2.1.4 Các hình thức Kiểm thử
White box Testing: Trong hình thức pentest white box, các chuyên gia kiểm thử
được cung cấp đầy đủ thông tin về đối tượng mục tiêu trước khi họ tiến hành kiểm thử.

Những thông tin này bao gồm: địa chỉ IP, sơ đồ hạ tầng mạng, các giao thức sử dụng,
hoặc source code.
Ưu điểm:
 Nó đảm bảo rằng tất cả các đường dẫn độc lập của một mô-đun đã được
thực hiện.
 Nó đảm bảo rằng tất cả các quyết định hợp lý đã được xác minh cùng với
giá trị đúng và sai của chúng.
 Nó phát hiện ra các lỗi đánh máy và kiểm tra cú pháp.
 Nó tìm thấy các lỗi thiết kế có thể xảy ra do sự khác biệt giữa luồng logic
của chương trình và thực thi thực tế.
Gray box Testing: Pentest gray box là hình thức kiểm thử mà pentester nhận được
một phần thông tin của đối tượng kiểm thử, ví dụ URL, IP address,… nhưng khơng có
hiểu biết đầy đủ hay quyền truy cập vào đối tượng.
Ưu điểm:
 Vì người kiểm tra khơng u cầu quyền truy cập của mã nguồn, nó khơng
xâm phạm và khơng thiên vị.
8


 Vì có sự khác biệt rõ ràng giữa nhà phát triển và người thử nghiệm, nên ít
có nguy cơ xảy ra xung đột cá nhân.
 Bạn không cần cung cấp thông tin nội bộ về các chức năng của chương
trình và các hoạt động khác
Black box Testing: Pentest black box, hay cịn gọi là ‘blind testing’, là hình thức
pentest dưới góc độ của một hacker trong thực tế. Với hình thức này, các chun gia kiểm
thử khơng nhận được bất kỳ thông tin nào về đối tượng trước khi tấn cơng. Các pentester
phải tự tìm kiếm và thu thập thông tin về đối tượng để tiến hành kiểm thử. Loại hình
pentest này yêu cầu một lượng lớn thời gian tìm hiểu và nỗ lực tấn cơng, nên chi phí
khơng hề rẻ.
Ưu điểm:

 Người kiểm thử không nhất thiết phải là một chun gia, vì nó khơng địi
hỏi kiến thức ngôn ngữ cụ thể.
 Người kiểm tra xác minh mâu thuẫn trong hệ thống thực tế và thông số kỹ
thuật.
 Kiểm tra thường được tiến hành với quan điểm của người dùng, không phải
người thiết kế
Nhược điểm:
 Các loại trường hợp thử nghiệm rất khó thiết kế.
 Có thể, nó khơng có giá trị vì nhà thiết kế đã tiến hành một test case.
 Nó khơng tiến hành mọi thứ.
Ngồi ra cịn các hình thức pentest khác như: double-blind testing, external
testing, internal testing, targeted testing tuy nhiên chúng không phổ biến tại Việt Nam và
chỉ được sử dụng với nhu cầu đặc thù của một số doanh nghiệp.
Có nhiều phương pháp đánh giá liên quan đến thử nghiệm thâm nhập. Ví dụ về
một số phương pháp bao gồm Open Source Security Testing Methodology Manual
(OSSTMM), Open Web Application Security Project (OWASP) cho các đánh giá web,
Ấn phẩm National Institute of Standards and Technology (NIST) 800-115 Hướng dẫn
9


Kỹ thuật Kiểm tra An ninh Thông tin và Đánh giá, và PTES. Phương pháp mà chúng tôi
sẽ tập trung vào trong cuốn sách này là PTES vì nó là một nguồn lực vững chắc cho
những người đánh giá mới.
2.1.5 Tại sao cần Kiểm thử?
Ngày nay, dưới sự phát triển của công nghệ, kiểm tra thâm nhập đã trở thành một
mơ-đun khơng thể thiếu trong hệ thống an tồn thơng tin của nhiều doanh nghiệp.
Penetration Testing (kiểm tra thâm nhập) là giải pháp hiệu quả để bảo mật cho
web, mobile app, network, IoT,… khỏi cuộc tấn công của tin tặc. Thông qua các cuộc tấn
công mô phỏng thực tế, các kỹ sư kiểm thử có thể tìm ra những điểm yếu bảo mật của hệ
thống. Qua đó giúp doanh nghiệp vá lỗ hổng kịp thời, trước khi tin tặc khai thác chúng và

gây thiệt hại về tiền bạc, danh tiếng cho tổ chức.
Theo đơn vị nghiên cứu thị trường Market Watch, dung lượng thị trường Pentest
vào năm 2018 là 920 triệu USD, sẽ tăng lên 2420 triệu USD vào năm 2025 với tốc độ
tăng trưởng 14,9% trong giai đoạn 2019 – 2025. Nhu cầu dành cho việc kiểm tra sức
chống chịu của hệ thống trước tội phạm mạng là rất lớn. Lý do giải thích cho sự tăng
trưởng này đến từ bốn yếu tố:





Phát triển web app, mobile app gia tăng
Xu hướng chuyển đổi số
Phần mềm SaaS
Pentest là hình thức phòng ngừa chủ động hiệu quả

Khi thực hiện pentest định kỳ và đúng cách, doanh nghiệp có thể đạt được những
mục tiêu bảo mật quan trọng:
 Tăng cường an ninh cho ứng dụng web, mobile, network, IoT, API, hệ
thống cloud, SaaS, phần cứng, v.v. Giảm thiểu tối đa khả năng bị hacker
xâm nhập trái phép và gây thiệt hại;

10


 Các nhà lãnh đạo có cài nhìn tồn cảnh về an ninh ứng dụng & sản phẩm
công nghệ của tổ chức;
 Ước tính thiệt hại mà một cuộc tấn cơng thực tế có thể gây ra;
 Bảo mật cơ sở dữ liệu, các thông tin quan trọng của doanh nghiệp và thông
tin người dùng;

 Giúp hệ thống hoạt động ổn định, giảm thiểu khả năng bị tấn công gây gián
đoạn;
 Tìm được các lỗ hổng nguy hiểm mà cơng cụ/phần mềm phịng thủ tự động
khó phát hiện ra;
 Đảm bảo tiêu chuẩn bảo mật của từng ngành cụ thể (PCI DSS, HIPAA, ISO
27001,…);
 Củng cố niềm tin cho khách hàng, đối tác, nhà đầu tư.
Các tổ chức được khuyến cáo thực hiện pentest định kỳ theo chu kỳ hàng năm
hoặc quý để đảm bảo an ninh cho hệ thống IT bao gồm hạ tầng mạng và các ứng dụng.
Bên cạnh việc triển khai pentest định kỳ, kiểm tra xâm nhập sẽ cần thiết mỗi khi doanh
nghiệp:






Có thêm hạ tầng mạng hoặc ứng dụng mới;
Cập nhật hay điều chỉnh đáng kể các ứng dụng và hạ tầng;
Chuyển văn phòng sang địa điểm mới và cài đặt lại hệ thống;
Cập nhật bản vá bảo mật mới;
Điều chỉnh chính sách bảo mật cho người dùng cuối.

Tuy nhiên, pentest không phải dành cho tất cả mọi tổ chức. Cần xem xét các yếu
tố sau trước khi thực hiện pentest:

11


 Quy mô công ty. Những công ty xuất hiện online thường xun hơn sẽ có

nhiều vector tấn cơng và trở nên hấp dẫn hơn với tin tặc.
 Các công ty có hạ tầng trên cloud có khả năng sẽ không được phép thực
hiện pentest hạ tầng cloud. Tuy nhiên nhà cung cấp sẽ có nghĩa vụ phải
thực hiện pentest định kỳ để đảm bảo an ninh cho khách hàng sử dụng tài
nguyên đám mây của họ.
 Chi phí pentest khơng hề thấp, vì thế các cơng ty có ngân sách an ninh
mạng hạn hẹp sẽ khó có thể thực hiện định kỳ.
2.1.6 Điểm yếu của Kiểm thử
Mặc dù Pentest là một giải pháp hiệu quả để chống lại các cuộc tấn cơng mạng có
chủ đích. Nhưng khơng có phương pháp nào là hoàn hảo tuyệt đối. Dưới đây là một số
mặt hạn chế của Kiểm thử thâm nhập:
Chi phí cao: Đối với dịch vụ pentest thông thường, doanh nghiệp sẽ phải trả phí
theo giờ hoặc ngày cơng làm việc của pentester, và chi phí này khơng hề thấp. Thực tế
nhiều doanh nghiệp có nhu cầu bảo mật web app, mobile app nhưng việc chi một khoản
tiền quá lớn cho pentest là một rào cản.
Thiếu tính đa dạng: Thơng thường đội ngũ pentest chỉ bao gồm tối đa 3-5 người,
và họ thường kiểm tra theo một quy trình có sẵn, lặp đi lặp lại. Trong khi tin tặc ngoài
thực tế khơng bị bó buộc vào bất kỳ một quy trình nào, và số lượng kẻ xấu là rất nhiều.
Khó tích hợp nền tảng: Các pentest thông thường sẽ tạo ra một báo cáo dài với
các lỗ hổng được liệt kê. Khơng có sự tích hợp nào trong vịng đời phát triển phần mềm,
và điều này làm tăng thêm chi phí hoạt động và làm chậm tốc độ của cả việc khắc phục
và phát triển ứng dụng.
Pentest cộng đồng được cho là giải pháp hiệu quả để khắc phục những yếu điểm
trên. Với Pentest cộng đồng, doanh nghiệp có thể tiếp cận hàng trăm chuyên gia bảo mật,
pentester hay hacker mũ trắng để tìm lỗi cho sản phẩm. Hơn nữa, mơ hình tính phí Bug

12


bounty (trả tiền theo lỗi) cho phép doanh nghiệp tối ưu hiệu quả đầu tư với cùng mức chi

phí so với Pentest truyền thống.
2.1.7 Quy trình Kiểm thử
Có nhiều phương pháp và cách tiếp cận khác nhau khi nói tới quy trình kiểm thử
xâm nhập. Tuy nhiên chúng đều theo một tư duy chung gồm 4 bước cơ bản: thu thập
thông tin về đối tượng – nghiên cứu các phương án khả thi – khai thác lỗ hổng & xâm
nhập – báo cáo.
1.
2.
3.
4.

Reconnaissance
Enumerate
Exploit
Documentation

Thu thập thông tin
Đây là giai đoạn pentester thu thập tất cả những thông tin cần thiết về đối tượng.
Quá trình này ảnh hưởng to lớn đến kết quả kiểm thử của chuyên gia. Nếu thu thập thông
tin chính xác sẽ giúp rút ngắn thời gian kiểm thử đi nhiều lần. Những thơng tin có thể thu
thập bao gồm: địa chỉ website, loại máy chủ, địa điểm đặt máy chủ, các đường link, tiêu
chuẩn mã hóa, thơng tin liên hệ, email, số điện thoại,… Các công cụ được sử dụng rất đa
dạng, có thể là Google Search hay các công cụ chuyên sâu như Nmap, Wireshark. Đôi khi
các pentester cũng phân tích source code của website để tìm kiếm thông tin.
Xác định các cổng truy cập
Việc tiếp theo là xác định toàn bộ các cổng cho phép truy cập vào ứng dụng. Ở
bước này, pentester sẽ sử dụng kinh nghiệm và các cơng cụ hỗ trợ để tìm ra những cổng
khả thi giúp truy cập vào phần mềm. Những công cụ thường được sử dụng là Nmap,
Wireshark.
Khai thác lỗ hổng và xâm nhập

Sau khi đã có đầy đủ thông tin và các cổng truy cập, pentester thực hiện khai thác
các lỗ hổng để có được quyền truy cập vào ứng dụng web/mobile.
13


Gửi báo cáo lỗ hổng và PoC
Khi đã xâm nhập thành công, các pentester cần gửi báo cáo lỗ hổng cho đơn vị chủ
quản của hệ thống để tiến hành xác minh và đánh giá mức độ nghiêm trọng. Ở bước này,
pentester cần viết một PoC.
PoC (Proof of Concept) là một bản mô phỏng cuộc tấn công khai thác lỗ hổng
trong thế giới thực. Một đoạn mã được viết phục vụ việc mô phỏng được gọi là PoC
code. Nếu PoC code bị phát tán rộng rãi trước khi có bản vá bảo mật, sẽ trở thành một
Zero-day exploit.
Quá trình pentest hoàn tất khi hai bên (Pentester và Doanh nghiệp) thống nhất báo
cáo cuối cùng về các lỗ hổng và mức độ ảnh hưởng của nó tới phần mềm hoặc hệ thống.
Nhiều pentester tìm ra lỗ hổng nguy hiểm, nhưng khơng chứng minh được mức độ
ảnh hưởng của lỗ hổng đó tới tổ chức, thì sẽ khơng được đánh giá cao. Bởi vậy, việc
chứng minh mức độ ảnh hưởng của lỗ hổng rất quan trọng trong quá trình đám phán, và
pentester cần tìm hiểu kỹ về tổ chức để trao đổi dễ dàng hơn về phạm vi ảnh hưởng.
2.1.8 Các công cụ kiểm thử phổ biến
1. Selenium
Selenium là một công cụ kiểm thử phần mềm tự động mã nguồn mở miễn phí cho
các ứng dụng web trên nhiều trình duyệt và nền tảng khác nhau như Windows, Mac và
Linux. Selenium giúp Tester thực hiện kiểm thử bằng nhiều ngôn ngữ lập trình khác nhau
như Java, PHP, C#, Python, Groovy, Ruby và Perl.
Selenium hiện có 3 loại: Selenium Webdriver, Selenium IDE, Selenium Grid. Tùy
vào kỹ năng, nền tảng và yêu cầu mà bạn có thể lựa chọn sử dụng loại Selenium phù hợp.
Cơng cụ này phổ biến với tất cả các trình duyệt nổi tiếng hiện tại như Chrome,
Mozila Firefox, Microsoft Edge, Apple Safari, Opera. Vì vậy, Selenium chắc chắn là nền
tảng cho hầu hết các công cụ kiểm thử phần mềm khác.

2. TestingWhiz
14


TestingWhiz là công cụ kiểm thử phần mềm tự động với phiên bản Enterprise
cung cấp một gói hồn chỉnh gồm nhiều giải pháp test tự động khác nhau. Trong đó bao
gồm: test web, test phần mềm, test database (cơ sở dữ liệu), test API, test ứng dụng di
dộng, bảo trì bộ kiểm tra hồi quy, tối ưu hóa và tự động hóa cũng như kiểm thử trên nhiều
trình duyệt.
Ngồi ra, TestingWhiz cung cấp nhiều tính năng quan trọng khác nhau như:
 Kiểm thử theo hướng từ khóa (key-word driven), theo hướng dữ liệu (data






driven) và kiểm thử phân tán (distributed)
Kiểm thử tiện ích mở rộng trong trình duyệt
Object Eye Internal Recorder
SMTP Integration
Tích hợp với các cơng cụ theo dõi lỗi như Jira, Mantis, TFS và FogBugz
Tích hợp với các cơng cụ quản lý kiểm thử như HP Quality Center, Zephyr,

TestRail và Microsoft VSTS
 Centralized Object Repository (Kho lưu trữ đối tượng tập trung)
 Version Control System Integration (Tích hợp hệ thống kiểm soát phiên
bản)
 Customized Recording Rule (Quy tắc ghi tùy chỉnh)
3. HPE Unified Functional Testing (HP – UFT formerly QTP)

HPE UFT cung cấp tính năng tự động hóa kiểm thử để kiểm thử chức năng và
kiểm thử hồi quy cho các ứng dụng phần mềm. Ngôn ngữ script Visual Basic Scripting
Edition được ứng dụng bởi công cụ này để đăng ký các quá trình kiểm thử và vận hành
các đối tượng và điều khiển khác nhau trong việc test các ứng dụng.
Ngồi ra, QTP cung cấp các tính năng khác như:
 Tích hợp với Mercury Business Process Testing và Mercury Quality Center
 Nhận dạng Unique Smart Object
 Cơ chế xử lý lỗi
 Tạo các tham số cho đối tượng, checkpoint và bảng điều hướng dữ liệu
 Tài liệu tự động
4. TestComplete

15


TestComplete là một nền tảng kiểm thử chức năng cung cấp các giải pháp khác
nhau để tự động kiểm thử. Cơng cụ này sử dụng cho máy tính để bàn, web và các ứng
dụng di động.
TestComplete cung cấp các tính năng sau:
 GUI testing
 Hỗ trợ ngôn ngữ test – JavaScript, Python, VBScript, JScript, DelphiScript,
C++ Script & C# Script
 Kiểm thử trình hiển thị
 Kiểm thử theo script (Scripted testing)
 Kiểm thử ghi và phát lại (Test recording and playback)
5. Ranorex
Ranorex Studio cung cấp các cơng cụ tự động hóa testing khác nhau bao gồm việc
test tất cả các ứng dụng máy tính để bàn, web và thiết bị di động.
Cụ thể hơn, Ranorex cung cấp các tính năng sau:





6. Sahi

Kiểm thử GUI
Có thể tái sử dụng test code
Phát hiện bugTích hợp với nhiều cơng cụ khác nhau
Ghi và phát lại

Sahi là một công cụ kiểm thử phần mềm tự động hóa áp dụng cho việc test các
ứng dụng web. Mã nguồn mở Sahi được viết bằng ngôn ngữ lập trình Java và JavaScript.
Sahi cung cấp các tính năng sau:

 Thực hiện kiểm thử nhiều trình duyệt cùng lúc
 Hỗ trợ các framework ExtJS, ZK, Dojo, YUI, v.v.
 Ghi lại và phát lại khi test trình duyệt
7. Watir
Watir là một công cụ kiểm thử mã nguồn mở được tạo thành từ các thư viện Ruby
để tự động kiểm thử ứng dụng web.
16


Cơng cụ này cung cấp các tính năng sau:
 Kiểm thử bất kỳ ứng dụng web dựa trên ngôn ngữ nào
 Kiểm thử trên nhiều trình duyệt
 Tương thích với các công cụ phát triển theo định hướng kinh doanh như
RSpec, Cucumber và Test / Unit
 Kiểm thử các nút, biểu mẫu, liên kết và phản hồi của chúng trên trang web
8. Tosca Testsuite

Tosca Testsuite là một công cụ phần mềm để thực hiện tự động kiểm thử phần
mềm chức năng và hồi quy. Ngồi chức năng tự động hóa thử nghiệm, TOSCA bao gồm
quản lý kiểm thử tích hợp, giao diện người dùng đồ họa (GUI), giao diện dòng lệnh (CLI)
và giao diện lập trình ứng dụng (API).
Tosca Testsuite đi kèm với các tính năng sau:
 Lập kế hoạch và thiết kế trường hợp thử nghiệm
 Kiểm tra cung cấp dữ liệu
 Dịch vụ mạng ảo hóa
 Kiểm tra ứng dụng di động
 Quản lý tích hợp
 Bảo hiểm rủi ro
9. Telerik TestStudio
Telerik TestStudio cung cấp giải pháp để tự động kiểm thử ứng dụng trên máy tính
để bàn, web và thiết bị di động bao gồm kiểm thử giao diện người dùng, load và hiệu
suất.
Công cụ này cung cấp nhiều khả năng tương thích khác nhau như:
 Hỗ trợ các ngơn ngữ lập trình như HTML, AJAX, ASP.NET, JavaScript,
Silverlight, WPF và MVC
 Tích hợp với Visual Basic Studio 2010 và 2012
 Ghi và phát lại
 Kiểm thử trên nhiều trình duyệt
 Kiểm thử thủ cơng
 Tích hợp với các công cụ theo dõi bug
10. Katalon Studio
17


Katalon Studio là một công cụ kiểm thử phần mềm tự động hóa miễn phí được
phát triển bởi Katalon LLC. Công cụ này được xây dựng dựa trên các framework tự động
hóa mã nguồn mở Selenium, Appium với giao diện IDE chuyên biệt để kiểm tra API, web

và thiết bị di động. Cơng cụ này bao gồm một gói đầy đủ các tính năng mạnh mẽ giúp dễ
dàng tự động hóa kiểm thử giao diện người dùng web.
Katalon Studio bao gồm các tính năng sau:







Kho lưu trữ đối tượng tích hợp, XPath, nhận dạng lại đối tượng
Hỗ trợ các ngôn ngữ script Java / Groovy
Hỗ trợ tích hợp cho kiểm thử dựa trên hình ảnh
Hỗ trợ các cơng cụ Tích hợp liên tục như Jenkins & TeamCity
Hỗ trợ Duel-editor Interface
Quy trình thực thi có thể tùy chỉnh

2.2 Ngơn ngữ lập trình Python
2.2.1 Lịch sử hình thành
Python đã được hình thành vào cuối những năm 1980 và được bắt đầu thực hiện
vào tháng 12/1989 bởi Guido van Rossum tại CWI tại Hà Lan như là người kế thừa của
ngôn ngữ ABC (tự lấy cảm hứng từ SETL) có khả năng xử lý ngoại lệ và giao tiếp với hệ
điều hành Amoeba. Van Rossum là tác giả chính của Python, và vai trị trung tâm của ơng
tiếp tục trong việc quyết định hướng phát triển của Python được phản ánh trong tiêu đề
mà cộng đồng Python dành cho ông “Độc tài nhân từ cho cuộc sống” (benevolent dictator
for life)(BDFL).
Python 2.0 được phát hành vào ngày 16/10/2000, với nhiều tính năng chính mới
bao gồm một bộ dọn rác đầy đủ và hỗ trợ Unicode. Với phiên bản này, quá trình phát
triển đã được thay đổi và trở thành minh bạch hơn và được cộng đồng ủng hộ.
Python 3.0 (còn được gọi là Python 3000 hoặc Py3k), một bản phát hành lớn,

khơng tương thích ngược, được phát hành vào ngày 03/12/2008 sau một thời gian dài thử
nghiệm. Nhiều trong số các tính năng chính của nó đã được điều chỉnh để tương thích
ngược với Python 2.6 và 2.7. Các tính năng và triết lý phát triển Python là 1 ngôn ngữ lập
18


trình đa hình: lập trình hướng đối tượng và hướng cấu trúc được hỗ trợ đầy đủ, và có 1 số
tính năng của ngơn ngữ hỗ trợ lập trình theo chức năng và lập trình hướng khía cạnh
(Aspect-oriented programming). Nhiều mơ hình khác được hỗ trợ bằng việc sử dụng các
phần mở rộng, bao gồm thiết kế theo hợp đồng (design by contract) và lập trình luận lý.
Các trang như Mozilla, Reddit, Instagram và PBS đều được viết bằng Python.
Ngôn ngữ lập trình Python được dùng vào các mục đích:





Phát triển web (trên máy chủ)
Phát triển phần mềm
Tính tốn một cách khoa học
Lên kịch bản cho hệ thống

Tại Sao Nên Học Lập Trình Python?
 Python hỗ trợ nhiều nền tảng khác nhau (Windows, Mac, Linux, Raspberry
Pi, etc).
 Python có cú pháp đơn giản, dễ đọc hiểu và rất gần gũi với tiếng Anh.
 Cú pháp của Python giúp lập trình viên sử dụng ít dịng code để lập trình
cùng một thuật tốn hơn so với các ngơn ngữ lập trình khác.
 Python sử dụng trình thơng dịch để thực thi các dịng code. Do đó, những
dịng code có thể được thực thi ngay lập tức mà không cần biên dịch tồn

bộ chương trình. Như vậy giúp chúng ta kiểm tra code nhanh hơn.
Python cũng hỗ trợ hàm, thủ tục, hay kể cả lập trình hướng đối tượng.
Để viết mã nguồn Python, ta có thể sử dụng bất kỳ một trình soạn thảo nào, kể cả
những trình soạn thảo đơn giản nhất như NotePad. Tuy nhiên, để phát triển các ứng dụng
một cách hiệu quả hơn, ta nên sử dụng một IDE, để có thể tiết kiệm thời gian và cơng sức
viết code. ở đây chúng ta sử dụng một trong những IDE thơng dụng nhất để lập trình ứng
dụng Python, đó là PyCharm IDE.

19


2.2.2 Các khái niệm cơ bản
Trong Python bất kỳ văn bản nào ở bên phải biểu tượng # thì sẽ được trình biên
dịch hiểu là một comment và khơng biên dịch phần đó.
Sử dụng càng nhiều comment hữu ích trong chương trình của bạn sẽ làm cho cơng
việc lập trình của bạn dễ dàng hơn:






Giải thích các giả định.
Giải thích các quyết định quan trọng.
Giải thích chi tiết quan trọng.
Giải thích vấn đề bạn đang cố gắng giải quyết.
Giải thích các vấn đề đang cố gắng khắc phục trong chương trình của mình,
v.v. .

Hằng số (Literal Constants): Ví dụ về một hằng số theo nghĩa đen là một số như 5,

1. 23 hoặc một chuỗi như ‘python’hay “It’s a string!”. Nó được gọi là nghĩa đen
bởi vì sử dụng giá trị của nó theo nghĩa đen. Số 2 ln ln đại diện cho chính nó
và khơng có gì khác và nó là một hằng số vì giá trị của nó khơng thể thay đổi. Do
đó, tất cả những giá trị này được gọi là hằng số.
Số (Numbers): Số chủ yếu có hai loại – số nguyên (integer) và số thực (float).
Chuỗi (String): Một chuỗi là một dãy các ký tự. Chuỗi về cơ bản chỉ là một loạt
các từ.
Biến: Biến chính xác như tên gọi của nó, tức là giá trị của nó có thể thay đổi. Các
biến có thể giúp lưu trữ bất cứ cái gì nếu có thể định nghĩa được nó. Các biến chỉ
là một phần của bộ nhớ máy tính nơi lưu trữ một số thơng tin.
Đối tượng(Object): Python đề cập đến bất cứ điều gì được sử dụng trong một
chương trình như là một đối tượng.
Việc tổ chức, quản lý và lưu trữ dữ liệu rất quan trọng vì nó cho phép truy cập dễ
dàng hơn và sửa đổi hiệu quả. Cấu trúc dữ liệu (Data Structure) cho phép bạn sắp xếp dữ

20


liệu của mình theo cách cho phép bạn lưu trữ các bộ dữ liệu được thu thập, liên quan đến
chúng và theo đó mà thực hiện các thao tác trên chúng.
Python có hỗ trợ ngầm cho Cấu trúc dữ liệu cho phép lưu trữ và truy cập dữ liệu.
Các cấu trúc này được gọi là List, Dictionary, Tuple và Set.
Python cho phép người dùng tạo Cấu trúc dữ liệu của riêng họ, cho phép tồn
quyền kiểm sốt chức năng. Các cấu trúc dữ liệu nổi bật nhất là Stack, Queue, Tree,
Linked List, v.v. đồng thời cũng có sẵn trong các ngơn ngữ lập trình khác.
Cấu trúc dữ liệu tích hợp (Built-in Data Structures)
Về cấu trúc dữ liệu trong Python, các Cấu trúc dữ liệu này được tích hợp sẵn với
Python giúp lập trình dễ dàng hơn và giúp các lập trình viên sử dụng chúng để có được
các giải pháp nhanh hơn. Và có các kiểu cấu trúc dữ liệu là:
List: Được sử dụng để lưu trữ dữ liệu của các loại dữ liệu khác nhau một cách

tuần tự. Có các địa chỉ được gán cho mọi thành phần của danh sách, được gọi là Index.
Giá trị chỉ mục bắt đầu từ 0 và tiếp tục cho đến khi phần tử cuối cùng được gọi là chỉ số
dương.

Dictionary: Được sử dụng để lưu trữ các cặp key-value. Để hiểu rõ hơn,

hãy nghĩ đến một thư mục điện thoại nơi hàng trăm và hàng ngàn tên và số tương ứng của
chúng đã được thêm vào. Bây giờ các giá trị không đổi ở đây là Tên và Số điện thoại
được gọi là các phím. Và các tên và số điện thoại khác nhau là các giá trị đã được đưa
vào các phím. Nếu truy cập các giá trị của các phím, sẽ nhận được tất cả tên và số điện
thoại. Vì vậy, đó là những gì một cặp key-value. Và trong Python, cấu trúc này được lưu
trữ bằng Dictionary Set: Là một tập hợp các yếu tố khơng có thứ tự là duy nhất. Có nghĩa
là ngay cả khi dữ liệu được lặp lại nhiều lần, nó sẽ chỉ được nhập vào tập hợp một lần.
Tuple (các bộ dữ liệu): Tuples giống như các list với ngoại lệ là dữ liệu một khi
được nhập vào bộ dữ liệu không thể thay đổi bất kể điều gì. Ngoại lệ duy nhất là khi dữ
liệu bên trong Tuple có thể thay đổi, chỉ sau đó dữ liệu Tuple có thể được thay đổi.

21


Python luôn chạy một loạt các câu lệnh theo thứ tự từ trên xuống một cách chính
xác. Câu lệnh điều khiển là loại câu lệnh được dùng để điều khiển luồng chạy của các câu
lệnh khác trong chương trình.
Điều này đạt được bằng cách sử dụng các câu lệnh điều khiển. Có 3 lệnh kiếm sốt
cấu trúc điều khiển của Python là: if, for và while.
If được sử dụng để kiểm tra một điều kiện: nếu điều kiện là đúng sẽ chạy một khối
các câu lệnh (được gọi là if-block), nếu sai chương trình sẽ xử lý một khối các câu lệnh
khác (được gọi là else-block ).
For . . in là một câu lệnh lặp khác, nó lặp đi lặp lại qua một chuỗi (sequences) các
đối tượng tức là đi qua từng mục trong một chuỗi. Chúng ta sẽ tìm 25 hiểu nhiều hơn về

sequences trong bài về cấu trúc dữ liệu trong Python sau. Những gì bạn cần biết ngay bây
giờ là một chuỗi trình từ chỉ là một tập hợp các items.
Kết quả Vòng lặp for trong Python hồn tồn khác với vịng lặp trong C / C ++.
vòng lặp for trong Python tương tự như vòng lặp foreach trong C#. Trong C / C ++, nếu
bạn muốn viết for(int i = 0; i<5;i++), thì trong Python bạn chỉ cần viết for i in
range(0,5).
Vòng lặp for đơn giản, biểu cảm hơn và ít bị lỗi hơn trong Python.
While cho phép liên tục thực thi một khối các câu lệnh miễn là điều kiện là đúng.
Một câu lệnh while là một ví dụ về cái được gọi là câu lệnh lặp. Một câu lệnh while có
thể có một mệnh đề khác tùy chọn.
2.2.3 Các thư viện cơ bản
Pip là cơng cụ quản lý các gói thư viện python (Python package manager). Với
việc sử dụng pip, ta sẽ dễ dàng cài đặt các gói thư viện cần thiết trong quá trình làm việc
với Python.
Matplotlib là một thư viện xây dựng các khối cần thiết để tạo các biểu đồ chất
lượng từ mảng và trực quan và tương tác với chúng.
22


×