
Apache NiFi CVE-2023-34468에 대한 익스플로잇으로, 1.21.0 이하 버전의 취약점을 대상으로 데이터 액세스 및 시스템 손상을 시연합니다.
Apache NiFi는 데이터를 처리하고 배포하기 위한 사용하기 쉽고, 강력하며, 안정적인 시스템입니다.
Apache NiFi는 데이터플로우를 위해 만들어졌습니다. 데이터 라우팅, 변환 및 시스템 중재 로직의 고도로 구성 가능한 유향 그래프를 지원합니다. 주요 기능 중 일부는 다음과 같습니다:
개발 퀵스타트 가이드를 읽어 보세요. 소스의 로컬 복사본을 확보하는 방법과 이슈 추적에 대한 안내, 그리고 개발 환경에서 흔히 발생하는 문제에 대한 경고를 제공합니다.
개발에 대한 더 포괄적인 가이드와 프로젝트 기여에 대한 정보는 NiFi 개발자 가이드를 읽어 보세요.
mvn clean install을 실행하거나 병렬 빌드를 위해 mvn -T 2.0C clean install을 실행하세요.
병렬 빌드는 최신 하드웨어에서 약 15분 정도 소요됩니다.
laptop:nifi myuser$ mvn -T 2.0C clean install
[INFO] Scanning for projects...
[INFO] Inspecting build with total of 115 modules...
...tens of thousands of lines elided...
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 09:24 min (Wall Clock)
[INFO] Finished at: 2015-04-30T00:30:36-05:00
[INFO] Final Memory: 173M/1359M
[INFO] ------------------------------------------------------------------------
단위 테스트 실행을 건너뛰려면 mvn clean install -DskipTests를 실행하세요.
nifi-assembly 디렉터리로 변경하세요. target 디렉터리에는 바이너리 아카이브가 있습니다.
laptop:nifi myuser$ cd nifi-assembly
laptop:nifi-assembly myuser$ ls -lhd target/nifi*
drwxr-xr-x 3 myuser mygroup 102B Apr 30 00:29 target/nifi-1.0.0-SNAPSHOT-bin
-rw-r--r-- 1 myuser mygroup 144M Apr 30 00:30 target/nifi-1.0.0-SNAPSHOT-bin.tar.gz
-rw-r--r-- 1 myuser mygroup 144M Apr 30 00:30 target/nifi-1.0.0-SNAPSHOT-bin.zip
nifi-VERSION-bin.tar.gz 또는 nifi-VERSION-bin.zip을 별도의 배포 디렉터리로 복사하세요. 배포판을 압축 해제하면 버전 이름의 새 디렉터리가 생성됩니다.
laptop:nifi-assembly myuser$ mkdir ~/example-nifi-deploy
laptop:nifi-assembly myuser$ tar xzf target/nifi-*-bin.tar.gz -C ~/example-nifi-deploy
laptop:nifi-assembly myuser$ ls -lh ~/example-nifi-deploy/
total 0
drwxr-xr-x 10 myuser mygroup 340B Apr 30 01:06 nifi-1.0.0-SNAPSHOT
배포 위치로 디렉터리를 변경하고 다음 명령을 실행하여 NiFi를 시작합니다.
laptop:~ myuser$ cd ~/example-nifi-deploy/nifi-*
laptop:nifi-1.0.0-SNAPSHOT myuser$ ./bin/nifi.sh start
bin/nifi.sh start를 실행하면 NiFi가 백그라운드에서 시작되고 셸이 종료됩니다. --wait-for-init을 선택적 시간 제한(초)과 함께 사용하면 종료 전에 완전한 시작을 기다립니다.
laptop:nifi-1.0.0-SNAPSHOT myuser$ ./bin/nifi.sh start --wait-for-init 120
기본 구성은 시작 시 임의의 사용자 이름과 비밀번호를 생성합니다. NiFi는 생성된 자격 증명을 NiFi 설치 디렉터리 아래 logs/nifi-app.log에 있는 애플리케이션 로그에 기록합니다.
다음 명령을 사용하면 grep이 설치된 운영 체제에서 생성된 자격 증명을 찾을 수 있습니다:
laptop:nifi-1.0.0-SNAPSHOT myuser$ grep Generated logs/nifi-app*log
NiFi는 생성된 자격 증명을 다음과 같이 기록합니다:
Generated Username [USERNAME]
Generated Password [PASSWORD]
USERNAME은 36자로 구성된 임의의 UUID입니다. PASSWORD는 32자로 구성된 임의의 문자열입니다. 생성된 자격 증명은 conf/login-identity-providers.xml에 저장되며 비밀번호는 bcrypt 해싱으로 저장됩니다. NiFi에 접속하려면 이 자격 증명을 안전한 위치에 기록해 두세요.
임의의 사용자 이름과 비밀번호는 다음 명령을 사용하여 사용자 지정 자격 증명으로 교체할 수 있습니다:
./bin/nifi.sh set-single-user-credentials <username> <password>
웹 브라우저에서 다음 링크를 열어 NiFi에 접속하세요: https://localhost:8443/nifi
웹 브라우저는 초기화 중에 NiFi가 생성한 자체 서명 인증서로 인한 잠재적 보안 위험을 알리는 경고 메시지를 표시합니다. 잠재적 보안 위험을 수락하고 인터페이스 로드를 계속하는 것은 초기 개발 설치를 위한 옵션입니다. 프로덕션 배포에서는 신뢰할 수 있는 인증 기관에서 인증서를 프로비저닝하고 NiFi 키스토어 및 트러스트스토어 구성을 업데이트해야 합니다.
자체 서명 인증서를 수락한 후 NiFi에 접속하면 로그인 화면이 표시됩니다.

생성된 자격 증명을 사용하여 User 필드에 생성된 사용자 이름을, Password 필드에 생성된 비밀번호를 입력한 다음 LOG IN을 선택하여 시스템에 접속합니다.

NiFi 사용자 가이드는 데이터 플로우를 구축하는 방법을 설명합니다.
NiFi를 중지하려면 다음 명령을 실행하세요:
laptop:~ myuser$ cd ~/example-nifi-deploy/nifi-*
laptop:nifi-1.0.0-SNAPSHOT myuser$ ./bin/nifi.sh stop
MiNiFi는 Apache NiFi의 하위 프로젝트입니다. 데이터 생성 원천에서 데이터를 수집하는 데 중점을 두고, 데이터플로우 관리에 있어 NiFi의 핵심 원칙을 보완하는 데이터 수집 방식입니다.
MiNiFi의 구체적인 목표는 다음과 같습니다:
MiNiFi의 역할에 대한 관점은 소스 센서, 시스템 또는 서버 바로 옆에서 직접 작동하는 에이전트의 관점에서 바라봐야 합니다.
실행 방법:
'minifi-assembly' 디렉터리로 변경하세요. target 디렉터리에는 minifi 빌드가 있습니다.
$ cd minifi-assembly
$ ls -lhd target/minifi*
drwxr-xr-x 3 user staff 102B Jul 6 13:07 minifi-1.14.0-SNAPSHOT-bin
-rw-r--r-- 1 user staff 39M Jul 6 13:07 minifi-1.14.0-SNAPSHOT-bin.tar.gz
-rw-r--r-- 1 user staff 39M Jul 6 13:07 minifi-1.14.0-SNAPSHOT-bin.zip
진행 중인 개발을 테스트하려면 "minifi-version-bin"이라는 디렉터리에 있는 이미 압축이 풀린 빌드를 사용할 수 있습니다. 여기서 version은 현재 프로젝트 버전입니다. 다른 위치에 배포하려면 tarball 또는 zipfile 중 하나를 사용하여 원하는 곳에 압축을 풀면 됩니다. 배포판은 버전 이름의 공통 상위 디렉터리 안에 있습니다.
$ mkdir ~/example-minifi-deploy
$ tar xzf target/minifi-*-bin.tar.gz -C ~/example-minifi-deploy
$ ls -lh ~/example-minifi-deploy/
total 0
drwxr-xr-x 10 user staff 340B Jul 6 01:06 minifi-1.14.0-SNAPSHOT
MiNiFi 실행 방법:
MiNiFi를 설치한 위치로 디렉터리를 변경하고 실행하세요.
$ cd ~/example-minifi-deploy/minifi-*
$ ./bin/minifi.sh start
logs 폴더에 있는 로그를 확인하세요. $ tail -F ~/example-minifi-deploy/logs/minifi-app.log
첫 번째 데이터 플로우를 구축하고 NiFi 인스턴스로 데이터를 보내는 데 도움이 필요하면 docs 폴더에 있는 시스템 관리 가이드를 참조하거나, NiFi 템플릿을 MiNiFi YAML 구성 파일 형식으로 변환하는 데 도움이 되는 minifi-toolkit을 사용하세요.
진행 중인 개발을 테스트하는 경우 인스턴스를 중지해야 할 것입니다.
$ cd ~/example-minifi-deploy/minifi-*
$ ./bin/minifi.sh stop
빌드 방법:
mvn -P docker clean install을 실행하세요. 이렇게 하면 전체 빌드가 실행되고, 이를 기반으로 docker 이미지가 생성되며, docker-compose 통합 테스트가 실행됩니다. 성공적으로 완료되면 다음 명령으로 시작할 수 있는 apacheminifi:${minifi.version} 이미지가 생성됩니다(${minifi.version}을 브랜치의 현재 maven 버전으로 교체):docker run -d -v YOUR_CONFIG.YML:/opt/minifi/minifi-${minifi.version}/conf/config.yml apacheminifi:${minifi.version}
Registry는 Apache NiFi의 하위 프로젝트로, 하나 이상의 NiFi 및/또는 MiNiFi 인스턴스에서 공유 리소스를 저장하고 관리하기 위한 중앙 위치를 제공하는 보완 애플리케이션입니다.
또는
Registry 하위 프로젝트만 빌드:
cd nifi/nifi-registry
mvn clean install
스타일 및 라이선스 검사를 활성화하려면 contrib-check 프로파일을 지정하세요:
mvn clean install -Pcontrib-check
2) Registry 시작
cd nifi-registry/nifi-registry-assembly/target/nifi-registry-<VERSION>-bin/nifi-registry-<VERSION>/
./bin/nifi-registry.sh start
애플리케이션 웹 서버는 접속이 가능해지기 전까지 로드하는 데 시간이 걸릴 수 있습니다.
기본 설정에서는 애플리케이션 UI를 http://localhost:18080/nifi-registry에서 사용할 수 있습니다.
애플리케이션 REST API를 테스트하려면 REST API에 직접 접속할 수 있습니다. 기본 설정에서 REST API의 기본 URL은 http://localhost:18080/nifi-registry-api입니다. REST API 테스트용 UI는 http://localhost:18080/nifi-registry-api/swagger/ui.html에서 사용할 수 있습니다.
로그는 logs/nifi-registry-app.log에서 확인할 수 있습니다.
NiFi Registry가 다양한 관계형 데이터베이스에서 올바르게 작동하는지 확인하기 위해 Testcontainers 프레임워크를 활용하여 기존 통합 테스트를 다양한 데이터베이스에 대해 실행할 수 있습니다.
Spring 프로파일은 Spring 애플리케이션 컨텍스트에 제공될 DataSource 팩토리를 제어하는 데 사용됩니다. Testcontainers 프레임워크를 사용하여 지정된 데이터베이스에 대한 Docker 컨테이너를 시작하고 해당 DataSource를 생성하는 DataSource 팩토리가 제공됩니다. 프로파일을 지정하지 않으면 기본적으로 H2 DataSource가 사용되며 Docker 컨테이너가 필요하지 않습니다.
빌드가 실행 중인 시스템에서 Docker가 실행 중이라면 다음 명령을 실행할 수 있습니다:
| 대상 데이터베이스 | 빌드 명령 |
|---|---|
| 지원되는 전체 | mvn verify -Ptest-all-dbs |
| H2 (기본값) | mvn verify |
| MariaDB 10.3 | mvn verify -Pcontrib-check -Dspring.profiles.active=mariadb-10-3 |
| MySQL 8 | mvn verify -Pcontrib-check -Dspring.profiles.active=mysql-8 |
| PostgreSQL 10 | mvn verify -Dspring.profiles.active=postgres-10 |
사용 가능한 DataSource 팩토리의 전체 목록은 nifi-registry-test 모듈을 참조하세요.
질문이 있으면 메일링 리스트 [email protected](아카이브)로 문의할 수 있습니다. 더 인터랙티브한 토론을 위해 커뮤니티 구성원은 주로 다음 위치에서 찾을 수 있습니다:
Apache NiFi Slack 워크스페이스: https://apachenifi.slack.com/
새 사용자는 다음 초대 링크를 사용하여 워크스페이스에 가입할 수 있습니다.
기능 요청이나 버그 보고서를 제출하려면 https://issues.apache.org/jira/projects/NIFI/issues에서 Jira를 등록해 주세요. 보안 취약점 신고인 경우 [email protected]로 직접 이메일을 보내고 먼저 Apache NiFi 보안 취약점 공개 및 Apache 소프트웨어 재단 보안 절차를 검토하세요.
최신 NiFi 문서는 https://nifi.apache.org/ 에서 확인하세요.
최신 MiNiFi 관련 문서는 https://nifi.apache.org/minifi 및 https://cwiki.apache.org/confluence/display/MINIFI 에서 확인하세요.
최신 Registry 관련 문서는 https://nifi.apache.org/registry 에서 확인하세요.
별도로 명시되지 않는 한 이 소프트웨어는 Apache License, Version 2.0에 따라 라이선스가 부여됩니다.
Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at
Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.
이 배포판에는 암호화 소프트웨어가 포함되어 있습니다. 현재 거주 중인 국가에서는 암호화 소프트웨어의 수입, 소지, 사용 및/또는 다른 국가로의 재수출에 제한이 있을 수 있습니다. 암호화 소프트웨어를 사용하기 전에 해당 국가의 법률, 규정 및 정책을 확인하여 암호화 소프트웨어의 수입, 소지, 사용 및 재수출이 허용되는지 확인하십시오. 자세한 내용은 https://www.wassenaar.org/ 를 참조하세요.
미국 정부 상무부 산업안보국(BIS)은 이 소프트웨어를 비대칭 알고리즘을 사용하거나 수행하는 암호화 기능을 갖춘 정보 보안 소프트웨어인 ECCN(수출 통제 품목 번호) 5D002.C.1로 분류했습니다. 이 Apache 소프트웨어 재단 배포판의 형태와 방식은 객체 코드와 소스 코드 모두에 대해 라이선스 예외 ENC 기술 소프트웨어 무제한(TSU) 예외(BIS 수출 관리 규정 740.13절 참조)에 따른 수출 자격을 갖습니다.
포함된 암호화 소프트웨어에 대한 자세한 내용은 다음과 같습니다:
Apache NiFi는 SSL, SSH 및 민감한 구성 매개변수 보호를 위해 BouncyCastle, JCraft Inc. 및 내장 Java 암호화 라이브러리를 사용합니다. 각 라이브러리의 암호화 기능에 대한 자세한 내용은 다음을 참조하세요.