Linux で Nmap スクリプト エンジン (NSE) スクリプトを使用する方法
Nmap は、人気のある強力なクロスプラットフォームのコマンドライン ネットワーク セキュリティ スキャナーおよび探索ツールです。また、ネットワークに接続されているシステムの概要を把握するのにも役立ちます。これを使用すると、ライブ ホストのすべての IP アドレスを見つけたり、開いているポートやそれらのホストで実行されているサービスをスキャンしたり、その他多くのことができます。
Nmap の興味深い機能の 1 つは、さらに高い柔軟性と効率性をもたらす Nmap スクリプト エンジン (NSE) です。これにより、Lua プログラミング言語で独自のスクリプトを作成し、これらのスクリプトを他の Nmap ユーザーと共有できるようになります。
こちらもお読みください: Linux 用の Nmap コマンドの 29 の実用的な例
NSE スクリプトには次の 4 種類があります。
- プレルール スクリプト – Nmap のスキャン操作の前に実行されるスクリプトであり、Nmap がターゲットに関する情報をまだ収集していないときに実行されます。
- ホスト スクリプト – Nmap がターゲット ホストに対してホスト検出、ポート スキャン、バージョン検出、OS 検出などの通常の操作を実行した後に実行されるスクリプトです。
- サービス スクリプト – ターゲット ホストでリッスンする特定のサービスに対して実行されるスクリプトです。
- ポストルール スクリプト – Nmap がすべてのターゲット ホストをスキャンした後に実行されるスクリプトです。
次に、これらのスクリプトは、認証 (認証)、ホストの検出 (ブロードキャスト)、認証資格情報を推測するブルート フォース攻撃 (ブルート<) などのさまざまなカテゴリにグループ化されます。)、ネットワークに関する詳細を検出する (検出)、サービス拒否を引き起こす (dos)、何らかの脆弱性を悪用する (エクスプロイト)など。多くのスクリプトがデフォルト カテゴリに属します。
注: 次に進む前に、次の重要な点に注意してください。
- サードパーティのスクリプトを批判的に検討することなく、または作成者を信頼する場合にのみ実行しないでください。これは、これらのスクリプトはサンドボックス内で実行されないため、予期せずまたは悪意を持ってシステムに損傷を与えたり、プライバシーを侵害したりする可能性があるためです。
- 次に、これらのスクリプトの多くはプレルールまたはポストルールスクリプトとして実行される可能性があります。これを考慮すると、一貫性を保つために事前ルールを使用することをお勧めします。
- Nmap は、scripts/script.db データベースを使用して、利用可能なデフォルトのスクリプトとカテゴリを特定します。
利用可能なすべての NSE スクリプトの場所を確認するには、次のようにターミナルでロケート ユーティリティを実行します。
locate *.nse
/usr/share/nmap/scripts/acarsd-info.nse
/usr/share/nmap/scripts/address-info.nse
/usr/share/nmap/scripts/afp-brute.nse
/usr/share/nmap/scripts/afp-ls.nse
/usr/share/nmap/scripts/afp-path-vuln.nse
/usr/share/nmap/scripts/afp-serverinfo.nse
/usr/share/nmap/scripts/afp-showmount.nse
/usr/share/nmap/scripts/ajp-auth.nse
/usr/share/nmap/scripts/ajp-brute.nse
/usr/share/nmap/scripts/ajp-headers.nse
/usr/share/nmap/scripts/ajp-methods.nse
/usr/share/nmap/scripts/ajp-request.nse
/usr/share/nmap/scripts/allseeingeye-info.nse
/usr/share/nmap/scripts/amqp-info.nse
/usr/share/nmap/scripts/asn-query.nse
...
NSE スクリプトは、--script
フラグを使用してロードされます。これにより、カテゴリ、スクリプト ファイル名、またはスクリプトが配置されているディレクトリの名前を指定して、独自のスクリプトを実行することもできます。
スクリプトを有効にするための構文は次のとおりです。
nmap -sC target #load default scripts
OR
nmap --script filename|category|directory|expression,... target
--script-help
オプションを使用すると、スクリプトの説明を表示できます。さらに、--script-args
および --script-args-file
オプションを介して一部のスクリプトに引数を渡すことができます。後者は、ファイル名ではなくファイル名を指定するために使用されます。コマンドライン引数。
ほとんどのデフォルト スクリプトでスキャンを実行するには、-sC
フラグを使用するか、または示されているように --script=default
を使用します。
nmap -sC scanme.nmap.org
OR
nmap --script=default scanme.nmap.org
OR
nmap --script default scanme.nmap.org
サンプル出力
Starting Nmap 7.01 ( https://nmap.org ) at 2017-11-15 10:36 IST
Nmap scan report for scanme.nmap.org (45.33.32.156)
Host is up (0.0027s latency).
Not shown: 999 filtered ports
PORT STATE SERVICE
80/tcp open http
|_http-title: Go ahead and ScanMe!
Nmap done: 1 IP address (1 host up) scanned in 11.74 seconds
スクリプトを適切な目的で使用するには、まず、http ヘッダー など、スクリプトが実際に何を行うのかについての簡単な説明を取得します。
nmap --script-help http-headers scanme.nmap.org
サンプル出力
Starting Nmap 7.01 ( https://nmap.org ) at 2017-11-15 10:37 IST
http-headers
Categories: discovery safe
https://nmap.org/nsedoc/scripts/http-headers.html
Performs a HEAD request for the root folder ("/") of a web server and displays the HTTP headers returned.
Nmap スキャンを実行するための NSE スクリプトのロード
スクリプトを選択またはロードして、以下で説明するさまざまな方法でスキャンを実行できます。
スクリプト名の使用
スクリプトの動作がわかれば、それを使用してスキャンを実行できます。 1 つのスクリプトを使用することも、スクリプト名のカンマ区切りリストを入力することもできます。以下のコマンドを使用すると、ターゲット ホストの Web サーバーに設定されている HTTP ヘッダーを表示できます。
nmap --script http-headers scanme.nmap.org
Starting Nmap 7.01 ( https://nmap.org ) at 2017-11-15 10:39 IST
Nmap scan report for scanme.nmap.org (45.33.32.156)
Host is up (0.27s latency).
Not shown: 996 closed ports
PORT STATE SERVICE
22/tcp open ssh
80/tcp open http
| http-headers:
| Date: Wed, 15 Nov 2017 05:10:04 GMT
| Server: Apache/2.4.7 (Ubuntu)
| Accept-Ranges: bytes
| Vary: Accept-Encoding
| Connection: close
| Content-Type: text/html
|
|_ (Request type: HEAD)
179/tcp filtered bgp
31337/tcp open Elite
Nmap done: 1 IP address (1 host up) scanned in 20.96 seconds
カテゴリの使用
1 つのカテゴリまたはカンマ区切りのカテゴリのリストからスクリプトをロードすることもできます。この例では、デフォルトおよびブロードキャスト カテゴリのすべてのスクリプトを使用して、ホスト 192.168.56.1 でスキャンを実行します。
nmap --script default,broadcast 192.168.56.1
* ワイルドカードの使用
これは、特定の名前パターンを持つスクリプトを選択する場合に便利です。たとえば、ssh で始まる名前を持つすべてのスクリプトをロードするには、ターミナルで次のコマンドを実行します。
nmap --script "ssh-*" 192.168.56.1
ブール式の使用
また、and、or、およびnot演算子を使用して作成できるブール式を使用してスクリプトを選択することもできます。また、ブール式内の名前は、カテゴリ、script.db のファイル名、またはすべての場合があります。
次のコマンドは、デフォルトまたはブロードキャスト カテゴリからスクリプトを読み込みます。
nmap --script "default or broadcast" 192.168.56.10
これは次と同等です:
nmap --script default,broadcast 192.168.56.10
vuln カテゴリのスクリプトを除いたすべてのスクリプトをロードするには、ターミナルで次のコマンドを実行します。
nmap --script "not vuln" 192.168.56.10
次のコマンドは少し複雑に見えますが、理解するのは簡単です。デフォルトまたはブロードキャスト カテゴリ内のスクリプトを選択し、名前が ssh-: で始まるものは除外します。
nmap --script "(default or broadcast) and not ssh-*" 192.168.56.10
重要なのは、次のように、カテゴリ、スクリプト名、カスタム スクリプトを含むディレクトリ、またはブール式を組み合わせてスクリプトをロードできることです。
nmap --script broadcast,vuln,ssh-auth-methods,/path/to/custom/scripts 192.168.56.10
NSE スクリプトに引数を渡す
以下は、–script-args オプションを使用してスクリプトに引数を渡す方法を示す例です。
nmap --script mysql-audit --script-args "mysql-audit.username='root', \
mysql-audit.password='password_here', mysql-audit.filename='nselib/data/mysql-cis.audit'"
ポート番号を渡すには、-p nmap オプションを使用します。
nmap -p 3306 --script mysql-audit --script-args "mysql-audit.username='root', \
mysql-audit.password='password_here' , mysql-audit.filename='nselib/data/mysql-cis.audit'"
上記のコマンドは、CIS MySQL v1.0.2 ベンチマークの一部に対して MySQL データベース サーバーのセキュリティ構成の監査を実行します。他の MySQL 監査用に独自の便利なカスタム監査ファイルを作成することもできます。
今のところは以上です。詳細については、Nmap のマニュアル ページを参照するか、NSE の使用法を確認してください。
独自の NSE スクリプトの作成を開始するには、このガイドを参照してください: https://nmap.org/book/nse-tutorial.html
結論
Nmap は、すべてのシステム管理者やネットワーク管理者がセキュリティ対策に必要とする非常に強力で便利なツールです。NSE は、その効率をさらに高めるだけです。
この記事では、Nmap スクリプト エンジンについて紹介し、さまざまなカテゴリで利用可能なさまざまなスクリプトを見つけて使用する方法を説明しました。ご質問がございましたら、以下のコメント フォームからお気軽にお問い合わせください。