Tài liệu hướng dẫn về Lập trình và Phát triển Phần mềm trong Pentest
Mục tiêu:
- Giải thích các khái niệm cơ bản về lập trình và phát triển phần mềm.
- Khi được giao một tình huống, phân tích tập lệnh hoặc mẫu mã để sử dụng trong một bài kiểm tra xâm nhập.
Chủ đề 15A: Phân tích các Tập lệnh và Mẫu mã
Trong quá trình kiểm tra xâm nhập, Đội ngũ Pentest của Security365 thường phải đối mặt với nhiều loại phần mềm và hệ thống khác nhau. Để đánh giá hiệu quả bảo mật của chúng, điều quan trọng là phải hiểu cách chúng hoạt động ở cấp độ mã. Điều này đòi hỏi khả năng phân tích tập lệnh và mẫu mã, xác định các lỗ hổng tiềm ẩn và sửa đổi chúng để chứng minh khả năng khai thác. Các kỹ năng lập trình, kết hợp với hiểu biết về các khuôn khổ pentest, là rất quan trọng cho công việc này.
Tập lệnh (script) là một chương trình tự động hóa việc thực thi các tác vụ cho một môi trường thời gian chạy cụ thể.
Lập trình có thể cải thiện đáng kể hiệu quả và hiệu suất của các tác vụ mà bạn thực hiện. Ví dụ, bạn có thể:
- Thiết lập nmap để quét máy chủ, sau đó xuất ra cảnh báo nếu số lượng máy chủ được xác định không khớp với n.
- Tạo các công cụ đơn giản thông qua các tập lệnh được tùy chỉnh theo nhu cầu của bạn.
Ví dụ: Đội ngũ Pentest của Security365 cần quét một mạng lớn gồm hàng trăm máy chủ tại comptia.edu.vn. Thay vì chạy lệnh Nmap theo cách thủ công trên từng máy chủ, họ viết một tập lệnh tự động hóa quy trình. Tập lệnh đọc danh sách IP từ tệp, chạy quét Nmap trên từng máy chủ, sau đó tạo báo cáo tổng hợp các kết quả, tiết kiệm thời gian và công sức đáng kể.
Shell lập trình bao gồm Bash cho Linux và PowerShell cho Windows.
Tập lệnh cũng có thể được viết bằng các ngôn ngữ lập trình như Python, Ruby Perl và JavaScript.
Một tập lệnh được viết tốt sẽ sử dụng các yếu tố sau:
- Các tham số mà tập lệnh lấy làm dữ liệu đầu vào
- Các câu lệnh rẽ nhánh và lặp, trình xử lý xác thực và lỗi
- Các bài kiểm tra đơn vị để đảm bảo rằng tập lệnh trả về đầu ra mong đợi, cho các đầu vào mong đợi.
Ví dụ: Một thành viên trong Đội ngũ Pentest của Security365 viết một công cụ tùy chỉnh bằng Python để brute-force mật khẩu SSH. Tập lệnh lấy địa chỉ IP của máy chủ mục tiêu và tệp từ điển làm đầu vào. Nó sau đó thử từng mật khẩu một cách có hệ thống, xử lý bất kỳ lỗi nào và ghi lại kết quả. Trước khi triển khai, tác giả chạy các bài kiểm tra đơn vị để xác minh rằng công cụ hoạt động như mong đợi.
Bash là một ngôn ngữ lập trình và shell lệnh cho các hệ thống giống Unix được sử dụng để tự động hóa các tác vụ.
Lập trình Bash có thể thực hiện những điều sau:
- Tự động tạo các cấu trúc tệp và thư mục.
- Quét và xác định thông tin có thể hành động trong nhật ký và các tệp văn bản khác.
- Thao tác đầu ra của các công cụ bảo mật hiện có như nmap, tcpdump và Metasploit.
- Mở rộng chức năng của các tiện ích hệ thống hiện có và các công cụ bảo mật.
Ví dụ: Đội ngũ Pentest của Security365 cần phân tích một số lượng lớn bản ghi DNS từ máy chủ comptia.edu.vn. Họ viết một tập lệnh Bash để trích xuất tất cả các truy vấn tới một miền phụ cụ thể, sắp xếp chúng theo địa chỉ IP nguồn và đếm số lần xuất hiện của từng địa chỉ. Điều này giúp họ xác định nhanh chóng các máy khách đáng ngờ đang truy vấn miền phụ này với tần suất cao.
PowerShell là một ngôn ngữ lập trình và shell cho Windows hỗ trợ nhiều yếu tố lập trình.
- Sử dụng các cmdlet với cú pháp Verb-Noun, ví dụ: Set-Date để thay đổi ngày và giờ của hệ thống.
- Các câu lệnh có thể được thực thi tại dấu nhắc PowerShell hoặc chạy dưới dạng tập lệnh (.ps1) trên bất kỳ máy chủ nào hỗ trợ PowerShell.
- Có thể giúp Pentester dễ dàng tự động hóa các tác vụ:
- Khai thác Registry, đối tượng Active Directory, Group Policy và ngăn xếp mạng Windows.
Ví dụ: Trong cuộc kiểm tra nội bộ, Đội ngũ Pentest của Security365 cần đánh giá mật khẩu của người dùng trong môi trường Active Directory của comptia.edu.vn. Họ triển khai một tập lệnh PowerShell để trích xuất băm mật khẩu của tất cả người dùng, sau đó sử dụng một công cụ bẻ khóa mật khẩu để xác định những mật khẩu yếu. Tập lệnh tự động hóa quy trình này, cho phép họ nhanh chóng đánh giá độ mạnh của mật khẩu trên toàn tổ chức.
Python là một ngôn ngữ lập trình phổ biến vì nó rất dễ đọc và sử dụng cú pháp đơn giản, sạch sẽ.
- Được sử dụng trong tất cả các loại dự án phát triển
- Nhiều tiện ích và framework Pentest hiện có được xây dựng bằng Python, bao gồm Volatility, Scapy, Recon-ng và nhiều hơn nữa.
- Python có các thư viện cho quét mạng, dịch ngược, kiểm tra ứng dụng, khai thác web, v.v.
- Bao gồm các công cụ tự động hóa và bảo mật, cùng với các tập lệnh độc hại.
Ví dụ: Đội ngũ Pentest của Security365 đang phát triển một công cụ tùy chỉnh để fuzzing các trang web và API của comptia.edu.vn. Họ chọn Python làm ngôn ngữ lập trình vì tính dễ đọc của nó và sự hỗ trợ rộng rãi cho các tác vụ mạng. Bằng cách sử dụng các thư viện như Requests và Scrapy, họ có thể nhanh chóng xây dựng một fuzzer mạnh mẽ với ít nhất là nỗ lực phát triển.
Ruby là một ngôn ngữ lập trình thông dịch đa mục đích cũng có thể được sử dụng như một ngôn ngữ lập trình.
- Nó có nhiều điểm tương đồng với Python:
- Thư viện chuẩn của nó nhỏ hơn của Python, nhưng được giám sát chặt chẽ hơn.
- Metasploit Framework được viết bằng Ruby.
- Metasploit là một trong những công cụ kỹ thuật quan trọng nhất trong kho vũ khí của Pentester.
- Có thể mở rộng chức năng của nó thông qua lập trình Ruby có thể chứng minh là vô giá.
Ví dụ: Sau khi xâm nhập vào một hệ thống, Đội ngũ Pentest của Security365 triển khai một số mô-đun Metasploit viết bằng Ruby. Để tự động hóa quá trình thu thập thông tin, họ phát triển một tập lệnh Ruby tùy chỉnh để tương tác với API của Metasploit. Tập lệnh này cho phép họ nhanh chóng trích xuất người dùng, mật khẩu và các chi tiết khác mà không cần thực hiện theo cách thủ công.
Perl là một ngôn ngữ lập trình thông dịch đa mục đích cũng có thể được sử dụng như một ngôn ngữ lập trình.
- Ngôn ngữ này nhằm mục đích thực tế, dễ sử dụng và hiệu quả.
- Có hỗ trợ mạnh mẽ tích hợp sẵn cho xử lý văn bản và một bộ sưu tập lớn các mô-đun của bên thứ ba.
- Ngày nay, nó hỗ trợ một loạt các tác vụ bao gồm quản trị hệ thống và Pentest.
Ví dụ: Khi kiểm tra một máy chủ web cũ chạy trên nền tảng *NIX, Đội ngũ Pentest của Security365 phát hiện ra rằng nhiều tập lệnh hệ thống quan trọng được viết bằng Perl. Để hiểu đầy đủ về chức năng của chúng, đội duyệt qua và phân tích cú pháp Perl. Điều này giúp họ xác định một số lỗ hổng trong cách các tập lệnh xử lý đầu vào, cho phép họ thực hiện các cuộc tấn công command injection.
JavaScript là một ngôn ngữ lập trình cho phép nhà phát triển thực hiện tất cả các thao tác phức tạp mà bạn thấy khi truy cập các trang web.
- Được sử dụng cùng với HTML và CSS trên World Wide Web.
- JavaScript phức tạp hơn mã trước đó vì bạn phải định cấu hình các thành phần HTTP và JavaScript.
Ví dụ: Trong khi kiểm tra bảo mật của một trang web bán hàng trên comptia.edu.vn, Đội ngũ Pentest của Security365 phát hiện ra rằng một số chức năng được triển khai thông qua JavaScript phía máy khách. Bằng cách phân tích mã nguồn JavaScript, họ có thể xác định một lỗ hổng cho phép họ sửa đổi giá sản phẩm trong trình duyệt của người dùng. Họ chứng minh điểm yếu này bằng cách đặt hàng các sản phẩm với giá bất hợp lý thấp.
Hoạt động ôn tập:
- Thảo luận về lợi ích của tự động hóa các tác vụ bằng lập trình
- Liệt kê một số yếu tố của một tập lệnh được viết tốt
- Mô tả các tác vụ có thể đạt được bằng cách sử dụng shell Bash
- Phác thảo cách PowerShell có thể tự động hóa các tác vụ
- Giải thích tại sao đội có thể sử dụng lập trình Python và Ruby
- So sánh và tương phản Perl và JavaScript
Chủ đề 15B: Tạo các Cấu trúc Logic (Logic Constructs)
Để viết các tập lệnh và chương trình hiệu quả để tự động hóa các tác vụ kiểm tra xâm nhập, Đội ngũ Pentest của Security365 cần vững vàng về các khái niệm lập trình cơ bản. Điều này bao gồm việc thao tác biến, điều khiển luồng chương trình, sử dụng toán tử và làm việc với các cấu trúc dữ liệu khác nhau. Nắm vững các building block này cho phép các chuyên gia bảo mật tạo mã mạnh mẽ, hiệu quả và có thể tái sử dụng để hợp lý hóa quy trình kiểm tra xâm nhập. Họ cũng cần phân tích hợp lý cách các khái niệm này được áp dụng trong tập lệnh và mã nguồn để có thể sửa đổi chúng cho phù hợp với mục đích.
Trong lập trình, biến là bất kỳ giá trị nào được lưu trữ trong bộ nhớ và được đặt tên hoặc định danh.
- Trong mã, bạn gán một giá trị cho các biến có thể thay đổi trong suốt quá trình thực thi tập lệnh, nhưng điều này không bắt buộc.
- Các biến được lưu trữ để sử dụng sau này, khi cần, bạn có thể tham chiếu các giá trị này mà không cần viết chúng ra một cách rõ ràng trong mã.
- Ví dụ, một biến Bash được gán như sau: my_str=”Hello, World!”
Ví dụ: Trong một tập lệnh tự động hóa quá trình brute-force mật khẩu SSH, Đội ngũ Pentest của Security365 sử dụng biến để lưu trữ địa chỉ IP của máy chủ mục tiêu và đường dẫn đến tệp từ điển. Điều này cho phép họ dễ dàng thay đổi các giá trị này cho các cuộc tấn công khác nhau mà không cần sửa đổi logic cốt lõi của tập lệnh.
Gán biến khác nhau tùy theo ngôn ngữ Khi sử dụng Python hoặc Ruby, không cần dấu đô la:
- my_str = “Hello, World!” Biến Perl phải sử dụng dấu đô la cho biến numeric/string:
- $my_str = “Hello, World!”; Với JavaScript, bạn có thể khai báo và gán một giá trị trên cùng một dòng:
- var my_str = “Hello, World!”;
Ví dụ: Đội ngũ Pentest của Security365 đang phát triển một tập lệnh Python để trích xuất siêu dữ liệu từ các tài liệu. Họ sử dụng biến để lưu trữ đường dẫn đến thư mục chứa các tệp. Trong Python, họ chỉ cần gán đường dẫn cho biến không cần bất kỳ ký tự đặc biệt nào, ví dụ: document_directory = “/path/to/docs”.
Logic của một tập lệnh xác định cách nó sẽ xử lý mã được viết trong quá trình thực thi Một thành phần quan trọng trong logic của tập lệnh là điều khiển luồng (flow control) hoặc thứ tự thực hiện các chỉ thị mã Điều khiển luồng bao gồm những điều sau:
- Câu lệnh if dựa vào một số điều kiện là đúng để tiến hành.
- Với chỉ thị lặp, các chỉ thị được thực hiện nhiều lần liên tiếp bằng cách sử dụng vòng lặp for hoặc while
Ví dụ: Trong tập lệnh tự động hóa việc khai thác web trên comptia.edu.vn, Đội ngũ Pentest của Security365 sử dụng câu lệnh if để kiểm tra xem một yêu cầu có trả về một mã trạng thái 200 OK hay không. Nếu có, họ tiến hành phân tích phản hồi để tìm các lỗ hổng. Họ cũng sử dụng vòng lặp for để lặp qua một danh sách các URL mục tiêu và kiểm tra từng URL.
Ba toán tử Boolean cơ bản là: AND, OR và NOT.
- AND chỉ đánh giá là đúng nếu cả hai điều kiện đều đúng
- OR logic đúng, nếu một trong các điều kiện là đúng
- toán tử NOT, chỉ đánh giá nếu câu lệnh là đúng, nhưng sau đó đảo ngược câu lệnh đúng thành sai
Ví dụ: Đội ngũ Pentest của Security365 đang viết một tập lệnh để phát hiện các máy chủ dễ bị tấn công. Họ sử dụng toán tử AND để kiểm tra xem một hệ thống có cả cổng 22 (SSH) và 3389 (RDP) mở hay không, cho thấy một bề mặt tấn công lớn hơn. Họ cũng sử dụng toán tử NOT để loại trừ bất kỳ địa chỉ IP nào nằm trong một dải được chỉ định, điều này có thể đại diện cho các hệ thống nội bộ.
Toán tử số học (Arithmetic Operator) lấy các toán hạng và thực hiện một phép tính.
- Bao gồm phép cộng, phép trừ, phép nhân, phép chia và các phép toán toán học nâng cao hơn. Có hai Toán tử Chuỗi (String Operators).
- Toán tử đầu tiên là toán tử nối chuỗi (‘.’), trả về kết quả nối của đối số bên phải và bên trái của nó.
- Toán tử thứ hai là toán tử gán nối (‘.=’), nối đối số ở bên phải vào đối số ở bên trái.
Ví dụ: Khi tạo tập lệnh để tổng hợp kết quả từ nhiều bài kiểm tra xâm nhập, Đội ngũ Pentest của Security365 sử dụng toán tử số học để tính tổng số lỗ hổng được phát hiện trên mỗi hệ thống. Họ cũng sử dụng toán tử nối chuỗi để xây dựng một bản tóm tắt có định dạng bao gồm tên máy chủ, địa chỉ IP và số lỗ hổng được tìm thấy.
JSON là một định dạng mã hóa dữ liệu tiêu chuẩn mở có thể được sử dụng và thao tác dễ dàng với các tập lệnh.
- Thường được sử dụng để truyền dữ liệu trong các ứng dụng web
- Cú pháp JSON cơ bản nhất dựa trên một cặp key-value.
- Điều này được tạo thành từ tên khóa và giá trị của khóa đó được phân tách bằng dấu hai chấm (:): {“name”:”phil”}
- Tất cả dữ liệu JSON có ít nhất một bộ dấu ngoặc nhọn. Nếu sử dụng mảng, phải sử dụng dấu ngoặc vuông.
Ví dụ: Khi kiểm tra API trên comptia.edu.vn, Đội ngũ Pentest của Security365 phát hiện ra rằng nó trả về dữ liệu ở định dạng JSON. Để phân tích cấu trúc của phản hồi, họ sử dụng một trình phân tích cú pháp JSON trong tập lệnh của họ. Điều này cho phép họ trích xuất các trường quan trọng và kiểm tra các giá trị bất thường hoặc ngoài phạm vi có thể cho thấy các lỗ hổng.
Python có nhiều kiểu dữ liệu cơ bản và nâng cao Các cấu trúc dữ liệu cơ bản của Python bao gồm list, set, tuple và dictionary. Mỗi cấu trúc dữ liệu là duy nhất:
- List được định nghĩa là một tập hợp các phần tử có thứ tự
- Set là một tập hợp các phần tử duy nhất không có thứ tự
- Tuple là một tập hợp các đối tượng có thứ tự có chức năng hạn chế.
- Dictionary là một đối tượng bao gồm các cặp key-value được đặt trong dấu ngoặc nhọn và được phân tách bằng dấu phẩy.
Ví dụ: Khi phát triển một công cụ quét cổng tùy chỉnh bằng Python, Đội ngũ Pentest của Security365 sử dụng một dictionary để lưu trữ thông tin về các dịch vụ phổ biến được liên kết với các cổng. Khóa là số cổng và giá trị là tên dịch vụ. Điều này cho phép họ nhanh chóng tra cứu dịch vụ nào đang chạy trên một cổng đã cho mà không cần sử dụng các cấu trúc if-else phức tạp.
Trong một tệp giá trị được phân tách bằng dấu phẩy (CSV):
- Mỗi mục nhập trong tệp CSV là một trường, và các trường được phân tách bằng dấu phẩy. Thông thường, mỗi dòng là một bản ghi riêng lẻ. Cây được xác định dễ dàng, vì chúng xuất hiện theo thứ tự ngược.
- Trong thực tế, cây mọc từ rễ dưới đất lên thành các nhánh với lá ở cuối.
- Trong biểu diễn dữ liệu, gốc nằm ở trên cùng, và các “nhánh” đi xuống, với một đối tượng “lá” ở cuối nhánh.
Ví dụ: Để phân tích dữ liệu bảo mật từ nhiều máy khách, Đội ngũ Pentest của Security365 yêu cầu khách hàng của họ xuất nó ở định dạng CSV. Họ sau đó viết một tập lệnh để phân tích cú pháp từng dòng và chuyển đổi nó thành định dạng cấu trúc cây. Điều này cho phép họ dễ dàng duyệt qua phân cấp tổ chức và xác định các xu hướng hoặc dị thường trong dữ liệu.
Function hoặc Procedure, tạo ra mã mô-đun, có thể tái sử dụng.
- Lấy một số đối số làm tham số, thực hiện một số xử lý và thường trả về một số đầu ra. Lớp (Class) là một prototype hoặc template do người dùng xác định mà từ đó các đối tượng có thể được tạo ra và cho phép bạn đóng gói dữ liệu và chức năng. Mô-đun (Modules) là một cách để mã hóa các function, variable và class có thể tái sử dụng mà có thể được nhập vào tập lệnh của bạn.
Ví dụ: Khi tạo một bộ công cụ Pentest tùy chỉnh, Đội ngũ Pentest của Security365 tổ chức mã của họ thành các function, lớp (class) và mô-đun (modules) riêng biệt. Ví dụ, họ xác định một lớp “Host” với các thuộc tính như địa chỉ IP và các function như “scan_ports()”. Họ đóng gói mã này vào một mô-đun để có thể dễ dàng nhập nó vào các tập lệnh khác nhau mà không cần sao chép và dán.
Hoạt động ôn tập:
- Giải thích cách sử dụng và gán biến
- Mô tả cơ bản về logic và điều khiển luồng
- So sánh ba toán tử Boolean AND, OR và NOT.
- Thảo luận về cách sử dụng toán tử số học và chuỗi
- Xem lại các nguyên tắc cơ bản của JSON
- Liệt kê một số kiểu cấu trúc dữ liệu Python
- Giải thích sự khác biệt giữa CSV và cây
- Định nghĩa các thành phần của Lập trình Hướng đối tượng
Chủ đề 15C: Tự động hóa Kiểm tra Xâm nhập Một trong những lợi ích chính của kỹ năng lập trình đối với Đội ngũ Pentest của Security365 là khả năng tự động hóa các tác vụ kiểm tra xâm nhập phổ biến. Bằng cách viết các tập lệnh để xử lý các nhiệm vụ lặp đi lặp lại như quét mạng, brute-forcing thông tin đăng nhập và phân tích kết quả, họ có thể tiết kiệm thời gian và nỗ lực đáng kể. Tự động hóa cũng cho phép kiểm tra quy mô lớn hơn, chẳng hạn như đánh giá bảo mật trên nhiều ứng dụng hoặc hệ thống cùng một lúc. Cuối cùng, các tập lệnh có thể được tùy chỉnh cho các tình huống hoặc môi trường cụ thể, cung cấp tính linh hoạt vượt trội so với các công cụ thương mại.
Hãy tưởng tượng tình huống sau:
- Một khách hàng đã cung cấp cho chúng ta bảng tính với danh sách các địa chỉ IP sẽ là mục tiêu của chúng ta cho một bài kiểm tra xâm nhập sắp tới.
- Để đạt được điều này, chúng ta sẽ tạo một tập lệnh sẽ tự động hóa các bước này và tạo một báo cáo đơn giản.
- Tập lệnh sẽ đọc bảng tính với một cột có tiêu đề “IP” tương ứng với các mục tiêu cần được quét.
- Khi quét hoàn tất, kết quả sẽ được ghi vào tệp văn bản dưới dạng báo cáo dễ đọc.
Ví dụ: Đội ngũ Pentest của Security365 được yêu cầu đánh giá bảo mật của 100 máy chủ tại comptia.edu.vn. Thay vì phải thủ công chạy từng lệnh Nmap, họ tạo một tập lệnh tự động đọc danh sách IP từ tệp Excel do khách hàng cung cấp. Tập lệnh lặp lại từng địa chỉ IP, chạy quét Nmap và xuất kết quả vào một báo cáo văn bản định dạng tốt, tiết kiệm hàng giờ công sức.
Chúng ta cần chuẩn bị một chút để chuẩn bị môi trường cho Python và cài đặt những gì cần thiết trong tập lệnh của mình.
- Sử dụng trình cài đặt Python pip3 để lấy mô-đun và cài đặt nó để Python có thể truy cập
- Sau đó lấy tập lệnh cho nmap từ GitHub
Ví dụ: Trước khi chạy tập lệnh, Đội ngũ Pentest của Security365 đảm bảo rằng Python được cài đặt đúng cách trên hệ thống của họ. Họ sử dụng pip3 để cài đặt các thư viện cần thiết như openpyxl để đọc tệp Excel và python-nmap để giao diện với Nmap. Họ cũng lấy mẫu tập lệnh Nmap từ GitHub của công ty để sử dụng làm điểm khởi đầu.
Các điểm cơ bản của tập lệnh như sau:
- Nhập các mô-đun Python cần thiết.
- Sử dụng function fileread để đọc từ bảng tính và tạo một danh sách.
- Để cập nhật danh sách IP, hãy sử dụng mô-đun ipaddress
- Hoàn thành quét đơn giản và sau đó là quét nâng cao
- Khi hoàn tất, print(“All operations finished.”)
Ví dụ: Tập lệnh Nmap của Đội ngũ Pentest của Security365 tuân theo một luồng công việc hợp lý. Nó bắt đầu bằng cách nhập các mô-đun cần thiết và xác định các function. Sau đó, nó đọc danh sách IP từ tệp Excel bằng cách sử dụng function fileread. Nó lặp lại từng địa chỉ IP, thực hiện quét TCP Connect cơ bản trước, sau đó là quét UDP nếu cổng TCP 123 đang mở. Cuối cùng, nó xuất kết quả vào một tệp báo cáo và in một thông báo hoàn thành.
Hoạt động ôn tập:
- Phác thảo khi nào thì hiệu quả để sử dụng lập trình khi tiến hành PenTest
- Thảo luận về cách bạn có thể tự động hóa PenTesting với các tập lệnh.
Tổng kết bài học:
Trong bài học này, chúng ta đã khám phá vai trò quan trọng của lập trình và phát triển phần mềm trong kiểm tra xâm nhập. Với sự phát triển của các hệ thống phần mềm phức tạp và môi trường mạng năng động, khả năng tự động hóa và tùy chỉnh các công cụ và quy trình pentest là rất quan trọng đối với Đội ngũ Pentest của Security365.
Chúng ta bắt đầu bằng cách xem xét các ngôn ngữ lập trình và ngôn ngữ kịch bản phổ biến được sử dụng trong pentest, như Python, Ruby, Perl và JavaScript. Mỗi ngôn ngữ có điểm mạnh và thư viện riêng để hỗ trợ các tác vụ liên quan đến bảo mật như quét mạng, phân tích giao thức và khai thác lỗ hổng. Chúng tôi cũng thảo luận về các shell lập trình như Bash và PowerShell, rất hữu ích để tự động hóa công việc trên các hệ thống * nix và Windows tương ứng.
Tiếp theo, chúng ta đi sâu vào các khái niệm lập trình cơ bản như biến, toán tử và cấu trúc điều khiển. Những building block này tạo thành nền tảng cho bất kỳ tập lệnh hoặc công cụ pentest nào. Chúng tôi cũng thảo luận về các cấu trúc dữ liệu phổ biến như JSON, CSV và cây – việc nắm vững những cấu trúc này là rất quan trọng để phân tích và thao tác dữ liệu trong quá trình kiểm tra xâm nhập. Chúng tôi kết thúc phần này bằng cách xem xét các nguyên tắc của Lập trình Hướng Đối tượng (OOP), mô hình lập trình cho phép viết mã mô-đun và có thể tái sử dụng.
Cuối cùng, chúng ta đã nhìn thấy các khái niệm này được áp dụng để tự động hóa một tác vụ pentest phổ biến: quét cổng trên nhiều máy chủ mục tiêu. Bằng cách viết một tập lệnh Python đơn giản để đọc địa chỉ IP từ một tệp Excel, chạy quét Nmap và xuất kết quả vào một báo cáo, chúng tôi đã chứng minh sức mạnh của việc tự động hóa. Tập lệnh tương tự có thể được phát triển cho nhiều khía cạnh khác của kiểm tra xâm nhập như fuzzing ứng dụng web, brute-forcing thông tin đăng nhập và khai thác lỗ hổng.
Xuyên suốt những chủ đề này, một điểm chung nổi lên: tầm quan trọng của code dễ đọc, mô-đun và có thể tái sử dụng. Trong kiểm tra xâm nhập, các tập lệnh thường được truyền từ một dự án sang một dự án khác và được sử dụng bởi nhiều thành viên trong nhóm. Viết code sạch sẽ, có cấu trúc tốt, và có tài liệu sẽ làm cho quá trình này dễ dàng hơn nhiều. Kiểm tra đầy đủ cũng rất quan trọng để đảm bảo rằng các tập lệnh chạy như mong đợi và không tạo ra hành vi ngoài ý muốn trong khi đánh giá.
Đối với những người muốn phát triển kỹ năng lập trình của họ để hỗ trợ sự nghiệp kiểm tra xâm nhập của họ, tôi khuyên bạn nên thực hành TryHackMe’s CompTIA Pentest+ learning path và CertMaster Labs for CompTIA PenTest+. Những nền tảng tương tác này cung cấp môi trường thực hành để viết, gỡ lỗi và chạy các chương trình và tập lệnh liên quan đến pentest. Chứng chỉ hoàn thành sẽ là một bổ sung ấn tượng cho hồ sơ của bạn, chứng minh năng lực lập trình của bạn.
Bên cạnh đó, để phát triển toàn diện các kỹ năng pentest, bao gồm cả khía cạnh lập trình, tôi khuyên bạn nên theo học các khóa học chuyên sâu như được cung cấp bởi CompTIA Vietnam (website comptia.edu.vn). Với nền tảng và đào tạo chuyên sâu, bạn sẽ được trang bị để xử lý các thách thức phức tạp của kiểm tra xâm nhập hiện đại. Đối với những người có ngân sách hạn chế, các khóa học trực tuyến thông qua hệ thống LMS (Learning Management System) của cổng đào tạo an toàn thông tin trực tuyến Security365 (website security365.vn) cung cấp một lựa chọn linh hoạt và tiết kiệm chi phí.
Khi công nghệ ngày càng trở nên phức tạp, lập trình trở thành một kỹ năng không thể thiếu đối với các chuyên gia pentest. Cho dù là tự động hóa các quy trình, phân tích phần mềm độc hại, hay tùy chỉnh các công cụ khai thác, khả năng viết và thao tác code là rất quan trọng. Bằng cách đầu tư thời gian để học các ngôn ngữ và framework này, Đội ngũ Pentest của Security365 có thể nâng cao hiệu quả và tác động của công việc của họ, giúp bảo vệ các tổ chức chống lại các mối đe dọa an ninh mạng ngày càng tăng.
Trình bày bởi : Vinh Nguyen Trần Tường
Tài liệu hỗ trợ học tập và ôn thi Chứng Chỉ Quốc Tế CompTIA Pentest +
Chú ý : Các ví dụ chỉ là giả định cho dễ hiểu, không phải là tình huống thực tế.
Để lại một bình luận