Tối muộn ngày 13/8, mình cùng đồng nghiệp đang đi liên hoan kickoff dự án, trong cơn say chẳng biết trời đất gì vào cuối buổi nhậu thì nhận được mail thông báo mình đã pass chứng chỉ OSCP+ từ Offsec, tất nhiên là cũng chẳng hồi hộp là mấy vì chứng chỉ này khi thi xong 99% là đã có thể tự biết là có đỗ hay không rồi. Tuy không quá bất ngờ nhưng thật sự mình cảm thấy vẫn rất rất là vui, chỉ chờ được ngồi để viết mấy dòng review này. Offsec mới đổi OSCP thành OSCP+ và ở Việt Nam mình chưa thấy có bài review về OSCP+ nào cả nên mình viết luôn post này cho các chuyên gia có ý định thi OSCP+ sắp tới có thể tham khảo được ít nhiều
Giới thiệu về OSCP+
OSCP+ (OffSec Certified Professional Plus) là chứng chỉ thuộc hệ thống chứng chỉ của Offensive Security - chính là công ty tạo ra hệ điều hành Kali Linux. OSCP/OSCP+ là một chứng chỉ khá nổi tiếng trong giới bảo mật không những ở Việt Nam mà trên toàn thế giới, đặc biệt cho các anh em làm Pentester/RedTeamer. Chứng chỉ này cung cấp kỹ năng cần thiết để kiểm thử xâm nhập vào nền tảng Windows và Linux dựa vào Kali Linux.
Bắt đầu từ tháng 11 năm 2024, Offsec thay đổi 1 số thứ liên quan đến chứng chỉ này:
- Khi thi OSCP bạn sẽ nhận được cả OSCP và OSCP+, OSCP thì vẫn như ngày xưa là không cần phải gia hạn, còn OSCP+ thì thời hạn 3 năm và phải kiếm CPE cũng như đóng annual fee để duy trì hàng năm là khoảng 145USD/năm. Đợt đổi này, trên cộng đồng reddit mấy ông tây kêu oai oái vì hàng năm phải bỏ tiền duy trì. Mình thì cũng không mấy vui vẻ về khoản này lắm nhưng thôi mình đã khá quen với kiểu duy trì này vì mình vẫn đang phải đóng phí duy trì hoặc thi renew cert của ISC2, EC-Council, Juniper, AWS,… cũng khoảng 400-500USD/1năm, thêm OSCP+ nữa thì 1 năm đâu đó khoảng 500-700USD chỉ để duy trì các cert mình đang có, tốn kém ghê 😩. Rồi, trong bài viết này, mình sẽ nói chung là OSCP+
- Về format thi và cách tính điểm:
- Không còn 10 điểm cộng: Offsec quyết định bỏ không còn 10 điểm bonus point nữa, cái này là cái làm mình bị down mood nhất vì trước kia khi làm Lab của Offsec trong bundle mà hoàn thành khoảng 80% machine thì khi đi thi sẽ được cộng 10 điểm. Yêu cầu để đỗ là đạt 70/100 điểm, thì ngày xưa có nhiều người pass được chứng chỉ này vì họ đạt 60 điểm và thêm 10 điểm cộng nữa là vừa đủ, cho nên nó ảnh hưởng tới tâm lý cũng như chiến lược làm bài thi khá nhiều của tất cả các người thi OSCP+ từ sau tháng 11/2024.
- AD Set chia nhỏ điểm hơn: Ngày trước, khi tấn công và hack được AD là khi chiếm được máy DC và đọc duy nhất 1 proof.txt flag để được 40 điểm luôn. Nhưng bây giờ thì AD Set sẽ có tận 3 flag để trên 3 máy thuộc AD, flag trên DC được 20 điểm, flag trên 2 máy còn lại mỗi flag 10 điểm. Nghĩa là mình không nhất thiết phải chiếm được cả AD nhưng vẫn lấy được chút điểm, có thể là 10 hoặc 20 và quay qua khai thác các máy standalone thì vẫn có khả năng pass được.
- Credential breach assume: Offsec sẽ cho bạn một account thuộc Domain AD để giả lập tình huống thực tế là một account credential của một user thường bị lộ. Mình chỉ thấy có thay đổi này là làm mình happy thôi.
Mình mua gói Bundle 1750USD gồm 90 ngày truy cập Offsec Lab và 1 lần thi. Ngoài Lab thì có cả lý thuyết kèm thực hành ngắn, video bài giảng nhưng video thì mình không xem. Nếu thi trượt thì những lần sau chỉ cần thi lại với giá 249USD mỗi lần, tuy nhiên là sẽ có cooling-off period policy. Trượt lần 1, phải chờ 4 tuần sau mới được thi lại, trượt lần 2 sẽ phải chờ 8 tuần so với lần thi gần nhất mới được thi lại, trượt lần 3 sẽ phải chờ 12 tuần so với lần thi gần nhất. Nhưng may mắn là mình không phải thi lại, và toàn bộ số tiền cũng là công ty tài trợ. Ngoài những lúc nhận lương ra thì những lúc được duyệt mấy cái chi phí như này cũng thấy sao mà mình chọn đúng công ty thế không biết.
Nền tảng
Thật ra công việc hiện tại của mình không phải 1 pentester/redteamer. Mình hiện tại là Network Security Engineer, nhưng vì thích hack và để phục vụ phần nào đó công việc nên trước đó mình vẫn thi thoảng hay chơi CTF trên các nền và tảng chủ yếu là hackthebox. Các kiến thức nền tảng sẵn có của mình cũng đóng góp khá nhiều vào quá trình ôn thi như kiến thức Networking, Linux/Window, Coding (python,php,bash scripts,…), CTF player, tiếng anh đủ tốt để đọc hiểu các tài liệu chuyên ngành, các PoC guide, walkthrough, các phân tích CVE, trao đổi các kiến thức hacking trong các forum, cộng đồng nước ngoài. Mình nghĩ nền tảng kiến thức sẵn có khá quan trọng để có thể quyết định được bạn sẽ mất bao lâu để có thể sẵn sàng thi.
Quá trình ôn thi
- Tháng thứ nhất - Hackthebox: Trước khi mua PEN-200 bundle, mình đăng ký gói VIP trên hackthebox platform mất khoảng 14USD/tháng, hack thêm được khoảng 30 máy (easy/medium, thi thoảng 1 vài box Hard) trên nền tảng này trong quá trình ôn thi trong vòng 1 tháng. Rất nên tham khảo các video của IppSec mình học được thêm một vài kĩ thuật rất hay ho từ ông này luôn. Writeup thì mình hay đọc của 0xdf.
- Tháng thứ 2 - Không ôn luyện gì: Do thời điểm đó mình bị bận việc trên công ty nên mình off mất 1 tháng không ôn luyện gì.
- Tháng thứ 3,4 - Offsec PEN-200 Lab: Nếu mọi người đã mua bundle 90 ngày access lab của Offsec rồi thì nên dành thật nhiều thời gian để ôn luyện, làm toàn bộ các bài lab trên đây để tránh bị hết hạn, vì nếu hết hạn và phải extend thì hình như khoảng 359USD cho 30 ngày extend, khá đắt. Course này của Offsec sẽ bao gồm cả video, các lý thuyết và các bài thực hành ngắn nằm trong mục Syllabus, sau khi nghiên cứu xong Syllabus thì chuyển qua làm 11 challenge (tổng khoảng 50-57 machine). Nhưng mình chỉ làm tổng cộng 6/11 challenge được recommend thôi (Secura, Medtech, Relia, OSCP A, OSCP B, OSCP C) còn lại thì thấy review là hơi vượt quá scope của bài thi nên mình không muốn mất thời gian.
- Tháng thứ 5 - Proving Ground Practice: Giá 19USD/tháng, là nền tảng lab của chính Offsec luôn nhưng không thuộc PEN-200, nghe nói là có cả những Box OSCP retired, các máy trên này thì mình thấy khá giống với phong cách khi thi real exam của OSCP. Cực kì recommend nguồn Lab này, mình lab tổng cộng 30 máy ở đây (mình chọn các machine có level intermediate/Hard và thi thoảng là Very Hard)
Vậy tổng cộng là mình mất 4 tháng thực tế để tập trung ôn luyện, trung bình mỗi ngày dành ra khoảng 5h. Sau vài tháng ôn luyện và cũng tự thấy khá tự tin do quá trình hack các machine mình cũng ít phải dùng tới hint/writeup cho nên quyết định đăng ký thi luôn vào 10h ngày 9/8 giờ Việt Nam.
Các lời khuyên trong quá trình ôn thi
- Take note, take note and take note: Mình viết lại toàn bộ mọi thứ mình học được trên Notion, tổng hợp lại thành một quyển Self-Handbook theo phong cách của mình để khi cần xem lại
- Đừng ngại đọc hint/Writeup/Walkthrough: Với những machine mình hack thành công, mình tìm các writeup của người khác để đọc, nhiều khi mình tìm được các attack vector mới hay ho để có thể áp dụng về sau và take note lại luôn. Những khi bị bí ở một chỗ nào đó khoảng 2 tiếng đổ lên thì sẽ ưu tiên đọc hint, sau đó là Writeup/Walkthrough nếu đọc hint vẫn không thể nghĩ ra được gì. if you know, you know 🙂 vì có những kỹ thuật nếu mình biết thì mình sẽ làm được, còn nếu đã cố gắng quá lâu mà không làm được thì có thể là chẳng biết tí gì về nó cả, thì nên “mở lòng” ra mà đọc Walkthrough chứ không cần phải quá đặt mình vào áp lực là phải giải quyết mọi machine mà không cần tý sự giúp đỡ nào đâu. Miễn sao đọc xong thì take note lại kiến thức mới và thật sự hiểu cơ chế của kĩ thuật đó để khi gặp lại thì không còn bỡ ngỡ là được.
- Thử làm report như thi thật: Thi thoảng sẽ vừa hack và vừa làm report như thật để luyện kĩ năng capture, viết report luôn (đặc biệt là Lab OSCP A-B-C). Mình tham khảo OSCP template report ở đây https://github.com/noraj/OSCP-Exam-Report-Template-Markdown. Nói chung là cũng không cần quá cầu toàn ở khoản này, chỉ cần hiểu mục tiêu là capture những thứ cần thiết (đặc biệt là flag), nội dung các PoC script đã chỉnh sửa hoặc tự phát triển, mô tả toàn bộ các step của mình đã làm 1 cách tuần tự, dễ hiểu để bên Offsec có thể thực hiện y hệt theo và đạt được đúng kết quả như mình là sẽ ổn thôi.
- CPU amd64 thay vì arm64: Mình đang dùng Macbook chip M3 Pro với CPU kiến trúc arm64, chạy máy ảo Kali Linux arm64 trên parallels. Thế nhưng hầu hết các máy mình lab và kể cả thi thì toàn dùng CPU amd64, nên có nhiều khi quá trình compile payload tấn công của mình bị phức tạp hơn rất nhiều và không work được trên victim machine, mình workaround tạm thời bằng cách chạy docker để build container ubuntu amd64 cho những trường hợp cần phải compile payload tấn công cho victim như thế này, mà có khi còn vẫn lỗi tùm lum cơ. Nói chung là hơi lằng nhằng và phức tạp, toàn bộ đều được giải quyết một cách đơn giản là dùng máy tính CPU amd64, có thế thôi. Cho nên, nếu có ý định đổi máy trước khi ôn và thi thì cân nhắc kĩ nhé các bác.
Ngày thi
Cuối cùng thì ngày lên thớt cũng đến, 9h45 sáng ngày 9/8 mình phải join trước với proctor, họ sẽ yêu cầu mình quay toàn bộ phòng, không máy tính khác, không dùng điện thoại, được dùng nhiều màn hình. Đồng thời họ cũng sẽ yêu cầu run script trên máy Macos của mình để scan toàn bộ môi trường, run một vài câu lệnh trên VM Kali Linux của mình nữa và gửi toàn bộ output cho họ kiểm tra, sau đó là verify căn cước công dân của mình có đúng tên, tuổi, ngày hết hạn và tất nhiên là có giống với mình thực tế hay không 😄 Sau đó mình dùng webcam của laptop để cho proctor họ theo dõi trong suốt quá trình làm bài thi. Nếu mọi thứ ok, Offsec sẽ gửi mail cho mình bao gồm: vpn package để connect tới hệ thống của họ từ VM Kali Linux bao gồm username/password để đăng nhập. Khi thi, sẽ có tổng cộng 6 máy chủ được chia ra làm 2 loại là Standalone Machine và AD Set. Với AD Set thì có 3 Window Server mô phỏng môi trường AD của doanh nghiệp gồm 1 DC (1 flag 10 điểm) và 2 máy thành viên (mỗi máy 1 flag, mỗi flag 10 điểm). Với Standalone sẽ có 3 máy chủ gồm 2 máy chủ linux và 1 máy chủ window không liên quan gì tới nhau, mỗi máy sẽ bao gồm 2 flag (local.txt và proof.txt, mỗi flag 10 điểm). Giờ mình sẽ có chính xác là 23h45 phút để hoàn thành bài thi, và ngay sau đó là 24h để hoàn thành report gửi cho Offsec. Nếu đạt 70/100 điểm và phần report đáp ứng đủ yêu cầu thì sẽ đỗ.
Đầu tiên, mình bắt đầu với AD Set trước:
- Pwned Public machine: 10h30' => 10 point
- Pwned Internal machine : 11h45' => 10 point
- Pwned DC machine : 12h05' => 20 point
Vậy là sau 2 tiếng mình đã chiếm được toàn bộ AD và được 40 điểm, nhanh hơn dự kiến ban đầu của mình (4-5h để chiếm được toàn bộ AD). Sau đó mình chuyển sang khai thác Standalone Machine1 và mất khoảnh 1 tiếng để recon cũng như tìm thấy được lổ hổng để initial access được vào máy này:
- initial access: 13h00' => 10 point
- privilege escalation: 13h15' => 10 point
Lúc này mình đã có tổng là 60 điểm, mình xin break 30 phút để ra ăn cơm và nghỉ ngơi 1 lúc và quay lại và khai thác Standalone Machine2 lúc 13h45’, sau khoảng 1 tiếng recon và kết hợp các thông tin thì mình cũng initial access được vào victim:
- initial access: 14h45' => 10 point
Standalone Machine2 là một Window Server, sau gần 1 tiếng vật lộn với nó thì không thể tìm được cách nào để leo quyền lên user quyền cao được. Nhưng tin vui là mình đã đủ 70 điểm và tạm thời đã bước 1 chân vào cửa đỗ rồi cho nên tư tưởng mình khá thoải mái. Mà khó quá thì bỏ qua, mình chuyển sang khai thác Standalone Machine3 lúc 15h30' và máy chủ Linux này có vẻ dễ thở hơn khi mình tìm được một lỗ hổng để lấy được reverse shell của nó:
- initial access: 15h55' => 10 point
- privilege escalation: 16h05' => 10 point
Mình hoàn thành leo quyền lên user root và chiếm được hoàn toàn Machine3 lúc 16h05’. Vậy là giờ mình đã có 90/100 điểm, chỉ còn đúng 10 điểm nữa từ Machine2. Mình quyết định nghỉ ngơi dài một chút để refresh lại, báo proctor cho break time, nằm nghỉ 1 lúc và dậy đi tập gym, sau đó tắm rửa và 19h30' quay lại để xử lý nốt Machine2. Sau hơn 2 tiếng vật lộn thì mình cũng tìm ra được cách để lên được quyền administrator của Window Server này:
- privilege escalation: 21h45' => 10 point
Vậy là bây giờ mình đã có full 100/100 điểm, trừ thời gian thực tế nghỉ ngơi thì mình mất khoảng 8 tiếng để hoàn thành tất cả bài thi, cảm giác lúc đấy sướng điên vì không những pass mà là pass với full điểm thật sự nó là một cái gì đấy khó tả vãi. Mình lúc này có thể kết thúc bài thi được luôn nhưng vì sợ nhỡ đâu thời gian làm report sẽ bị tính luôn vào ngay sau khi kết thúc thì mình sẽ lỗ mất thời gian đó. Mình quyết định xin nghỉ để đi ăn cơm, đi ngủ và tới 8h sáng ngày 10/8 mình quay lại phòng và báo kết thúc bài thi. Lúc này VPN sẽ bị ngắt, mình không thể truy cập vào hệ thống được nữa cho nên trong quá trình hack trước đó thì mình sẽ phải note và capture ảnh lại toàn bộ các step mỗi khi chiếm được Machine nào đó rồi. Phiên giám sát của proctor cũng sẽ ngắt kết nối, mình ngồi làm report và submit cho họ trước 8h ngày 11/8 là được. Report của mình tổng 70 trang bằng word, export sang pdf và nén lại bằng 7z. Sau khi upload lên portal dành cho upload report thì Offsec sẽ tính toán mã md5 để cho mình kiểm tra lại, đảm bảo file không bị lỗi trong quá trình upload. Sau 3 ngày thì mình nhận kết quả pass chứng chỉ này. Về độ khó, mình thấy khó hơn so với OSCP-A-B-C Lab trong PEN-200 course và có nhiều kỹ thuật trong PEN-200 course chưa hề gặp bao giờ cho nên luyện kĩ năng thích ứng với bất kì application/service nào mới là cực cần thiết. Nếu cần hỏi gì về kinh nghiệm thi cử thì connect với mình qua linkedIn: https://www.linkedin.com/in/toàn-lê-ngọc-3251a6240