
CVE-2023-39361 のCacti(ネットワークグラフ作成ソリューション)向けエクスプロイト。教育およびセキュリティテストを目的としたSQLインジェクションの脆弱性を示します。
develop ブランチから Cacti を実行するソースコードを使用する場合、またはリポジトリから直接コードをダウンロードする場合は、データベースにテーブルやカラムが存在しないというエラーが発生した際に、データベースアップグレードスクリプトを実行することが重要です。
データベースへの変更は、新規インストールに使用される cacti.sql ファイルにコミットされ、既存インストール用のインストーラーデータベースアップグレードにもコミットされます。 ブランチではリリースまでバージョン番号が変更されないため、データベースアップグレードが実行されない結果となります。そのため、データベースアップグレードスクリプトを使用して現在のバージョンを強制するか、データベース内のバージョンを更新することが重要です。
developCacti が約20年前に最初に開発された当時、MySQL は現在ほど成熟していませんでした。The Cacti Group が Cacti 1.x を設計する際、多くのテーブルで InnoDB ストレージエンジンの使用をユーザーに強制する決定がなされました。これは、InnoDB ストレージエンジンが、ウェブサイトに複数の同時ログインがある場合に優れたユーザーエクスペリエンスを提供するためです。少し遅いものの、開発者にとってもより高い回復力を提供します。
とはいえ、アップグレード前に MySQL/MariaDB に対して実行しなければならない変更がいくつかあり、サービスの再起動が必要です。MariaDB または MySQL のリリースによって、以下の設定は必須となるか、すでにデフォルトで有効になっています:
[mysqld]
# required for multiple language support
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
# Memory tunables - Cacti provides recommendations at upgrade time
max_heap_table_size = XXX
max_allowed_packet = 500M
tmp_table_size = XXX
join_buffer_size = XXX
sort_buffer_size = XXX
# important for compatibility
sql_mode=NO_ENGINE_SUBSTITUTION,NO_AUTO_CREATE_USER
# innodb settings - Cacti provides recommendations at upgrade time
innodb_buffer_pool_instances = XXX
innodb_flush_log_at_trx_commit = 2
innodb_buffer_pool_size = XXX
innodb_sort_buffer_size = XXX
innodb_doublewrite = ON
# required
innodb_file_per_table = ON
innodb_file_format = Barracuda
innodb_large_prefix = 1
# not all version support
innodb_flush_log_at_timeout = 3
# for SSD's/NVMe
innodb_read_io_threads = 32
innodb_write_io_threads = 16
innodb_io_capacity = 10000
innodb_io_capacity_max = 20000
innodb_flush_method = O_DIRECT
必須 の設定は非常に重要です。そうでないと、アップグレード中に問題が発生します。XXX と記載された設定については、Cacti がアップグレード時に推奨値を提供します。これらの設定を調整するために、アップグレード中に MySQL/MariaDB を再起動する必要があることは珍しくありません。アップグレードを開始する前に、この点を特に注意してください。
アップグレード前に、これらの必須変更を行い、その後 MySQL/MariaDB を再起動してください。その後、以下のスクリプトを実行することで(bash を使用している場合)、時間と潜在的なエラーを節約できます:
for table in `mysql -e "SELECT TABLE_NAME FROM information_schema.TABLES WHERE table_schema='cacti' AND engine!='MEMORY'" cacti | grep -v TABLE_NAME`;
do
echo "Converting $table";
mysql -e "ALTER TABLE $table ENGINE=InnoDB ROW_FORMAT=Dynamic CHARSET=utf8mb4" cacti;
done
これにより、InnoDB または MyISAM のテーブルがすべて Barracuda ファイル形式、動的行形式、utf8mb4 に変換されます。なお、innodb_file_per_table をオンにせずに MySQL または MariaDB を使用していた場合は、データベースをバックアップし、/var/lib/mysql ディレクトリ内の ib* ファイルを削除して InnoDB をリセットし、その後データベースと MySQL/MariaDB のテーブルおよび権限を復元する方が良いかもしれません。このような手順を実行する前に、必ずテストサーバーで練習し、変更に慣れてから行ってください。
頑張ってください。Cacti をお楽しみください!
sudo -u cacti php -q cli/upgrade_database.php --forcever=`cat include/cacti_version`
update version set cacti = '1.1.38';
注: 上記のバージョンを正しいバージョンに変更してください。変更しない場合、インストーラーが以前のバージョンからアップグレードするリスクがあります。
Cacti は、RRDtool のデータストレージおよびグラフ作成機能のパワーを活用するために設計された完全なネットワークグラフ作成ソリューションであり、以下の機能を提供します:
リモートおよびローカルデータコレクター
デバイス検出
デバイスおよびグラフ作成の自動化
グラフおよびデバイステンプレート
カスタムデータ収集方法
ユーザー、グループ、ドメインのアクセス制御
これらすべてが、LAN 規模のインストールから数千台のデバイスを持つ複雑なネットワークまでに対応する、直感的で使いやすいインターフェースにまとめられています。
2000年代初頭に Ian Berry によって高校のプロジェクトとして開発され、以来、数千の企業や愛好家がエンタープライズネットワークやデータセンターの監視・管理に使用してきました。
Cacti は、以下の要件を満たす任意の Linux、UNIX、または Windows ベースのオペレーティングシステムで実行できるはずです:
PHP 5.4+
MySQL 5.1+
RRDtool 1.3+、1.5+ 推奨
NET-SNMP 5.5+
PHP サポート付き Web サーバー
PHP はスタンドアロンの cgi または cli バイナリとしてコンパイルされている必要もあります。これは cron によるデータ収集に必要です。
php-snmp モジュールはオプションとしてマークしています。ipv6 デバイスを使用しておらず、snmpv3 エンジン ID やコンテキストも使用していない限り、php-snmp の使用は安全です。それ以外の場合は、問題を引き起こす可能性があるため、php-snmp モジュールのアンインストールを検討してください。php-snmp の問題を認識しており、これらの問題を解決するために php プロジェクトへの参加を検討しています。
RRDtool は複数のバージョンで利用可能であり、その大部分が Cacti でサポートされています。グラフのレンダリングに問題がある場合は、RRDtool バージョンに対する Cacti 設定を確認することを忘れないでください。
ドキュメントは Cacti リリースに同梱されており、ドキュメントリポジトリ でも閲覧できます。
ダウンロード、変更ログ、リリースノートなどについては、メインの Cacti ウェブサイトをチェックしてください!
Cacti の範囲が広いため、フォーラムはかなりのトラフィックを生成する傾向があります。私たちは同時にすべての場所にいることはできないため、基本的な質問に答えることで貢献することは大きな助けになります。Cacti コミュニティフォーラム に参加して、Cacti コミュニティに貢献してください。
Cacti ドキュメントの作成と編集に参加しましょう!GitHub でフォーク、変更、プルリクエストを送信して、ドキュメントの改善にご協力ください。
Cacti の開発に参加しましょう!GitHub で開発者とコミュニティに参加してください!
Cacti は、データソースの概念を通じてデータの収集を処理します。データソースは、入力メソッドを利用してデバイス、ホスト、データベース、スクリプトなどからデータを収集します。収集できるデータの性質に関して可能性は無限です。データソースは、基盤となる RRD ファイルへの直接のリンクです。データが RRD ファイル内にどのように保存されるか、および RRD ファイルからデータがどのように取得されるかを決定します。
Cacti の心臓部とも言えるグラフは、定義されたデータソース定義を使用して RRDtool によって作成されます。
すべてを統合するために、Cacti はポータブルテンプレートの作成と利用を可能にする広範なテンプレートシステムを使用します。グラフ、データソース、RRA テンプレートにより、すぐにグラフとデータソースを簡単に作成できます。Cacti コミュニティのサポートとともに、テンプレートは今日のコンピューティングおよびネットワーク環境で使用されているあらゆる数のデバイスのグラフ作成をサポートする標準的な方法となっています。
収集間隔を設定できるローカルおよびリモートのデータ収集をサポートします。詳細については、Cacti 内の データソースプロファイル を確認してください。データソースプロファイルは、作成時またはデータテンプレートレベルでグラフに適用できます。
リモートデータ収集は、リモートデータコレクターへのリソースのレプリケーションを通じて簡単に行えます。メインの Cacti インストールへの接続がリモートデータコレクターから失われた場合でも、接続が復元されるまで収集したデータを保存します。リモートデータ収集には、メインの Cacti インストール場所への MySQL および HTTP/HTTPS アクセスのみが必要です。
Cacti は、デバイスのセットアップと管理にかかる時間と労力を削減するために、管理者に一連のネットワーク自動化機能を提供します。
複数の定義可能なネットワーク検出ルール
デバイスの設定方法を指定する自動化テンプレート
Cacti はネットワーク監視システム以上のものであり、Cacti 機能の拡張と増強を可能にする運用フレームワークです。The Cacti Group は、さまざまなプラグインの維持を続けています。Cacti に機能を追加したい場合は、GitHub に選択できる参考資料がかなりあります。
Cacti は、グラフの表示中に多くのランタイム拡張を可能にします:
動的に読み込まれるツリーおよびグラフビュー
文字列、グラフ、テンプレートタイプによる検索
表示の拡張
シンプルな時間範囲の調整
便利なスライディング時間ウィンドウボタン
ワンクリックリアルタイムグラフオプション
CSV への簡単なグラフエクスポート
ワンクリックでの RRA ビュー
レルム(Cacti の領域)ごと、グラフごと、グラフツリーごと、デバイスごとなど、ユーザーごとおよびグループごとの権限をサポートします。Cacti の権限モデルはロールベースアクセス制御(RBAC)であり、柔軟な権限割り当てを可能にします。パスワードの複雑さ、パスワードの有効期間、期限切れパスワードの変更の強制をサポートします。
Cacti は、以下を含むほとんどの RRDtool グラフ作成機能をサポートします:
フル右軸
シフト
ダッシュおよびダッシュオフセット
Alt y-grid
グリッドフィットなし
単位の長さ
タブ幅
動的ラベル
ルール凡例
凡例の位置
VDEF
積み上げ線
ユーザー定義可能な線幅
テキスト配置
Copyright (c) 2004-2023 - The Cacti Group, Inc.