[Pentest] Chuẩn pentest website theo OWASP
Hi guyz
Hiện nay các công nghệ thông tin đã lan đến rất nhiều ngõ nghách của xã hội, số lượng website của tổ chức, website của cá nhân tăng lũy tiến. Điều này kéo theo mối lo ngại về an toàn thông tin, về vấn đề bảo mật cho các webiste, ứng dụng web theo đó mà tăng theo. Để xác nhận 1 website bảo mật và đảm bảo sự an toàn về mặt an toàn thông tin thì website đó cần được kiểm thử. Vậy kiểm thử là gì và kiểm thử có cần được phát triển không, câu trả lời có ở ngay bên dưới.
1. Information Gathering
Phần này pentester sẽ thu thập thông tin về đối tượng cũng như các thông tin về server chạy ứng dụng như phiên bản ứng dụng, framework, webserver, hệ điều hành, …
Trước khi thực hiện là một công việc gì đó. Việc đầu tiên cần làm là tìm hiểu thông tin về đối tượng. Bước này rất quan trọng, khi đã xác định được nhiều thông tin liên quan tới ứng dụng sẽ tạo điều kiện thuận lợi cho việc tấn công và khai thác. Như xác định được WebServer, phiên bản pentester thể tấn công khai thác những lỗi liên quan tới webserver mà không cần quan tâm tới ứng dụng đang chạy có an toàn hay không.
2. Configuration and Deployment Mangement Testing
Đánh giá về hệ thống máy chủ. Có thể ứng dụng web hoàn toàn không có lỗ nhưng nền tảng chạy ứng dụng lại có lỗi ví dụ như hệ điều hành, webServer có bug, điều này hoàn toàn có thể làm nguy hại không chỉ ứng dụng web mà toàn bộ server.
Cần kiểm tra phần cấu hình cho ứng dụng, chủ yếu phần này do người phát triển kiểm tra. Hình thức kiểm tra là whitebox và graybox.
3. Identify Management Testing
Sau khi đã thu thập xong thông tin về ứng dụng. Bước tiếp theo là nhận định khả năng có lỗi nằm ở đâu. Xác định những điểm để thực hiện tấn công được.
Kiểm tra lại cách thức tạo tài khoản trong ứng dụng. Logic trong xử lý và các quyền của User.
4. Authentication Testing
Chế độ đăng nhập là phổ biến trong các ứng dụng, nếu là người quản trị hệ thống sẽ có quyền điều khiển ứng dụng. Do đó việc kiểm tra bảo mật với chức năng đăng nhập là điều hết sức quan trọng. Các công việc được được ra nhằm đảm bảo việc đăng nhập là an toàn và đúng với ý định của nhà phát hành ứng dụng. ngăn chặn trường hợp bị bypass qua cơ chế xác thực cũng như khả năng lộ lọt thông tin đăng nhập của người dùng.
Kiểm tra xác thực đăng nhập, sử dụng các kỹ thuật để bypass xác thực và leo thang đặc quyền. Các chính sách quản lý người dùng của ứng dụng có hoạt động đúng hay không như chức năng logout, hay có yêu cầu mật khẩu mạnh, …
5. Authorization Testing
Sau khi đăng nhập vào hệ thống. kiểm tra tính logic đã cấp đầy đủ và đúng các chức năng của ứng cho user đã đăng nhập hay chưa. Khả năng vượt qua cơ chế bảo mật để leo thang đặc quyền
Kiểm tra giới hạn quyền có các user. Hãy tưởng tượng user1 và user2 là 2 người dùng khác nhau nếu người dùng user1 có thể truy cập vào tài nguyên của người dùng user2 trên server đọc được những thông tin riêng tư mang tính bí mật của user2. Điều này là vô cùng nguy hiểm do đó việc phân quyền các tài nguyên cho từng nhóm đối tượng và riêng tường đối tượng là rất quan trọng. Việc kiểm tra
6. Sesstion Management Testing
Kiểm tra phiên đăng nhập.
Vd: Khi bạn đã đăng nhập vào hệ thống, các quyền hợp pháp của User đã có đầy đủ chưa, có thể leo thang đặc quyền không, … phần này kiểm tra chức năng phân quyền cho user của ứng dụng.
7. Input Validation Testing
Thực hiện kiểm tra các biến nhập liệu khả năng inject vào các biến đầu vào này.
Không bao giờ tin tưởng người dùng, đó là 1 phương châm rất quan trọng đối với lập trình viên. Việc kiểm tra dữ liệu được nhập vào từ người dùng là công việc vô cùng quan trọng. Những hậu quả to lớn nếu như không hoặc có nhưng không kiểm tra chặt chẽ dữ liệu nhập từ người dùng. Các lỗi nguy hiểm có thể gặp phải như SQL Injection, Cross Site Scripting(XSS), File Include, … Đối với những lỗi nguy hiểm có thể làm cho quản trị viên mất quyền kiểm soát website thậm chí là cả Server.
8. Testing for Error Handing
Kiểm tra cách xử lý lỗi của ứng dụng
Kiểm tra cách thức xử lý lỗi của ứng dụng là một điều hết sức quan trọng. Không phải lúc nào ứng dụng đều chạy giống với ý muốn của người lập trình, hoặc người dùng không hợp tác cung cấp những dữ liệu không mong muốn. Thông tin về lỗi cũng là 1 nguồn thu thập dữ liệu cho hacker có thể tấn công vào website. Những lúc đó ứng dụng cần có cơ chế xử lý để không gặp phải hiện tượng tự nhiên lăn đùng ra chết mà quản trị chẳng hay chết khi nào và vì sao lại chết.
9. Testing for weak Cryptography
Kiểm tra về cách mà ứng dụng mã hóa thông tin trên đường truyền
Đối với những website thương mại, giao dịch điện tử thì việc bảo vệ dữ liệu trên đường truyền là rất rất quan trọng. Từ tài khoản người dùng đến thông tin giao dịch đều cần được giữ bí mật trên đường truyền. Phần này là kiểm tra phần mã hóa và mức độ mã hóa của ứng dụng đã đảm bảo an toàn hay chưa.
10. Bussiness Logic Testing
Kiểm tra tính logic nghiệp vụ của ứng dụng, ví dụ: website bán hàng có xử lý đúng logic cho các hóa đơn không.
Mỗi ứng dụng có chức năng riêng do đó Logic mỗi ứng dụng là khác nhau. Kiểm tra này là xác định đúng xử lý của ứng dụng đã hợp với logic và chức năng của ứng dụng hay không.
11. Client Side Testing
Kiểm tra việc thực thi mã trên máy người dùng.Response nhận từ server sẽ được brower hiển thị cho người dùng. Ngoài mã html ra còn có mã JavaScript. Nếu có thể inject code đặc biệt là javascript vào response này sẽ làm cho browser thực thi mã làm thay đổi một số tính năng của ứng dụng.
Trên đây tôi đã giới thiệu cho mọi người biết về pentest và chuẩn OWASP – 1 chuẩn của thế giới về Penetration Testing J)) Mọi người có thắc mắc hay muốn biết thêm thông tin chi tiết thì comment ở dưới bài viết :___
Hiện nay các công nghệ thông tin đã lan đến rất nhiều ngõ nghách của xã hội, số lượng website của tổ chức, website của cá nhân tăng lũy tiến. Điều này kéo theo mối lo ngại về an toàn thông tin, về vấn đề bảo mật cho các webiste, ứng dụng web theo đó mà tăng theo. Để xác nhận 1 website bảo mật và đảm bảo sự an toàn về mặt an toàn thông tin thì website đó cần được kiểm thử. Vậy kiểm thử là gì và kiểm thử có cần được phát triển không, câu trả lời có ở ngay bên dưới.
- Pentest (Penetration Testing – kiểm thử thâm nhập) website là công việc kiểm thử thâm nhập hệ thống website nhằm đánh giá mức độ an toàn và bảo mật.
- Để thực được công việc pentest- người thực hiện kiểm thử sử dụng các biện pháp nghiệp vụ, tìm mọi cách xâm nhập và hệ thống của website. Mục đích cuối cùng sẽ là kiểm soát được website, dữ liệu của website hoặc cao nhất có thể đó là chiếm quyền điều khiển Server. Những lỗ hổng tìm thấy sẽ được báo lại cho quản trị hoặc nhà phát triển ứng dụng để họ khắc phục vá lỗ hổng.
- Các khái niệm dùng trong pentest
- BlackBox: Đây là hình thức kiểm thử mà pentester đứng trên phương diện của kẻ tấn công thật sự, tấn công từ phía bên ngoài vào hệ thống. Tìm cách xâm nhập vào hệ thống mà không được cung cấp thông tin nào về đối tượng.
- WhitehatBox: Là hình thức kiểm thử thứ 2 mà pentester có thể thực hiện. Với hình thức này người kiểm thử sẽ được cung cấp nhiều thông tin về hệ thống website thậm chí có cả code để phục vụ việc tìm lỗ hổng.
- GrayBox: Hình thức hiểm thử này, pentester sẽ được cung cấp 1 ít thông tin giúp ích cho việc thâm nhập. Có thể là tài khoản đăng nhập hoặc kiểm thử từ bên trong(mạng nội bộ), ..
- Vulnerability(Vuln): Lỗ hổng được tìm thấy.
- PoC(Proof of Concept): Minh chứng cho việc đã tìm thấy lỗ hổng.
- Payloads: Là toàn bộ những dữ liệu phục vụ cho việc khai thác lỗ hổng
- OWASP là chuẩn phục vụ cho việc kiểm thử của Pentester, liệt kê các công việc mà người kiểm thử nên làm và các checklist để thực hiện các công việc.
- Tổ chức Open Web Application Security Project(OWASP) là tổ chức phi lợi nhuận, tổ chức này đã đưa ra chuẩn OWASP phục vụ cho công việc pentest hiệu quả và chi tiết.
- Quy trình pentest được chia thành 11 công việc (mục), Để hoàn thành kiểm tra, mỗi công việc được chia ra nhiều check list.
1. Information Gathering
Phần này pentester sẽ thu thập thông tin về đối tượng cũng như các thông tin về server chạy ứng dụng như phiên bản ứng dụng, framework, webserver, hệ điều hành, …
Trước khi thực hiện là một công việc gì đó. Việc đầu tiên cần làm là tìm hiểu thông tin về đối tượng. Bước này rất quan trọng, khi đã xác định được nhiều thông tin liên quan tới ứng dụng sẽ tạo điều kiện thuận lợi cho việc tấn công và khai thác. Như xác định được WebServer, phiên bản pentester thể tấn công khai thác những lỗi liên quan tới webserver mà không cần quan tâm tới ứng dụng đang chạy có an toàn hay không.
2. Configuration and Deployment Mangement Testing
Đánh giá về hệ thống máy chủ. Có thể ứng dụng web hoàn toàn không có lỗ nhưng nền tảng chạy ứng dụng lại có lỗi ví dụ như hệ điều hành, webServer có bug, điều này hoàn toàn có thể làm nguy hại không chỉ ứng dụng web mà toàn bộ server.
Cần kiểm tra phần cấu hình cho ứng dụng, chủ yếu phần này do người phát triển kiểm tra. Hình thức kiểm tra là whitebox và graybox.
3. Identify Management Testing
Sau khi đã thu thập xong thông tin về ứng dụng. Bước tiếp theo là nhận định khả năng có lỗi nằm ở đâu. Xác định những điểm để thực hiện tấn công được.
Kiểm tra lại cách thức tạo tài khoản trong ứng dụng. Logic trong xử lý và các quyền của User.
4. Authentication Testing
Chế độ đăng nhập là phổ biến trong các ứng dụng, nếu là người quản trị hệ thống sẽ có quyền điều khiển ứng dụng. Do đó việc kiểm tra bảo mật với chức năng đăng nhập là điều hết sức quan trọng. Các công việc được được ra nhằm đảm bảo việc đăng nhập là an toàn và đúng với ý định của nhà phát hành ứng dụng. ngăn chặn trường hợp bị bypass qua cơ chế xác thực cũng như khả năng lộ lọt thông tin đăng nhập của người dùng.
Kiểm tra xác thực đăng nhập, sử dụng các kỹ thuật để bypass xác thực và leo thang đặc quyền. Các chính sách quản lý người dùng của ứng dụng có hoạt động đúng hay không như chức năng logout, hay có yêu cầu mật khẩu mạnh, …
5. Authorization Testing
Sau khi đăng nhập vào hệ thống. kiểm tra tính logic đã cấp đầy đủ và đúng các chức năng của ứng cho user đã đăng nhập hay chưa. Khả năng vượt qua cơ chế bảo mật để leo thang đặc quyền
Kiểm tra giới hạn quyền có các user. Hãy tưởng tượng user1 và user2 là 2 người dùng khác nhau nếu người dùng user1 có thể truy cập vào tài nguyên của người dùng user2 trên server đọc được những thông tin riêng tư mang tính bí mật của user2. Điều này là vô cùng nguy hiểm do đó việc phân quyền các tài nguyên cho từng nhóm đối tượng và riêng tường đối tượng là rất quan trọng. Việc kiểm tra
6. Sesstion Management Testing
Kiểm tra phiên đăng nhập.
Vd: Khi bạn đã đăng nhập vào hệ thống, các quyền hợp pháp của User đã có đầy đủ chưa, có thể leo thang đặc quyền không, … phần này kiểm tra chức năng phân quyền cho user của ứng dụng.
7. Input Validation Testing
Thực hiện kiểm tra các biến nhập liệu khả năng inject vào các biến đầu vào này.
Không bao giờ tin tưởng người dùng, đó là 1 phương châm rất quan trọng đối với lập trình viên. Việc kiểm tra dữ liệu được nhập vào từ người dùng là công việc vô cùng quan trọng. Những hậu quả to lớn nếu như không hoặc có nhưng không kiểm tra chặt chẽ dữ liệu nhập từ người dùng. Các lỗi nguy hiểm có thể gặp phải như SQL Injection, Cross Site Scripting(XSS), File Include, … Đối với những lỗi nguy hiểm có thể làm cho quản trị viên mất quyền kiểm soát website thậm chí là cả Server.
8. Testing for Error Handing
Kiểm tra cách xử lý lỗi của ứng dụng
Kiểm tra cách thức xử lý lỗi của ứng dụng là một điều hết sức quan trọng. Không phải lúc nào ứng dụng đều chạy giống với ý muốn của người lập trình, hoặc người dùng không hợp tác cung cấp những dữ liệu không mong muốn. Thông tin về lỗi cũng là 1 nguồn thu thập dữ liệu cho hacker có thể tấn công vào website. Những lúc đó ứng dụng cần có cơ chế xử lý để không gặp phải hiện tượng tự nhiên lăn đùng ra chết mà quản trị chẳng hay chết khi nào và vì sao lại chết.
9. Testing for weak Cryptography
Kiểm tra về cách mà ứng dụng mã hóa thông tin trên đường truyền
Đối với những website thương mại, giao dịch điện tử thì việc bảo vệ dữ liệu trên đường truyền là rất rất quan trọng. Từ tài khoản người dùng đến thông tin giao dịch đều cần được giữ bí mật trên đường truyền. Phần này là kiểm tra phần mã hóa và mức độ mã hóa của ứng dụng đã đảm bảo an toàn hay chưa.
10. Bussiness Logic Testing
Kiểm tra tính logic nghiệp vụ của ứng dụng, ví dụ: website bán hàng có xử lý đúng logic cho các hóa đơn không.
Mỗi ứng dụng có chức năng riêng do đó Logic mỗi ứng dụng là khác nhau. Kiểm tra này là xác định đúng xử lý của ứng dụng đã hợp với logic và chức năng của ứng dụng hay không.
11. Client Side Testing
Kiểm tra việc thực thi mã trên máy người dùng.Response nhận từ server sẽ được brower hiển thị cho người dùng. Ngoài mã html ra còn có mã JavaScript. Nếu có thể inject code đặc biệt là javascript vào response này sẽ làm cho browser thực thi mã làm thay đổi một số tính năng của ứng dụng.
Trên đây tôi đã giới thiệu cho mọi người biết về pentest và chuẩn OWASP – 1 chuẩn của thế giới về Penetration Testing J)) Mọi người có thắc mắc hay muốn biết thêm thông tin chi tiết thì comment ở dưới bài viết :___
Chỉnh sửa lần cuối bởi người điều hành: