私は最近卒業し、現在ソフトウェア開発者として働いていますが、私のキャリアのある時点で、侵入テストに移行したいと思います。
ペンテスターが独自のツールを書くこともありますが、デザインパターンに従っているかどうか、SOLIDの原則に従ってクリーンなコードを書くことを目的としているのか、それともプログラムを入手することについての詳細なのか知りたいです。その仕事をする。
少しコードを書くペンテスターとセキュリティツールの開発者の間には大きな違いがあります。
ペンテスト中に、いくつかのカスタムコードを記述する必要がある場合があります。たとえば、サーバー側のテンプレートインジェクションを見つけた場合、この正確なシナリオで機能する既製のエクスプロイトはおそらくないでしょう。しかし、少しのコーディングでシェルを取得できます。これらのスクリプトは仕事を完了するだけです。デザインパターンは無関係です。
多くのセキュリティツールは、1回限りのスクリプトよりもはるかに複雑です。 Metasploitは良い例です。 Metasploit以前は、ほとんどのエクスプロイトは、ワンショットペンテストスクリプトのように開発されていました。このエクスプロイトは特定の脆弱性を標的にし、特定のペイロードを配信します。 Metasploitは、モジュール化と構造をエクスプロイト開発に導入しました。特に、エクスプロイト、ペイロード、エンコーダーの概念の分離。
実際、現在、強力な設計手法を念頭に置いて開発されたあらゆる種類のセキュリティツールがありますが、これらの多くは商用です。 Nessus、Checkmarx、Burp Suite。
ペンテスティング作業には、さまざまなライブラリーをたくさん使用する可能性が高く、それが仕事の主な側面だと思います。
これを知っていると、これらのプロジェクトを整理したり、システムにすべてのライブラリーを配置したりするのも少し手間がかかります。作成するユーティリティごとに1つのプロジェクト/フォルダーを作成するのはかなり大変です。
ペンテストユーティリティの場合、そのようなデザインパターンなどはあまり必要ありません。 metasploitと同じように、ユーティリティを実行するにはワークフローエンジンのようなものが必要になる場合があります。
既存のワークフローエンジンのいずれかを使用して、ユーティリティ/プラグインのみを作成することをお勧めします。このようにして、高水域に入ることなく多くを達成することができます。
もう1つのビットは、ほとんどの場合1つだけに固執できるようにプログラミング言語を決定することです。あなたの質問を読んでください、それはPython、Ruby、Java、C#などである可能性があり、すべてスクリプトの目的に最適です。