Ich bin dabei, bei Purdue ein vierjähriges Studium der Informationssicherheit zu beginnen. Der Abschluss sieht keine Programmierkurse vor. Das einzige Mal, dass ich eines nehmen kann, sind gelegentliche Wahlfächer. Also werde ich den größten Teil meines Lernens alleine machen. Zu Beginn meines Abiturjahres habe ich mich entschlossen, komplett auf Linux umzusteigen. Bisher habe ich einige Linux- und Sicherheits-Dinge gelernt. Ich glaube aber auch, dass es mir wichtig sein wird, auch ein paar Programmiersprachen zu lernen.
Grundsätzlich plane ich zu lernen, wie man Vim nebeneinander programmiert. Es wird also höchstwahrscheinlich ein langsamer Prozess sein. Am Ende denke ich aber, dass es sich lohnen wird. Wie gesagt, ich gehe auf die Sicherheit ein und erstelle hauptsächlich sicherheitsrelevante Anwendungen, von denen die meisten netzwerkbezogen sind. Ich würde auch gerne mit der Entwicklung von Android-Anwendungen beginnen, aber das wird später geschehen.
Davon abgesehen habe ich ein paar Ideen. Ich habe darüber nachgedacht, mit JavaScript zu beginnen, da es plattformübergreifend ist, und ich habe es bereits zuvor vorgeschlagen. Ich habe auch viel über Ruby gehört oder könnte mit C den natürlichen Linux-Weg gehen. In welche Richtung soll ich gehen?
Sie werden feststellen, dass jeder so ziemlich nur seine Lieblingssprache empfehlen wird. Meine Lieblingssprache ist Perl, daher empfehle ich diese Sprache. :) Über meine persönlichen Vorlieben hinaus gibt es jedoch einige gute Gründe, warum Sie die Verwendung von Perl in Betracht ziehen sollten:
Erstens ist Perl eine wunderbare Allzwecksprache. Es ist einfach, in Perl zu beginnen, indem Sie einfache Skripte schreiben, um dieselben Aufgaben wie in Shell-Skripten auszuführen, z. B. Dateien zu manipulieren und Entscheidungen auf der Grundlage von Benutzereingaben zu treffen. Dies bietet eine sehr einfache und schrittweise Einführung in die allgemeinen Ideen der Programmierung. Perl gibt es schon eine ganze Weile, daher gibt es viele Ressourcen (Bücher und Websites) für den Einstieg.
Zweitens ist Perl eine unglaublich leistungsfähige und ausdrucksstarke Sprache, die alle modernen Programmierfunktionen unterstützt. Ich benutze es seit über fünfzehn Jahren und lerne immer noch neue Wege, um Dinge effizienter zu machen. Wenn Sie zum Beispiel die objektorientierte Programmierung erforschen möchten, hat Perl dies (insbesondere durch Moose ).
Drittens verfügt Perl über die nahezu unendliche Leistungsfähigkeit und Flexibilität seines offiziellen Add-On-Repositorys CPAN . Um beispielsweise der Idee des Schreibens von Sicherheitssoftware zu folgen, möchten Sie beispielsweise eine Art benutzerdefinierten Netzwerksicherheitsscanner entwickeln. Anstatt alles selbst zu schreiben, können Sie zunächst NMAP :: Scanner als Scan-Engine verwenden und dann Ihre eigenen Optimierungen und Verbesserungen hinzufügen.
Wenn Sie sich mit Webprogrammierung beschäftigen möchten, bietet Perl auch diese Möglichkeiten. Eine beliebte moderne Möglichkeit, Web-Software in Perl zu schreiben, ist Catalyst , das ein modernes MVC-Webframework für die schnelle Entwicklung von Web-Apps aller Art bietet.
Alles in allem bietet Perl den Vorteil, dass Sie kleine Kommandozeilen-Skripte und -Programme schreiben und nach und nach zu voll ausgestatteten modernen Anwendungen werden können. Der Preis für diese Flexibilität ist natürlich die Komplexität. Es liegt an Ihnen, zu lernen und zu lernen, wie man Dinge richtig macht. Perl erzwingt keine guten Praktiken wie andere Sprachen. Ich persönlich mag diese Freiheit, vor allem in Verbindung mit all den großartigen Ressourcen im Internet, um den Umgang mit Perl zu erlernen.
quelle
Drei Sprachen kommen Ihnen zugute. In absteigender Reihenfolge der Wichtigkeit (dh die erste ist die wichtigste):
quelle
script language
, wiepython
oderPHP
.Sie sollten mehrere Sprachen lernen. Ich würde vorschlagen, mit Python zu beginnen. Es wird allgemein empfohlen, um einfach zu erlernen und sehr nützlich zu sein. Viele hervorragende Materialien zum Selbststudium stehen kostenlos zur Verfügung, und meiner Meinung nach wird es von IT-Sicherheitsexperten häufig verwendet. Fast jedes Mal, wenn ich Sicherheitsprofis sehe, die Demonstrationscode veröffentlichen, ist es Python.
quelle
Bin ich der Einzige, der OMG denkt !!!! An diesem Punkt?
So würde ich sagen. Obwohl Sie nicht wirklich erwarten, ein kompetenter Programmierer zu werden, benötigen Sie wahrscheinlich die Fähigkeiten, um Angriffe zu simulieren / neu zu erstellen und die Funktionsweise des Programmierprozesses zu verstehen. Sie benötigen auch die Fähigkeiten, um Daten zu analysieren und Informationen aus Massenquellen (wie Protokollen) zu extrahieren. JimB hat Bash erwähnt - und während Sie dies zweifellos verwenden werden, dauert es nur ein paar Stunden, um die wesentlichen Teile zu lernen. Tatsächlich ist der einzige Ort, an dem Sie Bash wahrscheinlich jemals sehen werden, Linux-Systeme - aber die anderen Shells sind sehr ähnlich.
Ich würde empfehlen, awk und / oder Perl für die Datenverarbeitung zu lernen. Machen Sie sich keine Gedanken darüber, ob Sie ein objektorientiertes Kästchen ankreuzen müssen, aber ich würde empfehlen, auch nicht-prozedurale Sprachen zu betrachten.
Durch das Erlernen von C erhalten Sie auch zahlreiche Informationen darüber, wie sich Code in ein ausführbares Programm verwandelt (das Kompilieren ist nur ein Schritt in einem sehr komplexen Prozess).
Die naheliegende Wahl für jemanden, der sich für Android / Mobile-Entwicklung interessiert, wäre Java - aber Java versucht sehr, den Entwickler davon abzuhalten, sich mit den Realitäten des Betriebs und der Protokolle auseinanderzusetzen - meiner Erfahrung nach treten hier Sicherheitsprobleme mit Java auf Apps. Das heißt, es könnte Ihnen helfen, Ihr letztes Ziel zu erreichen, und es wird in Ihrem Lebenslauf gut aussehen, aber Sie sollten nicht erwarten, dass das Erlernen von Java Ihre Sicherheitskenntnisse stark ergänzt.
quelle
Mein Rat:
bash
(und sein Typ) sind keine Allzweck-Programmiersprachen. Obwohl es möglich ist, einige ausgefeilte Skripte zu erstellen, ist diesbash
nicht der beste Weg, um das Programmieren im Allgemeinen zu erlernen. Es ist die natürlichste Art, Systemadministrationsaufgaben zu erledigen, bei denen es in erster Linie darum geht, andere Programme auszuführen, ihre Datendateien und -verzeichnisse zu verwalten und Ein- und Ausgaben in diese und aus diesen zu marshallen. Wennbash
es sich um einen Hammer handelt, reservieren Sie ihn für Probleme, die wirklich wie Nägel aussehen. Das Erlernen nicht-trivialer Aufgabenbash
wird erheblich erleichtert, wenn Sie einige sehr kleine Teilmengen vonsed
und lernenawk
(da die Manipulation von Zeichenfolgenbash
weitgehend von der Syntax ähnlicher Operationen in diesen "kleinen" Sprachen inspiriert ist).Ich empfehle , dass Sie einen einleitenden Text auf C gelesen und einige Zeit den Lauf verbringen
strace
undltrace
Befehle auf einigen einfachen Dienstprogramm Befehle wiels
undmkdir
und/bin/echo
usw. (Eigentlich würde ich vorschlagen , in diesen Tagenltrace -S
statt demstrace
aben Streifzüge in die Ausgabe von beiden Befehlen und in Dieltrace
Ausgabe, die durch die-S
Option erweitert wird, ist äußerst lehrreich.C ist die primäre Programmiersprache, in der der Linux-Kernel und die GNU libc geschrieben sind. (Kleinteile sind in Montage). Fast alle Programme auf einem Linux-System (oder einem anderen UNIX-ähnlichen System) sind mit den C-Bibliotheken (libc) verknüpft. Die primären Perl- und Python-Interpreter (und die meisten anderen Skriptsprachen) sind ebenfalls in C geschrieben. Diese Programme (der Kernel, die allgemeinen Systembibliotheken und die verschiedenen Interpreter für Skriptsprachen) sind alle von C-Programmierern geschrieben, da ihr Design und ihre Funktionen stark beeinflusst werden durch ihre zugrunde liegenden Implementierungen. Ein tieferes Verständnis von alledem erfordert daher schließlich das Verständnis von C. Sie müssen weder C ++ noch Java kennen, um die Programmierung auf dieser Ebene zu verstehen. (Diese können je nach Karriere-Patch für sich interessant und notwendig sein.)
Wenn Sie also mit meinen bisherigen Prämissen einverstanden sind, haben wir uns für eine Wahl zwischen Perl und Python entschieden.
Hier beginnen echte Flammenkriege.
Mein Rat ist, sich zuerst auf Python (2.x) zu konzentrieren. Python hat eine relativ einfache und konsistente Syntax. Sie können die Grundlagen der Python- Syntax in wenigen Stunden erlernen, und das ist die überwiegende Mehrheit der Syntax, die Ihnen jemals begegnen wird. Es gibt nur wenige Funktionen (Listenverständnisse, Generatorausdrücke, Dekoratoren), die die grundlegende Syntax verknittern. Der größte Teil Ihrer Mühe beim Erlernen von Python wird dem Erlernen der umfangreichen Standardbibliotheken und dem Versuch gewidmet sein, den "besten" Weg zu finden, sie zu verwenden (und herauszufinden, welche spezifischen Ausnahmen es wert sind, behandelt zu werden, um Ihre Programme robust zu machen). und vor allem beim Erlernen der zugrunde liegenden Konzepte.
Ich denke, dass die umfangreichen Bibliotheken und die relativ einfache Syntax von Python zwei deutliche Nachteile haben.
Erstens, wenn Sie in Python lernen, wie man etwas auf einer sehr hohen Ebene macht, werden Sie vielleicht den Gedanken haben, auf einer niedrigeren Ebene arbeiten zu müssen, um mühsam zu sein. Wo ich arbeite Perl ist der Standard. Ich habe meine Arbeit in Python prototypisiert, wo ich weiß, dass ich sie viel schneller und zuverlässiger zum Laufen bringen kann als in Perl. dann fürchte ich, es für meine Kollegen nach Perl portieren zu müssen. (Ich war einigermaßen gut in Perl, bevor ich Python benutzte - es ist also keine Frage der einfachen Vertrautheit).
Der andere Nachteil ist, dass es manchmal schwierig ist, in Python die beste Lösung für eine bestimmte Aufgabe zu finden. Zum Beispiel, um eine Webseite abzurufen, könnten Sie zunächst versuchen, dies mit Sockets auf niedriger Ebene zu tun ... was funktionieren wird. Sie würden jedoch ziemlich viel Code duplizieren, den Sie bereits in den Modulen
urllib
und / oder finden könnenurllib2
. Die Tatsache, dass die Standardbibliotheken ab 2.7.1 beides enthalten, macht meinen Standpunkt aus. Wo immer möglich, haben die Python-Betreuer ältere Module und APIs transparent erweitert. Es gibt jedoch Dutzende von Fällen, in denen Python zwei oder drei Module beibehält, bei denen eine transparente Erweiterung aus irgendeinem Grund nicht möglich war. (Für ein anderes Beispiel , das Sie bei den Optionen für das Parsen von Kommandozeilen - Optionen aussehen könnten:argparse
,optparse
undgetopt
. Das Schreiben von Programmen mitgetopt
(dem ältesten davon) schadet wenig . Für sehr einfache Dienstprogramme mit wenigen Optionen und einer strengen Anrufkonvention (die zum Beispiel nur von einer kleinen Gruppe von Menschen verwendet wird) ist es nicht von Natur aus falsch, über sichsys.argv
selbst zu gehen. In der Regel lohnt es sich jedoch, die Dokumente sorgfältig zu lesen und den Links am Ende älterer oder niedrigerer Module zu folgen, die die verfügbaren neueren oder höheren Funktionen beschreiben.Mein Rat basiert auf meiner Meinung, dass Sie sich auf tiefere Konzepte konzentrieren möchten und nicht viel Zeit und Mühe auf syntaktische und sprachspezifische Probleme verwenden müssen. Zu verstehen, wann ein Unterprozess oder ein Thread oder die in Python enthaltenen Multi-Processing-Funktionen verwendet werden müssen, hat relativ wenig mit der Sprache zu tun, und alles, was mit Programmierkenntnissen zu tun hat, unabhängig von der Sprache. (Wenn Sie Argumente zum ereignisgesteuerten Twisted-Modell im Vergleich zu Threading und Multiprocessing verstehen, haben Sie wahrscheinlich Python beherrscht und können in jeder Sprache programmieren.)
Das Gegenargument für Perl ist einfach und praktisch. Es gibt noch eine ganze Reihe weiterer Jobs, die speziell nach Perl-Kenntnissen verlangen. Perl ist eine mächtige Sprache und verfügt über extrem umfangreiche Bibliotheken. (Der Kern von Perl, der mit den meisten Linux-Systemen ausgeliefert wird, umfasst einen kleineren Funktionsumfang als die Standard-Python-Bibliotheken. Es wird davon ausgegangen, dass Sie eine erhebliche Anzahl zusätzlicher Pakete aus Ihrer Distribution oder über CPAN - das Comprehensive Perl Archive - installiert haben Netzwerk). (Im Gegensatz dazu gibt es weniger Python-Module und -Pakete, die ich separat abrufen muss ... diese sind bei PyPI erhältlich - dem Python-Paketindex).
Wenn Sie also Perl lernen, haben Sie kurzfristig die Qual der Wahl, einen Job zu finden, insbesondere einen Sysadmin-Job. Die Syntax von Perl ist jedoch ... naja ... in den Worten einiger seiner eigenen Enthusiasten ... "pathologisch vielseitig!" Perl kann extrem knapp sein und sein Code ist mit einer Menge Interpunktion gefüllt. Diejenigen, die es lieben, werden endlos behaupten, dass es "einfach" und sinnvoll ist - und sie werden endlose Möglichkeiten haben, dies in Foren zu tun, die voller Verwirrung darüber sind, wie genau ein bestimmter Codeausschnitt interpretiert wurde. Die Syntax und die Sprache, die in der Dokumentation verwendet werden, und diejenigen, die sie in öffentlichen Foren unterstützen, sind so differenziert, dass Sie erhebliche Anstrengungen unternehmen können, um sie zu erlernen.
Bitte beachten Sie, dass dieser vorhergehende Kommentar subjektiv und voreingenommen ist. Möglicherweise werden Sie Perl ausprobieren und feststellen, dass die Syntax intuitiv und angenehm ist. Wenn ja, mehr Kraft für Sie. Ich persönlich finde jedoch, dass mein Verständnis von Perls Eigenheiten sehr schnell abnimmt. Die Grundlagen, die ich beibehalten habe, sind jedoch schwierig, wenn ich für mehr als ein paar Zeilen Code wieder darauf zurückgreifen muss.
Es gibt viele andere Sprachen, die Sie lernen würden, Java, Lisp und Schema, TCL, Scala und so weiter. Ich würde jedoch vorschlagen, mit einem zu beginnen, das die beste Balance zwischen Nützlichkeit und Einfachheit bietet.
quelle
In der Linux-Welt sollten Sie zwei grundlegende Dinge wissen:
Regular Expression
. Das ist ein Muss.RegEx
ist eine universelle "Sprache". Wenn Sie einmal wissen, wie man reguläre Ausdrücke verwendet, wird Ihr Leben viel einfacher :-)quick & dirty
" ist in der Linux - Welt sehr verbreitet. Wenn Sie Ihre Arbeit erledigen können, egal wie hässlich Ihre Lösung ist, haben Sie Ihre Arbeit erledigt.Also, wenn Sie eine Sprache auf Linux erfahren möchten, Sie sollten ein wählen
script language
, wiepython
,PHP
oder sogarbash scripting
.Und ich empfehle
PHP
. Es ist einfach und hässlich. Es verfügt über ein detailliertes Online-Handbuch . Es hat eine guteRegEx
Unterstützung. Das ist alles.quelle
Sie können fast jede Aufgabe in fast jeder Sprache erledigen. Die richtige Wahl hängt also maßgeblich von dem Problem ab, das Sie lösen.
Es lohnt sich auf jeden Fall, Sprachen aus folgenden Kategorien zu kennen:
Ich würde mich bemühen, C / C ++ zu erlernen, da dies Stapelbeschädigung und direkten Speicherzugriff ermöglicht. Dies ist wichtig, wenn Sie mit Sicherheitsproblemen experimentieren möchten. Viele Sprachen haben eine C-ähnliche Syntax (einschließlich JavaScript), daher ist dies ein gutes Sprungbrett.
Wenn Sie viel in einer Shell arbeiten, was Sie beim Lernen von vim wahrscheinlich auch sind, werden Sie als Nebeneffekt die grundlegenden Skripte der Shell lernen. UNIX Power Tools war ein gutes Buch, um fortgeschrittenere Dinge zu lernen. Ich weiß nicht, ob es noch veröffentlicht ist.
PHP kann auch eine gute Sprache zum Lernen sein. Der Hauptvorteil, den es neuen Programmierern bietet, besteht darin, dass viele Funktionen integriert sind und nicht in einer Bibliothek, zu der Sie eine Verknüpfung herstellen müssen (was keine komplexe Aufgabe ist). Aus diesem Grund werden Sie beim Durchsuchen der Hauptdokumente über viele Dinge informiert .
quelle
Zunächst einige negative Ratschläge:
TU das nicht. Finden Sie einen Editor, der wirklich komfortabel ist. Das Erlernen der Sprache und des Editors ist dreimal so schwer wie das Erlernen der Reihenfolge (natürlich sollte der Editor zuerst beginnen :-))
Netzwerkbezogene Sicherheits-Apps? C ist hier eine gute Wahl. Sie müssen auf der System-API-Ebene auf das Netzwerk zugreifen, was bedeutet, dass C der richtige Weg ist. Dies bedeutet natürlich nicht, dass sich alles in C befinden muss - eine C-Bibliothek + ein
$favorite-high-level-language
Wrapper können Ihnen die C-bezogenen Probleme in Teilen ersparen, die kein C benötigen.Ich wette, es wurde in einem anderen Kontext als Ihrem vorgeschlagen. JavaScript hat seine Stärken, ist aber noch keine gute Allzwecksprache. JS hat keine Standardbibliotheken, die mit denen von C, Python, Perl, Ruby, Java & Company vergleichbar sind.
Apropos
$favorite-high-level-language
- mein Rat ist, mit Python zu gehen. Es passt gut zu C, wird mit vielen nützlichen Bibliotheken ausgeliefert und verfügt über viel mehr Bibliotheken als Add-Ons.quelle
Das Erlernen von Javascript ist überhaupt nicht verkehrt, aber es läuft nur unter einem Browser, sodass sich Ihre Programmierung auf Apps beschränkt, die mit Webseiten in Verbindung stehen.
Es gibt wahrscheinlich so viele Antworten auf die Frage, was eine gute Programmiersprache ist, wie es Sprachen gibt. Mein Tuppence-Wert ist, dass Sie es schlechter machen könnten, als mit einfachen Shell-Skripten zu beginnen, nur zu sehen, was Sie tun können, um Aufgaben zu automatisieren, ohne etwas über die Shell hinaus zu verwenden, und dann diese mit Perl oder einer ähnlichen Sprache zu erweitern, die aus der Notwendigkeit heraus entstanden ist Aufgaben, die komplexer sind als die Shell, können dann ausgeführt werden. Wenn Sie wirklich interessiert sind, dauert es nur ein paar Wochen, bis Sie C oder ein Derivat verwenden.
quelle
Meine Empfehlungen? Hmmm. Nun, Sie müssen sich vielleicht entscheiden, wie Sie gehen. Für den gesunden, abgerundeten Bereich können Sie den üblichen CS-Grad-Weg einschlagen, möglicherweise nicht in dieser Reihenfolge.
(1) C / C ++ - Sie können das objektorientierte Material herunterladen, und zumindest haben Sie es versucht. C ++ ist der "professionelle" Standard. (2) Assembly (nur für einen kleinen Teil - es wird Ihnen helfen, die tatsächlichen Funktionen des Prozessors, des Speichers usw. zu verstehen - Sie müssen es nicht heiraten.) (3) Python / Perl / Bash - Holen Sie sich diese Wenn Sie die Skriptsprachen nicht verwenden, sind sie für Ihre Linux-Kenntnisse (4) PHP / Ruby, MySQL und HTML am nützlichsten. Sie werden den gesamten Server-Client-Interaktionsprozess verstehen, eine weitere Computerebene.
Benötigen Sie hilfreiche Konzepte? KI, neuronale Netze. Diese sollten Sie abrunden.
Sie können eine davon auswählen oder alle berühren. Meine Sprache? Alle nach Bedarf, aber ich programmiere seit 1984 und habe einen CS-Abschluss, geschriebene Spiele und alle Arten von Anwendungen für eingebettete Systeme. Es ist was ich tue. Sie müssen herausfinden, wer Sie sind und was Sie tun. Stellen Sie sicher, dass Sie Spaß haben.
Genießen!
quelle
hoppla, missgelesene info-sicherheit für info-systeme ... na ja das meiste davon gilt immer noch
Java
Wenn Sie unter Linux arbeiten und einen ersten Programmierkurs in Java absolvieren und dann vielleicht ein paar weitere Programmierkurse absolvieren, sollten die anderen Tools wie Bash sed / awk usw. irgendwie passen. Wenn Sie sich wirklich mit Systemen beschäftigen, werden Sie vielleicht später ein wenig mit C anfangen, aber ich würde nicht sagen, dass es sehr gefragt ist, und ich würde nicht einmal sagen, dass es eine Voraussetzung dafür ist, ein System-Typ zu sein - es sei denn, Sie stehen wirklich auf Interna.
YMMV
quelle