DDos
VIP Members
-
22/10/2013
-
524
-
2.191 bài viết
Trở thành hacker mà không biết lập trình, có thể hay không thể?
Trong gần 10 năm học tập và nghiên cứu lĩnh vực an ninh mạng, mình có nhận được rất nhiều câu hỏi thắc mắc của các bạn trong và ngoài nước về mối liên hệ giữa lập trình và hacker. Đại loại sẽ có câu hỏi kiểu như:
Mình xin lưu ý, đây là bài viết mang tính cá nhân, từ một người tự học, tự mày mò và không đi qua bất kì một trường lớp đào tạo nào về an ninh mạng.
Hacker là gì? Với mình, hacker là một người bằng một cách nào đó có thể thay đổi cách hoạt động của một phần mềm hoặc một hệ thống mà không giống mong muốn của người viết nên phần mềm hoặc hệ thống. Vậy "cách nào đó" ở đây là gì?
Đa số các phần mềm và hệ thống, đều cho người dùng tương tác với nó, và cái cốt yếu dẫn đến lỗ hổng trong một hệ thống hoặc một phần mềm là người dùng có thể thay đổi giá trị đầu vào để làm ảnh hưởng đến giá trị đầu ra của một tính năng nào đó. Khi giá trị đầu vào nằm ngoài khả năng xử lý của phần mềm dẫn đến khả năng xử lý của phần mềm hoặc hệ thống có vấn đề và một lỗ hổng sẽ xảy ra.
Vậy, vấn đề mấu chốt ở đây là làm cách nào để một người dùng bình thường có thể tìm ra giá trị đầu vào "bất bình thường" này?
Web Hacking
Hack web là một trong những lĩnh vực phổ biến nhất trong thế giới hack. Để thực hiện tấn công một trang web, bạn cần hiểu các ngôn ngữ được sử dụng để mã hóa một trang web như JavaScript, HTML, PHP & MySQL, vì phần lớn các trang web được xây dựng bằng cách sử dụng các ngôn ngữ này. Vì vậy, đối với lĩnh vực web hacking, bạn cần danh sách này:
Kỹ thuật đảo ngược là quá trình tìm ra các nguyên lý kỹ thuật của một phần mềm ứng dụng hay thiết bị cơ khí qua việc phân tích cấu trúc, chức năng và hoạt động của nó. Trong quá trình này, người ta thường phải tháo dỡ đối tượng (ví dụ một thiết bị cơ khí, một thành phần điện tử, một phần mềm) thành từng phần và phân tích chi tiết hoạt động của nó, thường là với mục đích xây dựng một thiết bị hoặc phần mềm mới hoạt động giống hệt nhưng không sao chép bất cứ thứ gì từ đối tượng nguyên bản.
Vậy kết lại, "Trở thành hacker mà không biết lập trình, có thể hay không thể?"
Câu trả lời cho câu hỏi này sẽ không có câu trả lời thỏa đáng. Nhưng ở góc độ cá nhân, mình nghĩ là tốt để biết nhiều ngôn ngữ lập trình.
- Học an ninh mạng cần biết lập trình hay không?
- Ngôn ngữ lập trình nào để trở thành hacker?
- Học ngôn ngữ lập trình A có giúp ích gì trong việc học kiểm thử mảng web ứng dụng hay không?
- ...
Mình xin lưu ý, đây là bài viết mang tính cá nhân, từ một người tự học, tự mày mò và không đi qua bất kì một trường lớp đào tạo nào về an ninh mạng.
Hacker là gì? Với mình, hacker là một người bằng một cách nào đó có thể thay đổi cách hoạt động của một phần mềm hoặc một hệ thống mà không giống mong muốn của người viết nên phần mềm hoặc hệ thống. Vậy "cách nào đó" ở đây là gì?
Đa số các phần mềm và hệ thống, đều cho người dùng tương tác với nó, và cái cốt yếu dẫn đến lỗ hổng trong một hệ thống hoặc một phần mềm là người dùng có thể thay đổi giá trị đầu vào để làm ảnh hưởng đến giá trị đầu ra của một tính năng nào đó. Khi giá trị đầu vào nằm ngoài khả năng xử lý của phần mềm dẫn đến khả năng xử lý của phần mềm hoặc hệ thống có vấn đề và một lỗ hổng sẽ xảy ra.
Vậy, vấn đề mấu chốt ở đây là làm cách nào để một người dùng bình thường có thể tìm ra giá trị đầu vào "bất bình thường" này?
- Tìm ra một cách ngẫu nhiên. Có rất nhiều người dùng, trong quá trình sử dụng phần mềm, bằng một cách nào đó vô tình bấm sai phím hoặc kết hợp ngẫu nhiên các tổ hợp phím khiến hệ thống lỗi. Ví dụ như trong năm 2016, nhà nghiên cứu phát hiện ra lỗi trong quá trình update của Windows 10, người dùng chỉ cần bấm Shift + F10 để kích hoạt Command Prompt trong quá trình cập nhật, với tương tác trong Command Prompt, chúng ta có thể truy cập vào ổ đĩa cứng trong quá trình update và vô hiệu hóa BitLocker.
- Tìm ra một cách có hệ thống. Đây là một quá trình đòi hỏi rất nhiều kỹ năng. Trong phương pháp này sẽ được chia ra làm hai dạng. Tìm lỗ hổng đã biết trên một phần mềm hoặc một hệ thống và tìm lỗ hổng mới mà chưa được phát hiện. Trong quá trình tìm lỗ hổng này, liệu chúng ta có cần phải biết lập trình hay không? Câu trả lời là có thể có hoặc không. Tại sao có và tại sao không? Trong những năm đầu, khi mình tìm hiểu về an ninh mạng khoảng những năm 2012, trong tay mình là một cái gì đó rất mơ hồ, không có kiến thức lập trình, không có kiến thức cơ bản về hệ thống mạng. Nhưng mình có thể sử dụng và hiểu cách hoạt động của các công cụ thử nghiệm thâm nhập, biết được cách hoạt động của hàm trong một vài ngôn ngữ lập trình. Tuy với kiến thức và kinh nghiệm khá là non, và không biết chút gì về lập trình cả, nhưng mình đã tìm ra rất nhiều lỗ hổng trong các trang web khác nhau và nhận về tiền thưởng. Ở đây mình lưu ý rằng, hiện nay, có rất nhiều các công cụ tự động cho phép bạn dò quét và tìm kiếm lỗ hổng mà không yêu cầu bạn biết bất cứ một khái niệm nào về lập trình. Tuy nhiên, đó là câu chuyện của 4 và 5 năm trước. Hiện nay, với sự đầu tư bài bản, các hệ thống web cũng như phần mềm có sự đầu tư về bảo mật, nên việc sử dụng các công cụ tự động để tìm kiếm lỗ hổng sẽ trở nên khó khăn hơn. Việc tìm kiếm lỗ hổng không chỉ dừng lại ở việc quét nữa, mà bạn cần phải phân tích kĩ lưỡng, hiểu logic của từng hàm, phải dịch ngược, phải debug... Đây chính là khi kỹ năng lập trình được dùng tới.
Web Hacking
Hack web là một trong những lĩnh vực phổ biến nhất trong thế giới hack. Để thực hiện tấn công một trang web, bạn cần hiểu các ngôn ngữ được sử dụng để mã hóa một trang web như JavaScript, HTML, PHP & MySQL, vì phần lớn các trang web được xây dựng bằng cách sử dụng các ngôn ngữ này. Vì vậy, đối với lĩnh vực web hacking, bạn cần danh sách này:
- HTML.
- JavaSCRIPT
- PHP
- SQL
- C.
- C++
- Python
- Perl
- Ruby
Kỹ thuật đảo ngược là quá trình tìm ra các nguyên lý kỹ thuật của một phần mềm ứng dụng hay thiết bị cơ khí qua việc phân tích cấu trúc, chức năng và hoạt động của nó. Trong quá trình này, người ta thường phải tháo dỡ đối tượng (ví dụ một thiết bị cơ khí, một thành phần điện tử, một phần mềm) thành từng phần và phân tích chi tiết hoạt động của nó, thường là với mục đích xây dựng một thiết bị hoặc phần mềm mới hoạt động giống hệt nhưng không sao chép bất cứ thứ gì từ đối tượng nguyên bản.
- C.
- C++.
- C#.
- VB.
- Python.
- Perl.
- Ruby.
- JavaScript.
- PHP.
- Java.
- Delphi.
- ObjectiveC.
- ErLang.
- Go Lang.
- SQL...
Vậy kết lại, "Trở thành hacker mà không biết lập trình, có thể hay không thể?"
Câu trả lời cho câu hỏi này sẽ không có câu trả lời thỏa đáng. Nhưng ở góc độ cá nhân, mình nghĩ là tốt để biết nhiều ngôn ngữ lập trình.