nsat - Network Security Analysis Tool

概要

xnsat
nsat [options] -h hostname
nsat [options] -f filename
nsat [options] -s start-ip -e end-ip

NSATは、セキュリティに関する脆弱性や弱点を持つかもしれないすべ てのリモートサービスを検査するようデザインされており、サーバの バージョン、自動のエクスプロイトの試みのログ、一致したOSのフィ ンガープリント、実行中のサービス、ICMPへの応答、デフォルトの共 有、発見されたバックドア、rpcサービス、弱いCGIスクリプトなどを 含むログファイル(下のFILESのセクションを見よ)の形で結果のレジュ メを集計する。

セキュリティアナリシスは単一ホスト(-h ホスト名)、数字のIPアドレ スのクラスレスな範囲(-s 開始IPアドレス/-e 終了IPアドレス)、ホ スト名と/または数字のIPアドレスを含むファイル(-f ファイル名)に 対して行うことができる。

ディストリビュート(分配された、Distributed)スキャン

ディストリビュートスキャンは現在、NSATにおいては初歩的な状態で 実装されている。どう働くか説明すると: 別の(あるいは、テストで 別のバーチャルIPアドレスの)ホストで動いているたくさんのエージェ ント(サーバモードのNSATプロセス)ヘ送出する。それらはデフォルト ポートの10235をリスンするだろう。次に、現在動いているエージェ ントのすべての、「.」で区切られた数字のIPアドレスを含むテキス トファイルを作りなさい。マスター(クライアントモードでのNSATプ ロセス)カラあなたが普通行うようにスキャンを始めたなら、スキャ ンはエージェントを通じてリレーされるだろう。トラフィック負荷は すべての利用可能なエージェント間で等しくバランスされるだろう。

-A
NSATプロセスをエージェントにする。バックグラウンドにフォー し、スキャン要求を受けるためデフォルトポートをリスンする。

-M ファイル名
NSATプロセスをマスターにし、すべてのスキャンを指定した ファイル名で指したファイルに指示されたエージェントへと リレーする。

オプション

NSATはタイムアウトや冗長性のオプションを含むいくつかのオプショ ンをサポートし、スキャンの振る舞いのカスタマイズや異なる型のス キャンのための最適値を設定する助けとなる。

-L
冗長なログモードを使う

-E 除外ファイル
スキャンのターゲットから除外する、CIDR(RFC 1519)の表記法 によるネットワークアドレスの範囲を含むファイルを指定する。 このファイルには127.0.0.0/8、192 3.4.5、200.10.10.0/24な どのようなものを含むことができる。スキャンのプロセスが範 囲にマッチするアドレスに出逢った時、それをスキップする。

-C 設定ファイル
カスタムの設定ファイルを指定する。NSATはnsat.confのデフォ ルト設定ファイルの代わりにそれを用いるだろう。設定ファイ ルではスキャンの振る舞い、サービス、ポート、入力、NSATが 用いるデータベースファイル名を決める。効果的で的確なスキャ ン結果を得るのにカスタマイズした設定ファイルを用いること を強く勧める。それをどうするかはnsat.confのmanページに相 談しなさい。

-V バーチャルホスト
スキャンを開始するバーチャルなネットワークインターフェイ スIPアドレスを指定できる。もしバーチャルホストが準備され、 あなたのローカルマシンにバーチャルアドレスがルーティング されるなら、すべてのスキャン(リモートOSのフィンガープリ ント、これはほとんど検知不能)はそのIPアドレスから来るよ うに見えるだろう。

-n
デフォルトでは、スキャン終了後に短かいステーテスレポート を表示し、NSATの親プロセスはバックグラウンドにフォークし て自動的に終了する。-nオプションを指定するとフォアグラウ ンドに残り、ステータス情報を表示する。これはデバッグの目 的や、もしNSATを切り離し可能なscreen(1)のセッションで使 おうとしているならばで有用である。

-t 秒
connect()やread()などのI/Oオペレーションにおけるタイムア ウトを、ハードコードされた値(再定義していなければ5秒)と 異なる値に指定する。このオプションを高すぎる値にセットす ると、すべてのスキャンが完了する前にスキャンする子プロセ スが終了するかもしれず、低すぎる値にするといくつかの特に 応答が遅いサービスを見落すかもしれない。にもかからわず、 I/Oのタイムアウトは複数ホストへのスキャンの全体のパフォー マンスを大きく低下させないよう最適化されている。

-m カウント
親スレッドが作れる子プロセスの最大数を設定する。この制限 により、スキャンするマシンが扱える以上のプロセスやディス クリプタを割りあててしまうことを防ぐ。デフォルトの最大カ ウントはインストールしたOSでハードコードされた、コンパイ ル時に変更可能なFDLIMIT値に依存する。スキャンするマシン が落ちないようにする追加のセキュリティはあるが、これに極 端に大きな値をセットすると、資源が利用できるまで待つ間、 しばしばスキャンを一時的に停止させることになりスキャンの パフォーマンスが低下する可能性があることに注意。

-l 秒
1つのホストをスキャンするのに許される子スレッドの最大の 生存時間を設定する。スキャンする子スレッドの活動は しばしば確認され、もし1つのスレッドに対してここで決めた 最大生存時間が過ぎたなら、そのスレッドは強制終了される。 デフォルトは200秒に設定されている。

-i 秒
システムのアイドルタイムを秒で指定する。アイドルタイムと は、すべてのttyや、ユーザからの入力に用いられる他のキャ ラクターデバイスが利用されていないに違いない時間である。 この値は「卑怯な」(coward, -c)スキャンモードで実行された 場合のみ意味を持つ。デフォルトは90秒である。

-p 0/1
Pingに依存したスキャンモードをオンないしオフにする。ポー トスキャンと評価の前に、それぞれのターゲットに対してping スキャンを行う。もしこのオプションを有効にしているなら、 pingがタイムアウトしたホストへはスキャンを行わない。この オプションはデフォルトではオフになっている。

-c 0/1
「卑怯な」(coward)スキャニングモードをオンないしオフにす る。それを有効にすると、ローカルユーザの行動が発見された ら(-i オプションを見よ)、NSATは自身を隠してサスペンドし、 開始時に何も報告せず、システム上以外の誰にも発見されない ようにする。このオプションはデフォルトでは無効である。

-v 0-3
スキャンの強度を選択する。NSATはいくつかのサービスからの 入力を読み、評価し、それが存在することを報告し、完全にい くつかのスキャンを省略することができる。これは、一般にス キャンのプロセスを高速化し、実際に脆弱でないか、それほど 脆弱でないサービスについての報告を最小限にするだろう。し かしながら、冗長でないスキャンはログ評価により長い時間を かけさせるかもしれない。もしあなたがSATANやSAINTのような ツールに慣れているなら、この振る舞いが役立つことがわかる だろう。-vオプションは時代遅れとなり、コンパチビリティの 理由のみで含まれている。これを利用すべきでなく、 nsat.confを書き替えてあなたのカスタムな設定ファイルにス キャンしたいサービスを指定せよ。

サービススキャンのオプション

NSATはネットークに対して(設定ファイルによる)サービスの範囲をス キャンすることができる。特に以下のサービスについてはNSATによっ て個別かつ冗長に調査される。

(古いスタイルのレベル0) bind, httpd, pop3d, portmap, smb/netbios-ssn, imapd, SOCKS4/5, FW-1

(古いスタイルのレベル1) icmp/echo, ftpd, smtpd, netbiosname, netstat, chargen, sshd, pop2d, lpd, common backdoor ports, msqld, X11/OpenWindows, SNMP, RPC services, CGI vulnera- bilities (currently over 350 CGI scripts).

(古いスタイルのレベル2) tcpmux, echo, whois, linuxconf, nntpd, fingerd, nlpsd, rexecd, rshd, rlogind, oracle, proxy servers, back orifice, ircd, telnet, DDoS agent default installations, writable ftp directories, Cisco, RealServer, HPUX Remotewatch, squid, MySQLd.

(古いスタイルのレベル3) icmp/subnetmask, icmp/timestamp, fin- gerd/nlpsd vulnerability test, X11 display sniffing, remote OS fingerprinting (現在 116のfingerprintsがある), sendmail およびその他のアクティブな脆弱性テスト(ポジティブであ る確認)

特徴

内密:NSATは「卑怯な」モードで実行することができ、ローカルマシ ン上で自身のプロセスを隠してユーザの行動を監視し、システムが本 当に利用されなくなるまでサスペンドしつづける。もしよく利用され ているマシンで広域のスキャンを行ったり、ユーザプロセスのための 資源やサービスの可用性が遅延するのを防ぎたいなら有用だろう。

回復:スキャンを複数のターゲットに対して行なうとき、NSATはオプ ション、コマンドライン引数、現在のスキャンプロセスの識別子を含 む回復ファイルを作る。このファイルは親プロセスによってしばしば 更新され、メインのプロセスを終了させるインシデントからの復旧を 可能にする。

注意:もしスキャンが中断されたなら、NSATをコマンドライン引数な しで起動させなさい。そうすれば自動的に回復し、それが停止した時 点からスキャンを続ける。もしNSATがまだ動いていることを発見した なら(同じディレクトリから起動しなければならない!)、同じ範囲をス キャンする複数のインスタンスを避けるため、回復の試みを行わない。 このため、NSATプロセスはcrontab(1)やat(1)を用い、自動的に再起動 させるのが容易である。

安定性:NSATは安定性に最適化されている。これは、プロセスの最大 数を超えず、かつスキャンに可能な限り多くの資源を割りあてるセキュ アなpid割りあてシステムを用いる。加えて、ディスクリプタ、あたら しいプロセス、ソケットの生成を監視し、失敗した場合に、NSATはサ スペンドし、以前のオペレーションをリトライする。

セキュリティ:すべての、NSATを介し、ホストがセキュリティ上の問 題を妥協するのを完全に除くよう注意されている。動的でなく割りあ てられるバッファは常に境界を検査され、プログラムはできるだけ rootでないユーザで動作しようとし(シグナルの扱いとcoreファイル生 成を避けるため)、パイプ、変換などによる弱点を除去している。NSAT は論理的にはrootにsuidするに十分なだけセキュアだが、それにもか かわらず、デフォルトでは行わないいくつかの高価なセルフチェック が存在する。もしこのプログラムをrootにsuidすることを決定したな ら、すべてのセキュリティ上のリスクを取り除くため、コンパイル時 にPARANOID_CHECKを確実に定義しなさい。

パフォーマンス:NSATは利用可能な中で最速の部類に入るスキャナで ある。I/Oの同期多重通信を利用するよう拡張し、読み出す前にソケッ トにデータが来るのを待つため、接続とselect(2)にノンブロッキング なソケットを利用した。NSATはC++で書かれており、俯瞰しやすいクラ スの実装、頑丈なエラーチェックとその扱い、効率良いファイルの取 り扱い、変数の動的な割りあて、そしてもちろん高度に最適化された コンパイルの結果によるパフォーマンスの上昇といったさまざまなC++ の特徴を利用している。

文書化

もしあなたがすべてのセキュリティホールの可能性に気付いていない なら、NSATの配布物に含まれるAdvisory, Advisory.cgi, Advisory.rpcを参照してほしい。これは、いろいろなサービス、脆弱 性とそのリスク、その脆弱性を直す方法へのアプローチを手短かに示 すだろう。

ファイル

ツール:

smb-ns これはADM smbセキュリティスキャナの小さな版である。この プログラムはNSATそのものによって実行されるので、環境変数PATHが 指すパスになければならない。

xnsat nsatのX(1)用のGUIフロントエンド。簡単で、自己説明的なイン ターフェイスである。xnsatが起動されたディレクトリに評価ログが生 成されることを思い出してほしい。Tcl/Tkのwishが必要。

pcheck OSのフィンガープリントファイルの完全性を、その内容をプリントア ウトすることでチェックするのに使われる。

zones 複数ドメインの再帰的な転送や発見されたすべてのIPアドレスをプリン トアウトするのに使われる。

getdomains.sh 名前解決のため、すべてのトップレベルのDNSドメインのリストを出力す る。

crontab.sh 定期的にNSATを再起動するためのcrontabファイルをインストールす るのに使われる。

データ

nsat.conf デフォルトのNSATの設定ファイルで、実例でもある。どのサービスと どのようにスキャンするか指定する。理解し、設定するのは容易だ。 スキャンの結果のために、(nsat -C 設定ファイルで)このファイルの カスタマイズした版を書き、利用することが強く推奨される。

nsat.cgi NSATのCGIのデータベースである。すべての、このデータベース中で コメントになっていないCGIファイルはNSATのWWWスキャン機能でスキャ ンされる。設定ファイルで別のnsat.cgiを指定することができる。

nsat.os NSATによるOS識別に必要なTCPフィンガープリントを持っている。設 定ファイルで別のnsat.osを指定することができる。

回復とログファイル:

注意:以下のファイルはNSATが実行されたカレントワーキングディレクトリで 作成されるだろう。別のディレクトリを作り、スキャンを開始するたびに異な るディレクトリに変更すべきである。スキャンの回復を行うために必ず、回復と pidファイルの場所を示すNSATが以前実行されたディレクトリに移動する必要 がある。

.nspid 現在実行中のNSATプロセスのpidを持つ。もし実行中ならば、NSATは カレントディレクトリから再起動しない;もしpidファイルが古いな ら削除され、NSATが起動するだろう。

.nsrc リカバリファイル。もし発見されたなら、NSATは以前セーブされたと ころからスキャンを再度開始しようとし、古いスキャンパラメータを 修復する。

ports.log いろいろなホストで発見されたtcp services(5)を回復する。

os.log スキャンのターゲットで動いているOSを報告する(リモートのtcpのフィ ンガープリント)。注意:もし 'unknown-os.log' が生成されたなら、 このプログラムの進歩を助けるためにそれを著者までe-mailして欲し い :)

ftp.log ftpdのバージョンと、もしあるならworld-writableなディレクトリ。

ssh.log sshdのバージョン。

telnet.log 特定のOS、範囲、WinGateプロキシ等を実行するホストを識別するtelnetバナー の切れ端

sendmail.log SMTPDのバージョン、許可されたEXPN/VRFYコマンド、フェイクメール やスパムを許すsendmailデーモン、sendmail 8.9サーバのリモートで の脆弱性についての報告

dns.log BINDのバージョン文字列、IQUERY要求への応答

httpd.log HTTPサーバのバージョン。OSバージョン、拡張やモジュールを含む可 能性がある。

pop2.log POP2サーバのバージョン。

pop3.log POP3サーバのバージョン。

imap.log IMAPサーバのバージョン。

finger.log リモートのfingerdのexploitの試みのセッションログ。

snmp.log アクセス許可とブルートフォースされたSNMPコミュニティ名を含むア クセス可能なsnmp のMIB。

nntp.log NNTPニュースサーバのバージョン。

exports.log world accessibleあるいはそれ以外の、rpc.nfsdサービスのNFS export。

netstat.log スキャンしたマシンのローカルな接続をすべて含む可能性のある netstatセッションの記録。

backdoor.log 疑わしいポートで発見されたシェルのバックドアのコマンド実行の試 みのセッションログ。

ircd.log ircd MOTD, SNATが応答した /stats, 名前、ircdのバージョンを含む IRCセッションの記録。

xwindows.log ディスプレイを開くことを許す脆弱なXサーバ。

netbios.log MS-WindowsやSambaサーバが動いているマシンのNetBIOS名。

icmp.log 応答時間(秒)を含むping応答、応答されたICMPのタイムスタンプ、サ ブネットマスクアドレス問い合わせへの応答の記録。

rpc.log 発見された脆弱なrpcサービスのレジュメ。

cgi.log 存在した脆弱なcgiスクリプトのレジュメ。

bo.log パスワードなしでポート31337/udpのBOpingに応答したBack Orifice 1のクライアントのセッションログ。

nlps.log nlpsサービスのexploitの試みの記録。

debug.log たくさんの、変で混乱するようなデバッグ用のもの(もし -DEBUGオプ ションありでコンパイルしたなら)

バグ

もし広域をスキャンするならば、NSATは相応の資源を消費する; よって、それぞれの実行される子プロセスについて、10kb/sの帯域、 50kのRAM, 0.3%(x86)のCPU時間があるべきである。もしnsatをsuid rootのバイナリとするなら、PARANOID_CHECKを定義してコンパイルす ることを確実にしなさい。もし-DEBUGオプションでコンパイルするな らば、いくぶんかのパフォーマンスの無駄を覚悟しなさい。その上、 はっきりしたバグは知られていない。もし発見したら教えてほしい。

著者

Mixter
http://members.tripod.com/mixtersecurity

クレジット

Code from the following other GNU applications has been used in the creation of NSAT:

BASS (c) Liraz Siri ,
ADMsmb (c) ADM samba team,
ADMsnmp (c) ADM crew,
nbname (c) mynock,
binfo-udp (c) J.J.Drake,
BOunix (c) Sir Dystic / cDc,
sscan (c) jsbach,
wuscan (c) ben-z/shdwknght,
queso (c) savage@apostols.org,
rpcscan (c) sk8@lucid-solutions.com,
whisker (c) .rain.forest.puppy., cgiscan (c) CKS/Fdisk,
voideye scanner (c) Team Void, httpver (c) Shok
XCrash (c) columcille@thevortex.com

Network Security Analysis Tool is (c) 1999-2002 by Mixter.

ライセンス

NSATはGNU General Public Licenseのバージョン2に基づいて配布され る。あなたはこのプログラムを非商用の目的で自由に利用し、変更し、 配布することができる。もしあなたがこのプログラム、またはその一 部を商用目的で配布しようとするならば、そうする前に著者とのコン タクトを確実にとってほしい。GPLのコピーは、この配布物に含まれる。


Mimori Yuki <mimori@puni.net>