Giter Site home page Giter Site logo

munin's Introduction

Actively Maintained

 _________   _    _   ______  _____  ______
| | | | | \ | |  | | | |  \ \  | |  | |  \ \     /.)
| | | | | | | |  | | | |  | |  | |  | |  | |    /)\|
|_| |_| |_| \_|__|_| |_|  |_| _|_|_ |_|  |_|   // /
                                              /'" "

Online Hash Checker for Virustotal and Other Services
Florian Roth

What is Munin?

Munin is a online hash checker utility that retrieves valuable information from various online sources

The current version of Munin queries the following services:

Screenshot

Default Mode - Read Hashes from File

Munin Screenshot

Usage

usage: munin.py [-h] [-f path] [--vh search-string]
                [--vhrule search-string] [-o output] [--vtwaitquota]
                [--vtminav min-matches] [--limit hash-limit]
                [--vhmaxage days] [-c cache-db] [-i ini-file]
                [-s sample-folder] [--comment] [-p vt-comment-prefix]
                [--download] [-d download_path] [--nocache] [--nocsv]
                [--verifycert] [--sort] [--web] [-w port] [--cli]
                [--rescan] [--debug]

Online Hash Checker

optional arguments:
  -h, --help            show this help message and exit
  -f path               File to process (hash line by line OR csv with hash
                        in each line - auto-detects position and comment)
  --vh search-string    Query Valhalla for hashes by keyword, tags, YARA
                        rule name, Mitre ATT&CK software (e.g. S0154),
                        technique (e.g. T1023) or threat group (e.g. G0049)
  --vhrule search-string
                        Query Valhalla for hashes via rules by keyword,
                        tags, YARA rule name, Mitre ATT&CK software (e.g.
                        S0154), technique (e.g. T1023) or threat group
                        (e.g. G0049)
  -o output             Output file for results (CSV)
  --vtwaitquota         Do not continue if VT quota is exceeded but wait
                        for the next day
  --vtminav min-matches
                        Minimum number of AV matches to query hash info
                        from VT"
  --limit hash-limit    Exit after handling this much new hashes in batch
                        mode (cache ignored).
  --vhmaxage days       Maximum age of sample on Valhalla to process
  -c cache-db           Name of the cache database file (default: vt-hash-
                        db.json)
  -i ini-file           Name of the ini file that holds the API keys
  -s sample-folder      Folder with samples to process
  --comment             Posts a comment for the analysed hash which
                        contains the comment from the log line
  -p vt-comment-prefix  Virustotal comment prefix
  --download            Enables Sample Download from Hybrid Analysis.
                        SHA256 of sample needed.
  -d download_path      Output Path for Sample Download from Hybrid
                        Analysis. Folder must exist
  --nocache             Do not use cache database file
  --nocsv               Do not write a CSV with the results
  --verifycert          Verify SSL/TLS certificates
  --sort                Sort the input lines
  --web                 Run Munin as web service
  -w port               Web service port
  --cli                 Run Munin in command line interface mode
  --rescan              Trigger a rescan of each analyzed file
  --debug               Debug output

Features

  • Retrieves valuable information from Virustotal via API (JSON response) and other information via permalink (HTML parsing)
  • Retrieves extra information from a list of platforms
  • Keeps a history (cache) to query the services only once for a hash that may appear multiple times in the text file
  • Cached objects are stored in JSON
  • Creates CSV file with the findings for easy post-processing and reporting
  • Appends results to a previous CSV if available

Displays

  • Hash and comment (comment is the rest of the line of which the hash has been extracted)
  • AV vendor matches based on a user defined list
  • Filenames used in the wild
  • PE information like the description, the original file name and the copyright statement
  • Signer of a signed portable executable
  • Result based on Virustotal ratio
  • First and last submission
  • Tags for certain indicators: Harmless, Signed, Expired, Revoked, MSSoftware

Extra Checks

  • Queries Malshare.com for sample uploads
  • Queries Hybrid-Analysis.com for reports
  • Queries multiple MISP instances for available events
  • Queries Any.run sandbox for reports
  • Queries CAPE sandbox for reports
  • Queries URLhaus for reports
  • Queries Malshare for available samples
  • Queries Valhalla for YARA rule matches
  • Imphash duplicates in current batch > allows you to spot overlaps in import table hashes
  • PE signature duplicate checks

Operation Modes

  1. Default - by providing an input file (-f) with hashes or sample directory (-s)
  2. Query - to search hashes from Valhalla by keyword, tags, ATT&CK technique (e.g. T1023), ATT&CK threat group (e.g. G0049) or rule name (-q)
  3. Command Line Interface - using the --cli parameter
  4. Web Service Mode - using the --web parameter

Getting started

  1. Download / clone the repo
  2. Install required packages: pip3 install -r requirements.txt (on macOS add --user)
  3. Set the API keys for the different services in your custom ini file cp munin.ini my.ini (see section Get the API Keys for help)
  4. Use the demo file for a first run: python munin.py -i my.ini -f munin-demo.txt

Requirements

  • Python 3.7 and higher
  • Internet Connection (Proxy Support; SSL/TLS interception can be a problem)

Typical Command Lines

Process a Virustotal Retrohunt result and sort the lines before checking so that matched signatures are checked in blocks

python3 munin.py -i my.ini -f ~/Downloads/retro_hunt

Process a directory with samples and check their hashes online

python3 munin.py -i my.ini -s ~/malware/case34

Use the command line interface mode (new in v0.14)

python3 munin.py -i my.ini

Get the API Keys

Virustotal

  1. Create an account here https://www.virustotal.com/#/join-us
  2. Check Profile > My API key for your public API key

MalShare

Register here https://malshare.com/register.php

Malware Bazaar

Register here https://bazaar.abuse.ch/. You can then find your API key in your Account Overview.

Hybrid Analysis

  1. Create an account here https://www.hybrid-analysis.com/signup
  2. After login, check Profile > API key

MISP

  1. Log into your MISP
  2. Go to your profile "My Profile"
  3. The value of Authkey is used as API key
  4. Note that the .ini file uses both a list for the MISP instances and for the respective API keys

Valhalla

Currently for customers or invited researchers only
https://valhalla.nextron-systems.com/

Hashlookup

Hashlookup CIRCL's instance is provided free of charge and served as a best-effort basis.

Command Line Interface Mode

Start munin with --cli and follow the instruction.

E.g.

python3 munin.py -i my.ini --cli

Paste content with hash values in it and then press CTRL+D to finalize the input. The last line needs a line break at its end.

In the default, it will create a CSV file with the current date in the file name.

Munin CLI

Web Service Mode

Start munin with --web and optional select a port -w port.

E.g.

python3 munin.py -i my.ini --web -w 8080

The web service waits for strings in the following URL scheme.

http://server:port/<string>

The string can be any string without line breaks, e.g.

Emotet:1585ad28f7d1e0ca696e6c6c2f1d008a
ed01ebfbc9eb5bbea545af4d01bf5f1071661840480439c6e5babe8e080e41aa;IOC1
dc9b5e8aa6ec86db8af0a7aa897ca61db3e5f3d2e0942e319074db1aaccfdc83

The result will look like this:

{
    "comment": "Emotet",
    "commenter": "-",
    "comments": "0",
    "copyright": "Copyright (C) America Online, Inc. 1999 - 2004",
    "description": "Utilities",
    "expired": false,
    "filenames": "sourcedev.exe, MISCUTIL, x8ykNnr_9WofXq7Nh_xuEzSPW.exe, jwuKBLWN681ztj6Zks.exe",
    "filetype": "Win32 EXE",
    "first_submitted": "2019-01-19 13:46:21 UTC ( 2 months, 2 weeks ago )",
    "firstsubmission": "2019-01-19 13:46:21 UTC ( 2 months, 2 weeks ago )",
    "harmless": false,
    "hash": "1585ad28f7d1e0ca696e6c6c2f1d008a",
    "hybrid_available": false,
    "hybrid_compromised": "-",
    "hybrid_date": "-",
    "hybrid_score": "-",
    "imphash": "2820d9bdc397f88a8a1e957e1a824482",
    "last_submitted": "2019-02-27 09:44:03",
    "malshare_available": false,
    "md5": "1585ad28f7d1e0ca696e6c6c2f1d008a",
    "misp_available": true,
    "misp_events": "",
    "misp_info": [],
    "mssoft": false,
    "origname": "-",
    "positives": 48,
    "rating": "malicious",
    "res_color": "\u001b[41m",
    "result": "48 / 64",
    "revoked": false,
    "sha1": "4561d0ad575d5f02fb06e062a37de15861c3bd89",
    "sha256": "35e304d10d53834e3e41035d12122773c9a4d183a24e03f980ad3e6b2ecde7fa",
    "signed": false,
    "signer": "-",
    "total": 64,
    "urlhaus_available": true,
    "vendor_results": {
        "CrowdStrike": "win/malicious_confidence_100% (W)",
        "ESET-NOD32": "a variant of Win32/Kryptik.GOUY",
        "F-Secure": "Trojan.TR/AD.Emotet.pdiuu",
        "GData": "Trojan.GenericKD.40960256",
        "Kaspersky": "HEUR:Trojan.Win32.Generic",
        "McAfee": "Emotet-FLL!1585AD28F7D1",
        "Microsoft": "Trojan:Win32/Emotet.DN",
        "Sophos": "Mal/Emotet-Q",
        "Symantec": "Trojan.Gen.2",
        "TrendMicro": "-"
    },
    "virus": "Microsoft: Trojan:Win32/Emotet.DN / Kaspersky: HEUR:Trojan.Win32.Generic / McAfee: Emotet-FLL!1585AD28F7D1 / CrowdStrike: win/malicious_confidence_100% (W) / ESET-NOD32: a variant of Win32/Kryptik.GOUY / Symantec: Trojan.Gen.2 / F-Secure: Trojan.TR/AD.Emotet.pdiuu / Sophos: Mal/Emotet-Q / GData: Trojan.GenericKD.40960256",
    "virusbay_available": false,
    "vt_positives": 48,
    "vt_queried": false,
    "vt_total": 64,
    "vt_verbose_msg": "Scan finished, information embedded"
}

The queries to Virustotal need to be throttled. Therefore the web service applies a cool down time, that is minimized by subtracting the time it took to process all other platforms from the wait time of 15 seconds.

cooldown_time = vt_wait_time - process_time

During the cooldown, requests will return this response:

{"status": "VT cooldown active"}

The cool down is not relevant when requesting hashes that are already in the lookup cache.

Munin Hosts

The Munin host and IP checker script (munin-host.py) retrieves more information on IP addresses and host/domain names in IOC lists.

Usage

    usage: munin-host.py [-h] [-f path] [-o output] [-m max-items] [-c cache-db]
                        [-i ini-file] [--nocache] [--nocsv] [--recursive]
                        [--download] [-d download_path] [--dups] [--noresolve]
                        [--ping] [--debug]

    Virustotal Online Checker (IP/Domain)

    optional arguments:
      -h, --help        show this help message and exit
      -f path           File to process (hash line by line OR csv with hash in
                        each line - auto-detects position and comment)
      -o output         Output file for results (CSV)
      -m max-items      Maximum number of items (urls, hosts, samples) to show
      -c cache-db       Name of the cache database file (default: vt-hosts-
                        db.json)
      -i ini-file       Name of the ini file that holds the API keys
      --nocache         Do not use the load the cache db (vt-check-cache.pkl)
      --nocsv           Do not write a CSV with the results
      --recursive       Process the resolved IPs as well
      --download        Try to download the URLs (directories with host/ip names)
      -d download_path  Store the downloads to the given directory
      --dups            Do not skip duplicate hashes
      --noresolve       Do not perform DNS resolve test on found domain names
      --ping            Perform ping check on IPs (speeds up process if many
                        public but internally routed IPs appear in text file)
      --debug           Debug output

Screenshot

Munin Hosts_Screenshot

Examples

Parse the demo file, extract IPs and hosts, don't just check the domains that are still resolvable and download samples directly from the remote systems.

python3 munin-host.py -i your-key.ini -f ./munin-hosts-demo.txt --noresolve --download

Warning

Using munin-host.py in an IDS monitored network will cause numerous alerts as munin-host.py performs DNS lookups for malicious domains and has the option to download malicious samples.

Issues

pycurl on macOS

The script munin-host.py requires the module pycurl. It's sometimes tricky to make it work on macOS as it requires an openssl to be installed, which is then used in the build process.

If error's occur try the following (some environments will require pip3)

pip uninstall pycurl
brew update
brew reinstall openssl
export PKG_CONFIG_PATH="/usr/local/opt/openssl/lib/pkgconfig"
export LDFLAGS="-L/usr/local/opt/openssl/lib"
export CPPFLAGS="-I/usr/local/opt/openssl/include"
export PYCURL_SSL_LIBRARY=openssl
pip install pycurl --global-option="--with-openssl"

Hugin for Virustotal Retrohunts

The Hugin script (hugin.py) retrieves and displays information to all samples returned in a retrohunt. The big advantage is that you don't have to wait 15 seconds between each sample request but pull the full JSON result file via v3 of the Virustotal API. This way you get your results immediately. The disadvantage is that other services like Any.run, Hybrid-Analysis, MISP or Valhalla don't get queried with Hugin.

Usage

usage: hugin.py [-h] [-r retrohunt-name] [-i ini-file]
                [--csv-path CSV_PATH] [--debug] [--no-comments]

Retrohunt Checker

optional arguments:
  -h, --help           show this help message and exit
  -r retrohunt-name    Name for the queried retrohunt
  -i ini-file           Name of the ini file that holds the VT API key
  --csv-path CSV_PATH  Write a CSV with the results
  --debug              Debug output
  --no-comments        Skip VirusTotal comments

Examples

Parse a retrohunt and export a CSV file with the results.

python3 hugin.py -i config-with-your-key.ini -r retrohunt-123456789

munin's People

Contributors

0x4f47 avatar fabfaeb avatar gallypette avatar karthik-varma avatar n3x77 avatar neo23x0 avatar phantinuss avatar phroxvs avatar ruppde avatar secdre4mer avatar stuhli avatar szepnapot avatar thomaspatzke avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

munin's Issues

munin-host - urlparse

my python versions are 3.5.7 and 2.7.17

pip install parse , urlparse and urllib (pip2 / pip3)

Still giving error, should I modify munin-host?
from urllib.parse import urlparse
to
from urlparse import urlparse

Traceback (most recent call last):
File "munin-host.py", line 16, in
from urllib.parse import urlparse
ImportError: No module named parse

o

API keys not functioning

Hi Florian,

I am a huge fan of your work in the industry.

Need your assistance, I am setting up the munin from my laptop and provided all the API keys from the .ini file but only the intezer are working. The other API are not working.

Please let me know what did I missed on setting up the tool

Thank you very much
ssss

Cooldown reduction

I have private VT key, so wanted to speed up analysis.
Changing value i this line to 1 ... did not seem to have much effect
WAIT_TIME = 1 # Public API allows 4 request per minute, so we wait 15 secs by default

can you advise how to get this work?
Also .. any chance of support for private VT API ?

Feature Request: Print Scan Start Time

After running Munin on a large hash list, found myself timing the process. This is what I did, but not sure whether it is worthy of a pull request:

munin.php, on line 26
adjust to import datetime

Immediately after Line 1211, add

scantime = datetime.datetime.now().strftime("%A %d %B %Y at %H:%M")
print("[i] Starting scan on", scantime)

Result:
Screenshot 2019-04-17 at 21 40 26

MISP list and HybridAnalysis question.

From the new munin.ini I see:

[MISP]
MISP_URL = 
MISP_API_KEY = 

how do we create a list of MISP's? Is it:

MISP_URL = "link1, link2"
MISP_API_KEY = "key1, key2"

or

MISP_URL = link1
MISP_API_KEY = key1
MISP_URL = link2
MISP_API_KEY = key2

or something else? As for HA, I've not been able to get this to work...per munin.ini:

PAYLOAD_SEC_API_KEY = 
PAYLOAD_SEC_API_SECRET = 

however with 2.0 api there doesn't appear to be a secret anymore:
link

Thank you....I really love this app!

PyMISP is not Working

Hi,

in the default munin.ini file the MISP-Url is put in between single quotes. This leads to the following error:
File "pymisp/api.py", line 112, in __init__ raise PyMISPError('Unable to connect to MISP ({}). Please make sure the API key and the URL are correct (http/https is required): {}'.format(self.root_url, e)) pymisp.exceptions.PyMISPError: Unable to connect to MISP ('https://demomisp.local/'). Please make sure the API key and the URL are correct (http/https is required): No connection adapters were found for ''https://demomisp.local//servers/getPyMISPVersion.json' ^C
Also the URL in the ini-file must end with an '/'

VT API

I have the free API and have placed the key in the ini file. I keep getting this error. Not sure why it does not work.
[E] No Virustotal API Key set or wrong format
Include your API key in a custom config file and use munin.ini as a template

More info:
https://github.com/Neo23x0/munin#get-the-api-keys-used-by-munin

Debug parameter isn't passed to getVTInfo function

The --debug parameter isn't passed to the getVTInfo function which can result in an endless silent failure loop, even with the debug switch applied.

I believe the problem is on this line:

munin/munin.py

Line 174 in 3a05795

vt_info = munin_vt.getVTInfo(hashVal)

I have just been experiencing #29 (VT API query failure due to SSL interception), which manifests in a silent failure and getting stuck in the while loop. I think this could be considered a separate issue as well, since silent failure is less than ideal, even if the user doesn't supply the debug switch.

munin/lib/munin_vt.py

Lines 26 to 35 in 3a05795

while not success:
try:
response_dict_code = requests.get(VT_REPORT_URL % hash, headers=headers, proxies=PROXY)
response_dict = json.loads(response_dict_code.content.decode("utf-8"))
success = True
if response_dict_code.status_code == 429:
print("VirusTotal Quota exceeded.")
except Exception as e:
if debug:
traceback.print_exc()

The biggest issue here is that the debug parameter, even if supplied, doesn't make it to the getVTInfo function, so the debug info never prints in the while loop, even if the user sets debug switch.

I'm pretty bad at python, but I think changing munin.py#L174 to the following would fix it:

       vt_info = munin_vt.getVTInfo(hashVal, args.debug)

Edit: actually just to be clear, I did try the suggested fix and it does indeed print debug lines as expected (when the debug switch is applied). I'm just uncertain whether the presentation would be considered ideal enough to implement as-is (spams the same debug message endlessly in a loop).

Edit 2: Also happy to supply more info or submit a PR - unclear on etiquette for this repo and whether a single-line fix like this would be useful or whether you'd want to review the other function calls in munin.py for the same issue.

Exception raised using MISP feature (proxy support)

Dear,
After pulling the latest version, I'm not able to run properly the MISP module:
cd /opt/munin/
sudo git pull
sudo vi /opt/munin/munin.ini (to add/change my own API keys)
sudo python3 -m pip install -r /opt/munin/requirements.txt
sudo python3 /opt/munin/munin.py --debug -i /opt/munin/munin.ini -f <input>

However, I reached the following exception:

[D] Querying MISP: 'https://misppriv.circl.lu'
Traceback (most recent call last):
File "/usr/local/lib/python3.6/dist-packages/pymisp/api.py", line 98, in init
response = self.get_recommended_api_version()
File "/usr/local/lib/python3.6/dist-packages/pymisp/api.py", line 1340, in get_recommended_api_version
response = self._prepare_request('GET', url)
File "/usr/local/lib/python3.6/dist-packages/pymisp/api.py", line 177, in _prepare_request
return s.send(prepped, verify=self.ssl, proxies=self.proxies, cert=self.cert)
File "/usr/lib/python3/dist-packages/requests/sessions.py", line 612, in send
adapter = self.get_adapter(url=request.url)
File "/usr/lib/python3/dist-packages/requests/sessions.py", line 703, in get_adapter
raise InvalidSchema("No connection adapters were found for '%s'" % url)
requests.exceptions.InvalidSchema: No connection adapters were found for ''https:/servers/getPyMISPVersion.json'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "/opt/munin/munin.py", line 503, in getMISPInfo
misp = PyMISP(MISP_URL, MISP_API_KEY, args.verifycert, 'json')
File "/usr/local/lib/python3.6/dist-packages/pymisp/api.py", line 112, in init
raise PyMISPError('Unable to connect to MISP ({}). Please make sure the API key and the URL are correct (http/https is required): {}'.format(self.root_url, e))
pymisp.exceptions.PyMISPError: Unable to connect to MISP ('https://misppriv.circl.lu'). Please make sure the API key and the URL are correct (http/https is required): No connection adapters were found for ''https:/servers/getPyMISPVersion.json'

I double checked the API key and it is good.

Any idea?
Thanks in advance,
Regards,
Julien

[BUG] Not Returning Type or Filenames

Running the latest version of munin:

./munin.py -i munin.ini -f Hashes.txt

For all of the 100 hashes passed through, munin does not return the Type or Filenames for any of the hashes, despite the information being available on VT. My API access does allow this information to be retrieved.

Get the same result when running the query through the CLI.

Running the same hash through the VT API endpoint does return the filenames and filetypes. Could this be an issue in the munin JSON parser?

Thanks for your help.

During handling of exception, another exception occurred:

I am receiving the following error:

Traceback (most recent call last):
File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/urllib3/connectionpool.py", line 603, in urlopen
chunked=chunked)
File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/urllib3/connectionpool.py", line 344, in _make_request
self._validate_conn(conn)
File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/urllib3/connectionpool.py", line 843, in validate_conn
conn.connect()
File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/urllib3/connection.py", line 350, in connect
ssl_context=context)
File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/urllib3/util/ssl
.py", line 355, in ssl_wrap_socket
return context.wrap_socket(sock, server_hostname=server_hostname)
File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/ssl.py", line 412, in wrap_socket
session=session
File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/ssl.py", line 853, in _create
self.do_handshake()
File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/ssl.py", line 1117, in do_handshake
self._sslobj.do_handshake()
OSError: [Errno 0] Error

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/requests/adapters.py", line 449, in send
timeout=timeout
File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/urllib3/connectionpool.py", line 641, in urlopen
_stacktrace=sys.exc_info()[2])
File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/urllib3/util/retry.py", line 368, in increment
raise six.reraise(type(error), error, _stacktrace)
File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/urllib3/packages/six.py", line 685, in reraise
raise value.with_traceback(tb)
File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/urllib3/connectionpool.py", line 603, in urlopen
chunked=chunked)
File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/urllib3/connectionpool.py", line 344, in _make_request
self._validate_conn(conn)
File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/urllib3/connectionpool.py", line 843, in validate_conn
conn.connect()
File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/urllib3/connection.py", line 350, in connect
ssl_context=context)
File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/urllib3/util/ssl
.py", line 355, in ssl_wrap_socket
return context.wrap_socket(sock, server_hostname=server_hostname)
File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/ssl.py", line 412, in wrap_socket
session=session
File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/ssl.py", line 853, in _create
self.do_handshake()
File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/ssl.py", line 1117, in do_handshake
self._sslobj.do_handshake()
urllib3.exceptions.ProtocolError: ('Connection aborted.', OSError(0, 'Error'))

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "munin.py", line 841, in getAnyRun
response = requests.get(URL_ANYRUN % sha256, proxies=PROXY)
File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/requests/api.py", line 75, in get
return request('get', url, params=params, **kwargs)
File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/requests/api.py", line 60, in request
return session.request(method=method, url=url, **kwargs)
File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/requests/sessions.py", line 533, in request
resp = self.send(prep, **send_kwargs)
File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/requests/sessions.py", line 646, in send
r = adapter.send(request, **kwargs)
File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/requests/adapters.py", line 498, in send
raise ConnectionError(err, request=request)
requests.exceptions.ConnectionError: ('Connection aborted.', OSError(0, 'Error'))

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "munin.py", line 1544, in
processLines(lines, resultFile, args.nocsv, args.debug)
File "munin.py", line 245, in processLines
info, cooldown_time = processLine(line, debug)
File "munin.py", line 191, in processLine
ar_info = getAnyRun(info['sha256'])
File "munin.py", line 847, in getAnyRun
print("Error while accessing AnyRun: %s" % response.content)
UnboundLocalError: local variable 'response' referenced before assignment

Syntax error

Hi Florian,

You have an issue in your file "munin.py", line 35:

MAL_SAHRE_API_KEY = '-'
should become
MAL_SHARE_API_KEY = '-'

Regards,
Julien

munin-hosts.py no scan IP/Domains

HI! After the update you cannot use munin hosts anymore, do not scan or process IP or domain;

image

If I activate debug mode, the following is displayed;
image

The munin that checks hash is ok

Munin incorrectly writes semicolon-delimited files instead of CSVs

It appears the latest version of munin is writing output files delimited by semicolon characters (;) rather than commas (,), even when the -o option is applied.

Example:

PS > python .\munin\munin.py -f .\munin\munin-demo.txt -o test.csv
   _________   _    _   ______  _____  ______
  | | | | | \ | |  | | | |  \ \  | |  | |  \ \     /.)
  | | | | | | | |  | | | |  | |  | |  | |  | |    /)\|
  |_| |_| |_| \_|__|_| |_|  |_| _|_|_ |_|  |_|   // /
                                                /'" "
  Online Hash Checker for Virustotal and Other Services
  Florian Roth - 0.21.0 June 2021

[+] 51611 cache entries read from cache database: vt-hash-db.json
[+] You can interrupt the process by pressing CTRL+C without losing the already gathered information
[+] Writing results to new file: test.csv
[+] Processing 22 lines ...

 1 / 22 > Clean
HASH: 1093B3F7D016C0E03CD0DB36D74BA09673A7BB03 COMMENT: bravo.wav
TYPE: WAV SIZE: 7.4 KB FILENAMES: bravo.wav, kogesrtg9.dll, 1s2rwn5t7.dll, file-5582314_wav
FIRST: 2013-06-12 17:27:52 LAST: 2016-07-28 16:50:34 SUBMISSIONS: 2 REPUTATION: 0
COMMENTS: 0 USERS: - TAGS: WAV KNOWN-DISTRIBUTOR
RESULT: 0 / 54


...


 22 / 22 > Clean
HASH: 61b6f3b3407dad1e10ee80684e945e28d21adbeec002548bcaba9a3bc6ffd244 COMMENT: EXE_Susp_Cmds /subfile
TYPE: Win32 EXE SIZE: 9.1 MB FILENAMES: MaypleHD Player, MaypleMp4Installer.exe, MaypleMp4Installer-5.2.0.2.exe
SIGNER: (); Thawte Code Signing CA - G2; thawte COPYRIGHT: Yozii Inc. All rights reserved. DESCRIPTION: MaypleHD Player Install Program
FIRST: 2016-10-19 08:03:48 LAST: 2018-02-27 08:02:11 SUBMISSIONS: 6 REPUTATION: -48
COMMENTS: 1 USERS: dviz TAGS: PEEXE OVERLAY REVOKED-CERT SIGNED NSIS INVALID-SIGNATURE
RESULT: 0 / 67

[+] Results written to file test.csv

[+] Saving 51633 cache entries to file vt-hash-db.json

Output:

PS > Get-Content .\test.csv -First 3
Lookup Hash;Rating;Comment;Positives;Virus;File Names;First Submitted;Last Submitted;File Type;MD5;SHA1;SHA256;Imphash;Matching Rule;Harmless;Revoked;Expired;Trusted;Signed;Signer;Hybrid Analysis Sample;MalShare Sample;VirusBay Sample;MISP;MISP Events;URLhaus;AnyRun;CAPE;VALHALLA;User Comments;Microsoft;Kaspersky;McAfee;CrowdStrike;TrendMicro;ESET-NOD32;Symantec;F-Secure;Sophos;GData;
1093B3F7D016C0E03CD0DB36D74BA09673A7BB03;clean;bravo.wav;0;-;bravo.wav, kogesrtg9.dll, 1s2rwn5t7.dll, file-5582314_wav;2013-06-12 17:27:52;2016-07-28 16:50:34;WAV;deb660600362263bf2cbd8975d23f3c5;1093b3f7d016c0e03cd0db36d74ba09673a7bb03;8dc215954c3f54574aacaa26981e26dfcf4c03de65bbd4bc9e37eb3265289087;-;False;False;False;False;False;False;-;False;False;False;False;;False;False;False;[];['-'];-;-;-;-;-;-;-;-;-;-;
13AEF2CCC4E45B7B8F440F0FDB7D3FBC;clean;ttf;0;-;LinBiolinum_Rah.ttf;2013-10-20 06:23:10;2018-12-24 08:40:26;TrueType Font;13aef2ccc4e45b7b8f440f0fdb7d3fbc;73119c2f63274fd0825c53ec639511ae2f1601ce;f7140084369db686c71e522f0e8de148f0f3f429310376d5f52325a9f0955ba5;-;False;False;False;False;False;False;-;False;False;False;False;;False;False;False;[];['-'];-;-;-;-;-;-;-;-;-;-;

I feel like this issue is too obvious to have gone unnoticed, so perhaps it's intentional? If so, the documentation should be updated to reflect this, and ideally an actual CSV option added. I am happy to contribute this if you can confirm my findings and the intentionality of the issue.

Project dependencies may have API risk issues

Hi, In munin, inappropriate dependency versioning constraints can cause risks.

Below are the dependencies and version constraints that the project is using

colorama>=0.3.9
future>=0.16.0
requests>=2.20.0
configparser>=3.5.0
pymisp>=2.4.123
flask>=1.0
flask_caching
cfscrape
pyzipper
dnspython
IPy

The version constraint == will introduce the risk of dependency conflicts because the scope of dependencies is too strict.
The version constraint No Upper Bound and * will introduce the risk of the missing API Error because the latest version of the dependencies may remove some APIs.

After further analysis, in this project,
The version constraint of dependency colorama can be changed to ==0.1.
The version constraint of dependency colorama can be changed to >=0.1.3,<=0.1.6.
The version constraint of dependency colorama can be changed to ==0.1.10.
The version constraint of dependency colorama can be changed to >=0.1.13,<=0.1.14.
The version constraint of dependency colorama can be changed to >=0.1.16,<=0.4.5.
The version constraint of dependency requests can be changed to >=2.4.0,<=2.15.1.
The version constraint of dependency configparser can be changed to ==3.5.0b1.
The version constraint of dependency configparser can be changed to >=3.5.1,<=3.5.2.
The version constraint of dependency configparser can be changed to >=3.7.2,<=5.2.0.
The version constraint of dependency pymisp can be changed to >=1.1,<=2.4.79.
The version constraint of dependency flask can be changed to >=0.11,<=0.12.5.
The version constraint of dependency cfscrape can be changed to >=1.3,<=1.4.1.
The version constraint of dependency cfscrape can be changed to >=1.4.3,<=1.6.1.

The above modification suggestions can reduce the dependency conflicts as much as possible,
and introduce the latest version as much as possible without calling Error in the projects.

The invocation of the current project includes all the following methods.

The calling methods from the colorama
colorama.init
The calling methods from the requests
requests.packages.urllib3.disable_warnings
requests.get
requests.post
The calling methods from the configparser
configparser.ConfigParser
The calling methods from the pymisp
pymisp.PyMISP
pymisp.PyMISP.search
The calling methods from the flask
json.dumps
flask.Flask
json.load
json.loads
flask.Flask.run
flask.Flask.route
The calling methods from the cfscrape
cfscrape.create_scraper
The calling methods from the all methods
line.replace.replace
fh.readlines.append
field.str.replace
line.format.ljust
configparser.ConfigParser.has_section
is_ip
args.s.split
IPy.IP
socket.gethostbyname
ord
IP
__VERSION__.__AUTHOR__.ljust
io.BytesIO.close
getEmptyInfo.update
os.path.abspath
saveCache
open
lib.munin_vt.rescanVTSample
isinstance
line.hash.format.re.sub.strip.split
is_private
r.path.split
os.path.basename
getMalwareBazarInfo
hashlib.md5
f.write
getHashlookup
fh_results.write
cache.append
is_resolvable
ljust
sample_info.datetime.utcfromtimestamp.strftime
math.log
lib.munin_stdout.printHighlighted
logging.getLogger.setLevel
info.append
printPeInfo
processVirustotalSampleInfo.update
domain.split
virus_names.append
json.load
os.makedirs
urllib.request.urlopen
json.loads
getIntezerInfo
max
fetchHash
io.BytesIO.write
hashlib.sha256.update
lib.helper.generateResultFilename
hashlib.sha256.hexdigest
info.update
lib.munin_stdout.printKeyLine
sys.stdout.write
str
flask.Flask
colorama.init
f.read
processLines.append
pycurl.Curl.perform
header_line.decode.split
re.compile
printSeparator
x.upper
input
colorer.sub.replace
int
list.append
response_dict_code.content.decode
path.replace
input.startswith
hashlib.sha256
downloadMalwareBazarSample
argparse.ArgumentParser
argparse.ArgumentParser.parse_args
ssl.create_default_context
name.lower.strip
flask.Flask.run
flask_caching.Cache.init_app
pymisp.PyMISP
k.upper
round
outString.append
map
IP.iptype
configparser.ConfigParser.get
is_pingable
platformChecks
domains.append
join
getURLhaus
contents.append
lib.munin_vt.getVTInfo
requests.get
datetime.datetime.now.strftime
open.write
requests.packages.urllib3.disable_warnings
open.close
fh.write
logging.getLogger
peChecks
pymisp.PyMISP.search
flask_caching.Cache.set
gzip.decompress
generateHashes
urllib.parse.urlparse
lib.munin_vt.commentVTSample
sample_info.items
lib.connections.PROXY.preparedURL.requests.get.json
ctx.parameters.urllib.parse.urlencode.cat.URLS.urllib.request.urlopen.read
str.upper
rating.title.total.count.format.ljust
ast.literal_eval
lib.munin_vt.getRetrohuntResults
getValhalla
pycurl.Curl.setopt
sorted
getEmptyInfo.append
getEmptyInfo
header_line.decode.decode
pycurl.Curl
colorer.sub.startswith
printHighlighted
line.rstrip.rstrip
re.match
getMalShareInfo
name.lower.lower
lib.connections.PROXY.preparedURL.requests.get.json.json
lib.munin_csv.CSV_FIELDS.items
getFileData
header_raw.splitlines
process_lines
process_lines.append
resolutions.append
convertSize
re.compile.sub
files.append
rating.title
loadCache
requests.post
getEmptyInfo.remove
processLines
time.sleep
subprocess.check_output
lib.munin_csv.writeCSVHeader
getCAPE
io.BytesIO.getvalue
deactivated_features.append
os.path.splitext
json.loads.get
configparser.ConfigParser
flask_caching.Cache
hashlib.md5.hexdigest
codecs.open
os.path.exists
fh_input.readlines
searchVirustotalComments
cfscrape.create_scraper.get
any
value.strip.strip
misp_events.append
info.encode
platform.system.lower
math.pow
get_crossplatfrom_basename
field.str.replace.replace
enumerate
tags.append
hashlib.md5.update
re.sub
processVirustotalSampleInfo
input.rstrip
h_url.format
signal.signal
lib.connections.setProxy
datetime.datetime.now
info.join.replace
r_code_comments.content.decode
IPy.IP.iptype
lib.munin_stdout.printResult
fh.read
format
datetime.datetime.utcfromtimestamp
processLine
flask_caching.Cache.get
re.findall
inCache
dns.resolver.query
getHybridAnalysisInfo
print_highlighted
is_valid_tld
urllib.parse.urlencode
download_url
list
urls.append
len
process_elements
lib.munin_csv.writeCSV
header_function
targets.append
argparse.ArgumentParser.add_argument
os.walk
traceback.print_exc
hashlib.sha1
hashlib.sha1.hexdigest
f.setpassword
pycurl.Curl.getinfo
cfscrape.create_scraper
getHashlookup.append
float
sys.exit
fh.readlines
os.path.dirname
flask.Flask.route
json.dumps
getMISPInfo.append
getEmptyInfo.insert
set
os.path.join
platform.system
fetch_ip_and_domains
main
time.time
mal_samples.append
getVirusBayInfo
downloadHybridAnalysisSample
io.BytesIO
hashlib.sha1.update
samples.append
requests.post.json
line.hash.format.re.sub.strip
removeNonAsciiDrop
print
getMISPInfo
info.split
configparser.ConfigParser.read
r.path.lstrip
pyzipper.AESZipFile
math.floor
argparse.ArgumentParser.print_help

@developer
Could please help me check this issue?
May I pull a request to fix it?
Thank you very much.

Missing tags from VT comments

munin only collects the tags of VT itself, not from the comments, but they're displayed in the comments line:

HASH: 4512e183370cd0fa8175b03692682d408811bf8afa70f11d3517de823e2adb9b RULE: -
VIRUS: ...
TYPE: HTML SIZE: 189.75 KB FILENAMES: 
FIRST: 2023-01-12 02:26:55 LAST: 2023-01-12 06:09:22 SUBMISSIONS: 2 REPUTATION: 0
COMMENTS: 1 USERS: thor TAGS: HTML CONTAINS-EMBEDDED-JS

question is: what's the best way to fix it? just put VT and comment tags together in vt-hash-db.json or create a new field e.g. comment_tags?

      "tags": [
            "html",
            "contains-embedded-js"
        ],

        "comments": 1,
        "commenter": [
            "thor"
        ],

API doc:
https://developers.virustotal.com/reference/comments

No scan IP

Run fail

python3 munin-host.py -f ip.txt --noresolve --debug

image

bind to 0.0.0.0 or specific IP

When run in web mode munin binds to 127.0.0.1, is there a way to bind to 0.0.0.0 or specific IP address/interface?

munin.py -i munin.ini --web -w 10088

URL Response Decoding

Hey Florian - I had an issue with using munin-host.py. Since using urllib.request.urlopen() at line 312 under the VT API Requests, the response is in bytes and needs to be decoded or else an error "TypeErrorL the JSON object must be str, not 'bytes'" is given.

Currently
` response = urllib.request.urlopen('%s?%s' % (URLS[cat],
urllib.parse.urlencode(parameters)), context=ctx).read()

            response_dict = json.loads(response)
            success = True

`

Fix
` response = urllib.request.urlopen('%s?%s' % (URLS[cat],
urllib.parse.urlencode(parameters)), context=ctx).read()

            response_dict = json.loads(response.decode('utf-8'))
            success = True

`

Download does not seem to work

I'm using -d and --download options with demo file , but do not have any downloaded samples

 _python3 munin.py -i my.ini --download -d ~/malware/analysis/00_DOWNLOAD/ -f munin-demo.txt_ 

Script works fine, but no download in folder.

Running munin with gunicorn (or other WSGI server)

Hi guys and gals,

I would like to use munin with a WSGI server in order to be able to serve more requests (the default setup gave me a HTTP error code 429 "Too Many Requests" when I tried to query it from my app). I tried several tutorials e.g. for gunicorn and they stated, that I should create a wsgi.py file with the following contents:

from munin import app

if _name_ == "_main_":
app.run()

However when I start gunicorn like so gunicorn -w 4 --bind 0.0.0.0:9090 'wsgi:app' it loads the workers but as soon as I make a request it trows the following error.
Traceback (most recent call last): File "/data/munin/lib/python3.9/site-packages/flask/app.py", line 2525, in wsgi_app response = self.full_dispatch_request() File "/data/munin/lib/python3.9/site-packages/flask/app.py", line 1822, in full_dispatch_request rv = self.handle_user_exception(e) File "/data/munin/lib/python3.9/site-packages/flask/app.py", line 1820, in full_dispatch_request rv = self.dispatch_request() File "/data/munin/lib/python3.9/site-packages/flask/app.py", line 1796, in dispatch_request return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args) File "/data/munin/munin.py", line 1176, in lookup if inCache(hashVal): File "/data/munin/munin.py", line 1129, in inCache for c in cache: NameError: name 'cache' is not defined

I already tried to pass the filename of the cache file in different iterations e.g. gunicorn -w 4 --bind 0.0.0.0:9090 'wsgi:app(c="vt-hash-db.json")'.

Does anyone have an idea, how to fix this?
Thank you for your support
:-)

Best Regards
Marvin

Feature Request: Primary & Secondary APIs to use limitations more intelligently

Hello!

I've been playing around with munin and very much enjoying the prospects of having a building database of hashes I run. The issue I've run into is that all of the API keys used seem to be processed for each hash ran. Those various APIs have unique rate limits, many of which disallow large hashsets to be processed in a reasonable time....

  • Suggestion:
    • Allow Primary and Secondary APIs. Primary APIs are called against all hashes ran against Munin. Secondary APIs are only called when a known bad hash / suspicious file is detected.
  • Example:
    • A customer of Virus Total (who has much larger limits then below) runs a hash list of 100K+ MD5s. That same individual declares VT primary but MalShare and Hybrid Analysis secondary. VT returns 10 hits on known bad, so only 10 hashes are then sent on to those secondary services.

Free API Limits:

  • Known
    • Hybrid Analysis: 5/min & 200/hour
    • MalShare: 2000/day
    • Virus Total: 500/day & 4/min
  • Unknown
    • Any.Run: ????
    • Circl.lu: ????

Request Feature & One Issue

HI @Neo23x0 Thanks for creating the amazing tool, I just want to ask one thing I was facing one warning of headless, check it below:

UserWarning: Selenium support for PhantomJS has been deprecated, please use headless versions of Chrome or Firefox instead
warnings.warn('Selenium support for PhantomJS has been deprecated, please use headless '

===============================================================

How to solve this above warning.

and can you please tell me few more thing about this tool,

  1. Is this tool submit the sample or rescan to VT?

  2. Is this tool provide us the warning message when we hit the daily usage limit of API on VT, if not can you add this feature so that we can know about it.

  3. I am facing one issue sometimes not often, when I am analyzing 5000 samples (Only using VT API) sometimes it's stop at random number of file scanning and it don't goes beyond to analyze other files. (Ex. 265>5000) I don't know the reason why it don't scan from the next file if the particular file has some problem.

  4. Last Question I know that VT provides V2 API key to Users and this API key doesn't scan the file whose size limit is more than 32 MB but on portal it scan 128 MB. Do you know is there any way to increase the size quota of API.

.
Thank you again for this tool and waiting for your feedback.
.
Seantree

No longer able to process .csv files generated by carbon black

zpub_030819.txt
This .csv file now generates the error:
[+] Found results CSV from previous run: check-results_zpub_030819.csv
[+] Appending results to file: check-results_zpub_030819.csv
[+] Processing 562 lines ...
Traceback (most recent call last):
File "munin.py", line 1528, in
processLines(lines, resultFile, args.nocsv, args.debug)
File "munin.py", line 245, in processLines
info, cooldown_time = processLine(line, debug)
TypeError: cannot unpack non-iterable NoneType object

I tried stripping the "" marks from the doc but nothing is working.

CAPE api throwing error 5XX

I believe CAPE has just deprecated v1, v2 seems to be working fine if using an authorized token, could be included in the munin.ini api list, this is the error:

Respone: '{'query_status': 'no_results'}' Response: 'b'<!DOCTYPE html>\n<!--[if lt IE 7]> <html class="no-js ie6 oldie" lang="en-US"> <![endif]-->\n<!--[if IE 7]> <html class="no-js ie7 oldie" lang="en-US"> <![endif]-->\n<!--[if IE 8]> <html class="no-js ie8 oldie" lang="en-US"> <![endif]-->\n<!--[if gt IE 8]><!--> <html class="no-js" lang="en-US"> <!--<![endif]-->\n<head>\n<meta http-equiv="refresh" content="0">\n\n<title>www.capesandbox.com | 520: Web server is returning an unknown error</title>\n<meta charset="UTF-8" />\n<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />\n<meta http-equiv="X-UA-Compatible" content="IE=Edge,chrome=1" />\n<meta name="robots" content="noindex, nofollow" />\n<meta name="viewport" content="width=device-width,initial-scale=1" />\n<link rel="stylesheet" id="cf_styles-css" href="/cdn-cgi/styles/main.css" type="text/css" media="screen,projection" />\n\n\n</head>\n<body>\n<div id="cf-wrapper">\n\n \n\n <div id="cf-error-details" class="p-0">\n <header class="mx-auto pt-10 lg:pt-6 lg:px-8 w-240 lg:w-full mb-8">\n <h1 class="inline-block sm:block sm:mb-2 font-light text-60 lg:text-4xl text-black-dark leading-tight mr-2">\n \n <span class="cf-error-type">Error</span>\n <span class="cf-error-code">520</span>\n </h1>\n <span class="inline-block sm:block font-mono text-15 lg:text-sm lg:leading-relaxed">Ray ID: 64611823f9624e0d &bull;</span>\n <span class="inline-block sm:block font-mono text-15 lg:text-sm lg:leading-relaxed">2021-04-26 16:12:43 UTC</span>\n <h2 class="text-gray-600 leading-1.3 text-3xl font-light">Web server is returning an unknown error</h2>\n </header>\n \n <div class="my-8 bg-gradient-gray">\n <div class="w-240 lg:w-full mx-auto">\n <div class="clearfix md:px-8">\n \n<div id="cf-browser-status" class=" relative w-1/3 md:w-full py-15 md:p-0 md:py-8 md:text-left md:border-solid md:border-0 md:border-b md:border-gray-400 overflow-hidden float-left md:float-none text-center">\n <div class="relative mb-10 md:m-0">\n <span class="cf-icon-browser block md:hidden h-20 bg-center bg-no-repeat"></span>\n <span class="cf-icon-ok w-12 h-12 absolute left-1/2 md:left-auto md:right-0 md:top-0 -ml-6 -bottom-4"></span>\n </div>\n <span class="md:block w-full truncate">You</span>\n <h3 class="md:inline-block mt-3 md:mt-0 text-2xl text-gray-600 font-light leading-1.3">Browser</h3>\n <span class="leading-1.3 text-2xl text-green-success">Working</span>\n</div>\n\n<div id="cf-cloudflare-status" class=" relative w-1/3 md:w-full py-15 md:p-0 md:py-8 md:text-left md:border-solid md:border-0 md:border-b md:border-gray-400 overflow-hidden float-left md:float-none text-center">\n <div class="relative mb-10 md:m-0">\n <span class="cf-icon-cloud block md:hidden h-20 bg-center bg-no-repeat"></span>\n <span class="cf-icon-ok w-12 h-12 absolute left-1/2 md:left-auto md:right-0 md:top-0 -ml-6 -bottom-4"></span>\n </div>\n <span class="md:block w-full truncate">Frankfurt</span>\n <h3 class="md:inline-block mt-3 md:mt-0 text-2xl text-gray-600 font-light leading-1.3">Cloudflare</h3>\n <span class="leading-1.3 text-2xl text-green-success">Working</span>\n</div>\n\n<div id="cf-host-status" class="cf-error-source relative w-1/3 md:w-full py-15 md:p-0 md:py-8 md:text-left md:border-solid md:border-0 md:border-b md:border-gray-400 overflow-hidden float-left md:float-none text-center">\n <div class="relative mb-10 md:m-0">\n <span class="cf-icon-server block md:hidden h-20 bg-center bg-no-repeat"></span>\n <span class="cf-icon-error w-12 h-12 absolute left-1/2 md:left-auto md:right-0 md:top-0 -ml-6 -bottom-4"></span>\n </div>\n <span class="md:block w-full truncate">www.capesandbox.com</span>\n <h3 class="md:inline-block mt-3 md:mt-0 text-2xl text-gray-600 font-light leading-1.3">Host</h3>\n <span class="leading-1.3 text-2xl text-red-error">Error</span>\n</div>\n\n </div>\n \n </div>\n </div>\n\n <div class="w-240 lg:w-full mx-auto mb-8 lg:px-8">\n <div class="clearfix">\n <div class="w-1/2 md:w-full float-left pr-6 md:pb-10 md:pr-0 leading-relaxed">\n <h2 class="text-3xl font-normal leading-1.3 mb-4">What happened?</h2>\n <p>There is an unknown connection issue between Cloudflare and the origin web server. As a result, the web page can not be displayed.</p>\n </div>\n \n <div class="w-1/2 md:w-full float-left leading-relaxed">\n <h2 class="text-3xl font-normal leading-1.3 mb-4">What can I do?</h2>\n <h3 class="text-15 font-semibold mb-2">If you are a visitor of this website:</h3>\n <p class="mb-6">Please try again in a few minutes.</p>\n\n <h3 class="text-15 font-semibold mb-2">If you are the owner of this website:</h3>\n <p><span>There is an issue between Cloudflare\'s cache and your origin web server. Cloudflare monitors for these errors and automatically investigates the cause. To help support the investigation, you can pull the corresponding error log from your web server and submit it our support team. Please include the Ray ID (which is at the bottom of this error page).</span> <a rel="noopener noreferrer" href="https://support.cloudflare.com/hc/en-us/articles/200171936-Error-520">Additional troubleshooting resources</a>.</p>\n </div>\n </div>\n \n </div>\n\n <div class="cf-error-footer cf-wrapper w-240 lg:w-full py-10 sm:py-4 sm:px-8 mx-auto text-center sm:text-left border-solid border-0 border-t border-gray-300">\n <p class="text-13">\n <span class="cf-footer-item sm:block sm:mb-1">Cloudflare Ray ID: <strong class="font-semibold">64611823f9624e0d</strong></span>\n <span class="cf-footer-separator sm:hidden">&bull;</span>\n <span class="cf-footer-item sm:block sm:mb-1"><span>Your IP</span>: 189.213.24.53</span>\n <span class="cf-footer-separator sm:hidden">&bull;</span>\n <span class="cf-footer-item sm:block sm:mb-1"><span>Performance &amp; security by</span> <a rel="noopener noreferrer" href="https://www.cloudflare.com/5xx-error-landing" id="brand_link" target="_blank">Cloudflare</a></span>\n \n </p>\n</div><!-- /.error-footer -->\n\n\n </div>\n</div>\n</body>\n</html>\n\n''

DeprecationWarning Error

Running version 0.10.0, April 2019.

Issue replicated in OSX, and Kali Linux.

When running ./munin.py, script works, but returns the following error:

./munin.py:1226: DeprecationWarning: 'U' mode is deprecated with open(args.f, 'rU') as fh:

tool is getting stuck in processing lines

hi
i am using latest python version 3.8, and m trying to run munin master which is getting stuck on processing lines and no data is fetching. i have also tried it to run on python version 2.7
is there any compatibility issue?

VT_reCAPTCHA issue

Anyway I can rerun these that get this issue?

How much do I miss with this error?
Seems like it still gets how many checks as malicious.

munin.py cli issue

After running python3 munin.py -i my.ini --cli , I got the below error.

Traceback (most recent call last):
File "/home/heldso/munin/munin.py", line 43, in
import cfscrape
File "/home/heldso/.local/lib/python3.10/site-packages/cfscrape/init.py", line 19, in
from urllib3.util.ssl_ import create_urllib3_context, DEFAULT_CIPHERS
ImportError: cannot import name 'DEFAULT_CIPHERS' from 'urllib3.util.ssl_' (/home/helo/.local/lib/python3.10/site-packages/urllib3/util/ssl_.py)

ANY.RUN is broken?

Hi.
I was testing the demo file and I found that for ANY.RUN it does not give positive results.
Checking the url "https://any.run/report/%s" it returns "400 bad request".

Has there been any change in ANY.RUN or is it just not available right now?

Thanks.

Stuck on Processing lines...

Basically I'm trying to use it like this:
munin.py -f munin.ini -s "%cd%\dll" and... it stays stuck like this for tens of minutes, I think I left it afk for 20 minutes or so and it was stuck there.

Allow argument for adding one or more hosts.

Currently, you have modify app.run() and pass in host IPs for it to be externally visible to other IPs.

Adding an arg to the cmd line options (i.e. --hosts HOST IPs) would be greatly beneficial.

VT_PUBLIC_API_KEY - SyntaxError: invalid syntax

When I try to launch munin I keep getting the bellow error

command used to launch munin
python -i my.ini --cli

File "D:\githubClones\munin\my.ini", line 2
VT_PUBLIC_API_KEY = 6774b99399REDACTED.........
^
SyntaxError: invalid syntax

If I just try python munin I still get a VT error

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.