
by @singe(Dominic White @ SensePost)
BIRP は、TN3270 で提供されるメインフレームアプリケーションのセキュリティ評価を支援するツールです。BURP やその他の Web アプリケーションプロキシが Web アプリケーションの評価に対して行うのと同様に、BIRP は TN3270 アプリケーションの評価に対しても同じことを目指しています。また、Web アプリケーションと同様に、アプリケーション開発者が表示も変更もできないと想定していたフィールドを表示・変更できることで、セキュリティ上の前提を迂回できるようになります。
特に、BIRP は意欲的な TN3270 ハッカーのために 2 つの機能を提供します。1 つ目は、アプリケーションが画面に返したすべてのデータを表示することです。これには隠しフィールドも含まれます。2 つ目は、「保護済み」 aka「変更不可」とマークされたフィールドを変更できるようにすることです。アプリケーションの開発方法によっては、アプリケーションの機能を変更できるようになります。
./birp.py -h を実行すると、起動時のヘルプが表示されます。
必要なのは、-t でターゲットを指定することだけです。ターゲット指定には、IP の後に : でポートを含めることができます。例: 10.10.10.10:1023。ポートが指定されない場合、x3270 のデフォルト動作に従って :23 がデフォルトになります。
-l を使用すると、以前保存した履歴ファイルを履歴に読み込めます。残念ながら、現時点では必ずターゲットを指定する必要があり、履歴だけを表示することはできません。
インストールについては、下の前提条件を確認してください。現時点では Unix 環境でのみ動作し、Windows には対応していません。
現在、BIRP の機能はかなり限られています。以下がその一覧です。
対話モードは BIRP の機能の中核です。BIRP から x3270 へキー入力やその他のコマンドを渡し、アナリストが x3270 を直接使っているかのようにアプリケーションと対話できるようにします。さらに、返された各画面の注釈付き「ハッカービュー」を表示し、「トランザクション」を記録して、後の分析と検査のためにプロキシ履歴に保存します。
対話モードで Ctrl-h を押すとヘルプ画面が表示され、Ctrl-k で色の凡例が表示され、ESC でメニューに戻ります。
BIRP は「トランザクション」が発生したタイミングを判断し、変更前と変更後の画面、および変更されたフィールドを記録しようとします。通常、Enter や PF/PA キーなどの特定のキーはトランザクションを開始することが保証されています。ただし、何らかの理由で画面が動作するために異なるキーを必要とする場合は、操作を行った直後に Ctrl-u でトランザクションを手動で「プッシュ」できます。
最後に、画面を再表示したい場合は Ctrl-r を押します。
これにより、BIRP が記録したすべてのトランザクションの履歴が表示され、検査できるようになります。具体的には、送信された画面、その画面で変更されたフィールド(つまり送信されたデータ)、および応答にアクセスできます。
各画面について、コンテキストとして最初の行のみが表示されますが、トランザクションを表示すると全画面を表示できます。
また、Python にドロップして、画面オブジェクトを直接調べることもできます。
ここでは、特定のテキストを含む画面を持つトランザクションを、大文字と小文字を区別して検索できます。
履歴をファイルに保存し、後でコマンドラインの -l オプションで再読み込みできます。一意のファイル名で保存する必要があります。
このツールはまだ完成しておらず、現時点ではオブジェクトを直接操作できることが多くの点で有益です。さまざまな場所で IPython 組み込みシェルにドロップできます。BIRP には、照会できるかなり便利な Python オブジェクトのセットがあり、それらが便利な Python 的な出力(str/repr)を持つことを確認しています。最上位のオブジェクトは「history」で、「transactions」のリストを含みます。history.last() を参照することで、最後に追加されたトランザクションを照会できます。各トランザクションには、リクエストとレスポンスの画面オブジェクトがあります。たとえば、サーバーからの最後のレスポンス内のすべての隠しフィールドのリストを取得するには、history.last().response.hidden_fields を使用できます。
詳細については、tn3270.py モジュールを参照するのが最善です。
Python ライブラリ: py3270 (v0.3.4)、colorama、IPython これらは pip または easy_install でインストールできます。 py3270 がこのプルリクエスト (https://github.com/py3270/py3270/pull/13) を受け入れるまでは、私の py3270 ライブラリ (https://github.com/singe/py3270) を使用してください。
改造版 x3270 クライアント (v3.6) パッチが同梱されています。ソースは http://x3270.bgp.nu/download.html からダウンロードでき、解凍後に suite3270 ディレクトリへ cd して、patch -p1 < suite3270-full.patch を実行してください。 未変更のクライアントを使用することもできますが、その場合、保護されたフィールドを編集することはできません。 このパッチは 2 つの変更を行います。1 つは保護されたフィールドを編集できるようにすること、もう 1 つは隠しフィールドを表示可能にすること(反転テキストの強調表示で表示)です。この機能は、何らかの理由でどちらか一方だけが必要な場合に備えて、2 つの別々のパッチに分割されています。
使用しているキー処理機能は、独自のカスタム getch 実装です。かなり酷いものですが、動作します。curses、pygame、urwid など、より成熟したキー処理実装を使いたいところですが、それらはすべて画面を乗っ取ってしまいます。個人的には、スクロールバックバッファが活動の記録や、スクロールして自分が何をしたかを思い出すのに非常に役立つと感じているため、それを失いたくありませんでした。そのため、このアプローチを採用しました。
py3270 はかなり荒削りだと感じ、一部をラップすることにしました。これを独自のプログラムで使用できる独立したラッパーとして提供しています。
By dominic () sensepost.com (@singe)
SensePost による Big Iron Recon & Pwnage は、クリエイティブ・コモンズ 表示 - 継承 4.0 国際 ライセンス (http://creativecommons.org/licenses/by-sa/4.0/) の下でライセンスされています。 このライセンスの範囲を超える許可は、http://sensepost.com/contact us/. で得られる場合があります。