
CVE-2023-39361에 대한 Cacti(네트워크 그래프 솔루션) 익스플로잇으로, 교육 및 보안 테스트 목적으로 SQL 인젝션 취약점을 시연합니다.
develop 브랜치에서 Cacti 실행하기소스 코드를 사용하거나 저장소에서 코드를 직접 다운로드하여 사용하는 경우, 데이터베이스에서 누락된 테이블이나 컬럼을 참조하는 오류가 발생하면 데이터베이스 업그레이드 스크립트를 실행하는 것이 중요합니다.
데이터베이스 변경 사항은 새 설치에 사용되는 파일에 커밋되며, 기존 설치를 위한 설치 프로그램 데이터베이스 업그레이드에도 커밋됩니다. 브랜치에서는 릴리스 전까지 버전 번호가 변경되지 않으므로 데이터베이스 업그레이드가 실행되지 않을 수 있습니다. 따라서 데이터베이스 업그레이드 스크립트를 사용하여 현재 버전을 강제로 적용하거나 데이터베이스의 버전을 업데이트하는 것이 중요합니다.
cacti.sqldevelopCacti가 약 20년 전에 처음 개발되었을 때, MySQL은 지금처럼 성숙하지 않았습니다. Cacti Group이 Cacti 1.x를 설계할 때, 많은 테이블에 대해 사용자들이 InnoDB 스토리지 엔진을 사용하도록 강제하기로 결정했습니다. 이는 InnoDB 스토리지 엔진이 웹 사이트에 동시 로그인이 여러 개 있을 때 더 나은 사용자 경험을 제공하기 때문입니다. 약간 느리지만 개발자에게 더 큰 복원력을 제공합니다.
이와 관련하여 업그레이드 전에 MySQL/MariaDB에 대해 반드시 수행해야 할 몇 가지 변경 사항이 있으며, 서비스 재시작이 필요합니다. MariaDB 또는 MySQL 릴리스에 따라 다음 설정이 필요하거나 이미 기본값으로 활성화되어 있을 수 있습니다:
[mysqld]
# 다국어 지원에 필요
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
# 메모리 튜닝 - Cacti는 업그레이드 시 권장 사항을 제공합니다
max_heap_table_size = XXX
max_allowed_packet = 500M
tmp_table_size = XXX
join_buffer_size = XXX
sort_buffer_size = XXX
# 호환성에 중요
sql_mode=NO_ENGINE_SUBSTITUTION,NO_AUTO_CREATE_USER
# innodb 설정 - Cacti는 업그레이드 시 권장 사항을 제공합니다
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
# 필수
innodb_file_per_table = ON
innodb_file_format = Barracuda
innodb_large_prefix = 1
# 모든 버전이 지원하지 않음
innodb_flush_log_at_timeout = 3
# SSD/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 지원 웹 서버
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 기능의 확장과 증강을 허용하는 운영 프레임워크입니다. Cacti Group은 다양한 플러그인을 계속 유지 관리하고 있습니다. Cacti에 기능을 추가하려는 경우 GitHub에서 선택할 수 있는 참고 자료가 상당히 많습니다.
Cacti는 그래프를 보는 동안 많은 런타임 증강을 허용합니다:
동적으로 로드되는 트리 및 그래프 보기
문자열, 그래프 및 템플릿 유형으로 검색
보기 증강
간단한 시간 범위 조정
편리한 슬라이딩 시간 창 버튼
원클릭 실시간 그래프 옵션
CSV로 쉬운 그래프 내보내기
클릭 한 번으로 RRA 보기
영역(Cacti 영역)별, 그래프별, 그래프 트리별, 장치별 등 사용자별 및 그룹별 권한을 지원합니다. Cacti의 권한 모델은 역할 기반 액세스 제어(RBAC)로 유연한 권한 할당을 허용합니다. 비밀번호 복잡성, 비밀번호 사용 기간 및 만료된 비밀번호 변경의 적용을 지원합니다.
Cacti는 대부분의 RRDtool 그래프 기능을 지원합니다:
전체 오른쪽 축
이동(Shift)
대시 및 대시 오프셋
대체 y-그리드
그리드 맞춤 없음
단위 길이
탭 너비
동적 레이블
규칙 범례
범례 위치
VDEF
스택 라인
사용자 정의 가능한 선 너비
텍스트 정렬
Copyright (c) 2004-2023 - The Cacti Group, Inc.