
asadbg は、Cisco ASA デバイスのライブデバッグを自動化するためのツールフレームワークです。
予備的な注意:これは asatools の一部として使用することをお勧めしますが、単体で使用することもできます。
asadbg は、Cisco ASA デバイスのライブデバッグを自動化し、シリアル/SSH を介した Cisco CLI との対話を自動化して反復的なタスクを迅速に実行するためのツールフレームワークです。

asadbg.cfg 設定ファイルをサポートし、異なるバージョンのデバッグを容易にしますメインツールは asadbg.py で、他のほとんどのヘルパースクリプトを実行します。最初に asafw を使用してファームウェアをアンパックし、asadbg を最大限に活用する必要があるかもしれません。
asadbg.py: ASA のデバッグに使用するメインツールasdbg_hunt.py/asadbg_rename.py: idahunt と共に使用する IDA Python スクリプトで、新しいターゲットのシンボルをインポートします以下は asadbg.py によって自動的にインポートされますが、それらの目的についての情報を提供します:
asa_lib*.py: libdlmalloc、libptmalloc、libmempool を使用するための gdb Python スクリプトasa_sync.py: ret-sync を使用するための gdb Python スクリプトcomm.py: シリアル、SSH、telnet を介して通信するための関数群find_lina_pid.py: SSH コマンドを使用して lina PID を検索しますtemplate_gdbinit: デバッグするすべてのターゲットに対して asadbg.py によってパッチ適用される gdbinit テンプレート最初に asadbg/env.sh を環境に合わせて変更する必要があります。これにより、すべてのスクリプトで使用されるツールへのパスと、ASA 環境に一致するいくつかの変数を定義できます。同様の asafw/env.sh もありますが、両方のプロジェクトで使用するために必要なのは1つだけです。~/.bashrc に追加することをお勧めします:```
source /path/to/asadbg/env.sh
# 自動デバッグ
asadbgを使用する主な利点の1つは、
エミュレートされた(GNS3)デバイスと実際のCisco ASAデバイスの両方の使用を自動化できることです。これには単に
さまざまなファームウェアや設定の起動と実行を自動化することが含まれます。または
具体的には、gdbを使用した`lina`のデバッグプロセスを自動化することです。これはほとんど
`asadbg.py`スクリプトを通じて行われます。主なアイデアは、フラッシュを
ASAデバイスに、そのデバイスで使用したいファームウェアと設定ファイルを
事前にロードすることです。デバッグしたい各ファームウェアについては、何かを使用できます。
`asafw`ツールのようなものを使ってさまざまなシンボルをマイニングし、その後自動的に
それらのシンボルを使用してgdbinitファイルを生成します。デフォルトでは、`asadbg.py`は
`template_gdbinit`ファイルを使用して、バージョン固有のgdbinitファイルを
データベースに存在する任意のシンボルを使用して実行時に構築することを自動化します。
## 実際のデバイスをすばやく起動する(デバッグなし)
特定のバージョンは、CFカード上にすでにあるファームウェアと設定
ファイルを指定することで、すばやく起動できます。```
asadbg$ ./asadbg.py --firmware-type normal --serial-port /dev/ttyUSB0 --firmware asa802-k8.bin --config config-802
以下の例は、GNS3デバイスをデバッグするために設定ファイルをセットアップする方法を示しています。まず、以下に似た asadbg.cfg 設定ファイルを定義します。これには、GSN3自体から取得した、設定済みファイアウォールのGNS3 IP/ポートが含まれています。```ini
[GLOBAL]
gns3_host=192.168.5.1
asadb_file=asadb.json
[asav941200] version=941200 arch=gns3 rootfs_path= /home/user/_asav941-200.qcow2.extracted/rootfs gns3_port=12005 attach_gdb=yes
また、必要なアドレスが含まれるASAデータベースファイル`asadb.json`を指定しています。ここで重要なのは、`asadbg.cfg`で指定された`version=941200`と`arch=gns3`により、以下の`asadb.json`内のファームウェアと一致させることができる点です。また、gdbをアタッチしたいことも指定しています。```json
{
"ASLR": false,
"addresses": {
"clock_interval": 59514112,
"socks_proxy_server_start": 22139744,
"aaa_admin_authenticate": 418288
},
"fw": "asav941-200.qcow2",
"lina_imagebase": 4194304,
"version": "9.4.1.200",
"arch": 64
}
ここでデバッグを開始すると、clock_interval が自動的にパッチされます:```
asadbg$ ./asadbg.py --name asav941200 --asadbg-config asadbg.cfg
[asadbg] Using config file: asadbg.cfg
[asadbg] Found section: 'asav941200' in config
[asadbg] Using gdb: '/usr/bin/gdb'
[asadbg] Using architecture: gns3
[asadbg] Trying lina: /home/user/_asav941-200.qcow2.extracted/rootfs/asa/bin/lina
[asadbg] Going to debug...
[asadbg] Using GNS3 emulator 192.168.5.1:12005
[asadbg] Starting gdb now...
[gdbinit_941200] Configuring paths...
[gdbinit_941200] Disabling pagination...
[gdbinit_941200] Connecting over TCP/IP...
0x0000003655201190 in ?? () from /home/user/_asav941-200.qcow2.extracted/rootfs/lib64/ld-linux-x86-64.so.2
[gdbinit_941200] Connected.
[gdbinit_941200] Watchdog disabled
[gdbinit_941200] heap debugging plugins loaded
[gdbinit_941200] Additional gdb scripts loaded
[gdbinit_941200] Done.
(gdb) c
Continuing.
## 設定ファイルを使用した実機のデバッグ
次の例では、シリアルコンソール経由で実機のCisco ASAデバイスをデバッグするための
設定ファイルのセットアップ方法を示しています。```ini
[GLOBAL]
serial_port=/dev/ttyUSB0
asadb_file=asadb.json
[asa924-gdb]
version=924
arch=32
rootfs_path=/home/user/_asa924-k8.bin.extracted/rootfs
firmware=asa924-k8-debugshell-gdbserver.bin
config=config-924
firmware_type=gdb
attach_gdb=yes
また、firmware_type を指定する必要があることにも注意してください。これは
ファームウェアが未改変か、root化されているか、シリアルシェルが有効か、またはブート時にgdbが
有効化されているかを示します。これは
フォーマットに応じてブート時に異なる処理を行うためです。ここで
ブート時にgdbserverが有効化され、デバッグシェルを含む改変ファームウェア asa924-k8-debugshell-gdbserver.bin を
使用していることがわかります。
以下に、ブートROMが起動すると、asadbgが自動的に
シーケンスを中断して、CFカード上にあるファームウェアと設定ファイルを
ロードすることがわかります。```
asadbg$ ./asadbg.py --name asa924-gdb --asadbg-config asadbg.cfg
[asadbg] Using config file: asadbg.cfg
[asadbg] Found section: 'asa924-gdb' in config
[asadbg] Using gdb: '/usr/bin/gdb'
[asadbg] Using architecture: 32
[asadbg] Trying lina: /home/user/_asa924-k8.bin.extracted/rootfs/asa/bin/lina
[asadbg] Going to debug...
[asadbg] Using serial port: /dev/ttyUSB0
[asadbg] Loading 'asa924-k8-debugshell-gdbserver.bin' with 'config-924'...
[comm] Waiting boot...
[SNIP]
Platform ASA5505
Use BREAK or ESC to interrupt boot. Use SPACE to begin boot immediately. Boot interrupted.
[SNIP] rommon #0> boot asa924-k8-debugshell-gdbserver.bin cfg=config-924 Launching BootLoader... Boot configuration file contains 1 entry.
Loading asa924-k8-debugshell-gdbserver.bin........ Booting... Platform ASA5505 [SNIP] SMFW PID: 514, Starting /asa/bin/lina under gdbserver /dev/ttyS0 SMFW PID: 512, started gdbserver on member: 514//asa/bin/lina SMFW PID: 512, created member ASA BLOB, PID=514 Process /asa/bin/lina created; pid = 517 Remote debugging using /dev/ttyS0 [comm] gdb detected - boot finished. [comm] Boot should be finished now? [asadbg] Starting gdb now... [gdbinit_924] Configuring paths... [gdbinit_924] Disabling pagination... [gdbinit_924] Connecting over USB... 0xdc7e2820 in ?? () from /home/user/_asa924-k8.bin.extracted/rootfs/lib/ld-linux.so.2 [gdbinit_924] Connected. [gdbinit_924] Watchdog disabled [gdbinit_924] heap debugging plugins loaded [gdbinit_924] Additional gdb scripts loaded [gdbinit_924] Done. (gdb) c Continuing.
# 追加シンボルのインポート
asadbg の多くの部分は、さまざまなファームウェアバージョンのシンボルを含むデータベース `asadbg/asadb.json` に依存しています。既存のシンボルは少数提供されていますが、手動で追加したり、[idahunt](https://github.com/nccgroup/idahunt) を使用して新しいターゲットを自動的に追加したりできます。このセクションではその方法を詳しく説明します。
## 要件
asadbg 内の IDA Python スクリプトは、`filelock.py/ida_helper.py` が利用可能であることを前提としています。これらは IDA Python から直接実行されるため、これまでの方法では `asadbg/` 内にシンボリックリンクを作成しています。Windows のシンボリックリンクは Linux とは異なるため、リポジトリ上に作成することはできません。したがって、手動で行う必要があります。
Linux の場合:```
asadbg$ ln -s ../idahunt/ida_helper.py ida_helper.py
asadbg$ ln -s ../idahunt/filelock.py filelock.py
Windowsでは、管理者権限で:``` C:\asadbg> mklink filelock.py ..\idahunt\filelock.py C:\asadbg> mklink ida_helper.py ..\idahunt\ida_helper.py
また、データベースへのパスを設定する必要があります(`env.sh` によって自動的に行われます):```
C:\idahunt>set ASADBG_DB=C:\asadbg\asadb.json
ファームウェアを asafw などを使用してディレクトリに展開済みであるか、
lina ファイルのみを抽出して、それがどのファームウェア由来かを示す階層に配置済みであることを前提とします。```
C:\temp>tree /F
Folder PATH listing
Volume serial number is XXXX-XXX
C:.
├───asa924-k8.bin
│ lina
│
├───asa924-smp-k8.bin
│ lina
│
└───asav941-200.qcow2
lina
まず、IDAで初期分析を行う必要があります。`--list-only` を
任意のコマンドと併用して、コマンドの結果がどうなるかを確認できます。