OpenCTIとは
脅威情報を管理するためのプラットフォーム。技術情報と非技術情報を構造化・保存・整理・視覚化をすることができるらしい。
このプラットフォームはSTIX2.1ベースらしいので、STIXの規格については改めて確認したほうが良い。日本語の解説資料求む。
https://docs.oasis-open.org/cti/stix/v2.1/stix-v2.1.html
本記事はOpenCTIのGithubページやドキュメントページを中心に試してみる。
Githubページ: https://github.com/OpenCTI-Platform/opencti
ドキュメントページ: https://docs.opencti.io/latest/
TIP (Threat Intelligence Platform) について
TIPとはその名の通り、脅威情報を収集・集約し活用することができるプラットフォームのことと思われる。正直あまり詳しくないので、PaloAltoのページを読んだところ次のようなことが記載されていた。
A Threat Intelligence Platform (TIP) is a technology solution that collects, aggregates and organizes threat intel data from multiple sources and formats. A TIP provides security teams with information on known malware and other threats, powering efficient and accurate threat identification, investigation and response.
元ページ: https://www.paloaltonetworks.com/cyberpedia/what-is-a-threat-intelligence-platform
DeepL訳
脅威インテリジェンスプラットフォーム(TIP)は、複数のソースやフォーマットから脅威インテリジェンスデータを収集、集約、整理するテクノロジーソリューションです。TIPは、既知のマルウェアやその他の脅威に関する情報をセキュリティチームに提供し、効率的で正確な脅威の特定、調査、対応を支援します。
今回はその中でもOpenCTIというオープンソースのプロダクトを触ってみて、どのように収集され活用することができるのかを調査してみたいと思う
アーキテクチャ
公式ドキュメントにアーキテクチャー図が用意されていた。このプロダクトは基本的にはPythyonとRabbitMQ、ElasticSearchをベースとした構成になっている。
構成要素 | 概要 |
---|---|
Connectors | 外部からの情報を収集し、プラットフォームに流し込む役割。また、外部への出力についてもこのコネクターが担っている。公式ドキュメントにある通りいくつかのタイプが存在するため要確認 |
Messaging system | 大量の脅威情報を扱うためか、キューイングシステムが実装されている |
Workers | キューに溜まっている情報を整形し構造化した状態でプラットフォームに流し込まれるっぽい。 |
Platform | WebUI含めたシステムのことだろうか。GraphQLも使えるとのこと |
構築
Dockerベースで構築することができるので非常に便利。Platformのみならず、ConnectorsもDockerベースで構築することができる。Dockerのインストール方法は割愛
あくまでも本記事ではクローズ環境でテスト的に構築するため、本運用の際にはセキュリティを重視した設定・対策を行うこと
そして公式で用意されているコネクターもインストールしちゃいます。
リポジトリのクローン
# クローン git clone https://github.com/OpenCTI-Platform/docker.git cd docker
いくつかのコネクターもインストールしているため、docker-compose.yml
を修正します。(長すぎるので最下部のAppendixに貼り付けます)
MISP関連のコネクターはMISPが構築してある前提とします。
環境変数の準備
公式が用意するdocker-compose.yml
は環境変数ベースで設定することを意図しているため.env
を用意して環境変数を設定する
Point
OPENCTI_ADMIN_EMAIL
とOPENCTI_ADMIN_PASSWORD
は適宜変えるCONNECTOR_XXX_ID
はコネクターのIDで、UUIDを設定する。後ほどコネクターを追加するので覚えておくこと
## 環境変数 sudo apt install -y jq cd ~/docker (cat << EOF OPENCTI_ADMIN_EMAIL=admin@opencti.io OPENCTI_ADMIN_PASSWORD=ChangeMePlease OPENCTI_ADMIN_TOKEN=$(cat /proc/sys/kernel/random/uuid) MINIO_ROOT_USER=$(cat /proc/sys/kernel/random/uuid) MINIO_ROOT_PASSWORD=$(cat /proc/sys/kernel/random/uuid) RABBITMQ_DEFAULT_USER=guest RABBITMQ_DEFAULT_PASS=guest ELASTIC_MEMORY_SIZE=4G CONNECTOR_HISTORY_ID=$(cat /proc/sys/kernel/random/uuid) CONNECTOR_EXPORT_FILE_STIX_ID=$(cat /proc/sys/kernel/random/uuid) CONNECTOR_EXPORT_FILE_CSV_ID=$(cat /proc/sys/kernel/random/uuid) CONNECTOR_IMPORT_FILE_STIX_ID=$(cat /proc/sys/kernel/random/uuid) CONNECTOR_IMPORT_REPORT_ID=$(cat /proc/sys/kernel/random/uuid) CONNECTOR_CVE_ID=$(cat /proc/sys/kernel/random/uuid) CONNECTOR_MISP_ID=$(cat /proc/sys/kernel/random/uuid) CONNECTOR_URLHAUS_PAYLOAD_ID=$(cat /proc/sys/kernel/random/uuid) CONNECTOR_URLHAUS_ID=$(cat /proc/sys/kernel/random/uuid) CONNECTOR_BAZAAR_ID=$(cat /proc/sys/kernel/random/uuid) CONNECTOR_TRACKER_ID=$(cat /proc/sys/kernel/random/uuid) CONNECTOR_COLLECTION_ID=$(cat /proc/sys/kernel/random/uuid) CONNECTOR_DISARM_ID=$(cat /proc/sys/kernel/random/uuid) CONNECTOR_CISA_ID=$(cat /proc/sys/kernel/random/uuid) CONNECTOR_MITRE_ID=$(cat /proc/sys/kernel/random/uuid) CONNECTOR_OPENCTI_ID=$(cat /proc/sys/kernel/random/uuid) CONNECTOR_PHISHUNT_ID=$(cat /proc/sys/kernel/random/uuid) EOF ) > .env
その他設定
Elastic関連
sudo sysctl -w vm.max_map_count=1048575
起動
sudo docker-compose up -d または sudo docker compose up -d
http://[ホストのIPアドレス]:8080
にアクセスを行い、ログイン画面が表示されることを確認する
使い方?
まだ正しい使い方が何なのかは分からないがどのような仕組みでデータが管理されているかを把握したいと思う。大体こういうのは片っ端から実装されている機能をドキュメントを見ながら試すのが早いと信じて。。
思いっきりSTIX2.1ベースでは??というのは現状一旦無視して画面上はこうなっているということから始めたいと思う。
ログイン
先程のログイン画面で、IDとパスワードを入力しログインする。この際のIDとパスワードは.env
ファイルで指定したもの。ログインが成功するとダッシュボードが表示されると思う。
すでにいくつかのコネクターが起動しているため、データが格納されていると思われる。
Analyses
Analysesが何なのかはドキュメントに記載はないが、分析のなにかなんだろうとは思う。
report
STIX 2.1のreportと同一っぽい。脅威情報を取りまとめ、分析した結果をまとめる機能の様子。セキュリティベンダーが出している脅威情報の取りまとめのページ相当の機能と思った。
ちなみにSTIX 2.1のreportにはこう書かれている
Reports are collections of threat intelligence focused on one or more topics, such as a description of a threat actor, malware, or attack technique, including context and related details. They are used to group related threat intelligence together so that it can be published as a comprehensive cyber threat story.
https://docs.oasis-open.org/cti/stix/v2.1/os/stix-v2.1-os.html#_n8bjzg1ysgdq
実際に画面を確認すると、MISPから取り込まれたデータがreportとして確認することができた。TLP:CLAR
なので画面のスクショ載せちゃいます。
その他にもこのレポートに関する画面はあるがIoCの一覧のテーブルだったため、割愛。やはり、このレポート機能は文字通りレポートの機能で特定の脅威の情報を取りまとめたものっぽい。
Grouping
これはデータが無かったのでドキュメントベースでしかわからないが、reportほどではないもののグルーピングしたいものをまとめるっぽい。
STIX2.1の定義
A Grouping object explicitly asserts that the referenced STIX Objects have a shared context, unlike a STIX Bundle (which explicitly conveys no context). A Grouping object should not be confused with an intelligence product, which should be conveyed via a STIX Report.
[https://docs.oasis-open.org/cti/stix/v2.1/os/stix-v2.1-os.html#_6hdrixb3ua4j
あーね。
Malware Analyses
これもデータが無かったのでドキュメントベース。マルウェアの解析結果とかを乗せることができそう。
よくわからないけど、マルウェアのオンラインサンドボックスがSTIXの形式で出力してくれればこれに該当する?
STIX2.1の定義
Malware Analysis captures the metadata and results of a particular static or dynamic analysis performed on a malware instance or family. One of result or analysis_sco_refs properties MUST be provided.
Note
Noteはメモっぽいノートなので割愛
External references
外部の情報ソースのことなので割愛
Case
reportは脅威情報を取りまとめたものを取り扱う機能だったが、Caseは自組織のインシデント管理を行う機能っぽい。
Incident Responses
当然データとしては空っぽなのでテストデータを入れてみたいと思う。試してみたところreport画面と同じことができ、大枠の名前だけが変わった感じと思う。
エンティティ画面ではツールなどを入れた。
観測結果画面ではIPやドメイン情報を入れることができた。タスクなども入れることができるみたいだが・・・?
Event
ドキュメントないよ!?ただし、overviewには次の通り記載あり。SIEMからのイベントなどをここに入れまくってやる感じなのかな?
Events: all incidents & alerts coming from operational systems as well as sightings.
Observation
https://docs.opencti.io/latest/usage/exploring-observations/
ドキュメントないよ!?ただし、overviewには次の通り記載あり。実際に登録されているデータを確認すると各種Feedから取ってきたと思われるIoCっぽいものが一覧として表示されている。
Observations: all technical data in the platform such as observables, artifacts and indicators.
なお、ここまでの情報をhot knowledge
として定義されている。ちょくちょく変わるものなのでメンテナンスや分析が必要だよねって言うことらしい。
https://docs.opencti.io/latest/usage/overview/?h=artifact#the-hot-knowledge
Threats
脅威グループなどのデータをまとめるページっぽい
Arsenal
脆弱性やマルウェア、悪用されたツールなどをまとめるページっぽい
Techniques
MITRE ATT&CKなどのテクニックがまとまっているっぽい?
Entities
セクターや組織などその他情報
Locations
地域・国・都市などの位置情報
なおここまでの情報をCold Knowledge
と定義しているらしい。辞書的に扱えるデータ的な。
Connector
冒頭にも記載した通り、アドオンとして外部から情報を収集したり出力したりする部分を担う機能。現在インストールしたコネクターは次の通り。
公開されていて無償のものは全て入れたつもりだが、動作していないと思うようなものもあるので、インストール後の確認は重要と思う。
コネクターの一覧はここにあるそうです。
Blog
開発者によるブログ。結構更新されてるしヒントがあるかも。
感想
様々な情報をSTIXベースでここまで管理・可視化をしてくれる素晴らしいプロダクトだと思った。アーキテクチャーとしてもElasticやMQなど比較的モダンでよく設計されているし、メンテナンスもそこそこ行われているため、TIPを構築したいならOpenCTIは選択肢に入ると思う。
この記事では紹介できなかった機能はもう少しあるようなのでぜひ、公式ドキュメントを読んでみてほしい。概念的な部分はわかりやすく記載されている。
ここまで機能があるとすると自組織にとって不要な機能ややり過ぎな機能がどうしても出てきてしまうと思う。自組織にとってどの情報を精査し、Threat Intelligenceとして管理・活用していくかの方針がないとツールだけが宙に浮いてしまい、非効率的な状況を生んでしまうだけだと思った。
特にCold Knowledge部分をメンテし続けようと思うとそれ相応の人員とコストが必要になるため、有償のTIPも視野に入る。
まー、この記事を読んでいる人はそこの検討が終わっているから製品選定をしていると信じて。。。(逆にここらへん考えている人何を考えてるか教えてください)
最後に
面白そうなオープンソースのTIP募集中です
参考記事
拝読いたしました。ありがとうございます。
ninoseki.github.io techblog.zozo.com zenn.dev
Appendix
docker-compose.yml
version: '3' services: redis: image: redis:7.0.12 restart: always volumes: - redisdata:/data elasticsearch: image: docker.elastic.co/elasticsearch/elasticsearch:8.9.0 volumes: - esdata:/usr/share/elasticsearch/data environment: # Comment-out the line below for a cluster of multiple nodes - discovery.type=single-node # Uncomment the line below below for a cluster of multiple nodes # - cluster.name=docker-cluster - xpack.ml.enabled=false - xpack.security.enabled=false - "ES_JAVA_OPTS=-Xms${ELASTIC_MEMORY_SIZE} -Xmx${ELASTIC_MEMORY_SIZE}" restart: always ulimits: memlock: soft: -1 hard: -1 nofile: soft: 65536 hard: 65536 minio: image: minio/minio:RELEASE.2023-05-18T00-05-36Z volumes: - s3data:/data ports: - "9000:9000" environment: MINIO_ROOT_USER: ${MINIO_ROOT_USER} MINIO_ROOT_PASSWORD: ${MINIO_ROOT_PASSWORD} command: server /data healthcheck: test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"] interval: 30s timeout: 20s retries: 3 restart: always rabbitmq: image: rabbitmq:3.12-management environment: - RABBITMQ_DEFAULT_USER=${RABBITMQ_DEFAULT_USER} - RABBITMQ_DEFAULT_PASS=${RABBITMQ_DEFAULT_PASS} - RABBITMQ_NODENAME=rabbit01@localhost volumes: - amqpdata:/var/lib/rabbitmq restart: always opencti: image: opencti/platform:5.10.0 environment: - NODE_OPTIONS=--max-old-space-size=8096 - APP__PORT=8080 - APP__BASE_URL=${OPENCTI_BASE_URL} - APP__ADMIN__EMAIL=${OPENCTI_ADMIN_EMAIL} - APP__ADMIN__PASSWORD=${OPENCTI_ADMIN_PASSWORD} - APP__ADMIN__TOKEN=${OPENCTI_ADMIN_TOKEN} - APP__APP_LOGS__LOGS_LEVEL=error - REDIS__HOSTNAME=redis - REDIS__PORT=6379 - ELASTICSEARCH__URL=http://elasticsearch:9200 - MINIO__ENDPOINT=minio - MINIO__PORT=9000 - MINIO__USE_SSL=false - MINIO__ACCESS_KEY=${MINIO_ROOT_USER} - MINIO__SECRET_KEY=${MINIO_ROOT_PASSWORD} - RABBITMQ__HOSTNAME=rabbitmq - RABBITMQ__PORT=5672 - RABBITMQ__PORT_MANAGEMENT=15672 - RABBITMQ__MANAGEMENT_SSL=false - RABBITMQ__USERNAME=${RABBITMQ_DEFAULT_USER} - RABBITMQ__PASSWORD=${RABBITMQ_DEFAULT_PASS} - SMTP__HOSTNAME=${SMTP_HOSTNAME} - SMTP__PORT=25 - PROVIDERS__LOCAL__STRATEGY=LocalStrategy ports: - "8080:8080" depends_on: - redis - elasticsearch - minio - rabbitmq restart: always worker: image: opencti/worker:5.10.0 environment: - OPENCTI_URL=http://opencti:8080 - OPENCTI_TOKEN=${OPENCTI_ADMIN_TOKEN} - WORKER_LOG_LEVEL=info depends_on: - opencti deploy: mode: replicated replicas: 3 restart: always connector-export-file-stix: image: opencti/connector-export-file-stix:5.10.0 environment: - OPENCTI_URL=http://opencti:8080 - OPENCTI_TOKEN=${OPENCTI_ADMIN_TOKEN} - CONNECTOR_ID=${CONNECTOR_EXPORT_FILE_STIX_ID} # Valid UUIDv4 - CONNECTOR_TYPE=INTERNAL_EXPORT_FILE - CONNECTOR_NAME=ExportFileStix2 - CONNECTOR_SCOPE=application/json - CONNECTOR_CONFIDENCE_LEVEL=15 # From 0 (Unknown) to 100 (Fully trusted) - CONNECTOR_LOG_LEVEL=info restart: always depends_on: - opencti connector-export-file-csv: image: opencti/connector-export-file-csv:5.10.0 environment: - OPENCTI_URL=http://opencti:8080 - OPENCTI_TOKEN=${OPENCTI_ADMIN_TOKEN} - CONNECTOR_ID=${CONNECTOR_EXPORT_FILE_CSV_ID} # Valid UUIDv4 - CONNECTOR_TYPE=INTERNAL_EXPORT_FILE - CONNECTOR_NAME=ExportFileCsv - CONNECTOR_SCOPE=text/csv - CONNECTOR_CONFIDENCE_LEVEL=15 # From 0 (Unknown) to 100 (Fully trusted) - CONNECTOR_LOG_LEVEL=info restart: always depends_on: - opencti connector-export-file-txt: image: opencti/connector-export-file-txt:5.10.0 environment: - OPENCTI_URL=http://opencti:8080 - OPENCTI_TOKEN=${OPENCTI_ADMIN_TOKEN} - CONNECTOR_ID=${CONNECTOR_EXPORT_FILE_TXT_ID} # Valid UUIDv4 - CONNECTOR_TYPE=INTERNAL_EXPORT_FILE - CONNECTOR_NAME=ExportFileTxt - CONNECTOR_SCOPE=text/plain - CONNECTOR_CONFIDENCE_LEVEL=15 # From 0 (Unknown) to 100 (Fully trusted) - CONNECTOR_LOG_LEVEL=info restart: always depends_on: - opencti connector-import-file-stix: image: opencti/connector-import-file-stix:5.10.0 environment: - OPENCTI_URL=http://opencti:8080 - OPENCTI_TOKEN=${OPENCTI_ADMIN_TOKEN} - CONNECTOR_ID=${CONNECTOR_IMPORT_FILE_STIX_ID} # Valid UUIDv4 - CONNECTOR_TYPE=INTERNAL_IMPORT_FILE - CONNECTOR_NAME=ImportFileStix - CONNECTOR_VALIDATE_BEFORE_IMPORT=true # Validate any bundle before import - CONNECTOR_SCOPE=application/json,text/xml - CONNECTOR_AUTO=true # Enable/disable auto-import of file - CONNECTOR_CONFIDENCE_LEVEL=15 # From 0 (Unknown) to 100 (Fully trusted) - CONNECTOR_LOG_LEVEL=info restart: always depends_on: - opencti connector-import-document: image: opencti/connector-import-document:5.10.0 environment: - OPENCTI_URL=http://opencti:8080 - OPENCTI_TOKEN=${OPENCTI_ADMIN_TOKEN} - CONNECTOR_ID=${CONNECTOR_IMPORT_DOCUMENT_ID} # Valid UUIDv4 - CONNECTOR_TYPE=INTERNAL_IMPORT_FILE - CONNECTOR_NAME=ImportDocument - CONNECTOR_VALIDATE_BEFORE_IMPORT=true # Validate any bundle before import - CONNECTOR_SCOPE=application/pdf,text/plain,text/html - CONNECTOR_AUTO=true # Enable/disable auto-import of file - CONNECTOR_ONLY_CONTEXTUAL=false # Only extract data related to an entity (a report, a threat actor, etc.) - CONNECTOR_CONFIDENCE_LEVEL=15 # From 0 (Unknown) to 100 (Fully trusted) - CONNECTOR_LOG_LEVEL=info - IMPORT_DOCUMENT_CREATE_INDICATOR=true restart: always depends_on: - opencti connector-cve: image: opencti/connector-cve:5.10.0 environment: - OPENCTI_URL=http://opencti:8080 - OPENCTI_TOKEN=${OPENCTI_ADMIN_TOKEN} - CONNECTOR_ID=${CONNECTOR_CVE_ID} - CONNECTOR_TYPE=EXTERNAL_IMPORT - CONNECTOR_NAME=Common Vulnerabilities and Exposures - CONNECTOR_SCOPE=identity,vulnerability - CONNECTOR_CONFIDENCE_LEVEL=75 # From 0 (Unknown) to 100 (Fully trusted) - CONNECTOR_UPDATE_EXISTING_DATA=false - CONNECTOR_RUN_AND_TERMINATE=false - CONNECTOR_LOG_LEVEL=error - CVE_IMPORT_HISTORY=true # Import history at the first run (after only recent), reset the connector state if you want to re-import - CVE_NVD_DATA_FEED=https://nvd.nist.gov/feeds/json/cve/1.1/nvdcve-1.1-recent.json.gz - CVE_HISTORY_START_YEAR=2002 - CVE_HISTORY_DATA_FEED=https://nvd.nist.gov/feeds/json/cve/1.1/ - CVE_INTERVAL=7 # In days, must be strictly greater than 1 restart: always depends_on: - opencti connector-misp: image: opencti/connector-misp:5.10.0 environment: - OPENCTI_URL=http://opencti:8080 - OPENCTI_TOKEN=${OPENCTI_ADMIN_TOKEN} - CONNECTOR_ID=${CONNECTOR_MISP_ID} - CONNECTOR_TYPE=EXTERNAL_IMPORT - CONNECTOR_NAME=MISP - CONNECTOR_SCOPE=misp - CONNECTOR_CONFIDENCE_LEVEL=25 # From 0 (Unknown) to 100 (Fully trusted) - CONNECTOR_UPDATE_EXISTING_DATA=false - CONNECTOR_LOG_LEVEL=debug - MISP_URL=https://192.168.20.114/ # Required - MISP_REFERENCE_URL= # Optional, will be used to create external reference to MISP event (default is "url") - MISP_KEY=changeme # Required - MISP_SSL_VERIFY=false # Required - MISP_DATETIME_ATTRIBUTE=timestamp # Required, filter to be used in query for new MISP events - MISP_REPORT_DESCRIPTION_ATTRIBUTE_FILTER= # Optional, filter to be used to find the attribute with report description (example: "type=comment,category=Internal reference") - MISP_CREATE_REPORTS=true # Required, create report for MISP event - MISP_CREATE_INDICATORS=true # Required, create indicators from attributes - MISP_CREATE_OBSERVABLES=true # Required, create observables from attributes - MISP_CREATE_OBJECT_OBSERVABLES=true # Required, create text observables for MISP objects - MISP_CREATE_TAGS_AS_LABELS=true # Optional, create tags as labels (sanitize MISP tag to OpenCTI labels) - MISP_GUESS_THREAT_FROM_TAGS=false # Optional, try to guess threats (threat actor, intrusion set, malware, etc.) from MISP tags when they are present in OpenCTI - MISP_AUTHOR_FROM_TAGS=false # Optional, map creator:XX=YY (author of event will be YY instead of the author of the event) - MISP_MARKINGS_FROM_TAGS=false # Optional, map marking:XX=YY (in addition to TLP, add XX:YY as marking definition, where XX is marking type, YY is marking value) - MISP_ENFORCE_WARNING_LIST=false # Optional, enforce warning list in MISP queries - MISP_REPORT_TYPE=misp-event # Optional, report_class if creating report for event - MISP_IMPORT_FROM_DATE=2000-01-01 # Required, import all event from this date - MISP_IMPORT_TAGS= # Optional, list of tags used for import events - MISP_IMPORT_TAGS_NOT= # Optional, list of tags to not include - MISP_IMPORT_CREATOR_ORGS= # Optional, only import events created by those orgs (put the identifiers here) - MISP_IMPORT_CREATOR_ORGS_NOT= # Optional, do not import events created by those orgs (put the identifiers here) - MISP_IMPORT_OWNER_ORGS= # Optional, only import events owned by those orgs (put the identifiers here) - MISP_IMPORT_OWNER_ORGS_NOT= # Optional, do not import events owned by those orgs (put the identifiers here) - MISP_IMPORT_KEYWORD= # Optional, search only events based on a keyword - MISP_IMPORT_DISTRIBUTION_LEVELS= # Optional, only import events with the given distribution levels (ex: 0,1,2,3) - MISP_IMPORT_THREAT_LEVELS= # Optional only import events with the given threat levels (ex: 1,2,3,4) - MISP_IMPORT_ONLY_PUBLISHED=false - MISP_IMPORT_WITH_ATTACHMENTS=false # Optional, try to import a PDF file from the attachment attribute - MISP_IMPORT_TO_IDS_NO_SCORE=40 # Optional, use as a score for the indicator/observable if the attribute to_ids is no - MISP_IMPORT_UNSUPPORTED_OBSERVABLES_AS_TEXT=false # Optional, import unsupported observable as x_opencti_text - MISP_IMPORT_UNSUPPORTED_OBSERVABLES_AS_TEXT_TRANSPARENT=true # Optional, import unsupported observable as x_opencti_text just with the value - MISP_INTERVAL=5 # Required, in minutes restart: always depends_on: - opencti connector-urlhaus-recent-payloads: image: opencti/connector-urlhaus-recent-payloads:5.10.0 environment: - OPENCTI_URL=http://opencti:8080 - OPENCTI_TOKEN=${OPENCTI_ADMIN_TOKEN} - CONNECTOR_ID=${CONNECTOR_URLHAUS_PAYLOAD_ID} - CONNECTOR_TYPE=EXTERNAL_IMPORT - "CONNECTOR_NAME=URLhaus Recent Payloads" - CONNECTOR_CONFIDENCE_LEVEL=50 # From 0 (Unknown) to 100 (Fully trusted) - CONNECTOR_UPDATE_EXISTING_DATA=false - CONNECTOR_LOG_LEVEL=error - URLHAUS_RECENT_PAYLOADS_API_URL=https://urlhaus-api.abuse.ch/v1/ - URLHAUS_RECENT_PAYLOADS_COOLDOWN_SECONDS=300 # Time to wait in seconds between subsequent requests - URLHAUS_RECENT_PAYLOADS_INCLUDE_FILETYPES=exe,dll,docm,docx,doc,xls,xlsx,xlsm,js,xll # (Optional) Only download files if any tag matches. (Comma separated) - URLHAUS_RECENT_PAYLOADS_INCLUDE_SIGNATURES= # (Optional) Only download files matching these Yara rules. (Comma separated) - URLHAUS_RECENT_PAYLOADS_SKIP_UNKNOWN_FILETYPES=true # Skip files with an unknown file type - URLHAUS_RECENT_PAYLOADS_SKIP_NULL_SIGNATURE=true # Skip files that didn't match known Yara rules - URLHAUS_RECENT_PAYLOADS_LABELS=urlhaus # (Optional) Labels to apply to uploaded Artifacts. (Comma separated) - URLHAUS_RECENT_PAYLOADS_LABELS_COLOR=#54483b - URLHAUS_RECENT_PAYLOADS_SIGNATURE_LABEL_COLOR=#0059f7 # Color for Yara rule match label - URLHAUS_RECENT_PAYLOADS_FILETYPE_LABEL_COLOR=#54483b # Color to use for filetype label restart: always connector-urlhaus: image: opencti/connector-urlhaus:5.10.0 environment: - OPENCTI_URL=http://opencti:8080 - OPENCTI_TOKEN=${OPENCTI_ADMIN_TOKEN} - CONNECTOR_ID=${CONNECTOR_URLHAUS_ID} - CONNECTOR_TYPE=EXTERNAL_IMPORT - "CONNECTOR_NAME=Abuse.ch URLhaus" - CONNECTOR_SCOPE=urlhaus - CONNECTOR_CONFIDENCE_LEVEL=40 # From 0 (Unknown) to 100 (Fully trusted) - CONNECTOR_UPDATE_EXISTING_DATA=false - CONNECTOR_LOG_LEVEL=error - URLHAUS_CSV_URL=https://urlhaus.abuse.ch/downloads/csv_recent/ - URLHAUS_IMPORT_OFFLINE=true - URLHAUS_THREATS_FROM_LABELS=true - URLHAUS_INTERVAL=3 # In days, must be strictly greater than 1 restart: always connector-malware-bazaar-recent-additions: image: opencti/connector-malwarebazaar-recent-additions:5.10.0 environment: - OPENCTI_URL=http://opencti:8080 - OPENCTI_TOKEN=${OPENCTI_ADMIN_TOKEN} - CONNECTOR_ID=${CONNECTOR_BAZAAR_ID} - CONNECTOR_TYPE=EXTERNAL_IMPORT - "CONNECTOR_NAME=MalwareBazaar Recent Additions" - CONNECTOR_CONFIDENCE_LEVEL=50 # From 0 (Unknown) to 100 (Fully trusted) - CONNECTOR_UPDATE_EXISTING_DATA=false - CONNECTOR_LOG_LEVEL=error - MALWAREBAZAAR_RECENT_ADDITIONS_API_URL=https://mb-api.abuse.ch/api/v1/ - MALWAREBAZAAR_RECENT_ADDITIONS_COOLDOWN_SECONDS=300 # Time to wait in seconds between subsequent requests - MALWAREBAZAAR_RECENT_ADDITIONS_INCLUDE_TAGS=exe,dll,docm,docx,doc,xls,xlsx,xlsm,js # (Optional) Only download files if any tag matches. (Comma separated) - MALWAREBAZAAR_RECENT_ADDITIONS_INCLUDE_REPORTERS= # (Optional) Only download files uploaded by these reporters. (Comma separated) - MALWAREBAZAAR_RECENT_ADDITIONS_LABELS=malware-bazar # (Optional) Labels to apply to uploaded Artifacts. (Comma separated) - MALWAREBAZAAR_RECENT_ADDITIONS_LABELS_COLOR=#54483b # Color to use for labels restart: always connector-cybercrimetracker: image: opencti/connector-cybercrime-tracker:5.10.0 environment: - OPENCTI_URL=http://opencti:8080 - OPENCTI_TOKEN=${OPENCTI_ADMIN_TOKEN} - CONNECTOR_ID=${CONNECTOR_TRACKER_ID} - CONNECTOR_TYPE=EXTERNAL_IMPORT - CONNECTOR_NAME=Cybercrime-Tracker - CONNECTOR_SCOPE=cybercrime-tracker - CONNECTOR_CONFIDENCE_LEVEL=15 # From 0 (Unknown) to 100 (Fully trusted) - CONNECTOR_UPDATE_EXISTING_DATA=false - CONNECTOR_LOG_LEVEL=error - CYBERCRIME_TRACKER_FEED_URL=https://cybercrime-tracker.net/rss.xml - CYBERCRIME_TRACKER_TLP=CLEAR - CYBERCRIME_TRACKER_INTERVAL=86400 - CYBERCRIME_TRACKER_CREATE_INDICATORS=true - CYBERCRIME_TRACKER_CREATE_OBSERVABLES=true restart: always connector-cyber-campaign-collection: image: opencti/connector-cyber-campaign-collection:5.10.0 environment: - OPENCTI_URL=http://opencti:8080 - OPENCTI_TOKEN=${OPENCTI_ADMIN_TOKEN} - CONNECTOR_ID=${CONNECTOR_COLLECTION_ID} - CONNECTOR_TYPE=EXTERNAL_IMPORT - "CONNECTOR_NAME=APT & Cybercriminals Campaign Collection" - CONNECTOR_SCOPE=report - CONNECTOR_CONFIDENCE_LEVEL=0 # From 0 (Unknown) to 100 (Fully trusted) - CONNECTOR_UPDATE_EXISTING_DATA=false - CONNECTOR_RUN_AND_TERMINATE=false - CONNECTOR_LOG_LEVEL=error - CYBER_MONITOR_GITHUB_TOKEN= # If not provided, rate limit will be very low - CYBER_MONITOR_FROM_YEAR=2018 - CYBER_MONITOR_INTERVAL=4 # In days, must be strictly greater than 1 restart: always connector-disarm-framework: image: opencti/connector-disarm-framework:5.10.0 environment: - OPENCTI_URL=http://opencti:8080 - OPENCTI_TOKEN=${OPENCTI_ADMIN_TOKEN} - CONNECTOR_ID=${CONNECTOR_DISARM_ID} - CONNECTOR_TYPE=EXTERNAL_IMPORT - "CONNECTOR_NAME=DISARM Framework" - CONNECTOR_SCOPE=marking-definition,identity,attack-pattern,course-of-action,intrusion-set,campaign,malware,tool,report,narrative,event,channel - CONNECTOR_CONFIDENCE_LEVEL=75 # From 0 (Unknown) to 100 (Fully trusted) - CONNECTOR_UPDATE_EXISTING_DATA=false - CONNECTOR_RUN_AND_TERMINATE=false - CONNECTOR_LOG_LEVEL=error - DISARM_FRAMEWORK_URL=https://raw.githubusercontent.com/DISARMFoundation/DISARMframeworks/main/generated_files/DISARM_STIX/DISARM.json - DISARM_FRAMEWORK_INTERVAL=7 # In days, must be strictly greater than 1 restart: always connector-cisa-known-exploited-vulnerabilities: image: opencti/connector-cisa-known-exploited-vulnerabilities:5.10.0 environment: - OPENCTI_URL=http://opencti:8080 - OPENCTI_TOKEN=${OPENCTI_ADMIN_TOKEN} - CONNECTOR_ID=${CONNECTOR_CISA_ID} - CONNECTOR_TYPE=EXTERNAL_IMPORT - "CONNECTOR_NAME=CISA Known Exploited Vulnerabilities" - CONNECTOR_SCOPE=cisa - CONNECTOR_CONFIDENCE_LEVEL=100 # From 0 (Unknown) to 100 (Fully trusted) - CONNECTOR_UPDATE_EXISTING_DATA=false - CONNECTOR_RUN_AND_TERMINATE=false - CONNECTOR_LOG_LEVEL=error - CISA_CATALOG_URL=https://www.cisa.gov/sites/default/files/feeds/known_exploited_vulnerabilities.json - CISA_CREATE_INFRASTRUCTURES=false - CISA_TLP=TLP:CLEAR - CISA_INTERVAL=2 # In days, must be strictly greater than 1 restart: always connector-mitre: image: opencti/connector-mitre:5.10.0 environment: - OPENCTI_URL=http://opencti:8080 - OPENCTI_TOKEN=${OPENCTI_ADMIN_TOKEN} - CONNECTOR_ID=${CONNECTOR_MITRE_ID} - CONNECTOR_TYPE=EXTERNAL_IMPORT - "CONNECTOR_NAME=MITRE Datasets" - CONNECTOR_SCOPE=tool,report,malware,identity,campaign,intrusion-set,attack-pattern,course-of-action,x-mitre-data-source,x-mitre-data-component,x-mitre-matrix,x-mitre-tactic,x-mitre-collection - CONNECTOR_CONFIDENCE_LEVEL=75 - CONNECTOR_UPDATE_EXISTING_DATA=false - CONNECTOR_RUN_AND_TERMINATE=false - CONNECTOR_LOG_LEVEL=error - MITRE_INTERVAL=7 # In days restart: always connector-opencti: image: opencti/connector-opencti:5.10.0 environment: - OPENCTI_URL=http://opencti:8080 - OPENCTI_TOKEN=${OPENCTI_ADMIN_TOKEN} - CONNECTOR_ID=${CONNECTOR_OPENCTI_ID} - CONNECTOR_TYPE=EXTERNAL_IMPORT - "CONNECTOR_NAME=OpenCTI Datasets" - CONNECTOR_SCOPE=marking-definition,identity,location - CONNECTOR_CONFIDENCE_LEVEL=100 - CONNECTOR_UPDATE_EXISTING_DATA=true - CONNECTOR_RUN_AND_TERMINATE=false - CONNECTOR_LOG_LEVEL=error - CONFIG_SECTORS_FILE_URL=https://raw.githubusercontent.com/OpenCTI-Platform/datasets/master/data/sectors.json - CONFIG_GEOGRAPHY_FILE_URL=https://raw.githubusercontent.com/OpenCTI-Platform/datasets/master/data/geography.json - CONFIG_COMPANIES_FILE_URL=https://raw.githubusercontent.com/OpenCTI-Platform/datasets/master/data/companies.json - CONFIG_REMOVE_CREATOR=false - CONFIG_INTERVAL=7 # In days restart: always connector-phishunt: image: opencti/connector-phishunt:5.10.0 environment: - OPENCTI_URL=http://opencti:8080 - OPENCTI_TOKEN=${OPENCTI_ADMIN_TOKEN} - CONNECTOR_ID=${CONNECTOR_PHISHUNT_ID} - CONNECTOR_TYPE=EXTERNAL_IMPORT - CONNECTOR_NAME=Phishunt - CONNECTOR_SCOPE=phishunt - CONNECTOR_CONFIDENCE_LEVEL=40 # From 0 (Unknown) to 100 (Fully trusted) - CONNECTOR_UPDATE_EXISTING_DATA=false - CONNECTOR_LOG_LEVEL=error - PHISHUNT_URL=https://phishunt.io/feed.txt - PHISHUNT_CREATE_INDICATORS=true - PHISHUNT_INTERVAL=3 # In days, must be strictly greater than 1 restart: always volumes: esdata: s3data: redisdata: amqpdata: