+7

Penetration Testing và các kĩ năng cần thiết để trở thành một PenTester

Kiểm thử xâm nhập hay PenTest (Penetration Testing) hiện đang là một mảng khá hot bên an toàn thông tin nói riêng và công nghệ thông tin nói chung. Bản thân là một web developer nửa mùa nhưng mình thấy các kiến thức về PenTest cũng khá hay và cần thiết, nhất là đối với đội code back-end nên trong bài viết này mình sẽ tổng hợp các kiến thức cơ bản nhất về PenTest cũng như các kĩ năng cần có để trở thành một PenTester chuyên nghiệp.

Giới thiệu về Penetration Testing

Penenatration Testing là công việc đánh giá độ an toàn của hệ thống bằng cách tự tấn công vào hệ thống đó nhằm tìm ra các vấn đề an ninh tiềm tàng hoặc dò tìm các dấu vết khi hệ thống bị xâm nhập. Một pentester sẽ được trả tiền để thực hiện hack các hệ thống một cách hợp pháp (miễn là việc hack đó tuân thủ theo hợp đồng mà công ty thuê pentester đó đề ra). Nếu bạn thích những cảnh hack cool ngầu như phim, nghịch ngợm táy máy các hệ thống phần mềm tuy nhiên lại sợ bị lực lượng C50 sờ gáy thì có thể cân nhắc con đường trở thành pentester. Khi chuyên gia bảo mật thực hiện một ca kiểm thử xâm nhập, mục tiêu cuối cùng của họ là đột nhập vào hệ thống và "nhảy" từ hệ thống này sang hệ thống khác, cho đến khi chiếm được tên miền hoặc hệ thống. Kết quả của ca kiểm thử xâm nhập sẽ chỉ ra cho người dùng/khách hàng những gì một kẻ tấn công có thể thực hiện được với tình trạng bảo mật mạng hiện tại.

PenTest sẽ gồm những mảng lớn sau:

  • Đánh giá cơ sở hạ tầng mạng: liên quan tới cấu trúc mạng đã cài đặt của hệ thống, quản trị, ghi log, các chính sách của hệ thống tường lửa, VPN, Router, switch,...
  • Đánh giá hệ thống máy chủ: liên quan tới việc cập nhật cấu hình các dịch vụ, vá lỗi, chính sách tài khoản và mật khẩu, chính sách ghi nhật ký, rà soát cấp quyền, khả năng dự phòng, cân bằng tải, cơ sở dữ liệu phân tán, thường là máy chủ Windows và Linux.
  • Đánh giá ứng dụng web: đánh giá các lỗ hổng như lỗi tràn bộ đệm, tấn công chèn câu lệnh SQL, XSS,... đánh giá kiểm tra mã nguồn web nhằm xác định các vấn đề về xác thực, cấp quyền, xác minh dữ liệu, quản lý phiên, mã hóa

Vậy để trở thành một pentester chuyên nghiệp cần những kĩ năng gì? Kiến thức về mạng? Kĩ năng lập trình? Một web developer nên biết gì về pentest để ứng dụng của mình bảo mật tốt hơn? Trong phần tiếp theo mình sẽ tổng hợp một số kĩ năng cần thiết cùng các nguồn tài liệu hữu ích của từng mảng trong pentest.

Bảo mật ứng dụng web

Trong thời đại người người nhà nhà dùng web app hiện nay thì đương nhiên pentester cũng phải trang bị cho mình các kiến thức nhất định về bảo mật ứng dụng web. Một pentester ngoài việc hiểu được các nguyên lí hoạt động cơ bản của ứng dụng web, các phương thức, thư viện được sử dụng trong ứng dụng, các lỗ hổng phổ biến như XSS, SQL Injection, CSRF,... (các cái này thì đội code bên backend cũng phải biết rồi nhé) thì còn phải biết thêm về XXE, XML/JSON Injection, LDAP Injection, Blind Injection, Code Injection & RCE, Subdomain Takeover, Open Redirects, SSRF, LFI, RFI và vô vàn các lỗ hổng khác sinh ra hàng ngày hàng giờ. OWASP là một trang web nổi tiếng để bạn có thể liên tục cập nhật về các lỗ hổng mới ra đời trong thế giới Internet. Các kiến thức về OAuth, Single Sign On và các công cụ như Jenkins hay ElasticSearch cũng là bắt buộc. Chưa hết đâu, bạn còn cần nắm rõ các ngôn ngữ lập trình backend như Java, Javascript, Scala, PHP, Ruby, Python,.... và công nghệ Ajax vì dù là coder hay pentest thì bạn cũng sẽ không thể tránh được việc review code. Nói tóm lại web developer cần biết 1 thì pentester mảng web cũng cần phải biết 1.5. Một penetration tester chuyên về mảng web sẽ thường xuyên phải thực hiện những cuộc WAPT (Web Application Penetration Test - Kiểm thử xâm nhập ứng dụng) dựa trên những kiến thức mà mình vừa liệt kê.

Để tìm hiểu về bảo mật ứng dụng web, bạn có thể bắt đầu với OWASP trước tiên, nếu bạn không có hứng thú trở thành pentester mà chỉ muốn mãi làm web developer thì cũng nên biết OWASP là gì 😃 Dưới đây là một số tài liệu mọi người có thể tham khảo

An toàn mạng

Mục đích của việc thực hiện pentest trên hệ thống mạng là xác định và khai thác các lỗ hổng trong một mạng và các thiết bị kết nối với mạng đó. Một network pentest có thể mô phỏng lại cuộc tấn công mà hacker chiếm quyền kiểm soát mạng nội bộ trong công ty. Trong quá trình hack, pentester sẽ phải đánh giá các vấn đề như tài khoản người dùng và chứng chỉ có dễ dàng bị chiếm quyền không, thông tin khách hàng có dễ dàng truy cập không, các thành viên trong công ty được đào tạo về an toàn bảo mật thông tin như thế nào, vân vân và mây mây. Để có thể thực hiện một cuộc network pentest chúng ta sẽ phải hiểu cách hoạt động của mạng, các giao thức như TCP/IP , LDAP, các kiến thức về một số công cụ như ActiveDirectory, Firewall, IDS/IPS, các trình diệt virus, kiến trúc của hệ điều hành Windows và Linux. Network Pentest khá phức tạp nhưng một khi bạn đã nắm chắc các kiến thức cơ bản về mạng máy tính rồi thì các vấn đề còn lại chỉ phụ thuộc vào kinh nghiệm thôi. Để tìm hiểu về Network Pentest mọi người có thể tham khảo

Code review

Kĩ năng này thì không chỉ riêng coder mà một pentester cũng cần phải thông thạo. Trong quá trình review code bạn có thể phát hiện ra những lỗi logic, các vấn đề xác thực, lỗi mã hóa hay thậm chí là những lỗ hổng injection. Tuy nhiên bất lợi lớn nhất của code review là nó rất tốn thời gian. Để khắc phục vấn đề này thì một pentester chuyên nghiệp thường chỉ tập trung vào những lời gọi hàm nguy hiểm như strcpy() của C có thể bị khai thác lỗ hổng tràn bộ đệm buffer overflow này, hay exec() của PHP có thể bị khai thác lỗi thực thi code từ xa remote code execution này. Để review code tốt thì tất nhiên bạn phải hiểu rõ các ngôn ngữ lập trình rồi. Mỗi ngôn ngữ lại có các lỗ hổng dễ bị khai thác khác nhau. Với các ngôn ngữ bậc thấp như C hay C++ sẽ dễ bị khai thác buffer overflow hơn, còn Python hay Ruby thì cần cẩn thận với các lỗ hổng liên quan tới deserialization. Vậy làm thế nào để review code tốt? Tham khảo các tài liệu dưới đây nhé

Dịch ngược

Cái này thì nghe hơi lạ với web developer. Đây là kĩ thuật phân tích cấu trúc, chức năng, thậm chí là mã nguồn nhị phân của một ứng dụng để hiểu cách hoạt động của nó,từ đó tìm kiếm các lỗ hổng có thể bị khai thác. Kĩ thuật này thường được sử dụng để khai thác các lỗ hổng zero-days (các lỗ hổng tồn tại mà người viết phần mềm không biết). Thông qua dịch ngược, tester có thể biết ứng dụng thực thi một số phương thức như thế nào, hay thậm chí là cách quản lý bộ nhớ của nó bằng cách sử dụng các công cụ hỗ trợ dịch ngược từ mã máy sang mã assembly như IDA Pro, Binary Ninja, Radare2. Một pentester với kĩ năng dịch ngược thượng thừa có thể tìm kiếm các lỗ hổng zero-days, hiểu cách thực thi các hàm của một ứng dụng kể cả khi không biết source code của ứng dụng như thế nào, đặc biệt là trong các thiết bị phần cứng được lập trình nhúng, kiểm thử các bios, các phần ảo hóa virtualization, container hay secure boot. Để làm được những thứ trên bạn phải biết về kiến trúc của x86 và x64 ASM, cách máy tính/thiết bị cấp phát bộ nhớ, nguyên lí hoạt động của Stack/Heap, kiến thức về hệ điều hành. Đây là một kĩ năng khó và cần rất nhiều thời gian để có thể thuần thục được so với việc thực hiện WAPT thông thường, nhưng nếu bạn làm được thì xin chúc mừng, bạn đã trở thành một pentester chuyên nghiệp. Dưới đây là một số tài liệu liên quan tới dịch ngược

Bảo mật các thiết bị lập trình nhúng

Theo sau dịch ngược sẽ là kĩ năng bảo mật các thiết bị được lập trình nhúng. Trong thời đại mà người người nhà nhà cùng rộ lên với IoT thì vấn đề bảo mật các thiết bị IoT cũng được chú ý khá nhiều. Trong IoT, mọi thiết bị đều được kết nối với nhau qua mạng, chỉ cần một thiết bị bị hack là kéo theo rất nhiều hệ lụy. Do đó pentester cũng cần có những kiến thức nhất định về lập trình nhúng. Bạn sẽ cần phải biết về SPI, hiểu được các sơ đồ mạch, FPGA, UART,... biết cách sử dụng vạn năng kế, tua vít, các thành phần điện tử như tụ điện, bán dẫn... Và tất nhiên là kiến thức về kiến trúc x86/64 như dịch ngược rồi.

PenTest là một mảng khá rộng và đòi hỏi nhiều kiến thức tổng quát nên mình xin phép tạm dừng bài viết lần này ở đây. Hẹn gặp mọi người ở phần sau với các kĩ năng khác của Pentest là bảo mật lớp vật lý, bảo mật các dịch vụ web, bảo mật ứng dụng điện thoại và các trang tập luyện kĩ năng pentest, CTF.

Tham khảo


All rights reserved

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí