it-swarm-vi.com

Ngôn ngữ lập trình cho an ninh mạng

Tôi đang làm việc như một người thử nghiệm bây giờ. Tôi đang lên kế hoạch chuyển sang lĩnh vực bảo mật như CEH hoặc CISSP. Nhưng nhiều người nói rằng để trở thành một hacker tuyệt vời, bạn cần biết ít nhất một ngôn ngữ lập trình. Tôi đã biết một chút về Java. Nhưng tôi chỉ muốn biết ngôn ngữ nào gần với an ninh mạng và các lĩnh vực liên quan. Vậy tôi nên học loại ngôn ngữ nào để nó có ích cho tôi khi chuyển sang lĩnh vực bảo mật?

14
Madusudanan

Không có kế hoạch chi tiết xác định về ngôn ngữ tốt nhất để học. Do đó, tôi muốn đề cập đến hai lựa chọn thay thế tốt mà tôi (và nhiều người khác) nghĩ là một ngôn ngữ tốt để học về bảo mật máy tính.

LUA

Giải thích về Lua từ wikipedia : Lua là ngôn ngữ lập trình đa mô hình nhẹ được thiết kế như một ngôn ngữ kịch bản với "ngữ nghĩa mở rộng" làm mục tiêu chính.

Lý do tôi đề cập LUA là một ngôn ngữ tốt để học là nó là công cụ viết kịch bản cho NHIỀU công cụ bảo mật phổ biến. Đây là một lý do rất tốt một mình để học ngôn ngữ này. Một số langauges bao gồm:

  • NMAP (Công cụ lập bản đồ mạng)
  • Khịt mũi (IDS nguồn mở)
  • Wireshark (công cụ đánh hơi gói)
  • Vim (Trình soạn thảo văn bản unix rất phổ biến)
  • Cisco ASA (tường lửa, IPS, VPN)
  • Các công cụ dịch vụ mạng (Apache, lightHttpd, FreePop)

Một lưu ý phụ: Ngay cả bản hit lớn của Blizzard, World of Warcraft cũng hỗ trợ cho kịch bản LUA bên trong trò chơi :) Gửi tới bất kỳ ai có thể có liên quan.

Python

Tôi hơi thiên vị về Python sau khi tôi bắt đầu đọc cuốn sách " Grey Hat Python: Python Lập trình cho tin tặc và kỹ sư đảo ngược ". Tôi đồng ý với nhiều điểm trong cuốn sách này tại sao nên học ngôn ngữ này cho một hacker (thường được gọi là chuyên gia bảo mật :)).

Được trích dẫn từ Amazon Python là ngôn ngữ tốt để học vì:

thật dễ dàng để viết một cách nhanh chóng và nó có các thư viện và hỗ trợ cấp thấp khiến tin tặc hài lòng.

Cũng rất thoải mái khi có thể tương tác nhanh chóng với trình thông dịch trong Python Shell của bạn.

Chỉnh sửa: Chế độ xem đồ họa của các cuộc thăm dò của HackerNews về các ngôn ngữ lập trình yêu thích/không thích: python wins

Chỉnh sửa 2: Từ cuộc thăm dò của Digininjas :

Language    Number  Percentage
Python  245 81%
Bash Scripting  241 79%
Ruby    127 42%
C   123 40%
Windows Powershell  111 37%
Batch Scripting 108 36%
PHP 107 35%
C++ 66  22%
Java    65  21%
Perl    57  19%
Other   57  19%
VB  29  10%
C#  26  9%
Lua 23  8%
26
Chris Dale

Không có sự kết nối giữa ngôn ngữ lập trình và bảo mật, điều có thể là cách tốt hơn để xem xét đó là học các ngôn ngữ phổ biến (vì vậy Java sẽ là điểm khởi đầu hợp lý) vì tất cả các ngôn ngữ có vấn đề về bảo mật - bạn cũng có thể xem xét các vấn đề bảo mật trên một loạt các ứng dụng và nền tảng web hơn là một cái gì đó bí truyền.

Hiểu các giao thức mạng là một ý tưởng tốt và có thể phân tích lưu lượng ở các lớp 1 - 4 có thể giúp ích, nhưng đây là thuyết bất khả tri về ngôn ngữ.

đọc tốt các câu hỏi khác được gắn thẻ Giáo dục chuyên nghiệp để được hướng dẫn rộng hơn.

9
Rory Alsop

Một số phần của bảo mật mạng liên quan đến việc thay đổi các chi tiết nhỏ của gói TCP/IP khi chúng được gửi và nhận; để làm điều đó, bạn cần có khả năng chặn các gói ở mức độ thấp và cũng phát ra các gói thủ công (ví dụ, trong Linux, điều này được gọi là sử dụng SOCK_RAWổ cắm ). Không phải tất cả các ngôn ngữ lập trình đều cung cấp API có thể sử dụng cho điều đó; kiến thức về C đôi khi được yêu cầu để sử dụng các tính năng này.

Ngoài ra, bất kỳ ngôn ngữ lập trình linh hoạt nào không gặp khó khăn trong việc nhận và gửi byte tùy ý sẽ tốt cho bạn; Java là tốt về mặt đó.

9
Thomas Pornin

Lưu ý: Tôi nhận ra điều này rất thiên về các hệ thống và tránh xa bảo mật chung. Bảo mật là một quá trình và liên quan đến nhiều hơn công nghệ.

Có hai tuyến bạn có thể chọn và không may (IMHO) không bao gồm Java.

C là một ngôn ngữ hệ thống rất tốt. Bạn có thể làm việc với unix và linux và đào sâu gần với kim loại - các cuộc gọi hệ thống, không gian kernel, mạng cấp thấp, v.v.

Các tuyến khác là một ngôn ngữ kịch bản cho phép bạn nhanh chóng kết dính các công cụ và chương trình ở mức cao hơn. Hầu hết các ngôn ngữ script như Perl, python và Ruby sẽ cung cấp cho bạn quyền truy cập vào các tóm tắt mức socket. Tôi thiên vị cho python, bởi vì bạn có thể dễ dàng viết các mô-đun C cho nó nếu bạn cần hiệu suất hoặc thấp truy cập -level.

Bây giờ để giải quyết sự giả dối trong câu hỏi của bạn ... là một hacker tuyệt vời vượt qua các ngôn ngữ lập trình. Trở thành một hacker tuyệt vời là một trạng thái của tâm trí. Nó kết hợp đặt câu hỏi cho tất cả mọi thứ và có thể giải quyết vấn đề một cách sáng tạo. Nếu bạn có thể làm điều này, bạn sẽ học các ngôn ngữ bạn cần bởi vì bạn sẽ tự định hướng về chúng.

7
Bradley Kreider

Bạn thực sự không thể học ngôn ngữ để học bảo mật. Hầu hết các vấn đề bảo mật là tinh tế hơn nhiều. Một ngoại lệ cho điều này là các truy vấn SQL: tại một số điểm, bạn thực sự cần phải hiểu sự khác biệt giữa kết hợp chuỗi và truy vấn tham số. Nhưng các truy vấn SQL được xây dựng bằng ngôn ngữ khác, cho dù Java, PHP, Ruby, v.v.

Nhưng bạn cần phải hiểu ngôn ngữ kịch bản. Bạn cần viết các công cụ của riêng bạn và tùy chỉnh các công cụ hiện có. Các ngôn ngữ kịch bản tốt để học bao gồm JavaScript, Perl, PHP và Ruby.

Bạn đã bắt đầu với Java, vì vậy tôi khuyên bạn nên tiếp tục học Java. Tìm hiểu cách sử dụng Java trên máy chủ web để xây dựng ứng dụng web với phụ trợ SQL. Tìm hiểu cách sử dụng Java để tạo các chương trình dòng lệnh đơn giản.

Khi bạn đã có một số kinh nghiệm thực sự viết mã bằng bất kỳ ngôn ngữ nào, hãy bắt đầu phân nhánh sang các ngôn ngữ khác. Bước tiếp theo tốt sẽ là JavaScript. JavaScript có thể được sử dụng cả trên máy chủ để tạo webapps và trên dòng lệnh. Nhưng quan trọng nhất, bạn sử dụng nó trong trình duyệt, vì vậy đó là ngôn ngữ bạn phải học.

Java và JavaScript sử dụng một cú pháp tương tự như C. Đó là một ý tưởng tốt để bạn tự làm quen với sự khác biệt với các ngôn ngữ giống như C khác, cụ thể là C, C++, C # và PHP.

6
Robert David Graham

Tôi đồng ý với rất nhiều điều đã nói ở trên. Tuy nhiên, đặc biệt, tôi muốn nhấn mạnh tầm quan trọng của Ruby. Trong tâm trí của tôi, Ruby là một ngôn ngữ "hacker" tuyệt vời vì một vài lý do:

  1. (Chủ quan) Đó là một ngôn ngữ đẹp, thông minh và biểu cảm, giúp chúng ta có thể hack các giải pháp nhanh chóng và bẩn thỉu cho các vấn đề trong thời gian ngắn.
  2. Metasploit được viết bằng Ruby
  3. Thư viện đá quý của Ruby rất rộng lớn và mạnh mẽ, một lần nữa, giúp việc giải quyết vấn đề trở nên tương đối dễ dàng.
2
Chris Allen Lane

Tôi thực sự khuyên bạn nên nmap , socat, lft và curl khi tìm hiểu bất kỳ lệnh Unix nào liên quan đến bảo mật mạng. Thường có rất ít lý do để phát minh lại những bánh xe này.

OpenVAS hỗ trợ một ngôn ngữ kịch bản cụ thể về bảo mật mạng được gọi là NASL, mặc dù ban đầu nó xuất phát từ công cụ Nessus, trong đó NASL dựa trên CASL (từ Máy quét CyberCop của Network Associates).

Nhiều trình giả lập HTTP/TLS đã thêm hỗ trợ cho những thứ như Dịch vụ web và các điều khiển lập trình mạnh mẽ khác. Những thứ hay ho mà tôi thấy gần đây là resty - ợ hơi, sủi bọt, wXf và mảnh đạn.

Việc sử dụng một số loại ứng dụng chụp gói cũng rất hữu ích, cho dù đó là tcpdump, snort, Wireshark, Network Miner hay HTTP Scoop.

Nhiều người coi Lua, Python và Ruby là tốt hơn đáng kể cho các dự án bảo mật mạng ngắn hạn và tạm thời so với bất kỳ ngôn ngữ nào khác, mặc dù DSL được mô tả bởi Metasploit, wXf và watir-webdo một trường hợp thú vị để hỗ trợ Ruby MRI và JRuby so với những người khác. Ngược lại, Lua có rất nhiều hỗ trợ cho các công nghệ dựa trên bộ lọc, như Wireshark, bảo mật mod và khịt mũi (PCRE cũng rất thường được tìm thấy trong các công nghệ này).

Tóm lại, nếu bạn định sửa đổi bất kỳ mã nào từ các dự án bảo mật mạng, nhiều khả năng bạn sẽ chuyển sang chương trình C, nhưng gọi thư viện hoặc phần mở rộng khung được viết bằng Ruby, Python hoặc Lua. Nếu trọng tâm của bạn là gửi lưu lượng truy cập (đặc biệt là HTTP hoặc khai thác), Ruby là đặt cược tốt nhất - nhưng nếu trọng tâm của bạn là nhận lưu lượng truy cập (đặc biệt là IDS hoặc chụp gói), thì Lua là một đặt cược tốt nhất. Chỉ để học chung, tôi đã thấy dpkt trong Python làm một số điều tuyệt vời rất nhanh trong giai đoạn tạo mẫu.

Kiểm tra cuốn sách, Mã hóa cho Penetration-Testers để biết thêm tài liệu tham khảo.

2
atdre

Tôi đã thực hiện phát triển hệ thống trong nhiều năm bắt đầu với Basic và Cobol, sau đó là dBase III +, VB6, Asp.Net bằng Access và SQL Server. Tôi cũng là một CISSP.

Tôi nghĩ anh ấy nên học ngôn ngữ hội. Mặc dù nghe có vẻ không liên quan, nhưng nó sẽ cho anh ta một nền tảng vững chắc trong kỹ thuật đảo ngược và cũng giúp anh ta hiểu được cơ sở của C, C++, v.v. Khi mã nguồn không có sẵn, thì sau khi kỹ thuật đảo ngược, thứ bạn sẽ có là hội.

0
Djesu