Con đường từ số 0 đến một pentester có tay nghề (Phần 1)

Có lẽ chủ đề này là chủ để mình khá ấn tượng và cũng là tháng 10, tháng mình cảm thấy ấm áp và nhiều hoài bão. 
Đây là bài chia sẻ từ chính cá nhân mình và quan điểm cũng vậy nên nếu có ý kiến khác có thể gửi e-mail trao đổi nhé! 
Mình xuất phát là dân CNTT, nhưng đam mê bảo mật.Trước mình là dân lập trình chính hiệu và có lẽ bạn thân mình và thầy giáo ở Bách Khoa Hà Nội đã thôi thúc mình tìm đến con đường này. Mình không biết gì về bảo mật, điều này là thật luôn. Thế là hồi năm ba đại học, ngành mình yêu cầu tham gia doanh nghiệp để thực tập thì được vào công ty của cô giáo hướng dẫn. Công ty này cũng làm về an toàn thông tin, nhưng 3 tháng ngắn ngủi thì mình chỉ học các thứ cơ bản của người hướng dẫn là DVWA(Damn Vulnerable Web App) để học và tấn công. Có lẽ là duyên nên giám đốc công ty cho mình đi làm thực tế để trải nghiệm. Ở đó, mình được làm quen với SIEM, tức là quản lý sự kiện bằng QRADAR, ... cho một ngân hàng. Hằng ngày thì đến kiểm tra sự kiện, thấy bất thường thì gửi email cho cấp trên. Có lẽ hơi nhàm chán. Mình quyết định nghỉ việc, thực ra đúng là hết thời gian thực tập nên mình xin nghỉ. Thấy cũng là lúc cần học hỏi và trải nghiệm thực tế hơn nữa nên mình quyết tâm theo đuổi an toàn thông tin mà chả hiểu an toàn thông tin là làm gì? 
Sau khi đọc và nghiên cứu thì mình thấy CNTT đã rộng, an toàn thông tin tuy hẹp hơn những cũng khá rộng. An toàn thông tin thì cũng chia làm nhiều mảng và khi mình đi xin thực tập tại công ty nơi mình đang làm thì được định hướng về pentest(Kiểm thử xâm nhập), sâu hơn là pentest website. 
Trước hết thì cần hiểu pentest là gì đã? Pentest là viết tắt của Penetration Testing hiểu là "Đánh giá độ an toàn bằng cách mô phỏng tấn công vào hệ thống khi được cấp phép". Đơn giản hơn là những pentester là có thể coi là những hacker mặc áo đen, đeo mặt nạ tấn công vào hệ thống. Có vẻ nói như này sẽ dễ hình dung hơn. Theo mình tìm hiểu thì pentest chia làm 3 lĩnh vực là :
  • Đánh giá cơ sở hạ tầng mạng: cấu trúc mạng,chính sách(Firewall),ghi log,VPN,Router,Switch,..
  • Đánh giá hệ thống máy chủ: cấu hình, cập nhật 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.
  • Đá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. - Cá nhân mình thấy nên để là Đánh giá ứng dụng nói chung là hợp lý vì ngoài web, còn các ứng dụng khác như mobile,...
Có 2 khái niệm mà có thể nhiều người vẫn hay nhầm lẫn là Lỗ hổng và Nguy cơ, mình xin chia sẻ luôn là :
  • Lỗ hổng?-Vulnerability là những điểm yếu trong hệ thống có thể bị khai thác, lợi dụng để gây tổn hại cho hệ thống.
  • Nguy cơ?-Threat là các hành vi tiềm ẩn khả năng gây hại cho hệ thống.
Vậy có những loại pentest nào?
  • Pentest hộp đen(Black box) :  Đây là kiểu đánh giá từ bên ngoài vào, không được cung cấp thông tin gì ngoài những thứ đã được công khai. Đây là kiểu tấn công phổ biến nhất.
  • Pentest hộp xám(Gray box): Sẽ được cung cấp một phần hoặc biết hạn chế thông tin về bên trong hệ thống
  • Pentest hộp trắng(White box): Đánh giá từ bên trong ra, được cung cấp toàn diện: Cung cấp toàn bộ thông tin về hệ thống/mạng như:Hạ tầng mạng,source code,chi tiết về địa chỉ IP,OS, chính sách,…
Kế tiếp mình sẽ nói về quy trình thực hiện một cuộc tấn công sẽ diễn ra như thế nào? Quy trình diễn ra gồm 3 giai đoạn: 
Chuẩn bị tấn công:
  • Thăm dò thông tin
  • Quét, rà soát hệ thống
Thực thi tấn công:
  • Giành quyền truy cập
  • Duy trì truy cập
Xóa dấu vết 
Đi sâu hơn là: 
Reconnaissance/Footprinting (Thăm dò thông tin)
  • Là các hành vi mà kẻ tấn công thực hiện nhằm thu thập thông tin về hệ thống: người dùng, khách hàng, các hoạt động nghiệp vụ, thông tin về tổ chức…
  • Có thể lặp đi lặp lại một cách định kỳ đến khi có cơ hội tấn công dễ dàng hơn
  • Thăm dò chủ động: có tương tác với mục tiêu
  • Thăm dò bị động: không có tương tác với mục tiêu: Social Engineering
  • Công cụ tìm kiếm:Google, Shodan, Censys
  • Thông tin từ mạng xã hội: FB,Tweetter, Linkedin
  • Thăm dò hệ thống email: whois/smartwhois, Email Extracter
  • Thăm dò kết nối mạng: traceroute
  • Thông tin về DNS: dnsenum/nslookup/dnswatch.info
  • File robots.txt : Đây là tệp dùng để ... Google nhé :::
  • whatweb
  • dns-enum
  • the harvester: thu thập emails, names, subdomains, IPs, and URLs
  • email extracter
Scanning (Quét, rà soát hệ thống)
  • Quét rà soát để xác định các thông tin về hệ thống dựa trên các thông tin thu thập được từ quá trình thăm dò
  • Kẻ tấn công có cái nhìn chi tiết hơn và sâu hơn về hệ thống: các dịch vụ cung cấp, các cổng dịch vụ đang mở, địa chỉ IP, hệ điều hành và phần mềm…
  • Trích xuất thông tin từ giai đoạn này cho phép kẻ tấn công lên kế hoạch chi tiết để thực hiện tấn công
Gaining Access (Giành quyền truy cập)
  • Lúc này kẻ tấn công có được những thông tin đã thu thập và thực hiện tấn công vào hệ thống để lấy quyền truy cập như sử dụng các lỗ hổng ở web như SQLi, RCE,...
Maintaining Access(Duy trì truy cập)
  • Khi đã dành quyền truy cập, kẻ tấn công sẽ sử dụng các kỹ thuật để duy trì truy cập mà không cần phải tấn công lại như tạo back-door, mở kết nối mạng,...
Clearing Tracks (Xóa dấu vết)
  • Đây là bước quan trọng để xóa dấu vết của mình khi đã đột nhập vào hệ thống để không ai phát hiện, có thể nói là khi cơ quan điều tra tìm kiếm thì sẽ rất khó nhận dạng ra bạn là ai, đã làm gì trên hệ thống đó là xóa log được ghi trên hệ thống,...
Có vẻ khá nhiều lý thuyết đúng không nào, nhưng nó là cánh cửa để tham gia vào con đường pentester. 
Trở lại cá nhân mình, trước hết là mình tìm hiểu kỹ những nội dung kể trên.
Tiếp theo là chọn con đường, mình chọn con đường là pentest Ứng dụng: Website và Mobile. 
Phần này mình trình bày về con đường là đánh giá ứng dụng website. 
Khi mình tham gia thực tập tại công ty, mình được học đầu tiên là tìm hiểu về mạng là mô hình tham chiếu OSI và TCP/IP, tìm hiểu về quá trình bắt tay ba bước TCP, sử dụng công cụ Wireshark, nmap, hping. Đây là bước làm quen về mạng. 
Đi sâu hơn về website thì cần hiểu về công nghệ website, Client, Server, giao thức HTTP, URL,URI, các header trong giao thức HTTP và dùng để làm gì?
Cuốn sách mình làm quen đầu tiên là :
"The Web Application Hacker’s Handbook".
Lý thuyết thì nên kết hợp thêm thực hành là tự tìm hiểu và cài đặt môi trường như DVWA, BWAPP(Cái này mình thấy hay và độ khó nhiều hơn DVWA),... Cứ chiến hết BWAPP là bạn đã có kiến thức nền rồi đó, vì BWAPP theo tiêu chuẩn đánh giá OWASP, cái tên nổi tiếng là OWASP Top Ten, cố gắng tìm hiểu kỹ về các lab này và luôn đặt câu hỏi tại sao để hiểu sâu hơn nhé! 
Nếu bạn không muốn xây dựng lab thì có thể học hỏi ở đây, có lab và có hướng dẫn, mình thấy cũng rất hay:
Sau khi đã đủ kiến thức nền thì bạn có thể tham các cuộc thì CTF để mở rộng kỹ năng.
Riêng cá nhân mình thì mình dường như không tham gia CTF mà mình chuyển thẳng luôn là tìm bug bounty. Đây là chương trình trả thưởng khi mình tìm ra lỗi và báo cáo với họ. Cái này quan trọng nhất là "tiền"- điều mà thôi thúc mình chiến đấu. Đúng vậy, khi động lực lên cao, bạn sẽ cố gắng  và chiến đấu sẽ hết mình. Khi mới tham gia chương trình này thì nên chọn các mục tiêu dễ để học hỏi dần. Như mình thì ở công ty có chương trình này ở dạng private để mọi người tham gia. Ngoài ra ở Việt Nam mình cũng có các chương trình công khai, các bạn có thể tự tìm hiểu nhé. Còn mở rộng ra thế giới, chương trình rất nổi tiếng là : 
Và điều nữa là nếu các bạn đọc các blog thì mình thường nói về CVE đúng không nào? CVE có lẽ nó là điều quá xa xỉ với cá nhân trước kia, nhưng mình đã vượt qua bản thân, trau dồi kiến thức để tìm kiếm nó. Tìm kiếm các open source để tự cài đặt và chạy nó. Quan trọng nhất là lựa chọn ngôn ngữ mình yêu thích, cá nhân mình thì là PHP,... với các CMS như Wordpress, Joomla!, Drupal,... 
Ngoài CVE, bạn có thể học nâng cao lên để tìm kiếm cho mình các chứng chỉ như OSCP,OSCE,AWAE,... hoặc tìm hiểu về các chứng chỉ khác như GPEN,... 
Còn một nguồn tài liệu quý giá trên github là:
Có thể của mình ::))