T-Pot은 올인원, 선택적으로 분산된 멀티아크(amd64, arm64) 허니팟 플랫폼으로, 20개 이상의 허니팟과 Elastic Stack을 사용하는 수많은 시각화 옵션, 애니메이션 라이브 공격 맵 및 사기 경험을 더욱 향상시키는 다양한 보안 도구를 지원합니다.
시스템 요구 사항을 충족합니다. T-Pot을 설치하려면 최소 8~16GB RAM, 128GB의 여유 디스크 공간, 작동 중인(필터링되지 않은 나가는) 인터넷 연결이 필요합니다.
실행 중인 지원 배포판을 다운로드하거나 사용하세요.
가능한 최소한의 패키지/서비스로 ISO를 설치하십시오( ssh
필요).
curl
설치 : $ sudo [apt, dnf, zypper] install curl
$HOME
에서 루트가 아닌 사용자로 설치 프로그램을 실행합니다.
env bash -c "$(curl -sL https://github.com/telekom-security/tpotce/raw/master/install.sh)"
지침을 따르고, 메시지를 읽고, 가능한 포트 충돌을 확인하고 재부팅하십시오.
T-Pot - 올인원 멀티 허니팟 플랫폼
TL;DR
부인 성명
기술 개념
기술 아키텍처
서비스
사용자 유형
시스템 요구 사항
VM에서 실행
하드웨어에서 실행
클라우드에서 실행
필수 포트
시스템 배치
설치
표준 / HIVE
분산
배포판을 선택하세요
라즈베리 파이 4(8GB) 지원
T-Pot 다운로드 및 설치
맥OS와 윈도우
설치 유형
T-Pot 제거
첫 번째 시작
기획 및 인증서
센서 배포
독립형 첫 시작
분산 배포
커뮤니티 데이터 제출
옵트인 HPFEEDS 데이터 제출
원격 액세스 및 도구
SSH
T-Pot 랜딩 페이지
키바나 대시보드
공격 지도
사이버셰프
엘라스틱뷰
거미발
구성
T-Pot 구성 파일
T-Pot 허니팟 및 서비스 사용자 정의
유지
내보내다
수입
Docker 이미지 다운로드 실패
T-Pot 네트워킹 실패
일반 업데이트
업데이트 스크립트
매일 재부팅
알려진 문제
T-Pot 시작
T-팟을 중지하세요
T-Pot 데이터 폴더
로그 지속성
공장 초기화
컨테이너 표시
블랙홀
Nginx에 사용자 추가(T-Pot WebUI)
Kibana 객체 가져오기 및 내보내기
문제 해결
로그
RAM 및 스토리지
연락하다
문제
토론
라이센스
크레딧
개발자 및 개발 커뮤니티
사용후기
귀하의 책임하에 T-Pot을 설치하고 실행하십시오. 시스템 손상을 결코 배제할 수 없으므로 배포를 현명하게 선택하십시오.
빠른 도움을 받으려면 문제 및 토론을 조사하세요.
소프트웨어는 최선의 노력을 염두에 두고 설계 및 제공됩니다. 커뮤니티 및 오픈 소스 프로젝트로서 다른 많은 오픈 소스 소프트웨어를 사용하며 버그와 문제가 포함될 수 있습니다. 책임감 있게 보고하세요.
허니팟은 설계상 민감한 데이터를 호스팅해서는 안 됩니다. 아무것도 추가하지 않도록 하세요.
기본적으로 귀하의 데이터는 Sicherheitstacho에 제출됩니다. ewsposter
섹션을 제거하여 구성( ~/tpotce/docker-compose.yml
)에서 이를 비활성화할 수 있습니다. 하지만 이 경우 공유는 정말 배려입니다!
T-Pot의 주요 구성 요소가 tpotinit
Docker 이미지로 이동되어 T-Pot이 이제 macOS 및 Windows를 포함한 여러 Linux 배포판을 지원할 수 있습니다(두 가지 모두 Docker Desktop의 기능 세트로 제한됨). T-Pot은 도커와 도커 작성을 사용하여 가능한 한 많은 허니팟과 도구를 동시에 실행하여 호스트 하드웨어를 최대한 활용한다는 목표를 달성합니다.
T-Pot은 다음 허니팟에 대한 도커 이미지를 제공합니다.
애드 허니,
시스코사,
시트릭스허니팟,
콘포트,
카우리,
도스팟,
디컴포트,
디오나에아,
탄력있는 냄비,
끝이 없지,
대식가,
지옥 냄비,
예고,
허니팟,
허니 트랩,
아이폰,
로그4팟,
메일로니,
의료용 냄비,
redishoneypot,
보초병,
올가미,
태너,
워드팟
... 다음 도구와 함께 ...
상태 확인이 실패한 컨테이너를 자동으로 다시 시작하는 도구를 자동 복구합니다.
Cyberchef는 암호화, 인코딩, 압축 및 데이터 분석을 위한 웹 앱입니다.
Elastic Stack은 T-Pot이 캡처한 모든 이벤트를 아름답게 시각화합니다.
Elasticvue는 Elasticsearch 클러스터를 탐색하고 상호 작용하기 위한 웹 프런트 엔드입니다.
pcap 파일과 라이브 네트워크 트래픽에서 네트워크 메타데이터와 지문을 추출하기 위한 pyshark 기반 스크립트를 사용하세요.
T-Pot-Attack-Map은 T-Pot을 위한 아름답게 애니메이션된 공격 맵입니다.
P0f는 순수하게 수동적인 트래픽 핑거프린팅을 위한 도구입니다.
Spiderfoot은 오픈 소스 인텔리전스 자동화 도구입니다.
Suricata는 네트워크 보안 모니터링 엔진입니다.
... 즉시 사용 가능한 최고의 경험과 사용하기 쉬운 멀티 허니팟 시스템을 제공합니다.
소스 코드와 구성 파일은 T-Pot GitHub 저장소에 완전히 저장됩니다. 도커 이미지는 T-Pot 환경을 위해 구축되고 사전 구성되어 있습니다.
개별 Dockerfile 및 구성은 docker 폴더에 있습니다.
T-Pot은 기본적으로 다섯 가지 그룹으로 나누어진 다양한 서비스를 제공합니다.
OS가 제공하는 시스템 서비스
안전한 원격 액세스를 위한 SSH.
탄력적 스택
이벤트 저장을 위한 Elasticsearch.
이벤트를 수집하고 Elasticsearch로 전송하기 위한 Logstash입니다.
아름답게 렌더링된 대시보드에 이벤트를 표시하는 Kibana.
도구
NGINX는 Kibana, CyberChef, Elasticvue, GeoIP AttackMap, Spiderfoot에 대한 보안 원격 액세스(역방향 프록시)를 제공하고 T-Pot 센서가 이벤트 데이터를 T-Pot 하이브에 안전하게 전송할 수 있도록 합니다.
CyberChef는 암호화, 인코딩, 압축 및 데이터 분석을 위한 웹 앱입니다.
Elasticvue는 Elasticsearch 클러스터를 탐색하고 상호 작용하기 위한 웹 프런트 엔드입니다.
T-Pot Attack Map은 T-Pot을 위한 아름답게 애니메이션된 공격 맵입니다.
Spiderfoot은 오픈 소스 인텔리전스 자동화 도구입니다.
허니팟
선택된 docker-compose.yml
기반으로 사용 가능한 23개의 허니팟 선택.
네트워크 보안 모니터링(NSM)
pcap 파일과 라이브 네트워크 트래픽에서 네트워크 메타데이터와 지문을 추출하기 위한 pyshark 기반 스크립트를 사용하세요.
P0f는 순수하게 수동적인 트래픽 핑거프린팅을 위한 도구입니다.
Suricata는 네트워크 보안 모니터링 엔진입니다.
T-Pot을 설치하고 사용하는 동안 작업하게 될 두 가지 유형의 계정이 있습니다. 인증 오류의 가장 일반적인 원인은 다양한 계정 유형의 차이점을 알고 있는지 확인하세요.
서비스 | 계정 유형 | 사용자 이름 / 그룹 | 설명 |
---|---|---|---|
SSH | 운영체제 | <OS_USERNAME> | OS 설치 중에 선택한 사용자입니다. |
엔진스 | 기본 인증 | <WEB_USER> | T-Pot 설치 시 선택한 <web_user> . |
사이버셰프 | 기본인증 | <WEB_USER> | T-Pot 설치 시 선택한 <web_user> . |
엘라스틱뷰 | 기본 인증 | <WEB_USER> | T-Pot 설치 시 선택한 <web_user> . |
Geoip 공격 지도 | 기본 인증 | <WEB_USER> | T-Pot 설치 시 선택한 <web_user> . |
거미발 | 기본 인증 | <WEB_USER> | T-Pot 설치 시 선택한 <web_user> . |
T-팟 | 운영체제 | tpot | 이 tpot /그룹은 항상 T-Pot 서비스에 의해 예약됩니다. |
T-Pot 로그 | 기본 인증 | <LS_WEB_USER> | LS_WEB_USER 자동으로 관리됩니다. |
지원되는 Linux 배포판 이미지, 하이브/센서에 따라 실제 하드웨어, 가상 머신 또는 기타 환경에 설치하는 경우 T-Pot을 성공적으로 설치하려면 OS, RAM, 스토리지 및 네트워크와 관련하여 충족해야 할 요구 사항이 다양합니다( 이러한 요구 사항을 극복하기 위해 언제든지 ~/tpotce/docker-compose.yml
및 ~/tpotce/.env
필요에 맞게 조정할 수 있습니다.
T-포트 유형 | 숫양 | 저장 | 설명 |
---|---|---|---|
하이브 | 16GB | 256GB SSD | 경험상 센서와 데이터가 많을수록 더 많은 RAM과 스토리지가 필요합니다. |
감지기 | 8GB | 128GB SSD | 허니팟 로그는 30일 동안 유지(~/tpotce/data)되므로 공격량에 따라 저장 용량이 달라집니다. |
T-Pot에는 ...이 필요합니다.
DHCP를 통해 또는 정적으로 할당된 IPv4 주소
성공적인 설치 및 운영을 위해서는 작동 중인 비프록시 인터넷 연결이 필요합니다.
프록시 지원이나 기타 비표준 기능이 필요한 경우 지원되는 Linux 배포판 이미지의 문서 및/또는 Docker 문서를 확인해야 합니다.
지원되는 모든 Linux 배포판 이미지는 VM에서 실행되며 이는 T-Pot이 제대로 실행된다는 것을 의미합니다. 다음은 작동하도록 테스트/보고되었습니다.
UTM(인텔 및 애플 실리콘)
버추얼박스
VMWare Fusion 및 VMWare 워크스테이션
KVM도 작동하는 것으로 보고되었습니다.
일부 구성/설정 힌트:
Intel 버전은 안정적으로 실행되지만 Apple Silicon(arm64) 지원에는 UTM에서 OS 초기 설치 중에 Display
Console Only
으로 전환한 후 Full Graphics
으로 다시 전환해야 할 수 있는 알려진 문제가 있습니다.
구성 중에 fatt, suricata 및 p0f가 제대로 작동하려면 네트워크 인터페이스에 대해 무차별 모드를 활성화해야 할 수도 있습니다.
Wi-Fi 카드를 T-Pot의 기본 NIC로 사용하려는 경우 모든 네트워크 인터페이스 드라이버가 모든 무선 카드를 지원하는 것은 아닙니다. VirtualBox에서는 예를 들어 NIC의 "MT SERVER" 모델을 선택해야 합니다.
T-Pot은 지원되는 Linux 배포판 이미지의 하드웨어 지원에 의해서만 제한됩니다. 전용 하드웨어에 투자하기 전에 HCL(하드웨어 호환성 목록)을 확인하고 T-Pot으로 지원되는 배포판을 테스트하는 것이 좋습니다.
T-Pot은 다음에서 테스트되었으며 다음에서 실행되는 것으로 알려져 있습니다.
설치 후 방법을 사용하는 Telekom OTC... 다른 것들도 작동할 수 있지만 테스트되지 않은 상태로 유지됩니다.
일부 사용자는 다른 클라우드 및 호스팅 업체(예: Azure 및 GCP)에서 설치 작업이 수행된다고 보고합니다. 하드웨어 요구 사항은 다를 수 있습니다. 확실하지 않은 경우 문제와 토론을 조사하고 몇 가지 기능 테스트를 실행해야 합니다. T-Pot 24.04.0 이상에서는 클라우드 기반 설치를 방해하는 것으로 알려진 설정을 제거했습니다.
OS에 일반적으로 필요한 포트(예: DHCP 임대, DNS 등 획득) 외에도 T-Pot은 들어오고 나가는 연결을 위해 다음 포트가 필요합니다. 시각적 표현을 위해 T-Pot 아키텍처를 검토하세요. 또한 일부 포트는 중복으로 표시되는데, 이는 다른 에디션에서 사용되었으므로 괜찮습니다.
포트 | 규약 | 방향 | 설명 |
---|---|---|---|
80, 443 | TCP | 나가는 | T-Pot 관리: 설치, 업데이트, 로그(예: OS, GitHub, DockerHub, Sicherheitstacho 등) |
64294 | TCP | 들어오는 | T-Pot 관리: 127.0.0.1:64305로 하이브(NGINX 역방향 프록시를 통해)로 센서 데이터 전송 |
64295 | TCP | 들어오는 | T-Pot 관리: SSH에 대한 액세스 |
64297 | TCP | 들어오는 | NGINX 리버스 프록시에 대한 T-Pot 관리 액세스 |
5555 | TCP | 들어오는 | 허니팟: ADBHoney |
5000 | UDP | 들어오는 | 허니팟: CiscoASA |
8443 | TCP | 들어오는 | 허니팟: CiscoASA |
443 | TCP | 들어오는 | 허니팟: CitrixHoneypot |
80, 102, 502, 1025, 2404, 10001, 44818, 47808, 50100 | TCP | 들어오는 | 허니팟: 콘팟 |
161, 623 | UDP | 들어오는 | 허니팟: 콘팟 |
22, 23 | TCP | 들어오는 | 허니팟: 카우리 |
19, 53, 123, 1900 | UDP | 들어오는 | 허니팟: Ddospot |
11112 | TCP | 들어오는 | 허니팟: 디콤팟(Dicompot) |
21, 42, 135, 443, 445, 1433, 1723, 1883, 3306, 8081 | TCP | 들어오는 | 허니팟: 디오네아 |
69 | UDP | 들어오는 | 허니팟: 디오네아 |
9200 | TCP | 들어오는 | 허니팟: 엘라스틱팟 |
22 | TCP | 들어오는 | 허니팟: 끝없는 |
21, 22, 23, 25, 80, 110, 143, 443, 993, 995, 1080, 5432, 5900 | TCP | 들어오는 | 허니팟: 예고 |
21, 22, 23, 25, 80, 110, 143, 389, 443, 445, 631, 1080, 1433, 1521, 3306, 3389, 5060, 5432, 5900, 6379, 6667, 8080, 9100, 9200, 11211 | TCP | 들어오는 | 허니팟: qHoneypots |
53, 123, 161, 5060 | UDP | 들어오는 | 허니팟: qHoneypots |
631 | TCP | 들어오는 | 허니팟: IPPHoney |
80, 443, 8080, 9200, 25565 | TCP | 들어오는 | 허니팟: Log4Pot |
25 | TCP | 들어오는 | 허니팟: 메일로니 |
2575 | TCP | 들어오는 | 허니팟: 메드팟 |
6379 | TCP | 들어오는 | 허니팟: Redishoneypot |
5060 | TCP/UDP | 들어오는 | 허니팟: SentryPeer |
80 | TCP | 들어오는 | 허니팟: 스네어(태너) |
8090 | TCP | 들어오는 | 허니팟: 워드팟 |
SaaS 서비스의 포트 및 가용성은 지리적 위치에 따라 달라질 수 있습니다.
일부 허니팟이 전체 기능(예: Cowrie 또는 Log4Pot)에 도달하려면 공격자의 악성 코드를 다운로드하기 위해 나가는 연결도 필요합니다. 자세한 내용은 해당 저장소 링크를 따라 개별 허니팟 설명서를 참조하세요.
인터넷에 노출하기 전에 T-Pot과 허니팟의 작동 방식을 숙지하는 것이 좋습니다. 빠른 시작을 위해 가상 머신에서 T-Pot 설치를 실행하세요.
일단 작동 방식에 익숙해지면 침입자가 들어오고 나가는 것으로 의심되는 네트워크(예: 인터넷)를 선택해야 합니다. 그렇지 않으면 T-Pot은 어떤 공격도 포착하지 못할 가능성이 높습니다(점을 증명하고 싶지 않은 한)! 우선 모든 TCP 및 UDP 트래픽이 T-Pot의 네트워크 인터페이스로 전달되는 필터링되지 않은 영역에 T-Pot을 배치하는 것이 좋습니다. T-Pot의 관리 포트에 대한 검색을 피하려면 T-Pot을 방화벽 뒤에 배치하고 1-64000 포트 범위의 모든 TCP/UDP 트래픽을 T-Pot으로 전달하는 동시에 신뢰할 수 있는 IP 및/또는 64000보다 큰 포트에 대한 액세스만 허용해야 합니다. 또는 사용 사례와 관련된 포트만 노출하세요. 알 수 없는 포트에서 맬웨어 트래픽을 포착하려면 gluton 및 honeytrap이 다른 허니팟 데몬이 사용하지 않는 TCP 포트를 동적으로 바인딩하여 설정이 노출되는 위험을 더 잘 표현하므로 전달하는 포트를 제한해서는 안 됩니다. .
지원되는 Linux 배포판 이미지 중 하나를 다운로드하고 TL;DR 지침을 따르거나 T-Pot 저장소를 git clone
하고 설치 프로그램 ~/tpotce/install.sh
실행하세요. 실행되고 지원되는 Linux 시스템 위에서 T-Pot을 실행하는 것은 가능하지만 실행 중인 서비스와의 포트 충돌을 피하기 위해 새로 설치하는 것이 좋습니다. T-Pot 설치 프로그램은 여기에 설명된 대로 인터넷에 직접 액세스해야 합니다.
따라야 할 단계:
아래 목록에서 지원되는 Linux 배포판을 다운로드하세요.
설치 중에 필수 패키지만 설치하는 최소 , netinstall 또는 서버 버전을 선택하십시오.
Gnome이나 KDE와 같은 그래픽 데스크탑 환경을 절대 설치하지 마십시오. 포트 충돌로 인해 T-Pot이 작동하지 않습니다.
SSH를 설치해야 원격으로 머신에 연결할 수 있습니다.
배포 이름 | x64 | arm64 |
---|---|---|
Alma Linux OS 9.4 부팅 ISO | 다운로드 | 다운로드 |
데비안 12 네트워크 설치 | 다운로드 | 다운로드 |
Fedora 서버 40 네트워크 설치 | 다운로드 | 다운로드 |
OpenSuse Tumbleweed 네트워크 이미지 | 다운로드 | 다운로드 |
Rocky Linux OS 9.4 부팅 ISO | 다운로드 | 다운로드 |
우분투 24.04 라이브 서버 | 다운로드 | 다운로드 |
배포 이름 | arm64 |
---|---|
라즈베리 파이 OS( 64Bit, Lite ) | 다운로드 |
GitHub 리포지토리를 복제합니다. $ git clone https://github.com/telekom-security/tpotce
또는 TL;DR을 따르고 이 섹션을 건너뜁니다.
tpotce/ 폴더로 변경: $ cd tpotce
루트가 아닌 사용자로 설치 프로그램을 실행합니다: $ ./install.sh
:
SSH 포트를 tcp/64295
로 변경합니다.
허니팟과의 포트 충돌을 방지하려면 DNS 스텁 리스너를 비활성화하세요.
SELinux를 모니터 모드로 설정
공개 영역의 방화벽 대상을 ACCEPT로 설정합니다.
Docker 저장소 추가 및 Docker 설치
권장 패키지 설치
문제를 일으키는 것으로 알려진 패키지 제거
현재 사용자를 docker 그룹에 추가합니다( sudo
없이 docker 상호 작용 허용).
dps
및 dpsw
별칭 추가( grc docker ps -a
, watch -c "grc --colour=on docker ps -a
)
la
, ll
및 ls
별칭 추가( exa
의 경우 향상된 ls
명령)
mi
추가( micro
의 경우 vi
및/또는 nano
의 훌륭한 대안)
호스트의 열린 포트 표시(T-Pot 필수 포트와 비교)
T-Pot이 자동으로 시작 및 중지될 수 있도록 /etc/systemd/system
에 tpot.service
추가하고 활성화합니다.
선택한 Linux 배포판에 따라 설치 프로그램은 다음을 수행합니다.
설치 프로그램 지침을 따르세요. 사용자( sudo
또는 root
) 비밀번호를 한 번 이상 입력해야 합니다.
포트 충돌을 일으킬 수 있는 오류 및 열린 포트에 대한 설치 프로그램 메시지를 확인하십시오.
재부팅: $ sudo reboot
때로는 개발, 테스트 또는 단지 재미를 위해 macOS 또는 Windows에서 T-Pot 인스턴스를 가동할 수 있다면 좋을 것입니다. Docker Desktop은 다소 제한되어 있으므로 모든 허니팟 유형이나 T-Pot 기능이 지원되는 것은 아닙니다. 또한 기본적으로 macOS 및 Windows 방화벽은 원격 액세스를 차단하므로 테스트는 호스트로 제한됩니다. 프로덕션의 경우 Linux에서 T-Pot을 실행하는 것이 좋습니다.
작업을 시작하고 실행하려면 다음 단계를 따르세요.
macOS 또는 Windows용 Docker Desktop을 설치합니다.
GitHub 저장소를 복제합니다: git clone https://github.com/telekom-security/tpotce
(Windows에서는 코드가 CRLF
대신 LF
로 체크아웃되었는지 확인하세요!)
이동: cd ~/tpotce
cp compose/mac_win.yml ./docker-compose.yml
복사
~/tpotce/genuser.sh
(macOS) 또는 ~/tpotce/genuserwin.ps1
(Windows)을 실행하여 WEB_USER
생성합니다.
TPOT_OSTYPE=linux
mac
또는 win
으로 변경하여 .env
파일을 조정합니다.
# OSType (linux, mac, win) # Most docker features are available on linux TPOT_OSTYPE=mac
T-Pot이 시작되지 못하게 하는 포트 충돌이 없는지 스스로 확인해야 합니다.
T-Pot 시작: T-Pot을 백그라운드에서 실행하려면 docker compose up
또는 docker compose up -d
합니다.
T-Pot 중지: CTRL-C
(포그라운드에서 실행 중인 경우) 및/또는 docker compose down -v
사용하여 T-Pot을 완전히 중지합니다.
T-Pot Standard/HIVE를 사용하면 모든 서비스, 도구, 허니팟 등이 HIVE 엔드포인트 역할도 하는 단일 호스트에 설치됩니다. 시스템 요구 사항을 충족하는지 확인하세요. ~/tpotce/docker-compose.yml
개인 사용 사례에 맞게 조정하거나 필요에 맞는 맞춤형 T-Pot 경험을 위해 ~/tpotce/compose/customizer.py
사용하여 고유한 구성을 생성할 수 있습니다. 설치가 완료되면 처음 시작으로 진행할 수 있습니다.
T-Pot의 분산 버전에는 최소 2개의 호스트가 필요합니다.
T-Pot HIVE , T-Pot의 표준 설치(먼저 설치하세요!)
허니팟과 일부 도구만 호스팅하고 로그 데이터를 HIVE 로 전송하는 T-Pot SENSOR .
분산 배포에 설명된 대로 SENSOR 설치를 완료하기 전에는 SENSOR가 시작되지 않습니다.
T-Pot 제거는 지원되는 Linux 배포판에서만 가능합니다.
T-Pot을 제거하려면 ~/tpotce/uninstall.sh
실행하고 제거 프로그램 지침을 따르십시오. 비밀번호를 한 번 이상 입력해야 합니다.
제거가 완료되면 시스템을 재부팅하십시오. sudo reboot
T-Pot 설치 프로그램이 성공적으로 완료되면 시스템을 재부팅해야 합니다( sudo reboot
). 재부팅한 후에는 시스템 설치 중에 설정한 사용자를 사용하여 시스템에 로그인할 수 있습니다. 로그인은 사용자 유형에 따라 다릅니다.
사용자: [ <OS_USERNAME>
]
패스: [비밀번호]
SSH를 통해 로그인하여 명령줄에 액세스할 수 있습니다: ssh -l <OS_USERNAME> -p 64295 <your.ip>
:
사용자: [ <OS_USERNAME>
]
pass: [비밀번호, SSH 키 권장]
브라우저에서 로그인하여 T-Pot WebUI 및 도구에 액세스할 수도 있습니다: https://<your.ip>:64297
사용자: [ <WEB_USER>
]
패스: [비밀번호]
dps.sh
통해 로그인하고 모든 서비스와 허니팟이 올바르게 시작되는지 확인하고 Kibana 및/또는 Geoip Attack Map에 로그인하여 공격을 모니터링하는 것 외에는 할 수 있는 일이 많지 않습니다.
분산 배포에는 T-Pot Init가 일반적으로 간단한 설정에 적합한 HIVE 호스트의 IP에 대해 자체 서명된 인증서만 생성하므로 계획이 포함됩니다. Logstash는 연결 시 유효한 인증서를 확인하므로 여러 IP(예: RFC 1918 및 공용 NAT IP) 및 도메인 이름에서 연결할 수 있는 HIVE 와 관련된 분산 설정으로 인해 인증서를 확인할 수 없는 연결 오류가 발생할 수 있습니다. 이러한 설정에는 일반 이름과 SAN(주체 대체 이름)이 있는 인증서가 필요합니다.
센서를 배포하기 전에 인증서 문제를 방지하기 위해 도메인 이름과 IP를 올바르게 계획했는지 확인하십시오. 자세한 내용은 문제 #1543을 참조하세요.
IP/도메인 설정에 맞게 예제를 조정하고 명령에 따라 HIVE 인증서를 변경합니다.
sudo systemctl stop tpot sudo openssl req -nodes -x509 -sha512 -newkey rsa:8192 -keyout "$HOME/tpotce/data/nginx/cert/nginx.key" -out "$HOME/tpotce/data/nginx/cert/nginx.crt" -days 3650 -subj '/C=AU/ST=Some-State/O=Internet Widgits Pty Ltd' -addext "subjectAltName = IP:192.168.1.200, IP:1.2.3.4, DNS:my.primary.domain, DNS:my.secondary.domain" sudo chmod 774 $HOME/tpotce/data/nginx/cert/* sudo chown tpot:tpot $HOME/tpotce/data/nginx/cert/* sudo systemctl start tpot
T-Pot 구성 파일( .env
)에서는 LS_SSL_VERIFICATION=none
설정하여 SENSOR 에서 HIVE 로의 logstash 연결에 대한 SSL 확인을 비활성화할 수 있습니다. 보안상의 이유로 이는 실험실 또는 테스트 환경에만 권장됩니다.
CA(예: Let's Encrypt)가 서명한 HIVE 에 대해 유효한 인증서를 사용하기로 선택한 경우,logstash 및 SENSOR는 로그를 HIVE 에 연결하고 전송하는 데 문제가 없어야 합니다.
설치 프로그램의 지시에 따라 SENSOR를 재부팅한 후 HIVE 에 로그인하고 cd ~/tpotce
폴더로 이동하여 분산 배포를 계속할 수 있습니다. 실제 배포를 계속하기 전에 계획 및 인증서를 이해했는지 확인하세요.
SENSOR 에 안전하게 로그인하고 Ansible
센서에서 플레이북을 실행할 수 있도록 SSH 키를 아직 생성하지 않은 경우:
ssh-keygen
실행하고 지침을 따르고 암호를 비워 둡니다.
Generating public/private rsa key pair. Enter file in which to save the key (/home/<your_user>/.ssh/id_rsa): Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /home/<your_user>/.ssh/id_rsa Your public key has been saved in /home/<your_user>/.ssh/id_rsa.pub
ssh-copy-id -p 64295 <SENSOR_SSH_USER>@<SENSOR_IP>)
실행하여 SENSOR에 키를 배포합니다.
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/home/<your_user>/.ssh/id_rsa.pub" The authenticity of host '[<SENSOR_IP>]:64295 ([<SENSOR_IP>]:64295)' can't be stablished. ED25519 key fingerprint is SHA256:naIDxFiw/skPJadTcgmWZQtgt+CdfRbUCoZn5RmkOnQ. This key is not known by any other names. Are you sure you want to continue connecting (yes/no/[fingerprint])? yes /usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed /usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys <your_user>@172.20.254.124's password: Number of key(s) added: 1 Now try logging into the machine, with: "ssh -p '64295' '<your_user>@<SENSOR_IP>'" and check to make sure that only the key(s) you wanted were added.
제안된 대로 지침에 따라 연결을 테스트하십시오. ssh -p '64295' '<your_user>@<SENSOR_IP>'
.
키가 성공적으로 배포되면 ./deploy.sh
실행하고 지침을 따릅니다.
$HOME/tpotce/.env
구성의 SENSOR에서 TPOT_HIVE_USER
ENV를 식별합니다(base64로 인코딩된 문자열임). 이제 $HOME/tpotce/.env
구성의 HIVE에 있는 LS_WEB_USER
ENV에서 동일한 문자열을 식별합니다. 끈을 제거하고 T-Pot을 다시 시작하세요.
이제 SENSOR 머신을 안전하게 삭제할 수 있습니다.
T-Pot은 허니팟에 관심 있는 모든 사람이 접근할 수 있도록 제공됩니다. 기본적으로 캡처된 데이터는 커뮤니티 백엔드에 제출됩니다. 이 커뮤니티 백엔드는 데이터를 사용하여 Sicherheitstacho를 제공합니다. 다음 단계에 따라 ~/tpotce/docker-compose.yml
에서 # Ewsposter service
제거하여 제출을 거부할 수 있습니다.
T-Pot 서비스 중지: systemctl stop tpot
~/tpotce/docker-compose.yml
열기: micro ~/tpotce/docker-compose.yml
다음 줄을 제거하고 마이크로( CTRL+Q
)를 저장하고 종료합니다.
# Ewsposter service ewsposter: container_name: ewsposter restart: always depends_on: tpotinit: condition: service_healthy networks: - ewsposter_local environment: - EWS_HPFEEDS_ENABLE=false - EWS_HPFEEDS_HOST=host - EWS_HPFEEDS_PORT=port - EWS_HPFEEDS_CHANNELS=channels - EWS_HPFEEDS_IDENT=user - EWS_HPFEEDS_SECRET=secret - EWS_HPFEEDS_TLSCERT=false - EWS_HPFEEDS_FORMAT=json image: ${TPOT_REPO}/ewsposter:${TPOT_VERSION} pull_policy: ${TPOT_PULL_POLICY} volumes: - ${TPOT_DATA_PATH}:/data - ${TPOT_DATA_PATH}/ews/conf/ews.ip:/opt/ewsposter/ews.ip
T-Pot 서비스 시작: systemctl start tpot
커뮤니티 접근 방식의 주요 목적은 데이터 제출을 비활성화하지 않는 것이 좋습니다. 여러분 모두 공유가 배려라는 것을 알고 계시나요?
옵트인(Opt-In)으로 제3자 HPFEEDS 브로커와 T-Pot 데이터를 공유할 수 있습니다.
여기 지침에 따라 T-Pot 서비스를 중지하고 ~/tpotce/docker-compose.yml
엽니다.
ewsposter
섹션까지 아래로 스크롤하여 필요에 맞게 HPFEEDS 설정을 조정합니다.
CA 인증서를 추가해야 하는 경우 ~/tpotce/data/ews/conf
에 추가하고 EWS_HPFEEDS_TLSCERT=/data/ews/conf/<your_ca.crt>
설정하세요.
T-Pot 서비스 시작: systemctl start tpot
.
호스트/T-Pot에 대한 원격 액세스는 SSH( tcp/64295
)를 통해 가능하며 일부 서비스 및 도구는 T-Pot과 함께 제공되어 일부 연구 작업을 훨씬 쉽게 만듭니다.
사용자 유형에 따라 SSH를 통해 로그인하여 명령줄에 액세스할 수 있습니다: ssh -l <OS_USERNAME> -p 64295 <your.ip>
:
사용자: [ <OS_USERNAME>
]
패스: [비밀번호]
사용자 유형에 따라 https://<your.ip>:64297
통해 브라우저에서 T-Pot 랜딩 페이지를 열 수 있습니다.
사용자: [ <WEB_USER>
]
패스: [비밀번호]
T-Pot 랜딩 페이지에서 Kibana
클릭하면 Kibana로 이동됩니다. T-Pot 지원 허니팟에 맞춰진 다양한 대시보드 및 시각화 중에서 선택할 수 있습니다.
T-Pot 랜딩 페이지에서 Attack Map
클릭하면 공격 맵으로 이동됩니다. 공격 맵은 웹 소켓을 활용하므로 <WEB_USER>
자격 증명을 다시 입력해야 할 수도 있습니다.
T-Pot 랜딩 페이지에서 Cyberchef
클릭하면 Cyberchef로 이동됩니다.
T-Pot 랜딩 페이지에서 Elasticvue
클릭하면 Elasticvue로 이동됩니다.
T-Pot 랜딩 페이지에서 Spiderfoot
클릭하면 Spiderfoot으로 이동됩니다.
T-Pot은 도커 서비스(예: 허니팟 및 도구)뿐만 아니라 도커 작성 환경에 대한 변수를 제공하는 구성 파일을 제공합니다. 구성 파일은 ~/tpoce/.env
에 숨겨져 있습니다. 기본 구성을 포함하는 예제 파일( env.example
)도 있습니다.
처음 시작하기 전에 ~/tpotce/genuser.sh
실행하거나 여기에 설명된 대로 WEB_USER
수동으로 설정하십시오.
~/tpotce/compose
에서는 T-Pot Standard / HIVE 설치를 조정하는 데 필요한 모든 것을 찾을 수 있습니다.
customizer.py mac_win.yml mini.yml mobile.yml raspberry_showcase.yml sensor.yml standard.yml tpot_services.yml
.yml
파일은 docker compose 파일로, 각각 다른 허니팟 및 도구 세트를 나타내며, tpot_services.yml
사용자 정의된 docker compose 파일을 생성하기 위한 customizer.py
용 템플릿입니다.
작성 파일을 활성화하려면 다음 단계를 따르세요.
systemctl stop tpot
사용하여 T-Pot을 중지합니다.
docker compose 파일 cp ~/tpotce/compose/<dockercompose.yml> ~/tpotce/docker-compose.yml
복사합니다.
systemctl start tpot
으로 T-Pot을 시작합니다.
사용자 정의된 Docker Compose 파일을 생성하려면 다음 안내를 따르세요.
cd ~/tpotce/compose
로 이동합니다.
python3 customizer.py
실행합니다.
스크립트는 자신만의 docker-compose.yml
생성하는 과정을 안내합니다. 일부 허니팟과 서비스는 동일한 포트를 점유하므로 포트 충돌이 있는지 확인하고 충돌하는 서비스에 대해 알립니다. 그런 다음 docker-compose-custom.yml
조정하여 수동으로 문제를 해결하거나 스크립트를 다시 실행할 수 있습니다.
systemctl stop tpot
사용하여 T-Pot을 중지합니다.
사용자 정의 docker compose 파일( cp docker-compose-custom.yml ~/tpotce
및 cd ~/tpotce
을 복사합니다.
docker-compose -f docker-compose-custom.yml up
실행하여 모든 것이 작동하는지 확인하세요. 오류가 발생하는 경우 완화를 위해 Docker Compose 사양을 따르세요. 아마도 docker compose 파일을 편집하여 조정할 수 있는 포트 충돌일 가능성이 높습니다.
모든 것이 제대로 작동하면 CTRL-C
눌러 컨테이너를 중지하고 docker-compose -f docker-compose-custom.yml down -v
실행합니다.
docker compose 파일을 성공적으로 테스트된 새 사용자 정의 docker compose 파일 mv ~/tpotce/docker-compose-custom.yml ~/tpotce/docker-compose.yml
로 바꿉니다.
systemctl start tpot
으로 T-Pot을 시작합니다.
T-Pot은 유지 관리가 적게 필요하도록 설계되었습니다. 거의 모든 것이 도커 이미지를 통해 제공되므로 기본적으로 실행하도록 놔두기만 하면 됩니다. 우리는 손상 위험을 줄이기 위해 정기적으로 도커 이미지를 업그레이드할 것입니다. 그러나 이 섹션을 자세히 읽어야 합니다.
업데이트가 실패할 경우 문제를 공개하거나 토론하면 향후 상황을 개선하는 데 도움이 되지만, 손실된 데이터에 대해서는 지원을 제공 할 수 없기 때문에 항상 새로 설치를 수행하는 것이 제안 솔루션입니다!
T-Pot 보안은 지원되는 Linux 배포판 이미지에 제공되는 업데이트에 따라 달라집니다. OS 설명서를 검토하고 OS에서 업데이트가 정기적으로 설치되는지 확인하세요. 기본적으로( ~/tpotce/.env
) TPOT_PULL_POLICY=always
는 모든 T-Pot 시작 도커가 컨테이너를 생성하기 전에 새 도커 이미지를 확인하고 다운로드하도록 보장합니다.
T-Pot 릴리스는 GitHub를 통해 제공되며 ~/tpotce/update.sh
사용하여 가져올 수 있습니다.
T-Pot 구성 파일을 관련 변경한 경우 먼저 백업을 생성하십시오!
업데이트로 인해 예상치 못한 결과가 발생할 수 있습니다. 작업에 가장 중요한 시스템 또는 파일의 백업을 만드십시오!
업데이트 스크립트는 ...
T-Pot 마스터 브랜치와 동기화되도록 로컬 변경 사항을 무자비하게 덮어씁니다.
~/tpotce
폴더의 전체 백업을 생성합니다.
T-Pot 마스터 브랜치와 동기화되도록 ~/tpotce
의 모든 파일을 업데이트하세요.
~/tpotce/data/ews/conf
및 T-Pot 구성( ~/tpotce/.env
)에서 사용자 정의 ews.cfg
복원합니다.
기본적으로 T-Pot은 일부 정리를 포함하여 매일 재부팅을 추가합니다. sudo crontab -e
사용하여 이 줄을 조정할 수 있습니다.
#Ansible: T-Pot Daily Reboot 42 2 * * * bash -c 'systemctl stop tpot.service && docker container prune -f; docker image prune -f; docker volume prune -f; /usr/sbin/shutdown -r +1 "T-Pot Daily Reboot"'
다음과 같은 문제가 알려져 있습니다. 설명된 단계에 따라 문제를 해결하세요.
얼마 전 Docker는 다운로드 속도 제한을 도입했습니다. 단일 또는 공유 IP를 통해 Docker 이미지를 자주 다운로드하는 경우 IP 주소가 Docker 다운로드 속도 제한을 모두 소진했을 수 있습니다. 속도 제한을 연장하려면 Docker 계정에 로그인하세요.
sudo su - docker login
T-Pot은 단일 NIC가 있는 시스템에서만 실행되도록 설계되었습니다. T-Pot은 기본 경로로 인터페이스를 가져오려고 시도하지만 이것이 항상 성공한다는 보장은 없습니다. NIC가 하나만 있는 시스템에서는 T-Pot을 최대한 활용하십시오.
T-Pot 서비스는 재부팅할 때마다 자동으로 시작 및 중지됩니다(설치 중 sudo crontab -l
설정에 따라 매일 한 번 발생).
T-Pot 서비스를 수동으로 시작하려면 systemctl start tpot
통해 수행하고 dpsw
를 통해 컨테이너 시작을 관찰할 수 있습니다.
T-Pot 서비스는 재부팅할 때마다 자동으로 시작 및 중지됩니다(설치 중 sudo crontab -l
설정에 따라 매일 한 번 발생).
T-Pot 서비스를 수동으로 중지하려면 systemctl stop tpot
통해 중지하고 dpsw
를 통해 컨테이너 종료를 관찰할 수 있습니다.
허니팟, 도구 및 T-Pot 관련 서비스의 모든 영구 로그 파일은 ~/tpotce/data
에 저장됩니다. 여기에는 Elastic Stack으로 전송되지 않는 수집된 아티팩트가 포함됩니다.
T-Pot 데이터 폴더에 저장된 모든 로그 데이터는 기본적으로 30일 동안 유지됩니다.
Elasticsearch 인덱스는 Kibana에서 직접 조정할 수 있는 tpot
인덱스 수명 주기 정책에 의해 처리됩니다("관리 시스템 정책 포함"을 확인하세요).
기본적으로 tpot
인덱스 수명 주기 정책은 인덱스를 30일 동안 유지합니다. 이는 저장 공간과 속도 사이의 적절한 균형을 제공합니다. 그러나 필요에 따라 정책을 조정할 수 있습니다.
T-Pot 데이터 폴더에 저장된 모든 로그 데이터(물론 Elasticsearch 인덱스 제외)는 clean.sh
실행하여 지울 수 있습니다. 때로는 수리할 수 없을 정도로 문제가 발생할 수 있으며 T-Pot을 공장 기본값으로 재설정하는 것이 그 어느 때보다 쉬웠습니다( cd ~/tpotce
입력하십시오).
systemctl stop tpot
사용하여 T-Pot을 중지합니다.
~/tpotce/data
폴더를 안전한 장소로 이동/백업합니다(만일의 경우 선택 사항임).
sudo rm -rf ~/tpotce/data
사용하여 ~/tpotce/data
폴더를 삭제합니다.
T-Pot을 마지막으로 가져온 커밋으로 재설정합니다.
cd ~/tpotce/ git reset --hard
이제 ~/tpotce/install.sh
실행할 수 있습니다.
dps
또는 dpsw [interval]
실행하여 모든 T-Pot 관련 컨테이너를 표시할 수 있습니다. interval (s)
dps.sh
주기적으로 다시 실행합니다.
블랙홀은 공개적으로 알려진 스캐너를 영구적으로 방문하지 않고 일종의 스텔스 모드 방식으로 T-Pot을 실행하여 노출 가능성을 줄입니다. 물론 이것은 항상 고양이와 쥐 게임이지만 블랙홀 기능은 알려진 대량 스캐너의 모든 요청을 null로 라우팅하는 동시에 Suricata를 통해 이벤트를 포착합니다.
이 기능은 ~/tpotce/.env
에서 TPOT_BLACKHOLE=DISABLED
설정한 다음 systemctl stop tpot
및 systemctl start tpot
또는 sudo reboot
실행하여 활성화됩니다.
이 기능을 활성화하면 공격자의 가시성이 크게 줄어들고 결과적으로 활동이 줄어듭니다. 그러나 이미 언급했듯이 이는 완전한 은폐를 보장하지 않으며 일부 허니팟 서비스의 지문 채취를 방지하지도 않습니다.
Nginx(T-Pot WebUI)를 사용하면 사용자 유형에 따라 원하는 만큼 <WEB_USER>
계정을 추가할 수 있습니다.
새 사용자를 추가 하려면 ~/tpotce/genuser.sh
실행하세요.
사용자를 제거 하려면 ~/tpotce/.env
열어 WEB_USER
찾아 해당 base64 문자열을 제거하십시오(디코딩하려면 echo <base64_string> | base64 -d
또는 CyberChef를 열고 "From Base64" 레시피를 로드하십시오).
변경 사항을 적용하려면 systemctl stop tpot
및 systemctl start tpot
또는 sudo reboot
사용하여 T-Pot을 다시 시작해야 합니다.
일부 T-Pot 업데이트에서는 Kibana 객체를 업데이트해야 합니다. 새로운 허니팟을 지원하거나 기존 대시보드 또는 시각화를 개선하기 위한 것입니다. 조정 내용이 손실되지 않도록 먼저 내보내야 합니다.
키바나로 이동
"스택 관리"를 클릭하세요.
"저장된 개체"를 클릭하세요.
"<번호> 개체 내보내기"를 클릭하세요.
"모두 내보내기"를 클릭하면 모든 개체가 포함된 NDJSON 파일이 내보내집니다. 모든 참조가 포함되도록 항상 전체 내보내기를 실행하세요.
NDJSON 파일을 다운로드하고 압축을 푼다.
키바나로 이동
"스택 관리"를 클릭하세요.
"저장된 개체"를 클릭하세요.
Kibana 개체를 개인적으로 변경하지 않은 경우 "가져오기"를 클릭하고 기본값을 그대로 둡니다(기존 개체를 확인하고 자동으로 충돌 덮어쓰기).
NDJSON 파일 찾아보기 "객체가 이미 존재하는 경우 자동으로 덮어쓰시겠습니까?"라는 질문이 표시되면 "예, 모두 덮어씁니다"라고 대답합니다.
일반적으로 T-Pot은 지원에 대한 약속 없이 있는 그대로 제공됩니다. 문제와 토론을 개시할 수 있지만 커뮤니티에서 도움을 줄 수 있도록 기본적인 필수 정보를 포함하도록 준비하세요.
컨테이너가 올바르게 실행되고 있는지 확인: dps
시스템 리소스가 소진되지 않았는지 확인하세요: htop
, docker stats
포트 충돌이 있는지 확인하십시오.
systemctl stop tpot grc netstat -tulpen mi ~/tpotce/docker-compose.yml docker-compose -f ~/tpotce/docker-compose.yml up CTRL+C docker-compose -f ~/tpotce/docker-compose.yml down -v
개별 컨테이너 로그 확인: docker logs -f <container_name>
tpotinit
로그 확인: cat ~/tpotce/data/tpotinit.log
Elastic Stack은 RAM, 특히 logstash
및 elasticsearch
필요로 합니다. Elastic Stack을 사용할 수 없거나 로그를 수신하지 못하거나 단순히 충돌이 계속되는 경우 RAM 또는 스토리지 문제일 가능성이 높습니다.
T -POT가 계속해서 서비스 / 컨테이너를 다시 시작하려고하는 동안 docker logs -f <container_name>
( logstash
또는 elasticsearch
)을 실행하고 RAM과 관련된 경고 나 실패가 있는지 확인하십시오.
htop
통해 스토리지 장애를 더 쉽게 식별 할 수 있습니다.
T-POT는 지원에 대한 약속 없이 오픈 소스 로 제공됩니다 (면책 조항 참조).
보안 연구원이고 책임감있게 문제를보고하고 싶다면 인증서와 연락하십시오.
GitHub 문제에 대한 문제 (오류)를보고하지만 먼저 문제를 해결하십시오. 오류를 해결하기위한 정보를 제공하지 않는 문제는 종료되거나 토론으로 전환됩니다.
검색 기능을 먼저 사용하십시오. 솔루션이 검색을 통해 비슷한 문제가 이미 해결되거나 논의되었을 수 있습니다.
Github 토론에서 일반적인 질문, 아이디어, 쇼 및 텔 등을 다룰 수 있습니다.
검색 기능을 사용하십시오. 비슷한 토론이 이미 열렸으며 답변만으로도 검색이 가능할 수 있습니다.
T-POT가 구축 한 소프트웨어는 다음 라이센스를 사용합니다.
GPLV2 : Conpot, Dionaea, Honeytrap, Suricata
gplv3 : adbhoney, elasticpot, ewsposter, log4pot, fatt, heralding, ipphoney, redishoneypot, sentrypeer, snare, tanner
Apache 2 라이센스 : Cyberchef, Dicompot, Elasticsearch, Logstash, Kibana, Docker
MIT 라이센스 : AutoHeal, Ciscoasa, Ddospot, Elasticvue, Glutton, Hellpot, Maltrail
라이센스 : endlessh
기타 : Citrixhoneypot, Cowrie, Mailoney, Elastic License, WordPot
AGPL-3.0 : 허니 팟
퍼블릭 도메인 (CC) : 하버드 데이터버스
오픈 소스와 개발 커뮤니티가 없으면 우리는 자랑스럽게 생각합니다. T-Pot은 불가능했을 것입니다! 우리의 감사는 확장되었지만 다음 사람과 조직에만 국한되지는 않습니다.
Adbhoney
Ciscoasa
Citrixhoneypot
Conpot
카우리
ddospot
dicompot
디오나 아
도커
Elasticpot
탄성 검색
엘라스틱뷰
끝없는
ewsposter
뚱뚱하다
대식가
헬포트
예고
허니 팟
허니 트랩
ipphoney
키바나
로그스태시
log4pot
우편
말 트레일
Medpot
P0F
Redishoneypot
센트리페
스파이더 풋
올가미
태너
수리카타
Wordpot
다음 회사 및 조직
도커
Elastic.io
Honeynet 프로젝트
... 물론 커뮤니티에 가입 한 당신은 당신입니다 !
놀아 주셔서 감사합니다?
우리가 지금까지 얻은 가장 큰 피드백 중 하나는 Conpot 개발자 중 한 명입니다.
"[...] 나는 스위스 군대 나이프가 아닙니다. 스위스 육군 군인과 비슷합니다. 스위스 육군 칼이 장착되어 있습니다. 탱크 내부. 스위스 탱크. [스위스 탱크. [스위스 탱크. ...] ""
그리고 @RobCowart (Elastiflow의 제작자)에서 :
"#tpot은 가장 잘 정리 된 Turnkey Honeypot 솔루션 중 하나입니다. 악의적 인 행위자의 행동과 조직에 대한 위협을 분석하고 이해하려는 사람에게는 필수품입니다."