internet_security_event 1.0.2 → 1.1.0

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: c45d13b633f75d73835bc5df4366f4c7dc778637124b04dfcca841d170062bb8
4
- data.tar.gz: 51012612ff7d23ae2019471663f7c16b50d04665f467efad9a13abd377662cbc
3
+ metadata.gz: 2d93be47b6e84cb8d7e40c2f604732ee48ba6582235253710dd473e0634099c1
4
+ data.tar.gz: b58978d3f62628a1239a03e60438ca5f516f19ac59ff6946987c4541080b90ca
5
5
  SHA512:
6
- metadata.gz: ba96b78855a50ce723f9f26c869d9b65a4f0261d79730139c16bac20c56ffd9bfd01921f3152cd94c10648d7ae262474cadda190f5c433e48913a00f9a6b62ab
7
- data.tar.gz: c77cf433031d25d2c61089e098db1a097853432449060bd1600e66ef5d2a6c37a0a3065182ffb2dcb623222da708898dfe6ffb5b5ccc5a59301adbc1308a7446
6
+ metadata.gz: c936050537ef4665d970fea58906b3c1de303a80abe73a082a09040801ebfda12c0826d055c89345591c7844472c82bfb8ccce01bed48dd79618f3a89b78f2e5
7
+ data.tar.gz: e03ee5ccf138e9d4a9bc6534dcfa3987f631fca669ed1cf0f450d159536c88a43405de338abb71508abb8297f05689818b7ace1abcab97238f6122ecf2519c86
data/.rspec CHANGED
@@ -1,3 +1 @@
1
- --format documentation
2
- --color
3
1
  --require spec_helper
data/CHANGELOG.md ADDED
@@ -0,0 +1,24 @@
1
+ # Changelog
2
+ All notable changes to this project will be documented in this file.
3
+
4
+ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
5
+ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
6
+
7
+ ## [1.1.0] - 2019-02-21
8
+ ### Added
9
+ - Add basic suport for TLSA events.
10
+
11
+ ## [1.0.2] - 2019-02-21
12
+
13
+ ### Changed
14
+ - Fix checking of TLS hostnames with wildcard certificates.
15
+
16
+ ## [1.0.1] - 2019-02-18
17
+
18
+ ### Changed
19
+ - Improve the way TLS certificates state is computed.
20
+
21
+ [Unreleased]: https://github.com/smortex/internet_security_event/compare/v1.1.0...HEAD
22
+ [1.1.0]: https://github.com/smortex/internet_security_event/compare/v1.0.2...v1.1.0
23
+ [1.0.2]: https://github.com/smortex/internet_security_event/compare/v1.0.1...v1.0.2
24
+ [1.0.1]: https://github.com/smortex/internet_security_event/compare/v1.0.0...v1.0.1
@@ -0,0 +1,81 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'resolv'
4
+
5
+ module InternetSecurityEvent
6
+ class TLSAStatus
7
+ attr_reader :record, :certificate
8
+
9
+ def initialize(record, certificate)
10
+ @record = record
11
+ @certificate = certificate
12
+
13
+ @resolv = Resolv::DNS.new
14
+ end
15
+
16
+ def self.build(record, certificate)
17
+ obj = new(record, certificate)
18
+ obj.to_e
19
+ end
20
+
21
+ def to_e
22
+ {
23
+ state: state,
24
+ description: description,
25
+ }
26
+ end
27
+
28
+ def certificate_association_data(selector, matching_type)
29
+ certificate_association_data_digest(certificate_association_data_certificate_bytes(selector), matching_type)
30
+ end
31
+
32
+ def certificate_match_tlsa_record?
33
+ certificate_association_data(record.selector, record.matching_type) == record.certificate_association_data
34
+ end
35
+
36
+ private
37
+
38
+ def certificate_association_data_certificate_bytes(selector)
39
+ case selector
40
+ when Resolv::DNS::Resource::IN::TLSA::Selector::CERT
41
+ certificate.to_der
42
+ when Resolv::DNS::Resource::IN::TLSA::Selector::SPKI
43
+ certificate.public_key.to_der
44
+ end
45
+ end
46
+
47
+ def certificate_association_data_digest(bytes, matching_type)
48
+ case matching_type
49
+ when Resolv::DNS::Resource::IN::TLSA::MatchingType::FULL
50
+ bytes.unpack1('H*')
51
+ when Resolv::DNS::Resource::IN::TLSA::MatchingType::SHA2_256
52
+ Digest::SHA256.hexdigest(bytes)
53
+ when Resolv::DNS::Resource::IN::TLSA::MatchingType::SHA2_512
54
+ Digest::SHA512.hexdigest(bytes)
55
+ end
56
+ end
57
+
58
+ def state
59
+ return 'critical' unless record
60
+
61
+ return nil unless record.end_entity?
62
+
63
+ return 'ok' if certificate_match_tlsa_record?
64
+
65
+ 'critical'
66
+ end
67
+
68
+ def description
69
+ if record.end_entity?
70
+ if certificate_match_tlsa_record?
71
+ 'certificate match TLSA record'
72
+ else
73
+ 'certificate does not match TLSA record'
74
+ end
75
+ else
76
+ # FIXME: For now, we only check the certificate, not the CA
77
+ 'Unsupported certificate usage'
78
+ end
79
+ end
80
+ end
81
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module InternetSecurityEvent
4
- VERSION = '1.0.2'
4
+ VERSION = '1.1.0'
5
5
  end
@@ -2,4 +2,6 @@
2
2
 
3
3
  require 'internet_security_event/now'
4
4
  require 'internet_security_event/tls_status'
5
+ require 'internet_security_event/tlsa_status'
5
6
  require 'internet_security_event/x509_status'
7
+ require 'resolv/dns/resource/in/tlsa'
@@ -0,0 +1,39 @@
1
+ # frozen_string_literal: true
2
+
3
+ class Resolv
4
+ class DNS
5
+ class Resource
6
+ module IN
7
+ class TLSA
8
+ module CertificateUsage
9
+ PKIX_TA = 0
10
+ PKIX_EE = 1
11
+ DANE_TA = 2
12
+ DANE_EE = 3
13
+ end
14
+
15
+ module Selector
16
+ CERT = 0
17
+ SPKI = 1
18
+ end
19
+
20
+ module MatchingType
21
+ FULL = 0
22
+ SHA2_256 = 1
23
+ SHA2_512 = 2
24
+ end
25
+
26
+ def initialize(data)
27
+ @certificate_usage, @selector, @matching_type, @certificate_association_data = data.unpack('CCCH*')
28
+ end
29
+
30
+ attr_reader :certificate_usage, :selector, :matching_type, :certificate_association_data
31
+
32
+ def end_entity?
33
+ [CertificateUsage::PKIX_EE, CertificateUsage::DANE_EE].include?(certificate_usage)
34
+ end
35
+ end
36
+ end
37
+ end
38
+ end
39
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: internet_security_event
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.2
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Romain Tartière
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2019-02-21 00:00:00.000000000 Z
11
+ date: 2019-02-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: actionview
@@ -104,6 +104,7 @@ files:
104
104
  - ".gitignore"
105
105
  - ".rspec"
106
106
  - ".travis.yml"
107
+ - CHANGELOG.md
107
108
  - CODE_OF_CONDUCT.md
108
109
  - Gemfile
109
110
  - LICENSE.txt
@@ -115,8 +116,10 @@ files:
115
116
  - lib/internet_security_event.rb
116
117
  - lib/internet_security_event/now.rb
117
118
  - lib/internet_security_event/tls_status.rb
119
+ - lib/internet_security_event/tlsa_status.rb
118
120
  - lib/internet_security_event/version.rb
119
121
  - lib/internet_security_event/x509_status.rb
122
+ - lib/resolv/dns/resource/in/tlsa.rb
120
123
  homepage: https://github.com/smortex/internet_security_event
121
124
  licenses:
122
125
  - MIT