私は現在テスターとして働いています。 CEHやCISSPなどのセキュリティの領域に移動することを計画しています。しかし、多くの人は、優れたハッカーになるには、少なくとも1つのプログラミング言語をよく知っている必要があると言います。私はすでにJavaについて少し知っています。しかし、私はどの言語がネットワークセキュリティと関連ドメインに近いか知りたいだけでした。では、セキュリティの領域に移るのに役立つように、どのような言語を学ばなければなりませんか?
学ぶのに最適な言語は何かについて明確な青写真はありません。そのため、私(および他の多くの人)がコンピュータセキュリティで学ぶのに適した言語であると考える2つの優れた代替案について述べたいと思います。
Luaの説明 wikipedia から:Luaは、「拡張可能なセマンティクス」を主な目的とするスクリプト言語として設計された軽量のマルチパラダイムプログラミング言語です。
LUAが学習に適した言語であることを私が言及した理由は、それが多くの一般的なセキュリティツールのスクリプトエンジンであることです。これだけでこの言語を学ぶのに十分な理由があります。一部の言語は次のとおりです。
余談ですが、ブリザードの大ヒット作であるWorld of Warcraftでさえ、ゲーム内でのLUAスクリプトのサポートがあります。
私は本を読み始めた後、Pythonに偏っています " Gray Hat Python:Pythonハッカーとリバースエンジニアのためのプログラミング "。ハッカー(一般にセキュリティスペシャリストとして知られている:)がこの言語を学ぶのが良い理由は、この本の多くの点に同意します。
Amazonからの引用Pythonは、次の理由から学ぶのに適した言語です。
素早く書くのは簡単で、ハッカーを幸せにする低レベルのサポートとライブラリを備えています。
また、Pythonシェルでインタプリタとオンザフライで対話できることも非常に快適です。
編集:HackerNewsのお気に入りの/嫌いなプログラミング言語での投票のグラフ表示:
編集2:From Digininjas poll :
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%
プログラミング言語とセキュリティの間にはそのような関係はありません。それを見るより良い方法は、すべての言語として一般的な言語を学ぶことです(つまり、Javaが妥当な出発点になります)。セキュリティ上の問題がある-難解なものではなく、さまざまなWebアプリケーションやプラットフォームのセキュリティ上の問題を検討する必要があるかもしれません。
ネットワークプロトコルを理解することは良いアイデアであり、レイヤ1〜4でトラフィックを分析できると役立ちますが、これは言語に依存しません。
幅広いガイダンスについては、タグ付けされた他の質問 Professional-Education をよく読んでください。
ネットワークセキュリティの一部には、送受信されるTCP/IPパケットの細部をいじる必要があります。そのためには、低レベルでパケットをインターセプトし、手作りのパケットも送信できる必要があります(たとえば、Linuxでは、これはSOCK_RAW
ソケット )。すべてのプログラミング言語がそのための使用可能なAPIを提供しているわけではありません。これらの機能を使用するには、Cの知識が必要になる場合があります。
それとは別に、任意のバイトの送受信に問題のないあらゆる用途のプログラミング言語はあなたにとって良いでしょう。 Javaはその点で問題ありません。
注:これはシステムに非常に偏っており、一般的なセキュリティから離れていることに気付きました。セキュリティはプロセスであり、テクノロジーだけではありません。
2つのルートから選択できますが、残念ながら(IMHO)どちらにもJavaは含まれていません。
Cは非常に優れたシステム言語です。システムコール、カーネルスペース、低レベルネットワーキングなど、unixやlinux、Digを金属の近くで使用できます。
もう1つの方法は、ツールとプログラムをより高いレベルですばやく結合できるスクリプト言語です。 Perl、python、およびRubyなどのほとんどのスクリプト言語は、ソケットレベルの抽象化へのアクセスを提供します。パフォーマンスが必要な場合、または低レベルのアクセス。
今あなたの質問の誤りに対処するために...偉大なハッカーであることはプログラミング言語を超越します。優れたハッカーであることは心の状態です。それはすべてに質問し、創造的に問題を解決できることを組み込んでいます。あなたがこれを行うことができれば、あなたはそれらに向かって自発的になるので、必要な言語を学ぶでしょう。
セキュリティを学ぶために言語を学ぶことはできません。ほとんどのセキュリティ問題はそれよりはるかに微妙です。これに対する1つの例外はSQLクエリです。ある時点で、文字列の結合とパラメーター化されたクエリの違いを本当に理解する必要があります。しかし、SQLクエリは、Java、PHP、Rubyなどの別の言語を使用して構築されています。
ただし、スクリプト言語を理解する必要があります。独自のツールを作成し、既存のツールをカスタマイズする必要があります。学ぶのに適したスクリプト言語には、JavaScript、Perl、PHP、Rubyなどがあります。
すでにJavaを使用しているので、Javaの学習を続けることをお勧めします。 Javaを使用して、SQLバックエンドでWebアプリケーションを構築するためのWebサーバー上で使用する方法を学びます。Javaを使用して簡単なコマンドラインプログラムを作成する方法を学びます。
実際に任意の言語でコードを記述した経験を積んだら、他の言語への分岐を開始します。次の良いステップはJavaScriptです。 JavaScriptは、webappを作成するためのサーバーとコマンドラインの両方で使用できます。しかし、最も重要なのは、ブラウザー内で使用することです。そのため、この言語を学ぶ必要があります。
JavaとJavaScriptはCと同様の構文を使用します。C、C++、C#、PHPなど、他のCのような言語との違いを理解することをお勧めします。
私は上で言われたことの多くに同意します。特に、Rubyの重要性を少し強調したいと思います。私の考えでは、Rubyはいくつかの理由で素晴らしい「ハッカー」言語です:
ネットワークセキュリティ関連のUnixコマンドを学ぶときは、 nmap 、socat、lft、curlを強くお勧めします。これらのホイールを再発明する理由はほとんどありません。
OpenVASは、NASLと呼ばれるネットワークセキュリティ固有のスクリプト言語をサポートしますが、元々はNessusツールからのもので、NASLはCASL(Network AssociatesのCyberCop Scannerからのもの)に基づいていました。
多くのHTTP/TLSファザーには、Webサービスやその他の強力なプログラム制御などのサポートが追加されています。最近見たクールなものは、resty-burp、buby、wXf、shrapnelです。
Tcpdump、snort、Wireshark、Network Miner、HTTP Scoopなど、何らかのパケットキャプチャアプリの利用も役立ちます。
多くの人は、Lua、Python、およびRubyが他のどの言語よりも短期および中間のネットワークセキュリティプロジェクトにとってかなり優れていると考えていますが、Metasploit、wXf、およびwatir-webdriverによって記述されたDSLはRuby MRIとJRubyを他のものよりもサポートする興味深いケースです。逆に、Luaは、Wireshark、mod-security、snort(PCREも非常にこれらのテクノロジーで一般的に見られます)。
要約すると、ネットワークセキュリティプロジェクトのコードを変更する場合は、Cプログラムを実行する可能性が高くなりますが、Ruby、Python、またはLuaで記述されたライブラリまたはフレームワーク拡張を呼び出します。トラフィック(特にHTTPまたはエクスプロイト)の送信に重点を置いている場合、Rubyが最善の策ですが、トラフィック(特にIDSまたはパケットキャプチャ)の受信に重点が置かれている場合、Luaは一般的な学習として、Pythonでdpktを試してみましたが、プロトタイピングの段階で非常に迅速にいくつかの驚くべきことを行っています。
参考資料については、本 ペネトレーションテスターのコーディング を参照してください。
私はBasicとCobolから始めてシステム開発を何年も行ってきており、次にdBase III +、VB6、Asp.NetをAccessとSQL Serverを使用して使用しています。私はCISSPでもあります。
彼はアセンブリ言語を学ぶべきだと思います。これは無関係に聞こえるかもしれませんが、リバースエンジニアリングの強力な基盤を提供し、C、C++などの基礎を理解するのにも役立ちます。ソースコードが利用できない場合、リバースエンジニアリング後のアセンブリはアセンブリです。