Alexandre Dulaunoy 2902024f5f | ||
---|---|---|
docs | ||
objects | ||
relationships | ||
tools | ||
.travis.yml | ||
LICENSE-software-only.md | ||
LICENSE.md | ||
README.md | ||
jq_all_the_things.sh | ||
schema_objects.json | ||
schema_relationships.json | ||
unique_uuid.py | ||
validate_all.sh |
README.md
misp-objects
MISP objects used in MISP (starting from 2.4.80) system and can be used by other information sharing tool. MISP objects are in addition to MISP attributes to allow advanced combinations of attributes. The creation of these objects and their associated attributes are based on real cyber security use-cases and existing practices in information sharing.
Feel free to propose your own MISP objects to be included in MISP. The system is similar to the misp-taxonomies where anyone can contribute their own objects to be included in MISP without modifying software.
Format of MISP objects
{
"name": "domain|ip",
"meta-category": "network",
"description": "A domain and IP address seen as a tuple in a specific time frame.",
"version": 1,
"uuid": "f47559d7-6c16-40e8-a6b0-eda4a008376f",
"attributes" :
{
"ip": {
"misp-attribute": "ip-dst",
"ui-priority": 1,
"categories": ["Network activity","External analysis"]
},
"domain": {
"misp-attribute": "domain",
"ui-priority": 1,
"categories": ["Network activity","External analysis"]
},
"first-seen": {
"misp-attribute": "datetime",
"disable_correlation": true,
"ui-priority": 0
},
"last-seen": {
"misp-attribute": "datetime",
"disable_correlation": true,
"ui-priority": 0
}
},
"required": ["ip","domain"]
}
A MISP object is described in a simple JSON file containing the following element.
- name is the name of the your object.
- meta-category is the category where the object falls into. (file, network, financial, misc, internal)
- description is a summary of the object description.
- version is the version number as a decimal value.
- required is an array containing the minimal required attributes to describe the object.
- requiredOneOf is an array containing the attributes where at least one need to be present to describe the object.
- attributes contains another JSON object listing all the attributes composing the object.
Each attribute must contain a reference misp-attribute to reference an existing attribute definition in MISP (MISP attributes types are case-sensitive). An array categories shall be used to described in which categories the attribute is. The ui-priority describes the usage frequency of an attribute. This helps to only display the most frequently used attributes and allowing advanced users to show all the attributes depending of their configuration. An optional multiple field shall be set to true if multiple elements of the same key can be used in the object. An optional values_list where this list of value can be selected as a value for an attribute. An optional sane_default where this list of value recommend potential a sane default for an attribute. An optional disable_correlation boolean field to suggest the disabling of correlation for a specific attribute. An optional to_ids boolean field to disable the IDS flag of an attribute.
Existing MISP objects
- objects/ail-leak - An information leak as defined by the AIL Analysis Information Leak framework.
- objects/ais-info - Automated Indicator Sharing (AIS) Information Source Markings.
- objects/android-app - Indicators related to an Android app.
- objects/android-permission - A set of android permissions - one or more permission(s) which can be linked to other objects (e.g. malware, app).
- objects/annotation - An annotation object allowing analysts to add annotations, comments, executive summary to a MISP event, objects or attributes.
- objects/anonymisation - Anonymisation object describing an anonymisation technique used to encode MISP attribute values. Reference: https://www.caida.org/tools/taxonomy/anonymization.xml.
- objects/asn - Autonomous system object describing an autonomous system which can include one or more network operators management an entity (e.g. ISP) along with their routing policy, routing prefixes or alike.
- objects/attack-pattern - Attack pattern describing a common attack pattern enumeration and classification.
- objects/authentication-failure-report - Authentication Failure Report.
- objects/authenticode-signerinfo - Authenticode Signer Info.
- objects/av-signature - Antivirus detection signature.
- objects/bank-account - An object describing bank account information based on account description from goAML 4.0.
- objects/bgp-hijack - Object encapsulating BGP Hijack description as specified, for example, by bgpstream.com.
- objects/blog - Blog post like Medium or WordPress.
- objects/boleto - A common form of payment used in Brazil.
- objects/btc-transaction - An object to describe a Bitcoin transaction. Best to be used with bitcoin-wallet.
- objects/btc-wallet - An object to describe a Bitcoin wallet. Best to be used with bitcoin-transactions.
- objects/cap-alert - Common Alerting Protocol Version (CAP) alert object.
- objects/cap-info - Common Alerting Protocol Version (CAP) info object.
- objects/cap-resource - Common Alerting Protocol Version (CAP) resource object.
- objects/coin-address - An address used in a cryptocurrency.
- objects/command - Command functionalities related to specific commands executed by a program, whether it is malicious or not. Command-line are attached to this object for the related commands.
- objects/command-line - Command line and options related to a specific command executed by a program, whether it is malicious or not.
- objects/cookie - An HTTP cookie (web cookie, browser cookie) is a small piece of data that a server sends to the user's web browser. The browser may store it and send it back with the next request to the same server. Typically, it's used to tell if two requests came from the same browser — keeping a user logged-in, for example. It remembers stateful information for the stateless HTTP protocol. (as defined by the Mozilla foundation.
- objects/cortex - Cortex object describing a complete cortex analysis. Observables would be attribute with a relationship from this object.
- objects/cortex-taxonomy - Cortex object describing an Cortex Taxonomy (or mini report).
- objects/course-of-action - An object describing a specific measure taken to prevent or respond to an attack.
- objects/covid19-csse-daily-report - CSSE COVID-19 Daily report.
- objects/covid19-dxy-live-city - COVID 19 from dxy.cn - Aggregation by city.
- objects/covid19-dxy-live-province - COVID 19 from dxy.cn - Aggregation by province.
- objects/cowrie - Cowrie honeypot object template.
- objects/credential - Credential describes one or more credential(s) including password(s), api key(s) or decryption key(s).
- objects/credit-card - A payment card like credit card, debit card or any similar cards which can be used for financial transactions.
- objects/crypto-material - Cryptographic materials such as public or/and private keys.
- objects/cytomic-orion-file - Cytomic Orion File Detection.
- objects/cytomic-orion-machine - Cytomic Orion File at Machine Detection.
- objects/dark-pattern-item - An Item whose User Interface implements a dark pattern.
- objects/ddos - DDoS object describes a current DDoS activity from a specific or/and to a specific target. Type of DDoS can be attached to the object as a taxonomy.
- objects/device - An object to define a device.
- objects/diameter-attack - Attack as seen on diameter authentication against a GSM, UMTS or LTE network.
- objects/dns-record - A set of dns records observed for a specific domain.
- objects/domain-crawled - A domain crawled over time.
- objects/domain-ip - A domain and IP address seen as a tuple in a specific time frame.
- objects/elf - Object describing a Executable and Linkable Format.
- objects/elf-section - Object describing a section of an Executable and Linkable Format.
- objects/email - Email object describing an email with meta-information.
- objects/employee - An employee and related data points.
- objects/exploit-poc - Exploit-poc object describing a proof of concept or exploit of a vulnerability. This object has often a relationship with a vulnerability object.
- objects/facebook-account - Facebook account.
- objects/facebook-group - Public or private facebook group.
- objects/facebook-page - Facebook page.
- objects/facebook-post - Post on a Facebook wall.
- objects/facial-composite - An object which describes a facial composite.
- objects/fail2ban - Fail2ban event.
- objects/file - File object describing a file with meta-information.
- objects/forensic-case - An object template to describe a digital forensic case.
- objects/forensic-evidence - An object template to describe a digital forensic evidence.
- objects/forged-document - Object describing a forged document.
- objects/ftm-Airplane - .
- objects/ftm-Assessment - .
- objects/ftm-Asset - .
- objects/ftm-Associate - Non-family association between two people.
- objects/ftm-Audio - .
- objects/ftm-BankAccount - .
- objects/ftm-Call - .
- objects/ftm-Company - .
- objects/ftm-Contract - An contract or contract lot issued by an authority. Multiple lots may be awarded to different suppliers (see ContractAward). .
- objects/ftm-ContractAward - A contract or contract lot as awarded to a supplier.
- objects/ftm-CourtCase - .
- objects/ftm-CourtCaseParty - .
- objects/ftm-Debt - A monetary debt between two parties.
- objects/ftm-Directorship - .
- objects/ftm-Document - .
- objects/ftm-Documentation - .
- objects/ftm-EconomicActivity - A foreign economic activity.
- objects/ftm-Email - .
- objects/ftm-Event - .
- objects/ftm-Family - Family relationship between two people.
- objects/ftm-Folder - .
- objects/ftm-HyperText - .
- objects/ftm-Image - .
- objects/ftm-Land - .
- objects/ftm-LegalEntity - A legal entity may be a person or a company.
- objects/ftm-License - A grant of land, rights or property. A type of Contract.
- objects/ftm-Membership - .
- objects/ftm-Message - .
- objects/ftm-Organization - .
- objects/ftm-Ownership - .
- objects/ftm-Package - .
- objects/ftm-Page - .
- objects/ftm-Pages - .
- objects/ftm-Passport - Passport.
- objects/ftm-Payment - A monetary payment between two parties.
- objects/ftm-Person - An individual.
- objects/ftm-PlainText - .
- objects/ftm-PublicBody - A public body, such as a ministry, department or state company.
- objects/ftm-RealEstate - A piece of land or property.
- objects/ftm-Representation - A mediatory, intermediary, middleman, or broker acting on behalf of a legal entity.
- objects/ftm-Row - .
- objects/ftm-Sanction - A sanction designation.
- objects/ftm-Succession - Two entities that legally succeed each other.
- objects/ftm-Table - .
- objects/ftm-TaxRoll - A tax declaration of an individual.
- objects/ftm-UnknownLink - .
- objects/ftm-UserAccount - .
- objects/ftm-Vehicle - .
- objects/ftm-Vessel - A boat or ship.
- objects/ftm-Video - .
- objects/ftm-Workbook - .
- objects/geolocation - An object to describe a geographic location.
- objects/git-vuln-finder - Export from git-vuln-finder.
- objects/gtp-attack - GTP attack object as seen on a GSM, UMTS or LTE network.
- objects/http-request - A single HTTP request header.
- objects/ilr-impact - Institut Luxembourgeois de Regulation - Impact.
- objects/ilr-notification-incident - Institut Luxembourgeois de Regulation - Notification d'incident.
- objects/image - Object describing an image file.
- objects/impersonation - Represent an impersonating account.
- objects/imsi-catcher - IMSI Catcher entry object based on the open source IMSI cather.
- objects/instant-message - Instant Message (IM) object template describing one or more IM message.
- objects/instant-message-group - Instant Message (IM) group object template describing a public or private IM group, channel or conversation.
- objects/intelmq_event - IntelMQ Event.
- objects/intelmq_report - IntelMQ Report.
- objects/internal-reference - Internal reference.
- objects/interpol-notice - An object which describes a Interpol notice.
- objects/iot-device - An IoT device.
- objects/iot-firmware - A firmware for an IoT device.
- objects/ip-api-address - IP Address information. Useful if you are pulling your ip information from ip-api.com.
- objects/ip-port - An IP address (or domain or hostname) and a port seen as a tuple (or as a triple) in a specific time frame.
- objects/irc - An IRC object to describe an IRC server and the associated channels.
- objects/ja3 - JA3 is a new technique for creating SSL client fingerprints that are easy to produce and can be easily shared for threat intelligence. Fingerprints are composed of Client Hello packet; SSL Version, Accepted Ciphers, List of Extensions, Elliptic Curves, and Elliptic Curve Formats. https://github.com/salesforce/ja3.
- objects/leaked-document - Object describing a leaked document.
- objects/legal-entity - An object to describe a legal entity.
- objects/lnk - LNK object describing a Windows LNK binary file (aka Windows shortcut).
- objects/macho - Object describing a file in Mach-O format.
- objects/macho-section - Object describing a section of a file in Mach-O format.
- objects/mactime-timeline-analysis - Mactime template, used in forensic investigations to describe the timeline of a file activity.
- objects/malware-config - Malware configuration recovered or extracted from a malicious binary.
- objects/meme-image - Object describing a meme (image).
- objects/microblog - Microblog post like a Twitter tweet or a post on a Facebook wall.
- objects/mutex - Object to describe mutual exclusion locks (mutex) as seen in memory or computer program.
- objects/narrative - Object describing a narrative.
- objects/netflow - Netflow object describes an network object based on the Netflowv5/v9 minimal definition.
- objects/network-connection - A local or remote network connection.
- objects/network-socket - Network socket object describes a local or remote network connections based on the socket data structure.
- objects/news-agency - News agencies compile news and disseminate news in bulk.
- objects/news-media - News media are forms of mass media delivering news to the general public.
- objects/organization - An object which describes an organization.
- objects/original-imported-file - Object describing the original file used to import data in MISP.
- objects/parler-account - Parler account.
- objects/parler-comment - Parler comment.
- objects/parler-post - Parler post (parley).
- objects/passive-dns - Passive DNS records as expressed in draft-dulaunoy-dnsop-passive-dns-cof-01.
- objects/paste - Paste or similar post from a website allowing to share privately or publicly posts.
- objects/pcap-metadata - Network packet capture metadata.
- objects/pe - Object describing a Portable Executable.
- objects/pe-section - Object describing a section of a Portable Executable.
- objects/person - An object which describes a person or an identity.
- objects/pgp-meta - Metadata extracted from a PGP keyblock, message or signature.
- objects/phishing - Phishing template to describe a phishing website and its analysis.
- objects/phishing-kit - Object to describe a phishing-kit.
- objects/phone - A phone or mobile phone object which describe a phone.
- objects/process - Object describing a system process.
- objects/publication - An object to describe a book, journal, or academic publication.
- objects/python-etvx-event-log - Event log object template to share information of the activities conducted on a system. .
- objects/r2graphity - Indicators extracted from files using radare2 and graphml.
- objects/reddit-account - Reddit account.
- objects/reddit-comment - A Reddit post comment.
- objects/reddit-post - A Reddit post.
- objects/reddit-subreddit - Public or private subreddit.
- objects/regexp - An object describing a regular expression (regex or regexp). The object can be linked via a relationship to other attributes or objects to describe how it can be represented as a regular expression.
- objects/registry-key - Registry key object describing a Windows registry key with value and last-modified timestamp.
- objects/regripper-NTUser - Regripper Object template designed to present user specific configuration details extracted from the NTUSER.dat hive.
- objects/regripper-sam-hive-single-user - Regripper Object template designed to present user profile details extracted from the SAM hive.
- objects/regripper-sam-hive-user-group - Regripper Object template designed to present group profile details extracted from the SAM hive.
- objects/regripper-software-hive-BHO - Regripper Object template designed to gather information of the browser helper objects installed on the system.
- objects/regripper-software-hive-appInit-DLLS - Regripper Object template designed to gather information of the DLL files installed on the system.
- objects/regripper-software-hive-application-paths - Regripper Object template designed to gather information of the application paths.
- objects/regripper-software-hive-applications-installed - Regripper Object template designed to gather information of the applications installed on the system.
- objects/regripper-software-hive-command-shell - Regripper Object template designed to gather information of the shell commands executed on the system.
- objects/regripper-software-hive-software-run - Regripper Object template designed to gather information of the applications set to run on the system.
- objects/regripper-software-hive-userprofile-winlogon - Regripper Object template designed to gather user profile information when the user logs onto the system, gathered from the software hive.
- objects/regripper-software-hive-windows-general-info - Regripper Object template designed to gather general windows information extracted from the software-hive.
- objects/regripper-system-hive-firewall-configuration - Regripper Object template designed to present firewall configuration information extracted from the system-hive.
- objects/regripper-system-hive-general-configuration - Regripper Object template designed to present general system properties extracted from the system-hive.
- objects/regripper-system-hive-network-information - Regripper object template designed to gather network information from the system-hive.
- objects/regripper-system-hive-services-drivers - Regripper Object template designed to gather information regarding the services/drivers from the system-hive.
- objects/report - Metadata used to generate an executive level report.
- objects/research-scanner - Information related to known scanning activity (e.g. from research projects).
- objects/rogue-dns - Rogue DNS as defined by CERT.br.
- objects/rtir - RTIR - Request Tracker for Incident Response.
- objects/sandbox-report - Sandbox report.
- objects/sb-signature - Sandbox detection signature.
- objects/scheduled-event - Event object template describing a gathering of individuals in meatspace.
- objects/scrippsco2-c13-daily - Daily average C13 concentrations (ppm) derived from flask air samples.
- objects/scrippsco2-c13-monthly - Monthly average C13 concentrations (ppm) derived from flask air samples.
- objects/scrippsco2-co2-daily - Daily average CO2 concentrations (ppm) derived from flask air samples.
- objects/scrippsco2-co2-monthly - Monthly average CO2 concentrations (ppm) derived from flask air samples.
- objects/scrippsco2-o18-daily - Daily average O18 concentrations (ppm) derived from flask air samples.
- objects/scrippsco2-o18-monthly - Monthly average O18 concentrations (ppm) derived from flask air samples.
- objects/script - Object describing a computer program written to be run in a special run-time environment. The script or shell script can be used for malicious activities but also as support tools for threat analysts.
- objects/shell-commands - Object describing a series of shell commands executed. This object can be linked with malicious files in order to describe a specific execution of shell commands.
- objects/shodan-report - Shodan Report for a given IP.
- objects/short-message-service - Short Message Service (SMS) object template describing one or more SMS message. Restriction of the initial format 3GPP 23.038 GSM character set doesn't apply.
- objects/shortened-link - Shortened link and its redirect target.
- objects/social-media-group - Social media group object template describing a public or private group or channel.
- objects/splunk - Splunk / Splunk ES object.
- objects/ss7-attack - SS7 object of an attack seen on a GSM, UMTS or LTE network via SS7 logging.
- objects/ssh-authorized-keys - An object to store ssh authorized keys file.
- objects/stix2-pattern - An object describing a STIX pattern. The object can be linked via a relationship to other attributes or objects to describe how it can be represented as a STIX pattern.
- objects/suricata - An object describing one or more Suricata rule(s) along with version and contextual information.
- objects/target-system - Description about an targeted system, this could potentially be a compromissed internal system.
- objects/threatgrid-report - ThreatGrid report.
- objects/timecode - Timecode object to describe a start of video sequence (e.g. CCTV evidence) and the end of the video sequence.
- objects/timesketch-timeline - A timesketch timeline object based on mandatory field in timesketch to describe a log entry.
- objects/timesketch_message - A timesketch message entry.
- objects/timestamp - A generic timestamp object to represent time including first time and last time seen. Relationship will then define the kind of time relationship.
- objects/tor-hiddenservice - Tor hidden service (onion service) object.
- objects/tor-node - Tor node (which protects your privacy on the internet by hiding the connection between users Internet address and the services used by the users) description which are part of the Tor network at a time.
- objects/tracking-id - Analytics and tracking ID such as used in Google Analytics or other analytic platform.
- objects/transaction - An object to describe a financial transaction.
- objects/translation - Used to keep a text and its translation.
- objects/trustar_report - TruStar Report.
- objects/tsk-chats - An Object Template to gather information from evidential or interesting exchange of messages identified during a digital forensic investigation.
- objects/tsk-web-bookmark - An Object Template to add evidential bookmarks identified during a digital forensic investigation.
- objects/tsk-web-cookie - An TSK-Autopsy Object Template to represent cookies identified during a forensic investigation.
- objects/tsk-web-downloads - An Object Template to add web-downloads.
- objects/tsk-web-history - An Object Template to share web history information.
- objects/tsk-web-search-query - An Object Template to share web search query information.
- objects/twitter-account - Twitter account.
- objects/twitter-list - Twitter list.
- objects/twitter-post - Twitter post (tweet).
- objects/url - url object describes an url along with its normalized field (like extracted using faup parsing library) and its metadata.
- objects/user-account - .
- objects/vehicle - Vehicle object template to describe a vehicle information and registration.
- objects/victim - Victim object describes the target of an attack or abuse.
- objects/virustotal-graph - VirusTotal graph.
- objects/virustotal-report - VirusTotal report.
- objects/vulnerability - Vulnerability object describing a common vulnerability enumeration which can describe published, unpublished, under review or embargo vulnerability for software, equipments or hardware.
- objects/weakness - Weakness object describing a common weakness enumeration which can describe usable, incomplete, draft or deprecated weakness for software, equipment of hardware.
- objects/whois - Whois records information for a domain name or an IP address.
- objects/x509 - x509 object describing a X.509 certificate.
- objects/yabin - yabin.py generates Yara rules from function prologs, for matching and hunting binaries. ref: https://github.com/AlienVault-OTX/yabin.
- objects/yara - An object describing a YARA rule (or a YARA rule name) along with its version.
- objects/youtube-channel - A YouTube channel.
- objects/youtube-comment - A YouTube video comment.
- objects/youtube-playlist - A YouTube playlist.
- objects/youtube-video - A YouTube video.
MISP objects relationships
The MISP object model is open and allows user to use their own relationships. MISP provides a list of default relationships that can be used if you plan to share your events with other MISP communities.
- relationships - list of predefined default relationships which can be used to link MISP objects together and explain the context of the relationship.
How to contribute MISP objects?
Fork the project, create a new directory in the objects directory matching your object name. Objects must be composed of existing MISP attributes. If you are missing a specific attributes, feel free to open an issue in the MISP project.
We recommend to add a text attribute in a object to allow users to add comments or correlating text.
If the unparsed object can be included, a raw-base64 attribute can be used in the object to import the whole object.
Every object needs a uuid which can be created using uuidgen -r on a linux command line.
When the object is created, the validate_all.sh
and jq_all_the_things.sh
is run for validation, pull a request on this project. We usually merge the objects if it fits existing use-cases.
MISP objects documentation
The MISP objects are documented at the following location in HTML and PDF.
The documentation is automatically generated from the MISP objects template expressed in JSON.
What are the advantages of MISP objects versus existing standards?
MISP objects are dynamically used objects that are contributed by users of MISP (the threat sharing platform) or other information sharing platforms.
The aim is to allow a dynamic update of objects definition in operational distributed sharing systems like MISP. Security threats and their related indicators are quite dynamic, standardized formats are quite static and new indicators require a significant time before being standardized.
The MISP objects model allows to add new combined indicators format based on their usage without changing the underlying code base of MISP or other threat sharing platform using it. The definition of the objects can be then propagated along with the indicators itself.
License
MISP Object JSON files
The MISP objects (JSON files) are dual-licensed under:
- CC0 1.0 Universal (CC0 1.0) - Public Domain Dedication.
or
Copyright (c) 2016-2020 Alexandre Dulaunoy - a@foo.be
Copyright (c) 2016-2020 CIRCL - Computer Incident Response Center Luxembourg
Copyright (c) 2016-2020 Andras Iklody
Copyright (c) 2016-2020 Raphael Vinot
Copyright (c) 2016-2020 Various contributors to MISP Project
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice,
this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
OF THE POSSIBILITY OF SUCH DAMAGE.
If a specific author of a taxonomy wants to license it under a different license, a pull request can be requested.
Software
Copyright (C) 2016-2020 Andras Iklody
Copyright (C) 2016-2020 Alexandre Dulaunoy
Copyright (C) 2016-2020 CIRCL - Computer Incident Response Center Luxembourg
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.