mihari 0.2.1 → 0.2.2
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.
- checksums.yaml +4 -4
- data/README.md +21 -12
- data/lib/mihari/analyzers/base.rb +11 -1
- data/lib/mihari/analyzers/basic.rb +3 -1
- data/lib/mihari/cli.rb +2 -1
- data/lib/mihari/notifiers/the_hive.rb +7 -2
- data/lib/mihari/the_hive.rb +9 -2
- data/lib/mihari/version.rb +1 -1
- metadata +2 -2
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA256:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: fca44bdfc7be51ca91f0daa4e7761b6f430e63c7eeb185b9a285180f38f9e688
         | 
| 4 | 
            +
              data.tar.gz: acb42896cad9c436b0ee2fefc4d086fa44f299574244ae373e79c93a1496bba6
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: 05b97240bb7e59483e8d5ecb68cb77c27ee41deebd42d9c948b796d550e41362cca972b8cea152b16f1c3b546bb14e95c7a0a74b5d3b9f8bd2f1c29f941220d7
         | 
| 7 | 
            +
              data.tar.gz: 6e55ab64c2b43cd9efa20ee631b615ce834868461aef220fbba8bb1a873240a488b6e2f9ec88c29e4918ffcc1c286fbec47897a8e65948f81a12fe992de7cb0a
         | 
    
        data/README.md
    CHANGED
    
    | @@ -12,6 +12,8 @@ mihari(`見張り`) is a framework for continuous malicious hosts (C2 / landing | |
| 12 12 | 
             
                - mihari creates an alert with the artifacts on the TheHive instance.
         | 
| 13 13 | 
             
                - mihari sends a notification to Slack. (Optional)
         | 
| 14 14 |  | 
| 15 | 
            +
            Check this blog post for more detail: [Continuous C2 hunting with Censys, Shodan, Onyphe and TheHive](https://hackmd.io/s/SkUaSrqoE)
         | 
| 16 | 
            +
             | 
| 15 17 | 
             
            ### Screenshots
         | 
| 16 18 |  | 
| 17 19 | 
             
            - TheHive alert example
         | 
| @@ -66,21 +68,23 @@ mihari onyphe "YOUR QUERY" | |
| 66 68 | 
             
            echo '{ "title": "test", "description": "test", "artifacts": ["1.1.1.1", "github.com", "2.2.2.2"] }' | mihari import_from_json
         | 
| 67 69 | 
             
            ```
         | 
| 68 70 |  | 
| 69 | 
            -
            The input is a JSON data should have `title`, `description` and `artifacts` key.
         | 
| 71 | 
            +
            The input is a JSON data should have `title`, `description` and `artifacts` key. `tags` key is an optional parameter.
         | 
| 70 72 |  | 
| 71 73 | 
             
            ```json
         | 
| 72 74 | 
             
            {
         | 
| 73 75 | 
             
              "title": "test",
         | 
| 74 76 | 
             
              "description": "test",
         | 
| 75 | 
            -
              "artifacts": ["1.1.1.1", "github.com"]
         | 
| 77 | 
            +
              "artifacts": ["1.1.1.1", "github.com"],
         | 
| 78 | 
            +
              "tags": ["test"]
         | 
| 76 79 | 
             
            }
         | 
| 77 80 | 
             
            ```
         | 
| 78 81 |  | 
| 79 | 
            -
            | Key         | Desc.                                                                      |
         | 
| 80 | 
            -
             | 
| 81 | 
            -
            | title       | A title of an alert                                                        |
         | 
| 82 | 
            -
            | description | A description of an alert                                                  |
         | 
| 83 | 
            -
            | artifacts   | An array of artifacts (supported data types: ip, domain, url, email, hash) |
         | 
| 82 | 
            +
            | Key         | Desc.                                                                      | Required or optional |
         | 
| 83 | 
            +
            |-------------|----------------------------------------------------------------------------|----------------------|
         | 
| 84 | 
            +
            | title       | A title of an alert                                                        | Required             |
         | 
| 85 | 
            +
            | description | A description of an alert                                                  | Required             |
         | 
| 86 | 
            +
            | artifacts   | An array of artifacts (supported data types: ip, domain, url, email, hash) | Required             |
         | 
| 87 | 
            +
            | tags        | An array of tags                                                           | Optional             |
         | 
| 84 88 |  | 
| 85 89 | 
             
            ## Configuration
         | 
| 86 90 |  | 
| @@ -101,11 +105,12 @@ All configuration is done via ENV variables. | |
| 101 105 |  | 
| 102 106 | 
             
            Create a class which extends `Mihari::Analyzers::Base` and implements the following methods.
         | 
| 103 107 |  | 
| 104 | 
            -
            | Name           | Desc.                                                                      | @return       |
         | 
| 105 | 
            -
             | 
| 106 | 
            -
            | `#title`       | A title of an alert                                                        | String        |
         | 
| 107 | 
            -
            | `#description` | A description of an alert                                                  | String        |
         | 
| 108 | 
            -
            | `#artifacts`   | An array of artifacts (supported data types: ip, domain, url, email, hash) | Array<String> |
         | 
| 108 | 
            +
            | Name           | Desc.                                                                      | @return       | Required or optional |
         | 
| 109 | 
            +
            |----------------|----------------------------------------------------------------------------|---------------|----------------------|
         | 
| 110 | 
            +
            | `#title`       | A title of an alert                                                        | String        | Required             |
         | 
| 111 | 
            +
            | `#description` | A description of an alert                                                  | String        | Required             |
         | 
| 112 | 
            +
            | `#artifacts`   | An array of artifacts (supported data types: ip, domain, url, email, hash) | Array<String> | Required             |
         | 
| 113 | 
            +
            | `#tags`        | An array of tags                                                           | Array<String> | Optional             |
         | 
| 109 114 |  | 
| 110 115 | 
             
            ```ruby
         | 
| 111 116 | 
             
            require "mihari"
         | 
| @@ -124,6 +129,10 @@ module Mihari | |
| 124 129 | 
             
                  def artifacts
         | 
| 125 130 | 
             
                    ["9.9.9.9", "example.com"]
         | 
| 126 131 | 
             
                  end
         | 
| 132 | 
            +
             | 
| 133 | 
            +
                  def tags
         | 
| 134 | 
            +
                    ["example"]
         | 
| 135 | 
            +
                  end
         | 
| 127 136 | 
             
                end
         | 
| 128 137 | 
             
              end
         | 
| 129 138 | 
             
            end
         | 
| @@ -24,6 +24,11 @@ module Mihari | |
| 24 24 | 
             
                    raise NotImplementedError, "You must implement #{self.class}##{__method__}"
         | 
| 25 25 | 
             
                  end
         | 
| 26 26 |  | 
| 27 | 
            +
                  # @return [Array<String>]
         | 
| 28 | 
            +
                  def tags
         | 
| 29 | 
            +
                    []
         | 
| 30 | 
            +
                  end
         | 
| 31 | 
            +
             | 
| 27 32 | 
             
                  def run(reject_exists_ones: true)
         | 
| 28 33 | 
             
                    unique_artifacts = normalized_artifacts.reject do |artifact|
         | 
| 29 34 | 
             
                      reject_exists_ones & the_hive.valid? && the_hive.exists?(data: artifact.data, data_type: artifact.data_type)
         | 
| @@ -33,7 +38,12 @@ module Mihari | |
| 33 38 | 
             
                      notifier = notifier_class.new
         | 
| 34 39 | 
             
                      next unless notifier.valid?
         | 
| 35 40 |  | 
| 36 | 
            -
                      notifier.notify( | 
| 41 | 
            +
                      notifier.notify(
         | 
| 42 | 
            +
                        title: title,
         | 
| 43 | 
            +
                        description: description,
         | 
| 44 | 
            +
                        artifacts: unique_artifacts,
         | 
| 45 | 
            +
                        tags: tags
         | 
| 46 | 
            +
                      )
         | 
| 37 47 | 
             
                    end
         | 
| 38 48 | 
             
                  end
         | 
| 39 49 |  | 
| @@ -6,13 +6,15 @@ module Mihari | |
| 6 6 | 
             
                  attr_reader :title
         | 
| 7 7 | 
             
                  attr_reader :description
         | 
| 8 8 | 
             
                  attr_reader :artifacts
         | 
| 9 | 
            +
                  attr_reader :tags
         | 
| 9 10 |  | 
| 10 | 
            -
                  def initialize(title:, description:, artifacts:)
         | 
| 11 | 
            +
                  def initialize(title:, description:, artifacts:, tags: [])
         | 
| 11 12 | 
             
                    super()
         | 
| 12 13 |  | 
| 13 14 | 
             
                    @title = title
         | 
| 14 15 | 
             
                    @description = description
         | 
| 15 16 | 
             
                    @artifacts = artifacts
         | 
| 17 | 
            +
                    @tags = tags
         | 
| 16 18 | 
             
                  end
         | 
| 17 19 | 
             
                end
         | 
| 18 20 | 
             
              end
         | 
    
        data/lib/mihari/cli.rb
    CHANGED
    
    | @@ -40,9 +40,10 @@ module Mihari | |
| 40 40 | 
             
                  title = json.dig("title")
         | 
| 41 41 | 
             
                  description = json.dig("description")
         | 
| 42 42 | 
             
                  artifacts = json.dig("artifacts")
         | 
| 43 | 
            +
                  tags = json.dig("tags") || []
         | 
| 43 44 |  | 
| 44 45 | 
             
                  with_error_handling do
         | 
| 45 | 
            -
                    basic = Analyzers::Basic.new(title: title, description: description, artifacts: artifacts)
         | 
| 46 | 
            +
                    basic = Analyzers::Basic.new(title: title, description: description, artifacts: artifacts, tags: tags)
         | 
| 46 47 | 
             
                    basic.run
         | 
| 47 48 | 
             
                  end
         | 
| 48 49 | 
             
                end
         | 
| @@ -14,10 +14,15 @@ module Mihari | |
| 14 14 | 
             
                    api.valid?
         | 
| 15 15 | 
             
                  end
         | 
| 16 16 |  | 
| 17 | 
            -
                  def notify(title:, description:, artifacts:)
         | 
| 17 | 
            +
                  def notify(title:, description:, artifacts:, tags: [])
         | 
| 18 18 | 
             
                    return if artifacts.empty?
         | 
| 19 19 |  | 
| 20 | 
            -
                    res = api.create_alert( | 
| 20 | 
            +
                    res = api.create_alert(
         | 
| 21 | 
            +
                      title: title,
         | 
| 22 | 
            +
                      description: description,
         | 
| 23 | 
            +
                      artifacts: artifacts.map(&:to_h),
         | 
| 24 | 
            +
                      tags: tags
         | 
| 25 | 
            +
                    )
         | 
| 21 26 | 
             
                    id = res.dig("id")
         | 
| 22 27 | 
             
                    puts "A new alret is created. (id: #{id})"
         | 
| 23 28 | 
             
                  end
         | 
    
        data/lib/mihari/the_hive.rb
    CHANGED
    
    | @@ -34,8 +34,15 @@ module Mihari | |
| 34 34 | 
             
                end
         | 
| 35 35 |  | 
| 36 36 | 
             
                # @return [Hash]
         | 
| 37 | 
            -
                def create_alert(title:, description:, artifacts:)
         | 
| 38 | 
            -
                  api.alert.create( | 
| 37 | 
            +
                def create_alert(title:, description:, artifacts:, tags: [])
         | 
| 38 | 
            +
                  api.alert.create(
         | 
| 39 | 
            +
                    title: title,
         | 
| 40 | 
            +
                    description: description,
         | 
| 41 | 
            +
                    artifacts: artifacts,
         | 
| 42 | 
            +
                    tags: tags,
         | 
| 43 | 
            +
                    type: "external",
         | 
| 44 | 
            +
                    source: "mihari"
         | 
| 45 | 
            +
                  )
         | 
| 39 46 | 
             
                end
         | 
| 40 47 | 
             
              end
         | 
| 41 48 | 
             
            end
         | 
    
        data/lib/mihari/version.rb
    CHANGED
    
    
    
        metadata
    CHANGED
    
    | @@ -1,14 +1,14 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: mihari
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0.2. | 
| 4 | 
            +
              version: 0.2.2
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Manabu Niseki
         | 
| 8 8 | 
             
            autorequire: 
         | 
| 9 9 | 
             
            bindir: exe
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 | 
            -
            date: 2019-05- | 
| 11 | 
            +
            date: 2019-05-09 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              name: bundler
         |