DB クライアントツールを通じて発生する情報流出

最近の侵害事故では、攻撃者が単純にシステムにアクセスするだけでなく、内部データベースを直接照会し、機密情報を窃取する状況が頻繁に確認されている。特に、攻撃者が被害システムに直接 DB クライアントツールをインストールしてデータを流出させる方法が増加しており、DBeaver、Navicat、sqlcmd などの正常なツールがこの過程で活用されている。

 

このような行為は合法的な管理者の行為に偽装されやすく、検知が難しく、流出の痕跡も一部のシステムログやクライアントツールのローカル記録、SQL サーバーの実行ログなどを通してのみ確認される。

 

また、DB クライアントツールは、ユーザーがデータベースアドレス (IP)、ポート、アカウント情報 (ID/PW) などを明示的に設定しなければ正常に動作しないため、このようなツールが使用されたということは、すなわち攻撃者が該当データベースのアクセスに必要な情報をすべて確保した状態であることを意味する。これはその後の情報収集および流出段階に進む可能性があることを示す状況として解釈できる。

 

本ブログは、攻撃者が侵害システムに直接インストールまたは使用する DB クライアントツールの特徴と痕跡を分析し、MS-SQL 環境がインストールされた模擬環境を基準として、該当ツールを通じてどのようなログが残り、セキュリティの観点でどのような対応と検知が可能であるかを整理する。

 

ツール別分析

本ブログでは、攻撃者が活用した事例が確認された DBeaver、Navicat、sqlcmd ツールのみを扱う。各ツールは Windows 環境で最新バージョンでテストが実施されており、ログ位置やログファイル名はバージョンごとに異なる場合がある。

 

ツール

バージョン

DBeaver

25.0.4

Navicat for Premium

17.2.5

sqlcmd

N/A(LOLBins)

表 1. テストに使用されたツールバージョン情報

DBeaver

DBeaver は、さまざまなリレーショナルデータベースをサポートするオープンソースツールであり、クエリの実行、データの照会、エクスポート機能などを提供する GUI ベースのアプリケーションです。

 

図 1. DBeaver アプリケーション実行画面

システムおよびログの痕跡

DBeaver를 이용한 데이터 유출 여부는 ‘dbeaver-debug.log’와 ‘.log’  파일을 통해 확인할 수 있다.

DBeaver を使用したデータ流出の有無は、「dbeaver-debug.log」 と 「.log」 ファイルを通じて確認できます。

 

DBeaver は、内蔵のエクスポート機能を使用してクエリ結果または全体のテーブルを CSV、Excel、JSON などさまざまな形式のファイルに保存できます。このようなエクスポート動作およびユーザーの行為は debug ログを通じてデータ流出に関連する痕跡を追跡できます。debug ログにはデータのエクスポート履歴だけでなく、DBeaver のバージョン、インストールパス、実行時間、終了時間なども記録される。

 

図 2. DBeaver のデータエクスポート機能

 

  • パス: C:\Users\<ユーザー名>\AppData\Roaming\DBeaverData\workspace<バージョン>\.metadata\dbeaver-debug.log
  • 保存ファイル名パターン: ${table}_${timestamp}

debug ログ内の “Export to the new file” 文字列を通じてユーザーのデータのエクスポート (export) の痕跡を確認できるほか、ファイル名などの具体的なエクスポート対象情報も記録されます。また、該当ログが存在しなくても、ユーザーがいつ、どのデータベースにアクセスしたかの接続履歴が残り、正常な管理者以外のユーザーが特定の時間に機密データベースにアクセスしたかどうかを確認するのに役立てることができます。

 

図 3. DBeaver debug ログで確認できるデータのエクスポート痕跡 (dbeaver-debug.log)

 

 

なお、.log ファイルは DBeaver 実行中に発生したシステムエラーおよび例外情報を記録し、DB 接続失敗、ドライバーローディングエラー、SQL 文エラーなどの内容を含めている。これにより、攻撃者が実際に DB にアクセスしたかどうか、データ流出の試みが失敗したかどうかを追加的に確認できる。

  • パス: C:\Users\<ユーザー名>\AppData\Roaming\DBeaverData\workspace<バージョン>\.metadata\.log

 

利用された事例

공격자는 피해 시스템에 RDP로 접근한 후, 웹 브라우저에서 DBeaver를 검색하고 설치했다. 이후, 기본 저장 파일 명인 ‘${table}_${timestamp}.txt’ 형식으로 데이터를 추출했다. 이 과정에서 공격자가 실행한 일부 쿼리는 .log 파일을 통해 확인할 수 있었다. 접근 권한이 없어서 실행되지 않은 쿼리, SQL 구문 오류로 인해 실패한 시도 등이 기록되어 있었으며, 이를 통해 공격자가 여러 차례 테스트 작업을 수행했음을 확인할 수 있다.

攻撃者は、被害システムに RDP でアクセスした後、Web ブラウザで DBeaver を検索してインストールしました。その後、デフォルトの保存ファイル名である ‘${table}_${timestamp}.txt’ 形式でデータを抽出した。この過程で攻撃者が実行した一部のクエリは .log ファイルを通じて確認することができた。アクセス権限がなくて実行されなかったクエリ、SQL 文エラーによって失敗した試みなどが記録されており、これを通じて攻撃者が何度もテスト作業を実行したことが確認できる。

 

図 4. 攻撃者が DBeaver プログラムをインストールした履歴

図 5. アクセス権限がなくて実行されなかったクエリ (.log)

図 6. 文法エラーによって実行されなかったクエリ (.log)

Navicat

Navicat은 PremiumSoft 사에서 개발한 소프트웨어로, 다양한 데이터 베이스를 지원하고 SQL 쿼리, 데이터 내보내기 등 기능을 제공한다. 해당 도구는 상용 도구 이지만, 14일 체험판을 제공하고 있어 공격자들이 많이 사용하고 있다. 이번 도구 테스트에서는 Navicat 17 버전이 사용됐다.

Navicat は PremiumSoft 社が開発したソフトウェアであり、さまざまなデータベースをサポートし、SQL クエリ、データのエクスポートなどの機能を提供する。商用ツールであるが、14日間の体験版を提供しているため、攻撃者が多く使用している。今回は Navicat 17 バージョンを使用した。

図 7. Navicat 実行画面

システムおよびログの痕跡

Windows 환경에서 Navicat을 사용할 경우, 데이터 내보내기(Export) 작업에 대한 내역은 기본 로그 파일에 저장되지 않는다. 만약, Export 설정을 저장한 ‘.nexptmssql’ 형식의 프로필 파일이 존재한다면, 해당 파일을 통해 Export 수행 여부를 간접적으로 추정할 수 있다. 해당 파일에는 대상 테이블 및 쿼리 결과 등이 포함되며, XML 기반 구조로 저장되어 있다. ‘TargetName’, ‘TargetfilePath’는 각각 Export한 테이블 이름과 위치에 대한 정보가 포함되어 있다.

Windows 環境で Navicat を使用する場合、データのエクスポート作業に関する履歴は基本ログファイルに保存されない。もし、Export 設定を保存した「.nexptmssql」形式のプロファイルファイルが存在すれば、該当ファイルを通じて Export 実行の有無を間接的に推定することができる。該当ファイルには対象テーブルおよびクエリ結果などが含まれ、XML ベースの構造で保存されている。「TargetName」、「TargetfilePath」にはそれぞれ Export したテーブル名と位置に関する情報が含まれている。

 

図 8. Navicat で確認できる Export 履歴 (.nexptmssql)

 

  • パス: C:\Users\Administrator\Documents\Navicat\SQL Server\Servers\<サーバー名>\<DB 名>\<スキーマ名>\
  • 保存ファイル名: <ファイル名>.nexptmssql

 

반면, Linux 환경에서는 LogExport.txt 파일을 통해 export한 내역을 확인할 수 있다. 하지만 해당 로그는 누적되지 않아 실행할때 마다 덮어 씌워지므로 장기간의 활동 내역을 추적하거나, 공격자의 과거 활동을 식별할 때 주의가 필요하다.

一方、Linux 環境では LogExport.txt ファイルを通じてエクスポートした履歴を確認できる。しかし、該当ログは累積されないため、実行するたびに上書きされるので、長期間の活動履歴を追跡したり、攻撃者の過去の活動を特定する際には注意が必要である。

 

  • パス: ./home/your_username/.config/navicat/Premium/Logs
  • 保存ファイル名: LogExport.txt

 

利用された事例

공격자는 리버스 터널링 환경이 구축된 시스템에 RDP를 이용해 접근했다. 공격자는 접근한 이후, DB에 접근하기 위해 navicat 17 버전을 설치하고 SELECT 구문을 이용해 사용자 정보가 저장되어 있는 테이블의 행 갯수를 조회했다. 이후, Export 기능을 이용해 <DB명>.mdb 파일 형태로 테이블 내 데이터를 저장하고 외부로 유출을 수행했다.

攻撃者はリバーストンネル環境が構築されたシステムに RDP を利用してアクセスした。攻撃者はアクセス後、DB にアクセスするために navicat 17 バージョンをインストールし、SELECT 文を利用してユーザー情報が保存されているテーブルの行数を照会した。その後、Export 機能を利用して <DB 名>.mdb ファイル形式でテーブル内のデータを保存し、外部に流出させた。

 

図 9. LogHistory.txt で確認されたテーブル照会履歴

図 10. LogExport.txt で確認されたテーブル抽出履歴

sqlcmd

sqlcmd は Microsoft SQL Server で提供されるコマンドラインベースのデータベース管理ツールであり、SQL Server 環境を構成する際にデフォルトでインストールされる。さらに、LoLBins (Living off the Land Binaries) と分類され、攻撃者が悪用できる正常な実行ファイルの一つである。攻撃者は MS-SQL 環境を対象に情報を流出させる際に sqlcmd を使用して SQL クエリコマンドを送信し、テーブルの照会およびデータベースのバックアップなどの行為を実行する。

 

システムおよびログの痕跡

sqlcmd を使用してデータベースおよびテーブルをバックアップするには、資格情報が必要である。MS-SQL は Windows 認証 (ローカルアカウント) と SQL 認証 (sa アカウント) の 2つの認証方式を使用し、認証方式によって使用される sqlcmd コマンドオプションが異なる。

 

オプション

機能

-S

SQL Server のアドレスとポートを指定

-U

SQL Server ログインアカウント設定 (SQL 認証)

-P

パスワード設定

-d

接続するデータベース名

-Q

実行する SQL クエリ

-s

カラム区切り文字の設定

-E

Windows アカウント認証

表 2. 攻撃者が MS-SQL バックアップ時に利用する主要オプション

 

機能

コマンド例

Windows 資格情報認証

sqlcmd -S localhost -E -Q “BACKUP DATABASE [Test] TO DISK=’C:\Test.bak’ WITH INIT”

SQL 資格情報認証

sqlcmd -S 192.168.0.1,1433 -U sa -P password -Q “BACKUP DATABASE [Test] TO DISK=’C:\Backup\Test.bak’ WITH INIT”

表 3. MS-SQL 認証方式による sqlcmd コマンドの例

Windows 認証の場合は -E オプションを使用し、別途資格情報を入力することなく現在の Windows セッションのユーザーで認証を行う。ただし、権限の昇格などによりコマンドプロンプトが SYSTEM 権限で動作する場合は Windows 資格情報認証を行うことができないため、sqlcmd コマンドを成功させることができない。

図 11. SYSTEM 権限で sqlcmd コマンドを実行した場合に確認される認証失敗ログ

 

sqlcmd コマンドで BACKUP クエリを使用してデータベースをバックアップする場合、MS-SQL の主要ログイントレースログと Error ログでバックアップ実行履歴を確認することができる。

 

  • パス: C:\Program Files\Microsoft SQL Server\MSSQLXX.<InstanceName>\MSSQL\Log
  • 保存ファイル名: ERRORLOG.*/ log_*.trc

 

図 12. sqlcmd コマンドを使用してデータベースをバックアップするときに確認されるトレースログ

 

図 13. sqlcmd コマンドを使用してデータベースをバックアップするときに確認されるエラーログ

利用された事例

攻撃者は MS-SQL サーバーに対する制御権を取得した後、バッチスクリプトファイルを作成した。バッチスクリプト内には sqlcmd を使用してテーブル情報を照会および保存するコマンドが明示されている。攻撃者は管理者権限で該当のバッチファイルを実行し、データベース内のテーブル情報を [テーブル名].dat 形式で保存し、外部に流出させた。ただし、SELECT 文でテーブル照会結果をファイルに保存する場合は MS-SQL 関連ログでその履歴を確認することができないが、SRUM アーティファクトで sqlcmd.exe プロセスが多数のデータを通信した履歴が確認された。これはデータ照会プロセスで通信した履歴であると判断される。

図 14. 攻撃者が sqlcmd コマンドに使用したバッチファイルの内容

図 15. sqlcmd ネットワーク通信履歴

結論

攻撃者は上記のツール以外にも侵害後、データベース内のデータを照会するためにさまざまな DB クライアントツールを利用できる。特に DB クライアントツールは正常な運用過程でも使用されるため、これらのツールの使用有無を Anti-Virus 製品で検知することは現実的に難しい。

侵害事故に対応する観点では、上記で説明したシステムおよびログの痕跡を分析し、攻撃者がどのデータにアクセスしたのか、どの情報が流出したのかを迅速に把握して対応することが重要である。もし組織内部で DB クライアントツールの使用が必要ない環境であれば、EDR などのビヘイビアベースのセキュリティソリューションを活用して、該当ツールの作成および実行履歴を検知することが必要である。また、インフラ内の DB ログを定期的にチェックして DB およびテーブルのバックアップ履歴があるかを確認することも効果的な検知方法の一つである。

さらに、DBMS が提供するアクセス制御機能を積極的に活用することも重要である。データベースアカウントはユーザーごとに必要な権限のみ最小限に付与し、特定の管理者 IP からのみ接続できるように制限する必要がある。

最後に、DB 接続アカウント情報 (資格情報) をメールで共有したり、Excel またはテキストファイルに保存する行為は攻撃者に簡単に奪取される恐れがあるため、厳しく禁止する必要がある。このような脆弱な管理方式は大量の情報流出につながる可能性があるため、初期段階から徹底的に予防することが重要である。

関連 IOC および詳細な解析情報は、AhnLab の次世代脅威インテリジェンスプラットフォーム 「AhnLab TIP」 サブスクリプションサービスを通して確認できる。