txt2stix 1.1.15__tar.gz → 1.2.1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {txt2stix-1.1.15 → txt2stix-1.2.1}/PKG-INFO +1 -1
- {txt2stix-1.1.15 → txt2stix-1.2.1}/docs/stix-mapping.md +45 -27
- {txt2stix-1.1.15 → txt2stix-1.2.1}/includes/extractions/ai/config.yaml +17 -1
- {txt2stix-1.1.15 → txt2stix-1.2.1}/includes/extractions/lookup/config.yaml +17 -2
- {txt2stix-1.1.15 → txt2stix-1.2.1}/pyproject.toml +1 -1
- {txt2stix-1.1.15 → txt2stix-1.2.1}/requirements.txt +3 -3
- {txt2stix-1.1.15 → txt2stix-1.2.1}/tests/manual-tests/cases-extraction-type-ai.md +17 -1
- {txt2stix-1.1.15 → txt2stix-1.2.1}/tests/src/test_indicator.py +21 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/tests/src/test_retriever.py +14 -1
- {txt2stix-1.1.15 → txt2stix-1.2.1}/txt2stix/indicator.py +32 -28
- {txt2stix-1.1.15 → txt2stix-1.2.1}/txt2stix/retriever.py +8 -2
- {txt2stix-1.1.15 → txt2stix-1.2.1}/.env.example +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/.env.markdown +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/.github/workflows/create-release.yml +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/.github/workflows/run-tests.yml +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/.gitignore +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/LICENSE +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/README.md +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/docs/README.md +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/docs/txt2stix.png +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/includes/__init__.py +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/includes/extractions/pattern/config.yaml +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/includes/helpers/mimetype_filename_extension_list.csv +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/includes/helpers/stix_relationship_types.txt +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/includes/helpers/tlds.txt +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/includes/helpers/windows_registry_key_prefix.txt +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/includes/lookups/_README.md +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/includes/lookups/_generate_lookups.py +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/includes/lookups/attack_pattern.txt +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/includes/lookups/campaign.txt +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/includes/lookups/country_iso3166_alpha2.txt +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/includes/lookups/course_of_action.txt +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/includes/lookups/disarm_id_v1_6.txt +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/includes/lookups/disarm_name_v1_6.txt +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/includes/lookups/extensions.txt +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/includes/lookups/identity.txt +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/includes/lookups/infrastructure.txt +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/includes/lookups/intrusion_set.txt +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/includes/lookups/malware.txt +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/includes/lookups/mitre_atlas_id_v4_9_0.txt +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/includes/lookups/mitre_atlas_name_v4_9_0.txt +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/includes/lookups/mitre_attack_enterprise_aliases_v18_0.txt +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/includes/lookups/mitre_attack_enterprise_id_v18_0.txt +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/includes/lookups/mitre_attack_enterprise_name_v18_0.txt +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/includes/lookups/mitre_attack_ics_aliases_v18_0.txt +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/includes/lookups/mitre_attack_ics_id_v18_0.txt +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/includes/lookups/mitre_attack_ics_name_v18_0.txt +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/includes/lookups/mitre_attack_mobile_aliases_v18_0.txt +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/includes/lookups/mitre_attack_mobile_id_v18_0.txt +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/includes/lookups/mitre_attack_mobile_name_v18_0.txt +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/includes/lookups/mitre_capec_id_v3_9.txt +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/includes/lookups/mitre_capec_name_v3_9.txt +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/includes/lookups/mitre_cwe_id_v4_18.txt +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/includes/lookups/mitre_cwe_name_v4_18.txt +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/includes/lookups/sector_aliases_v1_0.txt +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/includes/lookups/threat_actor.txt +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/includes/lookups/tld.txt +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/includes/lookups/tool.txt +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/includes/tests/test_cases.yaml +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/tests/README.md +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/tests/data/extraction_types/ai_country.txt +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/tests/data/extraction_types/ai_mitre_attack_enterprise.txt +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/tests/data/extraction_types/ai_mitre_attack_ics.txt +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/tests/data/extraction_types/ai_mitre_attack_mobile.txt +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/tests/data/extraction_types/ai_mitre_capec.txt +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/tests/data/extraction_types/ai_mitre_cwe.txt +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/tests/data/extraction_types/all_cases.txt +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/tests/data/extraction_types/generic_autonomous_system_number.txt +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/tests/data/extraction_types/generic_bank_card_all.txt +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/tests/data/extraction_types/generic_bank_card_amex.txt +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/tests/data/extraction_types/generic_bank_card_diners.txt +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/tests/data/extraction_types/generic_bank_card_discover.txt +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/tests/data/extraction_types/generic_bank_card_jcb.txt +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/tests/data/extraction_types/generic_bank_card_mastercard.txt +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/tests/data/extraction_types/generic_bank_card_union_pay.txt +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/tests/data/extraction_types/generic_bank_card_visa.txt +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/tests/data/extraction_types/generic_country_alpha2.txt +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/tests/data/extraction_types/generic_cpe_uri.txt +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/tests/data/extraction_types/generic_cryptocurrency_btc_transaction.txt +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/tests/data/extraction_types/generic_cryptocurrency_btc_wallet.txt +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/tests/data/extraction_types/generic_cryptocurrency_eth_transaction.txt +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/tests/data/extraction_types/generic_cryptocurrency_eth_wallet.txt +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/tests/data/extraction_types/generic_cryptocurrency_xmr_transaction.txt +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/tests/data/extraction_types/generic_cryptocurrency_xmr_wallet.txt +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/tests/data/extraction_types/generic_cve_id.txt +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/tests/data/extraction_types/generic_directory_unix.txt +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/tests/data/extraction_types/generic_directory_unix_file.txt +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/tests/data/extraction_types/generic_directory_windows.txt +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/tests/data/extraction_types/generic_directory_windows_with_file.txt +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/tests/data/extraction_types/generic_disarm.txt +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/tests/data/extraction_types/generic_disarm_name.txt +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/tests/data/extraction_types/generic_domain_name_only.txt +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/tests/data/extraction_types/generic_domain_name_subdomain.txt +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/tests/data/extraction_types/generic_email_address.txt +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/tests/data/extraction_types/generic_file_hash_md5.txt +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/tests/data/extraction_types/generic_file_hash_sha_1.txt +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/tests/data/extraction_types/generic_file_hash_sha_224.txt +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/tests/data/extraction_types/generic_file_hash_sha_256.txt +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/tests/data/extraction_types/generic_file_hash_sha_384.txt +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/tests/data/extraction_types/generic_file_hash_sha_512.txt +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/tests/data/extraction_types/generic_file_name.txt +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/tests/data/extraction_types/generic_host_name.txt +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/tests/data/extraction_types/generic_host_name_file.txt +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/tests/data/extraction_types/generic_host_name_path.txt +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/tests/data/extraction_types/generic_host_name_subdomain.txt +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/tests/data/extraction_types/generic_host_name_url.txt +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/tests/data/extraction_types/generic_iban_number.txt +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/tests/data/extraction_types/generic_ipv4_address_cidr.txt +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/tests/data/extraction_types/generic_ipv4_address_only.txt +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/tests/data/extraction_types/generic_ipv4_address_port.txt +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/tests/data/extraction_types/generic_ipv6_address_cidr.txt +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/tests/data/extraction_types/generic_ipv6_address_only.txt +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/tests/data/extraction_types/generic_ipv6_address_port.txt +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/tests/data/extraction_types/generic_mac_address.txt +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/tests/data/extraction_types/generic_mitre_atlas.txt +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/tests/data/extraction_types/generic_mitre_atlas_name.txt +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/tests/data/extraction_types/generic_mitre_attack_enterprise.txt +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/tests/data/extraction_types/generic_mitre_attack_enterprise_aliases.txt +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/tests/data/extraction_types/generic_mitre_attack_enterprise_name.txt +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/tests/data/extraction_types/generic_mitre_attack_ics.txt +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/tests/data/extraction_types/generic_mitre_attack_ics_aliases.txt +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/tests/data/extraction_types/generic_mitre_attack_ics_name.txt +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/tests/data/extraction_types/generic_mitre_attack_mobile.txt +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/tests/data/extraction_types/generic_mitre_attack_mobile_aliases.txt +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/tests/data/extraction_types/generic_mitre_attack_mobile_name.txt +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/tests/data/extraction_types/generic_mitre_capec.txt +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/tests/data/extraction_types/generic_mitre_capec_name.txt +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/tests/data/extraction_types/generic_mitre_cwe.txt +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/tests/data/extraction_types/generic_mitre_cwe_name.txt +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/tests/data/extraction_types/generic_phone_number.txt +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/tests/data/extraction_types/generic_sector_aliases.txt +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/tests/data/extraction_types/generic_url.txt +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/tests/data/extraction_types/generic_url_file.txt +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/tests/data/extraction_types/generic_url_path.txt +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/tests/data/extraction_types/generic_user_agent.txt +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/tests/data/extraction_types/generic_windows_registry_key.txt +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/tests/data/extraction_types/lookup_attack_pattern.txt +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/tests/data/extraction_types/lookup_campaign.txt +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/tests/data/extraction_types/lookup_course_of_action.txt +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/tests/data/extraction_types/lookup_identity.txt +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/tests/data/extraction_types/lookup_infrastructure.txt +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/tests/data/extraction_types/lookup_intrusion_set.txt +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/tests/data/extraction_types/lookup_malware.txt +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/tests/data/extraction_types/lookup_threat_actor.txt +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/tests/data/extraction_types/lookup_tool.txt +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/tests/data/manually_generated_reports/ai_index_position.txt +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/tests/data/manually_generated_reports/attack_flow_demo.txt +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/tests/data/manually_generated_reports/attack_navigator_demo.txt +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/tests/data/manually_generated_reports/bad_vulmatch_lookups.txt +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/tests/data/manually_generated_reports/basic_relationship.txt +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/tests/data/manually_generated_reports/char_length_too_long.txt +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/tests/data/manually_generated_reports/descriptive_for_ai_relationships_1.txt +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/tests/data/manually_generated_reports/disarm_demo.txt +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/tests/data/manually_generated_reports/embedded_img_ignore.txt +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/tests/data/manually_generated_reports/embedded_link_ignore.txt +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/tests/data/manually_generated_reports/ip1.txt +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/tests/data/manually_generated_reports/ip2.txt +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/tests/data/manually_generated_reports/known_whitelist_match.txt +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/tests/data/manually_generated_reports/mitre_attack_enterprise_ai_demo.txt +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/tests/data/manually_generated_reports/mitre_attack_enterprise_lookup_demo.txt +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/tests/data/manually_generated_reports/mixed_extractions.txt +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/tests/data/manually_generated_reports/not_security_content.txt +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/tests/data/manually_generated_reports/test_ai_hash_error_with_stix2_lib.txt +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/tests/data/manually_generated_reports/test_aliases.txt +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/tests/data/manually_generated_reports/test_extraction_boundary.txt +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/tests/data/manually_generated_reports/test_extraction_escapes.txt +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/tests/data/real_intel_reports/APT28-Center-of-Storm-2017.txt +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/tests/data/real_intel_reports/Bitdefender-Labs-Report-X-creat6958-en-EN.txt +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/tests/data/real_intel_reports/FireEyeAPT39.txt +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/tests/data/real_intel_reports/France_CERT_APT31_Pakdoor_TLPWHITE.txt +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/tests/data/real_intel_reports/Group-IB_Ransomware_Uncovered_whitepaper_eng.txt +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/tests/data/real_intel_reports/JOINT_CSA_HUNTING_RU_INTEL_SNAKE_MALWARE_20230509.txt +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/tests/data/real_intel_reports/TA22-0126-QAKBOT-analysis-TLP-GREEN.txt +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/tests/data/real_intel_reports/dinners_card.txt +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/tests/data/real_intel_reports/mandiant-apt1.txt +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/tests/data/real_intel_reports/mykings_report_final.txt +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/tests/manual-tests/cases-ai-relationships.md +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/tests/manual-tests/cases-extraction-type-lookup.md +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/tests/manual-tests/cases-extraction-type-pattern.md +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/tests/manual-tests/cases-standard-tests.md +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/tests/scripts/generate_simple_extraction_test_cases_txt_files.py +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/tests/src/__init__.py +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/tests/src/test_attack_flow.py +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/tests/src/test_bundler.py +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/tests/src/test_extractors.py +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/tests/src/test_lookups.py +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/tests/src/test_main.py +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/tests/src/test_run_txt2stix.py +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/tests/src/test_utils.py +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/tests/src/utils.py +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/txt2stix/__init__.py +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/txt2stix/ai_extractor/__init__.py +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/txt2stix/ai_extractor/anthropic.py +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/txt2stix/ai_extractor/base.py +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/txt2stix/ai_extractor/deepseek.py +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/txt2stix/ai_extractor/gemini.py +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/txt2stix/ai_extractor/openai.py +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/txt2stix/ai_extractor/openrouter.py +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/txt2stix/ai_extractor/prompts.py +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/txt2stix/ai_extractor/utils.py +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/txt2stix/attack_flow.py +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/txt2stix/bundler.py +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/txt2stix/common.py +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/txt2stix/credential_checker.py +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/txt2stix/extractions.py +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/txt2stix/lookups.py +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/txt2stix/pattern/__init__.py +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/txt2stix/pattern/extractors/__init__.py +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/txt2stix/pattern/extractors/base_extractor.py +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/txt2stix/pattern/extractors/card/README.md +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/txt2stix/pattern/extractors/card/__init__.py +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/txt2stix/pattern/extractors/card/amex_card_extractor.py +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/txt2stix/pattern/extractors/card/diners_card_extractor.py +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/txt2stix/pattern/extractors/card/discover_card_extractor.py +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/txt2stix/pattern/extractors/card/jcb_card_extractor.py +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/txt2stix/pattern/extractors/card/master_card_extractor.py +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/txt2stix/pattern/extractors/card/union_card_extractor.py +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/txt2stix/pattern/extractors/card/visa_card_extractor.py +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/txt2stix/pattern/extractors/crypto/__init__.py +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/txt2stix/pattern/extractors/crypto/btc_extractor.py +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/txt2stix/pattern/extractors/directory/__init__.py +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/txt2stix/pattern/extractors/directory/unix_directory_extractor.py +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/txt2stix/pattern/extractors/directory/unix_file_path_extractor.py +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/txt2stix/pattern/extractors/directory/windows_directory_path_extractor.py +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/txt2stix/pattern/extractors/directory/windows_file_path_extractor.py +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/txt2stix/pattern/extractors/domain/__init__.py +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/txt2stix/pattern/extractors/domain/domain_extractor.py +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/txt2stix/pattern/extractors/domain/hostname_extractor.py +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/txt2stix/pattern/extractors/domain/sub_domain_extractor.py +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/txt2stix/pattern/extractors/hashes/__init__.py +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/txt2stix/pattern/extractors/hashes/md5_extractor.py +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/txt2stix/pattern/extractors/hashes/sha1_extractor.py +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/txt2stix/pattern/extractors/hashes/sha224_extractor.py +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/txt2stix/pattern/extractors/hashes/sha2_256_exactor.py +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/txt2stix/pattern/extractors/hashes/sha2_512_exactor.py +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/txt2stix/pattern/extractors/hashes/sha3_256_exactor.py +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/txt2stix/pattern/extractors/hashes/sha3_512_exactor.py +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/txt2stix/pattern/extractors/helper.py +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/txt2stix/pattern/extractors/ip/__init__.py +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/txt2stix/pattern/extractors/ip/ipv4_cidr_extractor.py +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/txt2stix/pattern/extractors/ip/ipv4_extractor.py +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/txt2stix/pattern/extractors/ip/ipv4_port_extractor.py +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/txt2stix/pattern/extractors/ip/ipv6_cidr_extractor.py +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/txt2stix/pattern/extractors/ip/ipv6_extractor.py +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/txt2stix/pattern/extractors/ip/ipv6_port_extractor.py +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/txt2stix/pattern/extractors/others/__init__.py +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/txt2stix/pattern/extractors/others/asn_extractor.py +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/txt2stix/pattern/extractors/others/cpe_extractor.py +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/txt2stix/pattern/extractors/others/cve_extractor.py +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/txt2stix/pattern/extractors/others/email_extractor.py +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/txt2stix/pattern/extractors/others/filename_extractor.py +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/txt2stix/pattern/extractors/others/iban_extractor.py +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/txt2stix/pattern/extractors/others/mac_address_extractor.py +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/txt2stix/pattern/extractors/others/phonenumber_extractor.py +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/txt2stix/pattern/extractors/others/user_agent_extractor.py +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/txt2stix/pattern/extractors/others/windows_registry_key_extractor.py +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/txt2stix/pattern/extractors/url/__init__.py +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/txt2stix/pattern/extractors/url/url_extractor.py +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/txt2stix/pattern/extractors/url/url_file_extractor.py +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/txt2stix/pattern/extractors/url/url_path_extractor.py +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/txt2stix/stix.py +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/txt2stix/txt2stix.py +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/txt2stix/utils.py +0 -0
- {txt2stix-1.1.15 → txt2stix-1.2.1}/txt2stix.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: txt2stix
|
|
3
|
-
Version: 1.1
|
|
3
|
+
Version: 1.2.1
|
|
4
4
|
Summary: txt2stix is a Python script that is designed to identify and extract IoCs and TTPs from text files, identify the relationships between them, convert them to STIX 2.1 objects, and output as a STIX 2.1 bundle.
|
|
5
5
|
Project-URL: Homepage, https://github.com/muchdogesec/txt2stix
|
|
6
6
|
Project-URL: Issues, https://github.com/muchdogesec/txt2stix/issues
|
|
@@ -1251,10 +1251,10 @@ Objects created:
|
|
|
1251
1251
|
{
|
|
1252
1252
|
"type": "attack-pattern",
|
|
1253
1253
|
"spec_version": "2.1",
|
|
1254
|
-
"id": "campaign--<
|
|
1254
|
+
"id": "campaign--<UUIDV5>",
|
|
1255
1255
|
"created_by_ref": "identity--<DEFAULT OR CUSTOM IDENTITY OBJECT ID>",
|
|
1256
|
-
"created": "
|
|
1257
|
-
"modified": "
|
|
1256
|
+
"created": "2020-01-01T00:00:00.000Z",
|
|
1257
|
+
"modified": "2020-01-01T00:00:00.000Z",
|
|
1258
1258
|
"name": "<EXTRACTED VALUE>",
|
|
1259
1259
|
"object_marking_refs": [
|
|
1260
1260
|
"marking-definition--<TLP LEVEL SET>",
|
|
@@ -1273,6 +1273,8 @@ Objects created:
|
|
|
1273
1273
|
}
|
|
1274
1274
|
```
|
|
1275
1275
|
|
|
1276
|
+
UUIDv5 is generated using namespace `f92e15d9-6afc-5ae2-bb3e-85a1fd83a3b5` and `txt2stix+<extracted_value>`
|
|
1277
|
+
|
|
1276
1278
|
### stix-mapping: `campaign`
|
|
1277
1279
|
|
|
1278
1280
|
Objects created:
|
|
@@ -1283,10 +1285,10 @@ Objects created:
|
|
|
1283
1285
|
{
|
|
1284
1286
|
"type": "campaign",
|
|
1285
1287
|
"spec_version": "2.1",
|
|
1286
|
-
"id": "campaign--<
|
|
1288
|
+
"id": "campaign--<UUIDV5>",
|
|
1287
1289
|
"created_by_ref": "identity--<DEFAULT OR CUSTOM IDENTITY OBJECT ID>",
|
|
1288
|
-
"created": "
|
|
1289
|
-
"modified": "
|
|
1290
|
+
"created": "2020-01-01T00:00:00.000Z",
|
|
1291
|
+
"modified": "2020-01-01T00:00:00.000Z",
|
|
1290
1292
|
"name": "<EXTRACTED VALUE>",
|
|
1291
1293
|
"object_marking_refs": [
|
|
1292
1294
|
"marking-definition--<TLP LEVEL SET>",
|
|
@@ -1305,6 +1307,8 @@ Objects created:
|
|
|
1305
1307
|
}
|
|
1306
1308
|
```
|
|
1307
1309
|
|
|
1310
|
+
UUIDv5 is generated using namespace `f92e15d9-6afc-5ae2-bb3e-85a1fd83a3b5` and `txt2stix+<extracted_value>`
|
|
1311
|
+
|
|
1308
1312
|
### stix-mapping: `course-of-action`
|
|
1309
1313
|
|
|
1310
1314
|
Objects created:
|
|
@@ -1315,10 +1319,10 @@ Objects created:
|
|
|
1315
1319
|
{
|
|
1316
1320
|
"type": "course-of-action",
|
|
1317
1321
|
"spec_version": "2.1",
|
|
1318
|
-
"id": "course-of-action--<
|
|
1322
|
+
"id": "course-of-action--<UUIDV5>",
|
|
1319
1323
|
"created_by_ref": "identity--<DEFAULT OR CUSTOM IDENTITY OBJECT ID>",
|
|
1320
|
-
"created": "
|
|
1321
|
-
"modified": "
|
|
1324
|
+
"created": "2020-01-01T00:00:00.000Z",
|
|
1325
|
+
"modified": "2020-01-01T00:00:00.000Z",
|
|
1322
1326
|
"name": "<EXTRACTED VALUE>",
|
|
1323
1327
|
"object_marking_refs": [
|
|
1324
1328
|
"marking-definition--<TLP LEVEL SET>",
|
|
@@ -1337,6 +1341,8 @@ Objects created:
|
|
|
1337
1341
|
}
|
|
1338
1342
|
```
|
|
1339
1343
|
|
|
1344
|
+
UUIDv5 is generated using namespace `f92e15d9-6afc-5ae2-bb3e-85a1fd83a3b5` and `txt2stix+<extracted_value>`
|
|
1345
|
+
|
|
1340
1346
|
### stix-mapping: `infrastructure`
|
|
1341
1347
|
|
|
1342
1348
|
Objects created:
|
|
@@ -1347,10 +1353,10 @@ Objects created:
|
|
|
1347
1353
|
{
|
|
1348
1354
|
"type":"infrastructure",
|
|
1349
1355
|
"spec_version": "2.1",
|
|
1350
|
-
"id":"infrastructure--<
|
|
1356
|
+
"id":"infrastructure--<UUIDV5>",
|
|
1351
1357
|
"created_by_ref": "identity--<DEFAULT OR CUSTOM IDENTITY OBJECT ID>",
|
|
1352
|
-
"created": "
|
|
1353
|
-
"modified": "
|
|
1358
|
+
"created": "2020-01-01T00:00:00.000Z",
|
|
1359
|
+
"modified": "2020-01-01T00:00:00.000Z",
|
|
1354
1360
|
"name": "<EXTRACTED VALUE>",
|
|
1355
1361
|
"infrastructure_types": ["unknown"],
|
|
1356
1362
|
"object_marking_refs": [
|
|
@@ -1370,6 +1376,8 @@ Objects created:
|
|
|
1370
1376
|
}
|
|
1371
1377
|
```
|
|
1372
1378
|
|
|
1379
|
+
UUIDv5 is generated using namespace `f92e15d9-6afc-5ae2-bb3e-85a1fd83a3b5` and `txt2stix+<extracted_value>`
|
|
1380
|
+
|
|
1373
1381
|
### stix-mapping: `intrusion-set`
|
|
1374
1382
|
|
|
1375
1383
|
Objects created:
|
|
@@ -1380,10 +1388,10 @@ Objects created:
|
|
|
1380
1388
|
{
|
|
1381
1389
|
"type": "intrusion-set",
|
|
1382
1390
|
"spec_version": "2.1",
|
|
1383
|
-
"id": "intrusion-set--<
|
|
1391
|
+
"id": "intrusion-set--<UUIDV5>",
|
|
1384
1392
|
"created_by_ref": "identity--<DEFAULT OR CUSTOM IDENTITY OBJECT ID>",
|
|
1385
|
-
"created": "
|
|
1386
|
-
"modified": "
|
|
1393
|
+
"created": "2020-01-01T00:00:00.000Z",
|
|
1394
|
+
"modified": "2020-01-01T00:00:00.000Z",
|
|
1387
1395
|
"name": "<EXTRACTED VALUE>",
|
|
1388
1396
|
"object_marking_refs": [
|
|
1389
1397
|
"marking-definition--<TLP LEVEL SET>",
|
|
@@ -1402,6 +1410,8 @@ Objects created:
|
|
|
1402
1410
|
}
|
|
1403
1411
|
```
|
|
1404
1412
|
|
|
1413
|
+
UUIDv5 is generated using namespace `f92e15d9-6afc-5ae2-bb3e-85a1fd83a3b5` and `txt2stix+<extracted_value>`
|
|
1414
|
+
|
|
1405
1415
|
### stix-mapping: `malware`
|
|
1406
1416
|
|
|
1407
1417
|
Objects created:
|
|
@@ -1412,10 +1422,10 @@ Objects created:
|
|
|
1412
1422
|
{
|
|
1413
1423
|
"type": "malware",
|
|
1414
1424
|
"spec_version": "2.1",
|
|
1415
|
-
"id": "malware--<
|
|
1425
|
+
"id": "malware--<UUIDV5>",
|
|
1416
1426
|
"created_by_ref": "identity--<DEFAULT OR CUSTOM IDENTITY OBJECT ID>",
|
|
1417
|
-
"created": "
|
|
1418
|
-
"modified": "
|
|
1427
|
+
"created": "2020-01-01T00:00:00.000Z",
|
|
1428
|
+
"modified": "2020-01-01T00:00:00.000Z",
|
|
1419
1429
|
"name": "<EXTRACTED VALUE>",
|
|
1420
1430
|
"malware_types": ["unknown"],
|
|
1421
1431
|
"is_family": true,
|
|
@@ -1436,6 +1446,8 @@ Objects created:
|
|
|
1436
1446
|
}
|
|
1437
1447
|
```
|
|
1438
1448
|
|
|
1449
|
+
UUIDv5 is generated using namespace `f92e15d9-6afc-5ae2-bb3e-85a1fd83a3b5` and `txt2stix+<extracted_value>`
|
|
1450
|
+
|
|
1439
1451
|
### stix-mapping: `threat-actor`
|
|
1440
1452
|
|
|
1441
1453
|
Objects created:
|
|
@@ -1446,10 +1458,10 @@ Objects created:
|
|
|
1446
1458
|
{
|
|
1447
1459
|
"type": "threat-actor",
|
|
1448
1460
|
"spec_version": "2.1",
|
|
1449
|
-
"id": "threat-actor--<
|
|
1461
|
+
"id": "threat-actor--<UUIDV5>",
|
|
1450
1462
|
"created_by_ref": "identity--<DEFAULT OR CUSTOM IDENTITY OBJECT ID>",
|
|
1451
|
-
"created": "
|
|
1452
|
-
"modified": "
|
|
1463
|
+
"created": "2020-01-01T00:00:00.000Z",
|
|
1464
|
+
"modified": "2020-01-01T00:00:00.000Z",
|
|
1453
1465
|
"name": "<EXTRACTED VALUE>",
|
|
1454
1466
|
"threat_actor_types": "unknown",
|
|
1455
1467
|
"object_marking_refs": [
|
|
@@ -1469,6 +1481,8 @@ Objects created:
|
|
|
1469
1481
|
}
|
|
1470
1482
|
```
|
|
1471
1483
|
|
|
1484
|
+
UUIDv5 is generated using namespace `f92e15d9-6afc-5ae2-bb3e-85a1fd83a3b5` and `txt2stix+<extracted_value>`
|
|
1485
|
+
|
|
1472
1486
|
### stix-mapping: `tool`
|
|
1473
1487
|
|
|
1474
1488
|
Objects created:
|
|
@@ -1479,10 +1493,10 @@ Objects created:
|
|
|
1479
1493
|
{
|
|
1480
1494
|
"type": "tool",
|
|
1481
1495
|
"spec_version": "2.1",
|
|
1482
|
-
"id": "tool--<
|
|
1496
|
+
"id": "tool--<UUIDV5>",
|
|
1483
1497
|
"created_by_ref": "identity--<DEFAULT OR CUSTOM IDENTITY OBJECT ID>",
|
|
1484
|
-
"created": "
|
|
1485
|
-
"modified": "
|
|
1498
|
+
"created": "2020-01-01T00:00:00.000Z",
|
|
1499
|
+
"modified": "2020-01-01T00:00:00.000Z",
|
|
1486
1500
|
"name": "<EXTRACTED VALUE>",
|
|
1487
1501
|
"tool_types": "unknown",
|
|
1488
1502
|
"object_marking_refs": [
|
|
@@ -1502,6 +1516,8 @@ Objects created:
|
|
|
1502
1516
|
}
|
|
1503
1517
|
```
|
|
1504
1518
|
|
|
1519
|
+
UUIDv5 is generated using namespace `f92e15d9-6afc-5ae2-bb3e-85a1fd83a3b5` and `txt2stix+<extracted_value>`
|
|
1520
|
+
|
|
1505
1521
|
### stix-mapping: `identity`
|
|
1506
1522
|
|
|
1507
1523
|
Objects created:
|
|
@@ -1512,10 +1528,10 @@ Objects created:
|
|
|
1512
1528
|
{
|
|
1513
1529
|
"type": "identity",
|
|
1514
1530
|
"spec_version": "2.1",
|
|
1515
|
-
"id": "identity--<
|
|
1531
|
+
"id": "identity--<UUIDV5>",
|
|
1516
1532
|
"created_by_ref": "identity--<DEFAULT OR CUSTOM IDENTITY OBJECT ID>",
|
|
1517
|
-
"created": "
|
|
1518
|
-
"modified": "
|
|
1533
|
+
"created": "2020-01-01T00:00:00.000Z",
|
|
1534
|
+
"modified": "2020-01-01T00:00:00.000Z",
|
|
1519
1535
|
"name": "<EXTRACTED VALUE>",
|
|
1520
1536
|
"identity_class": "unspecified",
|
|
1521
1537
|
"object_marking_refs": [
|
|
@@ -1535,6 +1551,8 @@ Objects created:
|
|
|
1535
1551
|
}
|
|
1536
1552
|
```
|
|
1537
1553
|
|
|
1554
|
+
UUIDv5 is generated using namespace `f92e15d9-6afc-5ae2-bb3e-85a1fd83a3b5` and `txt2stix+<extracted_value>`
|
|
1555
|
+
|
|
1538
1556
|
## STIX Mapping (remotely created objects)
|
|
1539
1557
|
|
|
1540
1558
|
Some objects created for extractions do not need to be generated by txt2stix, they can be looked up from an external databases.
|
|
@@ -778,7 +778,23 @@ ai_country:
|
|
|
778
778
|
type: ai
|
|
779
779
|
dogesec_web: true
|
|
780
780
|
name: 'Country'
|
|
781
|
-
description: 'Will extract countries, turn into two digit country codes, and import location object from CTI Butler.'
|
|
781
|
+
description: 'Will extract countries, turn into two digit country codes, and import location (and all related regions and subregions) object from CTI Butler.'
|
|
782
|
+
notes: 'lookup_country_alpha2 legacy extraction also exists if you cannot use AI'
|
|
783
|
+
created: 2020-01-01
|
|
784
|
+
modified: 2020-01-01
|
|
785
|
+
created_by: dogesec
|
|
786
|
+
version: 1.0.0
|
|
787
|
+
prompt_base: 'Extract all countries described in the text, including countries printed as IS0-3166 Alpha2 and Alpha3 codes.'
|
|
788
|
+
prompt_helper: 'If you are unsure, you can read more about the standard here: https://www.iso.org/iso-3166-country-codes.html'
|
|
789
|
+
prompt_conversion: 'Convert all country extractions to their corresponding IS0-3166 Alpha2 codes.'
|
|
790
|
+
test_cases: ai_country
|
|
791
|
+
stix_mapping: ctibutler-location-with-regions
|
|
792
|
+
|
|
793
|
+
ai_country_only:
|
|
794
|
+
type: ai
|
|
795
|
+
dogesec_web: true
|
|
796
|
+
name: 'Country only'
|
|
797
|
+
description: 'Will extract countries, turn into two digit country codes, and import location (without regions and subregions) object from CTI Butler.'
|
|
782
798
|
notes: 'lookup_country_alpha2 legacy extraction also exists if you cannot use AI'
|
|
783
799
|
created: 2020-01-01
|
|
784
800
|
modified: 2020-01-01
|
|
@@ -5,8 +5,23 @@
|
|
|
5
5
|
lookup_country_alpha2:
|
|
6
6
|
type: lookup
|
|
7
7
|
dogesec_web: false
|
|
8
|
-
name: 'Country Alpha2'
|
|
9
|
-
description: 'Extracts countries using ISO 3166-1 alpha2 codes'
|
|
8
|
+
name: 'Country Alpha2 (with regions)'
|
|
9
|
+
description: 'Extracts countries using ISO 3166-1 alpha2 codes (will create relationships to regions and subregions).'
|
|
10
|
+
notes: 'RECOMMENDED FOR BETTER ACCURACY: Use ai_country. This extractor is very dumb e.g the words `is` and `in` will result in extractions for Iceland and India'
|
|
11
|
+
file: 'lookups/country_iso3166_alpha2.txt'
|
|
12
|
+
created: 2020-01-01
|
|
13
|
+
modified: 2020-01-01
|
|
14
|
+
created_by: dogesec
|
|
15
|
+
version: 1.0.0
|
|
16
|
+
test_cases: generic_country_alpha2
|
|
17
|
+
stix_mapping: ctibutler-location-with-regions
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
lookup_country_alpha2_country_only:
|
|
21
|
+
type: lookup
|
|
22
|
+
dogesec_web: false
|
|
23
|
+
name: 'Country Alpha2 (without regions)'
|
|
24
|
+
description: 'Extracts countries using ISO 3166-1 alpha2 codes (will not create relationships).'
|
|
10
25
|
notes: 'RECOMMENDED FOR BETTER ACCURACY: Use ai_country. This extractor is very dumb e.g the words `is` and `in` will result in extractions for Iceland and India'
|
|
11
26
|
file: 'lookups/country_iso3166_alpha2.txt'
|
|
12
27
|
created: 2020-01-01
|
|
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "txt2stix"
|
|
7
|
-
version = "1.1
|
|
7
|
+
version = "1.2.1"
|
|
8
8
|
authors = [{ name = "dogesec" }]
|
|
9
9
|
maintainers = [{ name = "dogesec" }]
|
|
10
10
|
description = "txt2stix is a Python script that is designed to identify and extract IoCs and TTPs from text files, identify the relationships between them, convert them to STIX 2.1 objects, and output as a STIX 2.1 bundle."
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
#
|
|
7
7
|
aiohappyeyeballs==2.6.1
|
|
8
8
|
# via aiohttp
|
|
9
|
-
aiohttp==3.
|
|
9
|
+
aiohttp==3.13.3
|
|
10
10
|
# via llama-index-core
|
|
11
11
|
aiosignal==1.4.0
|
|
12
12
|
# via aiohttp
|
|
@@ -121,7 +121,7 @@ llama-index-workflows==1.3.0
|
|
|
121
121
|
# via llama-index-core
|
|
122
122
|
markupsafe==3.0.2
|
|
123
123
|
# via jinja2
|
|
124
|
-
marshmallow==3.26.
|
|
124
|
+
marshmallow==3.26.2
|
|
125
125
|
# via dataclasses-json
|
|
126
126
|
mistune==3.1.3
|
|
127
127
|
# via txt2stix (pyproject.toml)
|
|
@@ -274,7 +274,7 @@ tzdata==2025.2
|
|
|
274
274
|
# via arrow
|
|
275
275
|
uri-template==1.3.0
|
|
276
276
|
# via jsonschema
|
|
277
|
-
urllib3==2.6.
|
|
277
|
+
urllib3==2.6.3
|
|
278
278
|
# via requests
|
|
279
279
|
validators==0.35.0
|
|
280
280
|
# via txt2stix (pyproject.toml)
|
|
@@ -738,7 +738,7 @@ python3 txt2stix.py \
|
|
|
738
738
|
python3 txt2stix.py \
|
|
739
739
|
--relationship_mode standard \
|
|
740
740
|
--input_file tests/data/extraction_types/ai_country.txt \
|
|
741
|
-
--name '
|
|
741
|
+
--name 'ai_country' \
|
|
742
742
|
--tlp_level clear \
|
|
743
743
|
--confidence 100 \
|
|
744
744
|
--use_extractions ai_country \
|
|
@@ -746,6 +746,22 @@ python3 txt2stix.py \
|
|
|
746
746
|
--report_id 256f89fe-ad21-4604-9d6d-b8b5335f4657
|
|
747
747
|
```
|
|
748
748
|
|
|
749
|
+
Check regions are imported.
|
|
750
|
+
|
|
751
|
+
#### ai_country_only
|
|
752
|
+
|
|
753
|
+
```shell
|
|
754
|
+
python3 txt2stix.py \
|
|
755
|
+
--relationship_mode standard \
|
|
756
|
+
--input_file tests/data/extraction_types/ai_country.txt \
|
|
757
|
+
--name 'ai_country_only' \
|
|
758
|
+
--tlp_level clear \
|
|
759
|
+
--confidence 100 \
|
|
760
|
+
--use_extractions ai_country_only \
|
|
761
|
+
--ai_settings_extractions openai:gpt-5 \
|
|
762
|
+
--report_id 7adbbed0-0d22-43e0-9894-1adb6a708461
|
|
763
|
+
```
|
|
764
|
+
|
|
749
765
|
#### ai_mitre_attack_enterprise
|
|
750
766
|
|
|
751
767
|
```shell
|
|
@@ -396,6 +396,27 @@ all_extractors = get_all_extractors()
|
|
|
396
396
|
{"identity--2e0aadad-9b58-5c8c-bef6-4c258b35f319"},
|
|
397
397
|
id="identity-ii",
|
|
398
398
|
),
|
|
399
|
+
|
|
400
|
+
## generic sdo extracts (course-of-action, threat-actor, tool)
|
|
401
|
+
pytest.param(
|
|
402
|
+
"EvilTool v2.0",
|
|
403
|
+
"lookup_tool",
|
|
404
|
+
{
|
|
405
|
+
"tool--1b13ef4f-7bd5-563a-9ca1-00ebdb7071a8",
|
|
406
|
+
},
|
|
407
|
+
{"tool--1b13ef4f-7bd5-563a-9ca1-00ebdb7071a8"},
|
|
408
|
+
id="generic tool",
|
|
409
|
+
),
|
|
410
|
+
|
|
411
|
+
pytest.param(
|
|
412
|
+
"EvilActor",
|
|
413
|
+
"lookup_threat_actor",
|
|
414
|
+
{
|
|
415
|
+
"threat-actor--4c4be570-b34e-556e-a8e0-5cb290668770",
|
|
416
|
+
},
|
|
417
|
+
{"threat-actor--4c4be570-b34e-556e-a8e0-5cb290668770"},
|
|
418
|
+
id="generic threat-actor",
|
|
419
|
+
),
|
|
399
420
|
],
|
|
400
421
|
)
|
|
401
422
|
def test_build_observables(value, extractor_name, expected_objects, expected_rels):
|
|
@@ -89,6 +89,19 @@ def f():
|
|
|
89
89
|
"NG",
|
|
90
90
|
("location--6dbe266a-c149-5ba3-8b39-74f1b5063312",),
|
|
91
91
|
),
|
|
92
|
+
(
|
|
93
|
+
"ctibutler-location-with-regions",
|
|
94
|
+
"NG",
|
|
95
|
+
[
|
|
96
|
+
"location--6dbe266a-c149-5ba3-8b39-74f1b5063312",
|
|
97
|
+
"location--097ca10f-e203-53c0-8f9d-2634ac58bc1b",
|
|
98
|
+
"location--48451447-0bc6-517a-aff5-a779d3a24a21",
|
|
99
|
+
"location--ccb963ba-9370-5eeb-80e3-c8d8738275ed",
|
|
100
|
+
"relationship--28b54976-c9a6-586c-9378-18556f917d3c",
|
|
101
|
+
"relationship--3cb6677e-c141-56c0-ba3e-6f9d03fa8487",
|
|
102
|
+
"relationship--769ac179-c26b-5ca0-abde-d61667962b82",
|
|
103
|
+
],
|
|
104
|
+
),
|
|
92
105
|
(
|
|
93
106
|
"ctibutler-mitre-atlas-id",
|
|
94
107
|
"AML.T0050",
|
|
@@ -134,5 +147,5 @@ def f():
|
|
|
134
147
|
def test_retrieve_objects(stix_mapping, kb_id, expected_ids, f):
|
|
135
148
|
objects = retrieve_stix_objects(stix_mapping, kb_id)
|
|
136
149
|
assert objects != None
|
|
137
|
-
object_ids = {
|
|
150
|
+
object_ids = {x['id'] for x in objects}
|
|
138
151
|
assert object_ids == set(expected_ids)
|
|
@@ -106,7 +106,10 @@ def _build_observables(
|
|
|
106
106
|
):
|
|
107
107
|
retrieved_objects = retrieve_stix_objects(stix_mapping, extracted_value)
|
|
108
108
|
if retrieved_objects:
|
|
109
|
-
|
|
109
|
+
relatable = [sdo["id"] for sdo in retrieved_objects]
|
|
110
|
+
if 'location' in stix_mapping:
|
|
111
|
+
relatable = [retrieved_objects[0]['id']]
|
|
112
|
+
return retrieved_objects, relatable
|
|
110
113
|
if retrieved_objects == []:
|
|
111
114
|
logger.warning(
|
|
112
115
|
f"could not find `{stix_mapping}` with id=`{extracted_value}` in remote"
|
|
@@ -623,7 +626,7 @@ def _build_observables(
|
|
|
623
626
|
extracted_value = extracted_value.replace("-", "").replace(" ", "")
|
|
624
627
|
|
|
625
628
|
country_code, bank_code = get_iban_details(extracted_value)
|
|
626
|
-
location = retrieve_stix_objects("location", country_code)[0]
|
|
629
|
+
location = retrieve_stix_objects("ctibutler-location", country_code)[0]
|
|
627
630
|
stix_objects.append(location)
|
|
628
631
|
|
|
629
632
|
bank_acc = dict_to_stix2(
|
|
@@ -683,17 +686,18 @@ def _build_observables(
|
|
|
683
686
|
f"txt2stix+{extracted_value}",
|
|
684
687
|
)
|
|
685
688
|
)
|
|
689
|
+
_date = datetime(2020, 1, 1, tzinfo=UTC)
|
|
686
690
|
|
|
687
691
|
if stix_mapping == "attack-pattern":
|
|
688
692
|
stix_objects = [
|
|
689
693
|
dict_to_stix2(
|
|
690
694
|
{
|
|
691
695
|
"type": "attack-pattern",
|
|
692
|
-
|
|
696
|
+
"id": stix_mapping + "--" + _id_part,
|
|
693
697
|
"spec_version": "2.1",
|
|
694
698
|
"created_by_ref": indicator["created_by_ref"],
|
|
695
|
-
"created":
|
|
696
|
-
"modified":
|
|
699
|
+
"created": _date,
|
|
700
|
+
"modified": _date,
|
|
697
701
|
"name": extracted_value,
|
|
698
702
|
"external_references": indicator["external_references"],
|
|
699
703
|
}
|
|
@@ -705,11 +709,11 @@ def _build_observables(
|
|
|
705
709
|
dict_to_stix2(
|
|
706
710
|
{
|
|
707
711
|
"type": "campaign",
|
|
708
|
-
|
|
712
|
+
"id": stix_mapping + "--" + _id_part,
|
|
709
713
|
"spec_version": "2.1",
|
|
710
714
|
"created_by_ref": indicator["created_by_ref"],
|
|
711
|
-
"created":
|
|
712
|
-
"modified":
|
|
715
|
+
"created": _date,
|
|
716
|
+
"modified": _date,
|
|
713
717
|
"name": extracted_value,
|
|
714
718
|
"object_marking_refs": indicator["object_marking_refs"],
|
|
715
719
|
"external_references": indicator["external_references"],
|
|
@@ -722,11 +726,11 @@ def _build_observables(
|
|
|
722
726
|
dict_to_stix2(
|
|
723
727
|
{
|
|
724
728
|
"type": "course-of-action",
|
|
725
|
-
|
|
729
|
+
"id": stix_mapping + "--" + _id_part,
|
|
726
730
|
"spec_version": "2.1",
|
|
727
731
|
"created_by_ref": indicator["created_by_ref"],
|
|
728
|
-
"created":
|
|
729
|
-
"modified":
|
|
732
|
+
"created": _date,
|
|
733
|
+
"modified": _date,
|
|
730
734
|
"name": extracted_value,
|
|
731
735
|
"object_marking_refs": indicator["object_marking_refs"],
|
|
732
736
|
"external_references": indicator["external_references"],
|
|
@@ -739,11 +743,11 @@ def _build_observables(
|
|
|
739
743
|
dict_to_stix2(
|
|
740
744
|
{
|
|
741
745
|
"type": "infrastructure",
|
|
742
|
-
|
|
746
|
+
"id": stix_mapping + "--" + _id_part,
|
|
743
747
|
"spec_version": "2.1",
|
|
744
748
|
"created_by_ref": indicator["created_by_ref"],
|
|
745
|
-
"created":
|
|
746
|
-
"modified":
|
|
749
|
+
"created": _date,
|
|
750
|
+
"modified": _date,
|
|
747
751
|
"name": extracted_value,
|
|
748
752
|
"infrastructure_types": ["unknown"],
|
|
749
753
|
"object_marking_refs": indicator["object_marking_refs"],
|
|
@@ -757,11 +761,11 @@ def _build_observables(
|
|
|
757
761
|
dict_to_stix2(
|
|
758
762
|
{
|
|
759
763
|
"type": "intrusion-set",
|
|
760
|
-
|
|
764
|
+
"id": stix_mapping + "--" + _id_part,
|
|
761
765
|
"spec_version": "2.1",
|
|
762
766
|
"created_by_ref": indicator["created_by_ref"],
|
|
763
|
-
"created":
|
|
764
|
-
"modified":
|
|
767
|
+
"created": _date,
|
|
768
|
+
"modified": _date,
|
|
765
769
|
"name": extracted_value,
|
|
766
770
|
"object_marking_refs": indicator["object_marking_refs"],
|
|
767
771
|
"external_references": indicator["external_references"],
|
|
@@ -774,11 +778,11 @@ def _build_observables(
|
|
|
774
778
|
dict_to_stix2(
|
|
775
779
|
{
|
|
776
780
|
"type": "malware",
|
|
777
|
-
|
|
781
|
+
"id": stix_mapping + "--" + _id_part,
|
|
778
782
|
"spec_version": "2.1",
|
|
779
783
|
"created_by_ref": indicator["created_by_ref"],
|
|
780
|
-
"created":
|
|
781
|
-
"modified":
|
|
784
|
+
"created": _date,
|
|
785
|
+
"modified": _date,
|
|
782
786
|
"name": extracted_value,
|
|
783
787
|
"malware_types": ["unknown"],
|
|
784
788
|
"is_family": True,
|
|
@@ -793,11 +797,11 @@ def _build_observables(
|
|
|
793
797
|
dict_to_stix2(
|
|
794
798
|
{
|
|
795
799
|
"type": "threat-actor",
|
|
796
|
-
|
|
800
|
+
"id": stix_mapping + "--" + _id_part,
|
|
797
801
|
"spec_version": "2.1",
|
|
798
802
|
"created_by_ref": indicator["created_by_ref"],
|
|
799
|
-
"created":
|
|
800
|
-
"modified":
|
|
803
|
+
"created": _date,
|
|
804
|
+
"modified": _date,
|
|
801
805
|
"name": extracted_value,
|
|
802
806
|
"threat_actor_types": "unknown",
|
|
803
807
|
"object_marking_refs": indicator["object_marking_refs"],
|
|
@@ -811,11 +815,11 @@ def _build_observables(
|
|
|
811
815
|
dict_to_stix2(
|
|
812
816
|
{
|
|
813
817
|
"type": "tool",
|
|
814
|
-
|
|
818
|
+
"id": stix_mapping + "--" + _id_part,
|
|
815
819
|
"spec_version": "2.1",
|
|
816
820
|
"created_by_ref": indicator["created_by_ref"],
|
|
817
|
-
"created":
|
|
818
|
-
"modified":
|
|
821
|
+
"created": _date,
|
|
822
|
+
"modified": _date,
|
|
819
823
|
"name": extracted_value,
|
|
820
824
|
"tool_types": "unknown",
|
|
821
825
|
"object_marking_refs": indicator["object_marking_refs"],
|
|
@@ -831,8 +835,8 @@ def _build_observables(
|
|
|
831
835
|
"type": "identity",
|
|
832
836
|
"spec_version": "2.1",
|
|
833
837
|
"created_by_ref": indicator["created_by_ref"],
|
|
834
|
-
"created":
|
|
835
|
-
"modified":
|
|
838
|
+
"created": _date,
|
|
839
|
+
"modified": _date,
|
|
836
840
|
"id": "identity--" + _id_part,
|
|
837
841
|
"name": extracted_value,
|
|
838
842
|
"identity_class": "unspecified",
|
|
@@ -69,6 +69,10 @@ class STIXObjectRetriever:
|
|
|
69
69
|
return self._retrieve_objects(
|
|
70
70
|
urljoin(self.api_root, f"v1/location/objects/?alpha2_code={id}")
|
|
71
71
|
)
|
|
72
|
+
|
|
73
|
+
def get_location_bundle(self, id):
|
|
74
|
+
endpoint = urljoin(self.api_root, f"v1/location/objects/{id}/bundle/?types=location,relationship")
|
|
75
|
+
return self._retrieve_objects(endpoint, key="objects")
|
|
72
76
|
|
|
73
77
|
def get_objects_by_name(self, name, type):
|
|
74
78
|
return self._retrieve_objects(
|
|
@@ -122,6 +126,10 @@ def _retrieve_stix_objects(host, knowledge_base, filter_value):
|
|
|
122
126
|
return retreiver.retrieve_object_by_id(filter_value, "cpe")
|
|
123
127
|
case "location":
|
|
124
128
|
return retreiver.get_location_objects(filter_value)
|
|
129
|
+
case "location-with-regions":
|
|
130
|
+
locations = retreiver.get_location_bundle(filter_value)
|
|
131
|
+
locations.sort(key=lambda x: int(x.get('country') == filter_value), reverse=True)
|
|
132
|
+
return locations
|
|
125
133
|
|
|
126
134
|
### ATT&CK by Name
|
|
127
135
|
case "mitre-attack-enterprise-name":
|
|
@@ -162,8 +170,6 @@ def _retrieve_stix_objects(host, knowledge_base, filter_value):
|
|
|
162
170
|
|
|
163
171
|
def retrieve_stix_objects(stix_mapping: str, filter_value, host=None):
|
|
164
172
|
knowledge_base = stix_mapping
|
|
165
|
-
if stix_mapping in ["location"]:
|
|
166
|
-
host = "ctibutler"
|
|
167
173
|
if not host:
|
|
168
174
|
host, _, knowledge_base = stix_mapping.partition("-")
|
|
169
175
|
try:
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|