Khi xây dựng ứng dụng công nghệ như web app hay mobile app, một trong những bước không thể thiếu để gia tăng bảo mật cho sản phẩm là kiểm thử xâm nhập – penetration testing, hay còn gọi là pentest. Vậy, pentest thực chất là gì, vai trò cụ thể của module này với ATTT trong doanh nghiệp ra sao? Cùng tìm hiểu trong bài viết dưới đây.
Mục lục
Pentest là gì?
Penetration testing
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 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.
Các hình thức pentest
- 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.
- 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.
- 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 chuyên 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ẻ.
Ngoà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.
Lịch sử của Penetration Testing
Giữa những năm 1960s, chứng kiến sự gia tăng trong khả năng trao đổi dữ liệu qua mạng máy tính, các chuyên gia đã cảnh báo về nguy cơ chắc chắn sẽ có sự tấn công xâm nhập vào các mạng của chính phủ và doanh nghiệp và giành quyền truy cập vào dữ liệu được trao đổi. Tại Hội nghị Máy tính Chung Thường niên năm 1967 quy tụ hơn 15.000 chuyên gia bảo mật máy tính, các nhà phân tích đã thảo luận và đặt ra thuật ngữ “penetration” (xâm nhập). Các chuyên gia xác định đó là một trong những hiểm họa đối với trao đổi dữ liệu qua mạng máy tính ngày nay.
Cuối năm 1967, tập đoàn RAND đã hợp tác với Cơ quan Dự án Nghiên cứu Tiên tiến (dARPA) tại Hoa Kỳ để tạo ra một báo cáo chuyên đề, được gọi là Willis Report (đặt tên theo người đứng đầu dự án). Báo cáo đã thảo luận về các vấn đề an ninh của mạng internet và đề xuất chính sách, đặt nền móng cho các biện pháp an ninh ngày nay. Dựa trên báo cáo này, chính phủ Hoa Kỳ đã hợp tác với doanh nghiệp và thành lập các nhóm với sứ mệnh “dò tìm các lỗ hổng bảo mật trong hệ thống mạng máy tính để có biện pháp bảo vệ các hệ thống đó khỏi sự xâm nhập và khai thác trái phép”.
Những nhóm pentest đầu tiên trên thế giới có tên Tiger Teams (đặt tên theo lính đặc nhiệm Hoa Kỳ) được hình thành vào cuối những năm 1960s với nhiệm vụ tấn công vào các mạng máy tính để đánh giá khả năng chống chịu của các mạng đó trước các cuộc tấn công thù địch. Kết quả thu được đã khiến các nhà lãnh đạo không khỏi bất ngờ:
Hầu hết các hệ thống được kiểm tra khi đó đều “bị đánh gục một cách dễ dàng và nhanh chóng”.
Chiến dịch thử nghiệm thâm nhập này của RAND Corporation và chính phủ đã chứng minh hai điều:
– thứ nhất, các hệ thống có thể bị xâm nhập;
– thứ hai, sử dụng các kỹ thuật kiểm tra thâm nhập (penetration testing) để xác định các lỗ hổng trong hệ thống, mạng, phần cứng và phần mềm là một phương pháp hữu ích để đánh giá và cải thiện tính bảo mật cho cả hệ thống.
Sau này, học giả Deborah Russell và G. T. Gangemi Sr. nhận xét rằng, những năm 1960s đã “đánh dấu sự khởi đầu thực sự của thời đại bảo mật máy tính”.
The 1960s marked the true beginning of the age of computer security
Deborah Russell & G.T. Gangemi Sr.
Tại sao cần Pentest?
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 toà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ố.
Bốn lý do khiến Pentest là không thể thiếu với doanh nghiệp hiện đại
Phát triển web app, mobile app gia tăng
Đầu tiên, các mô hình kinh doanh trong nền kinh tế số đòi hỏi doanh nghiệp phải sử dụng website, ứng dụng mobile để tiếp cận – kết nối – giao tiếp – chăm sóc khách hàng. Điều này vừa là lợi thế, vừa là yêu cầu bắt buộc đối với một số tổ chức. Bởi vì hành vi của người dùng đã thay đổi, họ thích sự tiện lợi, thích làm mọi thứ “online”. Chính vì vậy doanh nghiệp tuy hạn chế được rủi ro khi bán hàng offline như hàng tồn, chi phí mặt bằng; nhưng đồng thời cũng phải gánh thêm các rủi ro mạng: bị hack website, bị hack mobile app, đánh cắp thông tin khách hàng, dữ liệu quan trọng, bị gián đoạn hoạt động, bị nhiễm virus – mã độc, v.v…
Xu hướng chuyển đổi số
Thứ hai, doanh nghiệp hiện đại bị buộc phải chạy theo xu hướng “số hóa” hay “chuyển đổi số”. Việc ứng dụng công nghệ mới vào vận hành doanh nghiệp giúp cắt giảm chi phí nhân lực, vận hành, nhưng cũng làm gia tăng các bề mặt tấn công dành cho tin tặc. Điển hình là ERP dành cho quản trị, CRM giúp lưu trữ thông tin và chăm sóc khách hàng, các thiết bị IoT trong vận hành, v.v. Tất cả những sản phẩm kỹ thuật số này, nếu không được bảo mật đúng cách thì đều có thể trở thành nạn nhân của tội phạm mạng.
Phần mềm SaaS
Thứ ba, xu hướng sử dụng các phần mềm dịch vụ trả tiền theo nhu cầu “as-a-service” gia tăng so với phần mềm mua bản quyền trọn đời (on-premise). Điều này mang lại sự tiện lợi cho người dùng cuối, nhưng cũng làm gia tăng các rủi ro bảo mật cho nhà cung cấp. Việc phân phối các ứng dụng, phần mềm, hạ tầng, nền tảng dưới dạng dịch vụ (SaaS, IaaS, PaaS, FaaS) đòi hỏi kết nối internet liên tục, đồng nghĩa với rủi ro bị tấn công gián đoạn tăng cao, gây ảnh hưởng tới trải nghiệm của người dùng.
Pentest là hình thức phòng ngừa chủ động hiệu quả
Cuối cùng, phương pháp bảo mật bằng hình thức tấn công mô phỏng mang lại cho doanh nghiệp những lợi ích mà các hệ thống phòng thủ tự động không thể có được, dù cho chúng có tiên tiến tới đâu. Bởi các pentester tấn công với tư duy như một tin tặc trong thế giới thực: rất “con người” và đầy tính sáng tạo.
Lợi ích của Pentest
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;
- Các nhà lãnh đạo có cài nhìn toà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ư.
Thời điểm thích hợp để triển khai pentest?
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; hoặc
- điều chỉnh chính sách bảo mật cho người dùng cuối.
Doanh nghiệp nào cần pentest?
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:
- Quy mô công ty. Những công ty xuất hiện online thường xuyên 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ỳ.
Điểm yếu của Pentest
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 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.
Công cụ kiểm thử xâm nhập
Pentester thường sử dụng công cụ để phát hiện những lỗ hổng cơ bản. Những công cụ này giúp quét mã nguồn của ứng dụng để tìm ra những đoạn code độc hại có thể mở ra một cuộc tấn công. Bên cạnh đó, pentest tool cũng có thể xem xét công nghệ mã hóa dữ liệu và có thể xác định các giá trị hard-code (ví dụ như username và passwords) để xác minh các lỗ hổng tồn tại trong hệ thống.
Một công cụ pentest tốt phải đáp ứng được:
- Dễ triển khai, thiết lập, sử dụng;
- Quét hệ thống dễ dàng;
- Phân loại lỗ hổng dựa vào mức độ nghiêm trọng và cấp bách;
- Có khả năng tự động quá trình xác minh lỗ hổng;
- Xác minh lại những khai thác trước đó; và
- Xuất báo cáo lỗ hổng và logs chi tiết.
Có rất nhiều công cụ pentest miễn phí và open source (mã nguồn mở) phổ biến. Ví dụ như: Metasploit Project, Nmap, Wireshark, John the Ripper…Pentester sử dụng các công cụ tương tự như hacker mũ đen. Điều đó giúp họ hiểu rõ hơn cách các công cụ này giúp tin tặc xâm nhập vào tổ chức.
Những pentester chuyên nghiệp có khả năng sử dụng công cụ pentest tối ưu để tiết kiệm công sức đồng thời đạt hiệu quả cao nhất.
Quy trình pentest
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.
- 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.
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.