Series Re-Search: Hướng dẫn người mới trở thành Security Re-Searcher
Đã lâu lắm rồi rồi mình chả viết blog/writeup cái gì. Một phần có làm thì cũng chỉ là sharing nội bộ trong công ty, tổ chức vì viết linh ta linh tinh trên internet sợ bị ăn chửi quá. Nhưng mà dở một cái là mình lại động viên members trong team là cứ viết blog đi, coi như take note rồi sau này có đi phỏng vấn chỗ khác thì còn có cái xạo quần :D Cơ mà đâu ai ngờ, mấy con gà do mình đào tạo lên nó giãy đành đạch bật lại “Anh có viết cái beep gì đâu mà tụi em viết”. Chợt nhận ra rằng, mình phải làm gương cho tụi nó! Chưa biết viết gì méo biết nhưng cứ viết trước đã, rồi chắc blog sẽ cải thiện dần dần.
Như tiêu đề, bài mở đầu sẽ là bài lùa gà, hướng dẫn và chỉ ra những yếu tố cần thiết để bác bạn beginner có thể tiếp cận với chiếc role “Re-searcher” trong lĩnh vực Security này, bởi đây cũng là một trong những công việc mình yêu thích và có kinh nghiệm guide các bạn trong team mình trước đây.
I. Vậy làm Security Re-Searcher là gì?
RE-Searcher là một người tìm kiếm đi tìm kiếm lại PoC (mã khai thác) trên internet đó các bạn. :>
Thực ra đó chỉ là một kiểu chơi chữ cà khịa mà mọi người hay thấy trên tweeter khi ai đó public mã khai thác, blog của những lỗ hổng mới để họ đi cào bug bounty mà thôi.
Còn theo mình, Security Researcher thì cũng là một Security Engnieer bình thường và họ có kỹ năng, kiến thức và định hướng đầu tư thời gian trong việc nghiên cứu chuyên sâu nhiều hơn. Còn nghiên cứu về gì? Có thể là về tìm kiếm lỗ hổng bảo mật, kỹ thuật tấn công trên các ứng dụng, framework, protocol nâng cao hơn… .rất rất nhiều thứ trong lĩnh vực bảo mật này.
Thường thì mình hay đánh đồng là mấy anh em hay đi tìm 0day, 1day, nday… là Security Researcher nhưng thực sự chính xác, cụ thể hơn thì họ đang là một Vulnerability Security Researcher.
( Trong series này mình sẽ nói về Vulnerability Security Research nên nếu chỗ nào mình nói làm research, hay security researcher mà không nhắc đầy đủ thì các bạn tự hiểu nhé vì nó dài quá)
II. Những yếu tố giúp bạn trở thành Security Researcher?
Trước tiên là bạn phải làm trong lĩnh vực ATTT đã, rồi sau đó chúng ta sẽ bàn về các yếu tố sau:
Yếu tố chủ quan:
- Kiến thức:
Có thừa không nhỉ, khi làm gì mà chả cần kiến thức. Đúng vậy, nhưng để làm Research thì lượng kiến thức của bạn không chỉ nhiều mà còn phải rất sâu nữa, sâu thì mới xào chẻ được nhiều kiểu tấn công, nhiều kiểu bypass chứ. Và kiến thức này mình sẽ cung cấp cho bạn những điều tối thiểu ở những phần sau nhé, nói chung là đủ để có thể giúp bạn reproduce lại các bug nday đã có PoC trên một vài product nổi tiếng hay có thể là một vài cái 1day cơ bản chắc cũng được, chờ nhé. - Đam mê:
Đầu tiên, “Research” là một cái kỹ năng mà mình nghĩ ai làm Engineer cũng phải có, không ít thì nhiều vì như vậy bạn mới phát triển lên được. Tuy nhiên, đã là nghiên cứu thì phải làm chuyên sâu, những bạn nào yêu thích tìm hiểu root cause của lỗ hổng, sau đó cải thiện, biến đổi, chế cháo nó thành một “vũ khí” lợi hại hơn, thì đây là một lĩnh vực phù hợp với bạn.
Ngoài ra, bạn phải chấp nhận được việc đôi khi cho dù bạn đã cố gắng hết sức nhưng cũng làm không ra được kết quả gì. Và chỉ khi có đam mê, thì bạn mới không nản mà bỏ cuộc được! - Sự kiên định:
Đôi khi bạn tự hỏi không biết ràng mình đi theo hướng phân tích này có đúng hay không, nên deep dive vào chỗ này hay chỗ kia?. Hay là đang reproduce cái CVE thì thằng bạn nó đập vào mặt bạn cái bug IDOR nó mới kiếm được 10k $ chẳng hạn, khi đó bạn có nghĩ là thôi bỏ m* đi, qua làm blackbox kiếm bug bounty cho rồi. Nếu bạn không kiên định với con đường bạn đã chọn, rất khó để đi được tới đích.
Yếu tố khách quan:
- Môi trường:
Ở Việt Nam, rất ít công ty cho bạn môi trường để tập trung research fulltime mà thay vào đó, bạn sẽ phải làm nhiều công việc để phục vụ cho công ty nhiều hơn. Research chỉ là 1 cái để hỗ trợ cho bạn pentest mà thôi. Vì vậy, bạn phải tự dành thời gian cá nhân ra để tập trung cho việc nghiên cứu này, hoặc nếu bạn đang được công ty dành thời gian để research, thì đó là một điều đáng trân trọng đấy. - Mentor/ người hướng dẫn:
Khi bạn bước chân vào lĩnh vực này, sẽ có nhiều lúc bạn cần một người cho bạn những ý kiến, những giải pháp để bạn có thể làm tốt và tự tin vào hướng mình đang đi hơn. Một người mentor tốt, có tầm nhìn và kinh nghiệm sẽ giúp bạn trải qua được những giai đoạn khó khăn khi rơi và ngõ cụt hay sẽ động viên bạn bước tiếp để đến được đích, và thạm chí đơn giản hơn họ có thể đánh giá xem “bạn nên dừng lại hay không?”, bởi vì đôi lúc bạn chày cối quá mà không ra output gì thì cũng là lãng phí thời gian và công sức. - Đồng nghiệp:
“Muốn đi nhanh thì đi một mình muốn đi xa thì đi cùng nhau”
Đúng vậy, nếu bạn đang làm trong một team mà ai cũng đam mê nghiên cứu các lỗ hổng bảo mật phức tạp, bạn sẽ cảm thấy được kích thích và ganh đua nhau làm hơn. Chưa kể khi gặp những vấn đề khó giải quyết, sẽ có người trao đổi và đưa ra những idea để bạn có thể thử. Dù sao thì cũng có người để bạn chia sẻ, đỡ rơi vào cảnh betak mà không biết nói cùng với ai.
III. Lợi ích của làm Research?
Khó khăn là vậy, nhưng làm research cũng giống với các mảng khác, nó sẽ mang lại cho bạn những thứ như:
- Niềm vui
Khi bạn làm ra được một cái gì đó mới, như là reproduce được 1 cái 1day, 0day gì đó, bạn đã thu thập được rất nhiều kiến thức mới, trick lỏ mới khi reproduce… và có lẽ đối với 1 “researcher" thì niềm vui nó cũng chỉ đơn giản vậy. Có kiến thức, vượt qua được thử thách bản thân và tâm huyết mình dồn vào nó ra kết quả. Nó rất là thỏa mãn đấy! - Sự tôn trọng từ cộng đồng
Khi bạn tìm ra 1 cái 0day hay writeup 1 cái blog 1day phân tích về lỗ hổng đó đi, bạn sẽ được nhiều người biết đến hơn vì bạn đang đóng góp cho cộng đồng. Bạn đang chia sẻ những kiến thức đó cho những anh em, những người làm security khác và mình chắc chắn luôn sẽ có rất nhiều người respect vì những đóng góp đó của bạn đây. - Tiền
Cũng như bug bounty, các lỗ hổng 0day với những vendor có tiếng, bạn cũng sẽ được một khoản tiền thưởng nhất định. Chưa kể, bạn có thể sử dụng 0day hoặc CVE 1day mà bạn mới reproduce ( unauthen chẳng hạn) đó và đi scan các target bug bounty. Đây cũng là một cách kiếm tiền của các researcher đó. - Phục vụ cho công việc
Ngoài ra, trong quá trình pentest, bạn có thể gặp một vài target mà có CVE chưa có public PoC chẳng hạn. Lúc này, dành thời gian research và reproduce lỗ hổng nó, đi khai thác trên ứng dụng đó của công ty. Sếp đánh giá cao bạn, công việc thăng tiến… Hehee, đây cũng là lý do mà bên mình vẫn được sếp tạo điều kiện dành thời gian đi research.
IV. Lộ trình để trở thành Security Researcher.
Thực tế thì các bọn có thể coi đây là 1 option để đi theo nếu chưa xác định được mình nên bắt đầu như thế nào, bởi giáo án này đã được apply cho team mình và cũng có một vài output nhất định.
(Ở mục này, mình nghĩ viết dưới dạng một checklist không giải thích dài dòng có lẽ sẽ tiếp cận với mọi người tốt hơn, nên mình đã làm vậy_)
- Xác định ngôn ngữ lập trình và CODE đi…
Code ứng dụng lỗi -> tự khai thác!
Ví dụ, bạn muốn khai thác lỗ hổng bảo mật các nền tảng đang được viết bằng Java, thì hãy học code nó, code một cái project gì đó nhỏ thôi cũng được, như là một cái website bán hàng, hay booking khách sạn…blabla
Và khi code, hãy tự tạo ra vulnerability trong đó, frontend thì code sao cho ra XSS, backend thì code các tính năng tồn tại các lỗ hổng server side như ssrf, command ịnection, java deserialzation…Sau khi hoàn thành, hãy tự khai thác nó.
Dành 1 2 tháng để làm chuyện này! Nghe có vẻ nhàm chán nhưng tin mình đi, nó thực sự thực sự mang lại value rất nhiều cho bạn trong quá trình sau này đó.
2. Dựng lại n-day
→ Dựa vào blog/wu đã có để phân tích.
→ Tuy nhiên hãy “Đặt câu hỏi tại sao” tác giả nó tìm được bug ở đây, suy nghĩ như mindset đang tìm bug.
→ Sau khi phân tích xong, mỗi CVE nó sẽ ra 1 cái “pattern” function lỗi hay hên nữa thì “var” vào vulnerability function gần đó.
→ Có thể search lại trong code của product đó -> ra được cái 0day khác tương tự .
3. Dựng lại 1 day ( lỗ hổng chưa có PoC)
→ Phân tích description, phân tích bản patch ( diff patch)
→ Tìm hiểu sản phẩm đó, sử dụng để biết các tính năng.
→ Dựa vào bản patch để có thể suy đoán hoặc trace code để tìm ra tính năng bị lỗi.
→ Đủ khả năng thì viết exploit. Không đủ -> hóng writeup để cải thiện thêm.
+ Sau khi có payload -> đi cào
+ Hoặc tương tự nday -> search pattern kiếm 0day trên production đó.
4. Kiếm 0day
Tổng hợp từ bước thứ 2 và 3:
→ Reproduce 1day, nday kiếm parttern hoặc vô tình “var” phải điểm G bị lỗi khác.
→ Sử dụng tool để tìm ra điểm bị lỗi ( sink).
→ Hoặc kết hợp cả blackbox và source code review để kiếm bug.
+ Sau khi có exploit-> đi cào.
Đây cũng chỉ là góc nhìn cũng như kinh nghiệm cá nhân của mình, nếu bạn thấy nó có thể giúp được bạn phần nào thì xin 1 cái clap để động lực mình viết tiếp những bài khác nhé.
Chắc những bài sau mình sẽ viết về TipAndTrick trong quá trình reproduce các lỗ hổng thôi. Cheers.
======================
Update:
Phân tích n-day:
https://sonnguy3n.medium.com/series-re-search-reproduce-n-day-with-cve-2019-0227-expired-domain-to-remote-code-execution-in-41ef512992c3
Phân tích 1-day:
https://medium.com/@sonnguy3n/series-re-search-reproduce-1-day-with-only-static-source-code-review-3350de7656a9