-
06/07/2013
-
797
-
1.308 bài viết
Làm thế nào để khai thác lỗi phần mềm?
Đã từ lâu, kỹ thuật tận dụng các lỗi phần mềm được coi như là ma thuật của các hacker. Làm thế nào mà họ có thể tìm ra lỗi của một chương trình và khai thác nó? Bài viết này sẽ giúp cho các bạn có thể biết được: cần chuẩn bị những kiến thức gì để có thể tìm và khai thác lỗi phần mềm. Đồng thời bài viết được xem như là một bộ khung của giáo trình “tìm và tận dụng lỗi phần mềm”.
Bài viết được dựa trên nội dung của bài “From 0x90 to 0x4c454554, a journey into exploitation”
Cấu trúc của bài viết được chia nhỏ ra các phần một cách rõ ràng để mọi người có thể dễ dàng hơn trong quá trình học và nghiên cứu về khai thác lỗi phần mềm. Để thuận tiện cho quá trình nghiên cứu và học tập, Các bạn phải hoàn thành từng “chỉ mục” trước khi bước qua “chỉ mục” tiếp theo.
Ngoài ra còn một vài bài viết tiếng anh quan trọng khác các bạn nên đọc:
- Làm thế nào để phá vỡ stack
- Các dự án tổng hợp tài liệu về bảo mật
Phần 1: Kiến thức lập trình (Programming)
Chỉ mục 1: Hoàn thành quá trình này trước khi đọc cuốn sách "Hacking Art of exploitation"
Khi bước chân vào con đường IT môn học tiên quyết bao giờ cũng là lập trình! Trong bảo mật nói chung và việc khai thác lỗi phần mềm nói riêng thì việc biết lập trình trở nên rất quan trọng bởi vì nếu bạn không có kiến thức về lập trình thì làm sao bạn có thể biết điểm yếu của một chương trình thường xuất hiện ở đâu? Nếu không có kiến thức lập trình thì làm sao bạn có thể đọc hiểu code để mà khai thác lỗi? ...
Ngoài ra lập trình còn giúp bạn viết một số tool cho nhu cầu của riêng bạn, hay viết các đoạn mã khai thác lỗi … Dưới đây là một số ngôn ngữ lập trình phổ biến và hữu ích:
Python: Đây là một ngôn ngữ mạnh mẽ, dễ dùng và rất nhiều tài liệu hướng dẫn. Đặc biệt đây còn là ngôn ngữ lập trình mà các hacker rất yêu thích và nó thường được sử dụng để khai thác lỗi phần mềm.
Tài liệu tiếng anh:
- Wikibooks Python
- Một vài ebook miễn phí
- Grey hat Python
Tài liệu tiếng Việt:
- http://www.vithon.org/
Ruby: Đây là ngôn ngữ chủ yếu được dùng để viết các Exploit cho Công cụ Metasploit. Cho nên đây cũng là một ngôn ngữ rất tốt để bắt đầu học khai thác lỗi phần mềm.
Tài liệu:
- Wikibooks Ruby
- Little Book Of Ruby
- Ruby Programmers Guide
- Một vài ebook miễn phí
Perl: Đây là một ngôn ngữ lâu đời nhưng vẫn còn rất nhiều người sử dụng, Nó là một trong những ngôn ngữ kịch bản (scripting languages) hữu dụng nhất và có rất nhiều exploit dùng đến nó.
Tài liệu:
-O'Reilly Learning Perl
- Một vài tài liệu miễn phí
C/C++: Đây là một ngôn ngữ lập trình cực kỳ quan trọng, nó giúp cho bạn hiểu được bạn khai thác cái gì? Và bắt đầu khai như thế nào? Bạn không cần hiểu hết tất cả, nhưng khi hoàn thành phần này bạn có kiến thức tốt về lập trình C/C++. Đây cũng là ngôn ngữ lập trình được giảng dạy trong hầu hết các trường đại học ở Việt Nam hiện nay, vì thế tài liệu tiếng Việt rất đa dạng và phong phú. Dưới đây là một vài tài liệu cơ bản cần nắm vững.
Tài liệu:
- Cprogramming.com
- C Tutorial
- Beej's Guide to C Programming
- Một vài ebook miễn phí
X86 Assembly: Tiếp theo chúng ta phải hiểu được máy tính đọc cái gì khi ta biên dịch C/C++. Chúng ta nên tập trung vào ngôn ngữ Assembly IA-32 (x86). Một vài tài liệu dưới đây được trình bày khá hay.
Tài Liệu:
- Skullsecurity: Assembly
- Windows Assembly Programming Tutorial
- http://en.wikibooks.org/wiki/X86_Assembly
- The Art of Assembly
- Assembly primer for hackers
- PC Assembly Language
Windows Programming: Lập trình windows giúp cho chúng ta hiểu được chương trình của chúng ta và cấu trúc của các thư viện hoạt động với hệ điều hành như thế nào. Những kiến thức này cực kỳ quan trọng về sau khi ta tiến hành khai thác lỗi phần mềm trên Windows.
Tài liệu:
- Windows Programming
- Windows API Tutorial
- Windows Sysinternals
- Windows Internals 4
Disassembly: Disassembly không hẳn là lập trình, Nó trình bày những gì máy tính hiểu và tính toán thông qua CPU và bộ nhớ . Đây là một kỹ năng mà chúng ta cần nắm vững.
Tài liệu:
- http://en.wikibooks.org/wiki/X86_Disassembly
- The Art of Disassembly
Ngoài các kiến thức lập trình trên bạn còn phải sử dụng thành thạo Windows cũng như Linux, nó giúp ích rất nhiều cho quá trình nghiên cứu và tận dụng lỗi phần mềm.
Phần 2: Bắt đầu quá trình tìm và khai thác lỗi
Sau khi tìm hiểu phần 1, bạn đã có nắm vững kiến thức về lập trình và những gì máy đang thực hiện mà chúng ta có thể can thiệp trực tiếp vào – Khai thác lỗi
Phần này gồm rất nhiều bài học được tổng hợp dưới các link sau:
Chỉ mục 2 – Hoàn thành việc chuẩn bị kiến thức các phần sau trước khi kết thúc phần 2
Đọc một vài bài viết đầu tiên tại Blog http://blog.ksplice.com/2010/03/ có nhiều thông tin hữu ích.
Một vài bài viết tại blog http://www.nullthreat.net/ giúp ích rất nhiều cho quá trình trở thành một người kiểm tra lỗi phần mềm.
Đây là danh sách các công cụ cần thiết và rất hữu dụng:
Và dưới đây là những bài viết của Corelan về cách sử dụng chúng trong việc khai thác lỗi. Các bài viết sẽ được cập nhật thêm sau:
Phần 4 – Kiến thức về mạng và Metasploit
Kiến thức về mạng là một phần rất quan trọng trong việc khai thác lỗi phần mềm, nếu có kiến thức tốt về mạng và lập trình mạng bạn có thể khai thác lỗi thông qua mạng LAN hay internet và có thể chiếm quyền và điều khiển máy tính từ xa.
Phần này chúng ta sẽ tìm hiểu cách viết shellcode để khai thác lỗi
Chỉ mục 3: Cần ghi nhớ phần này để tham khảo và sử dụng trong quá trình reverse
Phần 7 – Bắt đầu tìm hiểu sâu hơn về tràn bộ đệm (Buffer overflow)
Để nắm vững phần này các bạn nên thực hành nhiều để hiểu rõ vấn đề, Các bạn hãy tìm một vài exploit cũ tại http://www.exploit-db.com/ tải về thực hành, nắm vững cách thức hoạt động của nó, và viết lại nó theo cách của bạn.
A – Ngăn chặn lỗi tràn bộ đệm
Và một trang wargame khá hay nữa đó là http://www.smashthestack.org/
Phần 8 – Heap Overflow
Phần 9 – Danh sách các trang web cung cấp exploit
Hãy thường xuyên truy cập vào các trang web dưới đây để tìm kiếm và tải về các exploit mới nhất để nghiên cứu
Để trở thành một chuyên gia khai thác lỗi phần mềm bạn phải thường xuyên tìm kiếm và khai thác lỗi phần mềm, có thể là một wargame hay là một ứng dụng nào đó trên máy tính của bạn. Trong quá trình luyện tập bạn sẽ đúc rút ra được những kinh nghiệm quý giá cho bản thân.
Do tài liệu về mảng này trên mạng cũng không nhiều và khá rời rạc, cho nên bài viết trên tổng hợp lại những tài liệu và địa chỉ hữu ích cho các bạn có thể tham khảo. Chính vì tài liệu có từ rất nhiều nguồn khác nhau nên, nếu chỉ tổng hợp các bài viết thành một file pdf thì không thể đảm bảo được sự liền mạch và khoa học của một tài liệu. Để tổng hợp và viết lại thành một giáo trình hoàn chỉnh đòi hỏi thời gian và kiến thức sâu về từng mục.
---
Bài viết được tổng hợp và tham khảo từ bài viết của tác giả Ky0
Bài viết được dựa trên nội dung của bài “From 0x90 to 0x4c454554, a journey into exploitation”
Cấu trúc của bài viết được chia nhỏ ra các phần một cách rõ ràng để mọi người có thể dễ dàng hơn trong quá trình học và nghiên cứu về khai thác lỗi phần mềm. Để thuận tiện cho quá trình nghiên cứu và học tập, Các bạn phải hoàn thành từng “chỉ mục” trước khi bước qua “chỉ mục” tiếp theo.
Ngoài ra còn một vài bài viết tiếng anh quan trọng khác các bạn nên đọc:
- Làm thế nào để phá vỡ stack
- Các dự án tổng hợp tài liệu về bảo mật
Phần 1: Kiến thức lập trình (Programming)
Chỉ mục 1: Hoàn thành quá trình này trước khi đọc cuốn sách "Hacking Art of exploitation"
Khi bước chân vào con đường IT môn học tiên quyết bao giờ cũng là lập trình! Trong bảo mật nói chung và việc khai thác lỗi phần mềm nói riêng thì việc biết lập trình trở nên rất quan trọng bởi vì nếu bạn không có kiến thức về lập trình thì làm sao bạn có thể biết điểm yếu của một chương trình thường xuất hiện ở đâu? Nếu không có kiến thức lập trình thì làm sao bạn có thể đọc hiểu code để mà khai thác lỗi? ...
Ngoài ra lập trình còn giúp bạn viết một số tool cho nhu cầu của riêng bạn, hay viết các đoạn mã khai thác lỗi … Dưới đây là một số ngôn ngữ lập trình phổ biến và hữu ích:
Python: Đây là một ngôn ngữ mạnh mẽ, dễ dùng và rất nhiều tài liệu hướng dẫn. Đặc biệt đây còn là ngôn ngữ lập trình mà các hacker rất yêu thích và nó thường được sử dụng để khai thác lỗi phần mềm.
Tài liệu tiếng anh:
- Wikibooks Python
- Một vài ebook miễn phí
- Grey hat Python
Tài liệu tiếng Việt:
- http://www.vithon.org/
Ruby: Đây là ngôn ngữ chủ yếu được dùng để viết các Exploit cho Công cụ Metasploit. Cho nên đây cũng là một ngôn ngữ rất tốt để bắt đầu học khai thác lỗi phần mềm.
Tài liệu:
- Wikibooks Ruby
- Little Book Of Ruby
- Ruby Programmers Guide
- Một vài ebook miễn phí
Perl: Đây là một ngôn ngữ lâu đời nhưng vẫn còn rất nhiều người sử dụng, Nó là một trong những ngôn ngữ kịch bản (scripting languages) hữu dụng nhất và có rất nhiều exploit dùng đến nó.
Tài liệu:
-O'Reilly Learning Perl
- Một vài tài liệu miễn phí
C/C++: Đây là một ngôn ngữ lập trình cực kỳ quan trọng, nó giúp cho bạn hiểu được bạn khai thác cái gì? Và bắt đầu khai như thế nào? Bạn không cần hiểu hết tất cả, nhưng khi hoàn thành phần này bạn có kiến thức tốt về lập trình C/C++. Đây cũng là ngôn ngữ lập trình được giảng dạy trong hầu hết các trường đại học ở Việt Nam hiện nay, vì thế tài liệu tiếng Việt rất đa dạng và phong phú. Dưới đây là một vài tài liệu cơ bản cần nắm vững.
Tài liệu:
- Cprogramming.com
- C Tutorial
- Beej's Guide to C Programming
- Một vài ebook miễn phí
X86 Assembly: Tiếp theo chúng ta phải hiểu được máy tính đọc cái gì khi ta biên dịch C/C++. Chúng ta nên tập trung vào ngôn ngữ Assembly IA-32 (x86). Một vài tài liệu dưới đây được trình bày khá hay.
Tài Liệu:
- Skullsecurity: Assembly
- Windows Assembly Programming Tutorial
- http://en.wikibooks.org/wiki/X86_Assembly
- The Art of Assembly
- Assembly primer for hackers
- PC Assembly Language
Windows Programming: Lập trình windows giúp cho chúng ta hiểu được chương trình của chúng ta và cấu trúc của các thư viện hoạt động với hệ điều hành như thế nào. Những kiến thức này cực kỳ quan trọng về sau khi ta tiến hành khai thác lỗi phần mềm trên Windows.
Tài liệu:
- Windows Programming
- Windows API Tutorial
- Windows Sysinternals
- Windows Internals 4
Disassembly: Disassembly không hẳn là lập trình, Nó trình bày những gì máy tính hiểu và tính toán thông qua CPU và bộ nhớ . Đây là một kỹ năng mà chúng ta cần nắm vững.
Tài liệu:
- http://en.wikibooks.org/wiki/X86_Disassembly
- The Art of Disassembly
Ngoài các kiến thức lập trình trên bạn còn phải sử dụng thành thạo Windows cũng như Linux, nó giúp ích rất nhiều cho quá trình nghiên cứu và tận dụng lỗi phần mềm.
Phần 2: Bắt đầu quá trình tìm và khai thác lỗi
Sau khi tìm hiểu phần 1, bạn đã có nắm vững kiến thức về lập trình và những gì máy đang thực hiện mà chúng ta có thể can thiệp trực tiếp vào – Khai thác lỗi
Phần này gồm rất nhiều bài học được tổng hợp dưới các link sau:
- Smash the stack for fun and profit (Phrack 49)
- C function call conventions and the stack
- Anatomy of a program in memory
- Function Calls, Part 1 (the Basics)
- IA-32 Architecture
- Video Code Audit
- Hacking art of exploitation [Chapter 1&2]
- Exploit writing tutorial part 1 : Stack Based Overflows
- Exploit writing tutorial part 2 : Stack Based Overflows – jumping to shellcode
Chỉ mục 2 – Hoàn thành việc chuẩn bị kiến thức các phần sau trước khi kết thúc phần 2
Đọc một vài bài viết đầu tiên tại Blog http://blog.ksplice.com/2010/03/ có nhiều thông tin hữu ích.
Một vài bài viết tại blog http://www.nullthreat.net/ giúp ích rất nhiều cho quá trình trở thành một người kiểm tra lỗi phần mềm.
- The Stack-based Buffer Overflow Vulnerability and Exploit Experimental Demonstration
- The Tao of Windows Buffer Overflow
- How do buffer overflow attacks work?
- Buffer Overflows
- Video Buffer overflow Primer
- Shellcoder's Handbook Ch1&2
- Hacking art of exploitation [Chapter 3]
- Exploit writing tutorial part 3 : SEH Based Exploits
- Exploit writing tutorial part 3b : SEH Based Exploits
- Tutorial: SEH Based Exploits and the Development Process
- SEH Overwrites Simplified
Đây là danh sách các công cụ cần thiết và rất hữu dụng:
Và dưới đây là những bài viết của Corelan về cách sử dụng chúng trong việc khai thác lỗi. Các bài viết sẽ được cập nhật thêm sau:
- Exploit writing tutorial part 5 : How debugger modules & plugins can speed up basic exploit development
- Corelan: Immunity debugger cheatsheet
Phần 4 – Kiến thức về mạng và Metasploit
Kiến thức về mạng là một phần rất quan trọng trong việc khai thác lỗi phần mềm, nếu có kiến thức tốt về mạng và lập trình mạng bạn có thể khai thác lỗi thông qua mạng LAN hay internet và có thể chiếm quyền và điều khiển máy tính từ xa.
- Beej's Guide to Network Programming
- Hacking art of exploitation [Chapter 4]
- Socket Programming in Ruby
- Video Security Tube: Metasploit Megaprimer
- http://www.metasploit.com/
- Metasploit Unleashed
- Video Metasploit Louisville Class
- Metasploitable (a target)
- Exploit writing tutorial part 4 : From Exploit to Metasploit
- Video Developing my first exploit
- Exploit Creation in Metasploit
- Wikibooks Metasploit/Writing Windows Exploit
Phần này chúng ta sẽ tìm hiểu cách viết shellcode để khai thác lỗi
- Exploit writing tutorial part 9 : Introduction to Win32 shellcoding
- Shellcode Tutorials
- Shellcoder's Handbook Ch3
- Hacking art of exploitation [Chapter 5]
- Writing small shellcode
- Shell-storm Shellcode database
- Advanced shellcode
Chỉ mục 3: Cần ghi nhớ phần này để tham khảo và sử dụng trong quá trình reverse
- Understanding Code
- Reverse Engineering the World
- Reversing for Newbies
- Intro to Reverse Engineering
- Introduction to Reverse Engineering Software
- Reversing blog post
- Reversing: secrets of reverse engineering
- Video Reverse Engineering
- CrackZ's Reverse Engineering Page
- Video Reverse engineering techniques
- History of Packing Technology
- Windows PE Header
- OpenRCE Articles
Phần 7 – Bắt đầu tìm hiểu sâu hơn về tràn bộ đệm (Buffer overflow)
Để nắm vững phần này các bạn nên thực hành nhiều để hiểu rõ vấn đề, Các bạn hãy tìm một vài exploit cũ tại http://www.exploit-db.com/ tải về thực hành, nắm vững cách thức hoạt động của nó, và viết lại nó theo cách của bạn.
A – Ngăn chặn lỗi tràn bộ đệm
- Buffer overflow protection
- Video The evolution of Microsoft's Mitigations
- Canary Bit
- Preventing the Exploitation of Structured Exception Handler (SEH) Overwrites with SEHOP
- Bypassing SEHOP
- Executable space protextion
- Data Execution Prevention
- Bypassing Hardware based Data Execution Prevention
- Address space layout randomization
- An Analysis of Address Space Layout Randomization on Windows Vista
- Defeating the Stack Based Buffer Overflow Prevention
- Exploit writing tutorial part 6 : Bypassing Stack Cookies, SafeSeh, SEHOP, HW DEP and ASLR
- Return-to-libc attack
- Video Microsoft protections video
- Video Exploitation
- Exploit writing tutorial part 7 : Unicode – from 0×00410041 to calc
- Exploit writing tutorial part 8 : Win32 Egg Hunting
- Exploit writing tutorial part 10 : Chaining DEP with ROP – the Rubik’s[TM] Cube
- Video Virtual Worlds - Real Exploits
Và một trang wargame khá hay nữa đó là http://www.smashthestack.org/
Phần 8 – Heap Overflow
- Heap Overflows for Humans
- rm -rf / on heap overflow -
- Shellcoder's Handbook Ch4&5
- A heap of risk
- Video Defcon 15 remedial Heap Overflows
- Heap overflow: ancient art of unlink seduction
- Memory corruptions part II – heap
Phần 9 – Danh sách các trang web cung cấp exploit
Hãy thường xuyên truy cập vào các trang web dưới đây để tìm kiếm và tải về các exploit mới nhất để nghiên cứu
- http://www.exploit-db.com/
- http://www.cvedetails.com/
- http://packetstormsecurity.org/files/tags/exploit/
- http://www.us-cert.gov/cas/techalerts/
- http://cve.mitre.org/cve/index.html
- http://web.nvd.nist.gov/view/vuln/search?cid=3
- http://cwe.mitre.org/index.html
Để trở thành một chuyên gia khai thác lỗi phần mềm bạn phải thường xuyên tìm kiếm và khai thác lỗi phần mềm, có thể là một wargame hay là một ứng dụng nào đó trên máy tính của bạn. Trong quá trình luyện tập bạn sẽ đúc rút ra được những kinh nghiệm quý giá cho bản thân.
Do tài liệu về mảng này trên mạng cũng không nhiều và khá rời rạc, cho nên bài viết trên tổng hợp lại những tài liệu và địa chỉ hữu ích cho các bạn có thể tham khảo. Chính vì tài liệu có từ rất nhiều nguồn khác nhau nên, nếu chỉ tổng hợp các bài viết thành một file pdf thì không thể đảm bảo được sự liền mạch và khoa học của một tài liệu. Để tổng hợp và viết lại thành một giáo trình hoàn chỉnh đòi hỏi thời gian và kiến thức sâu về từng mục.
---
Bài viết được tổng hợp và tham khảo từ bài viết của tác giả Ky0