Pwnable Roadmap

By admin, May 2, 2020

👉 Mở đầu

Chào mừng các bạn đến với bài viết của mình, mình là @chung96vn. Chia sẻ một chút về con đường sự nghiệp của mình. Ngày trước chưa bao giờ mình nghĩ là sẽ theo đuổi ngành ATTT mà theo vào đó là CNPM hoặc KHMT. Tuy nhiên dòng đời xô đẩy và số phận đã đưa mình đến với ngành ATTT. Mình đã trải qua một quãng thời gian đầu đầy vất vả. Mình không có điều kiện tốt như những người bạn khác là được đi thực tập, được training bởi các anh đi trước mà mình phải tự tìm hiểu, tự học bằng tất cả những gì mình có thể. Mình tự học qua CTF, qua các trang web như root-me, pwnable.tw, pwnable.kr, reverse.kr,…. Có những lúc mình rơi vào bế tắc và rồi lại tìm được một tia nắng cuối con đường. Mình không giống như nhiều anh em khác là đi theo một con đường từ đầu tới cuối, mình đã bắt đầu với crypto và kế tiếp là reverse rồi mình bén duyên với pwnable (cái mà mình thấy hợp và phát huy hết được khả năng của mình) xong cuối cùng lúc đi làm mình lại làm nhiều về web application security.

Trước khi đi vào Roadmap thì mình muốn nhấn mạnh lại một điều là những gì mình viết dưới đây phần lớn là kinh nghiệm của bản thân mình, là những gì mình đã trải qua để có được ngày hôm này, có thể nó không đúng với cá nhân các bạn. Mình cũng cố gắng đi tham khảo thêm các thông tin từ những người anh em xã hội khác của mình trước khi viết bài này nên mình nghĩ bài viết này sẽ giúp được các bạn nếu các bạn thực sự cố gắng. Sẽ chẳng có con đường nào dành cho những người lười nhác hoặc không làm mà muốn ăn cả.

Hình ảnh này biết nói

👶 Beginner level

Đầu tiên nếu như bạn đang chưa biết gì và muốn tìm hiểu về mảng pwnable này mình nghĩ bạn cần phải nhìn lại bản thân mình đang có những kiến thức gì và thiếu gì. Bạn có thể xem những thứ mình liệt kê dưới đây để có thể đánh giá một cách chính xác nhất về bản thân mình hiện tại.

Đừng lo nếu bạn chưa biết những thứ đó, hãy bắt tay vào học nó ngay khi bạn còn có thể. Mình sẽ không đi quá chi tiết vào học từng cái như nào bởi mình nghĩ trên mạng đang có rất nhiều mà mình chỉ đưa ra một số gợi ý theo cá nhân mình thấy nó khá là basic để ai cũng có thể học đc.

  • 👉Đầu tiên là kỹ năng lập trình, với pwner thì kỹ năng lập trình quan trọng nhất là C/C++ bên cạnh đó còn cần một chút kỹ năng lập trình assemble:
  • 👉Kế đến là kiến thức về hệ điều hành để có thể hiểu được cách mà một chương trình được khởi chạy trên hệ thống, cách quản lý, cấp phát bộ nhớ của hệ điều hành: 
  • 👉 thứ quan trọng nữa là kỹ năng dịch ngược phần mềm (reverse). Mình sẽ không nói bởi đã có roadmap về reverse rồi. Với một pwner bản thân mình thấy kỹ năng reverse là rất quan trọng, điều đó sẽ quyết định bạn có đi xa được trong lĩnh vực này hay không.
  • 👉Sử dụng thành thạo các công cụ debugger (gdb, pwndbg, gdb-peda, windbg, lldb, x32dbg, x64dgb,…).
  • 👉Sử dụng các công cụ hỗ trợ như: ROPGadget, pwntools,…
  • 👉Và cuối cùng là tìm hiểu về các lỗ hổng bảo mật trong lập trình phần mềm và cách thức khai thác nó:

Ngoài việc tìm hiểu lý thuyết thì thực hành là một cái gì đó vô cùng quan trọng, nó quyết định đến kết quả việc mà bạn đang cố gắng theo đuổi. Bởi lẽ lý thuyết thôi là không bao giờ đủ:

  • 👉Với những bạn mới bắt đầu thì mình nghĩ root-me là một trang web thực hành rất hữu ích bởi nó có đầy đủ các challenge từ cơ bản đến nâng cao, từ khó đến dễ. Với level này mình nghĩ các bạn chỉ cần hoàn thành khoảng 20 challenge đã là thành công rồi.
  • 👉Có lẽ pwnable.tw là một trang web mà ko một pwner nào là không biết đến nó, ở đó có đầy đủ các challenge với nhiều mức độ, mỗi challenge sử dụng một đến nhiều kỹ thuật ở các mức độ khó dễ khác nhau. Tuy nhiên ở level này thì các bạn chỉ cần hoàn thành được các challenge có điểm <= 200 là một kết quả khả quan.
  • 👉Ngoài ra chơi CTF với các challenge pwnable là một hình thức không thể tuyệt vời hơn.

👦 Advanced level

Sau khi hoàn thành phần dành cho Beginner thì các bạn sẽ tiếp tục đế với phần dành cho những người thực sự muốn đi sâu hơn và xa hơn trong cái lĩnh vực này. Ở phần này mình nghĩ cần phải trang bị thêm những kiến thức chuyên sâu và sát với thực tế hơn, không còn là những kiến thức cơ bản và dễ hiểu như phần trước nữa. Để bắt đầu phần này hiển nhiên là các bạn phải hoàn thành mục tiêu đề ra của level beginner rồi.

Về những kiến thức cần tìm hiểu trong phần này mình có liệt kê ra một số thứ mà mình đã học được và thấy nó hoàn toàn hữu dụng đối với mình trong quãng thời gian từ trước đến giờ.

  • 👉Đầu tiên vẫn cần phải tiếp tục thực hành các challenge về Buffer Overflow, Format String với mức độ nâng cao hơn.
  • 👉Bắt đầu tìm hiểu các lỗi liên quan đến bộ nhớ đệm heap bằng cách giải các challenge liên quan đến heap trên pwnable.tw kết hợp với đọc how2heap.
  • 👉Nghiên cứu các cách thức bypass mitigation (NX, ASLR, stack canary, PIE, RELRO,…)
  • 👉Làm quen với các công cụ hỗ trợ mới như: one_gadget, checksec
  • 👉Luyện kỹ năng viết shellcode bằng cách thực hành các challenge liên quan đến shellcode.
  • 👉Nắm các kiến thức về system call, sử dụng thành thạo 1 số syscall cơ bản như sys_execve, sys_open, sys_read, sys_write, sys_mprotect, sys_mmap, sys_socket, sys_dup2

Về phần thực hành, các bạn nên tiếp tục làm các challenge trên các trang mình đã đưa và cố gắng hoàn thành được nhiều challenge nhất có thể.

👱‍♂️ Gosu level

Thực sự mà nói để đạt đến tầm “Gosu” thì mình cũng chưa thể đạt được. Tuy nhiên mình cũng có cách lựa chọn hướng đi cho riêng mình để có thể đạt được một cái gì đó. Dưới đây là ý kiến mình nêu ra dựa vào kinh nghiệm hạn hẹp của bản thân, nó không thể giúp các bạn trở thành “Gosu” nhưng mình nghĩ nó sẽ giúp được các bạn biết cách chọn cho mình một con đường đi để trở thành “Gosu”.

Có một điều mình muốn nói trước đó là theo mình biết thì ở Việt Nam hiện nay không có nhiều công ty, tổ chức cho phép các cá nhân ngồi làm nghiên cứu exploit fulltime, chính vì thế nếu bạn xác định theo đuổi đam mê này thì nên chọn cho mình những hướng sau đây:

  • 👉Chọn một công việc làm về security ở Việt Nam và research trong thời gian rảnh. Nó sẽ ít áp lực hơn nhưng sẽ không hiệu quả bằng việc bạn được làm trong một tổ chức với nhiều người đã có kinh nghiệm về việc này.
  • 👉Cách còn lại là try hard và tìm kiếm cho mình cơ hội làm việc ở một công ty nào đó làm thuần về nghiên cứu exploit ở Việt Nam hoặc nước ngoài. Con đường này khó khăn nhưng có lẽ các bạn sẽ có một tương lai tốt hơn.

Quay trở lại vấn đề là làm sao để trở thành “Gosu” thì mình xin đưa ra những lời khuyên đến từ kinh nghiệm cá nhân của mình dành cho các bạn.

Đầu tiên là việc lựa chọn một target phù hợp với bản thân. Bạn có thể lựa chọn một trong số những target sau hoặc bên ngoài đó nữa miễn sao bạn thấy nó phụ hợp với kiến thức nền tảng của bản thân bạn hiện tại.

  • 👉IOT (Router, Camera,…)
  • 👉Open source (exim, linux kernel,…)
  • 👉Browser (chrome, firefox, safari,…)
  • 👉Hypervisor
  • 👉Windows (Kernel, Software)
  • 👉Virtualization (Virtualbox, VMware, …)
  • 👉…

Sau khi đã lựa chọn được cho mình một target phù hợp với kiến thức và kinh nghiệm của bản thân, thì lúc này kỹ năng quan trọng nhất đó là kỹ năng sử dụng google, kỹ năng tìm kiếm của các bạn. Bạn cần phải tìm những bài viết, blog, write-up của các chuyên gia trên thế giới viết về cái target mà bạn muốn hướng tới. Từ đó hiểu được cách mà thế giới họ đang làm rồi tự đưa ra một cách làm của riêng bạn. Đến đây thì tôi hay bất kỳ ai khác đều không thể giúp các bạn được nữa.

Thêm một chút góp ý từ anh @quangnh89 nữa là cần follow một target đủ lâu thì mới hy vọng có kết quả vì công việc này rất dễ nản.

Thanks

Cảm ơn các bạn đã đọc và chúc các bạn thành công trên con đường mà mình đã chọn.

Nếu có thắc mắc gì hãy inbox cho tôi qua fb (@chung96vn) hoặc twitter (@chung96vn)

Thank anh @phieulang & @quangnh89 đã support và góp ý cho bài viết này.

One Comment

  1. Vũ Hải Đăng says:

    vô cùng cảm ơn anh vì những điều anh đã chia sẻ. Nó rất cần thiết cho newbie như bọn em

Leave a Comment to Vũ Hải Đăng

Leave a Reply to Vũ Hải Đăng Cancel reply

Your email address will not be published. Required fields are marked *

-->