web-dev-qa-db-fra.com

Langage de programmation pour la sécurité du réseau

Je travaille en tant que testeur maintenant. Je prévois de passer au domaine de la sécurité comme un CEH ou CISSP. Mais beaucoup disent que pour être un bon hacker, vous devez bien connaître au moins un langage de programmation. Je connais déjà un peu de Java. Mais je voulais juste savoir quelle langue est plus proche de la sécurité du réseau et des domaines connexes. Alors, quel type de langue dois-je apprendre pour qu'il me soit utile de passer au domaine de la sécurité?

14
Madusudanan

Il n'y a pas de plan défini sur la meilleure langue à apprendre. Pour cela, je voudrais mentionner deux bonnes alternatives que je pense (et beaucoup d'autres) est une bonne langue à apprendre en sécurité informatique.

LUA

Explication de Lua de wikipedia : Lua est un langage de programmation multi-paradigme léger conçu comme un langage de script avec "la sémantique extensible" comme objectif principal.

La raison pour laquelle je mentionne LUA est un bon langage à apprendre, car il s'agit du moteur de script pour de nombreux outils de sécurité populaires. C'est une très bonne raison à elle seule d'apprendre cette langue. Certains des langages incluent:

  • NMAP (outil de cartographie du réseau)
  • Snort (IDS open source)
  • Wireshark (outil de reniflage de paquets)
  • Vim (éditeur de texte Unix très populaire)
  • Cisco ASA (pare-feu, IPS, VPN)
  • Outils de services réseau (Apache, lightHttpd, FreePop)

Sur une note latérale: Même le principal succès de Blizzard, World of Warcraft, prend en charge les scripts LUA dans le jeu :) Pour tous ceux qui peuvent être pertinents.

Python

Je suis un peu biaisé sur Python après avoir commencé à lire le livre " Gray Hat Python: Python Programmation pour les pirates informatiques et les ingénieurs inversés) ". Je suis d'accord avec de nombreux points de ce livre pourquoi il est bon d'apprendre cette langue pour un pirate informatique (communément appelé spécialiste de la sécurité :)).

Cité d'Amazon Python est un bon langage à apprendre car:

il est facile d'écrire rapidement, et il a le support de bas niveau et les bibliothèques qui font le bonheur des pirates.

Il est également très confortable de pouvoir interagir à la volée avec l'interpréteur dans votre shell Python.

Edit: Vue graphique des sondages HackerNews sur les langages de programmation préférés/non appréciés: python wins

Edit 2: From sondage 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

Il n'y a pas ce genre de connexion entre les langages de programmation et la sécurité, ce qui pourrait être une meilleure façon de voir les choses est d'apprendre des langages communs (donc Java serait un point de départ raisonnable) comme tous les langages avez des problèmes de sécurité - vous pourriez aussi bien regarder les problèmes de sécurité sur un large éventail d'applications et de plates-formes Web plutôt que quelque chose d'ésotérique.

Comprendre les protocoles réseau est une bonne idée, et être capable d'analyser le trafic sur les couches 1 à 4 peut aider, mais cela est largement indépendant du langage.

avoir une bonne lecture des autres questions marquées Professional-Education pour des conseils plus larges.

9
Rory Alsop

Certaines parties de la sécurité du réseau impliquent de manipuler les petits détails des paquets TCP/IP lors de leur envoi et de leur réception; pour ce faire, vous devez être en mesure d'intercepter des paquets à un bas niveau et d'émettre également des paquets fabriqués à la main (sous Linux, par exemple, cela est connu comme utilisant un SOCK_RAWsocket ). Tous les langages de programmation ne fournissent pas d'API utilisable pour cela; la connaissance de C est parfois requise pour utiliser ces fonctionnalités.

En dehors de cela, tout langage de programmation polyvalent qui n'a aucun problème à recevoir et à envoyer des octets arbitraires sera bon pour vous; Java est très bien à cet égard.

9
Thomas Pornin

Remarque: J'ai réalisé que cela est très biaisé en faveur des systèmes et loin de la sécurité générique. La sécurité est un processus et implique plus que la technologie.

Il y a deux itinéraires que vous pouvez choisir et malheureusement (à mon humble avis) ni Java.

C est un très bon langage système. Vous pouvez travailler avec unix et linux et creuser près du métal - appels système, espace noyau, mise en réseau de bas niveau, etc.

L'autre voie est un langage de script qui vous permet de coller rapidement des outils et des programmes à un niveau supérieur. La plupart des langages de script comme Perl, python et Ruby vous donnera accès aux abstractions de niveau socket. Je suis biaisé pour python, car vous pouvez facilement écrire des modules C pour cela si vous avez besoin de performances ou faibles -niveau d'accès.

Maintenant pour aborder le mensonge dans votre question ... être un grand hacker transcende les langages de programmation. Être un grand hacker est un état d'esprit. Il intègre tout remettre en question et être capable de résoudre les problèmes de manière créative. Si vous pouvez le faire, vous apprendrez les langues dont vous avez besoin parce que vous serez auto-dirigé vers elles.

7
Bradley Kreider

Vous ne pouvez vraiment pas apprendre de langues pour apprendre la sécurité. La plupart des problèmes de sécurité sont beaucoup plus subtils que cela. La seule exception est les requêtes SQL: à un moment donné, vous devez vraiment comprendre la différence entre la combinaison de chaînes et les requêtes paramétrées. Mais les requêtes SQL sont construites en utilisant un autre langage, que ce soit Java, PHP, Ruby, etc.

Mais vous devez comprendre les langages de script. Vous devez écrire vos propres outils et personnaliser les outils existants. Les bons langages de script à apprendre incluent JavaScript, Perl, PHP et Ruby.

Vous avez déjà commencé avec Java, je vous suggère donc de continuer à apprendre Java. Apprenez à utiliser Java sur le serveur Web pour créer des applications Web avec un backend SQL. Apprenez à utiliser Java pour créer de simples programmes en ligne de commande).

Une fois que vous avez acquis de l'expérience dans l'écriture de code dans n'importe quelle langue, commencez à vous diversifier. Une bonne prochaine étape serait JavaScript. JavaScript peut être utilisé à la fois sur le serveur pour créer des webapps et sur la ligne de commande. Mais surtout, vous l'utilisez dans le navigateur, c'est donc la seule langue que vous devez apprendre.

Java et JavaScript utilisent une syntaxe similaire à C. C'est une bonne idée de vous familiariser avec la différence avec d'autres langages de type C, à savoir C, C++, C # et PHP.

6
Robert David Graham

Je suis d'accord avec beaucoup de ce qui a été dit ci-dessus. En particulier, cependant, je voudrais souligner quelque peu l'importance de Ruby. Dans mon esprit, Ruby est un excellent langage "hacker" pour plusieurs raisons:

  1. (Subjective) C'est un langage beau, intelligent et expressif, qui permet de pirater rapidement des solutions rapides à des problèmes.
  2. Metasploit est écrit en Ruby
  3. La bibliothèque de gemmes de Ruby est vaste et puissante, ce qui, encore une fois, facilite la résolution rapide des problèmes.
2
Chris Allen Lane

Je recommande fortement nmap , socat, lft et curl lors de l'apprentissage des commandes Unix liées à la sécurité du réseau. Il y a souvent peu de raisons de réinventer ces roues.

OpenVAS prend en charge un langage de script spécifique à la sécurité du réseau appelé NASL, bien qu'il provienne à l'origine de l'outil Nessus, où NASL était basé sur CASL (du scanner CyberCop de Network Associates).

De nombreux fuzzers HTTP/TLS ont ajouté la prise en charge de choses comme les services Web et d'autres contrôles de programmation puissants. Les plus cool que j'ai vus récemment sont les restes burp, buby, wXf et shrapnel.

L'utilisation d'une sorte d'application de capture de paquets est également utile, que ce soit tcpdump, snort, Wireshark, Network Miner ou HTTP Scoop.

Beaucoup considèrent Lua, Python et Ruby comme étant considérablement meilleurs pour les projets de sécurité réseau à court terme et intermédiaires que tout autre langage, bien que les DSL décrits par Metasploit, wXf et watir-webdriver permettent un cas intéressant pour prendre en charge Ruby MRI et JRuby sur les autres. Inversement, Lua a beaucoup de support pour les technologies basées sur les filtres, telles que Wireshark, mod-security et snort (PCRE est également très que l'on retrouve couramment dans ces technologies).

En résumé, si vous allez modifier un code de projets de sécurité réseau, vous êtes plus susceptible de décortiquer vers un programme C, mais en appelant une bibliothèque ou une extension de framework écrite en Ruby, Python ou Lua. Si vous vous concentrez sur l'envoi de trafic (en particulier HTTP ou exploits), Ruby est le meilleur pari - mais si vous vous concentrez sur la réception de trafic (en particulier IDS ou capture de paquets), alors Lua est un Pour un apprentissage général, j'ai vu dpkt dans Python faire des choses incroyables très rapidement pendant une phase de prototypage.

Consultez le livre, Coding for Penetration-Testers pour d'autres documents de référence.

2
atdre

Je fais du développement de systèmes depuis des années en commençant par Basic et Cobol, puis dBase III +, VB6, Asp.Net utilisant Access et SQL Server. Je suis également CISSP.

Je pense qu'il devrait apprendre la langue de l'Assemblée. Bien que cela puisse sembler non pertinent, cela lui donnera une base solide en rétro-ingénierie et l'aidera également à comprendre les bases du C, C++, etc. Lorsque le code source n'est pas disponible, après l'ingénierie inverse, vous aurez Assembly.

0
Djesu