Non classé

Langages de programmation que les professionnels d’infosec devraient apprendre

Par Titanfall , le 22 avril 2019 - 15 minutes de lecture

Le code est une compétence essentielle du professionnel d’infosec, mais le choix de langues est très vaste. Quelle langue devriez-vous apprendre? En tant que gros codeur, j’ai pensé répondre à cette question ou, du moins, donner un peu de recul.

Le tl; dr est JavaScript. Quelle que soit la langue que vous apprenez, vous devrez également apprendre le JavaScript. C’est le langage des navigateurs, les macros Word, JSON, le côté serveur NodeJS, les scripts sur la ligne de commande et les applications Electron. Vous aurez également besoin d'un peu de frapper et / ou PowerShell compétences de script, ou SQL pour des requêtes. D'autres langues sont également importantes, le python est par exemple très populaire. Évitez activement C ++ et PHP car ils sont obsolètes.

Aussi tl; dr: quelle que soit la langue que vous décidez d’apprendre, apprenez également à utiliser un IDE avec débogage visuel plutôt qu’un simple éditeur de texte. Cela veut dire Visual Code de Microsoft.

Parlons en termes généraux. Voici quelques types de langues.

  • Inévitable. Comme mentionné ci-dessus, la connaissance de JavaScript, bash / Powershell et SQL est inévitable. Si vous les évitez, vous faites quelque chose de mal.
  • Petits scripts. Vous devez apprendre au moins une langue pour écrire des scripts de ligne de commande rapides et automatisés afin d'automatiser des tâches ou de traiter des données. En tant qu'outil utilisant des animaux, c'est votre outil de base. Vous êtes un singe, c'est le bâton que vous utilisez pour faire tomber la banane. JavaScript, Python et Ruby sont de bons choix. Certaines langues spécifiques à un domaine peuvent également fonctionner, comme PHP et Lua. Les spécialistes de bash / PowerShell peuvent effectuer une quantité surprenante de tâches de «programmation» dans ces langues. Les anciens utilisent des choses comme PERL ou TCL. Parfois, le choix de la langue à apprendre dépend des vastes bibliothèques fournies avec ces langages, notamment les bibliothèques Python et JavaScript.
  • Langages de développement. Ces langages de script ont évolué pour devenir de vrais langages de programmation, mais pour la plupart, le «développement logiciel» désigne des langages conçus pour cette tâche, tels que C, C ++, Java, C #, Rust, Go ou Swift.
  • Langues spécifiques au domaine. Le langage Lua est construit dans nmap, snort, Wiresharket de nombreux jeux. Ruby est la langue de Metasploit. Plus loin, vous pouvez finir par apprendre des langues comme R ou Matlab. PHP est extrêmement important pour le développement Web. Les applications mobiles peuvent nécessiter Java, C #, Kotlin, Swift ou Objective-C.

En tant que développeur expérimenté, voici mes commentaires sur les différentes langues, classés par ordre alphabétique.


bash (et autres shells Unix)

Tu dois en apprendre frapper pour traiter avec la ligne de commande. Mais c’est aussi un langage de programmation assez complet. En parcourant les scripts d’une distribution Linux moyenne, en particulier de certaines plus anciennes, vous constaterez que frapper constitue une part substantielle de ce que nous considérons comme le système d’exploitation Linux. En fait, cela s’appelle bash / Linux.

Dans le monde Unix, il existe de nombreux autres shells apparentés dont la syntaxe est légèrement différente. Un bon exemple est BusyBox qui a «cendres». Je le mentionne parce que mes compétences en bash sont plutôt médiocres, en partie parce que j’ai initialement appris le «csh» et que les variantes de syntaxe sont confondues.

En tant que développeur endurcis, je finis par programmer en JavaScript ou même en C plutôt que d'essayer de créer des scripts bash complexes. Mais vous ne devriez pas mépriser les scripts bash complexes, car ils peuvent faire de grandes choses. En particulier, si vous êtes un pentester, le shell est souvent la seule langue que vous obtiendrez lors du piratage dans un système. Une bonne maîtrise de la langue est essentielle.

C

C’est le langage de développement que j’utilise le plus, tout simplement parce que je suis un développeur «systèmes» de longue date. La «programmation système» signifie simplement que vous avez le contrôle manuel de la mémoire, ce qui vous donne des performances 4x et une meilleure «évolutivité» (les performances ne se dégradent pas autant que les problèmes s'aggravent). C'est la langue du noyau du système d'exploitation, ainsi que de nombreuses bibliothèques au sein d'un système d'exploitation.

Mais si vous ne voulez pas de contrôle manuel de la mémoire, vous ne voulez pas l’utiliser. C’est le manque de protection de la mémoire qui entraîne des problèmes de sécurité qui le rend presque obsolète.

C ++

Aucun des avantages des langages modernes comme Rust, Java et C #, mais tous les problèmes de C. C’est un langage obsolète, qu’il faut éviter.

C #

Il s’agit d’une variante personnelle de Java conçue par Microsoft pour être meilleure que Java. C’est un excellent langage de développement pour les utilitaires de ligne de commande, les services d’arrière-plan, les applications sur le bureau (même Linux) et les applications mobiles. Si vous travaillez dans un environnement Windows, c’est un excellent choix. Si vous pouvez utiliser C # au lieu de C ++, faites-le. En outre, dans le monde Microsoft, il existe encore beaucoup de VisualBasic. OMG éviter cela comme le fléau qu'il est, brûler dans un feu brûler brûler, et utiliser C # à la place.

Aller

Une fois qu'une entreprise atteint une certaine taille, elle développe son propre langage de programmation. Pour Google, la langue la plus importante est Go.

Go est un langage raffiné en général, mais son objectif principal est de mettre en oeuvre des programmes réseau évolutifs. Goroutines. C’est la programmation asynchrone en mode utilisateur qui convient le mieux au programmeur. Étant donné que Google est entièrement axé sur les services réseau évolutifs, Go leur convient parfaitement.

Je fais beaucoup de choses réseau évolutives en C, parce que je suis un ancien. Si cela vous intéresse, vous devriez probablement choisir Go over C.

Java

Cela a mauvaise réputation, car il a déjà été conçu pour les navigateurs, mais il a tellement de failles de sécurité qu’il ne peut pas être utilisé dans les navigateurs. Vous trouvez toujours des applications dans le navigateur qui utilisent Java, même dans les produits Infosec (comme les consoles), mais c’est horrible pour cela. Si vous faites cela, vous êtes mauvais et devriez vous sentir mal.

Mais les navigateurs de côté, c’est un excellent langage de développement pour les utilitaires de ligne de commande, les services d’arrière-plan, les applications sur les ordinateurs de bureau et les applications sur les téléphones. Si vous souhaitez écrire une application fonctionnant sous macOS, Windows et un Raspberry Pi sous Linux, ce choix est excellent.

JavaScript

Comme mentionné ci-dessus, vous n’avez pas le choix d’apprendre cette langue. L'une de vos compétences de base consiste à apprendre à ouvrir les outils de développement Chrome et à manipuler JavaScript sur une page Web.

La question est donc de savoir si vous maîtrisez suffisamment la connaissance de la langue pour pouvoir la manipuler ou si vous vous efforcez réellement d'apprendre la langue pour le développement ou l'écriture de scripts. Je suggère que vous devriez. Tout d'abord, vous rencontrerez souvent des utilisations bizarres de JavaScript avec lesquelles vous n'êtes pas familier, sauf si vous apprenez sérieusement le langage, telles que des constructions de style JQuery qui ne ressemblent en rien à celles pour lesquelles vous auriez pu apprendre le langage à l'origine.

JavaScript est en fait devenu un langage de développement d'applications sérieux avec NodeJS et des frameworks comme Electron. S'il y a une langue au monde qui peut faire tout, depuis l’écriture de services finaux (NodeJS), d’applications de bureau (Electron), d’applications mobiles (nombreux frameworks), de scripts rapides (NodeJS) et d’applications de navigateur – c’est du JavaScript. C’est la lingua franca du monde.

De plus, n'oubliez pas que votre choix de langage de script sera souvent basé sur les bibliothèques sous-jacentes disponibles. Par exemple, si vous écrivez des programmes d’apprentissage automatique TensorFlow, vous avez besoin de ces bibliothèques disponibles pour la langue. C’est la raison pour laquelle JavaScript est populaire dans le domaine de l’apprentissage automatique, car il existe un très grand nombre de bibliothèques.

BTW, "JSON" est également un langage, ou au moins un format de données, à part entière. Donc, vous devez apprendre cela aussi.

Lua

Lua est un langage similaire à JavaScript à bien des égards, à la différence que les tableaux commencent par 1 au lieu de 0. La raison en est qu'il est extrêmement facile à intégrer dans d'autres programmes que leur langage de script, il est léger en termes de mémoire / CPU, et est ultra-portable presque partout.

Ainsi, vous le trouverez intégré dans des outils de sécurité tels que nmap, snort et Wireshark. Vous le voyez également comme langage de script dans les jeux populaires. Comme Go, il a des coroutines extrêmement efficaces, de sorte que vous le voyez dans le nginx serveur Web, «OpenResty», pour les scripts d’application des applications.

PHP

Étonnamment, PHP est un langage de programmation complet. Vous pouvez l'utiliser sur la ligne de commande pour écrire des scripts similaires à Python ou JavaScript. Vous devrez peut-être l’apprendre, car c’est toujours le langage le plus populaire pour la création d’applications Web, mais pour bien l’apprendre, il faut également pouvoir écrire des scripts de base.

Cependant, pour écrire des applications Web, il est obsolète. Il y a tellement de problèmes de sécurité inévitables que vous devriez éviter de l'utiliser pour créer de nouvelles applications. En outre, l'évolutivité est encore difficile. Utilisez plutôt NodeJS, OpenResty / Lua ou Ruby.

PowerShell

Les commentaires ci-dessus qui s'appliquent à bash s'appliquent également à PowerShell, sauf que PowerShell est Windows.

Windows a deux lignes de commande, l'ancienne ligne de commande CMD / BAT et le plus récent PowerShell. Tout complexe utilise PowerShell de nos jours. Pour le pentestage, il existe de nombreux outils assez complets pour effectuer des tâches intéressantes à partir de la ligne de commande écrite dans le langage de programmation PowerShell.

Ainsi, si Windows est dans votre domaine, et presque certainement, PowerShell doit faire partie de votre boîte à outils.

Python

C'est devenu l'un des langages les plus populaires, dicté par les universités qui l'utilisent beaucoup comme langue d'enseignement pour les concepts de programmation. Tout ce qui est académique, comme l’apprentissage automatique, aura de superbes bibliothèques pour Python.

De nombreux outils de ligne de commande pour hacker sont écrits en Python. Comme ces outils sont souvent bogués et mal documentés, vous finirez par lire le code beaucoup pour comprendre ce qui ne va pas. Apprendre à programmer en Python signifie pouvoir contribuer à ces outils.

Personnellement, je déteste la langue à cause du schisme entre v2 / v3 et je dois constamment lutter avec cela. Chaque langue a un problème d'évolution et de compatibilité ascendante, mais ce problème v2 vs v3 avec Python semble particulièrement gênant.

En outre, Python est lent. Cela ne devrait pas avoir d’importance à l’ère des JITs partout et pour des choses comme Webassembly, mais quand vous avez un outil extrêmement lent, c’est Python qui est en faute.

Notez que chaque fois que je lis des critiques de langages de programmation, je vois des éloges pour la syntaxe de Python. Ça n'a pas de sens. Après un court instant, la syntaxe de tous les langages de programmation devient bizarre et bizarre. De nos jours, la plupart des langues sont multi-paradigmes, une combinaison impérative, orientée objet et fonctionnelle. La plupart sont JITted. La «syntaxe» est la moindre raison de choisir une langue. Au lieu de cela, c’est le choix entre le support et les bibliothèques (ce qui est excellent pour Python), ou des fonctionnalités spécifiques comme un contrôle de mémoire «système» étroit (comme Rust) ou des coroutines évolutives (comme Go). Sérieusement, arrêtez de faire l'éloge de la syntaxe «élégante» et «simple» des langues.

Rubis

Ruby est un excellent langage pour écrire des applications Web qui rend la sécurité plus facile qu'avec PHP, bien que, comme toutes les applications Web, il reste quelques problèmes.

Dans infosec, la principale raison d'apprendre Ruby est Metasploit.

Comme Python et JavaScript, il s’agit également d’un excellent langage de script en ligne de commande avec de nombreuses bibliothèques disponibles. Vous le trouverez souvent utilisé dans ce rouleau.

Rouille

Rust est le langage de remplacement de Mozilla pour le C et surtout le C ++. Il prend en charge un contrôle strict des structures de mémoire pour la programmation «système», mais sa mémoire est sûre et n’a donc pas toutes ses vulnérabilités. Un de ces jours, je vais arrêter de programmer en C et utiliser Rust à la place.

Le problème avec Rust est qu’il n’a pas assez de prise en charge par d’autres langages, comme Java ou C # pour les applications, et n’est pas aussi concentré sur les applications réseau que Go. Mais en tant que langue, c’est merveilleux. Dans un monde parfait, nous utiliserions tous JavaScript pour les tâches de script et Rust pour le travail d’arrière-plan. Mais dans le monde réel, les autres langues ont un meilleur support.

SQL

Le langage SQL, «langage de requête structuré», n’est pas un langage de programmation en tant que tel, mais c’est toujours un langage. C’est quelque chose que vous devez inévitablement apprendre.

L'une des raisons pour apprendre un langage de programmation est de traiter des données. Vous pouvez le faire dans un langage de programmation, mais vous pouvez également insérer les données dans une base de données, puis écrire des requêtes à partir de cette base de données. À cette fin, j’ai un serveur chez moi, avec de gros disques et des processeurs multicœurs. Au lieu de stocker des éléments sous forme de fichiers et d'écrire des scripts pour traiter ces fichiers, je le colle dans des tables et j'écris des requêtes SQL à partir de ces tables.


Rapide

À l'époque, lorsque les ordinateurs étaient nouveaux, avant que le C ++ ne devienne le standard de langage «orienté objet», il existait une version concurrente orientée objet du C appelée «Objective C». Comme tout le monde savait que l'avenir était orienté objet, NeXT l'a adopté comme langage de programmation d'application. Apple a acheté NeXT, qui est donc devenu le langage de programmation d’Apple.

Mais Objective C a perdu la guerre orientée objet au profit du C ++ et est devenu un langage orphelin. En outre, c'était vraiment stupide, essentiellement deux syntaxes de langage distinctes se disputant le contrôle de votre code.

C'est pourquoi, il y a quelques années, Apple a créé un remplacement appelé Swift, basé en grande partie sur une variante de Rust. Comme Rust, c’est un excellent langage de programmation «systèmes» qui permet de mieux contrôler manuellement l’allocation de mémoire, mais sans tous les dépassements de mémoire tampon et les fuites de mémoire que vous voyez en C.

C’est un excellent langage qui convient parfaitement à la programmation dans un environnement Apple. Toutefois, lorsque vous choisissez une "langue" qui n’est pas particulièrement axée sur Apple, choisissez simplement Rust.

Conclusion

Comme je l'ai mentionné ci-dessus, la connaissance de JavaScript, bash / PowerShell et SQL est inévitable. Alors commencez avec ceux-là. JavaScript, en particulier, est devenu une lingua franca, capable de faire et de bien faire presque tout ce que vous avez besoin d’une langue à faire ces jours-ci, il est donc utile d’entrer dans les détails de la recherche, JavaScript.

Cependant, il n’existe pas de langage unique pour les gouverner tous. Il existe de bonnes raisons d’apprendre la plupart des langues de cette liste. Pour certaines tâches, la prise en charge d’une langue donnée est tellement bonne qu’il est préférable d’apprendre cette langue pour résoudre cette tâche. En mettant l’accent sur Python, vous trouverez des bibliothèques bien écrites qui vous permettront de résoudre des tâches importantes. Si vous voulez travailler avec un langage que d'autres personnes connaissent, sur lequel vous pouvez poser des questions, Python est un excellent choix.

Les exceptions à cette règle sont C ++ et PHP. Ils sont tellement obsolètes que vous devriez éviter de les apprendre, sauf si vous envisagez de vous en servir.

*** Ceci est un blog syndiqué réseau Security Bloggers de Errata Sécurité Rédigé par Robert Graham. Lire le message original à: https://blog.erratasec.com/2019/04/programming-languages-infosec.html

Click to rate this post!
[Total: 0 Average: 0]

Commentaires

Laisser un commentaire

Votre commentaire sera révisé par les administrateurs si besoin.